From 853dbecc9a8aefaa3ce67349f25dc7c07f95d11b Mon Sep 17 00:00:00 2001 From: Bhushan Khope Date: Thu, 17 Oct 2024 16:06:06 -0400 Subject: [PATCH 1/9] create expansion panel --- libs/design-system/expansion-panel/README.md | 3 ++ .../expansion-panel/ng-package.json | 5 ++ .../expansion-panel/src/index.ts | 1 + .../src/lib/expansion-panel.component.html | 33 +++++++++++++ .../src/lib/expansion-panel.component.scss | 25 ++++++++++ .../src/lib/expansion-panel.component.spec.ts | 21 +++++++++ .../lib/expansion-panel.component.stories.ts | 46 ++++++++++++++++++ .../src/lib/expansion-panel.component.ts | 47 +++++++++++++++++++ tsconfig.base.json | 3 ++ 9 files changed, 184 insertions(+) create mode 100644 libs/design-system/expansion-panel/README.md create mode 100644 libs/design-system/expansion-panel/ng-package.json create mode 100644 libs/design-system/expansion-panel/src/index.ts create mode 100644 libs/design-system/expansion-panel/src/lib/expansion-panel.component.html create mode 100644 libs/design-system/expansion-panel/src/lib/expansion-panel.component.scss create mode 100644 libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts create mode 100644 libs/design-system/expansion-panel/src/lib/expansion-panel.component.stories.ts create mode 100644 libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts diff --git a/libs/design-system/expansion-panel/README.md b/libs/design-system/expansion-panel/README.md new file mode 100644 index 000000000..c10db6c90 --- /dev/null +++ b/libs/design-system/expansion-panel/README.md @@ -0,0 +1,3 @@ +# @hra-ui/design-system/expansion-panel + +Secondary entry point of `@hra-ui/design-system`. It can be used by importing from `@hra-ui/design-system/expansion-panel`. diff --git a/libs/design-system/expansion-panel/ng-package.json b/libs/design-system/expansion-panel/ng-package.json new file mode 100644 index 000000000..c781f0df4 --- /dev/null +++ b/libs/design-system/expansion-panel/ng-package.json @@ -0,0 +1,5 @@ +{ + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/libs/design-system/expansion-panel/src/index.ts b/libs/design-system/expansion-panel/src/index.ts new file mode 100644 index 000000000..927a692d6 --- /dev/null +++ b/libs/design-system/expansion-panel/src/index.ts @@ -0,0 +1 @@ +export * from './lib/expansion-panel.component'; diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html new file mode 100644 index 000000000..b00c793cc --- /dev/null +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html @@ -0,0 +1,33 @@ + + +
+ @if (!disabled()) { + + } + + + {{ title() }} + + + + + +
+ + + +
+
+ +
+
+
diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.scss b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.scss new file mode 100644 index 000000000..43e100d51 --- /dev/null +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.scss @@ -0,0 +1,25 @@ +:host { + display: block; + + .header { + display: flex; + align-items: center; + font: var(--sys-label-large); + color: var(--sys-secondary); + } + + .filler { + flex-grow: 1; + } + + .content { + font: var(--sys-label-large); + height: 0; + overflow: hidden; + transition: height 0.2s ease-in-out; + + &.expanded { + height: 2rem; + } + } +} diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts new file mode 100644 index 000000000..49d99307d --- /dev/null +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ExpansionPanelComponent } from './expansion-panel.component'; + +describe('ExpansionPanelComponent', () => { + let component: ExpansionPanelComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ExpansionPanelComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ExpansionPanelComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.stories.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.stories.ts new file mode 100644 index 000000000..4843a3fb6 --- /dev/null +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.stories.ts @@ -0,0 +1,46 @@ +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; +import { + ExpansionPanelActionsComponent, + ExpansionPanelComponent, + ExpansionPanelHeaderContentComponent, +} from './expansion-panel.component'; + +const meta: Meta = { + title: 'ExpansionPanel', + decorators: [ + moduleMetadata({ + imports: [ + MatButtonModule, + MatIconModule, + MatButtonModule, + ExpansionPanelActionsComponent, + ExpansionPanelComponent, + ExpansionPanelHeaderContentComponent, + ], + }), + ], + render: (args) => ({ + props: args, + template: ` + + + + + + Additional Actions + + Actual Content + + `, + }), +}; +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts new file mode 100644 index 000000000..103570d14 --- /dev/null +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts @@ -0,0 +1,47 @@ +import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CdkAccordionModule } from '@angular/cdk/accordion'; +import { IconButtonSizeDirective } from '@hra-ui/design-system/icon-button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatIconButton } from '@angular/material/button'; + +let idCounter = 0; + +@Component({ + selector: 'hra-expansion-panel-actions', + standalone: true, + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ExpansionPanelActionsComponent {} + +@Component({ + selector: 'hra-expansion-panel-header-content', + standalone: true, + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ExpansionPanelHeaderContentComponent {} + +@Component({ + selector: 'hra-expansion-panel', + standalone: true, + imports: [ + CommonModule, + CdkAccordionModule, + IconButtonSizeDirective, + MatIconButton, + MatIconModule, + ExpansionPanelActionsComponent, + ], + templateUrl: './expansion-panel.component.html', + styleUrl: './expansion-panel.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ExpansionPanelComponent { + readonly title = input.required(); + readonly disabled = input(false, { transform: booleanAttribute }); + + protected readonly id = idCounter++; + protected readonly titleId = `expansion-panel-title-${this.id}`; +} diff --git a/tsconfig.base.json b/tsconfig.base.json index ef6854d28..0f716a9a0 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -92,6 +92,9 @@ "@hra-ui/design-system/error-indicator": [ "libs/design-system/error-indicator/src/index.ts" ], + "@hra-ui/design-system/expansion-panel": [ + "libs/design-system/expansion-panel/src/index.ts" + ], "@hra-ui/design-system/footer": [ "libs/design-system/footer/src/index.ts" ], From 9a2283ca20cf225bb23842edcc7fc186c6f6b81e Mon Sep 17 00:00:00 2001 From: Bhushan Khope Date: Fri, 18 Oct 2024 12:17:48 -0400 Subject: [PATCH 2/9] add animation to expansion panel --- .../src/lib/expansion-panel-animations.ts | 16 +++++ .../src/lib/expansion-panel.component.html | 19 +++-- .../src/lib/expansion-panel.component.scss | 8 +-- .../lib/expansion-panel.component.stories.ts | 19 ++--- .../src/lib/expansion-panel.component.ts | 69 +++++++++++++++---- .../src/lib/expansion-panel.module.ts | 13 ++++ libs/design-system/src/lib/providers.ts | 2 + 7 files changed, 116 insertions(+), 30 deletions(-) create mode 100644 libs/design-system/expansion-panel/src/lib/expansion-panel-animations.ts create mode 100644 libs/design-system/expansion-panel/src/lib/expansion-panel.module.ts diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel-animations.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel-animations.ts new file mode 100644 index 000000000..d1a5e4de5 --- /dev/null +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel-animations.ts @@ -0,0 +1,16 @@ +import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations'; + +/** Animation for the expansion panel */ +export const EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)'; + +/** Animation declaration for the expansion panel */ +export const matExpansionAnimations: { + readonly bodyExpansion: AnimationTriggerMetadata; +} = { + /** Animation that expands and collapses the panel content. */ + bodyExpansion: trigger('bodyExpansion', [ + state('collapsed, void', style({ height: '0px', visibility: 'hidden' })), + state('expanded', style({ height: '*', visibility: '' })), + transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)), + ]), +}; diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html index b00c793cc..2bf385fa5 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html @@ -3,7 +3,7 @@ #accordionItem="cdkAccordionItem" tabindex="0" [attr.aria-expanded]="accordionItem.expanded" - [attr.aria-controls]="titleId" + [attr.aria-controls]="bodyId" >
@if (!disabled()) { @@ -14,7 +14,7 @@ } - + {{ title() }} @@ -26,8 +26,19 @@
-
- +
+
+ +
diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.scss b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.scss index 43e100d51..3510c146e 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.scss +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.scss @@ -14,12 +14,8 @@ .content { font: var(--sys-label-large); - height: 0; - overflow: hidden; - transition: height 0.2s ease-in-out; - - &.expanded { - height: 2rem; + &[style*='visibility: hidden'] * { + visibility: hidden !important; } } } diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.stories.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.stories.ts index 4843a3fb6..85a8218d8 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.stories.ts +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.stories.ts @@ -1,6 +1,7 @@ -import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; -import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; +import { provideDesignSystem } from '@hra-ui/design-system'; +import { ButtonModule } from '@hra-ui/design-system/button'; +import { applicationConfig, moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; import { ExpansionPanelActionsComponent, ExpansionPanelComponent, @@ -12,14 +13,16 @@ const meta: Meta = { decorators: [ moduleMetadata({ imports: [ - MatButtonModule, MatIconModule, - MatButtonModule, + ButtonModule, ExpansionPanelActionsComponent, ExpansionPanelComponent, ExpansionPanelHeaderContentComponent, ], }), + applicationConfig({ + providers: [provideDesignSystem()], + }), ], render: (args) => ({ props: args, @@ -27,10 +30,10 @@ const meta: Meta = { + + more_vert + + Additional Actions diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts index 103570d14..3fc88d07e 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts @@ -1,12 +1,27 @@ -import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core'; -import { CommonModule } from '@angular/common'; +import { AnimationEvent } from '@angular/animations'; import { CdkAccordionModule } from '@angular/cdk/accordion'; -import { IconButtonSizeDirective } from '@hra-ui/design-system/icon-button'; -import { MatIconModule } from '@angular/material/icon'; +import { CommonModule } from '@angular/common'; +import { + ANIMATION_MODULE_TYPE, + booleanAttribute, + ChangeDetectionStrategy, + Component, + computed, + ElementRef, + inject, + input, + Renderer2, + viewChild, +} from '@angular/core'; import { MatIconButton } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { IconButtonSizeDirective } from '@hra-ui/design-system/icon-button'; +import { matExpansionAnimations } from './expansion-panel-animations'; +/** Counter to keep track of distinct panels */ let idCounter = 0; +/** Expansion panel actions component */ @Component({ selector: 'hra-expansion-panel-actions', standalone: true, @@ -15,6 +30,7 @@ let idCounter = 0; }) export class ExpansionPanelActionsComponent {} +/** Expansion panel header content component */ @Component({ selector: 'hra-expansion-panel-header-content', standalone: true, @@ -23,25 +39,54 @@ export class ExpansionPanelActionsComponent {} }) export class ExpansionPanelHeaderContentComponent {} +/** Expansion panel component */ @Component({ selector: 'hra-expansion-panel', standalone: true, - imports: [ - CommonModule, - CdkAccordionModule, - IconButtonSizeDirective, - MatIconButton, - MatIconModule, - ExpansionPanelActionsComponent, - ], + imports: [CommonModule, CdkAccordionModule, IconButtonSizeDirective, MatIconButton, MatIconModule], + animations: [matExpansionAnimations.bodyExpansion], templateUrl: './expansion-panel.component.html', styleUrl: './expansion-panel.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) export class ExpansionPanelComponent { + /** Title of the expansion panel */ readonly title = input.required(); + /** Flag to denote panel as disabled */ readonly disabled = input(false, { transform: booleanAttribute }); + /** Increments the counter on every declaration */ protected readonly id = idCounter++; + + /** Id attribute for title based on current id counter */ protected readonly titleId = `expansion-panel-title-${this.id}`; + + /** Id attribute for body based on current id counter */ + protected readonly bodyId = `expansion-panel-body-${this.id}`; + + /** Instance of renderer */ + private readonly renderer = inject(Renderer2); + + /** Instance of body element */ + private readonly bodyElementRef = viewChild.required>('body'); + + /** Actual body element */ + private readonly body = computed(() => this.bodyElementRef().nativeElement); + + /** Disable animations based on module type */ + private readonly animationsDisabled = inject(ANIMATION_MODULE_TYPE) === 'NoopAnimations'; + + /** Sets attribute based on event state */ + protected animationStart(event: AnimationEvent): void { + if (event.fromState !== 'void' && !this.animationsDisabled) { + this.renderer.setAttribute(this.body(), 'inert', ''); + } + } + + /** Removes attribute based on event state */ + protected animationDone(event: AnimationEvent): void { + if (event.fromState !== 'void' && !this.animationsDisabled) { + this.renderer.removeAttribute(this.body(), 'inert'); + } + } } diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.module.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.module.ts new file mode 100644 index 000000000..987ab421c --- /dev/null +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { + ExpansionPanelActionsComponent, + ExpansionPanelComponent, + ExpansionPanelHeaderContentComponent, +} from './expansion-panel.component'; + +/** Expansion panel module */ +@NgModule({ + imports: [ExpansionPanelActionsComponent, ExpansionPanelHeaderContentComponent, ExpansionPanelComponent], + exports: [ExpansionPanelActionsComponent, ExpansionPanelHeaderContentComponent, ExpansionPanelComponent], +}) +export class ExpansionPanelModule {} diff --git a/libs/design-system/src/lib/providers.ts b/libs/design-system/src/lib/providers.ts index a09335d83..e005fd380 100644 --- a/libs/design-system/src/lib/providers.ts +++ b/libs/design-system/src/lib/providers.ts @@ -10,6 +10,7 @@ import { provideTable } from '@hra-ui/design-system/table'; import { provideSelect } from '@hra-ui/design-system/select'; import { provideInput } from '@hra-ui/design-system/input'; import { provideButtonToggle } from '@hra-ui/design-system/button-toggle'; +import { provideAnimations } from '@angular/platform-browser/animations'; /** * Returns design system providers @@ -17,6 +18,7 @@ import { provideButtonToggle } from '@hra-ui/design-system/button-toggle'; export function provideDesignSystem(): EnvironmentProviders { return makeEnvironmentProviders([ provideHttpClient(), + provideAnimations(), provideIcons({ fontIcons: { defaultClasses: ['material-symbols-rounded'], From eede495c718783749eaf1d64cea98d1029ef9b6e Mon Sep 17 00:00:00 2001 From: Bhushan Khope Date: Fri, 18 Oct 2024 12:18:17 -0400 Subject: [PATCH 3/9] update peer deps --- libs/design-system/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libs/design-system/package.json b/libs/design-system/package.json index dcd7c9d93..13c0a53d7 100644 --- a/libs/design-system/package.json +++ b/libs/design-system/package.json @@ -31,7 +31,9 @@ "ngx-scrollbar": "^15.1.0", "ngx-color-picker": "^17.0.0", "@angular/router": "18.2.1", - "@angular/cdk": "18.2.1" + "@angular/cdk": "18.2.1", + "@angular/animations": "18.2.1", + "@angular/platform-browser": "18.2.1" }, "dependencies": {}, "sideEffects": false From 465e11943ed6f41fe65a560a3eb87b4420061e0a Mon Sep 17 00:00:00 2001 From: Bhushan Khope Date: Tue, 22 Oct 2024 12:47:35 -0400 Subject: [PATCH 4/9] improve test coverage --- .../button-toggle-size.directive.spec.ts | 20 ++++++++ .../button-toggle-size.directive.ts | 3 -- .../src/lib/expansion-panel.component.html | 6 ++- .../src/lib/expansion-panel.component.spec.ts | 50 ++++++++++++++----- .../src/lib/expansion-panel.component.ts | 4 ++ 5 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.spec.ts diff --git a/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.spec.ts b/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.spec.ts new file mode 100644 index 000000000..8c50ea6da --- /dev/null +++ b/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.spec.ts @@ -0,0 +1,20 @@ +import { Component } from '@angular/core'; +import { render, screen } from '@testing-library/angular'; +import { ToggleButtonSizeDirective } from './button-toggle-size.directive'; + +describe('ButtonToggleSizeDirective', () => { + it('should apply the styles based on the directive', async () => { + @Component({ + template: `
`, + imports: [ToggleButtonSizeDirective], + standalone: true, + }) + class ButtonToggleComponent {} + + await render(ButtonToggleComponent); + + const directive = screen.getByTestId('dir'); + expect(directive.getAttribute('hrabuttontogglesize')).toBe('large'); + expect(directive.style.font).toBe('var(--sys-label-large)'); + }); +}); diff --git a/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.ts b/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.ts index b2597f08e..fb34ec3ca 100644 --- a/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.ts +++ b/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.ts @@ -43,9 +43,6 @@ export class ToggleButtonSizeDirective { /** Size of icon button to use */ readonly size = input.required({ alias: 'hraButtonToggleSize' }); - /** Gets size of button in rem */ - protected readonly buttonSize = computed(() => BUTTON_CONFIG[this.size()]); - /** Gets the font variable for the current button size */ protected readonly fontVar = computed(() => `var(${BUTTON_CONFIG[this.size()].font})`); diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html index 2bf385fa5..473b82f36 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html @@ -4,11 +4,12 @@ tabindex="0" [attr.aria-expanded]="accordionItem.expanded" [attr.aria-controls]="bodyId" + [expanded]="expanded" >
@if (!disabled()) { - @@ -35,6 +36,7 @@ [@bodyExpansion]="accordionItem.expanded ? 'expanded' : 'collapsed'" (@bodyExpansion.start)="animationStart($event)" (@bodyExpansion.done)="animationDone($event)" + data-testid="body" >
diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts index 49d99307d..bcc14d4aa 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts @@ -1,21 +1,45 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AnimationDriver } from '@angular/animations/browser'; +import { MockAnimationDriver, MockAnimationPlayer } from '@angular/animations/browser/testing'; +import { provideDesignSystem } from '@hra-ui/design-system'; +import { render, RenderComponentOptions, screen } from '@testing-library/angular'; +import { userEvent } from '@testing-library/user-event'; import { ExpansionPanelComponent } from './expansion-panel.component'; describe('ExpansionPanelComponent', () => { - let component: ExpansionPanelComponent; - let fixture: ComponentFixture; + async function setup(options?: RenderComponentOptions) { + return render(ExpansionPanelComponent, { + ...options, + inputs: { + title: 'Test Title', + ...options?.inputs, + }, + providers: [ + provideDesignSystem(), + { + provide: AnimationDriver, + useClass: MockAnimationDriver, + }, + ], + }); + } - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ExpansionPanelComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(ExpansionPanelComponent); - component = fixture.componentInstance; - fixture.detectChanges(); + it('should render the expansion panel', async () => { + await setup(); + const title = screen.getByText('Test Title'); + expect(title).toBeInTheDocument(); }); - it('should create', () => { - expect(component).toBeTruthy(); + it('should set inert attribute on body element when animation starts', async () => { + await setup(); + + const button = screen.getByTestId('toggle'); + await userEvent.click(button); + + const player = MockAnimationDriver.log.pop() as MockAnimationPlayer; + const element = player.element as HTMLElement; + + expect(element).toHaveAttribute('inert'); + player.finish(); + expect(element).not.toHaveAttribute('inert'); }); }); diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts index 3fc88d07e..d124a796b 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts @@ -52,6 +52,10 @@ export class ExpansionPanelHeaderContentComponent {} export class ExpansionPanelComponent { /** Title of the expansion panel */ readonly title = input.required(); + + /** Flag to check if the body is expanded */ + readonly expanded = input(true, { transform: booleanAttribute }); + /** Flag to denote panel as disabled */ readonly disabled = input(false, { transform: booleanAttribute }); From 5bbbe9a31f87ef86149675b00db38ee253c718fd Mon Sep 17 00:00:00 2001 From: Bhushan Khope Date: Tue, 22 Oct 2024 12:57:44 -0400 Subject: [PATCH 5/9] add height check in tests for expansion panel --- .../expansion-panel/src/lib/expansion-panel.component.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts index bcc14d4aa..4cb864c0f 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.spec.ts @@ -41,5 +41,7 @@ describe('ExpansionPanelComponent', () => { expect(element).toHaveAttribute('inert'); player.finish(); expect(element).not.toHaveAttribute('inert'); + expect(element.style.height).toBe('0px'); + expect(element.style.visibility).toBe('hidden'); }); }); From 74e8a3093d686491616adb76a8cfb4498827a1d3 Mon Sep 17 00:00:00 2001 From: Bhushan Khope Date: Tue, 22 Oct 2024 13:26:26 -0400 Subject: [PATCH 6/9] update icon button size and styles in the design system --- .../lib/components/cell-types/cell-types.component.html | 2 +- .../dialog/src/lib/notice/notice.component.html | 2 +- .../lib/icon-button-size/icon-button-size.directive.ts | 4 +--- .../icon-button-styles/icon-button-styles.component.scss | 4 ++-- .../icon-button/src/lib/icon-button.stories.ts | 8 +------- .../menu/src/lib/menu-demo/menu-demo.component.stories.ts | 4 ++-- .../menu/src/lib/menu-demo/menu-demo.component.ts | 2 +- 7 files changed, 9 insertions(+), 17 deletions(-) diff --git a/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.html b/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.html index ecce419ad..7c2335eb4 100644 --- a/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.html +++ b/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.html @@ -4,7 +4,7 @@ mat-icon-button [matMenuTriggerFor]="menu" hraMicroTooltip="More" - hraIconButtonSize="medium" + hraIconButtonSize="large" data-testid="trigger" > more_vert diff --git a/libs/design-system/dialog/src/lib/notice/notice.component.html b/libs/design-system/dialog/src/lib/notice/notice.component.html index 43c56b774..0f097e777 100644 --- a/libs/design-system/dialog/src/lib/notice/notice.component.html +++ b/libs/design-system/dialog/src/lib/notice/notice.component.html @@ -2,7 +2,7 @@
{{ data.title }}
-
diff --git a/libs/design-system/icon-button/src/lib/icon-button-size/icon-button-size.directive.ts b/libs/design-system/icon-button/src/lib/icon-button-size/icon-button-size.directive.ts index 8a9fe3c4d..8659767fa 100644 --- a/libs/design-system/icon-button/src/lib/icon-button-size/icon-button-size.directive.ts +++ b/libs/design-system/icon-button/src/lib/icon-button-size/icon-button-size.directive.ts @@ -1,19 +1,17 @@ import { computed, Directive, input } from '@angular/core'; /** Input options for icon button size */ -export type IconButtonSize = 'small' | 'medium' | 'large'; +export type IconButtonSize = 'small' | 'large'; /** Record of button sizes (number in rem) */ const BUTTON_SIZES: Record = { small: 1.5, - medium: 2.25, large: 2.5, }; /** Record of icon sizes (number in rem) */ const ICON_SIZES: Record = { small: 1.25, - medium: 1.5, large: 1.5, }; diff --git a/libs/design-system/icon-button/src/lib/icon-button-styles/icon-button-styles.component.scss b/libs/design-system/icon-button/src/lib/icon-button-styles/icon-button-styles.component.scss index cef4ccc64..9b7b8959a 100644 --- a/libs/design-system/icon-button/src/lib/icon-button-styles/icon-button-styles.component.scss +++ b/libs/design-system/icon-button/src/lib/icon-button-styles/icon-button-styles.component.scss @@ -1,6 +1,6 @@ button[mat-icon-button] { - --mat-icon-button-hover-state-layer-opacity: 0.04; - --mat-icon-button-pressed-state-layer-opacity: 0.08; + --mat-icon-button-hover-state-layer-opacity: 0.08; + --mat-icon-button-pressed-state-layer-opacity: 0.16; --mat-icon-color: var(--sys-secondary); --mat-icon-button-state-layer-color: var(--sys-secondary); --mat-icon-button-focus-state-layer-opacity: 0; diff --git a/libs/design-system/icon-button/src/lib/icon-button.stories.ts b/libs/design-system/icon-button/src/lib/icon-button.stories.ts index d9660aeaf..3ce95a556 100644 --- a/libs/design-system/icon-button/src/lib/icon-button.stories.ts +++ b/libs/design-system/icon-button/src/lib/icon-button.stories.ts @@ -18,7 +18,7 @@ const meta: Meta = { }, size: { control: 'select', - options: ['small', 'medium', 'large'], + options: ['small', 'large'], }, }, decorators: [ @@ -59,12 +59,6 @@ export const Small: Story = { }, }; -export const Medium: Story = { - args: { - size: 'medium', - }, -}; - export const Large: Story = { args: { size: 'large', diff --git a/libs/design-system/menu/src/lib/menu-demo/menu-demo.component.stories.ts b/libs/design-system/menu/src/lib/menu-demo/menu-demo.component.stories.ts index 8d6525338..c5b5bf350 100644 --- a/libs/design-system/menu/src/lib/menu-demo/menu-demo.component.stories.ts +++ b/libs/design-system/menu/src/lib/menu-demo/menu-demo.component.stories.ts @@ -66,11 +66,11 @@ const meta: Meta = { argTypes: { size: { control: 'select', - options: ['small', 'medium', 'large'], + options: ['small', 'large'], }, }, args: { - size: 'medium', + size: 'small', menuOptions: exampleOptions, }, }; diff --git a/libs/design-system/menu/src/lib/menu-demo/menu-demo.component.ts b/libs/design-system/menu/src/lib/menu-demo/menu-demo.component.ts index 4c1995039..3b6c14b6e 100644 --- a/libs/design-system/menu/src/lib/menu-demo/menu-demo.component.ts +++ b/libs/design-system/menu/src/lib/menu-demo/menu-demo.component.ts @@ -29,7 +29,7 @@ export interface MenuDemoOption { }) export class MenuDemoComponent { /** Menu size */ - readonly size = input('medium'); + readonly size = input('small'); /** List of menu options */ readonly menuOptions = input([]); From 4f311b6d9f315085694309ce7f9eab61145f1ab8 Mon Sep 17 00:00:00 2001 From: Bhushan Khope Date: Tue, 22 Oct 2024 13:46:13 -0400 Subject: [PATCH 7/9] update design file in the icon button stories --- .../icon-button/src/lib/icon-button.stories.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/design-system/icon-button/src/lib/icon-button.stories.ts b/libs/design-system/icon-button/src/lib/icon-button.stories.ts index 3ce95a556..de5fab9d0 100644 --- a/libs/design-system/icon-button/src/lib/icon-button.stories.ts +++ b/libs/design-system/icon-button/src/lib/icon-button.stories.ts @@ -8,6 +8,12 @@ import { provideIconButtons } from './providers'; const meta: Meta = { title: 'IconButton', + parameters: { + design: { + type: 'figma', + url: 'https://www.figma.com/design/BCEJn9KCIbBJ5MzqnojKQp/HRA-Components?node-id=24-876', + }, + }, args: { icon: 'search', size: 'large', From 6626b8adc07de0a48f39d2db960f6fde43b1f3f9 Mon Sep 17 00:00:00 2001 From: Bhushan Khope Date: Wed, 23 Oct 2024 11:27:56 -0400 Subject: [PATCH 8/9] refactor animation code --- .../button-toggle-size.directive.spec.ts | 21 +++++++++++-------- .../src/lib/expansion-panel-animations.ts | 19 +++++++---------- .../src/lib/expansion-panel.component.html | 2 +- .../src/lib/expansion-panel.component.ts | 4 ++-- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.spec.ts b/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.spec.ts index 8c50ea6da..f421dce41 100644 --- a/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.spec.ts +++ b/libs/design-system/button-toggle/src/lib/button-toggle-size/button-toggle-size.directive.spec.ts @@ -2,19 +2,22 @@ import { Component } from '@angular/core'; import { render, screen } from '@testing-library/angular'; import { ToggleButtonSizeDirective } from './button-toggle-size.directive'; +@Component({ + template: `
`, + imports: [ToggleButtonSizeDirective], + standalone: true, +}) +class ButtonToggleComponent {} + describe('ButtonToggleSizeDirective', () => { it('should apply the styles based on the directive', async () => { - @Component({ - template: `
`, - imports: [ToggleButtonSizeDirective], - standalone: true, - }) - class ButtonToggleComponent {} - await render(ButtonToggleComponent); const directive = screen.getByTestId('dir'); - expect(directive.getAttribute('hrabuttontogglesize')).toBe('large'); - expect(directive.style.font).toBe('var(--sys-label-large)'); + const styles = window.getComputedStyle(directive); + const lineHeight = styles.getPropertyValue('--mat-standard-button-toggle-height'); + const font = styles.getPropertyValue('font'); + expect(font).toBe('var(--sys-label-large)'); + expect(lineHeight).toBe('24px'); }); }); diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel-animations.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel-animations.ts index d1a5e4de5..5fa236396 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel-animations.ts +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel-animations.ts @@ -1,16 +1,11 @@ -import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations'; +import { animate, state, style, transition, trigger } from '@angular/animations'; /** Animation for the expansion panel */ export const EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)'; -/** Animation declaration for the expansion panel */ -export const matExpansionAnimations: { - readonly bodyExpansion: AnimationTriggerMetadata; -} = { - /** Animation that expands and collapses the panel content. */ - bodyExpansion: trigger('bodyExpansion', [ - state('collapsed, void', style({ height: '0px', visibility: 'hidden' })), - state('expanded', style({ height: '*', visibility: '' })), - transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)), - ]), -}; +/** Animation for Body Expansion */ +export const BODY_EXPANSION = trigger('bodyExpansion', [ + state('collapsed, void', style({ height: '0px', visibility: 'hidden' })), + state('expanded', style({ height: '*', visibility: '' })), + transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)), +]); diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html index 473b82f36..318e80d9e 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.html @@ -9,7 +9,7 @@
@if (!disabled()) { diff --git a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts index d124a796b..b1384703c 100644 --- a/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts +++ b/libs/design-system/expansion-panel/src/lib/expansion-panel.component.ts @@ -16,7 +16,7 @@ import { import { MatIconButton } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { IconButtonSizeDirective } from '@hra-ui/design-system/icon-button'; -import { matExpansionAnimations } from './expansion-panel-animations'; +import { BODY_EXPANSION } from './expansion-panel-animations'; /** Counter to keep track of distinct panels */ let idCounter = 0; @@ -44,7 +44,7 @@ export class ExpansionPanelHeaderContentComponent {} selector: 'hra-expansion-panel', standalone: true, imports: [CommonModule, CdkAccordionModule, IconButtonSizeDirective, MatIconButton, MatIconModule], - animations: [matExpansionAnimations.bodyExpansion], + animations: [BODY_EXPANSION], templateUrl: './expansion-panel.component.html', styleUrl: './expansion-panel.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, From f24b335fbed5f694ccca95d2fd2f14f4c3ade071 Mon Sep 17 00:00:00 2001 From: Edward Lu <36934022+edlu77@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:01:56 -0400 Subject: [PATCH 9/9] Cde nav header updates (#778) * Update app logos component * Add sidenav to nav header and update landing page * Add product logos to design system * Update nav header with product logo DS component * Rename App Logos to Nav Header Buttons * Add software status indicator * Updates to nav header components * Small changes to nav header styles * Adjust header styling * Remove duplication * Software status indicator updates * Updates to sidenav demo * Sidenav updates * Tweaks * Testing and documentation * Fix testing --- .../create-visualization-page.component.html | 5 +- .../create-visualization-page.component.scss | 3 +- .../create-visualization-page.component.ts | 102 +++++++++- .../landing-page/landing-page.component.html | 8 +- .../landing-page/landing-page.component.scss | 2 + .../landing-page.component.spec.ts | 2 + .../landing-page/landing-page.component.ts | 10 +- libs/design-system/app-logos/src/index.ts | 1 - .../src/lib/app-logos.component.html | 19 -- .../src/lib/app-logos.component.scss | 93 --------- .../src/lib/app-logos.component.spec.ts | 39 ---- .../src/lib/app-logos.component.stories.ts | 47 ----- .../app-logos/src/lib/app-logos.component.ts | 33 --- .../assets/icons/products/3d_organ_models.svg | 22 ++ .../icons/products/3d_organ_models_large.svg | 22 ++ .../assets/icons/products/api.svg | 12 ++ .../assets/icons/products/api_large.svg | 12 ++ .../assets/icons/products/app_library.svg | 24 +++ .../icons/products/app_library_large.svg | 24 +++ .../assets/icons/products/asctb_reporter.svg | 21 ++ .../products/asctb_reporter_large.svg} | 0 .../assets/icons/products/cde.svg | 20 ++ .../products/cde_large.svg} | 0 .../icons/products/cell_population_graphs.svg | 13 ++ .../products/cell_population_graphs_large.svg | 13 ++ .../assets/icons/products/cpp.svg | 20 ++ .../assets/icons/products/cpp_large.svg | 20 ++ .../assets/icons/products/dashboards.svg | 12 ++ .../products/dashboards_large.svg} | 0 .../assets/icons/products/design_system.svg | 18 ++ .../icons/products/design_system_large.svg | 18 ++ .../assets/icons/products/dev_portal.svg | 18 ++ .../icons/products/dev_portal_large.svg | 18 ++ .../assets/icons/products/eui.svg | 16 ++ .../eui.svg => icons/products/eui_large.svg} | 0 .../assets/icons/products/ftu.svg | 14 ++ .../products/ftu_large.svg} | 0 .../icons/products/human_atlas_stories.svg | 18 ++ .../products/human_atlas_stories_large.svg | 18 ++ .../assets/icons/products/millitome.svg | 21 ++ .../assets/icons/products/millitome_large.svg | 21 ++ .../assets/icons/products/omaps.svg | 14 ++ .../assets/icons/products/omaps_large.svg | 14 ++ .../assets/icons/products/organ_gallery.svg | 13 ++ .../icons/products/organ_gallery_large.svg | 13 ++ .../assets/icons/products/rui.svg | 12 ++ .../products/rui_large.svg} | 0 .../assets/icons/products/top.svg | 23 +++ .../assets/icons/products/top_large.svg | 23 +++ .../assets/icons/products/vccf.svg | 37 ++++ .../assets/icons/products/vccf_large.svg | 37 ++++ .../assets/icons/products/web_components.svg | 21 ++ .../icons/products/web_components_large.svg | 21 ++ .../{app-logos => brandmark}/ng-package.json | 0 .../src/lib/brandmark.component.scss | 9 + .../nav-header-buttons/ng-package.json | 5 + .../nav-header-buttons/src/index.ts | 1 + .../src/lib/nav-header-buttons.component.html | 29 +++ .../src/lib/nav-header-buttons.component.scss | 50 +++++ .../lib/nav-header-buttons.component.spec.ts | 28 +++ .../nav-header-buttons.component.stories.ts | 66 ++++++ .../src/lib/nav-header-buttons.component.ts | 45 +++++ .../src/lib/nav-header.component.html | 53 ++++- .../src/lib/nav-header.component.scss | 91 ++++++++- .../src/lib/nav-header.component.spec.ts | 17 +- .../src/lib/nav-header.component.stories.ts | 164 +++++++++++++-- .../src/lib/nav-header.component.ts | 48 ++++- .../product-logo/ng-package.json | 5 + libs/design-system/product-logo/src/index.ts | 1 + .../src/lib/product-logo.component.html | 1 + .../src/lib/product-logo.component.scss | 11 + .../src/lib/product-logo.component.ts | 28 +++ .../src/lib/product-logo.stories.ts | 61 ++++++ .../software-status-indicator/ng-package.json | 5 + .../software-status-indicator/src/index.ts | 1 + ...oftware-status-indicator-size.directive.ts | 29 +++ .../software-status-indicator.component.html | 8 + .../software-status-indicator.component.scss | 12 ++ ...ware-status-indicator.component.stories.ts | 38 ++++ .../software-status-indicator.component.ts | 36 ++++ .../apps-sidenav-demo.component.html | 37 ++-- .../apps-sidenav-demo.component.scss | 71 +++++-- .../apps-sidenav-demo.component.ts | 190 +++++++++--------- libs/design-system/styles/_typography.scss | 8 + tsconfig.base.json | 15 +- 85 files changed, 1739 insertions(+), 431 deletions(-) delete mode 100644 libs/design-system/app-logos/src/index.ts delete mode 100644 libs/design-system/app-logos/src/lib/app-logos.component.html delete mode 100644 libs/design-system/app-logos/src/lib/app-logos.component.scss delete mode 100644 libs/design-system/app-logos/src/lib/app-logos.component.spec.ts delete mode 100644 libs/design-system/app-logos/src/lib/app-logos.component.stories.ts delete mode 100644 libs/design-system/app-logos/src/lib/app-logos.component.ts create mode 100644 libs/design-system/assets/icons/products/3d_organ_models.svg create mode 100644 libs/design-system/assets/icons/products/3d_organ_models_large.svg create mode 100644 libs/design-system/assets/icons/products/api.svg create mode 100644 libs/design-system/assets/icons/products/api_large.svg create mode 100644 libs/design-system/assets/icons/products/app_library.svg create mode 100644 libs/design-system/assets/icons/products/app_library_large.svg create mode 100644 libs/design-system/assets/icons/products/asctb_reporter.svg rename libs/design-system/assets/{logo/asctb-reporter.svg => icons/products/asctb_reporter_large.svg} (100%) create mode 100644 libs/design-system/assets/icons/products/cde.svg rename libs/design-system/assets/{logo/cde_logo.svg => icons/products/cde_large.svg} (100%) create mode 100644 libs/design-system/assets/icons/products/cell_population_graphs.svg create mode 100644 libs/design-system/assets/icons/products/cell_population_graphs_large.svg create mode 100644 libs/design-system/assets/icons/products/cpp.svg create mode 100644 libs/design-system/assets/icons/products/cpp_large.svg create mode 100644 libs/design-system/assets/icons/products/dashboards.svg rename libs/design-system/assets/{logo/dashboards_logo.svg => icons/products/dashboards_large.svg} (100%) create mode 100644 libs/design-system/assets/icons/products/design_system.svg create mode 100644 libs/design-system/assets/icons/products/design_system_large.svg create mode 100644 libs/design-system/assets/icons/products/dev_portal.svg create mode 100644 libs/design-system/assets/icons/products/dev_portal_large.svg create mode 100644 libs/design-system/assets/icons/products/eui.svg rename libs/design-system/assets/{logo/eui.svg => icons/products/eui_large.svg} (100%) create mode 100644 libs/design-system/assets/icons/products/ftu.svg rename libs/design-system/assets/{logo/ftu_logo.svg => icons/products/ftu_large.svg} (100%) create mode 100644 libs/design-system/assets/icons/products/human_atlas_stories.svg create mode 100644 libs/design-system/assets/icons/products/human_atlas_stories_large.svg create mode 100644 libs/design-system/assets/icons/products/millitome.svg create mode 100644 libs/design-system/assets/icons/products/millitome_large.svg create mode 100644 libs/design-system/assets/icons/products/omaps.svg create mode 100644 libs/design-system/assets/icons/products/omaps_large.svg create mode 100644 libs/design-system/assets/icons/products/organ_gallery.svg create mode 100644 libs/design-system/assets/icons/products/organ_gallery_large.svg create mode 100644 libs/design-system/assets/icons/products/rui.svg rename libs/design-system/assets/{logo/atlas_apps.svg => icons/products/rui_large.svg} (100%) create mode 100644 libs/design-system/assets/icons/products/top.svg create mode 100644 libs/design-system/assets/icons/products/top_large.svg create mode 100644 libs/design-system/assets/icons/products/vccf.svg create mode 100644 libs/design-system/assets/icons/products/vccf_large.svg create mode 100644 libs/design-system/assets/icons/products/web_components.svg create mode 100644 libs/design-system/assets/icons/products/web_components_large.svg rename libs/design-system/{app-logos => brandmark}/ng-package.json (100%) create mode 100644 libs/design-system/nav-header-buttons/ng-package.json create mode 100644 libs/design-system/nav-header-buttons/src/index.ts create mode 100644 libs/design-system/nav-header-buttons/src/lib/nav-header-buttons.component.html create mode 100644 libs/design-system/nav-header-buttons/src/lib/nav-header-buttons.component.scss create mode 100644 libs/design-system/nav-header-buttons/src/lib/nav-header-buttons.component.spec.ts create mode 100644 libs/design-system/nav-header-buttons/src/lib/nav-header-buttons.component.stories.ts create mode 100644 libs/design-system/nav-header-buttons/src/lib/nav-header-buttons.component.ts create mode 100644 libs/design-system/product-logo/ng-package.json create mode 100644 libs/design-system/product-logo/src/index.ts create mode 100644 libs/design-system/product-logo/src/lib/product-logo.component.html create mode 100644 libs/design-system/product-logo/src/lib/product-logo.component.scss create mode 100644 libs/design-system/product-logo/src/lib/product-logo.component.ts create mode 100644 libs/design-system/product-logo/src/lib/product-logo.stories.ts create mode 100644 libs/design-system/software-status-indicator/ng-package.json create mode 100644 libs/design-system/software-status-indicator/src/index.ts create mode 100644 libs/design-system/software-status-indicator/src/lib/software-status-indicator-size.directive.ts create mode 100644 libs/design-system/software-status-indicator/src/lib/software-status-indicator.component.html create mode 100644 libs/design-system/software-status-indicator/src/lib/software-status-indicator.component.scss create mode 100644 libs/design-system/software-status-indicator/src/lib/software-status-indicator.component.stories.ts create mode 100644 libs/design-system/software-status-indicator/src/lib/software-status-indicator.component.ts diff --git a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.html b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.html index 52bebf107..974426d74 100644 --- a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.html +++ b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.html @@ -1,8 +1,9 @@