@testgorilla/tgo-ui 12.2.0 → 12.3.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.
Files changed (62) hide show
  1. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +3 -0
  2. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
  3. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +3 -0
  4. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
  5. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +3 -0
  6. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
  7. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +3 -0
  8. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
  9. package/fesm2022/testgorilla-tgo-ui-components-button.mjs +19 -4
  10. package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
  11. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +3 -0
  12. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
  13. package/fesm2022/testgorilla-tgo-ui-components-core.mjs +11 -1
  14. package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -1
  15. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +6 -0
  16. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
  17. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +3 -0
  18. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
  19. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +3 -0
  20. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
  21. package/fesm2022/testgorilla-tgo-ui-components-field.mjs +3 -0
  22. package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
  23. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +3 -0
  24. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
  25. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +3 -0
  26. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
  27. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +3 -0
  28. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
  29. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +3 -0
  30. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
  31. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +6 -0
  32. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
  33. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +3 -0
  34. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
  35. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +3 -0
  36. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
  37. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs +250 -50
  38. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs.map +1 -1
  39. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +4 -0
  40. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
  41. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +3 -0
  42. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
  43. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +3 -0
  44. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
  45. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +89 -7
  46. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
  47. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +3 -0
  48. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
  49. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +3 -0
  50. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
  51. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +3 -0
  52. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
  53. package/fesm2022/testgorilla-tgo-ui-components-table.mjs +3 -0
  54. package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
  55. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +3 -0
  56. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
  57. package/mcp/catalog.json +1 -1
  58. package/package.json +1 -1
  59. package/types/testgorilla-tgo-ui-components-button.d.ts +32 -0
  60. package/types/testgorilla-tgo-ui-components-core.d.ts +1 -0
  61. package/types/testgorilla-tgo-ui-components-popover.d.ts +51 -5
  62. package/types/testgorilla-tgo-ui-components-side-navigation.d.ts +59 -1
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-filter-button.mjs","names":[],"sources":["../../../components/filter-button/filter-button.component.ts","../../../components/filter-button/filter-button.component.html","../../../components/filter-button/filter-button.component.module.ts"],"sourcesContent":["import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { AsyncPipe } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n input,\n Input,\n OnChanges,\n Optional,\n Output,\n signal,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { EMPTY, fromEvent, Subject } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\n\nimport { ButtonIconPosition, ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { CheckboxComponent } from '@testgorilla/tgo-ui/components/checkbox';\nimport {\n ApplicationTheme,\n IKeyboardEvent,\n EllipseTextDirective,\n UiTranslatePipe,\n} from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponent } from '@testgorilla/tgo-ui/components/field';\nimport { IconName, IconComponent } from '@testgorilla/tgo-ui/components/icon';\nimport { RadioButtonComponent } from '@testgorilla/tgo-ui/components/radio-button';\n\nimport { FilterButtonOption, FilterValue, OptionChangeEvent } from './filter-button.model';\n\ntype FilterButtonRow = { kind: 'header'; title: string } | { kind: 'option'; option: FilterButtonOption };\n\n@Component({\n selector: 'ui-filter-button',\n templateUrl: './filter-button.component.html',\n styleUrls: ['./filter-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ButtonComponent,\n CdkOverlayOrigin,\n MatTooltip,\n CdkConnectedOverlay,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n FieldComponent,\n FormsModule,\n RadioButtonComponent,\n CheckboxComponent,\n IconComponent,\n EllipseTextDirective,\n AsyncPipe,\n UiTranslatePipe,\n ],\n})\nexport class FilterButtonComponent implements OnChanges {\n @HostBinding() class = 'ui-filter-button';\n\n /**\n * The button label when no value is selected.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() label = '';\n\n /**\n * Optional message to display on the overflow bottom.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() message? = '';\n\n /**\n * List of selected values.\n *\n * @type {string[]}\n * @memberof FilterButtonComponent\n */\n @Input() value: FilterValue[] = [];\n\n /**\n * Whether the component is disabled.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() disabled = false;\n\n /**\n * List of options.\n *\n * @type {OptionType}\n * @memberof FilterButtonComponent\n */\n options = input<FilterButtonOption[]>([]);\n\n /**\n * Whether the user should be allowed to clear the values.\n * Default: true.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() allowClear = true;\n\n /**\n * Whether the user should be allowed to select single or multiple values.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() singleSelection? = false;\n\n /**\n * The icon name to display.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n *\n **/\n\n @Input() iconName?: IconName;\n\n /**\n * The position of the icon.\n * Default: 'right'.\n *\n * @type {ButtonIconPosition}\n * @memberof FilterButtonComponent\n */\n @Input() iconPosition?: ButtonIconPosition = 'right';\n\n /**\n * Optional message to display if there are no options to select available\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() noOptionsMessage? = '';\n\n /**\n * Whether the button should stretch to fill its container, and the dropdown panel\n * follow that width instead of the default 240px.\n * The panel never shrinks below 240px, so a container narrower than that is safe.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input({ transform: booleanAttribute }) fullWidth = false;\n\n @Input() testId: string | null = null;\n\n @Input() ariaLabel = '';\n\n get panelTestId(): string | null {\n return this.testId ? `${this.testId}-panel` : null;\n }\n\n get resetButtonTestId(): string | null {\n return this.testId ? `${this.testId}-reset` : null;\n }\n\n /**\n * Emits the list of selected values when the selection changes.\n *\n * @type {EventEmitter<string[]>}\n * @memberof FilterButtonComponent\n */\n @Output() changed = new EventEmitter<FilterValue[]>();\n\n /**\n * Emits the option change event\n *\n * @type {EventEmitter<OptionChangeEvent>}\n * @memberof FilterButtonComponent\n */\n @Output() optionChange = new EventEmitter<OptionChangeEvent>();\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof FilterButtonComponent\n */\n @HostBinding('attr.theme')\n @Input()\n applicationTheme: ApplicationTheme = 'light';\n\n @HostBinding('class.ui-filter-button-full-width')\n get fullWidthClass(): boolean {\n return this.fullWidth;\n }\n\n @ViewChild('overlayContainer') overlayContainer: ElementRef<HTMLElement>;\n @ViewChild(CdkVirtualScrollViewport) viewport?: CdkVirtualScrollViewport;\n\n @ViewChild(CdkOverlayOrigin) private readonly triggerOrigin?: CdkOverlayOrigin;\n @ViewChild(CdkConnectedOverlay) private readonly connectedOverlay?: CdkConnectedOverlay;\n\n /** Must match the `.item` height in the SCSS — the fixed-size viewport relies on it. */\n readonly ITEM_SIZE = 48;\n readonly MAX_LIST_HEIGHT = 290;\n\n readonly PANEL_MIN_WIDTH = 240;\n\n readonly MATCH_TRIGGER_PANEL_CLASS = 'ui-filter-button-panel-match-trigger';\n\n isOpen = signal<boolean>(false);\n displayedLabel = signal<string>('');\n tooltip = signal<string>('');\n search = signal<string>('');\n activeIndex = signal<number>(0);\n showTooltip: { [key: string]: boolean } = {};\n displayedOptions = computed(() => {\n let lastSectionTitle: string;\n return this.options()\n .map(option => {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- an empty section title reuses the previous section\n lastSectionTitle = option.sectionTitle || lastSectionTitle;\n return { ...option, sectionTitle: lastSectionTitle };\n })\n .filter(option => option.label.toLowerCase().includes(this.search().toLowerCase()));\n });\n\n // Section titles become their own rows so the fixed-size viewport can position every row with one `itemSize`.\n flatOptions = computed<FilterButtonRow[]>(() => {\n const rows: FilterButtonRow[] = [];\n let lastTitle: string | undefined;\n for (const option of this.displayedOptions()) {\n if (option.sectionTitle && option.sectionTitle !== lastTitle) {\n lastTitle = option.sectionTitle;\n rows.push({ kind: 'header', title: option.sectionTitle });\n }\n rows.push({ kind: 'option', option });\n }\n return rows;\n });\n\n optionCount = computed(() => this.displayedOptions().length);\n\n activeOption = computed<FilterButtonOption | undefined>(() => {\n const row = this.flatOptions()[this.activeIndex()];\n return row?.kind === 'option' ? row.option : undefined;\n });\n\n // 1-based position of the active option (headers excluded) for the aria-live announcement.\n activePosition = computed(() => {\n const rows = this.flatOptions();\n const activeIndex = this.activeIndex();\n let position = 0;\n for (let i = 0; i <= activeIndex && i < rows.length; i++) {\n if (rows[i].kind === 'option') {\n position++;\n }\n }\n return position;\n });\n\n listHeight = computed(() =>\n Math.min(Math.max(this.flatOptions().length * this.ITEM_SIZE, this.ITEM_SIZE), this.MAX_LIST_HEIGHT)\n );\n\n protected trackByRow = (_index: number, row: FilterButtonRow): string =>\n row.kind === 'header' ? `header:${row.title}` : `option:${row.option.value}`;\n\n readonly MIN_OPTIONS_LENGTH_FOR_SEARCH = 8;\n protected translationContext = 'FILTER_BUTTON.';\n private readonly searchInput$ = new Subject<string>();\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly cdr: ChangeDetectorRef,\n destroyRef: DestroyRef\n ) {\n if (this.defaultAppTheme) {\n this.applicationTheme = this.defaultAppTheme;\n }\n\n this.searchInput$.pipe(debounceTime(150), takeUntilDestroyed(destroyRef)).subscribe(value => {\n this.search.set(value);\n this.activeIndex.set(this.firstOptionIndex());\n this.cdr.markForCheck();\n });\n\n toObservable(this.isOpen)\n .pipe(\n switchMap(open => (open && this.fullWidth ? fromEvent(window, 'resize').pipe(debounceTime(100)) : EMPTY)),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe(() => this.syncPanelWidth());\n }\n\n private syncPanelWidth(): void {\n const overlayRef = this.connectedOverlay?.overlayRef;\n const trigger = this.triggerOrigin?.elementRef.nativeElement as HTMLElement | undefined;\n if (!overlayRef || !trigger) {\n return;\n }\n overlayRef.updateSize({ width: trigger.getBoundingClientRect().width });\n overlayRef.updatePosition();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n this.updateLabel();\n }\n }\n\n clearValue(): void {\n this.value = [];\n this.updateLabel();\n this.changed.emit(this.value);\n }\n\n outsideClick() {\n window.setTimeout(() => {\n this.isOpen.set(false);\n });\n }\n\n toggle(): void {\n this.isOpen.set(!this.isOpen());\n if (this.isOpen()) {\n this.activeIndex.set(this.firstOptionIndex());\n }\n this.cdr.markForCheck();\n }\n\n isSelected(value?: FilterValue) {\n return this.value?.includes(value ?? '');\n }\n\n optionChanged(selected: boolean, option: FilterButtonOption) {\n this.value = this.value || [];\n if (this.singleSelection) {\n this.value = selected ? [option.value] : [];\n } else {\n if (selected) {\n this.value.push(option.value);\n } else {\n this.value.splice(this.value.indexOf(option.value), 1);\n }\n }\n this.changed.emit(this.value);\n this.optionChange.emit({ selected, option });\n this.updateLabel();\n }\n\n onSearchChange(value: string): void {\n this.searchInput$.next(value);\n }\n\n keyDownHandler(ev: KeyboardEvent) {\n if (ev.key === (IKeyboardEvent.ARROW_DOWN as string)) {\n ev.preventDefault();\n this.moveActive(1);\n } else if (ev.key === (IKeyboardEvent.ARROW_UP as string)) {\n ev.preventDefault();\n this.moveActive(-1);\n } else if (ev.key === (IKeyboardEvent.ENTER as string) || ev.key === (IKeyboardEvent.SPACE as string)) {\n ev.preventDefault();\n this.toggleActiveOption();\n } else if (ev.key === (IKeyboardEvent.ESCAPE as string)) {\n this.isOpen.set(false);\n }\n }\n\n onLabelEllipsisChange(isEllipsis: boolean, value: FilterValue): void {\n this.showTooltip[value] = isEllipsis;\n }\n\n private firstOptionIndex(): number {\n const index = this.flatOptions().findIndex(row => row.kind === 'option');\n return index === -1 ? 0 : index;\n }\n\n private moveActive(delta: number): void {\n const rows = this.flatOptions();\n const optionIndexes: number[] = [];\n rows.forEach((row, index) => {\n if (row.kind === 'option') {\n optionIndexes.push(index);\n }\n });\n if (!optionIndexes.length) {\n return;\n }\n const currentPos = optionIndexes.indexOf(this.activeIndex());\n const basePos = currentPos === -1 ? 0 : currentPos;\n const nextPos = (basePos + delta + optionIndexes.length) % optionIndexes.length;\n const nextIndex = optionIndexes[nextPos];\n this.activeIndex.set(nextIndex);\n this.viewport?.scrollToIndex(nextIndex, 'smooth');\n }\n\n private toggleActiveOption(): void {\n const option = this.activeOption();\n if (option) {\n this.optionChanged(!this.isSelected(option.value), option);\n }\n }\n\n private updateLabel() {\n this.value = this.value || [];\n let displayedLabel = '';\n let tooltip = '';\n const sortedLabels = this.options()\n .filter(option => this.value.includes(option.value))\n .map(item => item?.label ?? '');\n\n if (sortedLabels.length > 0) {\n displayedLabel = this.options().find(option => option.value === this.value[0])?.label ?? '';\n tooltip = `${this.label}${sortedLabels.map(value => `\\n • ${value}`).join('')}`;\n }\n\n if (this.value.length > 1) {\n displayedLabel += ` (+${this.value.length - 1})`;\n }\n this.displayedLabel.set(displayedLabel);\n this.tooltip.set(tooltip);\n this.cdr.markForCheck();\n }\n}\n","<ng-container>\n <ui-button\n [matTooltip]=\"tooltip()\"\n [matTooltipClass]=\"'tooltip-multi-line ' + applicationTheme\"\n [matTooltipPosition]=\"'above'\"\n class=\"ui-filter-button-trigger\"\n [class.button-opened]=\"isOpen()\"\n [variant]=\"value.length || isOpen() ? 'secondary' : 'ghost'\"\n [label]=\"displayedLabel() || label\"\n [disabled]=\"disabled || (options().length === 0 && !noOptionsMessage)\"\n (click)=\"toggle()\"\n type=\"button\"\n size=\"small\"\n [role]=\"'combobox'\"\n [tooltip]=\"value.length ? ' ' : ''\"\n [attr.aria-expanded]=\"isOpen()\"\n [testId]=\"testId\"\n [ariaLabel]=\"ariaLabel\"\n [iconName]=\"iconName || (isOpen() ? 'Arrow-chevron-up-filled' : 'Arrow-chevron-down-filled')\"\n [iconPosition]=\"iconPosition\"\n [applicationTheme]=\"applicationTheme\"\n [fullWidth]=\"fullWidth\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n ></ui-button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayMatchWidth]=\"fullWidth\"\n [cdkConnectedOverlayMinWidth]=\"fullWidth ? PANEL_MIN_WIDTH : ''\"\n [cdkConnectedOverlayPanelClass]=\"fullWidth ? MATCH_TRIGGER_PANEL_CLASS : ''\"\n (overlayOutsideClick)=\"outsideClick()\"\n >\n @if (activeOption(); as active) {\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ active.label }}\n {{\n translationContext + 'ACTIVE_ITEM' | uiTranslate: { active: activePosition(), total: optionCount() } | async\n }}\n </div>\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ active.label }}\n {{\n (value.includes(active.value) ? translationContext + 'SELECTED' : translationContext + 'DESELECTED')\n | uiTranslate\n | async\n }}\n </div>\n }\n <div class=\"ui-filter-button\" #overlayContainer [attr.data-testid]=\"panelTestId\">\n @if (options().length > MIN_OPTIONS_LENGTH_FOR_SEARCH) {\n <div class=\"ui-filter-button-header\">\n <ui-field\n type=\"search\"\n [showBottomContent]=\"false\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"onSearchChange($event)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-field>\n </div>\n }\n <div\n class=\"ui-filter-button-list\"\n #list\n tabindex=\"0\"\n role=\"listbox\"\n [attr.aria-activedescendant]=\"isOpen() && activeOption() ? 'ui-fb-option-' + activeIndex() : null\"\n (keydown)=\"keyDownHandler($event)\"\n >\n @if (!displayedOptions().length && options().length) {\n <div class=\"no-results-found\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </div>\n } @else {\n <cdk-virtual-scroll-viewport\n class=\"ui-filter-button-viewport\"\n [itemSize]=\"ITEM_SIZE\"\n [style.height.px]=\"listHeight()\"\n >\n <ng-container *cdkVirtualFor=\"let row of flatOptions(); let i = index; trackBy: trackByRow\">\n @if (row.kind === 'header') {\n <div class=\"section-title\">\n {{ row.title }}\n </div>\n } @else {\n <div\n class=\"item\"\n role=\"option\"\n tabindex=\"-1\"\n [id]=\"'ui-fb-option-' + i\"\n [class.item-selected]=\"isSelected(row.option.value)\"\n [class.item-active]=\"activeIndex() === i\"\n [attr.aria-selected]=\"isSelected(row.option.value)\"\n (click)=\"activeIndex.set(i); optionChanged(!isSelected(row.option.value), row.option)\"\n (keydown.enter)=\"optionChanged(!isSelected(row.option.value), row.option)\"\n >\n @if (singleSelection) {\n <ui-radio-button\n (click)=\"$event.stopPropagation()\"\n [tabIndex]=\"-1\"\n [selected]=\"isSelected(row.option.value)\"\n (changeRadio)=\"optionChanged($event.optionChecked, row.option)\"\n [applicationTheme]=\"applicationTheme\"\n >\n </ui-radio-button>\n }\n @if (!singleSelection) {\n <ui-checkbox\n (click)=\"$event.stopPropagation()\"\n [class.with-label-number]=\"row.option.labelNumber !== undefined\"\n [tabIndex]=\"-1\"\n [checked]=\"isSelected(row.option.value)\"\n (changed)=\"optionChanged($event, row.option)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-checkbox>\n }\n @if (row.option.icon) {\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"row.option.icon\"></ui-icon>\n }\n <span\n #tooltip=\"matTooltip\"\n class=\"item-label\"\n uiEllipseText\n [refresh]=\"row.option.value\"\n (onChangeTextState)=\"onLabelEllipsisChange($event, row.option.value)\"\n [matTooltip]=\"showTooltip[row.option.value] ? row.option.label : ''\"\n [matTooltipClass]=\"applicationTheme\"\n >\n {{ row.option.label }}\n </span>\n @if (row.option.labelNumber !== undefined) {\n <span class=\"item-number\">({{ row.option.labelNumber }})</span>\n }\n </div>\n }\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n @if (!options().length && !!noOptionsMessage) {\n <div class=\"ui-filter-button-no-options\" [innerHTML]=\"noOptionsMessage\"></div>\n } @else {\n @if (allowClear || message) {\n <div class=\"ui-filter-button-footer\">\n @if (allowClear) {\n <ui-button\n variant=\"text\"\n size=\"small\"\n [label]=\"('COMMON.RESET' | uiTranslate | async)!\"\n (click)=\"clearValue()\"\n [applicationTheme]=\"applicationTheme\"\n [testId]=\"resetButtonTestId\"\n (keydown.escape)=\"toggle()\"\n ></ui-button>\n }\n <div class=\"ui-filter-button-footer-message\">\n {{ message }}\n </div>\n </div>\n }\n }\n </div>\n </ng-template>\n</ng-container>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { CheckboxComponentModule } from '@testgorilla/tgo-ui/components/checkbox';\nimport { EllipseTextDirective, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { RadioButtonComponentModule } from '@testgorilla/tgo-ui/components/radio-button';\n\nimport { FilterButtonComponent } from './filter-button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatTooltipModule,\n OverlayModule,\n UiTranslatePipe,\n ButtonComponentModule,\n IconComponentModule,\n CheckboxComponentModule,\n FieldComponentModule,\n EllipseTextDirective,\n RadioButtonComponentModule,\n FilterButtonComponent,\n ],\n exports: [FilterButtonComponent],\n})\nexport class FilterButtonComponentModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-filter-button.mjs","names":[],"sources":["../../../components/filter-button/filter-button.component.ts","../../../components/filter-button/filter-button.component.html","../../../components/filter-button/filter-button.component.module.ts"],"sourcesContent":["import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { AsyncPipe } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n input,\n Input,\n OnChanges,\n Optional,\n Output,\n signal,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { EMPTY, fromEvent, Subject } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\n\nimport { ButtonIconPosition, ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { CheckboxComponent } from '@testgorilla/tgo-ui/components/checkbox';\nimport {\n ApplicationTheme,\n IKeyboardEvent,\n EllipseTextDirective,\n UiTranslatePipe,\n} from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponent } from '@testgorilla/tgo-ui/components/field';\nimport { IconName, IconComponent } from '@testgorilla/tgo-ui/components/icon';\nimport { RadioButtonComponent } from '@testgorilla/tgo-ui/components/radio-button';\n\nimport { FilterButtonOption, FilterValue, OptionChangeEvent } from './filter-button.model';\n\ntype FilterButtonRow = { kind: 'header'; title: string } | { kind: 'option'; option: FilterButtonOption };\n\n@Component({\n selector: 'ui-filter-button',\n templateUrl: './filter-button.component.html',\n styleUrls: ['./filter-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ButtonComponent,\n CdkOverlayOrigin,\n MatTooltip,\n CdkConnectedOverlay,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n FieldComponent,\n FormsModule,\n RadioButtonComponent,\n CheckboxComponent,\n IconComponent,\n EllipseTextDirective,\n AsyncPipe,\n UiTranslatePipe,\n ],\n})\nexport class FilterButtonComponent implements OnChanges {\n @HostBinding() class = 'ui-filter-button';\n\n /**\n * The button label when no value is selected.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() label = '';\n\n /**\n * Optional message to display on the overflow bottom.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() message? = '';\n\n /**\n * List of selected values.\n *\n * @type {string[]}\n * @memberof FilterButtonComponent\n */\n @Input() value: FilterValue[] = [];\n\n /**\n * Whether the component is disabled.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() disabled = false;\n\n /**\n * List of options.\n *\n * @type {OptionType}\n * @memberof FilterButtonComponent\n */\n options = input<FilterButtonOption[]>([]);\n\n /**\n * Whether the user should be allowed to clear the values.\n * Default: true.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() allowClear = true;\n\n /**\n * Whether the user should be allowed to select single or multiple values.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input() singleSelection? = false;\n\n /**\n * The icon name to display.\n *\n * @type {string}\n * @memberof FilterButtonComponent\n *\n **/\n\n @Input() iconName?: IconName;\n\n /**\n * The position of the icon.\n * Default: 'right'.\n *\n * @type {ButtonIconPosition}\n * @memberof FilterButtonComponent\n */\n @Input() iconPosition?: ButtonIconPosition = 'right';\n\n /**\n * Optional message to display if there are no options to select available\n *\n * @type {string}\n * @memberof FilterButtonComponent\n */\n @Input() noOptionsMessage? = '';\n\n /**\n * Whether the button should stretch to fill its container, and the dropdown panel\n * follow that width instead of the default 240px.\n * The panel never shrinks below 240px, so a container narrower than that is safe.\n * Default: false.\n *\n * @type {boolean}\n * @memberof FilterButtonComponent\n */\n @Input({ transform: booleanAttribute }) fullWidth = false;\n\n @Input() testId: string | null = null;\n\n @Input() ariaLabel = '';\n\n get panelTestId(): string | null {\n return this.testId ? `${this.testId}-panel` : null;\n }\n\n get resetButtonTestId(): string | null {\n return this.testId ? `${this.testId}-reset` : null;\n }\n\n /**\n * Emits the list of selected values when the selection changes.\n *\n * @type {EventEmitter<string[]>}\n * @memberof FilterButtonComponent\n */\n @Output() changed = new EventEmitter<FilterValue[]>();\n\n /**\n * Emits the option change event\n *\n * @type {EventEmitter<OptionChangeEvent>}\n * @memberof FilterButtonComponent\n */\n @Output() optionChange = new EventEmitter<OptionChangeEvent>();\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof FilterButtonComponent\n */\n @HostBinding('attr.theme')\n @Input()\n applicationTheme: ApplicationTheme = 'light';\n\n @HostBinding('class.ui-filter-button-full-width')\n get fullWidthClass(): boolean {\n return this.fullWidth;\n }\n\n @ViewChild('overlayContainer') overlayContainer: ElementRef<HTMLElement>;\n @ViewChild(CdkVirtualScrollViewport) viewport?: CdkVirtualScrollViewport;\n\n @ViewChild(CdkOverlayOrigin) private readonly triggerOrigin?: CdkOverlayOrigin;\n @ViewChild(CdkConnectedOverlay) private readonly connectedOverlay?: CdkConnectedOverlay;\n\n /** Must match the `.item` height in the SCSS — the fixed-size viewport relies on it. */\n readonly ITEM_SIZE = 48;\n readonly MAX_LIST_HEIGHT = 290;\n\n readonly PANEL_MIN_WIDTH = 240;\n\n readonly MATCH_TRIGGER_PANEL_CLASS = 'ui-filter-button-panel-match-trigger';\n\n isOpen = signal<boolean>(false);\n displayedLabel = signal<string>('');\n tooltip = signal<string>('');\n search = signal<string>('');\n activeIndex = signal<number>(0);\n showTooltip: { [key: string]: boolean } = {};\n displayedOptions = computed(() => {\n let lastSectionTitle: string;\n return this.options()\n .map(option => {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- an empty section title reuses the previous section\n lastSectionTitle = option.sectionTitle || lastSectionTitle;\n return { ...option, sectionTitle: lastSectionTitle };\n })\n .filter(option => option.label.toLowerCase().includes(this.search().toLowerCase()));\n });\n\n // Section titles become their own rows so the fixed-size viewport can position every row with one `itemSize`.\n flatOptions = computed<FilterButtonRow[]>(() => {\n const rows: FilterButtonRow[] = [];\n let lastTitle: string | undefined;\n for (const option of this.displayedOptions()) {\n if (option.sectionTitle && option.sectionTitle !== lastTitle) {\n lastTitle = option.sectionTitle;\n rows.push({ kind: 'header', title: option.sectionTitle });\n }\n rows.push({ kind: 'option', option });\n }\n return rows;\n });\n\n optionCount = computed(() => this.displayedOptions().length);\n\n activeOption = computed<FilterButtonOption | undefined>(() => {\n const row = this.flatOptions()[this.activeIndex()];\n return row?.kind === 'option' ? row.option : undefined;\n });\n\n // 1-based position of the active option (headers excluded) for the aria-live announcement.\n activePosition = computed(() => {\n const rows = this.flatOptions();\n const activeIndex = this.activeIndex();\n let position = 0;\n for (let i = 0; i <= activeIndex && i < rows.length; i++) {\n if (rows[i].kind === 'option') {\n position++;\n }\n }\n return position;\n });\n\n listHeight = computed(() =>\n Math.min(Math.max(this.flatOptions().length * this.ITEM_SIZE, this.ITEM_SIZE), this.MAX_LIST_HEIGHT)\n );\n\n protected trackByRow = (_index: number, row: FilterButtonRow): string =>\n row.kind === 'header' ? `header:${row.title}` : `option:${row.option.value}`;\n\n readonly MIN_OPTIONS_LENGTH_FOR_SEARCH = 8;\n protected translationContext = 'FILTER_BUTTON.';\n private readonly searchInput$ = new Subject<string>();\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly cdr: ChangeDetectorRef,\n destroyRef: DestroyRef\n ) {\n if (this.defaultAppTheme) {\n this.applicationTheme = this.defaultAppTheme;\n }\n\n this.searchInput$.pipe(debounceTime(150), takeUntilDestroyed(destroyRef)).subscribe(value => {\n this.search.set(value);\n this.activeIndex.set(this.firstOptionIndex());\n this.cdr.markForCheck();\n });\n\n toObservable(this.isOpen)\n .pipe(\n switchMap(open => (open && this.fullWidth ? fromEvent(window, 'resize').pipe(debounceTime(100)) : EMPTY)),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe(() => this.syncPanelWidth());\n }\n\n private syncPanelWidth(): void {\n const overlayRef = this.connectedOverlay?.overlayRef;\n const trigger = this.triggerOrigin?.elementRef.nativeElement as HTMLElement | undefined;\n if (!overlayRef || !trigger) {\n return;\n }\n overlayRef.updateSize({ width: trigger.getBoundingClientRect().width });\n overlayRef.updatePosition();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n this.updateLabel();\n }\n }\n\n clearValue(): void {\n this.value = [];\n this.updateLabel();\n this.changed.emit(this.value);\n }\n\n outsideClick() {\n window.setTimeout(() => {\n this.isOpen.set(false);\n });\n }\n\n toggle(): void {\n this.isOpen.set(!this.isOpen());\n if (this.isOpen()) {\n this.activeIndex.set(this.firstOptionIndex());\n }\n this.cdr.markForCheck();\n }\n\n isSelected(value?: FilterValue) {\n return this.value?.includes(value ?? '');\n }\n\n optionChanged(selected: boolean, option: FilterButtonOption) {\n this.value = this.value || [];\n if (this.singleSelection) {\n this.value = selected ? [option.value] : [];\n } else {\n if (selected) {\n this.value.push(option.value);\n } else {\n this.value.splice(this.value.indexOf(option.value), 1);\n }\n }\n this.changed.emit(this.value);\n this.optionChange.emit({ selected, option });\n this.updateLabel();\n }\n\n onSearchChange(value: string): void {\n this.searchInput$.next(value);\n }\n\n keyDownHandler(ev: KeyboardEvent) {\n if (ev.key === (IKeyboardEvent.ARROW_DOWN as string)) {\n ev.preventDefault();\n this.moveActive(1);\n } else if (ev.key === (IKeyboardEvent.ARROW_UP as string)) {\n ev.preventDefault();\n this.moveActive(-1);\n } else if (ev.key === (IKeyboardEvent.ENTER as string) || ev.key === (IKeyboardEvent.SPACE as string)) {\n ev.preventDefault();\n this.toggleActiveOption();\n } else if (ev.key === (IKeyboardEvent.ESCAPE as string)) {\n this.isOpen.set(false);\n }\n }\n\n onLabelEllipsisChange(isEllipsis: boolean, value: FilterValue): void {\n this.showTooltip[value] = isEllipsis;\n }\n\n private firstOptionIndex(): number {\n const index = this.flatOptions().findIndex(row => row.kind === 'option');\n return index === -1 ? 0 : index;\n }\n\n private moveActive(delta: number): void {\n const rows = this.flatOptions();\n const optionIndexes: number[] = [];\n rows.forEach((row, index) => {\n if (row.kind === 'option') {\n optionIndexes.push(index);\n }\n });\n if (!optionIndexes.length) {\n return;\n }\n const currentPos = optionIndexes.indexOf(this.activeIndex());\n const basePos = currentPos === -1 ? 0 : currentPos;\n const nextPos = (basePos + delta + optionIndexes.length) % optionIndexes.length;\n const nextIndex = optionIndexes[nextPos];\n this.activeIndex.set(nextIndex);\n this.viewport?.scrollToIndex(nextIndex, 'smooth');\n }\n\n private toggleActiveOption(): void {\n const option = this.activeOption();\n if (option) {\n this.optionChanged(!this.isSelected(option.value), option);\n }\n }\n\n private updateLabel() {\n this.value = this.value || [];\n let displayedLabel = '';\n let tooltip = '';\n const sortedLabels = this.options()\n .filter(option => this.value.includes(option.value))\n .map(item => item?.label ?? '');\n\n if (sortedLabels.length > 0) {\n displayedLabel = this.options().find(option => option.value === this.value[0])?.label ?? '';\n tooltip = `${this.label}${sortedLabels.map(value => `\\n • ${value}`).join('')}`;\n }\n\n if (this.value.length > 1) {\n displayedLabel += ` (+${this.value.length - 1})`;\n }\n this.displayedLabel.set(displayedLabel);\n this.tooltip.set(tooltip);\n this.cdr.markForCheck();\n }\n}\n","<ng-container>\n <ui-button\n [matTooltip]=\"tooltip()\"\n [matTooltipClass]=\"'tooltip-multi-line ' + applicationTheme\"\n [matTooltipPosition]=\"'above'\"\n class=\"ui-filter-button-trigger\"\n [class.button-opened]=\"isOpen()\"\n [variant]=\"value.length || isOpen() ? 'secondary' : 'ghost'\"\n [label]=\"displayedLabel() || label\"\n [disabled]=\"disabled || (options().length === 0 && !noOptionsMessage)\"\n (click)=\"toggle()\"\n type=\"button\"\n size=\"small\"\n [role]=\"'combobox'\"\n [tooltip]=\"value.length ? ' ' : ''\"\n [attr.aria-expanded]=\"isOpen()\"\n [testId]=\"testId\"\n [ariaLabel]=\"ariaLabel\"\n [iconName]=\"iconName || (isOpen() ? 'Arrow-chevron-up-filled' : 'Arrow-chevron-down-filled')\"\n [iconPosition]=\"iconPosition\"\n [applicationTheme]=\"applicationTheme\"\n [fullWidth]=\"fullWidth\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n ></ui-button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayMatchWidth]=\"fullWidth\"\n [cdkConnectedOverlayMinWidth]=\"fullWidth ? PANEL_MIN_WIDTH : ''\"\n [cdkConnectedOverlayPanelClass]=\"fullWidth ? MATCH_TRIGGER_PANEL_CLASS : ''\"\n (overlayOutsideClick)=\"outsideClick()\"\n >\n @if (activeOption(); as active) {\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ active.label }}\n {{\n translationContext + 'ACTIVE_ITEM' | uiTranslate: { active: activePosition(), total: optionCount() } | async\n }}\n </div>\n <div style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">\n {{ active.label }}\n {{\n (value.includes(active.value) ? translationContext + 'SELECTED' : translationContext + 'DESELECTED')\n | uiTranslate\n | async\n }}\n </div>\n }\n <div class=\"ui-filter-button\" #overlayContainer [attr.data-testid]=\"panelTestId\">\n @if (options().length > MIN_OPTIONS_LENGTH_FOR_SEARCH) {\n <div class=\"ui-filter-button-header\">\n <ui-field\n type=\"search\"\n [showBottomContent]=\"false\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"onSearchChange($event)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-field>\n </div>\n }\n <div\n class=\"ui-filter-button-list\"\n #list\n tabindex=\"0\"\n role=\"listbox\"\n [attr.aria-activedescendant]=\"isOpen() && activeOption() ? 'ui-fb-option-' + activeIndex() : null\"\n (keydown)=\"keyDownHandler($event)\"\n >\n @if (!displayedOptions().length && options().length) {\n <div class=\"no-results-found\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </div>\n } @else {\n <cdk-virtual-scroll-viewport\n class=\"ui-filter-button-viewport\"\n [itemSize]=\"ITEM_SIZE\"\n [style.height.px]=\"listHeight()\"\n >\n <ng-container *cdkVirtualFor=\"let row of flatOptions(); let i = index; trackBy: trackByRow\">\n @if (row.kind === 'header') {\n <div class=\"section-title\">\n {{ row.title }}\n </div>\n } @else {\n <div\n class=\"item\"\n role=\"option\"\n tabindex=\"-1\"\n [id]=\"'ui-fb-option-' + i\"\n [class.item-selected]=\"isSelected(row.option.value)\"\n [class.item-active]=\"activeIndex() === i\"\n [attr.aria-selected]=\"isSelected(row.option.value)\"\n (click)=\"activeIndex.set(i); optionChanged(!isSelected(row.option.value), row.option)\"\n (keydown.enter)=\"optionChanged(!isSelected(row.option.value), row.option)\"\n >\n @if (singleSelection) {\n <ui-radio-button\n (click)=\"$event.stopPropagation()\"\n [tabIndex]=\"-1\"\n [selected]=\"isSelected(row.option.value)\"\n (changeRadio)=\"optionChanged($event.optionChecked, row.option)\"\n [applicationTheme]=\"applicationTheme\"\n >\n </ui-radio-button>\n }\n @if (!singleSelection) {\n <ui-checkbox\n (click)=\"$event.stopPropagation()\"\n [class.with-label-number]=\"row.option.labelNumber !== undefined\"\n [tabIndex]=\"-1\"\n [checked]=\"isSelected(row.option.value)\"\n (changed)=\"optionChanged($event, row.option)\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-checkbox>\n }\n @if (row.option.icon) {\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"row.option.icon\"></ui-icon>\n }\n <span\n #tooltip=\"matTooltip\"\n class=\"item-label\"\n uiEllipseText\n [refresh]=\"row.option.value\"\n (onChangeTextState)=\"onLabelEllipsisChange($event, row.option.value)\"\n [matTooltip]=\"showTooltip[row.option.value] ? row.option.label : ''\"\n [matTooltipClass]=\"applicationTheme\"\n >\n {{ row.option.label }}\n </span>\n @if (row.option.labelNumber !== undefined) {\n <span class=\"item-number\">({{ row.option.labelNumber }})</span>\n }\n </div>\n }\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n @if (!options().length && !!noOptionsMessage) {\n <div class=\"ui-filter-button-no-options\" [innerHTML]=\"noOptionsMessage\"></div>\n } @else {\n @if (allowClear || message) {\n <div class=\"ui-filter-button-footer\">\n @if (allowClear) {\n <ui-button\n variant=\"text\"\n size=\"small\"\n [label]=\"('COMMON.RESET' | uiTranslate | async)!\"\n (click)=\"clearValue()\"\n [applicationTheme]=\"applicationTheme\"\n [testId]=\"resetButtonTestId\"\n (keydown.escape)=\"toggle()\"\n ></ui-button>\n }\n <div class=\"ui-filter-button-footer-message\">\n {{ message }}\n </div>\n </div>\n }\n }\n </div>\n </ng-template>\n</ng-container>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { CheckboxComponentModule } from '@testgorilla/tgo-ui/components/checkbox';\nimport { EllipseTextDirective, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { RadioButtonComponentModule } from '@testgorilla/tgo-ui/components/radio-button';\n\nimport { FilterButtonComponent } from './filter-button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatTooltipModule,\n OverlayModule,\n UiTranslatePipe,\n ButtonComponentModule,\n IconComponentModule,\n CheckboxComponentModule,\n FieldComponentModule,\n EllipseTextDirective,\n RadioButtonComponentModule,\n FilterButtonComponent,\n ],\n exports: [FilterButtonComponent],\n})\nexport class FilterButtonComponentModule {}\n"],"mappings":"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"}
@@ -455,12 +455,15 @@ var InlineFieldComponent = class InlineFieldComponent {
455
455
  "ariaExpanded",
456
456
  "ariaControls",
457
457
  "ariaPressed",
458
+ "ariaHasPopup",
458
459
  "ariaRequired",
459
460
  "ariaLabelledby",
460
461
  "ariaDescribedby",
461
462
  "preventDefault",
462
463
  "hasBackground",
463
464
  "circular",
465
+ "isSingleLineLabel",
466
+ "iconButtonShape",
464
467
  "tooltipPosition",
465
468
  "role",
466
469
  "iconFilled",
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-inline-field.mjs","names":[],"sources":["../../../components/inline-field/inline-field.component.ts","../../../components/inline-field/inline-field.component.html","../../../components/inline-field/inline-field.component.module.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n HostBinding,\n HostListener,\n input,\n OnInit,\n output,\n ViewChild,\n ViewEncapsulation,\n computed,\n signal,\n Optional,\n Self,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\nimport { ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponent, FieldType } from '@testgorilla/tgo-ui/components/field';\n\nimport {\n InlineFieldState,\n InlineFieldButtonConfig,\n InlineFieldValidation,\n InlineFieldChangeEvent,\n} from './inline-field.model';\n\n/**\n * A global counter used to generate unique inline field IDs.\n */\nlet inlineFieldID = 0;\n\n@Component({\n selector: 'ui-inline-field',\n templateUrl: './inline-field.component.html',\n styleUrls: ['./inline-field.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.theme]': 'applicationTheme()',\n '[attr.state]': 'state()',\n '[attr.editing]': 'isEditing()',\n '[class.full-width]': 'fullWidth()',\n },\n imports: [NgClass, FieldComponent, ButtonComponent],\n})\nexport class InlineFieldComponent implements OnInit, ControlValueAccessor {\n @HostBinding() class = 'ui-inline-field';\n\n /**\n * Component ID for accessibility\n */\n id = input(`inline-field-${inlineFieldID++}`);\n\n /**\n * Field label\n */\n label = input('');\n\n /**\n * Field placeholder\n */\n placeholder = input('');\n\n /**\n * Current value\n */\n value = input('');\n\n /**\n * Whether the field is required\n */\n required = input(false);\n\n /**\n * Whether the field is disabled\n */\n disabled = input(false);\n\n /**\n * Application theme\n */\n applicationTheme = input<ApplicationTheme>('light');\n\n /**\n * Field type\n */\n fieldType = input<FieldType>('text');\n\n /**\n * Field type\n */\n maxRows = input<number>(0);\n\n /**\n * Error messages\n */\n errors = input<string[]>([]);\n\n /**\n * Whether to show errors\n */\n showErrors = input(true);\n\n /**\n * Button configuration\n */\n buttonConfig = input<InlineFieldButtonConfig>({\n saveLabel: 'Save',\n cancelLabel: 'Cancel',\n saveIcon: 'Check-filled',\n cancelIcon: 'Close-filled',\n });\n\n /**\n * Validation configuration\n */\n validation = input<InlineFieldValidation>({});\n\n /**\n * ARIA label\n */\n ariaLabel = input('');\n\n testId = input<string | null>(null);\n\n protected readonly saveButtonTestId = computed(() => (this.testId() ? `${this.testId()}-save` : null));\n\n protected readonly cancelButtonTestId = computed(() => (this.testId() ? `${this.testId()}-cancel` : null));\n\n /**\n * Full width\n */\n fullWidth = input(false);\n\n /**\n * Emitted when save button is clicked\n */\n save = output<InlineFieldChangeEvent>();\n\n /**\n * Emitted when cancel button is clicked\n */\n // eslint-disable-next-line @angular-eslint/no-output-native -- output shadows a native event; rename is breaking, deferred to the breaking-change MAJOR (see plan)\n cancel = output<void>();\n\n /**\n * Emitted when value changes\n */\n valueChange = output<string>();\n\n /**\n * Emitted when editing mode changes\n */\n editingModeChange = output<boolean>();\n\n /**\n * Emitted on focus\n */\n focusEvent = output<void>();\n\n /**\n * Emitted on blur\n */\n blurEvent = output<void>();\n\n @ViewChild('fieldElement') fieldComponent: FieldComponent;\n\n private readonly _isEditing = signal(false);\n private readonly _originalValue = signal('');\n private readonly _currentValue = signal('');\n private readonly _state = signal<InlineFieldState>('default');\n\n isEditing = computed(() => this._isEditing());\n currentValue = computed(() => this._currentValue());\n state = computed(() => this._state());\n\n saveButtonConfig = computed(() => ({\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy fallback: an empty-string label must also fall back to the default (pre-rollout behavior)\n label: this.buttonConfig().saveLabel || 'Save',\n iconName: this.buttonConfig().saveIcon ?? 'Check-filled',\n variant: 'secondary-inverted' as const,\n size: 'small' as const,\n disabled: this.disabled(),\n }));\n\n cancelButtonConfig = computed(() => ({\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy fallback: an empty-string label must also fall back to the default (pre-rollout behavior)\n label: this.buttonConfig().cancelLabel || 'Cancel',\n iconName: this.buttonConfig().cancelIcon ?? 'Close-filled',\n variant: 'secondary-inverted' as const,\n size: 'small' as const,\n disabled: this.disabled(),\n }));\n\n private onChange = (_val: string) => {};\n private onTouched = () => {};\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly destroyRef: DestroyRef,\n private readonly elementRef: ElementRef<HTMLElement>,\n @Optional() @Self() public ngControl: NgControl\n ) {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n this._currentValue.set(this.value());\n this._originalValue.set(this.value());\n this.updateState();\n }\n\n writeValue(value: string): void {\n const newValue = value || '';\n this._currentValue.set(newValue);\n if (!this.isEditing()) {\n this._originalValue.set(newValue);\n }\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n this.updateState();\n this.cdr.markForCheck();\n }\n\n @HostListener('focusout', ['$event'])\n onComponentFocusOut(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n const isLeavingComponent = !relatedTarget || !this.elementRef.nativeElement.contains(relatedTarget);\n\n if (isLeavingComponent && this.isEditing()) {\n this._currentValue.set(this._originalValue());\n this.exitEditMode();\n this.onChange(this._originalValue());\n this.cancel.emit();\n }\n }\n\n @HostListener('keydown.escape', ['$event'])\n onEscapePressed(event: Event): void {\n if (this.isEditing()) {\n event.preventDefault();\n this.cancelEdit();\n }\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterPressed(event: Event): void {\n if (this.isEditing() && event instanceof KeyboardEvent && !event.shiftKey) {\n event.preventDefault();\n this.saveEdit();\n }\n }\n\n @HostListener('keydown.tab')\n onTabPressed(): void {}\n\n onInputFocus(): void {\n if (!this.disabled() && !this.isEditing()) {\n this.enterEditMode();\n }\n this._state.set('focused');\n this.focusEvent.emit();\n this.onTouched();\n }\n\n onInputBlur(): void {\n this.blurEvent.emit();\n }\n\n onInputChange(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n const newValue = inputElement.value;\n this._currentValue.set(newValue);\n this.valueChange.emit(newValue);\n }\n\n focus(): void {\n if (this.fieldComponent) {\n this.fieldComponent.focus();\n this.fieldComponent.field?.nativeElement?.select();\n }\n }\n\n enterEditMode(): void {\n if (this.disabled() || this.isEditing()) {\n return;\n }\n\n this._originalValue.set(this._currentValue());\n this._isEditing.set(true);\n this._state.set('editing');\n this.editingModeChange.emit(true);\n\n this.cdr.markForCheck();\n }\n\n saveEdit(): void {\n if (!this.isEditing()) {\n return;\n }\n\n const newValue = this.currentValue();\n const hasValidationError = this.hasValidationError(newValue);\n\n if (hasValidationError) {\n this._state.set('error');\n this.cdr.markForCheck();\n return;\n }\n\n const changeEvent: InlineFieldChangeEvent = {\n value: newValue,\n saved: true,\n previousValue: this._originalValue(),\n };\n\n this._originalValue.set(newValue);\n this.exitEditMode();\n this.onChange(newValue);\n this.save.emit(changeEvent);\n }\n\n cancelEdit(): void {\n if (!this.isEditing()) {\n return;\n }\n\n this._currentValue.set(this._originalValue());\n this.exitEditMode();\n this.cancel.emit();\n }\n\n private exitEditMode(): void {\n this._isEditing.set(false);\n this.updateState();\n this.editingModeChange.emit(false);\n this.cdr.markForCheck();\n }\n\n private updateState(): void {\n if (this.disabled()) {\n this._state.set('disabled');\n } else if (this.errors().length > 0) {\n this._state.set('error');\n } else if (this.isEditing()) {\n this._state.set('editing');\n } else {\n this._state.set('default');\n }\n }\n\n private hasValidationError(value: string): boolean {\n const config = this.validation();\n\n return (\n this.hasRequiredError(value, config) ||\n this.hasMinLengthError(value, config) ||\n this.hasMaxLengthError(value, config) ||\n this.hasPatternError(value, config) ||\n this.hasCustomValidationError(value, config)\n );\n }\n\n private hasRequiredError(value: string, config: InlineFieldValidation): boolean {\n return config.required ? !value || value.trim().length === 0 : false;\n }\n\n private hasMinLengthError(value: string, config: InlineFieldValidation): boolean {\n return config.minLength ? value.length < config.minLength : false;\n }\n\n private hasMaxLengthError(value: string, config: InlineFieldValidation): boolean {\n return config.maxLength ? value.length > config.maxLength : false;\n }\n\n private hasPatternError(value: string, config: InlineFieldValidation): boolean {\n return config.pattern ? !config.pattern.test(value) : false;\n }\n\n private hasCustomValidationError(value: string, config: InlineFieldValidation): boolean {\n return config.customValidator ? config.customValidator(value) : false;\n }\n}\n","<div class=\"inline-field-container\">\n <div class=\"field-wrapper\" [ngClass]=\"{ 'is-editing': isEditing() }\">\n <ui-field\n [id]=\"id() + '-input'\"\n [label]=\"label()\"\n [placeholder]=\"placeholder()\"\n [value]=\"currentValue()\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n [errors]=\"errors()\"\n [showBottomContent]=\"showErrors()\"\n [ariaLabel]=\"ariaLabel()\"\n [applicationTheme]=\"applicationTheme()\"\n [fullWidth]=\"true\"\n [isAutocompleteOff]=\"true\"\n [type]=\"fieldType()\"\n [maxRows]=\"maxRows()\"\n (input)=\"onInputChange($event)\"\n (fieldBlur)=\"onInputBlur()\"\n (focusin)=\"onInputFocus()\"\n #fieldElement\n data-testid=\"inline-field\"\n [testId]=\"testId()\"\n ></ui-field>\n\n @if (isEditing()) {\n <div class=\"action-buttons\">\n <ui-button\n [label]=\"saveButtonConfig().label\"\n [iconName]=\"saveButtonConfig().iconName\"\n [variant]=\"saveButtonConfig().variant\"\n [size]=\"saveButtonConfig().size\"\n [disabled]=\"saveButtonConfig().disabled\"\n [applicationTheme]=\"applicationTheme()\"\n [iconPosition]=\"'left'\"\n (buttonClickEvent)=\"saveEdit()\"\n [attr.aria-label]=\"'Save ' + (label() || 'field')\"\n [testId]=\"saveButtonTestId()\"\n class=\"save-button\"\n ></ui-button>\n <ui-button\n [label]=\"cancelButtonConfig().label\"\n [iconName]=\"cancelButtonConfig().iconName\"\n [variant]=\"cancelButtonConfig().variant\"\n [size]=\"cancelButtonConfig().size\"\n [disabled]=\"cancelButtonConfig().disabled\"\n [applicationTheme]=\"applicationTheme()\"\n [iconPosition]=\"'left'\"\n (buttonClickEvent)=\"cancelEdit()\"\n [attr.aria-label]=\"'Cancel editing ' + (label() || 'field')\"\n [testId]=\"cancelButtonTestId()\"\n class=\"cancel-button\"\n ></ui-button>\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { InlineFieldComponent } from './inline-field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n ButtonComponentModule,\n FieldComponentModule,\n IconComponentModule,\n InlineFieldComponent,\n ],\n exports: [InlineFieldComponent],\n})\nexport class InlineFieldComponentModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-inline-field.mjs","names":[],"sources":["../../../components/inline-field/inline-field.component.ts","../../../components/inline-field/inline-field.component.html","../../../components/inline-field/inline-field.component.module.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n HostBinding,\n HostListener,\n input,\n OnInit,\n output,\n ViewChild,\n ViewEncapsulation,\n computed,\n signal,\n Optional,\n Self,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\nimport { ButtonComponent } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponent, FieldType } from '@testgorilla/tgo-ui/components/field';\n\nimport {\n InlineFieldState,\n InlineFieldButtonConfig,\n InlineFieldValidation,\n InlineFieldChangeEvent,\n} from './inline-field.model';\n\n/**\n * A global counter used to generate unique inline field IDs.\n */\nlet inlineFieldID = 0;\n\n@Component({\n selector: 'ui-inline-field',\n templateUrl: './inline-field.component.html',\n styleUrls: ['./inline-field.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.theme]': 'applicationTheme()',\n '[attr.state]': 'state()',\n '[attr.editing]': 'isEditing()',\n '[class.full-width]': 'fullWidth()',\n },\n imports: [NgClass, FieldComponent, ButtonComponent],\n})\nexport class InlineFieldComponent implements OnInit, ControlValueAccessor {\n @HostBinding() class = 'ui-inline-field';\n\n /**\n * Component ID for accessibility\n */\n id = input(`inline-field-${inlineFieldID++}`);\n\n /**\n * Field label\n */\n label = input('');\n\n /**\n * Field placeholder\n */\n placeholder = input('');\n\n /**\n * Current value\n */\n value = input('');\n\n /**\n * Whether the field is required\n */\n required = input(false);\n\n /**\n * Whether the field is disabled\n */\n disabled = input(false);\n\n /**\n * Application theme\n */\n applicationTheme = input<ApplicationTheme>('light');\n\n /**\n * Field type\n */\n fieldType = input<FieldType>('text');\n\n /**\n * Field type\n */\n maxRows = input<number>(0);\n\n /**\n * Error messages\n */\n errors = input<string[]>([]);\n\n /**\n * Whether to show errors\n */\n showErrors = input(true);\n\n /**\n * Button configuration\n */\n buttonConfig = input<InlineFieldButtonConfig>({\n saveLabel: 'Save',\n cancelLabel: 'Cancel',\n saveIcon: 'Check-filled',\n cancelIcon: 'Close-filled',\n });\n\n /**\n * Validation configuration\n */\n validation = input<InlineFieldValidation>({});\n\n /**\n * ARIA label\n */\n ariaLabel = input('');\n\n testId = input<string | null>(null);\n\n protected readonly saveButtonTestId = computed(() => (this.testId() ? `${this.testId()}-save` : null));\n\n protected readonly cancelButtonTestId = computed(() => (this.testId() ? `${this.testId()}-cancel` : null));\n\n /**\n * Full width\n */\n fullWidth = input(false);\n\n /**\n * Emitted when save button is clicked\n */\n save = output<InlineFieldChangeEvent>();\n\n /**\n * Emitted when cancel button is clicked\n */\n // eslint-disable-next-line @angular-eslint/no-output-native -- output shadows a native event; rename is breaking, deferred to the breaking-change MAJOR (see plan)\n cancel = output<void>();\n\n /**\n * Emitted when value changes\n */\n valueChange = output<string>();\n\n /**\n * Emitted when editing mode changes\n */\n editingModeChange = output<boolean>();\n\n /**\n * Emitted on focus\n */\n focusEvent = output<void>();\n\n /**\n * Emitted on blur\n */\n blurEvent = output<void>();\n\n @ViewChild('fieldElement') fieldComponent: FieldComponent;\n\n private readonly _isEditing = signal(false);\n private readonly _originalValue = signal('');\n private readonly _currentValue = signal('');\n private readonly _state = signal<InlineFieldState>('default');\n\n isEditing = computed(() => this._isEditing());\n currentValue = computed(() => this._currentValue());\n state = computed(() => this._state());\n\n saveButtonConfig = computed(() => ({\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy fallback: an empty-string label must also fall back to the default (pre-rollout behavior)\n label: this.buttonConfig().saveLabel || 'Save',\n iconName: this.buttonConfig().saveIcon ?? 'Check-filled',\n variant: 'secondary-inverted' as const,\n size: 'small' as const,\n disabled: this.disabled(),\n }));\n\n cancelButtonConfig = computed(() => ({\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy fallback: an empty-string label must also fall back to the default (pre-rollout behavior)\n label: this.buttonConfig().cancelLabel || 'Cancel',\n iconName: this.buttonConfig().cancelIcon ?? 'Close-filled',\n variant: 'secondary-inverted' as const,\n size: 'small' as const,\n disabled: this.disabled(),\n }));\n\n private onChange = (_val: string) => {};\n private onTouched = () => {};\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly destroyRef: DestroyRef,\n private readonly elementRef: ElementRef<HTMLElement>,\n @Optional() @Self() public ngControl: NgControl\n ) {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n this._currentValue.set(this.value());\n this._originalValue.set(this.value());\n this.updateState();\n }\n\n writeValue(value: string): void {\n const newValue = value || '';\n this._currentValue.set(newValue);\n if (!this.isEditing()) {\n this._originalValue.set(newValue);\n }\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n this.updateState();\n this.cdr.markForCheck();\n }\n\n @HostListener('focusout', ['$event'])\n onComponentFocusOut(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n const isLeavingComponent = !relatedTarget || !this.elementRef.nativeElement.contains(relatedTarget);\n\n if (isLeavingComponent && this.isEditing()) {\n this._currentValue.set(this._originalValue());\n this.exitEditMode();\n this.onChange(this._originalValue());\n this.cancel.emit();\n }\n }\n\n @HostListener('keydown.escape', ['$event'])\n onEscapePressed(event: Event): void {\n if (this.isEditing()) {\n event.preventDefault();\n this.cancelEdit();\n }\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterPressed(event: Event): void {\n if (this.isEditing() && event instanceof KeyboardEvent && !event.shiftKey) {\n event.preventDefault();\n this.saveEdit();\n }\n }\n\n @HostListener('keydown.tab')\n onTabPressed(): void {}\n\n onInputFocus(): void {\n if (!this.disabled() && !this.isEditing()) {\n this.enterEditMode();\n }\n this._state.set('focused');\n this.focusEvent.emit();\n this.onTouched();\n }\n\n onInputBlur(): void {\n this.blurEvent.emit();\n }\n\n onInputChange(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n const newValue = inputElement.value;\n this._currentValue.set(newValue);\n this.valueChange.emit(newValue);\n }\n\n focus(): void {\n if (this.fieldComponent) {\n this.fieldComponent.focus();\n this.fieldComponent.field?.nativeElement?.select();\n }\n }\n\n enterEditMode(): void {\n if (this.disabled() || this.isEditing()) {\n return;\n }\n\n this._originalValue.set(this._currentValue());\n this._isEditing.set(true);\n this._state.set('editing');\n this.editingModeChange.emit(true);\n\n this.cdr.markForCheck();\n }\n\n saveEdit(): void {\n if (!this.isEditing()) {\n return;\n }\n\n const newValue = this.currentValue();\n const hasValidationError = this.hasValidationError(newValue);\n\n if (hasValidationError) {\n this._state.set('error');\n this.cdr.markForCheck();\n return;\n }\n\n const changeEvent: InlineFieldChangeEvent = {\n value: newValue,\n saved: true,\n previousValue: this._originalValue(),\n };\n\n this._originalValue.set(newValue);\n this.exitEditMode();\n this.onChange(newValue);\n this.save.emit(changeEvent);\n }\n\n cancelEdit(): void {\n if (!this.isEditing()) {\n return;\n }\n\n this._currentValue.set(this._originalValue());\n this.exitEditMode();\n this.cancel.emit();\n }\n\n private exitEditMode(): void {\n this._isEditing.set(false);\n this.updateState();\n this.editingModeChange.emit(false);\n this.cdr.markForCheck();\n }\n\n private updateState(): void {\n if (this.disabled()) {\n this._state.set('disabled');\n } else if (this.errors().length > 0) {\n this._state.set('error');\n } else if (this.isEditing()) {\n this._state.set('editing');\n } else {\n this._state.set('default');\n }\n }\n\n private hasValidationError(value: string): boolean {\n const config = this.validation();\n\n return (\n this.hasRequiredError(value, config) ||\n this.hasMinLengthError(value, config) ||\n this.hasMaxLengthError(value, config) ||\n this.hasPatternError(value, config) ||\n this.hasCustomValidationError(value, config)\n );\n }\n\n private hasRequiredError(value: string, config: InlineFieldValidation): boolean {\n return config.required ? !value || value.trim().length === 0 : false;\n }\n\n private hasMinLengthError(value: string, config: InlineFieldValidation): boolean {\n return config.minLength ? value.length < config.minLength : false;\n }\n\n private hasMaxLengthError(value: string, config: InlineFieldValidation): boolean {\n return config.maxLength ? value.length > config.maxLength : false;\n }\n\n private hasPatternError(value: string, config: InlineFieldValidation): boolean {\n return config.pattern ? !config.pattern.test(value) : false;\n }\n\n private hasCustomValidationError(value: string, config: InlineFieldValidation): boolean {\n return config.customValidator ? config.customValidator(value) : false;\n }\n}\n","<div class=\"inline-field-container\">\n <div class=\"field-wrapper\" [ngClass]=\"{ 'is-editing': isEditing() }\">\n <ui-field\n [id]=\"id() + '-input'\"\n [label]=\"label()\"\n [placeholder]=\"placeholder()\"\n [value]=\"currentValue()\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n [errors]=\"errors()\"\n [showBottomContent]=\"showErrors()\"\n [ariaLabel]=\"ariaLabel()\"\n [applicationTheme]=\"applicationTheme()\"\n [fullWidth]=\"true\"\n [isAutocompleteOff]=\"true\"\n [type]=\"fieldType()\"\n [maxRows]=\"maxRows()\"\n (input)=\"onInputChange($event)\"\n (fieldBlur)=\"onInputBlur()\"\n (focusin)=\"onInputFocus()\"\n #fieldElement\n data-testid=\"inline-field\"\n [testId]=\"testId()\"\n ></ui-field>\n\n @if (isEditing()) {\n <div class=\"action-buttons\">\n <ui-button\n [label]=\"saveButtonConfig().label\"\n [iconName]=\"saveButtonConfig().iconName\"\n [variant]=\"saveButtonConfig().variant\"\n [size]=\"saveButtonConfig().size\"\n [disabled]=\"saveButtonConfig().disabled\"\n [applicationTheme]=\"applicationTheme()\"\n [iconPosition]=\"'left'\"\n (buttonClickEvent)=\"saveEdit()\"\n [attr.aria-label]=\"'Save ' + (label() || 'field')\"\n [testId]=\"saveButtonTestId()\"\n class=\"save-button\"\n ></ui-button>\n <ui-button\n [label]=\"cancelButtonConfig().label\"\n [iconName]=\"cancelButtonConfig().iconName\"\n [variant]=\"cancelButtonConfig().variant\"\n [size]=\"cancelButtonConfig().size\"\n [disabled]=\"cancelButtonConfig().disabled\"\n [applicationTheme]=\"applicationTheme()\"\n [iconPosition]=\"'left'\"\n (buttonClickEvent)=\"cancelEdit()\"\n [attr.aria-label]=\"'Cancel editing ' + (label() || 'field')\"\n [testId]=\"cancelButtonTestId()\"\n class=\"cancel-button\"\n ></ui-button>\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { InlineFieldComponent } from './inline-field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n ButtonComponentModule,\n FieldComponentModule,\n IconComponentModule,\n InlineFieldComponent,\n ],\n exports: [InlineFieldComponent],\n})\nexport class InlineFieldComponentModule {}\n"],"mappings":"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"}
@@ -91,12 +91,15 @@ var MediaCardComponent = class MediaCardComponent {
91
91
  "ariaExpanded",
92
92
  "ariaControls",
93
93
  "ariaPressed",
94
+ "ariaHasPopup",
94
95
  "ariaRequired",
95
96
  "ariaLabelledby",
96
97
  "ariaDescribedby",
97
98
  "preventDefault",
98
99
  "hasBackground",
99
100
  "circular",
101
+ "isSingleLineLabel",
102
+ "iconButtonShape",
100
103
  "tooltipPosition",
101
104
  "role",
102
105
  "iconFilled",
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-media-card.mjs","names":[],"sources":["../../../components/media-card/media-card.component.ts","../../../components/media-card/media-card.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { EllipseTextDirective } from '@testgorilla/tgo-ui/components/core';\nimport { DividerComponentModule } from '@testgorilla/tgo-ui/components/divider';\n\n@Component({\n selector: 'ui-media-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DividerComponentModule, ButtonComponentModule, EllipseTextDirective, MatTooltipModule],\n templateUrl: './media-card.component.html',\n styleUrl: './media-card.component.scss',\n})\nexport class MediaCardComponent {\n /**\n * The title of the card\n * @type {string}\n * @memberof MediaCardComponent\n */\n @Input({ required: true }) title: string;\n /**\n * The description of the card\n * @type {string}\n * @memberof MediaCardComponent\n */\n @Input({ required: true }) description: string;\n /**\n * The image of the card\n * @type {string}\n * @memberof MediaCardComponent\n */\n @Input({ required: true }) image: string;\n /**\n * The label of the button\n * @type {string}\n * @memberof MediaCardComponent\n */\n @Input({ required: true }) buttonLabel = '';\n @Output() buttonClick = new EventEmitter<void>();\n protected showTitleTooltip = false;\n}\n","<img [attr.src]=\"image\" alt=\"card image\" />\n\n<div class=\"media-card-content\">\n <div\n class=\"media-card-title\"\n [isMultiline]=\"true\"\n [matTooltip]=\"showTitleTooltip ? title : ''\"\n uiEllipseText\n (onChangeTextState)=\"showTitleTooltip = $event\"\n >\n {{ title }}\n </div>\n\n <div class=\"media-card-description\">\n {{ description }}\n </div>\n</div>\n\n<ui-divider [size]=\"'small'\"></ui-divider>\n\n<div class=\"media-card-action\">\n <ui-button [variant]=\"'ghost'\" [label]=\"buttonLabel\" (buttonClickEvent)=\"buttonClick.emit()\"></ui-button>\n</div>\n"],"mappings":";;;;;;;;;AAcA,IAAa,qBAAb,MAAa,mBAAkB;CAP/B,cAAA;EA+B6B,KAAA,cAAc;EAC/B,KAAA,cAAc,IAAI,aAAY;EAC9B,KAAA,mBAAmB;CAC9B;CA3BY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAkB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAlB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAkB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,OAAA;IAAA,aAAA;IAAA,OAAA;IAAA,aAAA;GAAA;GAAA,SAAA,EAAA,aAAA,cAAA;GAAA,UAAA;GAAA,UCd/B;GAuBA,QAAA,CAAA,mjNAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDbY;IAAsB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;IAAqB;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;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,MAAE;KAAoB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,mBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;IAAgB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,YAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AAIpF,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAP9B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAe,iBACR,wBAAwB;GAAM,SACtC;IAAC;IAAwB;IAAuB;IAAsB;GAAgB;GAAC,UAAA;GAAA,QAAA,CAAA,mjNAAA;EAAA,CAAA;;;;GAU/F,MAAA;GAAM,MAAA,CAAA,EAAE,UAAU,KAAI,CAAE;;;GAMxB,MAAA;GAAM,MAAA,CAAA,EAAE,UAAU,KAAI,CAAE;;;GAMxB,MAAA;GAAM,MAAA,CAAA,EAAE,UAAU,KAAI,CAAE;;;GAMxB,MAAA;GAAM,MAAA,CAAA,EAAE,UAAU,KAAI,CAAE;;E,gBACxB,MAAA,O"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-media-card.mjs","names":[],"sources":["../../../components/media-card/media-card.component.ts","../../../components/media-card/media-card.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { EllipseTextDirective } from '@testgorilla/tgo-ui/components/core';\nimport { DividerComponentModule } from '@testgorilla/tgo-ui/components/divider';\n\n@Component({\n selector: 'ui-media-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DividerComponentModule, ButtonComponentModule, EllipseTextDirective, MatTooltipModule],\n templateUrl: './media-card.component.html',\n styleUrl: './media-card.component.scss',\n})\nexport class MediaCardComponent {\n /**\n * The title of the card\n * @type {string}\n * @memberof MediaCardComponent\n */\n @Input({ required: true }) title: string;\n /**\n * The description of the card\n * @type {string}\n * @memberof MediaCardComponent\n */\n @Input({ required: true }) description: string;\n /**\n * The image of the card\n * @type {string}\n * @memberof MediaCardComponent\n */\n @Input({ required: true }) image: string;\n /**\n * The label of the button\n * @type {string}\n * @memberof MediaCardComponent\n */\n @Input({ required: true }) buttonLabel = '';\n @Output() buttonClick = new EventEmitter<void>();\n protected showTitleTooltip = false;\n}\n","<img [attr.src]=\"image\" alt=\"card image\" />\n\n<div class=\"media-card-content\">\n <div\n class=\"media-card-title\"\n [isMultiline]=\"true\"\n [matTooltip]=\"showTitleTooltip ? title : ''\"\n uiEllipseText\n (onChangeTextState)=\"showTitleTooltip = $event\"\n >\n {{ title }}\n </div>\n\n <div class=\"media-card-description\">\n {{ description }}\n </div>\n</div>\n\n<ui-divider [size]=\"'small'\"></ui-divider>\n\n<div class=\"media-card-action\">\n <ui-button [variant]=\"'ghost'\" [label]=\"buttonLabel\" (buttonClickEvent)=\"buttonClick.emit()\"></ui-button>\n</div>\n"],"mappings":";;;;;;;;;AAcA,IAAa,qBAAb,MAAa,mBAAkB;CAP/B,cAAA;EA+B6B,KAAA,cAAc;EAC/B,KAAA,cAAc,IAAI,aAAY;EAC9B,KAAA,mBAAmB;CAC9B;CA3BY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAkB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAlB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAkB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,OAAA;IAAA,aAAA;IAAA,OAAA;IAAA,aAAA;GAAA;GAAA,SAAA,EAAA,aAAA,cAAA;GAAA,UAAA;GAAA,UCd/B;GAuBA,QAAA,CAAA,mjNAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDbY;IAAsB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;IAAqB;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;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,MAAE;KAAoB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,mBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;IAAgB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,YAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AAIpF,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAP9B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAe,iBACR,wBAAwB;GAAM,SACtC;IAAC;IAAwB;IAAuB;IAAsB;GAAgB;GAAC,UAAA;GAAA,QAAA,CAAA,mjNAAA;EAAA,CAAA;;;;GAU/F,MAAA;GAAM,MAAA,CAAA,EAAE,UAAU,KAAI,CAAE;;;GAMxB,MAAA;GAAM,MAAA,CAAA,EAAE,UAAU,KAAI,CAAE;;;GAMxB,MAAA;GAAM,MAAA,CAAA,EAAE,UAAU,KAAI,CAAE;;;GAMxB,MAAA;GAAM,MAAA,CAAA,EAAE,UAAU,KAAI,CAAE;;E,gBACxB,MAAA,O"}
@@ -133,12 +133,15 @@ var MediaDialogComponent = class MediaDialogComponent {
133
133
  "ariaExpanded",
134
134
  "ariaControls",
135
135
  "ariaPressed",
136
+ "ariaHasPopup",
136
137
  "ariaRequired",
137
138
  "ariaLabelledby",
138
139
  "ariaDescribedby",
139
140
  "preventDefault",
140
141
  "hasBackground",
141
142
  "circular",
143
+ "isSingleLineLabel",
144
+ "iconButtonShape",
142
145
  "tooltipPosition",
143
146
  "role",
144
147
  "iconFilled",
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-media-dialog.mjs","names":[],"sources":["../../../components/media-dialog/media-dialog.component.ts","../../../components/media-dialog/media-dialog.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, TemplateRef } from '@angular/core';\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { DialogComponentModule } from '@testgorilla/tgo-ui/components/dialog';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { MediaDialogData, MediaDialogStep } from './media-dialog.model';\n\n@Component({\n selector: 'ui-media-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './media-dialog.component.html',\n styleUrls: ['./media-dialog.component.scss'],\n imports: [CommonModule, MatDialogModule, ButtonComponentModule, DialogComponentModule, ProgressBarComponentModule],\n})\nexport class MediaDialogComponent {\n primaryButtonLabel: string | undefined;\n secondaryButtonLabel: string | undefined;\n backButtonLabel: string | undefined;\n title: string | undefined;\n primaryButtonDataTestId = 'media-dialog.confirm-button';\n secondaryButtonDataTestId = 'media-dialog.cancel-button';\n backButtonDataTestId = 'media-dialog.back-button';\n\n mediaContainer: TemplateRef<unknown>;\n subheader: string | undefined;\n body: string;\n\n currentStepIndex = 0;\n steps: MediaDialogStep[] = [];\n\n constructor(\n public dialogRef: MatDialogRef<MediaDialogComponent>,\n @Inject(MAT_DIALOG_DATA) private readonly data: MediaDialogData\n ) {\n this.steps = data.steps ?? [];\n if (this.steps.length < 1) {\n this.dialogRef.close();\n throw new Error('MediaDialogComponent: steps must contain at least one step.');\n }\n this.setStep(0);\n }\n\n private setStep(index: number): void {\n const step = this.steps[index];\n this.currentStepIndex = index;\n this.title = step.title;\n this.subheader = step.subheader;\n this.body = step.body ?? '';\n this.mediaContainer = step.mediaContainer;\n this.primaryButtonLabel = step?.primaryButtonLabel;\n this.secondaryButtonLabel = step?.secondaryButtonLabel;\n this.backButtonLabel = step?.backButtonLabel;\n this.primaryButtonDataTestId = step?.primaryButtonDataTestId ?? 'media-dialog.confirm-button';\n this.secondaryButtonDataTestId = step?.secondaryButtonDataTestId ?? 'media-dialog.cancel-button';\n this.backButtonDataTestId = step?.backButtonDataTestId ?? 'media-dialog.back-button';\n }\n\n onPrimaryButtonClick(): void {\n const isLastStep = this.currentStepIndex === this.steps.length - 1;\n\n if (isLastStep) {\n this.dialogRef.close(true);\n } else {\n this.setStep(this.currentStepIndex + 1);\n }\n }\n\n onBackButtonClick(): void {\n if (this.currentStepIndex > 0) {\n this.setStep(this.currentStepIndex - 1);\n }\n }\n\n onSecondaryButtonClick(): void {\n this.dialogRef.close(false);\n }\n\n dismiss(): void {\n this.dialogRef.close(null);\n }\n}\n","<ng-container>\n @if (steps && steps.length > 1) {\n <ui-progress-bar [progress]=\"(currentStepIndex + 1) * (100 / steps.length)\"></ui-progress-bar>\n }\n\n <ui-dialog [title]=\"title\" (closeEvent)=\"dialogRef.close(null)\" [showCloseButton]=\"true\">\n @if (mediaContainer) {\n <div class=\"media-container\">\n <ng-container [ngTemplateOutlet]=\"mediaContainer\"></ng-container>\n </div>\n }\n\n @if (subheader) {\n <h4 class=\"subheader\">{{ subheader }}</h4>\n }\n\n @if (body) {\n <div [innerHTML]=\"body\"></div>\n }\n\n <div mat-dialog-actions class=\"footer\">\n <div>\n @if (backButtonLabel && currentStepIndex > 0) {\n <ui-button\n variant=\"text-inline\"\n size=\"medium\"\n [label]=\"backButtonLabel\"\n [attr.data-testid]=\"backButtonDataTestId\"\n (click)=\"onBackButtonClick()\"\n ></ui-button>\n }\n </div>\n\n <div class=\"action-buttons\">\n @if (secondaryButtonLabel) {\n <ui-button\n variant=\"ghost\"\n [label]=\"secondaryButtonLabel\"\n [attr.data-testid]=\"secondaryButtonDataTestId\"\n (click)=\"onSecondaryButtonClick()\"\n ></ui-button>\n }\n @if (primaryButtonLabel) {\n <ui-button\n variant=\"primary\"\n [label]=\"primaryButtonLabel\"\n [attr.data-testid]=\"primaryButtonDataTestId\"\n (click)=\"onPrimaryButtonClick()\"\n ></ui-button>\n }\n </div>\n </div>\n </ui-dialog>\n</ng-container>\n"],"mappings":"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"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-media-dialog.mjs","names":[],"sources":["../../../components/media-dialog/media-dialog.component.ts","../../../components/media-dialog/media-dialog.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, TemplateRef } from '@angular/core';\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { DialogComponentModule } from '@testgorilla/tgo-ui/components/dialog';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { MediaDialogData, MediaDialogStep } from './media-dialog.model';\n\n@Component({\n selector: 'ui-media-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './media-dialog.component.html',\n styleUrls: ['./media-dialog.component.scss'],\n imports: [CommonModule, MatDialogModule, ButtonComponentModule, DialogComponentModule, ProgressBarComponentModule],\n})\nexport class MediaDialogComponent {\n primaryButtonLabel: string | undefined;\n secondaryButtonLabel: string | undefined;\n backButtonLabel: string | undefined;\n title: string | undefined;\n primaryButtonDataTestId = 'media-dialog.confirm-button';\n secondaryButtonDataTestId = 'media-dialog.cancel-button';\n backButtonDataTestId = 'media-dialog.back-button';\n\n mediaContainer: TemplateRef<unknown>;\n subheader: string | undefined;\n body: string;\n\n currentStepIndex = 0;\n steps: MediaDialogStep[] = [];\n\n constructor(\n public dialogRef: MatDialogRef<MediaDialogComponent>,\n @Inject(MAT_DIALOG_DATA) private readonly data: MediaDialogData\n ) {\n this.steps = data.steps ?? [];\n if (this.steps.length < 1) {\n this.dialogRef.close();\n throw new Error('MediaDialogComponent: steps must contain at least one step.');\n }\n this.setStep(0);\n }\n\n private setStep(index: number): void {\n const step = this.steps[index];\n this.currentStepIndex = index;\n this.title = step.title;\n this.subheader = step.subheader;\n this.body = step.body ?? '';\n this.mediaContainer = step.mediaContainer;\n this.primaryButtonLabel = step?.primaryButtonLabel;\n this.secondaryButtonLabel = step?.secondaryButtonLabel;\n this.backButtonLabel = step?.backButtonLabel;\n this.primaryButtonDataTestId = step?.primaryButtonDataTestId ?? 'media-dialog.confirm-button';\n this.secondaryButtonDataTestId = step?.secondaryButtonDataTestId ?? 'media-dialog.cancel-button';\n this.backButtonDataTestId = step?.backButtonDataTestId ?? 'media-dialog.back-button';\n }\n\n onPrimaryButtonClick(): void {\n const isLastStep = this.currentStepIndex === this.steps.length - 1;\n\n if (isLastStep) {\n this.dialogRef.close(true);\n } else {\n this.setStep(this.currentStepIndex + 1);\n }\n }\n\n onBackButtonClick(): void {\n if (this.currentStepIndex > 0) {\n this.setStep(this.currentStepIndex - 1);\n }\n }\n\n onSecondaryButtonClick(): void {\n this.dialogRef.close(false);\n }\n\n dismiss(): void {\n this.dialogRef.close(null);\n }\n}\n","<ng-container>\n @if (steps && steps.length > 1) {\n <ui-progress-bar [progress]=\"(currentStepIndex + 1) * (100 / steps.length)\"></ui-progress-bar>\n }\n\n <ui-dialog [title]=\"title\" (closeEvent)=\"dialogRef.close(null)\" [showCloseButton]=\"true\">\n @if (mediaContainer) {\n <div class=\"media-container\">\n <ng-container [ngTemplateOutlet]=\"mediaContainer\"></ng-container>\n </div>\n }\n\n @if (subheader) {\n <h4 class=\"subheader\">{{ subheader }}</h4>\n }\n\n @if (body) {\n <div [innerHTML]=\"body\"></div>\n }\n\n <div mat-dialog-actions class=\"footer\">\n <div>\n @if (backButtonLabel && currentStepIndex > 0) {\n <ui-button\n variant=\"text-inline\"\n size=\"medium\"\n [label]=\"backButtonLabel\"\n [attr.data-testid]=\"backButtonDataTestId\"\n (click)=\"onBackButtonClick()\"\n ></ui-button>\n }\n </div>\n\n <div class=\"action-buttons\">\n @if (secondaryButtonLabel) {\n <ui-button\n variant=\"ghost\"\n [label]=\"secondaryButtonLabel\"\n [attr.data-testid]=\"secondaryButtonDataTestId\"\n (click)=\"onSecondaryButtonClick()\"\n ></ui-button>\n }\n @if (primaryButtonLabel) {\n <ui-button\n variant=\"primary\"\n [label]=\"primaryButtonLabel\"\n [attr.data-testid]=\"primaryButtonDataTestId\"\n (click)=\"onPrimaryButtonClick()\"\n ></ui-button>\n }\n </div>\n </div>\n </ui-dialog>\n</ng-container>\n"],"mappings":"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"}
@@ -240,12 +240,15 @@ var MobileNavbarSideSheetComponent = class MobileNavbarSideSheetComponent {
240
240
  "ariaExpanded",
241
241
  "ariaControls",
242
242
  "ariaPressed",
243
+ "ariaHasPopup",
243
244
  "ariaRequired",
244
245
  "ariaLabelledby",
245
246
  "ariaDescribedby",
246
247
  "preventDefault",
247
248
  "hasBackground",
248
249
  "circular",
250
+ "isSingleLineLabel",
251
+ "iconButtonShape",
249
252
  "tooltipPosition",
250
253
  "role",
251
254
  "iconFilled",
@@ -694,12 +697,15 @@ var NavbarComponent = class NavbarComponent {
694
697
  "ariaExpanded",
695
698
  "ariaControls",
696
699
  "ariaPressed",
700
+ "ariaHasPopup",
697
701
  "ariaRequired",
698
702
  "ariaLabelledby",
699
703
  "ariaDescribedby",
700
704
  "preventDefault",
701
705
  "hasBackground",
702
706
  "circular",
707
+ "isSingleLineLabel",
708
+ "iconButtonShape",
703
709
  "tooltipPosition",
704
710
  "role",
705
711
  "iconFilled",