@testgorilla/tgo-ui 12.0.4 → 12.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +2 -2
- package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-button.mjs +14 -4
- package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +2 -0
- package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-field.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +2 -0
- package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-table.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +1 -0
- package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
- package/mcp/catalog.json +1 -1
- package/package.json +1 -1
- package/types/testgorilla-tgo-ui-components-button.d.ts +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-scale-table.mjs","names":[],"sources":["../../../components/scale-table/scale-table.component.ts","../../../components/scale-table/scale-table.component.html"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ScaleComponentModule } from '@testgorilla/tgo-ui/components/scale';\n\nimport { ScaleItem } from './scale-table.model';\n\n@Component({\n selector: 'ui-scale-table',\n templateUrl: './scale-table.component.html',\n styleUrls: ['./scale-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [UiTranslatePipe, ScaleComponentModule, AsyncPipe, IconComponentModule, ButtonComponentModule],\n host: {\n '[style.--scale-count]': 'scaleCount()',\n },\n})\nexport class ScaleTableComponent {\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof ScaleTableComponent\n */\n public applicationTheme = input<ApplicationTheme>('light');\n\n /**\n *\n * Defines items with their text and it's values\n *\n * @type {ScaleTable}\n * @memberof ScaleTableComponent\n */\n public scaleItems = model.required<ScaleItem[]>();\n\n /**\n *\n * Defines description of scales\n *\n * @type {string[]}\n * @memberof ScaleTableComponent\n */\n public labels = input.required<string[]>();\n public hideBetterExperience = model(false);\n public scaleItemChange = output<{\n item: ScaleItem;\n label: string;\n }>();\n scaleCount = computed(() => this.labels().length);\n\n protected readonly translationContext = 'SCALE_TABLE.';\n\n public select(scaleItemIndex: number, scaleIndex: number): void {\n this.scaleItems.update(items => {\n items[scaleItemIndex].value = scaleIndex;\n this.scaleItemChange.emit({\n item: items[scaleItemIndex],\n label: this.labels()[scaleIndex],\n });\n return [...items];\n });\n }\n}\n","<div class=\"scale-table\">\n <div class=\"better-experience\" [class.hide]=\"hideBetterExperience()\">\n <ui-icon [size]=\"'24'\" [name]=\"'Device-rotate-in-line'\" class=\"mobile-landscape-icon\" />\n <p>{{ 'SCALE_TABLE.ROTATE_DEVICE' | uiTranslate | async }}</p>\n <ui-button\n iconName=\"Close\"\n variant=\"icon-button\"\n size=\"small\"\n [justIcon]=\"true\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n (click)=\"hideBetterExperience.set(true)\"\n />\n </div>\n <!-- Header -->\n <div tabindex=\"0\" [attr.aria-label]=\"'scale header'\" class=\"scale-table-header\">\n @for (label of labels(); track $index) {\n <div\n tabindex=\"0\"\n role=\"heading\"\n [attr.aria-level]=\"3\"\n [attr.aria-label]=\"label + ' as ' + ($index + 1)\"\n class=\"scale-size\"\n >\n {{ label }}\n </div>\n }\n </div>\n <!-- Scale Items -->\n @for (scale of scaleItems(); track scale.text) {\n <div class=\"scale-table-row\" tabindex=\"0\" role=\"radiogroup\" [attr.aria-label]=\"scale.text\">\n <div class=\"scale-text\">{{ scale.text }}</div>\n <ui-scale\n [selectedIndex]=\"scale.value ?? null\"\n [length]=\"scale.length ?? labels().length\"\n [applicationTheme]=\"applicationTheme()\"\n (selectedIndexChange)=\"select($index, $event)\"\n />\n </div>\n }\n</div>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-scale-table.mjs","names":[],"sources":["../../../components/scale-table/scale-table.component.ts","../../../components/scale-table/scale-table.component.html"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ScaleComponentModule } from '@testgorilla/tgo-ui/components/scale';\n\nimport { ScaleItem } from './scale-table.model';\n\n@Component({\n selector: 'ui-scale-table',\n templateUrl: './scale-table.component.html',\n styleUrls: ['./scale-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [UiTranslatePipe, ScaleComponentModule, AsyncPipe, IconComponentModule, ButtonComponentModule],\n host: {\n '[style.--scale-count]': 'scaleCount()',\n },\n})\nexport class ScaleTableComponent {\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof ScaleTableComponent\n */\n public applicationTheme = input<ApplicationTheme>('light');\n\n /**\n *\n * Defines items with their text and it's values\n *\n * @type {ScaleTable}\n * @memberof ScaleTableComponent\n */\n public scaleItems = model.required<ScaleItem[]>();\n\n /**\n *\n * Defines description of scales\n *\n * @type {string[]}\n * @memberof ScaleTableComponent\n */\n public labels = input.required<string[]>();\n public hideBetterExperience = model(false);\n public scaleItemChange = output<{\n item: ScaleItem;\n label: string;\n }>();\n scaleCount = computed(() => this.labels().length);\n\n protected readonly translationContext = 'SCALE_TABLE.';\n\n public select(scaleItemIndex: number, scaleIndex: number): void {\n this.scaleItems.update(items => {\n items[scaleItemIndex].value = scaleIndex;\n this.scaleItemChange.emit({\n item: items[scaleItemIndex],\n label: this.labels()[scaleIndex],\n });\n return [...items];\n });\n }\n}\n","<div class=\"scale-table\">\n <div class=\"better-experience\" [class.hide]=\"hideBetterExperience()\">\n <ui-icon [size]=\"'24'\" [name]=\"'Device-rotate-in-line'\" class=\"mobile-landscape-icon\" />\n <p>{{ 'SCALE_TABLE.ROTATE_DEVICE' | uiTranslate | async }}</p>\n <ui-button\n iconName=\"Close\"\n variant=\"icon-button\"\n size=\"small\"\n [justIcon]=\"true\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n (click)=\"hideBetterExperience.set(true)\"\n />\n </div>\n <!-- Header -->\n <div tabindex=\"0\" [attr.aria-label]=\"'scale header'\" class=\"scale-table-header\">\n @for (label of labels(); track $index) {\n <div\n tabindex=\"0\"\n role=\"heading\"\n [attr.aria-level]=\"3\"\n [attr.aria-label]=\"label + ' as ' + ($index + 1)\"\n class=\"scale-size\"\n >\n {{ label }}\n </div>\n }\n </div>\n <!-- Scale Items -->\n @for (scale of scaleItems(); track scale.text) {\n <div class=\"scale-table-row\" tabindex=\"0\" role=\"radiogroup\" [attr.aria-label]=\"scale.text\">\n <div class=\"scale-text\">{{ scale.text }}</div>\n <ui-scale\n [selectedIndex]=\"scale.value ?? null\"\n [length]=\"scale.length ?? labels().length\"\n [applicationTheme]=\"applicationTheme()\"\n (selectedIndexChange)=\"select($index, $event)\"\n />\n </div>\n }\n</div>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-side-navigation.mjs","names":[],"sources":["../../../components/side-navigation/side-navigation.component.ts","../../../components/side-navigation/side-navigation.component.html","../../../components/side-navigation/side-navigation.component.module.ts"],"sourcesContent":["import { LiveAnnouncer, CdkTrapFocus } from '@angular/cdk/a11y';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnDestroy,\n OnInit,\n TemplateRef,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { take } from 'rxjs';\n\nimport { AvatarSize, AvatarComponent } from '@testgorilla/tgo-ui/components/avatar';\nimport { ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme, ScreenBreakpoints, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { LogoTypeEnum, LogoComponent } from '@testgorilla/tgo-ui/components/logo';\nimport { MenuConfig, OverflowMenuComponentModule } from '@testgorilla/tgo-ui/components/overflow-menu';\n\nimport { NavigationAccount, NavigationCta, NavigationItem } from './side-navigation.model';\n\nconst OVERFLOW_MENU_CONFIG: Omit<MenuConfig, 'panelClass'> = {\n overlapTrigger: true,\n xPosition: 'before',\n yPosition: 'below',\n};\n\nexport const COLLAPSE_ANIMATION_MS = 180;\n\nconst TRANSLATION_KEY = {\n COLLAPSE: 'SIDE_NAVIGATION.COLLAPSE_LABEL',\n EXPAND: 'SIDE_NAVIGATION.EXPAND_LABEL',\n MOBILE_OPEN: 'SIDE_NAVIGATION.MOBILE_OPEN_LABEL',\n MOBILE_CLOSE: 'SIDE_NAVIGATION.MOBILE_CLOSE_LABEL',\n NAV: 'SIDE_NAVIGATION.NAV_ARIA_LABEL',\n ANNOUNCE_COLLAPSED: 'SIDE_NAVIGATION.ANNOUNCE_COLLAPSED',\n ANNOUNCE_EXPANDED: 'SIDE_NAVIGATION.ANNOUNCE_EXPANDED',\n} as const;\n\n@Component({\n selector: 'ui-side-navigation',\n templateUrl: './side-navigation.component.html',\n styleUrls: ['./side-navigation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [UiTranslatePipe],\n host: {\n '(keydown.escape)': 'onEscapeKey()',\n },\n imports: [\n LogoComponent,\n ButtonComponent,\n CdkTrapFocus,\n NgTemplateOutlet,\n OverflowMenuComponentModule,\n AvatarComponent,\n IconComponentModule,\n AsyncPipe,\n UiTranslatePipe,\n ],\n})\nexport class SideNavigationComponent implements OnInit, OnDestroy {\n protected readonly avatarSize = AvatarSize;\n protected readonly logoType = LogoTypeEnum;\n protected readonly drawerControlsId = 'side-navigation-drawer';\n protected readonly translationKey = TRANSLATION_KEY;\n\n private readonly breakpointObserver = inject(BreakpointObserver);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly destroyRef = inject(DestroyRef);\n private readonly uiTranslate = inject(UiTranslatePipe);\n\n activeRoute = input<string>('');\n mainCta = input<NavigationCta>();\n mainNavigation = input.required<NavigationItem[]>();\n secondaryNavigation = input<NavigationItem[]>();\n contentTemplateExtendedRef = input<TemplateRef<unknown>>();\n contentTemplateCollapsedRef = input<TemplateRef<unknown>>();\n account = input<NavigationAccount>();\n appContentTemplateRef = input<TemplateRef<unknown>>();\n applicationTheme = input<ApplicationTheme>('light');\n /** Optional override; falls back to `SIDE_NAVIGATION.COLLAPSE_LABEL` translation. */\n collapseToggleLabel = input<string>();\n /** Optional override; falls back to `SIDE_NAVIGATION.EXPAND_LABEL` translation. */\n expandToggleLabel = input<string>();\n /** Optional override; falls back to `SIDE_NAVIGATION.MOBILE_OPEN_LABEL` translation. */\n mobileMenuLabel = input<string>();\n /** Optional override; falls back to `SIDE_NAVIGATION.MOBILE_CLOSE_LABEL` translation. */\n mobileCloseLabel = input<string>();\n /** Optional override; falls back to `SIDE_NAVIGATION.NAV_ARIA_LABEL` translation. */\n navAriaLabel = input<string>();\n\n isCollapsed = model<boolean>(false);\n\n mainCtaClicked = output<void>();\n navigate = output<string>();\n accountMenuSelected = output<string>();\n logoClicked = output<void>();\n\n isExpandingOrCollapsing = signal(false);\n isMobileOrTablet = signal(false);\n\n protected readonly trapFocus = computed(() => this.isMobileOrTablet() && !this.isCollapsed());\n\n private collapseTimer: ReturnType<typeof setTimeout> | null = null;\n\n activeRoutesMap = computed(() => {\n const currentRoute = this.activeRoute();\n const allItems = [...this.mainNavigation(), ...(this.secondaryNavigation() ?? [])];\n return new Map(allItems.map(route => [route.url, currentRoute?.startsWith(route.url) ?? false]));\n });\n\n overflowMenuConfig = computed<MenuConfig>(() => ({\n ...OVERFLOW_MENU_CONFIG,\n panelClass: this.isCollapsed() ? 'collapsed-menu' : 'expanded-menu',\n }));\n\n protected readonly toggleAriaLabelOverride = computed(() =>\n this.isCollapsed() ? this.expandToggleLabel() : this.collapseToggleLabel()\n );\n\n protected readonly toggleAriaKey = computed(() =>\n this.isCollapsed() ? TRANSLATION_KEY.EXPAND : TRANSLATION_KEY.COLLAPSE\n );\n\n protected readonly mobileToggleAriaLabelOverride = computed(() =>\n this.isCollapsed() ? this.mobileMenuLabel() : this.mobileCloseLabel()\n );\n\n protected readonly mobileToggleAriaKey = computed(() =>\n this.isCollapsed() ? TRANSLATION_KEY.MOBILE_OPEN : TRANSLATION_KEY.MOBILE_CLOSE\n );\n\n ngOnInit(): void {\n this.observeViewportBreakpoint();\n }\n\n ngOnDestroy(): void {\n this.clearCollapseTimer();\n }\n\n toggleCollapsed({ announce = true }: { announce?: boolean } = {}): void {\n this.isCollapsed.set(!this.isCollapsed());\n\n if (announce) {\n this.announceCollapseState();\n }\n\n if (this.prefersReducedMotion()) {\n return;\n }\n\n this.isExpandingOrCollapsing.set(true);\n this.clearCollapseTimer();\n this.collapseTimer = setTimeout(() => {\n this.isExpandingOrCollapsing.set(false);\n this.collapseTimer = null;\n }, COLLAPSE_ANIMATION_MS);\n }\n\n onNavigateClick(id: string): void {\n this.navigate.emit(id);\n this.autoCloseDrawer();\n }\n\n onSelectMenuItem($event: string): void {\n this.accountMenuSelected.emit($event);\n this.autoCloseDrawer();\n }\n\n onEscapeKey(): void {\n this.autoCloseDrawer();\n }\n\n private autoCloseDrawer(): void {\n if (this.isMobileOrTablet() && !this.isCollapsed()) {\n this.toggleCollapsed({ announce: false });\n }\n }\n\n private observeViewportBreakpoint(): void {\n this.breakpointObserver\n .observe([`(max-width: ${ScreenBreakpoints.TABLET}px)`])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(result => {\n const wasMobileOrTablet = this.isMobileOrTablet();\n this.isMobileOrTablet.set(result.matches);\n if (result.matches && !wasMobileOrTablet) {\n this.isCollapsed.set(true);\n }\n });\n }\n\n private announceCollapseState(): void {\n const key = this.isCollapsed() ? TRANSLATION_KEY.ANNOUNCE_COLLAPSED : TRANSLATION_KEY.ANNOUNCE_EXPANDED;\n this.uiTranslate\n .transform(key)\n .pipe(take(1))\n .subscribe(message => {\n void this.liveAnnouncer.announce(message, 'polite');\n });\n }\n\n private clearCollapseTimer(): void {\n if (this.collapseTimer !== null) {\n clearTimeout(this.collapseTimer);\n this.collapseTimer = null;\n }\n }\n\n private prefersReducedMotion(): boolean {\n return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n}\n","<div class=\"mobile-navbar\">\n <ui-logo [allowResizing]=\"true\" [width]=\"150\" [type]=\"logoType.DEFAULT\" (click)=\"logoClicked.emit()\"></ui-logo>\n\n <ui-button\n data-testid=\"navigation-collapse-mobile\"\n data-test-role=\"navigation-collapse\"\n [applicationTheme]=\"applicationTheme()\"\n [variant]=\"'menuTrigger'\"\n [iconName]=\"isCollapsed() ? 'Menu-burger' : 'Close'\"\n [ariaLabel]=\"mobileToggleAriaLabelOverride() ?? (mobileToggleAriaKey() | uiTranslate | async) ?? ''\"\n [ariaExpanded]=\"!isCollapsed()\"\n [ariaControls]=\"drawerControlsId\"\n [tooltip]=\"mobileToggleAriaLabelOverride() ?? (mobileToggleAriaKey() | uiTranslate | async) ?? ''\"\n tooltipPosition=\"left\"\n (buttonClickEvent)=\"toggleCollapsed()\"\n class=\"navigation-collapse-button\"\n ></ui-button>\n</div>\n\n<div class=\"main-container\">\n <nav\n [id]=\"drawerControlsId\"\n role=\"navigation\"\n [attr.aria-label]=\"navAriaLabel() ?? (translationKey.NAV | uiTranslate | async)\"\n class=\"side-navigation-container\"\n [class.collapsed]=\"isCollapsed()\"\n [class.expanded]=\"!isCollapsed()\"\n [cdkTrapFocus]=\"trapFocus()\"\n [cdkTrapFocusAutoCapture]=\"trapFocus()\"\n >\n <div class=\"zone-logo-row\">\n <div class=\"header\" [class.collapsed]=\"isCollapsed()\">\n <ui-logo\n class=\"logo-brandmark\"\n [allowResizing]=\"true\"\n [width]=\"19\"\n [type]=\"logoType.PRIMARY_BRANDMARK_PINK\"\n (click)=\"logoClicked.emit()\"\n ></ui-logo>\n <ui-logo\n class=\"logo-lockup\"\n [allowResizing]=\"true\"\n [width]=\"136\"\n [type]=\"logoType.DEFAULT\"\n (click)=\"logoClicked.emit()\"\n ></ui-logo>\n\n <ui-button\n data-testid=\"navigation-collapse\"\n data-test-role=\"navigation-collapse\"\n [applicationTheme]=\"applicationTheme()\"\n [variant]=\"'menuTrigger'\"\n [iconName]=\"isCollapsed() ? 'Sidebar-open-in-line' : 'Sidebar-close-in-line'\"\n [ariaLabel]=\"toggleAriaLabelOverride() ?? (toggleAriaKey() | uiTranslate | async) ?? ''\"\n [ariaPressed]=\"isCollapsed()\"\n [tooltip]=\"toggleAriaLabelOverride() ?? (toggleAriaKey() | uiTranslate | async) ?? ''\"\n tooltipPosition=\"below\"\n (buttonClickEvent)=\"toggleCollapsed()\"\n [class.collapsed]=\"isCollapsed()\"\n class=\"navigation-collapse-button\"\n ></ui-button>\n </div>\n </div>\n\n <div class=\"zone-primary-nav\">\n @if (mainCta(); as cta) {\n <div class=\"main-cta\">\n <ui-button\n data-testid=\"main-cta\"\n data-test-role=\"main-cta\"\n [applicationTheme]=\"applicationTheme()\"\n [fullWidth]=\"true\"\n [variant]=\"cta.variant\"\n iconPosition=\"left\"\n [iconName]=\"cta.icon\"\n [label]=\"isCollapsed() && !isExpandingOrCollapsing() ? '' : cta.label\"\n [ariaLabel]=\"cta.label\"\n [tooltip]=\"isCollapsed() ? cta.label : ''\"\n tooltipPosition=\"right\"\n (buttonClickEvent)=\"mainCtaClicked.emit()\"\n ></ui-button>\n </div>\n }\n\n <ul class=\"navigation-list\">\n @for (item of mainNavigation(); track item.id) {\n <li>\n <ng-container [ngTemplateOutlet]=\"navigationItem\" [ngTemplateOutletContext]=\"{ item }\"></ng-container>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"zone-utility-nav\">\n @if (secondaryNavigation(); as secondary) {\n <ul class=\"navigation-list\">\n @for (item of secondary; track item.id) {\n <li>\n <ng-container [ngTemplateOutlet]=\"navigationItem\" [ngTemplateOutletContext]=\"{ item }\"></ng-container>\n </li>\n }\n </ul>\n }\n </div>\n\n @if (account() || contentTemplateExtendedRef() || contentTemplateCollapsedRef()) {\n <div class=\"zone-account\">\n @if (contentTemplateExtendedRef(); as extendedRef) {\n @if (!isCollapsed() && !isExpandingOrCollapsing()) {\n <ng-container [ngTemplateOutlet]=\"extendedRef\"></ng-container>\n }\n }\n\n @if (contentTemplateCollapsedRef(); as collapsedRef) {\n @if (isCollapsed() || isExpandingOrCollapsing()) {\n <ng-container [ngTemplateOutlet]=\"collapsedRef\"></ng-container>\n }\n }\n\n @if (account(); as accountValue) {\n <ui-overflow-menu\n [applicationTheme]=\"applicationTheme()\"\n [contentTemplateRef]=\"userInfo\"\n [buttons]=\"accountValue.menu\"\n [isDynamicMenu]=\"true\"\n [class.collapsed]=\"isCollapsed() && !isExpandingOrCollapsing()\"\n (selectItem)=\"onSelectMenuItem($event)\"\n [menuConfig]=\"overflowMenuConfig()\"\n ></ui-overflow-menu>\n }\n </div>\n }\n </nav>\n <div class=\"app-container\" [class.collapsed]=\"isCollapsed()\" [class.expanded]=\"!isCollapsed()\">\n @if (appContentTemplateRef(); as appRef) {\n <ng-container [ngTemplateOutlet]=\"appRef\"></ng-container>\n }\n @if (isMobileOrTablet() && !isCollapsed()) {\n <button\n type=\"button\"\n class=\"backdrop\"\n [attr.aria-label]=\"mobileCloseLabel() ?? (translationKey.MOBILE_CLOSE | uiTranslate | async) ?? ''\"\n (click)=\"toggleCollapsed()\"\n ></button>\n }\n </div>\n</div>\n\n<ng-template #navigationItem let-item=\"item\">\n @if (item) {\n <div class=\"menu-item\" [attr.aria-current]=\"activeRoutesMap().get(item.url) ? 'page' : null\">\n <ui-button\n [attr.data-testid]=\"item.id\"\n data-test-role=\"menu-item\"\n [applicationTheme]=\"applicationTheme()\"\n [fullWidth]=\"true\"\n [disabledScaleOnClick]=\"true\"\n [variant]=\"'menuCell'\"\n iconPosition=\"left\"\n [iconName]=\"item.icon\"\n [label]=\"isCollapsed() && !isExpandingOrCollapsing() ? '' : item.text\"\n (buttonClickEvent)=\"onNavigateClick(item.id)\"\n (keydown.Tab)=\"$event.stopPropagation()\"\n (keydown.shift.tab)=\"$event.stopPropagation()\"\n [ariaLabel]=\"item.text\"\n [class.active]=\"activeRoutesMap().get(item.url)\"\n [buttonBadgeConfig]=\"\n isCollapsed() && !isExpandingOrCollapsing() ? undefined : $safeNavigationMigration(item?.badgeOptions)\n \"\n [tooltip]=\"isCollapsed() ? item.text : undefined\"\n tooltipPosition=\"right\"\n [iconFilled]=\"!!activeRoutesMap().get(item.url)\"\n ></ui-button>\n </div>\n }\n</ng-template>\n\n<ng-template #userInfo>\n @if (account(); as accountValue) {\n <div class=\"user-info\">\n <ui-avatar [size]=\"isCollapsed() ? avatarSize.MEDIUM : avatarSize.SMALL\" [name]=\"accountValue.name\"></ui-avatar>\n @if (!isCollapsed()) {\n <span class=\"user-name\">{{ accountValue.name }}</span>\n <ui-icon class=\"user-chevron\" name=\"Arrow-chevron-right-in-line\" size=\"24\" aria-hidden=\"true\"></ui-icon>\n }\n </div>\n }\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AvatarComponentModule } from '@testgorilla/tgo-ui/components/avatar';\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { LogoComponentModule } from '@testgorilla/tgo-ui/components/logo';\nimport { OverflowMenuComponentModule } from '@testgorilla/tgo-ui/components/overflow-menu';\n\nimport { SideNavigationComponent } from './side-navigation.component';\n\n@NgModule({\n imports: [\n A11yModule,\n CommonModule,\n UiTranslatePipe,\n ButtonComponentModule,\n AvatarComponentModule,\n IconComponentModule,\n LogoComponentModule,\n OverflowMenuComponentModule,\n SideNavigationComponent,\n ],\n exports: [SideNavigationComponent],\n})\nexport class SideNavigationComponentModule {}\n"],"mappings":";;;;;;;;;;;;;;;AA6BA,MAAM,uBAAuD;CAC3D,gBAAgB;CAChB,WAAW;CACX,WAAW;AACZ;AAED,MAAa,wBAAwB;AAErC,MAAM,kBAAkB;CACtB,UAAU;CACV,QAAQ;CACR,aAAa;CACb,cAAc;CACd,KAAK;CACL,oBAAoB;CACpB,mBAAmB;AACX;AAuBV,IAAa,0BAAb,MAAa,wBAAuB;CArBpC,cAAA;EAsBqB,KAAA,aAAa;EACb,KAAA,WAAW;EACX,KAAA,mBAAmB;EACnB,KAAA,iBAAiB;EAEnB,KAAA,qBAAqB,OAAO,kBAAkB;EAC9C,KAAA,gBAAgB,OAAO,aAAa;EACpC,KAAA,aAAa,OAAO,UAAU;EAC9B,KAAA,cAAc,OAAO,eAAe;EAErD,KAAA,cAAc,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAC/B,KAAA,UAAU,MAAsB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAChC,KAAA,iBAAiB,MAAM,SAA4B,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EACnD,KAAA,sBAAsB,MAAyB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,sBAAA,CAAA,+BAAA,CAAA,CAAA;EAC/C,KAAA,6BAA6B,MAA6B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,6BAAA,CAAA,+BAAA,CAAA,CAAA;EAC1D,KAAA,8BAA8B,MAA6B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,8BAAA,CAAA,+BAAA,CAAA,CAAA;EAC3D,KAAA,UAAU,MAA0B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EACpC,KAAA,wBAAwB,MAA6B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,wBAAA,CAAA,+BAAA,CAAA,CAAA;EACrD,KAAA,mBAAmB,MAAwB,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;EAEnD,KAAA,sBAAsB,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,sBAAA,CAAA,+BAAA,CAAA,CAAA;EAErC,KAAA,oBAAoB,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,oBAAA,CAAA,+BAAA,CAAA,CAAA;EAEnC,KAAA,kBAAkB,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;EAEjC,KAAA,mBAAmB,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;EAElC,KAAA,eAAe,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;EAE9B,KAAA,cAAc,MAAe,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAEnC,KAAA,iBAAiB,OAAM;EACvB,KAAA,WAAW,OAAM;EACjB,KAAA,sBAAsB,OAAM;EAC5B,KAAA,cAAc,OAAM;EAEpB,KAAA,0BAA0B,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,0BAAA,CAAA,+BAAA,CAAA,CAAA;EACvC,KAAA,mBAAmB,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;EAEb,KAAA,YAAY,eAAe,KAAK,iBAAgB,KAAM,CAAC,KAAK,YAAW,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAErF,KAAA,gBAAsD;EAE9D,KAAA,kBAAkB,eAAc;GAC9B,MAAM,eAAe,KAAK,YAAW;GACrC,MAAM,WAAW,CAAC,GAAG,KAAK,eAAc,GAAI,GAAI,KAAK,oBAAmB,KAAM,CAAA,CAAG;GACjF,OAAO,IAAI,IAAI,SAAS,KAAI,UAAS,CAAC,MAAM,KAAK,cAAc,WAAW,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC;EACjG,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;EAEF,KAAA,qBAAqB,gBAA4B;GAC/C,GAAG;GACH,YAAY,KAAK,YAAW,IAAK,mBAAmB;EACrD,IAAE,GAAA,YAAA,CAAA,EAAA,WAAA,qBAAA,CAAA,+BAAA,CAAA,CAAA;EAEgB,KAAA,0BAA0B,eAC3C,KAAK,YAAW,IAAK,KAAK,kBAAiB,IAAK,KAAK,oBAAmB,GACzE,GAAA,YAAA,CAAA,EAAA,WAAA,0BAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,gBAAgB,eACjC,KAAK,YAAW,IAAK,gBAAgB,SAAS,gBAAgB,UAC/D,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,gCAAgC,eACjD,KAAK,YAAW,IAAK,KAAK,gBAAe,IAAK,KAAK,iBAAgB,GACpE,GAAA,YAAA,CAAA,EAAA,WAAA,gCAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,sBAAsB,eACvC,KAAK,YAAW,IAAK,gBAAgB,cAAc,gBAAgB,cACpE,GAAA,YAAA,CAAA,EAAA,WAAA,sBAAA,CAAA,+BAAA,CAAA,CAAA;CAkFF;CAhFC,WAAQ;EACN,KAAK,0BAAyB;CAChC;CAEA,cAAW;EACT,KAAK,mBAAkB;CACzB;CAEA,gBAAgB,EAAE,WAAW,SAAiC,CAAA,GAAE;EAC9D,KAAK,YAAY,IAAI,CAAC,KAAK,YAAW,CAAE;EAExC,IAAI,UACF,KAAK,sBAAqB;EAG5B,IAAI,KAAK,qBAAoB,GAC3B;EAGF,KAAK,wBAAwB,IAAI,IAAI;EACrC,KAAK,mBAAkB;EACvB,KAAK,gBAAgB,iBAAgB;GACnC,KAAK,wBAAwB,IAAI,KAAK;GACtC,KAAK,gBAAgB;EACvB,GAAA,GAAwB;CAC1B;CAEA,gBAAgB,IAAU;EACxB,KAAK,SAAS,KAAK,EAAE;EACrB,KAAK,gBAAe;CACtB;CAEA,iBAAiB,QAAc;EAC7B,KAAK,oBAAoB,KAAK,MAAM;EACpC,KAAK,gBAAe;CACtB;CAEA,cAAW;EACT,KAAK,gBAAe;CACtB;CAEQ,kBAAe;EACrB,IAAI,KAAK,iBAAgB,KAAM,CAAC,KAAK,YAAW,GAC9C,KAAK,gBAAgB,EAAE,UAAU,MAAK,CAAE;CAE5C;CAEQ,4BAAyB;EAC/B,KAAK,mBACF,QAAQ,CAAC,eAAe,kBAAkB,OAAM,IAAK,CAAC,CAAC,CACvD,KAAK,mBAAmB,KAAK,UAAU,CAAC,CAAC,CACzC,WAAU,WAAS;GAClB,MAAM,oBAAoB,KAAK,iBAAgB;GAC/C,KAAK,iBAAiB,IAAI,OAAO,OAAO;GACxC,IAAI,OAAO,WAAW,CAAC,mBACrB,KAAK,YAAY,IAAI,IAAI;EAE7B,CAAC;CACL;CAEQ,wBAAqB;EAC3B,MAAM,MAAM,KAAK,YAAW,IAAK,gBAAgB,qBAAqB,gBAAgB;EACtF,KAAK,YACF,UAAU,GAAG,CAAC,CACd,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,WAAU,YAAU;GACnB,AAAK,KAAK,cAAc,SAAS,SAAS,QAAQ;EACpD,CAAC;CACL;CAEQ,qBAAkB;EACxB,IAAI,KAAK,kBAAkB,MAAM;GAC/B,aAAa,KAAK,aAAa;GAC/B,KAAK,gBAAgB;EACvB;CACF;CAEQ,uBAAoB;EAC1B,OAAO,OAAO,eAAe,cAAc,WAAW,kCAAkC,CAAC,CAAC;CAC5F;CAvJW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAuB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAvB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAuB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,aAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,gBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,qBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,4BAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,6BAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,uBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,kBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,qBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,mBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,iBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,kBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,aAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;GAAA;GAAA,SAAA;IAAA,aAAA;IAAA,gBAAA;IAAA,UAAA;IAAA,qBAAA;IAAA,aAAA;GAAA;GAAA,MAAA,EAAA,WAAA,EAAA,kBAAA,gBAAA,EAAA;GAAA,WAhBvB,CAAC,eAAe;GAAC,UAAA;GAAA,UCpD9B;GA4LA,QAAA,CAAA,quZAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDnII;KAAa,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,oBAAA,kBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;KAAY,UAAA;KAAA,QAAA,CAAA,gBAAA,yBAAA;KAAA,UAAA,CAAA,cAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACZ;KAAgB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;IAA2B;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAC3B;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,WAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;IAAmB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACnB;KAAS,MAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACT;KAAe,MAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AAGN,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAuB,YAAA,CAAA;EArBnC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAoB,iBAGb,wBAAwB;GAAM,WACpC,CAAC,eAAe;GAAC,MACtB,EACJ,oBAAoB,gBACrB;GAAA,SACQ;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GAAA,UAAA;GAAA,QAAA,CAAA,quZAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEvCH,IAAa,gCAAb,MAAa,8BAA6B;CAA7B;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA6B,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAA7B;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA6B,SAAA;IAZtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAAuB;GAAA,SAAA,CAEf,uBAAuB;EAAA,CAAA;CAAA;CAEtB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA6B,SAAA;IAZtC;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;GAAuB;EAAA,CAAA;CAAA;;AAId,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA6B,YAAA,CAAA;EAdzC,MAAA;EAAS,MAAA,CAAA;GACR,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GACD,SAAS,CAAC,uBAAuB;EAClC,CAAA"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-side-navigation.mjs","names":[],"sources":["../../../components/side-navigation/side-navigation.component.ts","../../../components/side-navigation/side-navigation.component.html","../../../components/side-navigation/side-navigation.component.module.ts"],"sourcesContent":["import { LiveAnnouncer, CdkTrapFocus } from '@angular/cdk/a11y';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnDestroy,\n OnInit,\n TemplateRef,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { take } from 'rxjs';\n\nimport { AvatarSize, AvatarComponent } from '@testgorilla/tgo-ui/components/avatar';\nimport { ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme, ScreenBreakpoints, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { LogoTypeEnum, LogoComponent } from '@testgorilla/tgo-ui/components/logo';\nimport { MenuConfig, OverflowMenuComponentModule } from '@testgorilla/tgo-ui/components/overflow-menu';\n\nimport { NavigationAccount, NavigationCta, NavigationItem } from './side-navigation.model';\n\nconst OVERFLOW_MENU_CONFIG: Omit<MenuConfig, 'panelClass'> = {\n overlapTrigger: true,\n xPosition: 'before',\n yPosition: 'below',\n};\n\nexport const COLLAPSE_ANIMATION_MS = 180;\n\nconst TRANSLATION_KEY = {\n COLLAPSE: 'SIDE_NAVIGATION.COLLAPSE_LABEL',\n EXPAND: 'SIDE_NAVIGATION.EXPAND_LABEL',\n MOBILE_OPEN: 'SIDE_NAVIGATION.MOBILE_OPEN_LABEL',\n MOBILE_CLOSE: 'SIDE_NAVIGATION.MOBILE_CLOSE_LABEL',\n NAV: 'SIDE_NAVIGATION.NAV_ARIA_LABEL',\n ANNOUNCE_COLLAPSED: 'SIDE_NAVIGATION.ANNOUNCE_COLLAPSED',\n ANNOUNCE_EXPANDED: 'SIDE_NAVIGATION.ANNOUNCE_EXPANDED',\n} as const;\n\n@Component({\n selector: 'ui-side-navigation',\n templateUrl: './side-navigation.component.html',\n styleUrls: ['./side-navigation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [UiTranslatePipe],\n host: {\n '(keydown.escape)': 'onEscapeKey()',\n },\n imports: [\n LogoComponent,\n ButtonComponent,\n CdkTrapFocus,\n NgTemplateOutlet,\n OverflowMenuComponentModule,\n AvatarComponent,\n IconComponentModule,\n AsyncPipe,\n UiTranslatePipe,\n ],\n})\nexport class SideNavigationComponent implements OnInit, OnDestroy {\n protected readonly avatarSize = AvatarSize;\n protected readonly logoType = LogoTypeEnum;\n protected readonly drawerControlsId = 'side-navigation-drawer';\n protected readonly translationKey = TRANSLATION_KEY;\n\n private readonly breakpointObserver = inject(BreakpointObserver);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly destroyRef = inject(DestroyRef);\n private readonly uiTranslate = inject(UiTranslatePipe);\n\n activeRoute = input<string>('');\n mainCta = input<NavigationCta>();\n mainNavigation = input.required<NavigationItem[]>();\n secondaryNavigation = input<NavigationItem[]>();\n contentTemplateExtendedRef = input<TemplateRef<unknown>>();\n contentTemplateCollapsedRef = input<TemplateRef<unknown>>();\n account = input<NavigationAccount>();\n appContentTemplateRef = input<TemplateRef<unknown>>();\n applicationTheme = input<ApplicationTheme>('light');\n /** Optional override; falls back to `SIDE_NAVIGATION.COLLAPSE_LABEL` translation. */\n collapseToggleLabel = input<string>();\n /** Optional override; falls back to `SIDE_NAVIGATION.EXPAND_LABEL` translation. */\n expandToggleLabel = input<string>();\n /** Optional override; falls back to `SIDE_NAVIGATION.MOBILE_OPEN_LABEL` translation. */\n mobileMenuLabel = input<string>();\n /** Optional override; falls back to `SIDE_NAVIGATION.MOBILE_CLOSE_LABEL` translation. */\n mobileCloseLabel = input<string>();\n /** Optional override; falls back to `SIDE_NAVIGATION.NAV_ARIA_LABEL` translation. */\n navAriaLabel = input<string>();\n\n isCollapsed = model<boolean>(false);\n\n mainCtaClicked = output<void>();\n navigate = output<string>();\n accountMenuSelected = output<string>();\n logoClicked = output<void>();\n\n isExpandingOrCollapsing = signal(false);\n isMobileOrTablet = signal(false);\n\n protected readonly trapFocus = computed(() => this.isMobileOrTablet() && !this.isCollapsed());\n\n private collapseTimer: ReturnType<typeof setTimeout> | null = null;\n\n activeRoutesMap = computed(() => {\n const currentRoute = this.activeRoute();\n const allItems = [...this.mainNavigation(), ...(this.secondaryNavigation() ?? [])];\n return new Map(allItems.map(route => [route.url, currentRoute?.startsWith(route.url) ?? false]));\n });\n\n overflowMenuConfig = computed<MenuConfig>(() => ({\n ...OVERFLOW_MENU_CONFIG,\n panelClass: this.isCollapsed() ? 'collapsed-menu' : 'expanded-menu',\n }));\n\n protected readonly toggleAriaLabelOverride = computed(() =>\n this.isCollapsed() ? this.expandToggleLabel() : this.collapseToggleLabel()\n );\n\n protected readonly toggleAriaKey = computed(() =>\n this.isCollapsed() ? TRANSLATION_KEY.EXPAND : TRANSLATION_KEY.COLLAPSE\n );\n\n protected readonly mobileToggleAriaLabelOverride = computed(() =>\n this.isCollapsed() ? this.mobileMenuLabel() : this.mobileCloseLabel()\n );\n\n protected readonly mobileToggleAriaKey = computed(() =>\n this.isCollapsed() ? TRANSLATION_KEY.MOBILE_OPEN : TRANSLATION_KEY.MOBILE_CLOSE\n );\n\n ngOnInit(): void {\n this.observeViewportBreakpoint();\n }\n\n ngOnDestroy(): void {\n this.clearCollapseTimer();\n }\n\n toggleCollapsed({ announce = true }: { announce?: boolean } = {}): void {\n this.isCollapsed.set(!this.isCollapsed());\n\n if (announce) {\n this.announceCollapseState();\n }\n\n if (this.prefersReducedMotion()) {\n return;\n }\n\n this.isExpandingOrCollapsing.set(true);\n this.clearCollapseTimer();\n this.collapseTimer = setTimeout(() => {\n this.isExpandingOrCollapsing.set(false);\n this.collapseTimer = null;\n }, COLLAPSE_ANIMATION_MS);\n }\n\n onNavigateClick(id: string): void {\n this.navigate.emit(id);\n this.autoCloseDrawer();\n }\n\n onSelectMenuItem($event: string): void {\n this.accountMenuSelected.emit($event);\n this.autoCloseDrawer();\n }\n\n onEscapeKey(): void {\n this.autoCloseDrawer();\n }\n\n private autoCloseDrawer(): void {\n if (this.isMobileOrTablet() && !this.isCollapsed()) {\n this.toggleCollapsed({ announce: false });\n }\n }\n\n private observeViewportBreakpoint(): void {\n this.breakpointObserver\n .observe([`(max-width: ${ScreenBreakpoints.TABLET}px)`])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(result => {\n const wasMobileOrTablet = this.isMobileOrTablet();\n this.isMobileOrTablet.set(result.matches);\n if (result.matches && !wasMobileOrTablet) {\n this.isCollapsed.set(true);\n }\n });\n }\n\n private announceCollapseState(): void {\n const key = this.isCollapsed() ? TRANSLATION_KEY.ANNOUNCE_COLLAPSED : TRANSLATION_KEY.ANNOUNCE_EXPANDED;\n this.uiTranslate\n .transform(key)\n .pipe(take(1))\n .subscribe(message => {\n void this.liveAnnouncer.announce(message, 'polite');\n });\n }\n\n private clearCollapseTimer(): void {\n if (this.collapseTimer !== null) {\n clearTimeout(this.collapseTimer);\n this.collapseTimer = null;\n }\n }\n\n private prefersReducedMotion(): boolean {\n return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n}\n","<div class=\"mobile-navbar\">\n <ui-logo [allowResizing]=\"true\" [width]=\"150\" [type]=\"logoType.DEFAULT\" (click)=\"logoClicked.emit()\"></ui-logo>\n\n <ui-button\n data-testid=\"navigation-collapse-mobile\"\n data-test-role=\"navigation-collapse\"\n [applicationTheme]=\"applicationTheme()\"\n [variant]=\"'menuTrigger'\"\n [iconName]=\"isCollapsed() ? 'Menu-burger' : 'Close'\"\n [ariaLabel]=\"mobileToggleAriaLabelOverride() ?? (mobileToggleAriaKey() | uiTranslate | async) ?? ''\"\n [ariaExpanded]=\"!isCollapsed()\"\n [ariaControls]=\"drawerControlsId\"\n [tooltip]=\"mobileToggleAriaLabelOverride() ?? (mobileToggleAriaKey() | uiTranslate | async) ?? ''\"\n tooltipPosition=\"left\"\n (buttonClickEvent)=\"toggleCollapsed()\"\n class=\"navigation-collapse-button\"\n ></ui-button>\n</div>\n\n<div class=\"main-container\">\n <nav\n [id]=\"drawerControlsId\"\n role=\"navigation\"\n [attr.aria-label]=\"navAriaLabel() ?? (translationKey.NAV | uiTranslate | async)\"\n class=\"side-navigation-container\"\n [class.collapsed]=\"isCollapsed()\"\n [class.expanded]=\"!isCollapsed()\"\n [cdkTrapFocus]=\"trapFocus()\"\n [cdkTrapFocusAutoCapture]=\"trapFocus()\"\n >\n <div class=\"zone-logo-row\">\n <div class=\"header\" [class.collapsed]=\"isCollapsed()\">\n <ui-logo\n class=\"logo-brandmark\"\n [allowResizing]=\"true\"\n [width]=\"19\"\n [type]=\"logoType.PRIMARY_BRANDMARK_PINK\"\n (click)=\"logoClicked.emit()\"\n ></ui-logo>\n <ui-logo\n class=\"logo-lockup\"\n [allowResizing]=\"true\"\n [width]=\"136\"\n [type]=\"logoType.DEFAULT\"\n (click)=\"logoClicked.emit()\"\n ></ui-logo>\n\n <ui-button\n data-testid=\"navigation-collapse\"\n data-test-role=\"navigation-collapse\"\n [applicationTheme]=\"applicationTheme()\"\n [variant]=\"'menuTrigger'\"\n [iconName]=\"isCollapsed() ? 'Sidebar-open-in-line' : 'Sidebar-close-in-line'\"\n [ariaLabel]=\"toggleAriaLabelOverride() ?? (toggleAriaKey() | uiTranslate | async) ?? ''\"\n [ariaPressed]=\"isCollapsed()\"\n [tooltip]=\"toggleAriaLabelOverride() ?? (toggleAriaKey() | uiTranslate | async) ?? ''\"\n tooltipPosition=\"below\"\n (buttonClickEvent)=\"toggleCollapsed()\"\n [class.collapsed]=\"isCollapsed()\"\n class=\"navigation-collapse-button\"\n ></ui-button>\n </div>\n </div>\n\n <div class=\"zone-primary-nav\">\n @if (mainCta(); as cta) {\n <div class=\"main-cta\">\n <ui-button\n data-testid=\"main-cta\"\n data-test-role=\"main-cta\"\n [applicationTheme]=\"applicationTheme()\"\n [fullWidth]=\"true\"\n [variant]=\"cta.variant\"\n iconPosition=\"left\"\n [iconName]=\"cta.icon\"\n [label]=\"isCollapsed() && !isExpandingOrCollapsing() ? '' : cta.label\"\n [ariaLabel]=\"cta.label\"\n [tooltip]=\"isCollapsed() ? cta.label : ''\"\n tooltipPosition=\"right\"\n (buttonClickEvent)=\"mainCtaClicked.emit()\"\n ></ui-button>\n </div>\n }\n\n <ul class=\"navigation-list\">\n @for (item of mainNavigation(); track item.id) {\n <li>\n <ng-container [ngTemplateOutlet]=\"navigationItem\" [ngTemplateOutletContext]=\"{ item }\"></ng-container>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"zone-utility-nav\">\n @if (secondaryNavigation(); as secondary) {\n <ul class=\"navigation-list\">\n @for (item of secondary; track item.id) {\n <li>\n <ng-container [ngTemplateOutlet]=\"navigationItem\" [ngTemplateOutletContext]=\"{ item }\"></ng-container>\n </li>\n }\n </ul>\n }\n </div>\n\n @if (account() || contentTemplateExtendedRef() || contentTemplateCollapsedRef()) {\n <div class=\"zone-account\">\n @if (contentTemplateExtendedRef(); as extendedRef) {\n @if (!isCollapsed() && !isExpandingOrCollapsing()) {\n <ng-container [ngTemplateOutlet]=\"extendedRef\"></ng-container>\n }\n }\n\n @if (contentTemplateCollapsedRef(); as collapsedRef) {\n @if (isCollapsed() || isExpandingOrCollapsing()) {\n <ng-container [ngTemplateOutlet]=\"collapsedRef\"></ng-container>\n }\n }\n\n @if (account(); as accountValue) {\n <ui-overflow-menu\n [applicationTheme]=\"applicationTheme()\"\n [contentTemplateRef]=\"userInfo\"\n [buttons]=\"accountValue.menu\"\n [isDynamicMenu]=\"true\"\n [class.collapsed]=\"isCollapsed() && !isExpandingOrCollapsing()\"\n (selectItem)=\"onSelectMenuItem($event)\"\n [menuConfig]=\"overflowMenuConfig()\"\n ></ui-overflow-menu>\n }\n </div>\n }\n </nav>\n <div class=\"app-container\" [class.collapsed]=\"isCollapsed()\" [class.expanded]=\"!isCollapsed()\">\n @if (appContentTemplateRef(); as appRef) {\n <ng-container [ngTemplateOutlet]=\"appRef\"></ng-container>\n }\n @if (isMobileOrTablet() && !isCollapsed()) {\n <button\n type=\"button\"\n class=\"backdrop\"\n [attr.aria-label]=\"mobileCloseLabel() ?? (translationKey.MOBILE_CLOSE | uiTranslate | async) ?? ''\"\n (click)=\"toggleCollapsed()\"\n ></button>\n }\n </div>\n</div>\n\n<ng-template #navigationItem let-item=\"item\">\n @if (item) {\n <div class=\"menu-item\" [attr.aria-current]=\"activeRoutesMap().get(item.url) ? 'page' : null\">\n <ui-button\n [attr.data-testid]=\"item.id\"\n data-test-role=\"menu-item\"\n [applicationTheme]=\"applicationTheme()\"\n [fullWidth]=\"true\"\n [disabledScaleOnClick]=\"true\"\n [variant]=\"'menuCell'\"\n iconPosition=\"left\"\n [iconName]=\"item.icon\"\n [label]=\"isCollapsed() && !isExpandingOrCollapsing() ? '' : item.text\"\n (buttonClickEvent)=\"onNavigateClick(item.id)\"\n (keydown.Tab)=\"$event.stopPropagation()\"\n (keydown.shift.tab)=\"$event.stopPropagation()\"\n [ariaLabel]=\"item.text\"\n [class.active]=\"activeRoutesMap().get(item.url)\"\n [buttonBadgeConfig]=\"\n isCollapsed() && !isExpandingOrCollapsing() ? undefined : $safeNavigationMigration(item?.badgeOptions)\n \"\n [tooltip]=\"isCollapsed() ? item.text : undefined\"\n tooltipPosition=\"right\"\n [iconFilled]=\"!!activeRoutesMap().get(item.url)\"\n ></ui-button>\n </div>\n }\n</ng-template>\n\n<ng-template #userInfo>\n @if (account(); as accountValue) {\n <div class=\"user-info\">\n <ui-avatar [size]=\"isCollapsed() ? avatarSize.MEDIUM : avatarSize.SMALL\" [name]=\"accountValue.name\"></ui-avatar>\n @if (!isCollapsed()) {\n <span class=\"user-name\">{{ accountValue.name }}</span>\n <ui-icon class=\"user-chevron\" name=\"Arrow-chevron-right-in-line\" size=\"24\" aria-hidden=\"true\"></ui-icon>\n }\n </div>\n }\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AvatarComponentModule } from '@testgorilla/tgo-ui/components/avatar';\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { LogoComponentModule } from '@testgorilla/tgo-ui/components/logo';\nimport { OverflowMenuComponentModule } from '@testgorilla/tgo-ui/components/overflow-menu';\n\nimport { SideNavigationComponent } from './side-navigation.component';\n\n@NgModule({\n imports: [\n A11yModule,\n CommonModule,\n UiTranslatePipe,\n ButtonComponentModule,\n AvatarComponentModule,\n IconComponentModule,\n LogoComponentModule,\n OverflowMenuComponentModule,\n SideNavigationComponent,\n ],\n exports: [SideNavigationComponent],\n})\nexport class SideNavigationComponentModule {}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-side-panel.mjs","names":[],"sources":["../../../components/side-panel/side-panel.model.ts","../../../components/side-panel/side-panel.animations.ts","../../../components/side-panel/side-panel-data-injection-token.ts","../../../components/side-panel/side-panel.service.ts","../../../components/side-panel/side-panel.component.ts","../../../components/side-panel/side-panel.component.html","../../../components/side-panel/side-panel-footer.directive.ts","../../../components/side-panel/side-panel-view.component.ts","../../../components/side-panel/side-panel-view.component.html"],"sourcesContent":["import { InjectionToken, OutputEmitterRef, Signal, TemplateRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nexport type SidePanelPosition = 'left' | 'right';\n\nexport enum SidePanelAnimationState {\n Open = 'open',\n Closed = 'closed',\n ClosedRight = 'closedRight',\n ClosedLeft = 'closedLeft',\n}\n\nexport type SidePanelSize = 'small' | 'large' | 'x-large';\n\n/**\n * What a `ui-side-panel-view` registers with the surrounding `SidePanelComponent`. The panel\n * types its registration against this rather than importing the view component, which keeps\n * the two files free of a runtime import cycle. `undefined` means \"falls back to the config\".\n */\nexport interface SidePanelViewRef {\n readonly title: Signal<string | undefined>;\n readonly showBackButton: Signal<boolean | undefined>;\n readonly footerTemplate: Signal<TemplateRef<unknown> | null>;\n readonly footerDivider: Signal<boolean>;\n readonly fillHeight: Signal<boolean>;\n readonly back: OutputEmitterRef<void>;\n}\n\nexport class SidePanelConfig {\n title: string;\n position: SidePanelPosition;\n showBackButton: boolean;\n data?: unknown;\n showCloseButton?: boolean;\n showHeader?: boolean;\n panelClass?: string;\n size?: SidePanelSize;\n testId?: string;\n}\n\nexport const defaultSidePanelConfig: SidePanelConfig = {\n position: 'right',\n showBackButton: false,\n title: '',\n data: undefined,\n showHeader: true,\n showCloseButton: true,\n size: 'small',\n};\n\nexport const SIDE_PANEL_CONFIG = new InjectionToken<SidePanelConfig>('SIDE_PANEL_CONFIG', {\n providedIn: 'root',\n factory: () => defaultSidePanelConfig,\n});\n\n/**\n * Reference to a side panel opened via the SidePanelService.\n * Similar to MatDialogRef from Angular Material.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors MatDialogRef<T, R = any>: untyped-by-default result/component types for consumer ergonomics; the ref is invariant in T/R so `unknown` defaults would break internal ref storage in SidePanelService\nexport class SidePanelRef<T = any, R = any> {\n private readonly _afterClosed = new Subject<T | undefined>();\n\n /**\n * Instance of the component loaded into the side panel.\n * Will be undefined if a TemplateRef was used instead of a component.\n */\n componentInstance?: R;\n\n /**\n * Observable that emits when the side panel is closed.\n * Emits the result passed to the close method, or undefined if no result was provided.\n */\n afterClosed(): Observable<T | undefined> {\n return this._afterClosed.asObservable();\n }\n\n /**\n * Closes the side panel with an optional result.\n * @param result Optional data to be emitted via afterClosed()\n */\n close(_result?: T): void {\n // This will be overridden by the service\n }\n\n /** @internal */\n _emitClose(result?: T): void {\n this._afterClosed.next(result);\n this._afterClosed.complete();\n }\n}\n","/* eslint-disable @typescript-eslint/no-deprecated -- the @angular/animations trigger/state/style/animate/transition DSL is deprecated in 20.2 in favor of template-level animate.enter/animate.leave; migrating every Material/component animation is out of scope for this lint pass */\nimport { animate, state, style, transition, trigger } from '@angular/animations';\n\nimport { SidePanelAnimationState } from './side-panel.model';\n\nexport const sidePanelAnimationDuration = 150;\n\nexport const sidePanelAnimation = [\n trigger('slideInOut', [\n state(`${SidePanelAnimationState.Open}`, style({ transform: 'translateX(0)' })),\n state(`${SidePanelAnimationState.ClosedRight}`, style({ transform: 'translateX(100%)' })),\n state(`${SidePanelAnimationState.ClosedLeft}`, style({ transform: 'translateX(-100%)' })),\n transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.ClosedRight}`, [\n animate(`${sidePanelAnimationDuration}ms ease-in-out`),\n ]),\n transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.ClosedLeft}`, [\n animate(`${sidePanelAnimationDuration}ms ease-in-out`),\n ]),\n ]),\n];\n\nexport const backdropAnimation = [\n trigger('fadeInOut', [\n state(`${SidePanelAnimationState.Open}`, style({ opacity: 0.25 })),\n state(`${SidePanelAnimationState.Closed}`, style({ opacity: 0 })),\n transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.Closed}`, [\n animate(`${sidePanelAnimationDuration}ms ease-in-out`),\n ]),\n ]),\n];\n","import { InjectionToken } from '@angular/core';\n\nexport const SIDE_PANEL_DATA = new InjectionToken<unknown>('SIDE_PANEL_DATA');\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n inject,\n Injectable,\n Injector,\n TemplateRef,\n Type,\n} from '@angular/core';\n\nimport { SIDE_PANEL_DATA } from './side-panel-data-injection-token';\nimport { SidePanelComponent } from './side-panel.component';\nimport { SIDE_PANEL_CONFIG, SidePanelConfig, SidePanelPosition, SidePanelRef } from './side-panel.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SidePanelService {\n private SidePanelComponentRef?: ComponentRef<SidePanelComponent>;\n private contentComponentRef?: ComponentRef<unknown>;\n private embeddedViewRef?: EmbeddedViewRef<unknown>;\n private currentSidePanelRef?: SidePanelRef;\n private readonly defaultSidePanelConfig: SidePanelConfig = inject(SIDE_PANEL_CONFIG);\n private readonly injector = inject(EnvironmentInjector);\n private readonly appRef = inject(ApplicationRef);\n\n constructor() {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors MatDialog.open<T, R = any>: the returned ref's data/component types are untyped-by-default for consumer ergonomics\n open<T = any, R = any>(\n content: Type<R> | TemplateRef<unknown>,\n config: Partial<SidePanelConfig>,\n parentInjector?: Injector\n ): SidePanelRef<T, R> {\n const panelConfig: SidePanelConfig = { ...this.defaultSidePanelConfig, ...config };\n\n const sidePanelRef = new SidePanelRef<T, R>();\n this.currentSidePanelRef = sidePanelRef;\n\n sidePanelRef.close = (result?: T) => {\n this.close(result);\n };\n\n if (!this.SidePanelComponentRef) {\n const injector = this.createSidePanelInjector(panelConfig, parentInjector);\n const SidePanelComponentRef = this.createSidePanelComponent(panelConfig.position, injector);\n this.SidePanelComponentRef = SidePanelComponentRef;\n }\n\n if (content instanceof TemplateRef) {\n this.loadTemplate(content);\n } else {\n this.loadComponent(content, sidePanelRef);\n }\n\n this.SidePanelComponentRef.instance.open();\n\n return sidePanelRef;\n }\n\n close(result?: unknown): void {\n if (this.SidePanelComponentRef) {\n this.SidePanelComponentRef.instance.close(result);\n }\n }\n\n destroyComponent(result?: unknown): void {\n if (this.currentSidePanelRef) {\n // eslint-disable-next-line no-underscore-dangle -- _emitClose is SidePanelRef's @internal API (mirrors MatDialogRef internals)\n this.currentSidePanelRef._emitClose(result);\n this.currentSidePanelRef = undefined;\n }\n\n if (this.SidePanelComponentRef) {\n this.appRef.detachView(this.SidePanelComponentRef.hostView);\n this.SidePanelComponentRef.destroy();\n this.SidePanelComponentRef = undefined;\n }\n\n if (this.contentComponentRef) {\n this.contentComponentRef.destroy();\n this.contentComponentRef = undefined;\n }\n }\n\n private createSidePanelInjector(config: SidePanelConfig, parentInjector?: Injector): Injector {\n return Injector.create({\n parent: parentInjector,\n providers: [\n { provide: SidePanelConfig, useValue: config },\n { provide: SIDE_PANEL_DATA, useValue: config.data },\n ],\n });\n }\n\n private createSidePanelComponent(position: SidePanelPosition, injector: Injector): ComponentRef<SidePanelComponent> {\n const sidePanelComponentRef = createComponent(SidePanelComponent, {\n environmentInjector: this.injector,\n elementInjector: injector,\n });\n\n this.appRef.attachView(sidePanelComponentRef.hostView);\n\n const sidePanelEl = (sidePanelComponentRef.hostView as EmbeddedViewRef<unknown>).rootNodes[0] as HTMLElement;\n sidePanelEl.querySelector('.side-panel')?.classList.add(position);\n\n document.body.appendChild(sidePanelEl);\n\n return sidePanelComponentRef;\n }\n\n private loadComponent<T, R>(component: Type<R>, sidePanelRef: SidePanelRef<T, R>): void {\n const viewContainerRef = this.SidePanelComponentRef?.instance.sidePanelContainer;\n if (viewContainerRef) {\n viewContainerRef().clear();\n this.contentComponentRef = viewContainerRef().createComponent(component);\n // Set the component instance on the SidePanelRef\n sidePanelRef.componentInstance = this.contentComponentRef.instance as R;\n }\n }\n\n private loadTemplate(template: TemplateRef<unknown>): void {\n const viewContainerRef = this.SidePanelComponentRef?.instance.sidePanelContainer;\n if (viewContainerRef) {\n viewContainerRef().clear();\n this.embeddedViewRef = viewContainerRef().createEmbeddedView(template);\n }\n }\n}\n","import { AsyncPipe, NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe, LanguageService } from '@testgorilla/tgo-ui/components/core';\nimport { TooltipComponentModule } from '@testgorilla/tgo-ui/components/tooltip';\n\nimport { backdropAnimation, sidePanelAnimation, sidePanelAnimationDuration } from './side-panel.animations';\nimport {\n SidePanelAnimationState,\n SidePanelConfig,\n SidePanelPosition,\n SidePanelSize,\n SidePanelViewRef,\n} from './side-panel.model';\nimport { SidePanelService } from './side-panel.service';\n\n@Component({\n selector: 'ui-side-panel',\n templateUrl: './side-panel.component.html',\n styleUrls: ['./side-panel.component.scss'],\n // eslint-disable-next-line @typescript-eslint/no-deprecated -- the @angular/animations DSL is deprecated in 20.2 in favor of template-level animate.enter/animate.leave; migrating every component animation is out of scope for the Angular 22 upgrade\n animations: [sidePanelAnimation, backdropAnimation],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TooltipComponentModule, ButtonComponentModule, UiTranslatePipe, AsyncPipe, NgClass, NgTemplateOutlet],\n})\nexport class SidePanelComponent {\n private readonly sidePanelService = inject(SidePanelService);\n public sidePanelConfig = inject(SidePanelConfig);\n\n sidePanelPosition = signal<SidePanelPosition>('right');\n\n sidePanelContainer = viewChild.required('sidePanelContainer', { read: ViewContainerRef });\n sidePanel = viewChild.required<ElementRef<HTMLDivElement>>('sidePanel');\n backdrop = viewChild.required<ElementRef<HTMLDivElement>>('sidePanelBackdrop');\n language = LanguageService.defaultLanguage;\n isOpen = signal<boolean>(false);\n size = signal<SidePanelSize | undefined>(undefined);\n isSmall = computed(() => this.size() === 'small');\n isLarge = computed(() => this.size() === 'large');\n isXLarge = computed(() => this.size() === 'x-large');\n\n private readonly activeView = signal<SidePanelViewRef | null>(null);\n\n // The active view owns the header and the footer while it is registered, falling back to the config.\n protected readonly headerTitle = computed(() => this.activeView()?.title() ?? this.sidePanelConfig.title);\n\n protected readonly showBackButton = computed(\n () => this.activeView()?.showBackButton() ?? this.sidePanelConfig.showBackButton\n );\n\n protected readonly footerTemplate = computed(() => this.activeView()?.footerTemplate() ?? null);\n\n /** A view owns the back button only when it asked for one; otherwise the config did. */\n private readonly viewOwnsBackButton = computed(() => this.activeView()?.showBackButton() !== undefined);\n\n protected readonly footerDivider = computed(() => this.activeView()?.footerDivider() ?? false);\n\n protected readonly fillHeight = computed(() => this.activeView()?.fillHeight() ?? false);\n\n animation = computed(() => {\n if (this.isOpen()) {\n return SidePanelAnimationState.Open;\n }\n\n return this.sidePanelPosition() === 'left'\n ? SidePanelAnimationState.ClosedLeft\n : SidePanelAnimationState.ClosedRight;\n });\n\n // The config is injected once per panel and never mutated, so plain readonly fields suffice.\n protected readonly closeButtonTestId = this.sidePanelConfig.testId ? `${this.sidePanelConfig.testId}-close` : null;\n protected readonly backButtonTestId = this.sidePanelConfig.testId ? `${this.sidePanelConfig.testId}-back` : null;\n\n constructor() {\n const { position, size } = this.sidePanelConfig;\n this.sidePanelPosition.set(position);\n this.size.set(size);\n }\n\n /** The last view to register wins, so a control-flow swap in either order ends up correct. */\n registerView(view: SidePanelViewRef): void {\n this.activeView.set(view);\n }\n\n /** Guarded by identity so a view destroyed after its successor was created cannot unseat it. */\n unregisterView(view: SidePanelViewRef): void {\n if (this.activeView() === view) {\n this.activeView.set(null);\n }\n }\n\n /**\n * The action follows whoever asked for the button, so that a consumer who leaves the flag in the\n * config and adopts a view for its footer gets the old close behaviour rather than a dead button.\n */\n protected onBack(): void {\n const view = this.activeView();\n if (view && this.viewOwnsBackButton()) {\n view.back.emit();\n\n return;\n }\n\n this.close();\n }\n\n open(): void {\n setTimeout(() => {\n this.isOpen.set(true);\n });\n }\n\n close(result?: unknown): void {\n this.isOpen.set(false);\n setTimeout(() => {\n this.sidePanelService.destroyComponent(result);\n }, sidePanelAnimationDuration);\n }\n}\n","<div\n class=\"side-panel-backdrop\"\n #sidePanelBackdrop\n tabindex=\"0\"\n (click)=\"close()\"\n (keydown.enter)=\"close()\"\n [@fadeInOut]=\"isOpen() ? 'open' : 'closed'\"\n></div>\n<div\n class=\"side-panel\"\n [class]=\"sidePanelConfig.panelClass\"\n [class.side-panel-small]=\"isSmall()\"\n [class.side-panel-large]=\"isLarge()\"\n [class.side-panel-x-large]=\"isXLarge()\"\n #sidePanel\n [@slideInOut]=\"animation()\"\n [attr.data-testid]=\"sidePanelConfig.testId ?? null\"\n>\n @if (sidePanelConfig.showHeader) {\n <div class=\"side-panel-header\">\n <div class=\"side-panel-title-container\">\n @if (showBackButton()) {\n <ui-button\n class=\"side-panel-action\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (click)=\"onBack()\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId\"\n size=\"medium\"\n ></ui-button>\n }\n <span class=\"side-panel-title h3 bold\">{{ headerTitle() }}</span>\n </div>\n @if (sidePanelConfig.showCloseButton) {\n <ui-button\n class=\"side-panel-action side-panel-action-close\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [testId]=\"closeButtonTestId\"\n (click)=\"close()\"\n size=\"medium\"\n ></ui-button>\n }\n </div>\n }\n\n <div class=\"side-panel-content\" [class.side-panel-content-fill]=\"fillHeight()\">\n <ng-container #sidePanelContainer></ng-container>\n </div>\n\n @if (footerTemplate(); as footer) {\n <div class=\"side-panel-footer\" [class.side-panel-footer-divided]=\"footerDivider()\">\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n }\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/** Marks the `ng-template` inside a `ui-side-panel-view` that holds the view's footer. */\n@Directive({\n selector: 'ng-template[uiSidePanelFooter]',\n standalone: true,\n})\nexport class SidePanelFooterDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport { SidePanelFooterDirective } from './side-panel-footer.directive';\nimport { SidePanelComponent } from './side-panel.component';\nimport { SidePanelViewRef } from './side-panel.model';\n\n// `undefined` has to survive so the panel can tell \"not set by this view\" apart from an\n// explicit `false` and fall back to `SidePanelConfig`.\nfunction optionalBooleanAttribute(value: unknown): boolean | undefined {\n return value === undefined ? undefined : booleanAttribute(value);\n}\n\n/**\n * One view inside a side panel: its body, its header title and its footer. Render a different\n * one per step to switch views without reopening the panel.\n */\n@Component({\n selector: 'ui-side-panel-view',\n templateUrl: './side-panel-view.component.html',\n styleUrls: ['./side-panel-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '[class.side-panel-view-fill]': 'fillHeight()',\n // `title` is a global HTML attribute and Angular keeps a statically set one on the host, so\n // `<ui-side-panel-view title=\"...\">` would hang a native tooltip over the whole view body.\n '[attr.title]': 'null',\n },\n})\nexport class SidePanelViewComponent implements SidePanelViewRef {\n /** Left unset, the panel keeps the title from `SidePanelConfig`. */\n readonly title = input<string>();\n\n /** Left unset, the panel falls back to `SidePanelConfig.showBackButton`. */\n readonly showBackButton = input(undefined, { transform: optionalBooleanAttribute });\n\n /** Draws a rule above the footer, separating it from content that scrolls underneath. */\n readonly footerDivider = input(false, { transform: booleanAttribute });\n\n /**\n * Makes the view fill the panel body instead of growing with its content, and stops the panel\n * scrolling. Content then owns its own overflow — give the element that should scroll\n * `flex: 1; min-height: 0; overflow: auto`, or `height: 100%`.\n */\n readonly fillHeight = input(false, { transform: booleanAttribute });\n\n /** The panel does not close itself — move to the previous view, or close it yourself. */\n readonly back = output<void>();\n\n private readonly footer = contentChild(SidePanelFooterDirective);\n\n readonly footerTemplate = computed(() => this.footer()?.templateRef ?? null);\n\n private readonly panel = inject(SidePanelComponent, { optional: true });\n\n constructor() {\n this.panel?.registerView(this);\n inject(DestroyRef).onDestroy(() => this.panel?.unregisterView(this));\n }\n}\n","<ng-content></ng-content>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-side-panel.mjs","names":[],"sources":["../../../components/side-panel/side-panel.model.ts","../../../components/side-panel/side-panel.animations.ts","../../../components/side-panel/side-panel-data-injection-token.ts","../../../components/side-panel/side-panel.service.ts","../../../components/side-panel/side-panel.component.ts","../../../components/side-panel/side-panel.component.html","../../../components/side-panel/side-panel-footer.directive.ts","../../../components/side-panel/side-panel-view.component.ts","../../../components/side-panel/side-panel-view.component.html"],"sourcesContent":["import { InjectionToken, OutputEmitterRef, Signal, TemplateRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nexport type SidePanelPosition = 'left' | 'right';\n\nexport enum SidePanelAnimationState {\n Open = 'open',\n Closed = 'closed',\n ClosedRight = 'closedRight',\n ClosedLeft = 'closedLeft',\n}\n\nexport type SidePanelSize = 'small' | 'large' | 'x-large';\n\n/**\n * What a `ui-side-panel-view` registers with the surrounding `SidePanelComponent`. The panel\n * types its registration against this rather than importing the view component, which keeps\n * the two files free of a runtime import cycle. `undefined` means \"falls back to the config\".\n */\nexport interface SidePanelViewRef {\n readonly title: Signal<string | undefined>;\n readonly showBackButton: Signal<boolean | undefined>;\n readonly footerTemplate: Signal<TemplateRef<unknown> | null>;\n readonly footerDivider: Signal<boolean>;\n readonly fillHeight: Signal<boolean>;\n readonly back: OutputEmitterRef<void>;\n}\n\nexport class SidePanelConfig {\n title: string;\n position: SidePanelPosition;\n showBackButton: boolean;\n data?: unknown;\n showCloseButton?: boolean;\n showHeader?: boolean;\n panelClass?: string;\n size?: SidePanelSize;\n testId?: string;\n}\n\nexport const defaultSidePanelConfig: SidePanelConfig = {\n position: 'right',\n showBackButton: false,\n title: '',\n data: undefined,\n showHeader: true,\n showCloseButton: true,\n size: 'small',\n};\n\nexport const SIDE_PANEL_CONFIG = new InjectionToken<SidePanelConfig>('SIDE_PANEL_CONFIG', {\n providedIn: 'root',\n factory: () => defaultSidePanelConfig,\n});\n\n/**\n * Reference to a side panel opened via the SidePanelService.\n * Similar to MatDialogRef from Angular Material.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors MatDialogRef<T, R = any>: untyped-by-default result/component types for consumer ergonomics; the ref is invariant in T/R so `unknown` defaults would break internal ref storage in SidePanelService\nexport class SidePanelRef<T = any, R = any> {\n private readonly _afterClosed = new Subject<T | undefined>();\n\n /**\n * Instance of the component loaded into the side panel.\n * Will be undefined if a TemplateRef was used instead of a component.\n */\n componentInstance?: R;\n\n /**\n * Observable that emits when the side panel is closed.\n * Emits the result passed to the close method, or undefined if no result was provided.\n */\n afterClosed(): Observable<T | undefined> {\n return this._afterClosed.asObservable();\n }\n\n /**\n * Closes the side panel with an optional result.\n * @param result Optional data to be emitted via afterClosed()\n */\n close(_result?: T): void {\n // This will be overridden by the service\n }\n\n /** @internal */\n _emitClose(result?: T): void {\n this._afterClosed.next(result);\n this._afterClosed.complete();\n }\n}\n","/* eslint-disable @typescript-eslint/no-deprecated -- the @angular/animations trigger/state/style/animate/transition DSL is deprecated in 20.2 in favor of template-level animate.enter/animate.leave; migrating every Material/component animation is out of scope for this lint pass */\nimport { animate, state, style, transition, trigger } from '@angular/animations';\n\nimport { SidePanelAnimationState } from './side-panel.model';\n\nexport const sidePanelAnimationDuration = 150;\n\nexport const sidePanelAnimation = [\n trigger('slideInOut', [\n state(`${SidePanelAnimationState.Open}`, style({ transform: 'translateX(0)' })),\n state(`${SidePanelAnimationState.ClosedRight}`, style({ transform: 'translateX(100%)' })),\n state(`${SidePanelAnimationState.ClosedLeft}`, style({ transform: 'translateX(-100%)' })),\n transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.ClosedRight}`, [\n animate(`${sidePanelAnimationDuration}ms ease-in-out`),\n ]),\n transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.ClosedLeft}`, [\n animate(`${sidePanelAnimationDuration}ms ease-in-out`),\n ]),\n ]),\n];\n\nexport const backdropAnimation = [\n trigger('fadeInOut', [\n state(`${SidePanelAnimationState.Open}`, style({ opacity: 0.25 })),\n state(`${SidePanelAnimationState.Closed}`, style({ opacity: 0 })),\n transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.Closed}`, [\n animate(`${sidePanelAnimationDuration}ms ease-in-out`),\n ]),\n ]),\n];\n","import { InjectionToken } from '@angular/core';\n\nexport const SIDE_PANEL_DATA = new InjectionToken<unknown>('SIDE_PANEL_DATA');\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n inject,\n Injectable,\n Injector,\n TemplateRef,\n Type,\n} from '@angular/core';\n\nimport { SIDE_PANEL_DATA } from './side-panel-data-injection-token';\nimport { SidePanelComponent } from './side-panel.component';\nimport { SIDE_PANEL_CONFIG, SidePanelConfig, SidePanelPosition, SidePanelRef } from './side-panel.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SidePanelService {\n private SidePanelComponentRef?: ComponentRef<SidePanelComponent>;\n private contentComponentRef?: ComponentRef<unknown>;\n private embeddedViewRef?: EmbeddedViewRef<unknown>;\n private currentSidePanelRef?: SidePanelRef;\n private readonly defaultSidePanelConfig: SidePanelConfig = inject(SIDE_PANEL_CONFIG);\n private readonly injector = inject(EnvironmentInjector);\n private readonly appRef = inject(ApplicationRef);\n\n constructor() {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors MatDialog.open<T, R = any>: the returned ref's data/component types are untyped-by-default for consumer ergonomics\n open<T = any, R = any>(\n content: Type<R> | TemplateRef<unknown>,\n config: Partial<SidePanelConfig>,\n parentInjector?: Injector\n ): SidePanelRef<T, R> {\n const panelConfig: SidePanelConfig = { ...this.defaultSidePanelConfig, ...config };\n\n const sidePanelRef = new SidePanelRef<T, R>();\n this.currentSidePanelRef = sidePanelRef;\n\n sidePanelRef.close = (result?: T) => {\n this.close(result);\n };\n\n if (!this.SidePanelComponentRef) {\n const injector = this.createSidePanelInjector(panelConfig, parentInjector);\n const SidePanelComponentRef = this.createSidePanelComponent(panelConfig.position, injector);\n this.SidePanelComponentRef = SidePanelComponentRef;\n }\n\n if (content instanceof TemplateRef) {\n this.loadTemplate(content);\n } else {\n this.loadComponent(content, sidePanelRef);\n }\n\n this.SidePanelComponentRef.instance.open();\n\n return sidePanelRef;\n }\n\n close(result?: unknown): void {\n if (this.SidePanelComponentRef) {\n this.SidePanelComponentRef.instance.close(result);\n }\n }\n\n destroyComponent(result?: unknown): void {\n if (this.currentSidePanelRef) {\n // eslint-disable-next-line no-underscore-dangle -- _emitClose is SidePanelRef's @internal API (mirrors MatDialogRef internals)\n this.currentSidePanelRef._emitClose(result);\n this.currentSidePanelRef = undefined;\n }\n\n if (this.SidePanelComponentRef) {\n this.appRef.detachView(this.SidePanelComponentRef.hostView);\n this.SidePanelComponentRef.destroy();\n this.SidePanelComponentRef = undefined;\n }\n\n if (this.contentComponentRef) {\n this.contentComponentRef.destroy();\n this.contentComponentRef = undefined;\n }\n }\n\n private createSidePanelInjector(config: SidePanelConfig, parentInjector?: Injector): Injector {\n return Injector.create({\n parent: parentInjector,\n providers: [\n { provide: SidePanelConfig, useValue: config },\n { provide: SIDE_PANEL_DATA, useValue: config.data },\n ],\n });\n }\n\n private createSidePanelComponent(position: SidePanelPosition, injector: Injector): ComponentRef<SidePanelComponent> {\n const sidePanelComponentRef = createComponent(SidePanelComponent, {\n environmentInjector: this.injector,\n elementInjector: injector,\n });\n\n this.appRef.attachView(sidePanelComponentRef.hostView);\n\n const sidePanelEl = (sidePanelComponentRef.hostView as EmbeddedViewRef<unknown>).rootNodes[0] as HTMLElement;\n sidePanelEl.querySelector('.side-panel')?.classList.add(position);\n\n document.body.appendChild(sidePanelEl);\n\n return sidePanelComponentRef;\n }\n\n private loadComponent<T, R>(component: Type<R>, sidePanelRef: SidePanelRef<T, R>): void {\n const viewContainerRef = this.SidePanelComponentRef?.instance.sidePanelContainer;\n if (viewContainerRef) {\n viewContainerRef().clear();\n this.contentComponentRef = viewContainerRef().createComponent(component);\n // Set the component instance on the SidePanelRef\n sidePanelRef.componentInstance = this.contentComponentRef.instance as R;\n }\n }\n\n private loadTemplate(template: TemplateRef<unknown>): void {\n const viewContainerRef = this.SidePanelComponentRef?.instance.sidePanelContainer;\n if (viewContainerRef) {\n viewContainerRef().clear();\n this.embeddedViewRef = viewContainerRef().createEmbeddedView(template);\n }\n }\n}\n","import { AsyncPipe, NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe, LanguageService } from '@testgorilla/tgo-ui/components/core';\nimport { TooltipComponentModule } from '@testgorilla/tgo-ui/components/tooltip';\n\nimport { backdropAnimation, sidePanelAnimation, sidePanelAnimationDuration } from './side-panel.animations';\nimport {\n SidePanelAnimationState,\n SidePanelConfig,\n SidePanelPosition,\n SidePanelSize,\n SidePanelViewRef,\n} from './side-panel.model';\nimport { SidePanelService } from './side-panel.service';\n\n@Component({\n selector: 'ui-side-panel',\n templateUrl: './side-panel.component.html',\n styleUrls: ['./side-panel.component.scss'],\n // eslint-disable-next-line @typescript-eslint/no-deprecated -- the @angular/animations DSL is deprecated in 20.2 in favor of template-level animate.enter/animate.leave; migrating every component animation is out of scope for the Angular 22 upgrade\n animations: [sidePanelAnimation, backdropAnimation],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TooltipComponentModule, ButtonComponentModule, UiTranslatePipe, AsyncPipe, NgClass, NgTemplateOutlet],\n})\nexport class SidePanelComponent {\n private readonly sidePanelService = inject(SidePanelService);\n public sidePanelConfig = inject(SidePanelConfig);\n\n sidePanelPosition = signal<SidePanelPosition>('right');\n\n sidePanelContainer = viewChild.required('sidePanelContainer', { read: ViewContainerRef });\n sidePanel = viewChild.required<ElementRef<HTMLDivElement>>('sidePanel');\n backdrop = viewChild.required<ElementRef<HTMLDivElement>>('sidePanelBackdrop');\n language = LanguageService.defaultLanguage;\n isOpen = signal<boolean>(false);\n size = signal<SidePanelSize | undefined>(undefined);\n isSmall = computed(() => this.size() === 'small');\n isLarge = computed(() => this.size() === 'large');\n isXLarge = computed(() => this.size() === 'x-large');\n\n private readonly activeView = signal<SidePanelViewRef | null>(null);\n\n // The active view owns the header and the footer while it is registered, falling back to the config.\n protected readonly headerTitle = computed(() => this.activeView()?.title() ?? this.sidePanelConfig.title);\n\n protected readonly showBackButton = computed(\n () => this.activeView()?.showBackButton() ?? this.sidePanelConfig.showBackButton\n );\n\n protected readonly footerTemplate = computed(() => this.activeView()?.footerTemplate() ?? null);\n\n /** A view owns the back button only when it asked for one; otherwise the config did. */\n private readonly viewOwnsBackButton = computed(() => this.activeView()?.showBackButton() !== undefined);\n\n protected readonly footerDivider = computed(() => this.activeView()?.footerDivider() ?? false);\n\n protected readonly fillHeight = computed(() => this.activeView()?.fillHeight() ?? false);\n\n animation = computed(() => {\n if (this.isOpen()) {\n return SidePanelAnimationState.Open;\n }\n\n return this.sidePanelPosition() === 'left'\n ? SidePanelAnimationState.ClosedLeft\n : SidePanelAnimationState.ClosedRight;\n });\n\n // The config is injected once per panel and never mutated, so plain readonly fields suffice.\n protected readonly closeButtonTestId = this.sidePanelConfig.testId ? `${this.sidePanelConfig.testId}-close` : null;\n protected readonly backButtonTestId = this.sidePanelConfig.testId ? `${this.sidePanelConfig.testId}-back` : null;\n\n constructor() {\n const { position, size } = this.sidePanelConfig;\n this.sidePanelPosition.set(position);\n this.size.set(size);\n }\n\n /** The last view to register wins, so a control-flow swap in either order ends up correct. */\n registerView(view: SidePanelViewRef): void {\n this.activeView.set(view);\n }\n\n /** Guarded by identity so a view destroyed after its successor was created cannot unseat it. */\n unregisterView(view: SidePanelViewRef): void {\n if (this.activeView() === view) {\n this.activeView.set(null);\n }\n }\n\n /**\n * The action follows whoever asked for the button, so that a consumer who leaves the flag in the\n * config and adopts a view for its footer gets the old close behaviour rather than a dead button.\n */\n protected onBack(): void {\n const view = this.activeView();\n if (view && this.viewOwnsBackButton()) {\n view.back.emit();\n\n return;\n }\n\n this.close();\n }\n\n open(): void {\n setTimeout(() => {\n this.isOpen.set(true);\n });\n }\n\n close(result?: unknown): void {\n this.isOpen.set(false);\n setTimeout(() => {\n this.sidePanelService.destroyComponent(result);\n }, sidePanelAnimationDuration);\n }\n}\n","<div\n class=\"side-panel-backdrop\"\n #sidePanelBackdrop\n tabindex=\"0\"\n (click)=\"close()\"\n (keydown.enter)=\"close()\"\n [@fadeInOut]=\"isOpen() ? 'open' : 'closed'\"\n></div>\n<div\n class=\"side-panel\"\n [class]=\"sidePanelConfig.panelClass\"\n [class.side-panel-small]=\"isSmall()\"\n [class.side-panel-large]=\"isLarge()\"\n [class.side-panel-x-large]=\"isXLarge()\"\n #sidePanel\n [@slideInOut]=\"animation()\"\n [attr.data-testid]=\"sidePanelConfig.testId ?? null\"\n>\n @if (sidePanelConfig.showHeader) {\n <div class=\"side-panel-header\">\n <div class=\"side-panel-title-container\">\n @if (showBackButton()) {\n <ui-button\n class=\"side-panel-action\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (click)=\"onBack()\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId\"\n size=\"medium\"\n ></ui-button>\n }\n <span class=\"side-panel-title h3 bold\">{{ headerTitle() }}</span>\n </div>\n @if (sidePanelConfig.showCloseButton) {\n <ui-button\n class=\"side-panel-action side-panel-action-close\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [testId]=\"closeButtonTestId\"\n (click)=\"close()\"\n size=\"medium\"\n ></ui-button>\n }\n </div>\n }\n\n <div class=\"side-panel-content\" [class.side-panel-content-fill]=\"fillHeight()\">\n <ng-container #sidePanelContainer></ng-container>\n </div>\n\n @if (footerTemplate(); as footer) {\n <div class=\"side-panel-footer\" [class.side-panel-footer-divided]=\"footerDivider()\">\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n }\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/** Marks the `ng-template` inside a `ui-side-panel-view` that holds the view's footer. */\n@Directive({\n selector: 'ng-template[uiSidePanelFooter]',\n standalone: true,\n})\nexport class SidePanelFooterDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport { SidePanelFooterDirective } from './side-panel-footer.directive';\nimport { SidePanelComponent } from './side-panel.component';\nimport { SidePanelViewRef } from './side-panel.model';\n\n// `undefined` has to survive so the panel can tell \"not set by this view\" apart from an\n// explicit `false` and fall back to `SidePanelConfig`.\nfunction optionalBooleanAttribute(value: unknown): boolean | undefined {\n return value === undefined ? undefined : booleanAttribute(value);\n}\n\n/**\n * One view inside a side panel: its body, its header title and its footer. Render a different\n * one per step to switch views without reopening the panel.\n */\n@Component({\n selector: 'ui-side-panel-view',\n templateUrl: './side-panel-view.component.html',\n styleUrls: ['./side-panel-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '[class.side-panel-view-fill]': 'fillHeight()',\n // `title` is a global HTML attribute and Angular keeps a statically set one on the host, so\n // `<ui-side-panel-view title=\"...\">` would hang a native tooltip over the whole view body.\n '[attr.title]': 'null',\n },\n})\nexport class SidePanelViewComponent implements SidePanelViewRef {\n /** Left unset, the panel keeps the title from `SidePanelConfig`. */\n readonly title = input<string>();\n\n /** Left unset, the panel falls back to `SidePanelConfig.showBackButton`. */\n readonly showBackButton = input(undefined, { transform: optionalBooleanAttribute });\n\n /** Draws a rule above the footer, separating it from content that scrolls underneath. */\n readonly footerDivider = input(false, { transform: booleanAttribute });\n\n /**\n * Makes the view fill the panel body instead of growing with its content, and stops the panel\n * scrolling. Content then owns its own overflow — give the element that should scroll\n * `flex: 1; min-height: 0; overflow: auto`, or `height: 100%`.\n */\n readonly fillHeight = input(false, { transform: booleanAttribute });\n\n /** The panel does not close itself — move to the previous view, or close it yourself. */\n readonly back = output<void>();\n\n private readonly footer = contentChild(SidePanelFooterDirective);\n\n readonly footerTemplate = computed(() => this.footer()?.templateRef ?? null);\n\n private readonly panel = inject(SidePanelComponent, { optional: true });\n\n constructor() {\n this.panel?.registerView(this);\n inject(DestroyRef).onDestroy(() => this.panel?.unregisterView(this));\n }\n}\n","<ng-content></ng-content>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-side-sheet.mjs","names":["i1.SideSheetService"],"sources":["../../../components/side-sheet/side-sheet.service.ts","../../../components/side-sheet/side-sheet.component.ts","../../../components/side-sheet/side-sheet.component.html","../../../components/side-sheet/side-sheet.component.module.ts"],"sourcesContent":["import { ApplicationRef, Injectable, Type, ViewContainerRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { SideSheetConfig } from './side-sheet.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SideSheetService {\n private readonly componentRef$ = new Subject<SideSheetConfig | null>();\n\n constructor(private readonly applicationRef: ApplicationRef) {}\n\n open<T>(config: SideSheetConfig): T {\n const { componentRef: _componentRef, inputs, ...configFields } = config;\n const rootViewContainerRef = this.applicationRef.components[0].injector.get(ViewContainerRef);\n const componentReference = rootViewContainerRef.createComponent(config.componentRef as Type<unknown>);\n\n Object.entries(inputs ?? {}).forEach(([key, value]) => componentReference.setInput(key, value));\n\n this.componentRef$.next({ ...configFields, componentRef: componentReference });\n return componentReference.instance as T;\n }\n\n close(): void {\n this.componentRef$.next(null);\n }\n\n getComponentRef(): Observable<SideSheetConfig | null> {\n return this.componentRef$.asObservable();\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n DestroyRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n OnInit,\n Optional,\n Output,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatDrawer, MatDrawerContainer, MatDrawerContent } from '@angular/material/sidenav';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { LogoComponent } from '@testgorilla/tgo-ui/components/logo';\n\nimport { SideSheetConfig, SideSheetPosition } from './side-sheet.model';\nimport { SideSheetService } from './side-sheet.service';\n\n@Component({\n selector: 'ui-side-sheet',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './side-sheet.component.html',\n styleUrls: ['./side-sheet.component.scss'],\n imports: [\n MatDrawerContainer,\n MatDrawer,\n ButtonComponent,\n MatTooltip,\n LogoComponent,\n MatDrawerContent,\n AsyncPipe,\n UiTranslatePipe,\n ],\n})\nexport class SideSheetComponent implements OnInit {\n /**\n * Set position. Defaults \"end\"\n *\n * @type {SideSheetPosition}\n * @memberof SideSheetComponent\n */\n @Input() position: SideSheetPosition = 'end';\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof SideSheetComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n @Input() testId: string | null = null;\n\n get closeButtonTestId(): string | null {\n return this.testId ? `${this.testId}-close` : null;\n }\n\n get backButtonTestId(): string | null {\n return this.testId ? `${this.testId}-back` : null;\n }\n\n @Output() openChange = new EventEmitter<boolean>();\n\n @ViewChild('drawer') drawer: MatDrawer;\n @ViewChild('container', { read: ViewContainerRef, static: false }) container: ViewContainerRef;\n\n @HostListener('keydown.esc')\n onEscPress(): void {\n void this.drawer.close();\n }\n\n protected title = '';\n protected showBackButton = false;\n protected showTitleTooltip = false;\n protected showLogo = false;\n protected componentRef$ = this.sideSheetService.getComponentRef();\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly sideSheetService: SideSheetService,\n private readonly destroyRef: DestroyRef,\n private readonly cdr: ChangeDetectorRef\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n ngOnInit(): void {\n this.setComponentRef();\n }\n\n private setComponentRef(): void {\n this.componentRef$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(config => {\n if (config?.componentRef && this.container && this.drawer) {\n this.setConfig(config);\n // `open()`/`close()` rather than `toggle()`: `SideSheetService` broadcasts to every\n // sheet regardless of its state, and a toggle on an already-closed drawer would slide\n // open an empty panel (e.g. a `close()` issued after the drawer self-closed).\n void this.drawer.open();\n this.container.clear();\n this.container.insert((config.componentRef as ComponentRef<unknown>).hostView);\n } else if (!config) {\n void this.drawer.close();\n this.container.clear();\n }\n // Async mutation of template-bound config fields (title/showLogo/...).\n this.cdr.markForCheck();\n });\n }\n\n private setConfig(config: SideSheetConfig): void {\n this.title = config.title ?? '';\n this.showLogo = config.showLogo ?? false;\n this.showBackButton = config.showBackButton ?? false;\n this.showTitleTooltip = config.showTitleTooltip ?? false;\n\n if (config.closed) {\n config.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n void this.drawer.close();\n });\n }\n }\n\n protected onClose(): void {\n void this.drawer.close();\n }\n\n onOpenChange(isOpened: boolean): void {\n this.openChange.emit(isOpened);\n }\n}\n","<ng-container>\n <mat-drawer-container class=\"side-sheet-container\" [attr.theme]=\"applicationTheme\" [hasBackdrop]=\"true\">\n <mat-drawer\n (closedStart)=\"onOpenChange(false)\"\n (openedStart)=\"onOpenChange(true)\"\n #drawer\n [mode]=\"'over'\"\n [autoFocus]=\"false\"\n class=\"side-sheet-content\"\n [position]=\"position\"\n [attr.data-testid]=\"testId\"\n >\n <div class=\"header\">\n <div class=\"title\">\n @if (showBackButton) {\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"applicationTheme === 'classic' ? 'Arrow_left' : 'Arrow-chevron-left-filled'\"\n [companyColor]=\"applicationTheme === 'classic' ? '#000' : '#242424'\"\n [applicationTheme]=\"applicationTheme\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId\"\n (click)=\"onClose()\"\n ></ui-button>\n }\n @if (title) {\n <span [matTooltip]=\"showTitleTooltip ? title : ''\" [matTooltipClass]=\"applicationTheme\">{{ title }}</span>\n }\n @if (showLogo) {\n <ui-logo></ui-logo>\n }\n </div>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [companyColor]=\"applicationTheme === 'classic' ? '#000' : '#242424'\"\n [applicationTheme]=\"applicationTheme\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [testId]=\"closeButtonTestId\"\n (click)=\"onClose()\"\n ></ui-button>\n </div>\n <ng-container #container></ng-container>\n </mat-drawer>\n <mat-drawer-content>\n <ng-content></ng-content>\n </mat-drawer-content>\n </mat-drawer-container>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { LogoComponentModule } from '@testgorilla/tgo-ui/components/logo';\n\nimport { SideSheetComponent } from './side-sheet.component';\n\n@NgModule({\n exports: [SideSheetComponent],\n imports: [\n CommonModule,\n IconComponentModule,\n ButtonComponentModule,\n MatTooltipModule,\n MatSidenavModule,\n UiTranslatePipe,\n LogoComponentModule,\n SideSheetComponent,\n ],\n})\nexport class SideSheetComponentModule {}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-side-sheet.mjs","names":["i1.SideSheetService"],"sources":["../../../components/side-sheet/side-sheet.service.ts","../../../components/side-sheet/side-sheet.component.ts","../../../components/side-sheet/side-sheet.component.html","../../../components/side-sheet/side-sheet.component.module.ts"],"sourcesContent":["import { ApplicationRef, Injectable, Type, ViewContainerRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { SideSheetConfig } from './side-sheet.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SideSheetService {\n private readonly componentRef$ = new Subject<SideSheetConfig | null>();\n\n constructor(private readonly applicationRef: ApplicationRef) {}\n\n open<T>(config: SideSheetConfig): T {\n const { componentRef: _componentRef, inputs, ...configFields } = config;\n const rootViewContainerRef = this.applicationRef.components[0].injector.get(ViewContainerRef);\n const componentReference = rootViewContainerRef.createComponent(config.componentRef as Type<unknown>);\n\n Object.entries(inputs ?? {}).forEach(([key, value]) => componentReference.setInput(key, value));\n\n this.componentRef$.next({ ...configFields, componentRef: componentReference });\n return componentReference.instance as T;\n }\n\n close(): void {\n this.componentRef$.next(null);\n }\n\n getComponentRef(): Observable<SideSheetConfig | null> {\n return this.componentRef$.asObservable();\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n DestroyRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n OnInit,\n Optional,\n Output,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatDrawer, MatDrawerContainer, MatDrawerContent } from '@angular/material/sidenav';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { LogoComponent } from '@testgorilla/tgo-ui/components/logo';\n\nimport { SideSheetConfig, SideSheetPosition } from './side-sheet.model';\nimport { SideSheetService } from './side-sheet.service';\n\n@Component({\n selector: 'ui-side-sheet',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './side-sheet.component.html',\n styleUrls: ['./side-sheet.component.scss'],\n imports: [\n MatDrawerContainer,\n MatDrawer,\n ButtonComponent,\n MatTooltip,\n LogoComponent,\n MatDrawerContent,\n AsyncPipe,\n UiTranslatePipe,\n ],\n})\nexport class SideSheetComponent implements OnInit {\n /**\n * Set position. Defaults \"end\"\n *\n * @type {SideSheetPosition}\n * @memberof SideSheetComponent\n */\n @Input() position: SideSheetPosition = 'end';\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof SideSheetComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n @Input() testId: string | null = null;\n\n get closeButtonTestId(): string | null {\n return this.testId ? `${this.testId}-close` : null;\n }\n\n get backButtonTestId(): string | null {\n return this.testId ? `${this.testId}-back` : null;\n }\n\n @Output() openChange = new EventEmitter<boolean>();\n\n @ViewChild('drawer') drawer: MatDrawer;\n @ViewChild('container', { read: ViewContainerRef, static: false }) container: ViewContainerRef;\n\n @HostListener('keydown.esc')\n onEscPress(): void {\n void this.drawer.close();\n }\n\n protected title = '';\n protected showBackButton = false;\n protected showTitleTooltip = false;\n protected showLogo = false;\n protected componentRef$ = this.sideSheetService.getComponentRef();\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly sideSheetService: SideSheetService,\n private readonly destroyRef: DestroyRef,\n private readonly cdr: ChangeDetectorRef\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n ngOnInit(): void {\n this.setComponentRef();\n }\n\n private setComponentRef(): void {\n this.componentRef$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(config => {\n if (config?.componentRef && this.container && this.drawer) {\n this.setConfig(config);\n // `open()`/`close()` rather than `toggle()`: `SideSheetService` broadcasts to every\n // sheet regardless of its state, and a toggle on an already-closed drawer would slide\n // open an empty panel (e.g. a `close()` issued after the drawer self-closed).\n void this.drawer.open();\n this.container.clear();\n this.container.insert((config.componentRef as ComponentRef<unknown>).hostView);\n } else if (!config) {\n void this.drawer.close();\n this.container.clear();\n }\n // Async mutation of template-bound config fields (title/showLogo/...).\n this.cdr.markForCheck();\n });\n }\n\n private setConfig(config: SideSheetConfig): void {\n this.title = config.title ?? '';\n this.showLogo = config.showLogo ?? false;\n this.showBackButton = config.showBackButton ?? false;\n this.showTitleTooltip = config.showTitleTooltip ?? false;\n\n if (config.closed) {\n config.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n void this.drawer.close();\n });\n }\n }\n\n protected onClose(): void {\n void this.drawer.close();\n }\n\n onOpenChange(isOpened: boolean): void {\n this.openChange.emit(isOpened);\n }\n}\n","<ng-container>\n <mat-drawer-container class=\"side-sheet-container\" [attr.theme]=\"applicationTheme\" [hasBackdrop]=\"true\">\n <mat-drawer\n (closedStart)=\"onOpenChange(false)\"\n (openedStart)=\"onOpenChange(true)\"\n #drawer\n [mode]=\"'over'\"\n [autoFocus]=\"false\"\n class=\"side-sheet-content\"\n [position]=\"position\"\n [attr.data-testid]=\"testId\"\n >\n <div class=\"header\">\n <div class=\"title\">\n @if (showBackButton) {\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"applicationTheme === 'classic' ? 'Arrow_left' : 'Arrow-chevron-left-filled'\"\n [companyColor]=\"applicationTheme === 'classic' ? '#000' : '#242424'\"\n [applicationTheme]=\"applicationTheme\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId\"\n (click)=\"onClose()\"\n ></ui-button>\n }\n @if (title) {\n <span [matTooltip]=\"showTitleTooltip ? title : ''\" [matTooltipClass]=\"applicationTheme\">{{ title }}</span>\n }\n @if (showLogo) {\n <ui-logo></ui-logo>\n }\n </div>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [companyColor]=\"applicationTheme === 'classic' ? '#000' : '#242424'\"\n [applicationTheme]=\"applicationTheme\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [testId]=\"closeButtonTestId\"\n (click)=\"onClose()\"\n ></ui-button>\n </div>\n <ng-container #container></ng-container>\n </mat-drawer>\n <mat-drawer-content>\n <ng-content></ng-content>\n </mat-drawer-content>\n </mat-drawer-container>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { LogoComponentModule } from '@testgorilla/tgo-ui/components/logo';\n\nimport { SideSheetComponent } from './side-sheet.component';\n\n@NgModule({\n exports: [SideSheetComponent],\n imports: [\n CommonModule,\n IconComponentModule,\n ButtonComponentModule,\n MatTooltipModule,\n MatSidenavModule,\n UiTranslatePipe,\n LogoComponentModule,\n SideSheetComponent,\n ],\n})\nexport class SideSheetComponentModule {}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-snackbar.mjs","names":[],"sources":["../../../components/snackbar/snackbar.component.ts","../../../components/snackbar/snackbar.component.html","../../../components/snackbar/snackbar.service.ts","../../../components/snackbar/snackbar.component.module.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport { NgClass, AsyncPipe, UpperCasePipe, SlicePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, OnInit, Optional } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { LinkTargetType } from '@testgorilla/tgo-ui/components/alert-banner';\nimport { ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { alertBarsUtil, ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconName, IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { SnackbarLink, SnackbarType, SnackbarVariant } from './snackbar.model';\n\n@Component({\n selector: 'ui-snackbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './snackbar.component.html',\n styleUrls: ['./snackbar.component.scss'],\n /* eslint-disable @typescript-eslint/no-deprecated -- the @angular/animations trigger/state/style/animate/transition DSL is deprecated in 20.2 in favor of template-level animate.enter/animate.leave; migrating every Material/component animation is out of scope for this lint pass */\n animations: [\n trigger('openClose', [\n transition(':enter', [\n style({ bottom: '-55px', opacity: 0 }),\n animate('0.2s ease-out', style({ opacity: 1, bottom: '10px' })),\n ]),\n transition(':leave', [\n style({ bottom: '10px', opacity: 1 }),\n animate('0.2s ease-in', style({ bottom: '-55px', opacity: 0 })),\n ]),\n ]),\n ],\n imports: [\n NgClass,\n MatTooltip,\n IconComponentModule,\n ButtonComponent,\n AsyncPipe,\n UpperCasePipe,\n SlicePipe,\n UiTranslatePipe,\n ],\n})\nexport class SnackbarComponent implements OnInit {\n /**\n * Background color of the button while in active state\n *\n * @type {SnackbarType}\n * @memberof SnackbarComponent\n */\n @Input() snackbarType: SnackbarType = 'success';\n\n /**\n * Snackbar message\n *\n * @memberof SnackbarComponent\n */\n @Input() message = '';\n\n /**\n * Snackbar message from html\n *\n * @memberof SnackbarComponent\n */\n @Input() set html(value: string) {\n if (value) {\n this.safeHtml = value;\n }\n }\n\n /**\n * Set the time that the snackbar will be visible\n *\n * @memberof SnackbarComponent\n */\n @Input() seconds = 5;\n\n /**\n * Include dismmiss button\n *\n * @memberof SnackbarComponent\n */\n @Input() includeDismissButton = true;\n\n /**\n * Static or fixed position\n *\n * @memberof SnackbarComponent\n */\n @Input() fixed = true;\n\n /**\n * Link text that will appended at the end of message\n *\n * @memberof AlertBannerComponent\n */\n @Input() linkText? = '';\n\n /**\n * Link url\n *\n * @memberof AlertBannerComponent\n */\n @Input() linkUrl?: string;\n\n /**\n * Link target\n *\n * @type {@type {LinkTargetType}}\n * @memberof AlertBannerComponent\n */\n @Input() linkTarget?: LinkTargetType = '_blank';\n\n /**\n * The variant to be used\n *\n * @type {SnackbarVariant}\n * @memberof SnackbarComponent\n */\n @Input() variant: SnackbarVariant = 'desktop';\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof SnackbarComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * Close button tooltip\n *\n * @type {string}\n * @memberof SnackbarComponent\n */\n @Input() closeButtonTooltip = '';\n\n @Input() testId: string | null = null;\n\n get dismissButtonTestId(): string | null {\n return this.testId ? `${this.testId}-dismiss` : null;\n }\n\n /**\n * A string representing the ARIA requirement for accessibility.\n * This attribute is used to indicate whether an input field is required for form submission.\n * @type {string}\n * @memberof SnackbarComponent\n */\n @Input() ariaDescribedby = '';\n\n iconName: IconName;\n showSnackbar = true;\n milisenconds: number;\n visible = false;\n timer?: number;\n timerStartedAt = 0;\n timerPausedAt = 0;\n position: string;\n safeHtml: string;\n\n translationContext = 'SNACKBAR.';\n protected readonly maxCharacters = 70;\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n @Inject(MAT_SNACK_BAR_DATA)\n private readonly data: {\n snackbarType: SnackbarType;\n message: string;\n link?: SnackbarLink;\n applicationTheme?: ApplicationTheme;\n html?: string;\n seconds?: number;\n },\n private readonly snackbarRef: MatSnackBarRef<SnackbarComponent>,\n private readonly cdr: ChangeDetectorRef\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n\n this.snackbarType = data.snackbarType ?? 'success';\n this.message = data.message ?? '';\n this.safeHtml = data.html ?? '';\n this.linkText = data.link?.text ?? '';\n this.linkUrl = data.link?.url ?? '';\n this.seconds = data.seconds ?? 5;\n }\n\n ngOnInit(): void {\n this.milisenconds = this.seconds * 1000;\n this.iconName = alertBarsUtil.setIcon(this.snackbarType) as IconName;\n this.show();\n this.position = alertBarsUtil.setPosition(this.fixed);\n }\n\n //Show snackbar\n show() {\n this.timerStartedAt = Date.now();\n this.visible = true;\n this.timer = window.setTimeout(() => this.hide(), this.milisenconds);\n }\n\n //Hide snackbar\n hide() {\n this.visible = false;\n this.timerPausedAt = 0;\n this.timerStartedAt = 0;\n clearTimeout(this.timer);\n this.timer = undefined;\n this.dismissSnackbar();\n // `visible` gates the template and this runs from setTimeout.\n this.cdr.markForCheck();\n }\n\n //Pause timer when mouse enter\n onMouseEnter() {\n this.visible = true;\n this.timerPausedAt = Date.now();\n clearTimeout(this.timer);\n }\n\n //Continue timer when mouse leave\n onMouseLeave() {\n const diff = this.timerPausedAt - this.timerStartedAt;\n if (diff <= 0) {\n return this.hide();\n }\n this.timer = window.setTimeout(() => this.hide(), this.milisenconds - diff);\n }\n\n //Hide snackbar when dismiss button is clicked\n dismissClick() {\n this.visible = false;\n this.dismissSnackbar();\n }\n\n onLinkClick(event: Event): void {\n event?.preventDefault();\n\n if (this.data.link?.action) {\n this.data.link?.action();\n } else if (this.data.link?.url) {\n window.open(this.data.link?.url, '_blank');\n }\n }\n\n private dismissSnackbar(): void {\n if (Object.keys(this.snackbarRef).length > 0) {\n this.snackbarRef.dismiss();\n }\n }\n}\n","<ng-container>\n @if (visible) {\n <!-- Kept as role=\"alert\": the E2E suite reads the message through getByRole('alert'). -->\n <div\n [ngClass]=\"snackbarType + ' ' + position\"\n [@openClose]\n class=\"snackbar-container\"\n [attr.theme]=\"applicationTheme\"\n [class.mobile]=\"variant === 'mobile'\"\n [class.desktop]=\"variant === 'desktop'\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n [attr.data-testid]=\"testId ?? 'snackbar-wrapper'\"\n [attr.data-test-snackbar-type]=\"snackbarType\"\n [attr.aria-describedby]=\"'describedby'\"\n role=\"alert\"\n [attr.aria-labelledby]=\"'labelledby'\"\n >\n <span style=\"position: absolute; left: -9999px\" id=\"labelledby\">{{\n 'ALERT_BANNER.' + (snackbarType | uppercase) | uiTranslate | async\n }}</span>\n <span style=\"position: absolute; left: -9999px\"\n >{{ message }}\n @if (!!linkText) {\n <a [target]=\"linkTarget\" [href]=\"linkUrl\" (click)=\"onLinkClick($event)\">{{ linkText }}</a>\n }\n </span>\n <span [style.display]=\"'none'\" id=\"describedby\">{{ ariaDescribedby }}</span>\n <div\n aria-hidden=\"true\"\n class=\"snackbar-text\"\n [matTooltip]=\"message.length > maxCharacters ? message : ''\"\n data-testid=\"snackbar-content\"\n >\n @if (applicationTheme === 'classic') {\n <ui-icon [name]=\"iconName\" size=\"24\"></ui-icon>\n }\n {{ message.length > maxCharacters ? (message | slice: 0 : maxCharacters) + '..' : message }}\n @if (safeHtml) {\n <div [innerHTML]=\"safeHtml\"></div>\n }\n @if (!!linkText) {\n <a [target]=\"linkTarget\" [href]=\"linkUrl\" (click)=\"onLinkClick($event)\">{{ linkText }}</a>\n }\n </div>\n @if (includeDismissButton && applicationTheme === 'classic') {\n <ui-button\n variant=\"text\"\n [label]=\"(translationContext + 'DISMISS' | uiTranslate | async)!\"\n [applicationTheme]=\"applicationTheme !== 'classic' ? 'light' : 'classic'\"\n (buttonClickEvent)=\"dismissClick()\"\n data-testid=\"snackbar-dismiss-button\"\n [testId]=\"dismissButtonTestId\"\n ></ui-button>\n }\n @if (includeDismissButton && applicationTheme !== 'classic') {\n <ui-button\n [variant]=\"'icon-button'\"\n [applicationTheme]=\"'light'\"\n [iconName]=\"'Close-in-line'\"\n [size]=\"'small'\"\n [tooltip]=\"(closeButtonTooltip || ('COMMON.CLOSE' | uiTranslate | async))!\"\n (click)=\"dismissClick()\"\n [ariaLabel]=\"(closeButtonTooltip || ('COMMON.CLOSE' | uiTranslate | async))!\"\n data-testid=\"snackbar-dismiss-button\"\n [testId]=\"dismissButtonTestId\"\n ></ui-button>\n }\n </div>\n }\n</ng-container>\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';\n\nimport { SnackbarComponent } from './snackbar.component';\nimport { SnackbarLink, SnackbarType } from './snackbar.model';\n\n@Injectable()\nexport class SnackbarService {\n constructor(private readonly snackBar: MatSnackBar) {}\n\n error(message: string, applicationTheme?: ApplicationTheme, html?: string, link?: SnackbarLink, seconds?: number) {\n return this.show('error', message, applicationTheme, html, link, seconds);\n }\n\n success(message: string, applicationTheme?: ApplicationTheme, html?: string, link?: SnackbarLink, seconds?: number) {\n return this.show('success', message, applicationTheme, html, link, seconds);\n }\n\n info(message: string, applicationTheme?: ApplicationTheme, html?: string, link?: SnackbarLink, seconds?: number) {\n return this.show('info', message, applicationTheme, html, link, seconds);\n }\n\n warning(message: string, applicationTheme?: ApplicationTheme, html?: string, link?: SnackbarLink, seconds?: number) {\n return this.show('warning', message, applicationTheme, html, link, seconds);\n }\n\n // eslint-disable-next-line max-params -- public method signature; options-object refactor is breaking, deferred to the breaking-change MAJOR (see plan)\n show(\n snackbarType: SnackbarType,\n message: string,\n applicationTheme?: ApplicationTheme,\n html?: string,\n link?: SnackbarLink,\n seconds?: number\n ) {\n const componentRef = this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n snackbarType,\n message,\n link,\n html,\n seconds,\n },\n });\n if (applicationTheme) {\n componentRef.instance.applicationTheme = applicationTheme;\n }\n return componentRef;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { SnackbarComponent } from './snackbar.component';\nimport { SnackbarService } from './snackbar.service';\n\n@NgModule({\n imports: [\n CommonModule,\n ButtonComponentModule,\n IconComponentModule,\n UiTranslatePipe,\n MatSnackBarModule,\n MatTooltipModule,\n SnackbarComponent,\n ],\n exports: [SnackbarComponent],\n providers: [SnackbarService],\n})\nexport class SnackbarComponentModule {}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-snackbar.mjs","names":[],"sources":["../../../components/snackbar/snackbar.component.ts","../../../components/snackbar/snackbar.component.html","../../../components/snackbar/snackbar.service.ts","../../../components/snackbar/snackbar.component.module.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport { NgClass, AsyncPipe, UpperCasePipe, SlicePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, OnInit, Optional } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { LinkTargetType } from '@testgorilla/tgo-ui/components/alert-banner';\nimport { ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { alertBarsUtil, ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconName, IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { SnackbarLink, SnackbarType, SnackbarVariant } from './snackbar.model';\n\n@Component({\n selector: 'ui-snackbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './snackbar.component.html',\n styleUrls: ['./snackbar.component.scss'],\n /* eslint-disable @typescript-eslint/no-deprecated -- the @angular/animations trigger/state/style/animate/transition DSL is deprecated in 20.2 in favor of template-level animate.enter/animate.leave; migrating every Material/component animation is out of scope for this lint pass */\n animations: [\n trigger('openClose', [\n transition(':enter', [\n style({ bottom: '-55px', opacity: 0 }),\n animate('0.2s ease-out', style({ opacity: 1, bottom: '10px' })),\n ]),\n transition(':leave', [\n style({ bottom: '10px', opacity: 1 }),\n animate('0.2s ease-in', style({ bottom: '-55px', opacity: 0 })),\n ]),\n ]),\n ],\n imports: [\n NgClass,\n MatTooltip,\n IconComponentModule,\n ButtonComponent,\n AsyncPipe,\n UpperCasePipe,\n SlicePipe,\n UiTranslatePipe,\n ],\n})\nexport class SnackbarComponent implements OnInit {\n /**\n * Background color of the button while in active state\n *\n * @type {SnackbarType}\n * @memberof SnackbarComponent\n */\n @Input() snackbarType: SnackbarType = 'success';\n\n /**\n * Snackbar message\n *\n * @memberof SnackbarComponent\n */\n @Input() message = '';\n\n /**\n * Snackbar message from html\n *\n * @memberof SnackbarComponent\n */\n @Input() set html(value: string) {\n if (value) {\n this.safeHtml = value;\n }\n }\n\n /**\n * Set the time that the snackbar will be visible\n *\n * @memberof SnackbarComponent\n */\n @Input() seconds = 5;\n\n /**\n * Include dismmiss button\n *\n * @memberof SnackbarComponent\n */\n @Input() includeDismissButton = true;\n\n /**\n * Static or fixed position\n *\n * @memberof SnackbarComponent\n */\n @Input() fixed = true;\n\n /**\n * Link text that will appended at the end of message\n *\n * @memberof AlertBannerComponent\n */\n @Input() linkText? = '';\n\n /**\n * Link url\n *\n * @memberof AlertBannerComponent\n */\n @Input() linkUrl?: string;\n\n /**\n * Link target\n *\n * @type {@type {LinkTargetType}}\n * @memberof AlertBannerComponent\n */\n @Input() linkTarget?: LinkTargetType = '_blank';\n\n /**\n * The variant to be used\n *\n * @type {SnackbarVariant}\n * @memberof SnackbarComponent\n */\n @Input() variant: SnackbarVariant = 'desktop';\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof SnackbarComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * Close button tooltip\n *\n * @type {string}\n * @memberof SnackbarComponent\n */\n @Input() closeButtonTooltip = '';\n\n @Input() testId: string | null = null;\n\n get dismissButtonTestId(): string | null {\n return this.testId ? `${this.testId}-dismiss` : null;\n }\n\n /**\n * A string representing the ARIA requirement for accessibility.\n * This attribute is used to indicate whether an input field is required for form submission.\n * @type {string}\n * @memberof SnackbarComponent\n */\n @Input() ariaDescribedby = '';\n\n iconName: IconName;\n showSnackbar = true;\n milisenconds: number;\n visible = false;\n timer?: number;\n timerStartedAt = 0;\n timerPausedAt = 0;\n position: string;\n safeHtml: string;\n\n translationContext = 'SNACKBAR.';\n protected readonly maxCharacters = 70;\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n @Inject(MAT_SNACK_BAR_DATA)\n private readonly data: {\n snackbarType: SnackbarType;\n message: string;\n link?: SnackbarLink;\n applicationTheme?: ApplicationTheme;\n html?: string;\n seconds?: number;\n },\n private readonly snackbarRef: MatSnackBarRef<SnackbarComponent>,\n private readonly cdr: ChangeDetectorRef\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n\n this.snackbarType = data.snackbarType ?? 'success';\n this.message = data.message ?? '';\n this.safeHtml = data.html ?? '';\n this.linkText = data.link?.text ?? '';\n this.linkUrl = data.link?.url ?? '';\n this.seconds = data.seconds ?? 5;\n }\n\n ngOnInit(): void {\n this.milisenconds = this.seconds * 1000;\n this.iconName = alertBarsUtil.setIcon(this.snackbarType) as IconName;\n this.show();\n this.position = alertBarsUtil.setPosition(this.fixed);\n }\n\n //Show snackbar\n show() {\n this.timerStartedAt = Date.now();\n this.visible = true;\n this.timer = window.setTimeout(() => this.hide(), this.milisenconds);\n }\n\n //Hide snackbar\n hide() {\n this.visible = false;\n this.timerPausedAt = 0;\n this.timerStartedAt = 0;\n clearTimeout(this.timer);\n this.timer = undefined;\n this.dismissSnackbar();\n // `visible` gates the template and this runs from setTimeout.\n this.cdr.markForCheck();\n }\n\n //Pause timer when mouse enter\n onMouseEnter() {\n this.visible = true;\n this.timerPausedAt = Date.now();\n clearTimeout(this.timer);\n }\n\n //Continue timer when mouse leave\n onMouseLeave() {\n const diff = this.timerPausedAt - this.timerStartedAt;\n if (diff <= 0) {\n return this.hide();\n }\n this.timer = window.setTimeout(() => this.hide(), this.milisenconds - diff);\n }\n\n //Hide snackbar when dismiss button is clicked\n dismissClick() {\n this.visible = false;\n this.dismissSnackbar();\n }\n\n onLinkClick(event: Event): void {\n event?.preventDefault();\n\n if (this.data.link?.action) {\n this.data.link?.action();\n } else if (this.data.link?.url) {\n window.open(this.data.link?.url, '_blank');\n }\n }\n\n private dismissSnackbar(): void {\n if (Object.keys(this.snackbarRef).length > 0) {\n this.snackbarRef.dismiss();\n }\n }\n}\n","<ng-container>\n @if (visible) {\n <!-- Kept as role=\"alert\": the E2E suite reads the message through getByRole('alert'). -->\n <div\n [ngClass]=\"snackbarType + ' ' + position\"\n [@openClose]\n class=\"snackbar-container\"\n [attr.theme]=\"applicationTheme\"\n [class.mobile]=\"variant === 'mobile'\"\n [class.desktop]=\"variant === 'desktop'\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n [attr.data-testid]=\"testId ?? 'snackbar-wrapper'\"\n [attr.data-test-snackbar-type]=\"snackbarType\"\n [attr.aria-describedby]=\"'describedby'\"\n role=\"alert\"\n [attr.aria-labelledby]=\"'labelledby'\"\n >\n <span style=\"position: absolute; left: -9999px\" id=\"labelledby\">{{\n 'ALERT_BANNER.' + (snackbarType | uppercase) | uiTranslate | async\n }}</span>\n <span style=\"position: absolute; left: -9999px\"\n >{{ message }}\n @if (!!linkText) {\n <a [target]=\"linkTarget\" [href]=\"linkUrl\" (click)=\"onLinkClick($event)\">{{ linkText }}</a>\n }\n </span>\n <span [style.display]=\"'none'\" id=\"describedby\">{{ ariaDescribedby }}</span>\n <div\n aria-hidden=\"true\"\n class=\"snackbar-text\"\n [matTooltip]=\"message.length > maxCharacters ? message : ''\"\n data-testid=\"snackbar-content\"\n >\n @if (applicationTheme === 'classic') {\n <ui-icon [name]=\"iconName\" size=\"24\"></ui-icon>\n }\n {{ message.length > maxCharacters ? (message | slice: 0 : maxCharacters) + '..' : message }}\n @if (safeHtml) {\n <div [innerHTML]=\"safeHtml\"></div>\n }\n @if (!!linkText) {\n <a [target]=\"linkTarget\" [href]=\"linkUrl\" (click)=\"onLinkClick($event)\">{{ linkText }}</a>\n }\n </div>\n @if (includeDismissButton && applicationTheme === 'classic') {\n <ui-button\n variant=\"text\"\n [label]=\"(translationContext + 'DISMISS' | uiTranslate | async)!\"\n [applicationTheme]=\"applicationTheme !== 'classic' ? 'light' : 'classic'\"\n (buttonClickEvent)=\"dismissClick()\"\n data-testid=\"snackbar-dismiss-button\"\n [testId]=\"dismissButtonTestId\"\n ></ui-button>\n }\n @if (includeDismissButton && applicationTheme !== 'classic') {\n <ui-button\n [variant]=\"'icon-button'\"\n [applicationTheme]=\"'light'\"\n [iconName]=\"'Close-in-line'\"\n [size]=\"'small'\"\n [tooltip]=\"(closeButtonTooltip || ('COMMON.CLOSE' | uiTranslate | async))!\"\n (click)=\"dismissClick()\"\n [ariaLabel]=\"(closeButtonTooltip || ('COMMON.CLOSE' | uiTranslate | async))!\"\n data-testid=\"snackbar-dismiss-button\"\n [testId]=\"dismissButtonTestId\"\n ></ui-button>\n }\n </div>\n }\n</ng-container>\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';\n\nimport { SnackbarComponent } from './snackbar.component';\nimport { SnackbarLink, SnackbarType } from './snackbar.model';\n\n@Injectable()\nexport class SnackbarService {\n constructor(private readonly snackBar: MatSnackBar) {}\n\n error(message: string, applicationTheme?: ApplicationTheme, html?: string, link?: SnackbarLink, seconds?: number) {\n return this.show('error', message, applicationTheme, html, link, seconds);\n }\n\n success(message: string, applicationTheme?: ApplicationTheme, html?: string, link?: SnackbarLink, seconds?: number) {\n return this.show('success', message, applicationTheme, html, link, seconds);\n }\n\n info(message: string, applicationTheme?: ApplicationTheme, html?: string, link?: SnackbarLink, seconds?: number) {\n return this.show('info', message, applicationTheme, html, link, seconds);\n }\n\n warning(message: string, applicationTheme?: ApplicationTheme, html?: string, link?: SnackbarLink, seconds?: number) {\n return this.show('warning', message, applicationTheme, html, link, seconds);\n }\n\n // eslint-disable-next-line max-params -- public method signature; options-object refactor is breaking, deferred to the breaking-change MAJOR (see plan)\n show(\n snackbarType: SnackbarType,\n message: string,\n applicationTheme?: ApplicationTheme,\n html?: string,\n link?: SnackbarLink,\n seconds?: number\n ) {\n const componentRef = this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n snackbarType,\n message,\n link,\n html,\n seconds,\n },\n });\n if (applicationTheme) {\n componentRef.instance.applicationTheme = applicationTheme;\n }\n return componentRef;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { SnackbarComponent } from './snackbar.component';\nimport { SnackbarService } from './snackbar.service';\n\n@NgModule({\n imports: [\n CommonModule,\n ButtonComponentModule,\n IconComponentModule,\n UiTranslatePipe,\n MatSnackBarModule,\n MatTooltipModule,\n SnackbarComponent,\n ],\n exports: [SnackbarComponent],\n providers: [SnackbarService],\n})\nexport class SnackbarComponentModule {}\n"],"mappings":"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"}
|