@tekus/design-system 5.37.0 → 5.39.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 (69) hide show
  1. package/assets/readme-images/tk-data-list-anatomy.png +0 -0
  2. package/assets/readme-images/tk-data-list-grid.png +0 -0
  3. package/assets/readme-images/tk-data-list-list.png +0 -0
  4. package/assets/tokens/tk-foundations.json +4 -0
  5. package/fesm2022/tekus-design-system-components-autocomplete.mjs +7 -17
  6. package/fesm2022/tekus-design-system-components-autocomplete.mjs.map +1 -1
  7. package/fesm2022/tekus-design-system-components-avatar.mjs +120 -0
  8. package/fesm2022/tekus-design-system-components-avatar.mjs.map +1 -0
  9. package/fesm2022/tekus-design-system-components-button.mjs +2 -2
  10. package/fesm2022/tekus-design-system-components-button.mjs.map +1 -1
  11. package/fesm2022/tekus-design-system-components-card.mjs +1 -1
  12. package/fesm2022/tekus-design-system-components-card.mjs.map +1 -1
  13. package/fesm2022/tekus-design-system-components-checkbox.mjs +9 -3
  14. package/fesm2022/tekus-design-system-components-checkbox.mjs.map +1 -1
  15. package/fesm2022/tekus-design-system-components-data-list.mjs +185 -0
  16. package/fesm2022/tekus-design-system-components-data-list.mjs.map +1 -0
  17. package/fesm2022/tekus-design-system-components-date-picker.mjs +16 -3
  18. package/fesm2022/tekus-design-system-components-date-picker.mjs.map +1 -1
  19. package/fesm2022/tekus-design-system-components-input-number.mjs +37 -3
  20. package/fesm2022/tekus-design-system-components-input-number.mjs.map +1 -1
  21. package/fesm2022/tekus-design-system-components-input-text.mjs +2 -2
  22. package/fesm2022/tekus-design-system-components-input-text.mjs.map +1 -1
  23. package/fesm2022/tekus-design-system-components-menu.mjs +2 -2
  24. package/fesm2022/tekus-design-system-components-menu.mjs.map +1 -1
  25. package/fesm2022/tekus-design-system-components-multiselect.mjs +2 -2
  26. package/fesm2022/tekus-design-system-components-multiselect.mjs.map +1 -1
  27. package/fesm2022/tekus-design-system-components-panel-menu.mjs +2 -2
  28. package/fesm2022/tekus-design-system-components-panel-menu.mjs.map +1 -1
  29. package/fesm2022/tekus-design-system-components-radio-button.mjs +9 -3
  30. package/fesm2022/tekus-design-system-components-radio-button.mjs.map +1 -1
  31. package/fesm2022/tekus-design-system-components-select.mjs +37 -32
  32. package/fesm2022/tekus-design-system-components-select.mjs.map +1 -1
  33. package/fesm2022/tekus-design-system-components-sidebar-layout.mjs +2 -2
  34. package/fesm2022/tekus-design-system-components-sidebar-layout.mjs.map +1 -1
  35. package/fesm2022/tekus-design-system-components-stat.mjs +193 -0
  36. package/fesm2022/tekus-design-system-components-stat.mjs.map +1 -0
  37. package/fesm2022/tekus-design-system-components-table.mjs +1 -1
  38. package/fesm2022/tekus-design-system-components-table.mjs.map +1 -1
  39. package/fesm2022/tekus-design-system-components-tabs.mjs +2 -2
  40. package/fesm2022/tekus-design-system-components-tabs.mjs.map +1 -1
  41. package/fesm2022/tekus-design-system-components-textarea.mjs +2 -2
  42. package/fesm2022/tekus-design-system-components-textarea.mjs.map +1 -1
  43. package/fesm2022/tekus-design-system-components-time-picker.mjs +13 -3
  44. package/fesm2022/tekus-design-system-components-time-picker.mjs.map +1 -1
  45. package/fesm2022/tekus-design-system-components-toggle.mjs +4 -3
  46. package/fesm2022/tekus-design-system-components-toggle.mjs.map +1 -1
  47. package/fesm2022/tekus-design-system-components-toolbar.mjs +2 -2
  48. package/fesm2022/tekus-design-system-components-toolbar.mjs.map +1 -1
  49. package/fesm2022/tekus-design-system-components-topbar.mjs +2 -2
  50. package/fesm2022/tekus-design-system-components-topbar.mjs.map +1 -1
  51. package/fesm2022/tekus-design-system-core-types.mjs +4 -3
  52. package/fesm2022/tekus-design-system-core-types.mjs.map +1 -1
  53. package/fesm2022/tekus-design-system-core.mjs +4 -3
  54. package/fesm2022/tekus-design-system-core.mjs.map +1 -1
  55. package/package.json +13 -1
  56. package/scss/_config.scss +242 -0
  57. package/scss/tk-bundle.scss +105 -0
  58. package/styles/variables.css +1 -0
  59. package/types/tekus-design-system-components-autocomplete.d.ts +3 -12
  60. package/types/tekus-design-system-components-avatar.d.ts +104 -0
  61. package/types/tekus-design-system-components-checkbox.d.ts +7 -1
  62. package/types/tekus-design-system-components-data-list.d.ts +193 -0
  63. package/types/tekus-design-system-components-date-picker.d.ts +11 -1
  64. package/types/tekus-design-system-components-input-number.d.ts +35 -1
  65. package/types/tekus-design-system-components-radio-button.d.ts +7 -1
  66. package/types/tekus-design-system-components-select.d.ts +2 -6
  67. package/types/tekus-design-system-components-stat.d.ts +161 -0
  68. package/types/tekus-design-system-components-time-picker.d.ts +8 -1
  69. package/types/tekus-design-system-components-toggle.d.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-multiselect.mjs","sources":["../../../projects/design-system/components/multiselect/src/multiselect.manager.ts","../../../projects/design-system/components/multiselect/src/multiselect.component.ts","../../../projects/design-system/components/multiselect/src/multiselect.component.html","../../../projects/design-system/components/multiselect/tekus-design-system-components-multiselect.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport {\n auditTime,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n map,\n Observable,\n of,\n scan,\n switchMap,\n tap,\n} from 'rxjs';\nimport { MultiSelectOption } from './multiselect.types';\n\n/**\n * Standard request object for fetching data from an asynchronous source.\n * Aligned with PrimeNG LazyLoadEvent patterns.\n */\nexport interface TkMultiSelectRequest {\n filter: string;\n page: number;\n pageSize: number;\n sortField?: string;\n sortOrder?: number;\n params?: Record<string, unknown>;\n}\n\n/**\n * Interface representing the data source for the Multiselect manager.\n */\nexport interface MultiSelectDataSource<T = MultiSelectOption> {\n fetch(request: TkMultiSelectRequest): Observable<T[]>;\n}\n\n@Injectable()\nexport class TkMultiSelectManager<T = MultiSelectOption> {\n /**\n * Reactive signal for the current search query.\n */\n searchQuery = signal<string>('');\n\n /**\n * Reactive signal for the current pagination page.\n */\n page = signal<number>(1);\n\n /**\n * Data source provider for fetching items.\n */\n public dataSource: MultiSelectDataSource<T> | undefined;\n\n /**\n * Additional parameters to send to the data source.\n */\n fetchParams = signal<Record<string, unknown>>({});\n\n /**\n * Sorting field.\n */\n sortField = signal<string | undefined>(undefined);\n\n /**\n * Sorting order (1 for ASC, -1 for DESC).\n */\n sortOrder = signal<number | undefined>(undefined);\n\n /**\n * Reactive signal indicating if data is currently being fetched.\n */\n loading = signal<boolean>(false);\n\n /**\n * Reactive signal indicating if there are more items to fetch.\n */\n hasMore = signal<boolean>(true);\n\n /**\n * Number of items per page to detect the end of data.\n */\n pageSize = 20;\n\n /**\n * Final accumulated list of items exposed as a Signal.\n */\n items = toSignal(\n combineLatest({\n filter: toObservable(this.searchQuery).pipe(debounceTime(200)),\n page: toObservable(this.page),\n params: toObservable(this.fetchParams),\n sortField: toObservable(this.sortField),\n sortOrder: toObservable(this.sortOrder),\n }).pipe(\n auditTime(0),\n distinctUntilChanged(\n (prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)\n ),\n map((data) => ({ ...data, pageSize: this.pageSize }) as TkMultiSelectRequest),\n tap((request) => {\n if (request.page === 1) {\n this.hasMore.set(true);\n }\n this.loading.set(true);\n }),\n switchMap(\n (request: TkMultiSelectRequest): Observable<{ results: T[]; page: number }> => {\n const fetcher$ = this.dataSource\n ? this.dataSource.fetch(request)\n : of([] as T[]);\n\n return fetcher$.pipe(\n tap((results) => {\n if (results.length < this.pageSize) {\n this.hasMore.set(false);\n }\n }),\n map((results) => ({ results, page: request.page })),\n tap(() => this.loading.set(false))\n );\n }\n ),\n scan((acc: T[], { results, page }: { results: T[]; page: number }) => {\n return page === 1 ? results : [...acc, ...results];\n }, [] as T[])\n ),\n { initialValue: [] as T[] }\n );\n\n /**\n * Updates the search query and resets pagination.\n * @param query - The new search string.\n */\n updateSearch(query: string): void {\n if (this.searchQuery() !== query) {\n this.searchQuery.set(query);\n this.page.set(1);\n this.hasMore.set(true);\n }\n }\n\n /**\n * Increments the page to trigger the next data chunk.\n */\n loadNextPage(): void {\n this.page.update((p) => p + 1);\n }\n\n /**\n * Configures the data provider for the manager.\n * @param provider - Object implementing the MultiSelectDataSource interface.\n */\n setDataSource(provider: MultiSelectDataSource<T>): void {\n this.dataSource = provider;\n }\n\n /**\n * Updates additional fetch parameters and resets pagination.\n * @param params - The new parameters object.\n */\n updateParams(params: Record<string, unknown>): void {\n if (JSON.stringify(this.fetchParams()) !== JSON.stringify(params)) {\n this.fetchParams.set(params);\n this.page.set(1);\n this.hasMore.set(true);\n }\n }\n\n /**\n * Resets the manager state to its initial values.\n */\n reset(): void {\n this.searchQuery.set('');\n this.page.set(1);\n this.hasMore.set(true);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n effect,\n OnDestroy,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { MultiSelect, MultiSelectModule } from 'primeng/multiselect';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { MultiSelectOption } from './multiselect.types';\nimport { MessageModule } from 'primeng/message';\nimport { IconComponent } from '@tekus/design-system/components/icon';\nimport { TkMultiSelectManager, MultiSelectDataSource } from './multiselect.manager';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'tk-multiselect',\n providers: [TkMultiSelectManager],\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MultiSelectModule,\n FloatLabelModule,\n MessageModule,\n IconComponent,\n ],\n templateUrl: './multiselect.component.html',\n styleUrl: './multiselect.component.scss',\n})\nexport class MultiselectComponent implements ControlValueAccessor, OnDestroy {\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n readonly manager = inject(TkMultiSelectManager<MultiSelectOption>);\n\n /** PrimeNG MultiSelect instance */\n readonly multiselectComponent = viewChild<MultiSelect>('pMultiselect');\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Synchronize parameters with the manager\n effect(() => {\n this.manager.updateParams(this.fetchParams());\n });\n\n effect(() => {\n this.manager.sortField.set(this.sortField());\n this.manager.sortOrder.set(this.sortOrder());\n });\n\n // Synchronize disabled state\n effect(() => {\n this.internalDisabled.set(this.disabled());\n });\n\n // Synchronize data source\n effect(() => {\n const source = this.dataSource();\n if (source) {\n this.manager.setDataSource(source);\n }\n });\n }\n\n /**\n * @property {Signal<MultiSelectOption[]>} selectionPool\n * @description\n * Internal signal to keep track of selected items even if they are filtered out from the main options list.\n */\n private readonly selectionPool = signal<MultiSelectOption[]>([]);\n\n /**\n * @property {ModelSignal<MultiSelectOption[] | null>} model\n * @description\n * The model signal for two-way binding.\n */\n readonly model = model<MultiSelectOption[] | null>([]);\n\n /**\n * Data source for asynchronous infinite scroll mode.\n */\n readonly dataSource = model<MultiSelectDataSource<MultiSelectOption>>();\n\n /**\n * @property {MultiSelectOption[]} options\n * @description\n * Array of available options shown in the multiselect dropdown.\n */\n options = input<MultiSelectOption[]>([]);\n\n /**\n * @property {string} labelText\n * @description\n * Label displayed above the multiselect input.\n *\n * @default 'Select'\n */\n labelText = input<string>('Select');\n\n /**\n * @property {string} display\n * @description\n * Display mode for selected items. Examples: 'chip', 'comma'.\n *\n * @default 'chip'\n */\n display = input<string>('chip');\n\n /**\n * @property {number} maxSelectedLabels\n * @description\n * Maximum number of labels shown when multiple items are selected.\n *\n * @default 4\n */\n maxSelectedLabels = input<number>(4);\n\n /**\n * @property {string} selectedItemsLabel\n * @description\n * Label template used when multiple items are selected (supports placeholders).\n *\n * @default '{0} elementos seleccionados'\n */\n selectedItemsLabel = input<string>('{0} elementos seleccionados');\n\n /**\n * @property {string} emptyFilterMessage\n * @description\n * Message displayed when the filter returns no results.\n *\n * @default 'No hay resultados'\n */\n emptyFilterMessage = input<string>('No hay resultados');\n\n /**\n * @property {boolean} filter\n * @description\n * Enables the search/filter input inside the multiselect dropdown.\n *\n * @default true\n */\n filter = input<boolean>(true);\n\n /**\n * @property {string} filterPlaceHolder\n * @description\n * Placeholder text for the filter input.\n */\n filterPlaceHolder = input<string>('');\n\n /**\n * Target element or selector to append the overlay panel to.\n * @default undefined\n */\n appendTo = input<string | HTMLElement | null | undefined>(undefined);\n\n /**\n * Custom style class to apply to the overlay panel.\n * @default undefined\n */\n panelStyleClass = input<string | undefined>(undefined);\n\n /**\n * @property {string} id\n * @description\n * HTML id attribute for the multiselect input.\n *\n * @default 'multiselect'\n */\n id = input<string>('multiselect');\n\n /**\n * @property {string} styleClass\n * @description\n * Additional CSS class applied to the multiselect container.\n */\n styleClass = input<string>('');\n\n /**\n * @property {InputSignal<string>} errorMessage\n * @description\n * Message to display when the control is invalid and touched.\n */\n errorMessage = input<string>('');\n\n /**\n * @property {InputSignal<string>} hint\n * @description\n * Hint text to display below the input.\n */\n hint = input<string>('');\n\n /**\n * Loading state for the dropdown.\n */\n loading = input<boolean>(false);\n\n /**\n * Text to display when there are no options.\n */\n emptyMessage = input<string>('No data available');\n\n /**\n * Additional parameters for the async data source.\n * Useful for sending context like categoryId, parentId, etc.\n */\n fetchParams = input<Record<string, unknown>>({});\n\n /**\n * Field name to sort by in the async data source.\n */\n sortField = input<string | undefined>(undefined);\n\n /**\n * Order to sort by (1 for ASC, -1 for DESC).\n */\n sortOrder = input<number | undefined>(undefined);\n\n /**\n * Determines whether the select field is disabled.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Internal writable signal for the disabled state.\n */\n readonly internalDisabled = signal<boolean>(false);\n\n /**\n * @event selectionChange\n * @description\n * Emits when the selected options change.\n * Payload: an array of selected MultiSelectOption or null.\n *\n * @example\n * <tk-multiselect (selectionChange)=\"onChange($event)\"></tk-multiselect>\n */\n selectionChange = output<MultiSelectOption[] | null>();\n\n /**\n * @event filterChange\n * @description\n * Emits the filter text when the user types in the search input.\n */\n readonly filterChange = output<string>();\n\n private readonly scrollHandler = this.handleScroll.bind(this);\n private lastListContainer: HTMLElement | null = null;\n\n /**\n * @property internalOptions\n * @description\n * Computed signal that merges the current options with the selected items pool\n * to ensure selected items are always visible.\n */\n readonly internalOptions = computed(() => {\n const currentFromParent = this.dataSource()\n ? (this.manager.items() as MultiSelectOption[])\n : this.options();\n const selected = this.selectionPool();\n\n const merged = [...selected, ...currentFromParent];\n const uniqueMap = new Map();\n\n merged.forEach((item) => {\n if (item) uniqueMap.set(item.code, item);\n });\n\n return Array.from(uniqueMap.values());\n });\n\n /**\n * @method handleFilter\n * @description\n * Handles the filter event from the PrimeNG component and emits the filter value.\n *\n * @param event - The filter event object.\n */\n handleFilter(event: { filter: string }) {\n const query = event.filter || '';\n if (this.dataSource()) {\n this.manager.updateSearch(query);\n }\n this.filterChange.emit(query);\n }\n\n /**\n * @callback onChange\n * @description\n * Callback function to notify the parent component of value changes.\n */\n onChange: (value: MultiSelectOption[] | null) => void = () => { };\n\n /**\n * @callback onTouched\n * @description\n * Callback function to notify the parent component when the control is touched.\n */\n onTouched: () => void = () => { };\n\n /**\n * @method handleChange\n * @description\n * Handler forwarded from the PrimeNG MultiSelect change event.\n * Emits the selectionChange output with the selected values.\n *\n * @param event - Change event containing the `value` property with selected items.\n */\n handleChange(event: { value: MultiSelectOption[] | null }): void {\n const val = event.value || [];\n this.model.set(val);\n this.updateSelectionPool(val);\n\n this.onChange(val);\n this.selectionChange.emit(val);\n\n if (this.effectiveControl) {\n this.effectiveControl.setValue(val);\n this.effectiveControl.markAsDirty();\n this.effectiveControl.markAsTouched();\n }\n }\n\n /**\n * @method updateSelectionPool\n * @description\n * Updates the internal selection pool to ensure selected items persist\n * even if they are filtered out from the main options list.\n *\n * @param items - The items to add to the pool.\n */\n private updateSelectionPool(items: MultiSelectOption[]) {\n this.selectionPool.update((prev) => {\n const combined = [...prev, ...items];\n const map = new Map();\n combined.forEach((i) => map.set(i.code, i));\n return Array.from(map.values());\n });\n }\n\n /**\n * @method writeValue\n * @description\n * Writes a new value to the element.\n * Part of the ControlValueAccessor interface.\n *\n * @param value - The new value.\n */\n writeValue(value: MultiSelectOption[] | null): void {\n this.model.set(value || []);\n if (value) this.updateSelectionPool(value);\n }\n\n /**\n * @method registerOnChange\n * @description\n * Registers a callback function that is called when the control's value changes in the UI.\n * Part of the ControlValueAccessor interface.\n *\n * @param fn - The callback function.\n */\n registerOnChange(fn: (value: MultiSelectOption[] | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @method registerOnTouched\n * @description\n * Registers a callback function that is called by the forms API on initialization to update the form control on 'blur'.\n * Part of the ControlValueAccessor interface.\n *\n * @param fn - The callback function.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Updates the disabled state of the control.\n * @param isDisabled - Whether the component should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.internalDisabled.set(isDisabled);\n }\n\n /**\n * Adds a scroll listener to the PrimeNG multiselect list container when the panel opens.\n */\n onPanelShow(): void {\n const listContainer = document.querySelector('.p-multiselect-list-container') as HTMLElement;\n if (listContainer) {\n this.lastListContainer = listContainer;\n listContainer.addEventListener('scroll', this.scrollHandler);\n }\n }\n\n /**\n * Cleans up state, removes listeners and resets the manager when the panel closes.\n */\n onPanelHide(): void {\n this.removeScrollListener();\n this.manager.reset();\n }\n\n /**\n * Cleans up listeners on component destruction.\n */\n ngOnDestroy(): void {\n this.removeScrollListener();\n }\n\n /**\n * Safely removes the scroll event listener.\n */\n private removeScrollListener(): void {\n if (this.lastListContainer) {\n this.lastListContainer.removeEventListener('scroll', this.scrollHandler);\n this.lastListContainer = null;\n }\n }\n\n /**\n * Detects if the user has reached the bottom of the list.\n */\n private handleScroll(event: Event): void {\n const target = event.target as HTMLElement;\n if (!target) return;\n\n // Trigger near the bottom (1px threshold)\n const atBottom =\n target.scrollHeight - target.scrollTop <= target.clientHeight + 1;\n\n if (\n atBottom &&\n this.manager.dataSource &&\n !this.manager.loading() &&\n this.manager.hasMore()\n ) {\n this.manager.loadNextPage();\n }\n }\n\n /**\n * @method effectiveControl\n * @description\n * Gets the effective FormControl associated with this component,\n * either from NgControl or the internal model.\n */\n get effectiveControl(): FormControl | null {\n return (this.ngControl?.control as FormControl) || null;\n }\n}\n","<p-floatlabel>\n <p-multiselect\n #pMultiselect\n [appendTo]=\"appendTo()\"\n [panelStyleClass]=\"panelStyleClass()\"\n optionLabel=\"name\"\n [id]=\"id()\"\n [options]=\"internalOptions()\"\n [(ngModel)]=\"model\"\n [display]=\"display()\"\n [maxSelectedLabels]=\"maxSelectedLabels()\"\n [selectedItemsLabel]=\"selectedItemsLabel()\"\n [emptyFilterMessage]=\"emptyFilterMessage()\"\n [filter]=\"filter()\"\n [filterPlaceHolder]=\"filterPlaceHolder()\"\n [styleClass]=\"styleClass()\"\n [loading]=\"loading() || (dataSource() ? manager.loading() : false)\"\n [disabled]=\"disabled() || internalDisabled()\"\n [emptyMessage]=\"emptyMessage()\"\n [class.ng-invalid]=\"\n effectiveControl?.invalid &&\n (effectiveControl?.dirty || effectiveControl?.touched)\n \"\n [class.ng-dirty]=\"effectiveControl?.dirty\"\n [class.ng-touched]=\"effectiveControl?.touched\"\n (onFilter)=\"handleFilter($event)\"\n (onChange)=\"handleChange($event)\"\n (onPanelShow)=\"onPanelShow()\"\n (onPanelHide)=\"onPanelHide()\"\n [resetFilterOnHide]=\"true\">\n\n <ng-template pTemplate=\"empty\">\n <div class=\"tk-select-empty-container\">\n <tk-icon icon=\"info\" size=\"2xl\"></tk-icon>\n <span>{{ emptyMessage() }}</span>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"emptyfilter\">\n <div class=\"tk-select-empty-container\">\n <tk-icon icon=\"magnifying-glass\" size=\"2xl\"></tk-icon>\n <span>{{ emptyFilterMessage() }}</span>\n </div>\n </ng-template>\n </p-multiselect>\n <label [for]=\"id()\">{{ labelText() }}</label>\n</p-floatlabel>\n\n<div class=\"tk-select-bottom\">\n <div class=\"tk-select-messages\">\n @if (\n effectiveControl?.invalid &&\n (effectiveControl?.dirty || effectiveControl?.touched) &&\n errorMessage()\n ) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tekus-design-system-components-multiselect.mjs","sources":["../../../projects/design-system/components/multiselect/src/multiselect.manager.ts","../../../projects/design-system/components/multiselect/src/multiselect.component.ts","../../../projects/design-system/components/multiselect/src/multiselect.component.html","../../../projects/design-system/components/multiselect/tekus-design-system-components-multiselect.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport {\n auditTime,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n map,\n Observable,\n of,\n scan,\n switchMap,\n tap,\n} from 'rxjs';\nimport { MultiSelectOption } from './multiselect.types';\n\n/**\n * Standard request object for fetching data from an asynchronous source.\n * Aligned with PrimeNG LazyLoadEvent patterns.\n */\nexport interface TkMultiSelectRequest {\n filter: string;\n page: number;\n pageSize: number;\n sortField?: string;\n sortOrder?: number;\n params?: Record<string, unknown>;\n}\n\n/**\n * Interface representing the data source for the Multiselect manager.\n */\nexport interface MultiSelectDataSource<T = MultiSelectOption> {\n fetch(request: TkMultiSelectRequest): Observable<T[]>;\n}\n\n@Injectable()\nexport class TkMultiSelectManager<T = MultiSelectOption> {\n /**\n * Reactive signal for the current search query.\n */\n searchQuery = signal<string>('');\n\n /**\n * Reactive signal for the current pagination page.\n */\n page = signal<number>(1);\n\n /**\n * Data source provider for fetching items.\n */\n public dataSource: MultiSelectDataSource<T> | undefined;\n\n /**\n * Additional parameters to send to the data source.\n */\n fetchParams = signal<Record<string, unknown>>({});\n\n /**\n * Sorting field.\n */\n sortField = signal<string | undefined>(undefined);\n\n /**\n * Sorting order (1 for ASC, -1 for DESC).\n */\n sortOrder = signal<number | undefined>(undefined);\n\n /**\n * Reactive signal indicating if data is currently being fetched.\n */\n loading = signal<boolean>(false);\n\n /**\n * Reactive signal indicating if there are more items to fetch.\n */\n hasMore = signal<boolean>(true);\n\n /**\n * Number of items per page to detect the end of data.\n */\n pageSize = 20;\n\n /**\n * Final accumulated list of items exposed as a Signal.\n */\n items = toSignal(\n combineLatest({\n filter: toObservable(this.searchQuery).pipe(debounceTime(200)),\n page: toObservable(this.page),\n params: toObservable(this.fetchParams),\n sortField: toObservable(this.sortField),\n sortOrder: toObservable(this.sortOrder),\n }).pipe(\n auditTime(0),\n distinctUntilChanged(\n (prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)\n ),\n map((data) => ({ ...data, pageSize: this.pageSize }) as TkMultiSelectRequest),\n tap((request) => {\n if (request.page === 1) {\n this.hasMore.set(true);\n }\n this.loading.set(true);\n }),\n switchMap(\n (request: TkMultiSelectRequest): Observable<{ results: T[]; page: number }> => {\n const fetcher$ = this.dataSource\n ? this.dataSource.fetch(request)\n : of([] as T[]);\n\n return fetcher$.pipe(\n tap((results) => {\n if (results.length < this.pageSize) {\n this.hasMore.set(false);\n }\n }),\n map((results) => ({ results, page: request.page })),\n tap(() => this.loading.set(false))\n );\n }\n ),\n scan((acc: T[], { results, page }: { results: T[]; page: number }) => {\n return page === 1 ? results : [...acc, ...results];\n }, [] as T[])\n ),\n { initialValue: [] as T[] }\n );\n\n /**\n * Updates the search query and resets pagination.\n * @param query - The new search string.\n */\n updateSearch(query: string): void {\n if (this.searchQuery() !== query) {\n this.searchQuery.set(query);\n this.page.set(1);\n this.hasMore.set(true);\n }\n }\n\n /**\n * Increments the page to trigger the next data chunk.\n */\n loadNextPage(): void {\n this.page.update((p) => p + 1);\n }\n\n /**\n * Configures the data provider for the manager.\n * @param provider - Object implementing the MultiSelectDataSource interface.\n */\n setDataSource(provider: MultiSelectDataSource<T>): void {\n this.dataSource = provider;\n }\n\n /**\n * Updates additional fetch parameters and resets pagination.\n * @param params - The new parameters object.\n */\n updateParams(params: Record<string, unknown>): void {\n if (JSON.stringify(this.fetchParams()) !== JSON.stringify(params)) {\n this.fetchParams.set(params);\n this.page.set(1);\n this.hasMore.set(true);\n }\n }\n\n /**\n * Resets the manager state to its initial values.\n */\n reset(): void {\n this.searchQuery.set('');\n this.page.set(1);\n this.hasMore.set(true);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n effect,\n OnDestroy,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { MultiSelect, MultiSelectModule } from 'primeng/multiselect';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { MultiSelectOption } from './multiselect.types';\nimport { MessageModule } from 'primeng/message';\nimport { IconComponent } from '@tekus/design-system/components/icon';\nimport { TkMultiSelectManager, MultiSelectDataSource } from './multiselect.manager';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'tk-multiselect',\n providers: [TkMultiSelectManager],\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MultiSelectModule,\n FloatLabelModule,\n MessageModule,\n IconComponent,\n ],\n templateUrl: './multiselect.component.html',\n styleUrl: './multiselect.component.scss',\n})\nexport class MultiselectComponent implements ControlValueAccessor, OnDestroy {\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n readonly manager = inject(TkMultiSelectManager<MultiSelectOption>);\n\n /** PrimeNG MultiSelect instance */\n readonly multiselectComponent = viewChild<MultiSelect>('pMultiselect');\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Synchronize parameters with the manager\n effect(() => {\n this.manager.updateParams(this.fetchParams());\n });\n\n effect(() => {\n this.manager.sortField.set(this.sortField());\n this.manager.sortOrder.set(this.sortOrder());\n });\n\n // Synchronize disabled state\n effect(() => {\n this.internalDisabled.set(this.disabled());\n });\n\n // Synchronize data source\n effect(() => {\n const source = this.dataSource();\n if (source) {\n this.manager.setDataSource(source);\n }\n });\n }\n\n /**\n * @property {Signal<MultiSelectOption[]>} selectionPool\n * @description\n * Internal signal to keep track of selected items even if they are filtered out from the main options list.\n */\n private readonly selectionPool = signal<MultiSelectOption[]>([]);\n\n /**\n * @property {ModelSignal<MultiSelectOption[] | null>} model\n * @description\n * The model signal for two-way binding.\n */\n readonly model = model<MultiSelectOption[] | null>([]);\n\n /**\n * Data source for asynchronous infinite scroll mode.\n */\n readonly dataSource = model<MultiSelectDataSource<MultiSelectOption>>();\n\n /**\n * @property {MultiSelectOption[]} options\n * @description\n * Array of available options shown in the multiselect dropdown.\n */\n options = input<MultiSelectOption[]>([]);\n\n /**\n * @property {string} labelText\n * @description\n * Label displayed above the multiselect input.\n *\n * @default 'Select'\n */\n labelText = input<string>('Select');\n\n /**\n * @property {string} display\n * @description\n * Display mode for selected items. Examples: 'chip', 'comma'.\n *\n * @default 'chip'\n */\n display = input<string>('chip');\n\n /**\n * @property {number} maxSelectedLabels\n * @description\n * Maximum number of labels shown when multiple items are selected.\n *\n * @default 4\n */\n maxSelectedLabels = input<number>(4);\n\n /**\n * @property {string} selectedItemsLabel\n * @description\n * Label template used when multiple items are selected (supports placeholders).\n *\n * @default '{0} elementos seleccionados'\n */\n selectedItemsLabel = input<string>('{0} elementos seleccionados');\n\n /**\n * @property {string} emptyFilterMessage\n * @description\n * Message displayed when the filter returns no results.\n *\n * @default 'No hay resultados'\n */\n emptyFilterMessage = input<string>('No hay resultados');\n\n /**\n * @property {boolean} filter\n * @description\n * Enables the search/filter input inside the multiselect dropdown.\n *\n * @default true\n */\n filter = input<boolean>(true);\n\n /**\n * @property {string} filterPlaceHolder\n * @description\n * Placeholder text for the filter input.\n */\n filterPlaceHolder = input<string>('');\n\n /**\n * Target element or selector to append the overlay panel to.\n * @default undefined\n */\n appendTo = input<string | HTMLElement | null | undefined>(undefined);\n\n /**\n * Custom style class to apply to the overlay panel.\n * @default undefined\n */\n panelStyleClass = input<string | undefined>(undefined);\n\n /**\n * @property {string} id\n * @description\n * HTML id attribute for the multiselect input.\n *\n * @default 'multiselect'\n */\n id = input<string>('multiselect');\n\n /**\n * @property {string} styleClass\n * @description\n * Additional CSS class applied to the multiselect container.\n */\n styleClass = input<string>('');\n\n /**\n * @property {InputSignal<string>} errorMessage\n * @description\n * Message to display when the control is invalid and touched.\n */\n errorMessage = input<string>('');\n\n /**\n * @property {InputSignal<string>} hint\n * @description\n * Hint text to display below the input.\n */\n hint = input<string>('');\n\n /**\n * Loading state for the dropdown.\n */\n loading = input<boolean>(false);\n\n /**\n * Text to display when there are no options.\n */\n emptyMessage = input<string>('No data available');\n\n /**\n * Additional parameters for the async data source.\n * Useful for sending context like categoryId, parentId, etc.\n */\n fetchParams = input<Record<string, unknown>>({});\n\n /**\n * Field name to sort by in the async data source.\n */\n sortField = input<string | undefined>(undefined);\n\n /**\n * Order to sort by (1 for ASC, -1 for DESC).\n */\n sortOrder = input<number | undefined>(undefined);\n\n /**\n * Determines whether the select field is disabled.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Internal writable signal for the disabled state.\n */\n readonly internalDisabled = signal<boolean>(false);\n\n /**\n * @event selectionChange\n * @description\n * Emits when the selected options change.\n * Payload: an array of selected MultiSelectOption or null.\n *\n * @example\n * <tk-multiselect (selectionChange)=\"onChange($event)\"></tk-multiselect>\n */\n selectionChange = output<MultiSelectOption[] | null>();\n\n /**\n * @event filterChange\n * @description\n * Emits the filter text when the user types in the search input.\n */\n readonly filterChange = output<string>();\n\n private readonly scrollHandler = this.handleScroll.bind(this);\n private lastListContainer: HTMLElement | null = null;\n\n /**\n * @property internalOptions\n * @description\n * Computed signal that merges the current options with the selected items pool\n * to ensure selected items are always visible.\n */\n readonly internalOptions = computed(() => {\n const currentFromParent = this.dataSource()\n ? (this.manager.items() as MultiSelectOption[])\n : this.options();\n const selected = this.selectionPool();\n\n const merged = [...selected, ...currentFromParent];\n const uniqueMap = new Map();\n\n merged.forEach((item) => {\n if (item) uniqueMap.set(item.code, item);\n });\n\n return Array.from(uniqueMap.values());\n });\n\n /**\n * @method handleFilter\n * @description\n * Handles the filter event from the PrimeNG component and emits the filter value.\n *\n * @param event - The filter event object.\n */\n handleFilter(event: { filter: string }) {\n const query = event.filter || '';\n if (this.dataSource()) {\n this.manager.updateSearch(query);\n }\n this.filterChange.emit(query);\n }\n\n /**\n * @callback onChange\n * @description\n * Callback function to notify the parent component of value changes.\n */\n onChange: (value: MultiSelectOption[] | null) => void = () => { };\n\n /**\n * @callback onTouched\n * @description\n * Callback function to notify the parent component when the control is touched.\n */\n onTouched: () => void = () => { };\n\n /**\n * @method handleChange\n * @description\n * Handler forwarded from the PrimeNG MultiSelect change event.\n * Emits the selectionChange output with the selected values.\n *\n * @param event - Change event containing the `value` property with selected items.\n */\n handleChange(event: { value: MultiSelectOption[] | null }): void {\n const val = event.value || [];\n this.model.set(val);\n this.updateSelectionPool(val);\n\n this.onChange(val);\n this.selectionChange.emit(val);\n\n if (this.effectiveControl) {\n this.effectiveControl.setValue(val);\n this.effectiveControl.markAsDirty();\n this.effectiveControl.markAsTouched();\n }\n }\n\n /**\n * @method updateSelectionPool\n * @description\n * Updates the internal selection pool to ensure selected items persist\n * even if they are filtered out from the main options list.\n *\n * @param items - The items to add to the pool.\n */\n private updateSelectionPool(items: MultiSelectOption[]) {\n this.selectionPool.update((prev) => {\n const combined = [...prev, ...items];\n const map = new Map();\n combined.forEach((i) => map.set(i.code, i));\n return Array.from(map.values());\n });\n }\n\n /**\n * @method writeValue\n * @description\n * Writes a new value to the element.\n * Part of the ControlValueAccessor interface.\n *\n * @param value - The new value.\n */\n writeValue(value: MultiSelectOption[] | null): void {\n this.model.set(value || []);\n if (value) this.updateSelectionPool(value);\n }\n\n /**\n * @method registerOnChange\n * @description\n * Registers a callback function that is called when the control's value changes in the UI.\n * Part of the ControlValueAccessor interface.\n *\n * @param fn - The callback function.\n */\n registerOnChange(fn: (value: MultiSelectOption[] | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @method registerOnTouched\n * @description\n * Registers a callback function that is called by the forms API on initialization to update the form control on 'blur'.\n * Part of the ControlValueAccessor interface.\n *\n * @param fn - The callback function.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Updates the disabled state of the control.\n * @param isDisabled - Whether the component should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.internalDisabled.set(isDisabled);\n }\n\n /**\n * Adds a scroll listener to the PrimeNG multiselect list container when the panel opens.\n */\n onPanelShow(): void {\n const listContainer = document.querySelector('.p-multiselect-list-container') as HTMLElement;\n if (listContainer) {\n this.lastListContainer = listContainer;\n listContainer.addEventListener('scroll', this.scrollHandler);\n }\n }\n\n /**\n * Cleans up state, removes listeners and resets the manager when the panel closes.\n */\n onPanelHide(): void {\n this.removeScrollListener();\n this.manager.reset();\n }\n\n /**\n * Cleans up listeners on component destruction.\n */\n ngOnDestroy(): void {\n this.removeScrollListener();\n }\n\n /**\n * Safely removes the scroll event listener.\n */\n private removeScrollListener(): void {\n if (this.lastListContainer) {\n this.lastListContainer.removeEventListener('scroll', this.scrollHandler);\n this.lastListContainer = null;\n }\n }\n\n /**\n * Detects if the user has reached the bottom of the list.\n */\n private handleScroll(event: Event): void {\n const target = event.target as HTMLElement;\n if (!target) return;\n\n // Trigger near the bottom (1px threshold)\n const atBottom =\n target.scrollHeight - target.scrollTop <= target.clientHeight + 1;\n\n if (\n atBottom &&\n this.manager.dataSource &&\n !this.manager.loading() &&\n this.manager.hasMore()\n ) {\n this.manager.loadNextPage();\n }\n }\n\n /**\n * @method effectiveControl\n * @description\n * Gets the effective FormControl associated with this component,\n * either from NgControl or the internal model.\n */\n get effectiveControl(): FormControl | null {\n return (this.ngControl?.control as FormControl) || null;\n }\n}\n","<p-floatlabel>\n <p-multiselect\n #pMultiselect\n [appendTo]=\"appendTo()\"\n [panelStyleClass]=\"panelStyleClass()\"\n optionLabel=\"name\"\n [id]=\"id()\"\n [options]=\"internalOptions()\"\n [(ngModel)]=\"model\"\n [display]=\"display()\"\n [maxSelectedLabels]=\"maxSelectedLabels()\"\n [selectedItemsLabel]=\"selectedItemsLabel()\"\n [emptyFilterMessage]=\"emptyFilterMessage()\"\n [filter]=\"filter()\"\n [filterPlaceHolder]=\"filterPlaceHolder()\"\n [styleClass]=\"styleClass()\"\n [loading]=\"loading() || (dataSource() ? manager.loading() : false)\"\n [disabled]=\"disabled() || internalDisabled()\"\n [emptyMessage]=\"emptyMessage()\"\n [class.ng-invalid]=\"\n effectiveControl?.invalid &&\n (effectiveControl?.dirty || effectiveControl?.touched)\n \"\n [class.ng-dirty]=\"effectiveControl?.dirty\"\n [class.ng-touched]=\"effectiveControl?.touched\"\n (onFilter)=\"handleFilter($event)\"\n (onChange)=\"handleChange($event)\"\n (onPanelShow)=\"onPanelShow()\"\n (onPanelHide)=\"onPanelHide()\"\n [resetFilterOnHide]=\"true\">\n\n <ng-template pTemplate=\"empty\">\n <div class=\"tk-select-empty-container\">\n <tk-icon icon=\"info\" size=\"2xl\"></tk-icon>\n <span>{{ emptyMessage() }}</span>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"emptyfilter\">\n <div class=\"tk-select-empty-container\">\n <tk-icon icon=\"magnifying-glass\" size=\"2xl\"></tk-icon>\n <span>{{ emptyFilterMessage() }}</span>\n </div>\n </ng-template>\n </p-multiselect>\n <label [for]=\"id()\">{{ labelText() }}</label>\n</p-floatlabel>\n\n<div class=\"tk-select-bottom\">\n <div class=\"tk-select-messages\">\n @if (\n effectiveControl?.invalid &&\n (effectiveControl?.dirty || effectiveControl?.touched) &&\n errorMessage()\n ) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -40,11 +40,11 @@ class PanelMenuComponent {
40
40
  return current === item;
41
41
  }
42
42
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: PanelMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: PanelMenuComponent, isStandalone: true, selector: "tk-panel-menu", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<div [class]=\"'tk-panel-menu ' + variant() + ' ' + styleClass()\">\n <p-panelmenu [model]=\"model()\" [multiple]=\"multiple()\">\n <ng-template pTemplate=\"item\" #item let-item>\n <button type=\"button\"\n class=\"tk-pm-item-link\" \n (click)=\"onItemClick($event, item)\" \n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n [class.tk-pm-item-selected]=\"isSelected(item)\">\n <div class=\"tk-pm-item-content\">\n @if (item.icon) {\n <tk-icon [icon]=\"item.icon\" class=\"tk-pm-item-icon\"></tk-icon>\n }\n <span class=\"tk-pm-item-label\">{{ item.label }}</span>\n </div>\n @if (item.items) {\n <tk-icon [icon]=\"item.expanded ? 'chevron-up' : 'chevron-down'\" class=\"tk-pm-item-chevron\"></tk-icon>\n }\n </button>\n </ng-template>\n </p-panelmenu>\n</div>\n", styles: [":host{display:block}:host ::ng-deep .tk-panel-menu{width:100%}:host ::ng-deep .tk-panel-menu .p-panelmenu{display:flex;flex-direction:column;gap:var(--tk-spacing-gap-s, .5rem)}:host ::ng-deep .tk-panel-menu .p-panelmenu-panel,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link.p-highlight{background:transparent!important;border-color:transparent!important;box-shadow:none!important;outline:none!important}:host ::ng-deep .tk-panel-menu .p-panelmenu-panel{border:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-header{border:none;background:transparent;border-radius:var(--tk-borderRadius-s, .5rem);outline:none;box-shadow:none;width:100%;display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-visible{outline:none;box-shadow:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-header[aria-expanded=true] .p-icon{transform:rotate(180deg)}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-icon{transition:transform .2s ease;flex-shrink:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-label{font-size:var(--tk-font-size-paragraph-m, 1rem);line-height:normal;flex:1}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-icon{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-content{border:none;background:transparent;padding:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-root-list,:host ::ng-deep .tk-panel-menu .p-panelmenu-submenu{padding:var(--tk-spacing-padding-xs, .25rem) 0;list-style:none;display:flex;flex-direction:column;gap:var(--tk-spacing-gap-xs, .25rem)}:host ::ng-deep .tk-panel-menu .p-panelmenu-item{outline:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content{background:transparent;border-radius:var(--tk-borderRadius-s, .5rem);overflow:hidden}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-focus{background:transparent;outline:none;box-shadow:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link{outline:none;border-radius:var(--tk-borderRadius-s, .5rem)}:host ::ng-deep .tk-panel-menu .tk-pm-item-link{display:flex;align-items:center;justify-content:space-between;padding:var(--tk-spacing-base-75, .75rem) 0;border-radius:var(--tk-borderRadius-s, .5rem);cursor:pointer;border:none;background:transparent;font-family:inherit;width:100%;text-align:left;transition:background-color .2s}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-content{display:flex;align-items:center;gap:var(--tk-spacing-base-75, .75rem)}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-chevron{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-chevron{transition:transform .2s ease}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-label{font-size:var(--tk-font-size-paragraph-m, 1rem);line-height:normal}:host ::ng-deep .tk-panel-menu .p-panelmenu-submenu .tk-pm-item-link{padding-left:var(--tk-spacing-base-300, 3rem)}:host ::ng-deep .tk-panel-menu.default .p-panelmenu-header{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .p-panelmenu-header .p-icon{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link:hover,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link:focus-visible,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link.tk-pm-item-selected{background-color:var(--tk-color-background-soft, #f2f1f1)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-chevron,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-label{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.inverse{background:var(--tk-color-background-inverse, #191a1b);border-radius:var(--tk-borderRadius-s, .5rem);padding:var(--tk-spacing-padding-s, .5rem)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-panel{background:transparent}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-header{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-header .p-icon{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-content{background:transparent}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link:hover,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link:focus-visible,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link.tk-pm-item-selected{background-color:var(--tk-color-background-bold, #424243)}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-chevron,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-label{color:var(--tk-color-text-inverse, #ffffff)}\n"], dependencies: [{ kind: "ngmodule", type: PanelMenuModule }, { kind: "component", type: i1.PanelMenu, selector: "p-panelMenu, p-panelmenu, p-panel-menu", inputs: ["model", "styleClass", "multiple", "transitionOptions", "motionOptions", "id", "tabindex"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: PanelMenuComponent, isStandalone: true, selector: "tk-panel-menu", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<div [class]=\"'tk-panel-menu ' + variant() + ' ' + styleClass()\">\n <p-panelmenu [model]=\"model()\" [multiple]=\"multiple()\">\n <ng-template pTemplate=\"item\" #item let-item>\n <button type=\"button\"\n class=\"tk-pm-item-link\" \n (click)=\"onItemClick($event, item)\" \n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n [class.tk-pm-item-selected]=\"isSelected(item)\">\n <div class=\"tk-pm-item-content\">\n @if (item.icon) {\n <tk-icon [icon]=\"item.icon\" class=\"tk-pm-item-icon\"></tk-icon>\n }\n <span class=\"tk-pm-item-label\">{{ item.label }}</span>\n </div>\n @if (item.items) {\n <tk-icon [icon]=\"item.expanded ? 'chevron-up' : 'chevron-down'\" class=\"tk-pm-item-chevron\"></tk-icon>\n }\n </button>\n </ng-template>\n </p-panelmenu>\n</div>\n", styles: [":host{display:block}:host ::ng-deep .tk-panel-menu{width:100%}:host ::ng-deep .tk-panel-menu .p-panelmenu{display:flex;flex-direction:column;gap:var(--tk-spacing-gap-s, .5rem)}:host ::ng-deep .tk-panel-menu .p-panelmenu-panel,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link.p-highlight{background:transparent!important;border-color:transparent!important;box-shadow:none!important;outline:none!important}:host ::ng-deep .tk-panel-menu .p-panelmenu-panel{border:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-header{border:none;background:transparent;border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem));outline:none;box-shadow:none;width:100%;display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-visible{outline:none;box-shadow:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-header[aria-expanded=true] .p-icon{transform:rotate(180deg)}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-icon{transition:transform .2s ease;flex-shrink:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-label{font-size:var(--tk-font-size-paragraph-m, 1rem);line-height:normal;flex:1}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-icon{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-content{border:none;background:transparent;padding:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-root-list,:host ::ng-deep .tk-panel-menu .p-panelmenu-submenu{padding:var(--tk-spacing-padding-xs, .25rem) 0;list-style:none;display:flex;flex-direction:column;gap:var(--tk-spacing-gap-xs, .25rem)}:host ::ng-deep .tk-panel-menu .p-panelmenu-item{outline:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content{background:transparent;border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem));overflow:hidden}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-focus{background:transparent;outline:none;box-shadow:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link{outline:none;border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem))}:host ::ng-deep .tk-panel-menu .tk-pm-item-link{display:flex;align-items:center;justify-content:space-between;padding:var(--tk-spacing-base-75, .75rem) 0;border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem));cursor:pointer;border:none;background:transparent;font-family:inherit;width:100%;text-align:left;transition:background-color .2s}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-content{display:flex;align-items:center;gap:var(--tk-spacing-base-75, .75rem)}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-chevron{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-chevron{transition:transform .2s ease}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-label{font-size:var(--tk-font-size-paragraph-m, 1rem);line-height:normal}:host ::ng-deep .tk-panel-menu .p-panelmenu-submenu .tk-pm-item-link{padding-left:var(--tk-spacing-base-300, 3rem)}:host ::ng-deep .tk-panel-menu.default .p-panelmenu-header{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .p-panelmenu-header .p-icon{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link:hover,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link:focus-visible,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link.tk-pm-item-selected{background-color:var(--tk-color-background-soft, #f2f1f1)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-chevron,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-label{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.inverse{background:var(--tk-color-background-inverse, #191a1b);border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem));padding:var(--tk-spacing-padding-s, .5rem)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-panel{background:transparent}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-header{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-header .p-icon{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-content{background:transparent}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link:hover,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link:focus-visible,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link.tk-pm-item-selected{background-color:var(--tk-color-background-bold, #424243)}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-chevron,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-label{color:var(--tk-color-text-inverse, #ffffff)}\n"], dependencies: [{ kind: "ngmodule", type: PanelMenuModule }, { kind: "component", type: i1.PanelMenu, selector: "p-panelMenu, p-panelmenu, p-panel-menu", inputs: ["model", "styleClass", "multiple", "transitionOptions", "motionOptions", "id", "tabindex"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
44
44
  }
45
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: PanelMenuComponent, decorators: [{
46
46
  type: Component,
47
- args: [{ selector: 'tk-panel-menu', imports: [PanelMenuModule, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'tk-panel-menu ' + variant() + ' ' + styleClass()\">\n <p-panelmenu [model]=\"model()\" [multiple]=\"multiple()\">\n <ng-template pTemplate=\"item\" #item let-item>\n <button type=\"button\"\n class=\"tk-pm-item-link\" \n (click)=\"onItemClick($event, item)\" \n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n [class.tk-pm-item-selected]=\"isSelected(item)\">\n <div class=\"tk-pm-item-content\">\n @if (item.icon) {\n <tk-icon [icon]=\"item.icon\" class=\"tk-pm-item-icon\"></tk-icon>\n }\n <span class=\"tk-pm-item-label\">{{ item.label }}</span>\n </div>\n @if (item.items) {\n <tk-icon [icon]=\"item.expanded ? 'chevron-up' : 'chevron-down'\" class=\"tk-pm-item-chevron\"></tk-icon>\n }\n </button>\n </ng-template>\n </p-panelmenu>\n</div>\n", styles: [":host{display:block}:host ::ng-deep .tk-panel-menu{width:100%}:host ::ng-deep .tk-panel-menu .p-panelmenu{display:flex;flex-direction:column;gap:var(--tk-spacing-gap-s, .5rem)}:host ::ng-deep .tk-panel-menu .p-panelmenu-panel,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link.p-highlight{background:transparent!important;border-color:transparent!important;box-shadow:none!important;outline:none!important}:host ::ng-deep .tk-panel-menu .p-panelmenu-panel{border:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-header{border:none;background:transparent;border-radius:var(--tk-borderRadius-s, .5rem);outline:none;box-shadow:none;width:100%;display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-visible{outline:none;box-shadow:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-header[aria-expanded=true] .p-icon{transform:rotate(180deg)}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-icon{transition:transform .2s ease;flex-shrink:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-label{font-size:var(--tk-font-size-paragraph-m, 1rem);line-height:normal;flex:1}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-icon{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-content{border:none;background:transparent;padding:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-root-list,:host ::ng-deep .tk-panel-menu .p-panelmenu-submenu{padding:var(--tk-spacing-padding-xs, .25rem) 0;list-style:none;display:flex;flex-direction:column;gap:var(--tk-spacing-gap-xs, .25rem)}:host ::ng-deep .tk-panel-menu .p-panelmenu-item{outline:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content{background:transparent;border-radius:var(--tk-borderRadius-s, .5rem);overflow:hidden}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-focus{background:transparent;outline:none;box-shadow:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link{outline:none;border-radius:var(--tk-borderRadius-s, .5rem)}:host ::ng-deep .tk-panel-menu .tk-pm-item-link{display:flex;align-items:center;justify-content:space-between;padding:var(--tk-spacing-base-75, .75rem) 0;border-radius:var(--tk-borderRadius-s, .5rem);cursor:pointer;border:none;background:transparent;font-family:inherit;width:100%;text-align:left;transition:background-color .2s}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-content{display:flex;align-items:center;gap:var(--tk-spacing-base-75, .75rem)}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-chevron{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-chevron{transition:transform .2s ease}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-label{font-size:var(--tk-font-size-paragraph-m, 1rem);line-height:normal}:host ::ng-deep .tk-panel-menu .p-panelmenu-submenu .tk-pm-item-link{padding-left:var(--tk-spacing-base-300, 3rem)}:host ::ng-deep .tk-panel-menu.default .p-panelmenu-header{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .p-panelmenu-header .p-icon{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link:hover,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link:focus-visible,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link.tk-pm-item-selected{background-color:var(--tk-color-background-soft, #f2f1f1)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-chevron,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-label{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.inverse{background:var(--tk-color-background-inverse, #191a1b);border-radius:var(--tk-borderRadius-s, .5rem);padding:var(--tk-spacing-padding-s, .5rem)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-panel{background:transparent}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-header{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-header .p-icon{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-content{background:transparent}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link:hover,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link:focus-visible,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link.tk-pm-item-selected{background-color:var(--tk-color-background-bold, #424243)}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-chevron,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-label{color:var(--tk-color-text-inverse, #ffffff)}\n"] }]
47
+ args: [{ selector: 'tk-panel-menu', imports: [PanelMenuModule, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'tk-panel-menu ' + variant() + ' ' + styleClass()\">\n <p-panelmenu [model]=\"model()\" [multiple]=\"multiple()\">\n <ng-template pTemplate=\"item\" #item let-item>\n <button type=\"button\"\n class=\"tk-pm-item-link\" \n (click)=\"onItemClick($event, item)\" \n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n [class.tk-pm-item-selected]=\"isSelected(item)\">\n <div class=\"tk-pm-item-content\">\n @if (item.icon) {\n <tk-icon [icon]=\"item.icon\" class=\"tk-pm-item-icon\"></tk-icon>\n }\n <span class=\"tk-pm-item-label\">{{ item.label }}</span>\n </div>\n @if (item.items) {\n <tk-icon [icon]=\"item.expanded ? 'chevron-up' : 'chevron-down'\" class=\"tk-pm-item-chevron\"></tk-icon>\n }\n </button>\n </ng-template>\n </p-panelmenu>\n</div>\n", styles: [":host{display:block}:host ::ng-deep .tk-panel-menu{width:100%}:host ::ng-deep .tk-panel-menu .p-panelmenu{display:flex;flex-direction:column;gap:var(--tk-spacing-gap-s, .5rem)}:host ::ng-deep .tk-panel-menu .p-panelmenu-panel,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-panel.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header-action.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link:focus-visible,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link.p-focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link.p-highlight{background:transparent!important;border-color:transparent!important;box-shadow:none!important;outline:none!important}:host ::ng-deep .tk-panel-menu .p-panelmenu-panel{border:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-header{border:none;background:transparent;border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem));outline:none;box-shadow:none;width:100%;display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-header:focus-visible{outline:none;box-shadow:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-header[aria-expanded=true] .p-icon{transform:rotate(180deg)}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-icon{transition:transform .2s ease;flex-shrink:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-label{font-size:var(--tk-font-size-paragraph-m, 1rem);line-height:normal;flex:1}:host ::ng-deep .tk-panel-menu .p-panelmenu-header .p-panelmenu-header-icon{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-content{border:none;background:transparent;padding:0}:host ::ng-deep .tk-panel-menu .p-panelmenu-root-list,:host ::ng-deep .tk-panel-menu .p-panelmenu-submenu{padding:var(--tk-spacing-padding-xs, .25rem) 0;list-style:none;display:flex;flex-direction:column;gap:var(--tk-spacing-gap-xs, .25rem)}:host ::ng-deep .tk-panel-menu .p-panelmenu-item{outline:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content{background:transparent;border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem));overflow:hidden}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:hover,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content:focus-within,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-highlight,:host ::ng-deep .tk-panel-menu .p-panelmenu-item-content.p-focus{background:transparent;outline:none;box-shadow:none}:host ::ng-deep .tk-panel-menu .p-panelmenu-item-link{outline:none;border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem))}:host ::ng-deep .tk-panel-menu .tk-pm-item-link{display:flex;align-items:center;justify-content:space-between;padding:var(--tk-spacing-base-75, .75rem) 0;border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem));cursor:pointer;border:none;background:transparent;font-family:inherit;width:100%;text-align:left;transition:background-color .2s}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-content{display:flex;align-items:center;gap:var(--tk-spacing-base-75, .75rem)}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-chevron{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-chevron{transition:transform .2s ease}:host ::ng-deep .tk-panel-menu .tk-pm-item-link .tk-pm-item-label{font-size:var(--tk-font-size-paragraph-m, 1rem);line-height:normal}:host ::ng-deep .tk-panel-menu .p-panelmenu-submenu .tk-pm-item-link{padding-left:var(--tk-spacing-base-300, 3rem)}:host ::ng-deep .tk-panel-menu.default .p-panelmenu-header{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .p-panelmenu-header .p-icon{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link:hover,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link:focus-visible,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link.tk-pm-item-selected{background-color:var(--tk-color-background-soft, #f2f1f1)}:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-chevron,:host ::ng-deep .tk-panel-menu.default .tk-pm-item-link .tk-pm-item-label{color:var(--tk-color-text-default, #191a1b)}:host ::ng-deep .tk-panel-menu.inverse{background:var(--tk-color-background-inverse, #191a1b);border-radius:var(--tk-borderRadius-theme-s, var(--tk-borderRadius-s, .5rem));padding:var(--tk-spacing-padding-s, .5rem)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-panel{background:transparent}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-header{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-header .p-icon{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .p-panelmenu-content{background:transparent}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link{color:var(--tk-color-text-inverse, #ffffff)}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link:hover,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link:focus-visible,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link.tk-pm-item-selected{background-color:var(--tk-color-background-bold, #424243)}:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-icon,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-chevron,:host ::ng-deep .tk-panel-menu.inverse .tk-pm-item-link .tk-pm-item-label{color:var(--tk-color-text-inverse, #ffffff)}\n"] }]
48
48
  }], propDecorators: { model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
49
49
 
50
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-panel-menu.mjs","sources":["../../../projects/design-system/components/panel-menu/src/panel-menu.component.ts","../../../projects/design-system/components/panel-menu/src/panel-menu.component.html","../../../projects/design-system/components/panel-menu/tekus-design-system-components-panel-menu.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { PanelMenuModule } from 'primeng/panelmenu';\nimport { MenuItem } from 'primeng/api';\nimport { IconComponent } from '@tekus/design-system/components/icon';\n\n@Component({\n selector: 'tk-panel-menu',\n imports: [PanelMenuModule, IconComponent],\n templateUrl: './panel-menu.component.html',\n styleUrl: './panel-menu.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PanelMenuComponent {\n model = input<MenuItem[]>([]);\n\n variant = input<'default' | 'inverse'>('default');\n\n multiple = input<boolean>(false);\n\n styleClass = input<string>('');\n\n itemClick = output<{ event: Event; item: MenuItem }>();\n\n selectedItem = signal<MenuItem | null>(null);\n\n onItemClick(event: Event, item: MenuItem) {\n if (item.disabled) {\n return;\n }\n\n if (!item.items) {\n this.selectedItem.set(item);\n\n if (item.command) {\n item.command({ originalEvent: event, item });\n }\n\n this.itemClick.emit({ event, item });\n event.stopPropagation();\n }\n }\n\n isSelected(item: MenuItem): boolean {\n if (item.items) return false;\n const current = this.selectedItem();\n if (!current) return false;\n \n // Match by ID if both have it, otherwise fallback to object reference\n if (current.id && item.id) {\n return current.id === item.id;\n }\n return current === item;\n }\n}\n","<div [class]=\"'tk-panel-menu ' + variant() + ' ' + styleClass()\">\n <p-panelmenu [model]=\"model()\" [multiple]=\"multiple()\">\n <ng-template pTemplate=\"item\" #item let-item>\n <button type=\"button\"\n class=\"tk-pm-item-link\" \n (click)=\"onItemClick($event, item)\" \n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n [class.tk-pm-item-selected]=\"isSelected(item)\">\n <div class=\"tk-pm-item-content\">\n @if (item.icon) {\n <tk-icon [icon]=\"item.icon\" class=\"tk-pm-item-icon\"></tk-icon>\n }\n <span class=\"tk-pm-item-label\">{{ item.label }}</span>\n </div>\n @if (item.items) {\n <tk-icon [icon]=\"item.expanded ? 'chevron-up' : 'chevron-down'\" class=\"tk-pm-item-chevron\"></tk-icon>\n }\n </button>\n </ng-template>\n </p-panelmenu>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tekus-design-system-components-panel-menu.mjs","sources":["../../../projects/design-system/components/panel-menu/src/panel-menu.component.ts","../../../projects/design-system/components/panel-menu/src/panel-menu.component.html","../../../projects/design-system/components/panel-menu/tekus-design-system-components-panel-menu.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { PanelMenuModule } from 'primeng/panelmenu';\nimport { MenuItem } from 'primeng/api';\nimport { IconComponent } from '@tekus/design-system/components/icon';\n\n@Component({\n selector: 'tk-panel-menu',\n imports: [PanelMenuModule, IconComponent],\n templateUrl: './panel-menu.component.html',\n styleUrl: './panel-menu.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PanelMenuComponent {\n model = input<MenuItem[]>([]);\n\n variant = input<'default' | 'inverse'>('default');\n\n multiple = input<boolean>(false);\n\n styleClass = input<string>('');\n\n itemClick = output<{ event: Event; item: MenuItem }>();\n\n selectedItem = signal<MenuItem | null>(null);\n\n onItemClick(event: Event, item: MenuItem) {\n if (item.disabled) {\n return;\n }\n\n if (!item.items) {\n this.selectedItem.set(item);\n\n if (item.command) {\n item.command({ originalEvent: event, item });\n }\n\n this.itemClick.emit({ event, item });\n event.stopPropagation();\n }\n }\n\n isSelected(item: MenuItem): boolean {\n if (item.items) return false;\n const current = this.selectedItem();\n if (!current) return false;\n \n // Match by ID if both have it, otherwise fallback to object reference\n if (current.id && item.id) {\n return current.id === item.id;\n }\n return current === item;\n }\n}\n","<div [class]=\"'tk-panel-menu ' + variant() + ' ' + styleClass()\">\n <p-panelmenu [model]=\"model()\" [multiple]=\"multiple()\">\n <ng-template pTemplate=\"item\" #item let-item>\n <button type=\"button\"\n class=\"tk-pm-item-link\" \n (click)=\"onItemClick($event, item)\" \n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n [class.tk-pm-item-selected]=\"isSelected(item)\">\n <div class=\"tk-pm-item-content\">\n @if (item.icon) {\n <tk-icon [icon]=\"item.icon\" class=\"tk-pm-item-icon\"></tk-icon>\n }\n <span class=\"tk-pm-item-label\">{{ item.label }}</span>\n </div>\n @if (item.items) {\n <tk-icon [icon]=\"item.expanded ? 'chevron-up' : 'chevron-down'\" class=\"tk-pm-item-chevron\"></tk-icon>\n }\n </button>\n </ng-template>\n </p-panelmenu>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -59,6 +59,12 @@ class RadioButtonComponent {
59
59
  * Message to display when the control is invalid and touched.
60
60
  */
61
61
  this.errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
62
+ /**
63
+ * @property {InputSignal<string>} hint
64
+ * @description
65
+ * Hint text to display below the radio button when there is no error.
66
+ */
67
+ this.hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
62
68
  /**
63
69
  * @property {ModelSignal<boolean>} disabled
64
70
  * @description
@@ -150,7 +156,7 @@ class RadioButtonComponent {
150
156
  this.effectiveControl.markAsTouched();
151
157
  }
152
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: RadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: RadioButtonComponent, isStandalone: true, selector: "tk-radio-button", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { model: "modelChange", disabled: "disabledChange" }, ngImport: i0, template: "<div class=\"tk-radio-button-wrapper\">\n <div class=\"tk-radio-button-group\" [class.tk-disabled]=\"disabled()\">\n <p-radioButton\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n [class.ng-invalid]=\"effectiveControl.invalid\"\n [class.ng-dirty]=\"effectiveControl.dirty\"\n [class.ng-touched]=\"effectiveControl.touched\">\n </p-radioButton>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-radio-button-label\">\n {{ label() }}\n </label>\n }\n </div>\n\n @if (\n effectiveControl.invalid &&\n (effectiveControl.dirty || effectiveControl.touched) &&\n errorMessage()\n ) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n </div>\n </div>\n }\n</div>\n", styles: [":host ::ng-deep .tk-radio-button-wrapper{display:flex;flex-direction:column}:host ::ng-deep .tk-radio-button-wrapper label{font-size:var(--tk-font-size-paragraph-s, .875rem);font-weight:var(--tk-font-weight-400, \"Regular\")}:host ::ng-deep .tk-radio-button-group{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}:host ::ng-deep .tk-radio-button-group.tk-disabled label{color:var(--tk-color-base-surface-600, #424243)}:host ::ng-deep .tk-radio-button-label{margin-top:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:.25rem;min-height:1.25rem}:host ::ng-deep .tk-input-messages{flex:1;margin-right:1rem}:host ::ng-deep .p-radiobutton.p-disabled .p-radiobutton-box{border-color:var(--tk-color-base-surface-300, #d2d2d2);background-color:var(--tk-color-base-surface-100, #fcfcfc)}:host ::ng-deep .p-radiobutton.p-disabled .p-radiobutton-box .p-radiobutton-icon{background-color:var(--tk-color-base-surface-300, #d2d2d2)}:host ::ng-deep p-radiobutton.ng-invalid.ng-touched .p-radiobutton-box,:host ::ng-deep p-radiobutton.ng-invalid.ng-dirty .p-radiobutton-box{border-color:var(--tk-color-base-red-700, #cf2604)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "component", type: i2.RadioButton, selector: "p-radioButton, p-radiobutton, p-radio-button", inputs: ["value", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "styleClass", "autofocus", "binary", "variant", "size"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i3.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant", "motionOptions"], outputs: ["onClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: RadioButtonComponent, isStandalone: true, selector: "tk-radio-button", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { model: "modelChange", disabled: "disabledChange" }, ngImport: i0, template: "<div class=\"tk-radio-button-wrapper\">\n <div class=\"tk-radio-button-group\" [class.tk-disabled]=\"disabled()\">\n <p-radioButton\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n [class.ng-invalid]=\"effectiveControl.invalid\"\n [class.ng-dirty]=\"effectiveControl.dirty\"\n [class.ng-touched]=\"effectiveControl.touched\">\n </p-radioButton>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-radio-button-label\">\n {{ label() }}\n </label>\n }\n </div>\n\n @let showError =\n effectiveControl.invalid &&\n (effectiveControl.dirty || effectiveControl.touched) &&\n errorMessage();\n @if (showError || hint()) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{display:inline-block}:host ::ng-deep .tk-radio-button-wrapper{display:flex;flex-direction:column}:host ::ng-deep .tk-radio-button-wrapper label{font-size:var(--tk-font-size-paragraph-s, .875rem);font-weight:var(--tk-font-weight-400, \"Regular\")}:host ::ng-deep .tk-radio-button-group{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}:host ::ng-deep .tk-radio-button-group.tk-disabled label{color:var(--tk-color-base-surface-600, #424243)}:host ::ng-deep .tk-radio-button-label{margin-top:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep p-message[severity=secondary] .p-inline-message-text,:host ::ng-deep p-message[severity=secondary] span{color:var(--tk-color-base-surface-600, #5d5d5e)}:host ::ng-deep .tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:var(--tk-spacing-base-25, .25rem);min-height:var(--tk-spacing-base-125, 1.25rem)}:host ::ng-deep .tk-input-messages{flex:1;margin-right:var(--tk-spacing-base-100, 1rem)}:host ::ng-deep .p-radiobutton.p-disabled .p-radiobutton-box{border-color:var(--tk-color-base-surface-300, #d2d2d2);background-color:var(--tk-color-base-surface-100, #fcfcfc)}:host ::ng-deep .p-radiobutton.p-disabled .p-radiobutton-box .p-radiobutton-icon{background-color:var(--tk-color-base-surface-300, #d2d2d2)}:host ::ng-deep p-radiobutton.ng-invalid.ng-touched .p-radiobutton-box,:host ::ng-deep p-radiobutton.ng-invalid.ng-dirty .p-radiobutton-box{border-color:var(--tk-color-base-red-700, #cf2604)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "component", type: i2.RadioButton, selector: "p-radioButton, p-radiobutton, p-radio-button", inputs: ["value", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "styleClass", "autofocus", "binary", "variant", "size"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i3.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant", "motionOptions"], outputs: ["onClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
160
  }
155
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: RadioButtonComponent, decorators: [{
156
162
  type: Component,
@@ -159,8 +165,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
159
165
  FormsModule,
160
166
  RadioButtonModule,
161
167
  MessageModule,
162
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tk-radio-button-wrapper\">\n <div class=\"tk-radio-button-group\" [class.tk-disabled]=\"disabled()\">\n <p-radioButton\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n [class.ng-invalid]=\"effectiveControl.invalid\"\n [class.ng-dirty]=\"effectiveControl.dirty\"\n [class.ng-touched]=\"effectiveControl.touched\">\n </p-radioButton>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-radio-button-label\">\n {{ label() }}\n </label>\n }\n </div>\n\n @if (\n effectiveControl.invalid &&\n (effectiveControl.dirty || effectiveControl.touched) &&\n errorMessage()\n ) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n </div>\n </div>\n }\n</div>\n", styles: [":host ::ng-deep .tk-radio-button-wrapper{display:flex;flex-direction:column}:host ::ng-deep .tk-radio-button-wrapper label{font-size:var(--tk-font-size-paragraph-s, .875rem);font-weight:var(--tk-font-weight-400, \"Regular\")}:host ::ng-deep .tk-radio-button-group{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}:host ::ng-deep .tk-radio-button-group.tk-disabled label{color:var(--tk-color-base-surface-600, #424243)}:host ::ng-deep .tk-radio-button-label{margin-top:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:.25rem;min-height:1.25rem}:host ::ng-deep .tk-input-messages{flex:1;margin-right:1rem}:host ::ng-deep .p-radiobutton.p-disabled .p-radiobutton-box{border-color:var(--tk-color-base-surface-300, #d2d2d2);background-color:var(--tk-color-base-surface-100, #fcfcfc)}:host ::ng-deep .p-radiobutton.p-disabled .p-radiobutton-box .p-radiobutton-icon{background-color:var(--tk-color-base-surface-300, #d2d2d2)}:host ::ng-deep p-radiobutton.ng-invalid.ng-touched .p-radiobutton-box,:host ::ng-deep p-radiobutton.ng-invalid.ng-dirty .p-radiobutton-box{border-color:var(--tk-color-base-red-700, #cf2604)}\n"] }]
163
- }], ctorParameters: () => [], propDecorators: { model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: false }] }, { type: i0.Output, args: ["modelChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }] } });
168
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tk-radio-button-wrapper\">\n <div class=\"tk-radio-button-group\" [class.tk-disabled]=\"disabled()\">\n <p-radioButton\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n [class.ng-invalid]=\"effectiveControl.invalid\"\n [class.ng-dirty]=\"effectiveControl.dirty\"\n [class.ng-touched]=\"effectiveControl.touched\">\n </p-radioButton>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-radio-button-label\">\n {{ label() }}\n </label>\n }\n </div>\n\n @let showError =\n effectiveControl.invalid &&\n (effectiveControl.dirty || effectiveControl.touched) &&\n errorMessage();\n @if (showError || hint()) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host{display:inline-block}:host ::ng-deep .tk-radio-button-wrapper{display:flex;flex-direction:column}:host ::ng-deep .tk-radio-button-wrapper label{font-size:var(--tk-font-size-paragraph-s, .875rem);font-weight:var(--tk-font-weight-400, \"Regular\")}:host ::ng-deep .tk-radio-button-group{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}:host ::ng-deep .tk-radio-button-group.tk-disabled label{color:var(--tk-color-base-surface-600, #424243)}:host ::ng-deep .tk-radio-button-label{margin-top:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep p-message[severity=secondary] .p-inline-message-text,:host ::ng-deep p-message[severity=secondary] span{color:var(--tk-color-base-surface-600, #5d5d5e)}:host ::ng-deep .tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:var(--tk-spacing-base-25, .25rem);min-height:var(--tk-spacing-base-125, 1.25rem)}:host ::ng-deep .tk-input-messages{flex:1;margin-right:var(--tk-spacing-base-100, 1rem)}:host ::ng-deep .p-radiobutton.p-disabled .p-radiobutton-box{border-color:var(--tk-color-base-surface-300, #d2d2d2);background-color:var(--tk-color-base-surface-100, #fcfcfc)}:host ::ng-deep .p-radiobutton.p-disabled .p-radiobutton-box .p-radiobutton-icon{background-color:var(--tk-color-base-surface-300, #d2d2d2)}:host ::ng-deep p-radiobutton.ng-invalid.ng-touched .p-radiobutton-box,:host ::ng-deep p-radiobutton.ng-invalid.ng-dirty .p-radiobutton-box{border-color:var(--tk-color-base-red-700, #cf2604)}\n"] }]
169
+ }], ctorParameters: () => [], propDecorators: { model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: false }] }, { type: i0.Output, args: ["modelChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }] } });
164
170
 
165
171
  /**
166
172
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-radio-button.mjs","sources":["../../../projects/design-system/components/radio-button/src/radio-button.component.ts","../../../projects/design-system/components/radio-button/src/radio-button.component.html","../../../projects/design-system/components/radio-button/tekus-design-system-components-radio-button.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n input,\n model,\n OnInit,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormControl,\n ReactiveFormsModule,\n NgControl,\n FormsModule,\n} from '@angular/forms';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'tk-radio-button',\n imports: [\n ReactiveFormsModule,\n FormsModule,\n RadioButtonModule,\n MessageModule,\n ],\n templateUrl: './radio-button.component.html',\n styleUrl: './radio-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioButtonComponent\n implements ControlValueAccessor, OnInit\n{\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * Initialize the component and register it as a ControlValueAccessor.\n */\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * @property {ModelSignal<any>} model\n * @description\n * The value of the radio button model (checked state).\n * Supports two-way binding via signals.\n */\n model = model<unknown>();\n\n /**\n * @property {InputSignal<any>} value\n * @description\n * The value of the radio button itself (used when part of a group).\n */\n value = input<unknown>();\n\n /**\n * @property {InputSignal<string>} label\n * @description\n * Label displayed next to the radio button.\n */\n label = input<string>('');\n\n /**\n * @property {InputSignal<string>} name\n * @description\n * Name attribute for the radio button.\n */\n name = input<string>('');\n\n /**\n * @property {InputSignal<string>} inputId\n * @description\n * HTML id attribute for the radio button input.\n */\n inputId = input<string>('');\n\n /**\n * @property {InputSignal<FormControl>} control\n * @description\n * External FormControl used to read/set the radio button value.\n * If not provided, an internal FormControl is created.\n */\n control = input<FormControl>(new FormControl());\n\n /**\n * @property {InputSignal<string>} errorMessage\n * @description\n * Message to display when the control is invalid and touched.\n */\n errorMessage = input<string>('');\n\n /**\n * @property {ModelSignal<boolean>} disabled\n * @description\n * Whether the radio button is disabled.\n */\n disabled = model<boolean>(false);\n\n /**\n * Returns the control currently in use, either from NgControl or the standalone Input.\n */\n get effectiveControl(): FormControl {\n return (this.ngControl?.control as FormControl) || this.control();\n }\n\n onChange: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n\n /**\n * Configure synchronization between the form control and component state.\n */\n ngOnInit(): void {\n const control = this.effectiveControl;\n\n if (control.value !== undefined && control.value !== null) {\n this.model.set(control.value);\n }\n\n if (this.control() === control && this.disabled()) {\n control.disable({ emitEvent: false });\n } else {\n this.disabled.set(control.disabled);\n }\n\n control.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.disabled.set(control.disabled);\n });\n\n control.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(value => {\n this.model.set(value);\n });\n }\n\n /**\n * Implementation of ControlValueAccessor: Writes a new value from the form.\n */\n writeValue(value: unknown): void {\n this.model.set(value);\n }\n\n /**\n * Implementation of ControlValueAccessor: Registers a callback for change events.\n */\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Implementation of ControlValueAccessor: Registers a callback for touched events.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Implementation of ControlValueAccessor: Sets the disabled state.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n if (isDisabled) {\n this.control().disable();\n } else {\n this.control().enable();\n }\n }\n\n /**\n * Handle model change events from the template.\n */\n onModelChange(value: unknown): void {\n this.model.set(value);\n this.onChange(value);\n this.effectiveControl.setValue(value);\n this.effectiveControl.markAsDirty();\n this.onTouched();\n }\n\n /**\n * Handle blur events to trigger onTouched.\n */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl.markAsTouched();\n }\n}\n","<div class=\"tk-radio-button-wrapper\">\n <div class=\"tk-radio-button-group\" [class.tk-disabled]=\"disabled()\">\n <p-radioButton\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n [class.ng-invalid]=\"effectiveControl.invalid\"\n [class.ng-dirty]=\"effectiveControl.dirty\"\n [class.ng-touched]=\"effectiveControl.touched\">\n </p-radioButton>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-radio-button-label\">\n {{ label() }}\n </label>\n }\n </div>\n\n @if (\n effectiveControl.invalid &&\n (effectiveControl.dirty || effectiveControl.touched) &&\n errorMessage()\n ) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tekus-design-system-components-radio-button.mjs","sources":["../../../projects/design-system/components/radio-button/src/radio-button.component.ts","../../../projects/design-system/components/radio-button/src/radio-button.component.html","../../../projects/design-system/components/radio-button/tekus-design-system-components-radio-button.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n input,\n model,\n OnInit,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormControl,\n ReactiveFormsModule,\n NgControl,\n FormsModule,\n} from '@angular/forms';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'tk-radio-button',\n imports: [\n ReactiveFormsModule,\n FormsModule,\n RadioButtonModule,\n MessageModule,\n ],\n templateUrl: './radio-button.component.html',\n styleUrl: './radio-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioButtonComponent\n implements ControlValueAccessor, OnInit\n{\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * Initialize the component and register it as a ControlValueAccessor.\n */\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * @property {ModelSignal<any>} model\n * @description\n * The value of the radio button model (checked state).\n * Supports two-way binding via signals.\n */\n model = model<unknown>();\n\n /**\n * @property {InputSignal<any>} value\n * @description\n * The value of the radio button itself (used when part of a group).\n */\n value = input<unknown>();\n\n /**\n * @property {InputSignal<string>} label\n * @description\n * Label displayed next to the radio button.\n */\n label = input<string>('');\n\n /**\n * @property {InputSignal<string>} name\n * @description\n * Name attribute for the radio button.\n */\n name = input<string>('');\n\n /**\n * @property {InputSignal<string>} inputId\n * @description\n * HTML id attribute for the radio button input.\n */\n inputId = input<string>('');\n\n /**\n * @property {InputSignal<FormControl>} control\n * @description\n * External FormControl used to read/set the radio button value.\n * If not provided, an internal FormControl is created.\n */\n control = input<FormControl>(new FormControl());\n\n /**\n * @property {InputSignal<string>} errorMessage\n * @description\n * Message to display when the control is invalid and touched.\n */\n errorMessage = input<string>('');\n\n /**\n * @property {InputSignal<string>} hint\n * @description\n * Hint text to display below the radio button when there is no error.\n */\n hint = input<string>('');\n\n /**\n * @property {ModelSignal<boolean>} disabled\n * @description\n * Whether the radio button is disabled.\n */\n disabled = model<boolean>(false);\n\n /**\n * Returns the control currently in use, either from NgControl or the standalone Input.\n */\n get effectiveControl(): FormControl {\n return (this.ngControl?.control as FormControl) || this.control();\n }\n\n onChange: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n\n /**\n * Configure synchronization between the form control and component state.\n */\n ngOnInit(): void {\n const control = this.effectiveControl;\n\n if (control.value !== undefined && control.value !== null) {\n this.model.set(control.value);\n }\n\n if (this.control() === control && this.disabled()) {\n control.disable({ emitEvent: false });\n } else {\n this.disabled.set(control.disabled);\n }\n\n control.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.disabled.set(control.disabled);\n });\n\n control.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(value => {\n this.model.set(value);\n });\n }\n\n /**\n * Implementation of ControlValueAccessor: Writes a new value from the form.\n */\n writeValue(value: unknown): void {\n this.model.set(value);\n }\n\n /**\n * Implementation of ControlValueAccessor: Registers a callback for change events.\n */\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Implementation of ControlValueAccessor: Registers a callback for touched events.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Implementation of ControlValueAccessor: Sets the disabled state.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n if (isDisabled) {\n this.control().disable();\n } else {\n this.control().enable();\n }\n }\n\n /**\n * Handle model change events from the template.\n */\n onModelChange(value: unknown): void {\n this.model.set(value);\n this.onChange(value);\n this.effectiveControl.setValue(value);\n this.effectiveControl.markAsDirty();\n this.onTouched();\n }\n\n /**\n * Handle blur events to trigger onTouched.\n */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl.markAsTouched();\n }\n}\n","<div class=\"tk-radio-button-wrapper\">\n <div class=\"tk-radio-button-group\" [class.tk-disabled]=\"disabled()\">\n <p-radioButton\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n [class.ng-invalid]=\"effectiveControl.invalid\"\n [class.ng-dirty]=\"effectiveControl.dirty\"\n [class.ng-touched]=\"effectiveControl.touched\">\n </p-radioButton>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-radio-button-label\">\n {{ label() }}\n </label>\n }\n </div>\n\n @let showError =\n effectiveControl.invalid &&\n (effectiveControl.dirty || effectiveControl.touched) &&\n errorMessage();\n @if (showError || hint()) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}