@tekus/design-system 5.33.0 → 5.33.1

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 (87) hide show
  1. package/fesm2022/tekus-design-system-components-action-group.mjs +3 -3
  2. package/fesm2022/tekus-design-system-components-action-group.mjs.map +1 -1
  3. package/fesm2022/tekus-design-system-components-autocomplete.mjs +3 -3
  4. package/fesm2022/tekus-design-system-components-autocomplete.mjs.map +1 -1
  5. package/fesm2022/tekus-design-system-components-badge.mjs +3 -3
  6. package/fesm2022/tekus-design-system-components-badge.mjs.map +1 -1
  7. package/fesm2022/tekus-design-system-components-bread-crumps.mjs +3 -3
  8. package/fesm2022/tekus-design-system-components-bread-crumps.mjs.map +1 -1
  9. package/fesm2022/tekus-design-system-components-button.mjs +3 -3
  10. package/fesm2022/tekus-design-system-components-button.mjs.map +1 -1
  11. package/fesm2022/tekus-design-system-components-card-list.mjs +3 -3
  12. package/fesm2022/tekus-design-system-components-card-list.mjs.map +1 -1
  13. package/fesm2022/tekus-design-system-components-card.mjs +3 -3
  14. package/fesm2022/tekus-design-system-components-card.mjs.map +1 -1
  15. package/fesm2022/tekus-design-system-components-checkbox.mjs +3 -3
  16. package/fesm2022/tekus-design-system-components-checkbox.mjs.map +1 -1
  17. package/fesm2022/tekus-design-system-components-color-picker.mjs +9 -9
  18. package/fesm2022/tekus-design-system-components-color-picker.mjs.map +1 -1
  19. package/fesm2022/tekus-design-system-components-date-picker.mjs +3 -3
  20. package/fesm2022/tekus-design-system-components-date-picker.mjs.map +1 -1
  21. package/fesm2022/tekus-design-system-components-drawer.mjs +6 -6
  22. package/fesm2022/tekus-design-system-components-drawer.mjs.map +1 -1
  23. package/fesm2022/tekus-design-system-components-dropdown.mjs +3 -3
  24. package/fesm2022/tekus-design-system-components-dropdown.mjs.map +1 -1
  25. package/fesm2022/tekus-design-system-components-fallback-view.mjs +3 -3
  26. package/fesm2022/tekus-design-system-components-fallback-view.mjs.map +1 -1
  27. package/fesm2022/tekus-design-system-components-icon.mjs +3 -3
  28. package/fesm2022/tekus-design-system-components-icon.mjs.map +1 -1
  29. package/fesm2022/tekus-design-system-components-input-number.mjs +3 -3
  30. package/fesm2022/tekus-design-system-components-input-number.mjs.map +1 -1
  31. package/fesm2022/tekus-design-system-components-input-text.mjs +3 -3
  32. package/fesm2022/tekus-design-system-components-input-text.mjs.map +1 -1
  33. package/fesm2022/tekus-design-system-components-menu.mjs +3 -3
  34. package/fesm2022/tekus-design-system-components-menu.mjs.map +1 -1
  35. package/fesm2022/tekus-design-system-components-message.mjs +3 -3
  36. package/fesm2022/tekus-design-system-components-message.mjs.map +1 -1
  37. package/fesm2022/tekus-design-system-components-modal.mjs +6 -6
  38. package/fesm2022/tekus-design-system-components-modal.mjs.map +1 -1
  39. package/fesm2022/tekus-design-system-components-multiselect.mjs +6 -6
  40. package/fesm2022/tekus-design-system-components-multiselect.mjs.map +1 -1
  41. package/fesm2022/tekus-design-system-components-pagination.mjs +3 -3
  42. package/fesm2022/tekus-design-system-components-pagination.mjs.map +1 -1
  43. package/fesm2022/tekus-design-system-components-panel-menu.mjs +3 -3
  44. package/fesm2022/tekus-design-system-components-panel-menu.mjs.map +1 -1
  45. package/fesm2022/tekus-design-system-components-panel.mjs +3 -3
  46. package/fesm2022/tekus-design-system-components-panel.mjs.map +1 -1
  47. package/fesm2022/tekus-design-system-components-progress-bar.mjs +3 -3
  48. package/fesm2022/tekus-design-system-components-progress-bar.mjs.map +1 -1
  49. package/fesm2022/tekus-design-system-components-radio-button.mjs +3 -3
  50. package/fesm2022/tekus-design-system-components-radio-button.mjs.map +1 -1
  51. package/fesm2022/tekus-design-system-components-select.mjs +9 -9
  52. package/fesm2022/tekus-design-system-components-select.mjs.map +1 -1
  53. package/fesm2022/tekus-design-system-components-sidebar-layout.mjs +6 -6
  54. package/fesm2022/tekus-design-system-components-sidebar-layout.mjs.map +1 -1
  55. package/fesm2022/tekus-design-system-components-status-bar.mjs +3 -3
  56. package/fesm2022/tekus-design-system-components-status-bar.mjs.map +1 -1
  57. package/fesm2022/tekus-design-system-components-stepper.mjs +3 -3
  58. package/fesm2022/tekus-design-system-components-stepper.mjs.map +1 -1
  59. package/fesm2022/tekus-design-system-components-table.mjs +3 -3
  60. package/fesm2022/tekus-design-system-components-table.mjs.map +1 -1
  61. package/fesm2022/tekus-design-system-components-tabs.mjs +3 -3
  62. package/fesm2022/tekus-design-system-components-tabs.mjs.map +1 -1
  63. package/fesm2022/tekus-design-system-components-tag.mjs +3 -3
  64. package/fesm2022/tekus-design-system-components-tag.mjs.map +1 -1
  65. package/fesm2022/tekus-design-system-components-textarea.mjs +3 -3
  66. package/fesm2022/tekus-design-system-components-textarea.mjs.map +1 -1
  67. package/fesm2022/tekus-design-system-components-time-ago.mjs +3 -3
  68. package/fesm2022/tekus-design-system-components-time-ago.mjs.map +1 -1
  69. package/fesm2022/tekus-design-system-components-time-picker.mjs +3 -3
  70. package/fesm2022/tekus-design-system-components-time-picker.mjs.map +1 -1
  71. package/fesm2022/tekus-design-system-components-toast.mjs +3 -3
  72. package/fesm2022/tekus-design-system-components-toast.mjs.map +1 -1
  73. package/fesm2022/tekus-design-system-components-toggle.mjs +3 -3
  74. package/fesm2022/tekus-design-system-components-toggle.mjs.map +1 -1
  75. package/fesm2022/tekus-design-system-components-toolbar.mjs +4 -4
  76. package/fesm2022/tekus-design-system-components-toolbar.mjs.map +1 -1
  77. package/fesm2022/tekus-design-system-components-tooltip.mjs +3 -3
  78. package/fesm2022/tekus-design-system-components-tooltip.mjs.map +1 -1
  79. package/fesm2022/tekus-design-system-components-topbar.mjs +3 -3
  80. package/fesm2022/tekus-design-system-components-topbar.mjs.map +1 -1
  81. package/fesm2022/tekus-design-system-core-types.mjs +3 -3
  82. package/fesm2022/tekus-design-system-core-types.mjs.map +1 -1
  83. package/fesm2022/tekus-design-system-core.mjs +3 -3
  84. package/fesm2022/tekus-design-system-core.mjs.map +1 -1
  85. package/fesm2022/tekus-design-system-directives-gird-item.mjs +3 -3
  86. package/fesm2022/tekus-design-system-directives-gird-item.mjs.map +1 -1
  87. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-time-ago.mjs","sources":["../../../projects/design-system/components/time-ago/src/time-ago.component.ts","../../../projects/design-system/components/time-ago/src/time-ago.component.html","../../../projects/design-system/components/time-ago/tekus-design-system-components-time-ago.ts"],"sourcesContent":["import { \n ChangeDetectionStrategy, \n Component, \n computed, \n DestroyRef, \n inject, \n input, \n LOCALE_ID, \n OnInit, \n signal \n} from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { Tooltip } from 'primeng/tooltip';\n\nexport type TimeAgoSeverity = 'success' | 'warn' | 'danger' | 'gray';\n\n@Component({\n selector: 'tk-time-ago',\n imports: [Tooltip],\n templateUrl: './time-ago.component.html',\n styleUrl: './time-ago.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimeAgoComponent implements OnInit {\n /**\n * The date to calculate the relative time from.\n * Can be a Date object, an ISO string, a timestamp number,\n * or a custom string format like 'dd/MM/yyyy HH:mm:ss' / 'dd/MM/yyyy HH:mm'.\n */\n dateTime = input<Date | string | number | null | undefined>(undefined);\n\n /**\n * The severity of the state, determining its dot and label colors.\n * Options: 'success' | 'warn' | 'danger' | 'gray'\n * @default 'success'\n */\n severity = input<TimeAgoSeverity>('success');\n\n /**\n * Custom tooltip text to display instead of the formatted date.\n */\n tooltipText = input<string | null | undefined>(undefined);\n\n /**\n * Format pattern for the fallback tooltip date representation.\n * @default 'dd/MM/yyyy h:mm a'\n */\n tooltipFormat = input<string>('dd/MM/yyyy h:mm a');\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly localeId = inject(LOCALE_ID);\n private readonly datePipe = new DatePipe(this.localeId);\n\n // Reactive signal representing \"now\", updated periodically.\n private readonly nowSignal = signal(new Date());\n\n // Parses the input dateTime into a Date object or null if invalid.\n readonly parsedDate = computed(() => this.parseDate(this.dateTime()));\n\n // Computes the human-readable relative time difference.\n readonly relativeTime = computed(() => {\n const eventDate = this.parsedDate();\n if (!eventDate) {\n return '';\n }\n\n const now = this.nowSignal();\n const diffSecond = Math.max(0, Math.trunc((now.getTime() - eventDate.getTime()) / 1000));\n\n if (diffSecond < 60) {\n return `${diffSecond}s`;\n } else if (diffSecond < 3600) {\n const minutes = Math.trunc(diffSecond / 60);\n const seconds = diffSecond % 60;\n return `${minutes}m ${seconds}s`;\n } else if (diffSecond < 86400) {\n const minutes = Math.trunc((diffSecond % 3600) / 60);\n const hours = Math.trunc(diffSecond / 3600);\n return `${hours}h ${minutes}m`;\n } else {\n const hours = Math.trunc((diffSecond % 86400) / 3600);\n const days = Math.trunc(diffSecond / 86400);\n return `${days}d ${hours}h`;\n }\n });\n\n // Computes the text shown on hover tooltip.\n readonly tooltipContent = computed(() => {\n const customText = this.tooltipText();\n if (customText) {\n return customText;\n }\n\n const eventDate = this.parsedDate();\n if (!eventDate) {\n return '';\n }\n\n return this.datePipe.transform(eventDate, this.tooltipFormat()) || '';\n });\n\n ngOnInit(): void {\n // Periodically update the relative time (every 30 seconds)\n const intervalId = setInterval(() => {\n this.nowSignal.set(new Date());\n }, 30000);\n\n this.destroyRef.onDestroy(() => {\n clearInterval(intervalId);\n });\n }\n\n /**\n * Checks if a date object represents a valid timestamp.\n */\n private isValidDate(date: Date): boolean {\n return !Number.isNaN(date.getTime());\n }\n\n /**\n * Parses legacy custom format 'DD/MM/YYYY HH:mm:ss' or 'DD/MM/YYYY HH:mm'.\n */\n private parseCustomFormat(value: string): Date | null {\n const customFormatRegex = /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})(?:\\s+(\\d{1,2}):(\\d{1,2})(?::(\\d{1,2}))?)?$/;\n const match = customFormatRegex.exec(value);\n if (!match) {\n return null;\n }\n\n const day = Number.parseInt(match[1], 10);\n const month = Number.parseInt(match[2], 10) - 1; // 0-indexed month\n const year = Number.parseInt(match[3], 10);\n const hour = match[4] ? Number.parseInt(match[4], 10) : 0;\n const minute = match[5] ? Number.parseInt(match[5], 10) : 0;\n const second = match[6] ? Number.parseInt(match[6], 10) : 0;\n\n const date = new Date(year, month, day, hour, minute, second);\n return this.isValidDate(date) ? date : null;\n }\n\n /**\n * Robust date parser supporting Date, timestamp number, ISO strings,\n * and custom DD/MM/YYYY formatting commonly used in the platform.\n */\n private parseDate(value: Date | string | number | null | undefined): Date | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (value instanceof Date) {\n return this.isValidDate(value) ? value : null;\n }\n\n if (typeof value === 'number') {\n const date = new Date(value);\n return this.isValidDate(date) ? date : null;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n\n const customParsed = this.parseCustomFormat(trimmed);\n if (customParsed) {\n return customParsed;\n }\n\n // Fallback to standard new Date() parsing\n const parsed = new Date(trimmed);\n if (this.isValidDate(parsed)) {\n return parsed;\n }\n }\n\n return null;\n }\n}\n","@if (relativeTime()) {\n <div \n class=\"tk-time-ago\" \n [class]=\"'tk-time-ago--' + severity()\"\n [pTooltip]=\"tooltipContent()\" \n tooltipPosition=\"top\">\n <span class=\"tk-time-ago__dot\" aria-hidden=\"true\"></span>\n <span class=\"tk-time-ago__text\">{{ relativeTime() }}</span>\n </div>\n}\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-time-ago.mjs","sources":["../../../projects/design-system/components/time-ago/src/time-ago.component.ts","../../../projects/design-system/components/time-ago/src/time-ago.component.html","../../../projects/design-system/components/time-ago/tekus-design-system-components-time-ago.ts"],"sourcesContent":["import { \n ChangeDetectionStrategy, \n Component, \n computed, \n DestroyRef, \n inject, \n input, \n LOCALE_ID, \n OnInit, \n signal \n} from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { Tooltip } from 'primeng/tooltip';\n\nexport type TimeAgoSeverity = 'success' | 'warn' | 'danger' | 'gray';\n\n@Component({\n selector: 'tk-time-ago',\n imports: [Tooltip],\n templateUrl: './time-ago.component.html',\n styleUrl: './time-ago.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimeAgoComponent implements OnInit {\n /**\n * The date to calculate the relative time from.\n * Can be a Date object, an ISO string, a timestamp number,\n * or a custom string format like 'dd/MM/yyyy HH:mm:ss' / 'dd/MM/yyyy HH:mm'.\n */\n dateTime = input<Date | string | number | null | undefined>(undefined);\n\n /**\n * The severity of the state, determining its dot and label colors.\n * Options: 'success' | 'warn' | 'danger' | 'gray'\n * @default 'success'\n */\n severity = input<TimeAgoSeverity>('success');\n\n /**\n * Custom tooltip text to display instead of the formatted date.\n */\n tooltipText = input<string | null | undefined>(undefined);\n\n /**\n * Format pattern for the fallback tooltip date representation.\n * @default 'dd/MM/yyyy h:mm a'\n */\n tooltipFormat = input<string>('dd/MM/yyyy h:mm a');\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly localeId = inject(LOCALE_ID);\n private readonly datePipe = new DatePipe(this.localeId);\n\n // Reactive signal representing \"now\", updated periodically.\n private readonly nowSignal = signal(new Date());\n\n // Parses the input dateTime into a Date object or null if invalid.\n readonly parsedDate = computed(() => this.parseDate(this.dateTime()));\n\n // Computes the human-readable relative time difference.\n readonly relativeTime = computed(() => {\n const eventDate = this.parsedDate();\n if (!eventDate) {\n return '';\n }\n\n const now = this.nowSignal();\n const diffSecond = Math.max(0, Math.trunc((now.getTime() - eventDate.getTime()) / 1000));\n\n if (diffSecond < 60) {\n return `${diffSecond}s`;\n } else if (diffSecond < 3600) {\n const minutes = Math.trunc(diffSecond / 60);\n const seconds = diffSecond % 60;\n return `${minutes}m ${seconds}s`;\n } else if (diffSecond < 86400) {\n const minutes = Math.trunc((diffSecond % 3600) / 60);\n const hours = Math.trunc(diffSecond / 3600);\n return `${hours}h ${minutes}m`;\n } else {\n const hours = Math.trunc((diffSecond % 86400) / 3600);\n const days = Math.trunc(diffSecond / 86400);\n return `${days}d ${hours}h`;\n }\n });\n\n // Computes the text shown on hover tooltip.\n readonly tooltipContent = computed(() => {\n const customText = this.tooltipText();\n if (customText) {\n return customText;\n }\n\n const eventDate = this.parsedDate();\n if (!eventDate) {\n return '';\n }\n\n return this.datePipe.transform(eventDate, this.tooltipFormat()) || '';\n });\n\n ngOnInit(): void {\n // Periodically update the relative time (every 30 seconds)\n const intervalId = setInterval(() => {\n this.nowSignal.set(new Date());\n }, 30000);\n\n this.destroyRef.onDestroy(() => {\n clearInterval(intervalId);\n });\n }\n\n /**\n * Checks if a date object represents a valid timestamp.\n */\n private isValidDate(date: Date): boolean {\n return !Number.isNaN(date.getTime());\n }\n\n /**\n * Parses legacy custom format 'DD/MM/YYYY HH:mm:ss' or 'DD/MM/YYYY HH:mm'.\n */\n private parseCustomFormat(value: string): Date | null {\n const customFormatRegex = /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})(?:\\s+(\\d{1,2}):(\\d{1,2})(?::(\\d{1,2}))?)?$/;\n const match = customFormatRegex.exec(value);\n if (!match) {\n return null;\n }\n\n const day = Number.parseInt(match[1], 10);\n const month = Number.parseInt(match[2], 10) - 1; // 0-indexed month\n const year = Number.parseInt(match[3], 10);\n const hour = match[4] ? Number.parseInt(match[4], 10) : 0;\n const minute = match[5] ? Number.parseInt(match[5], 10) : 0;\n const second = match[6] ? Number.parseInt(match[6], 10) : 0;\n\n const date = new Date(year, month, day, hour, minute, second);\n return this.isValidDate(date) ? date : null;\n }\n\n /**\n * Robust date parser supporting Date, timestamp number, ISO strings,\n * and custom DD/MM/YYYY formatting commonly used in the platform.\n */\n private parseDate(value: Date | string | number | null | undefined): Date | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (value instanceof Date) {\n return this.isValidDate(value) ? value : null;\n }\n\n if (typeof value === 'number') {\n const date = new Date(value);\n return this.isValidDate(date) ? date : null;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n\n const customParsed = this.parseCustomFormat(trimmed);\n if (customParsed) {\n return customParsed;\n }\n\n // Fallback to standard new Date() parsing\n const parsed = new Date(trimmed);\n if (this.isValidDate(parsed)) {\n return parsed;\n }\n }\n\n return null;\n }\n}\n","@if (relativeTime()) {\n <div \n class=\"tk-time-ago\" \n [class]=\"'tk-time-ago--' + severity()\"\n [pTooltip]=\"tooltipContent()\" \n tooltipPosition=\"top\">\n <span class=\"tk-time-ago__dot\" aria-hidden=\"true\"></span>\n <span class=\"tk-time-ago__text\">{{ relativeTime() }}</span>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -420,10 +420,10 @@ class TimePickerComponent {
420
420
  }
421
421
  return updated;
422
422
  }
423
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: TimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
424
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: TimePickerComponent, isStandalone: true, selector: "tk-time-picker", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, editableInput: { classPropertyName: "editableInput", publicName: "editableInput", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null }, hourFormat: { classPropertyName: "hourFormat", publicName: "hourFormat", isSignal: true, isRequired: false, transformFunction: null }, stepHour: { classPropertyName: "stepHour", publicName: "stepHour", isSignal: true, isRequired: false, transformFunction: null }, stepMinute: { classPropertyName: "stepMinute", publicName: "stepMinute", isSignal: true, isRequired: false, transformFunction: null }, stepSecond: { classPropertyName: "stepSecond", publicName: "stepSecond", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, modelValue: { classPropertyName: "modelValue", publicName: "modelValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modelValue: "modelValueChange", handleSelect: "handleSelect", handleClear: "handleClear" }, viewQueries: [{ propertyName: "maskInput", first: true, predicate: ["maskInputRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"timepicker-container\">\n <p-floatlabel>\n @if (!editableInput()) {\n <!-- Spinners only \u2014 no direct typing -->\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onOverlayTimeChange($event)\"\n (onShow)=\"onOverlayShow()\"\n (onBlur)=\"onBlur()\"\n [timeOnly]=\"true\"\n [readonlyInput]=\"true\"\n [showIcon]=\"showIcon()\"\n [showClear]=\"showClear()\"\n [disabled]=\"effectiveDisabled()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\"\n [appendTo]=\"appendTo()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"clock\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n } @else {\n <!-- Direct typing (mask) + clock icon opens spinner overlay -->\n <p-inputmask\n #maskInputRef\n [inputId]=\"uid\"\n [mask]=\"effectiveTimeMask()\"\n [ngModel]=\"maskedTimeValue()\"\n (ngModelChange)=\"onMaskedTimeChange($event)\"\n (onBlur)=\"onBlur()\"\n [disabled]=\"effectiveDisabled()\">\n </p-inputmask>\n @if (showClear() && modelValue() && !effectiveDisabled()) {\n <tk-icon class=\"tk-mask-clear\" icon=\"xmark\" tabindex=\"0\" (click)=\"clear()\" (keydown.enter)=\"clear()\" (keydown.space)=\"clear()\" />\n }\n @if (showIcon()) {\n <span class=\"tk-time-overlay-anchor\" aria-hidden=\"true\">\n <p-datepicker\n iconDisplay=\"input\"\n [showIcon]=\"true\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onOverlayTimeChange($event)\"\n (onShow)=\"onOverlayShow()\"\n [timeOnly]=\"true\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\"\n [appendTo]=\"appendTo()\"\n [disabled]=\"effectiveDisabled()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"clock\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n </span>\n }\n }\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n @if (errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched)) {\n <small class=\"p-error\">{{ errorMessage() }}</small>\n }\n</div>\n", styles: [":host ::ng-deep .p-datepicker{width:100%}:host ::ng-deep .p-datepicker-input{border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0;background-color:transparent;padding:var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-25, 4px)!important}:host ::ng-deep .p-datepicker-input:focus{border-color:var(--tk-color-primary-default, #16006f)}:host ::ng-deep .p-inputmask{width:100%;border:1px solid transparent!important;border-radius:var(--tk-border-radius-sm, 4px);background-color:transparent;box-shadow:none!important;border-color:transparent!important;transition:border-color .2s}:host ::ng-deep .p-inputmask:hover{border-color:transparent!important}:host ::ng-deep .p-inputmask:focus{outline:none;box-shadow:none!important;border-color:transparent!important}:host ::ng-deep .p-inputmask .p-inputtext{width:100%;border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0;padding-block:var(--tk-spacing-base-75, 12px);padding-inline-start:var(--tk-spacing-base-25, 4px)}:host ::ng-deep .p-inputmask.p-disabled{opacity:1;cursor:not-allowed;background-color:transparent!important}:host ::ng-deep .p-inputmask.p-disabled .p-inputtext{background-color:var(--tk-color-base-surface-200, #e4e4e4);color:var(--tk-color-base-surface-500, #8a8a8b);border-bottom-color:var(--tk-color-base-surface-300, #d2d2d2);opacity:1;cursor:not-allowed}:host ::ng-deep .p-datepicker.p-disabled{opacity:1!important}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input{background-color:var(--tk-color-base-surface-200, #e4e4e4)!important;color:var(--tk-color-base-surface-500, #8a8a8b);border-bottom-color:var(--tk-color-base-surface-300, #d2d2d2);cursor:not-allowed}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input-icon-container{color:var(--tk-color-base-surface-500, #8a8a8b);pointer-events:none}:host ::ng-deep .p-floatlabel:has(.p-disabled) label{color:var(--tk-color-base-surface-500, #8a8a8b)!important}:host ::ng-deep .tk-mask-clear{position:absolute;top:calc(50% + .1rem);transform:translateY(-50%);inset-inline-end:var(--tk-spacing-base-75, .75rem);color:var(--tk-surface-700, #424243);cursor:pointer;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:calc(var(--tk-spacing-base-100, 1rem) + .2rem);height:calc(var(--tk-spacing-base-100, 1rem) + .2rem)}:host ::ng-deep .tk-mask-clear fa-icon svg{width:calc(var(--tk-spacing-base-100, 1rem) + .2rem);height:calc(var(--tk-spacing-base-100, 1rem) + .2rem)}:host ::ng-deep .p-floatlabel:has(.tk-time-overlay-anchor):not(:has(.tk-mask-clear)) .p-inputmask .p-inputtext{padding-inline-end:calc(var(--tk-spacing-base-75, .75rem) * 2 + var(--tk-spacing-base-100, 1rem))!important}:host ::ng-deep .p-floatlabel:has(.tk-mask-clear):not(:has(.tk-time-overlay-anchor)) .p-inputmask .p-inputtext{padding-inline-end:calc(var(--tk-spacing-base-75, .75rem) * 2 + var(--tk-spacing-base-100, 1rem))!important}:host ::ng-deep .p-floatlabel:has(.tk-mask-clear):has(.tk-time-overlay-anchor) .p-inputmask .p-inputtext{padding-inline-end:calc(var(--tk-spacing-base-75, .75rem) * 3 + var(--tk-spacing-base-100, 1rem) * 2)!important}:host ::ng-deep .p-floatlabel:has(.tk-time-overlay-anchor) .tk-mask-clear{inset-inline-end:calc(var(--tk-spacing-base-75, .75rem) * 2 + var(--tk-spacing-base-100, 1rem))}:host ::ng-deep .tk-time-overlay-anchor{position:absolute;inset:0;pointer-events:none}:host ::ng-deep .tk-time-overlay-anchor p-datepicker{display:block;width:100%;height:100%}:host ::ng-deep .tk-time-overlay-anchor .p-datepicker{width:100%;height:100%;position:relative}:host ::ng-deep .tk-time-overlay-anchor .p-datepicker .p-datepicker-input{position:absolute;inset:0;opacity:0!important;pointer-events:none!important;border:none!important;padding:0!important;width:100%!important;height:100%!important}:host ::ng-deep .tk-time-overlay-anchor .p-datepicker .p-datepicker-input-icon-container{pointer-events:all;cursor:pointer}:host ::ng-deep .p-floatlabel{position:relative}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input:focus) label,:host ::ng-deep .p-floatlabel:has(.p-inputmask.p-filled) label,:host ::ng-deep .p-floatlabel:has(.p-inputmask:focus) label{color:var(--tk-primary-500, #16006f)}:host ::ng-deep .p-floatlabel label{color:var(--tk-surface-700, #8a8a8b);font-family:var(--tk-font-family, Poppins, sans-serif);font-size:var(--tk-font-size-2xs, 1rem);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep .p-datepicker-panel{min-width:0!important;max-width:300px!important;width:100%!important}:host ::ng-deep .p-inputtext:disabled{background:var(--tk-color-base-surface-200, #e4e4e4)!important}.timepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}small.p-error{display:block;margin-top:var(--tk-spacing-base-25, .25rem);color:var(--tk-color-base-red-700, #cf2604);font-size:var(--tk-font-size-xs, .75rem)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i2.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "styleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "readonlyInput", "shortYearCutoff", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "view", "defaultDate", "appendTo", "motionOptions"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i3.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: InputMask, selector: "p-inputmask, p-inputMask, p-input-mask", inputs: ["type", "slotChar", "autoClear", "showClear", "style", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabel", "ariaLabelledBy", "ariaRequired", "readonly", "unmask", "characterPattern", "autofocus", "autocomplete", "keepBuffer", "mask"], outputs: ["onComplete", "onFocus", "onBlur", "onInput", "onKeydown", "onClear"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
423
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
424
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: TimePickerComponent, isStandalone: true, selector: "tk-time-picker", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, editableInput: { classPropertyName: "editableInput", publicName: "editableInput", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null }, hourFormat: { classPropertyName: "hourFormat", publicName: "hourFormat", isSignal: true, isRequired: false, transformFunction: null }, stepHour: { classPropertyName: "stepHour", publicName: "stepHour", isSignal: true, isRequired: false, transformFunction: null }, stepMinute: { classPropertyName: "stepMinute", publicName: "stepMinute", isSignal: true, isRequired: false, transformFunction: null }, stepSecond: { classPropertyName: "stepSecond", publicName: "stepSecond", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, modelValue: { classPropertyName: "modelValue", publicName: "modelValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modelValue: "modelValueChange", handleSelect: "handleSelect", handleClear: "handleClear" }, viewQueries: [{ propertyName: "maskInput", first: true, predicate: ["maskInputRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"timepicker-container\">\n <p-floatlabel>\n @if (!editableInput()) {\n <!-- Spinners only \u2014 no direct typing -->\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onOverlayTimeChange($event)\"\n (onShow)=\"onOverlayShow()\"\n (onBlur)=\"onBlur()\"\n [timeOnly]=\"true\"\n [readonlyInput]=\"true\"\n [showIcon]=\"showIcon()\"\n [showClear]=\"showClear()\"\n [disabled]=\"effectiveDisabled()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\"\n [appendTo]=\"appendTo()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"clock\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n } @else {\n <!-- Direct typing (mask) + clock icon opens spinner overlay -->\n <p-inputmask\n #maskInputRef\n [inputId]=\"uid\"\n [mask]=\"effectiveTimeMask()\"\n [ngModel]=\"maskedTimeValue()\"\n (ngModelChange)=\"onMaskedTimeChange($event)\"\n (onBlur)=\"onBlur()\"\n [disabled]=\"effectiveDisabled()\">\n </p-inputmask>\n @if (showClear() && modelValue() && !effectiveDisabled()) {\n <tk-icon class=\"tk-mask-clear\" icon=\"xmark\" tabindex=\"0\" (click)=\"clear()\" (keydown.enter)=\"clear()\" (keydown.space)=\"clear()\" />\n }\n @if (showIcon()) {\n <span class=\"tk-time-overlay-anchor\" aria-hidden=\"true\">\n <p-datepicker\n iconDisplay=\"input\"\n [showIcon]=\"true\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onOverlayTimeChange($event)\"\n (onShow)=\"onOverlayShow()\"\n [timeOnly]=\"true\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\"\n [appendTo]=\"appendTo()\"\n [disabled]=\"effectiveDisabled()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"clock\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n </span>\n }\n }\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n @if (errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched)) {\n <small class=\"p-error\">{{ errorMessage() }}</small>\n }\n</div>\n", styles: [":host ::ng-deep .p-datepicker{width:100%}:host ::ng-deep .p-datepicker-input{border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0;background-color:transparent;padding:var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-25, 4px)!important}:host ::ng-deep .p-datepicker-input:focus{border-color:var(--tk-color-primary-default, #16006f)}:host ::ng-deep .p-inputmask{width:100%;border:1px solid transparent!important;border-radius:var(--tk-border-radius-sm, 4px);background-color:transparent;box-shadow:none!important;border-color:transparent!important;transition:border-color .2s}:host ::ng-deep .p-inputmask:hover{border-color:transparent!important}:host ::ng-deep .p-inputmask:focus{outline:none;box-shadow:none!important;border-color:transparent!important}:host ::ng-deep .p-inputmask .p-inputtext{width:100%;border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0;padding-block:var(--tk-spacing-base-75, 12px);padding-inline-start:var(--tk-spacing-base-25, 4px)}:host ::ng-deep .p-inputmask.p-disabled{opacity:1;cursor:not-allowed;background-color:transparent!important}:host ::ng-deep .p-inputmask.p-disabled .p-inputtext{background-color:var(--tk-color-base-surface-200, #e4e4e4);color:var(--tk-color-base-surface-500, #8a8a8b);border-bottom-color:var(--tk-color-base-surface-300, #d2d2d2);opacity:1;cursor:not-allowed}:host ::ng-deep .p-datepicker.p-disabled{opacity:1!important}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input{background-color:var(--tk-color-base-surface-200, #e4e4e4)!important;color:var(--tk-color-base-surface-500, #8a8a8b);border-bottom-color:var(--tk-color-base-surface-300, #d2d2d2);cursor:not-allowed}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input-icon-container{color:var(--tk-color-base-surface-500, #8a8a8b);pointer-events:none}:host ::ng-deep .p-floatlabel:has(.p-disabled) label{color:var(--tk-color-base-surface-500, #8a8a8b)!important}:host ::ng-deep .tk-mask-clear{position:absolute;top:calc(50% + .1rem);transform:translateY(-50%);inset-inline-end:var(--tk-spacing-base-75, .75rem);color:var(--tk-surface-700, #424243);cursor:pointer;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:calc(var(--tk-spacing-base-100, 1rem) + .2rem);height:calc(var(--tk-spacing-base-100, 1rem) + .2rem)}:host ::ng-deep .tk-mask-clear fa-icon svg{width:calc(var(--tk-spacing-base-100, 1rem) + .2rem);height:calc(var(--tk-spacing-base-100, 1rem) + .2rem)}:host ::ng-deep .p-floatlabel:has(.tk-time-overlay-anchor):not(:has(.tk-mask-clear)) .p-inputmask .p-inputtext{padding-inline-end:calc(var(--tk-spacing-base-75, .75rem) * 2 + var(--tk-spacing-base-100, 1rem))!important}:host ::ng-deep .p-floatlabel:has(.tk-mask-clear):not(:has(.tk-time-overlay-anchor)) .p-inputmask .p-inputtext{padding-inline-end:calc(var(--tk-spacing-base-75, .75rem) * 2 + var(--tk-spacing-base-100, 1rem))!important}:host ::ng-deep .p-floatlabel:has(.tk-mask-clear):has(.tk-time-overlay-anchor) .p-inputmask .p-inputtext{padding-inline-end:calc(var(--tk-spacing-base-75, .75rem) * 3 + var(--tk-spacing-base-100, 1rem) * 2)!important}:host ::ng-deep .p-floatlabel:has(.tk-time-overlay-anchor) .tk-mask-clear{inset-inline-end:calc(var(--tk-spacing-base-75, .75rem) * 2 + var(--tk-spacing-base-100, 1rem))}:host ::ng-deep .tk-time-overlay-anchor{position:absolute;inset:0;pointer-events:none}:host ::ng-deep .tk-time-overlay-anchor p-datepicker{display:block;width:100%;height:100%}:host ::ng-deep .tk-time-overlay-anchor .p-datepicker{width:100%;height:100%;position:relative}:host ::ng-deep .tk-time-overlay-anchor .p-datepicker .p-datepicker-input{position:absolute;inset:0;opacity:0!important;pointer-events:none!important;border:none!important;padding:0!important;width:100%!important;height:100%!important}:host ::ng-deep .tk-time-overlay-anchor .p-datepicker .p-datepicker-input-icon-container{pointer-events:all;cursor:pointer}:host ::ng-deep .p-floatlabel{position:relative}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input:focus) label,:host ::ng-deep .p-floatlabel:has(.p-inputmask.p-filled) label,:host ::ng-deep .p-floatlabel:has(.p-inputmask:focus) label{color:var(--tk-primary-500, #16006f)}:host ::ng-deep .p-floatlabel label{color:var(--tk-surface-700, #8a8a8b);font-family:var(--tk-font-family, Poppins, sans-serif);font-size:var(--tk-font-size-2xs, 1rem);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep .p-datepicker-panel{min-width:0!important;max-width:300px!important;width:100%!important}:host ::ng-deep .p-inputtext:disabled{background:var(--tk-color-base-surface-200, #e4e4e4)!important}.timepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}small.p-error{display:block;margin-top:var(--tk-spacing-base-25, .25rem);color:var(--tk-color-base-red-700, #cf2604);font-size:var(--tk-font-size-xs, .75rem)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i2.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "styleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "readonlyInput", "shortYearCutoff", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "view", "defaultDate", "appendTo", "motionOptions"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i3.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: InputMask, selector: "p-inputmask, p-inputMask, p-input-mask", inputs: ["type", "slotChar", "autoClear", "showClear", "style", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabel", "ariaLabelledBy", "ariaRequired", "readonly", "unmask", "characterPattern", "autofocus", "autocomplete", "keepBuffer", "mask"], outputs: ["onComplete", "onFocus", "onBlur", "onInput", "onKeydown", "onClear"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
425
425
  }
426
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: TimePickerComponent, decorators: [{
426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TimePickerComponent, decorators: [{
427
427
  type: Component,
428
428
  args: [{ selector: 'tk-time-picker', imports: [
429
429
  FormsModule,
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-time-picker.mjs","sources":["../../../projects/design-system/components/time-picker/src/time-picker.component.ts","../../../projects/design-system/components/time-picker/src/time-picker.component.html","../../../projects/design-system/components/time-picker/tekus-design-system-components-time-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnInit,\n inject,\n input,\n model,\n signal,\n computed,\n output,\n effect,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { switchMap } from 'rxjs';\nimport {\n FormsModule,\n ReactiveFormsModule,\n FormControl,\n ControlValueAccessor,\n NgControl,\n Validator,\n ValidationErrors,\n} from '@angular/forms';\n\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { InputMask } from 'primeng/inputmask';\nimport { IconComponent } from '@tekus/design-system/components/icon';\n\nlet timePickerUid = 0;\n\n@Component({\n selector: 'tk-time-picker',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n DatePickerModule,\n FloatLabelModule,\n InputMask,\n IconComponent,\n ],\n templateUrl: './time-picker.component.html',\n styleUrl: './time-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimePickerComponent implements OnInit, ControlValueAccessor, Validator {\n /** @internal */\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n /** @internal */\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n toObservable(this.effectiveControl)\n .pipe(\n switchMap(ctrl => {\n this.disabledStatus.set(ctrl.disabled);\n return ctrl.statusChanges;\n }),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.disabledStatus.set(this.effectiveControl().disabled);\n });\n\n effect(() => {\n this.required();\n this.minDate();\n this.maxDate();\n this.partialMask();\n this.invalidTimeInput();\n untracked(() => {\n this.onValidatorChange();\n this.effectiveControl().updateValueAndValidity({ emitEvent: false });\n });\n });\n\n effect(() => {\n const val = this.maskedTimeValue();\n const mask = this.maskInput();\n if (!mask) return;\n untracked(() => {\n if (mask.value !== val) {\n mask.writeValue(val);\n }\n });\n });\n }\n\n /**\n * @description\n * Marks the field as required. When `true`, the component returns a\n * `{ required: true }` validation error when no time is selected.\n *\n * @default false\n *\n * @example\n * <tk-time-picker [required]=\"true\" errorMessage=\"Time is required\" />\n */\n required = input<boolean>(false);\n\n /**\n * @description\n * Controls how the user enters the time.\n * - `true` — direct keyboard input via a masked field; the clock icon opens\n * a spinner overlay for visual selection. Only 24-hour format is supported\n * in this mode.\n * - `false` — spinners only; keyboard input is disabled.\n *\n * @default false\n */\n editableInput = input<boolean>(false);\n\n /**\n * @description\n * Time display format used both for the masked input and for PrimeNG's spinner.\n * Supported tokens: `HH` (24-h hours), `hh` (12-h hours), `mm` (minutes),\n * `ss` (seconds).\n *\n * @default 'HH:mm'\n */\n timeFormat = input<string>('HH:mm');\n\n /**\n * @description\n * Hour format for the time spinner.\n * - `'24'` — 0–23 hours.\n * - `'12'` — 1–12 hours with AM/PM toggle. Ignored when `editableInput=true`.\n *\n * @default '24'\n */\n hourFormat = input<'12' | '24'>('24');\n\n /** @description Hour increment/decrement step for the spinner. @default 1 */\n stepHour = input<number>(1);\n\n /** @description Minute increment/decrement step for the spinner. @default 1 */\n stepMinute = input<number>(1);\n\n /** @description Second increment/decrement step for the spinner. @default 1 */\n stepSecond = input<number>(1);\n\n /**\n * @description Whether to show the seconds segment. Only active when `hourFormat=\"24\"`.\n * @default false\n */\n showSeconds = input<boolean>(false);\n\n /** @description Shows a clear (×) button that resets the value to `null`. @default true */\n showClear = input<boolean>(true);\n\n /**\n * @description\n * Shows the clock icon inside the input field.\n * When `false`, the overlay can only be opened by clicking the input itself.\n *\n * @default true\n */\n showIcon = input<boolean>(true);\n\n /** @description Disables the component. @default false */\n disabled = input<boolean>(false);\n\n /**\n * @description\n * Earliest selectable time. Enforced through Angular form validation only —\n * the field value is never cleared when the limit is reached.\n *\n * @default null\n */\n minDate = input<Date | null>(null);\n\n /**\n * @description Latest selectable time. Same validation-only semantics as `minDate`.\n * @default null\n */\n maxDate = input<Date | null>(null);\n\n /** @description Floating label text shown above the input field. @default 'Select a time' */\n labelText = input<string>('Select a time');\n\n /**\n * @description\n * Validation error message rendered beneath the field when the bound control\n * is invalid and the field has been dirtied or touched.\n *\n * @default null\n */\n errorMessage = input<string | null>(null);\n\n /**\n * @description\n * Optional external `FormControl` to bind when not using the standard\n * `formControl` / `formControlName` / `ngModel` directives.\n */\n control = input<FormControl | undefined>(undefined);\n\n /**\n * @description\n * Target element or CSS selector to which the overlay panel is appended.\n * @default 'body'\n */\n appendTo = input<string | HTMLElement | null | undefined>('body');\n\n /**\n * @description\n * Two-way signal binding for the selected time value (`Date | null`).\n */\n modelValue = model<Date | null>(null);\n\n /** @description Emits the selected value whenever a complete time is chosen. */\n handleSelect = output<Date>();\n\n /** @description Emits when the user clears the field via the clear button. */\n handleClear = output<void>();\n\n /** @internal */\n disabledStatus = signal<boolean>(false);\n\n /** @internal */\n effectiveDisabled = computed(() => this.disabled() || this.disabledStatus());\n\n /** @internal */\n readonly maskInput = viewChild<InputMask>('maskInputRef');\n\n /**\n * @description\n * Forces `'24'` when `editableInput=true` because the InputMask digit-only\n * pattern cannot represent AM/PM tokens.\n */\n effectiveHourFormat = computed<'12' | '24'>(() =>\n this.editableInput() ? '24' : this.hourFormat()\n );\n\n /**\n * @description\n * PrimeNG InputMask pattern derived from `timeFormat` by replacing all\n * time-letter placeholders with the digit wildcard `'9'`.\n */\n effectiveTimeMask = computed(() =>\n this.timeFormat()\n .replaceAll('H', '9')\n .replaceAll('h', '9')\n .replaceAll('m', '9')\n .replaceAll('s', '9')\n );\n\n /**\n * @description\n * Formats the current `modelValue` as a time string matching `timeFormat`,\n * bound to the InputMask via `[ngModel]`.\n */\n maskedTimeValue = computed(() => {\n const v = this.modelValue();\n if (!v || !(v instanceof Date)) return '';\n const pad = (n: number) => String(n).padStart(2, '0');\n const fmt = this.timeFormat().replaceAll('h', 'H');\n return fmt\n .replace('HH', pad(v.getHours()))\n .replace('H', String(v.getHours()))\n .replace('mm', pad(v.getMinutes()))\n .replace('m', String(v.getMinutes()))\n .replace('ss', pad(v.getSeconds()))\n .replace('s', String(v.getSeconds()));\n });\n\n /** @internal */\n effectiveShowSeconds = computed(\n () => this.effectiveHourFormat() === '24' && this.showSeconds()\n );\n\n /** @internal */\n private readonly internalControl = new FormControl<Date | null>(null);\n\n /** @internal */\n readonly effectiveControl = computed<FormControl>(\n () => (this.ngControl?.control as FormControl) ?? this.control() ?? this.internalControl\n );\n\n /** @internal */\n readonly uid = `tk-timepicker-${++timePickerUid}`;\n\n /** @internal */\n private readonly partialMask = signal(false);\n\n /** @internal */\n private readonly invalidTimeInput = signal(false);\n\n /** @internal */ onChange: (value: Date | null) => void = () => {};\n /** @internal */ onTouched: () => void = () => {};\n /** @internal */ onValidatorChange: () => void = () => {};\n /** @internal */ private lastValue: Date | null = null;\n /** @internal */ private readonly boundValidate = this.validate.bind(this);\n\n /** @inheritdoc */\n ngOnInit(): void {\n const control = this.effectiveControl();\n\n this.disabledStatus.set(control.disabled);\n\n const initialValue = control.value;\n if (initialValue !== null && initialValue !== undefined) {\n this.modelValue.set(initialValue);\n this.lastValue = initialValue;\n }\n\n if (!this.ngControl) {\n const currentModel = this.modelValue();\n if (currentModel !== null && currentModel !== undefined) {\n this.handleSelect.emit(currentModel);\n this.onChange(currentModel);\n }\n }\n\n control.addValidators(this.boundValidate);\n control.updateValueAndValidity({ emitEvent: false });\n this.destroyRef.onDestroy(() => {\n control.removeValidators(this.boundValidate);\n });\n }\n\n /** @inheritdoc */\n writeValue(value: Date | null): void {\n this.modelValue.set(value);\n this.lastValue = value;\n if (value === null) {\n this.partialMask.set(false);\n this.invalidTimeInput.set(false);\n }\n }\n\n /** @inheritdoc */\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n /** @inheritdoc */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @inheritdoc */\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n /** @inheritdoc */\n validate(): ValidationErrors | null {\n if (this.editableInput() && this.partialMask()) {\n return { incompleteMask: true };\n }\n if (this.editableInput() && this.invalidTimeInput()) {\n return { invalidTime: true };\n }\n\n const value = this.modelValue();\n if (!value) return this.required() ? { required: true } : null;\n\n let min = this.minDate();\n let max = this.maxDate();\n\n const epoch = new Date(1970, 0, 1);\n const valCompare = new Date(epoch);\n valCompare.setHours(value.getHours(), value.getMinutes(), value.getSeconds(), 0);\n if (min) {\n const t = new Date(epoch);\n t.setHours(min.getHours(), min.getMinutes(), min.getSeconds(), 0);\n min = t;\n }\n if (max) {\n const t = new Date(epoch);\n t.setHours(max.getHours(), max.getMinutes(), max.getSeconds(), 0);\n max = t;\n }\n\n if (min && valCompare < min) return { minDate: { min: this.minDate(), actual: value } };\n if (max && valCompare > max) return { maxDate: { max: this.maxDate(), actual: value } };\n\n return null;\n }\n\n /** @inheritdoc */\n setDisabledState(isDisabled: boolean): void {\n this.disabledStatus.set(isDisabled);\n const control = this.effectiveControl();\n if (isDisabled && control.enabled) {\n control.disable({ emitEvent: false });\n } else if (!isDisabled && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n\n /** @description Marks the control as touched when the user leaves the field. */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl().markAsTouched();\n }\n\n /** @description Programmatically clears the selected value, resetting it to `null`. */\n clear(): void {\n this.modelValue.set(null);\n this.lastValue = null;\n this.partialMask.set(false);\n this.invalidTimeInput.set(false);\n this.onChange(null);\n this.effectiveControl().setValue(null, { emitEvent: false });\n this.handleClear.emit();\n }\n\n /**\n * @description\n * Parses the string emitted by InputMask and propagates the resulting Date.\n */\n onMaskedTimeChange(timeStr: string): void {\n if (!timeStr || timeStr.includes('_')) {\n const hasDigits = /\\d/.test(timeStr ?? '');\n this.partialMask.set(hasDigits);\n this.invalidTimeInput.set(false);\n if (!hasDigits && this.modelValue() !== null) {\n this.lastValue = null;\n this.modelValue.set(null);\n this.onChange(null);\n this.effectiveControl().setValue(null, { emitEvent: false });\n this.handleClear.emit();\n }\n return;\n }\n this.partialMask.set(false);\n const parts = timeStr.split(':');\n if (parts.length < 2) return;\n const hours = Number.parseInt(parts[0], 10);\n const minutes = Number.parseInt(parts[1], 10);\n const seconds = parts.length > 2 ? Number.parseInt(parts[2], 10) : 0;\n if (Number.isNaN(hours) || Number.isNaN(minutes) || Number.isNaN(seconds)) return;\n if (hours >= 24 || minutes >= 60 || seconds >= 60) {\n this.invalidTimeInput.set(true);\n this.onChange(null);\n this.effectiveControl().setValue(null, { emitEvent: false });\n return;\n }\n this.invalidTimeInput.set(false);\n const base = this.minDate() || new Date();\n const result = new Date(base);\n result.setHours(hours, minutes, seconds, 0);\n this.lastValue = result;\n this.modelValue.set(result);\n this.onChange(result);\n this.effectiveControl().setValue(result, { emitEvent: false });\n this.effectiveControl().markAsDirty();\n this.handleSelect.emit(result);\n }\n\n /**\n * @description\n * Handles value changes from the hidden spinner overlay in mask+overlay mode.\n */\n onOverlayTimeChange(value: Date | null): void {\n if (value === null) {\n this.clear();\n return;\n }\n if (!(value instanceof Date)) return;\n let finalValue = value;\n if (this.lastValue instanceof Date && finalValue.toDateString() === this.lastValue.toDateString()) {\n finalValue = this.applyTimeCascading(this.lastValue, finalValue);\n }\n const base = this.minDate() || new Date();\n const result = new Date(finalValue);\n result.setFullYear(base.getFullYear(), base.getMonth(), base.getDate());\n this.lastValue = result;\n this.modelValue.set(result);\n this.onChange(result);\n this.effectiveControl().setValue(result, { emitEvent: false });\n this.effectiveControl().markAsDirty();\n this.handleSelect.emit(result);\n }\n\n /**\n * @description\n * Fires when the spinner overlay opens. If no value is selected, auto-commits\n * the time that PrimeNG displays by default (minDate or current time).\n */\n onOverlayShow(): void {\n if (this.modelValue() !== null) return;\n const base = this.minDate() ?? new Date();\n const initial = new Date(base);\n initial.setSeconds(0, 0);\n this.onOverlayTimeChange(initial);\n }\n\n /**\n * @description\n * Adjusts hours or minutes when the spinner rolls over a unit boundary.\n */\n private applyTimeCascading(prev: Date, curr: Date): Date {\n const updated = new Date(curr);\n\n if (prev.getSeconds() === 59 && updated.getSeconds() === 0) {\n updated.setMinutes(updated.getMinutes() + 1);\n } else if (prev.getSeconds() === 0 && updated.getSeconds() === 59) {\n updated.setMinutes(updated.getMinutes() - 1);\n }\n\n if (prev.getMinutes() === 59 && updated.getMinutes() === 0) {\n updated.setHours(updated.getHours() + 1);\n } else if (prev.getMinutes() === 0 && updated.getMinutes() === 59) {\n updated.setHours(updated.getHours() - 1);\n }\n\n return updated;\n }\n}\n","<div class=\"timepicker-container\">\n <p-floatlabel>\n @if (!editableInput()) {\n <!-- Spinners only — no direct typing -->\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onOverlayTimeChange($event)\"\n (onShow)=\"onOverlayShow()\"\n (onBlur)=\"onBlur()\"\n [timeOnly]=\"true\"\n [readonlyInput]=\"true\"\n [showIcon]=\"showIcon()\"\n [showClear]=\"showClear()\"\n [disabled]=\"effectiveDisabled()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\"\n [appendTo]=\"appendTo()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"clock\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n } @else {\n <!-- Direct typing (mask) + clock icon opens spinner overlay -->\n <p-inputmask\n #maskInputRef\n [inputId]=\"uid\"\n [mask]=\"effectiveTimeMask()\"\n [ngModel]=\"maskedTimeValue()\"\n (ngModelChange)=\"onMaskedTimeChange($event)\"\n (onBlur)=\"onBlur()\"\n [disabled]=\"effectiveDisabled()\">\n </p-inputmask>\n @if (showClear() && modelValue() && !effectiveDisabled()) {\n <tk-icon class=\"tk-mask-clear\" icon=\"xmark\" tabindex=\"0\" (click)=\"clear()\" (keydown.enter)=\"clear()\" (keydown.space)=\"clear()\" />\n }\n @if (showIcon()) {\n <span class=\"tk-time-overlay-anchor\" aria-hidden=\"true\">\n <p-datepicker\n iconDisplay=\"input\"\n [showIcon]=\"true\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onOverlayTimeChange($event)\"\n (onShow)=\"onOverlayShow()\"\n [timeOnly]=\"true\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\"\n [appendTo]=\"appendTo()\"\n [disabled]=\"effectiveDisabled()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"clock\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n </span>\n }\n }\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n @if (errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched)) {\n <small class=\"p-error\">{{ errorMessage() }}</small>\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-time-picker.mjs","sources":["../../../projects/design-system/components/time-picker/src/time-picker.component.ts","../../../projects/design-system/components/time-picker/src/time-picker.component.html","../../../projects/design-system/components/time-picker/tekus-design-system-components-time-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnInit,\n inject,\n input,\n model,\n signal,\n computed,\n output,\n effect,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { switchMap } from 'rxjs';\nimport {\n FormsModule,\n ReactiveFormsModule,\n FormControl,\n ControlValueAccessor,\n NgControl,\n Validator,\n ValidationErrors,\n} from '@angular/forms';\n\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { InputMask } from 'primeng/inputmask';\nimport { IconComponent } from '@tekus/design-system/components/icon';\n\nlet timePickerUid = 0;\n\n@Component({\n selector: 'tk-time-picker',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n DatePickerModule,\n FloatLabelModule,\n InputMask,\n IconComponent,\n ],\n templateUrl: './time-picker.component.html',\n styleUrl: './time-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimePickerComponent implements OnInit, ControlValueAccessor, Validator {\n /** @internal */\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n /** @internal */\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n toObservable(this.effectiveControl)\n .pipe(\n switchMap(ctrl => {\n this.disabledStatus.set(ctrl.disabled);\n return ctrl.statusChanges;\n }),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.disabledStatus.set(this.effectiveControl().disabled);\n });\n\n effect(() => {\n this.required();\n this.minDate();\n this.maxDate();\n this.partialMask();\n this.invalidTimeInput();\n untracked(() => {\n this.onValidatorChange();\n this.effectiveControl().updateValueAndValidity({ emitEvent: false });\n });\n });\n\n effect(() => {\n const val = this.maskedTimeValue();\n const mask = this.maskInput();\n if (!mask) return;\n untracked(() => {\n if (mask.value !== val) {\n mask.writeValue(val);\n }\n });\n });\n }\n\n /**\n * @description\n * Marks the field as required. When `true`, the component returns a\n * `{ required: true }` validation error when no time is selected.\n *\n * @default false\n *\n * @example\n * <tk-time-picker [required]=\"true\" errorMessage=\"Time is required\" />\n */\n required = input<boolean>(false);\n\n /**\n * @description\n * Controls how the user enters the time.\n * - `true` — direct keyboard input via a masked field; the clock icon opens\n * a spinner overlay for visual selection. Only 24-hour format is supported\n * in this mode.\n * - `false` — spinners only; keyboard input is disabled.\n *\n * @default false\n */\n editableInput = input<boolean>(false);\n\n /**\n * @description\n * Time display format used both for the masked input and for PrimeNG's spinner.\n * Supported tokens: `HH` (24-h hours), `hh` (12-h hours), `mm` (minutes),\n * `ss` (seconds).\n *\n * @default 'HH:mm'\n */\n timeFormat = input<string>('HH:mm');\n\n /**\n * @description\n * Hour format for the time spinner.\n * - `'24'` — 0–23 hours.\n * - `'12'` — 1–12 hours with AM/PM toggle. Ignored when `editableInput=true`.\n *\n * @default '24'\n */\n hourFormat = input<'12' | '24'>('24');\n\n /** @description Hour increment/decrement step for the spinner. @default 1 */\n stepHour = input<number>(1);\n\n /** @description Minute increment/decrement step for the spinner. @default 1 */\n stepMinute = input<number>(1);\n\n /** @description Second increment/decrement step for the spinner. @default 1 */\n stepSecond = input<number>(1);\n\n /**\n * @description Whether to show the seconds segment. Only active when `hourFormat=\"24\"`.\n * @default false\n */\n showSeconds = input<boolean>(false);\n\n /** @description Shows a clear (×) button that resets the value to `null`. @default true */\n showClear = input<boolean>(true);\n\n /**\n * @description\n * Shows the clock icon inside the input field.\n * When `false`, the overlay can only be opened by clicking the input itself.\n *\n * @default true\n */\n showIcon = input<boolean>(true);\n\n /** @description Disables the component. @default false */\n disabled = input<boolean>(false);\n\n /**\n * @description\n * Earliest selectable time. Enforced through Angular form validation only —\n * the field value is never cleared when the limit is reached.\n *\n * @default null\n */\n minDate = input<Date | null>(null);\n\n /**\n * @description Latest selectable time. Same validation-only semantics as `minDate`.\n * @default null\n */\n maxDate = input<Date | null>(null);\n\n /** @description Floating label text shown above the input field. @default 'Select a time' */\n labelText = input<string>('Select a time');\n\n /**\n * @description\n * Validation error message rendered beneath the field when the bound control\n * is invalid and the field has been dirtied or touched.\n *\n * @default null\n */\n errorMessage = input<string | null>(null);\n\n /**\n * @description\n * Optional external `FormControl` to bind when not using the standard\n * `formControl` / `formControlName` / `ngModel` directives.\n */\n control = input<FormControl | undefined>(undefined);\n\n /**\n * @description\n * Target element or CSS selector to which the overlay panel is appended.\n * @default 'body'\n */\n appendTo = input<string | HTMLElement | null | undefined>('body');\n\n /**\n * @description\n * Two-way signal binding for the selected time value (`Date | null`).\n */\n modelValue = model<Date | null>(null);\n\n /** @description Emits the selected value whenever a complete time is chosen. */\n handleSelect = output<Date>();\n\n /** @description Emits when the user clears the field via the clear button. */\n handleClear = output<void>();\n\n /** @internal */\n disabledStatus = signal<boolean>(false);\n\n /** @internal */\n effectiveDisabled = computed(() => this.disabled() || this.disabledStatus());\n\n /** @internal */\n readonly maskInput = viewChild<InputMask>('maskInputRef');\n\n /**\n * @description\n * Forces `'24'` when `editableInput=true` because the InputMask digit-only\n * pattern cannot represent AM/PM tokens.\n */\n effectiveHourFormat = computed<'12' | '24'>(() =>\n this.editableInput() ? '24' : this.hourFormat()\n );\n\n /**\n * @description\n * PrimeNG InputMask pattern derived from `timeFormat` by replacing all\n * time-letter placeholders with the digit wildcard `'9'`.\n */\n effectiveTimeMask = computed(() =>\n this.timeFormat()\n .replaceAll('H', '9')\n .replaceAll('h', '9')\n .replaceAll('m', '9')\n .replaceAll('s', '9')\n );\n\n /**\n * @description\n * Formats the current `modelValue` as a time string matching `timeFormat`,\n * bound to the InputMask via `[ngModel]`.\n */\n maskedTimeValue = computed(() => {\n const v = this.modelValue();\n if (!v || !(v instanceof Date)) return '';\n const pad = (n: number) => String(n).padStart(2, '0');\n const fmt = this.timeFormat().replaceAll('h', 'H');\n return fmt\n .replace('HH', pad(v.getHours()))\n .replace('H', String(v.getHours()))\n .replace('mm', pad(v.getMinutes()))\n .replace('m', String(v.getMinutes()))\n .replace('ss', pad(v.getSeconds()))\n .replace('s', String(v.getSeconds()));\n });\n\n /** @internal */\n effectiveShowSeconds = computed(\n () => this.effectiveHourFormat() === '24' && this.showSeconds()\n );\n\n /** @internal */\n private readonly internalControl = new FormControl<Date | null>(null);\n\n /** @internal */\n readonly effectiveControl = computed<FormControl>(\n () => (this.ngControl?.control as FormControl) ?? this.control() ?? this.internalControl\n );\n\n /** @internal */\n readonly uid = `tk-timepicker-${++timePickerUid}`;\n\n /** @internal */\n private readonly partialMask = signal(false);\n\n /** @internal */\n private readonly invalidTimeInput = signal(false);\n\n /** @internal */ onChange: (value: Date | null) => void = () => {};\n /** @internal */ onTouched: () => void = () => {};\n /** @internal */ onValidatorChange: () => void = () => {};\n /** @internal */ private lastValue: Date | null = null;\n /** @internal */ private readonly boundValidate = this.validate.bind(this);\n\n /** @inheritdoc */\n ngOnInit(): void {\n const control = this.effectiveControl();\n\n this.disabledStatus.set(control.disabled);\n\n const initialValue = control.value;\n if (initialValue !== null && initialValue !== undefined) {\n this.modelValue.set(initialValue);\n this.lastValue = initialValue;\n }\n\n if (!this.ngControl) {\n const currentModel = this.modelValue();\n if (currentModel !== null && currentModel !== undefined) {\n this.handleSelect.emit(currentModel);\n this.onChange(currentModel);\n }\n }\n\n control.addValidators(this.boundValidate);\n control.updateValueAndValidity({ emitEvent: false });\n this.destroyRef.onDestroy(() => {\n control.removeValidators(this.boundValidate);\n });\n }\n\n /** @inheritdoc */\n writeValue(value: Date | null): void {\n this.modelValue.set(value);\n this.lastValue = value;\n if (value === null) {\n this.partialMask.set(false);\n this.invalidTimeInput.set(false);\n }\n }\n\n /** @inheritdoc */\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n /** @inheritdoc */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @inheritdoc */\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n /** @inheritdoc */\n validate(): ValidationErrors | null {\n if (this.editableInput() && this.partialMask()) {\n return { incompleteMask: true };\n }\n if (this.editableInput() && this.invalidTimeInput()) {\n return { invalidTime: true };\n }\n\n const value = this.modelValue();\n if (!value) return this.required() ? { required: true } : null;\n\n let min = this.minDate();\n let max = this.maxDate();\n\n const epoch = new Date(1970, 0, 1);\n const valCompare = new Date(epoch);\n valCompare.setHours(value.getHours(), value.getMinutes(), value.getSeconds(), 0);\n if (min) {\n const t = new Date(epoch);\n t.setHours(min.getHours(), min.getMinutes(), min.getSeconds(), 0);\n min = t;\n }\n if (max) {\n const t = new Date(epoch);\n t.setHours(max.getHours(), max.getMinutes(), max.getSeconds(), 0);\n max = t;\n }\n\n if (min && valCompare < min) return { minDate: { min: this.minDate(), actual: value } };\n if (max && valCompare > max) return { maxDate: { max: this.maxDate(), actual: value } };\n\n return null;\n }\n\n /** @inheritdoc */\n setDisabledState(isDisabled: boolean): void {\n this.disabledStatus.set(isDisabled);\n const control = this.effectiveControl();\n if (isDisabled && control.enabled) {\n control.disable({ emitEvent: false });\n } else if (!isDisabled && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n\n /** @description Marks the control as touched when the user leaves the field. */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl().markAsTouched();\n }\n\n /** @description Programmatically clears the selected value, resetting it to `null`. */\n clear(): void {\n this.modelValue.set(null);\n this.lastValue = null;\n this.partialMask.set(false);\n this.invalidTimeInput.set(false);\n this.onChange(null);\n this.effectiveControl().setValue(null, { emitEvent: false });\n this.handleClear.emit();\n }\n\n /**\n * @description\n * Parses the string emitted by InputMask and propagates the resulting Date.\n */\n onMaskedTimeChange(timeStr: string): void {\n if (!timeStr || timeStr.includes('_')) {\n const hasDigits = /\\d/.test(timeStr ?? '');\n this.partialMask.set(hasDigits);\n this.invalidTimeInput.set(false);\n if (!hasDigits && this.modelValue() !== null) {\n this.lastValue = null;\n this.modelValue.set(null);\n this.onChange(null);\n this.effectiveControl().setValue(null, { emitEvent: false });\n this.handleClear.emit();\n }\n return;\n }\n this.partialMask.set(false);\n const parts = timeStr.split(':');\n if (parts.length < 2) return;\n const hours = Number.parseInt(parts[0], 10);\n const minutes = Number.parseInt(parts[1], 10);\n const seconds = parts.length > 2 ? Number.parseInt(parts[2], 10) : 0;\n if (Number.isNaN(hours) || Number.isNaN(minutes) || Number.isNaN(seconds)) return;\n if (hours >= 24 || minutes >= 60 || seconds >= 60) {\n this.invalidTimeInput.set(true);\n this.onChange(null);\n this.effectiveControl().setValue(null, { emitEvent: false });\n return;\n }\n this.invalidTimeInput.set(false);\n const base = this.minDate() || new Date();\n const result = new Date(base);\n result.setHours(hours, minutes, seconds, 0);\n this.lastValue = result;\n this.modelValue.set(result);\n this.onChange(result);\n this.effectiveControl().setValue(result, { emitEvent: false });\n this.effectiveControl().markAsDirty();\n this.handleSelect.emit(result);\n }\n\n /**\n * @description\n * Handles value changes from the hidden spinner overlay in mask+overlay mode.\n */\n onOverlayTimeChange(value: Date | null): void {\n if (value === null) {\n this.clear();\n return;\n }\n if (!(value instanceof Date)) return;\n let finalValue = value;\n if (this.lastValue instanceof Date && finalValue.toDateString() === this.lastValue.toDateString()) {\n finalValue = this.applyTimeCascading(this.lastValue, finalValue);\n }\n const base = this.minDate() || new Date();\n const result = new Date(finalValue);\n result.setFullYear(base.getFullYear(), base.getMonth(), base.getDate());\n this.lastValue = result;\n this.modelValue.set(result);\n this.onChange(result);\n this.effectiveControl().setValue(result, { emitEvent: false });\n this.effectiveControl().markAsDirty();\n this.handleSelect.emit(result);\n }\n\n /**\n * @description\n * Fires when the spinner overlay opens. If no value is selected, auto-commits\n * the time that PrimeNG displays by default (minDate or current time).\n */\n onOverlayShow(): void {\n if (this.modelValue() !== null) return;\n const base = this.minDate() ?? new Date();\n const initial = new Date(base);\n initial.setSeconds(0, 0);\n this.onOverlayTimeChange(initial);\n }\n\n /**\n * @description\n * Adjusts hours or minutes when the spinner rolls over a unit boundary.\n */\n private applyTimeCascading(prev: Date, curr: Date): Date {\n const updated = new Date(curr);\n\n if (prev.getSeconds() === 59 && updated.getSeconds() === 0) {\n updated.setMinutes(updated.getMinutes() + 1);\n } else if (prev.getSeconds() === 0 && updated.getSeconds() === 59) {\n updated.setMinutes(updated.getMinutes() - 1);\n }\n\n if (prev.getMinutes() === 59 && updated.getMinutes() === 0) {\n updated.setHours(updated.getHours() + 1);\n } else if (prev.getMinutes() === 0 && updated.getMinutes() === 59) {\n updated.setHours(updated.getHours() - 1);\n }\n\n return updated;\n }\n}\n","<div class=\"timepicker-container\">\n <p-floatlabel>\n @if (!editableInput()) {\n <!-- Spinners only — no direct typing -->\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onOverlayTimeChange($event)\"\n (onShow)=\"onOverlayShow()\"\n (onBlur)=\"onBlur()\"\n [timeOnly]=\"true\"\n [readonlyInput]=\"true\"\n [showIcon]=\"showIcon()\"\n [showClear]=\"showClear()\"\n [disabled]=\"effectiveDisabled()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\"\n [appendTo]=\"appendTo()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"clock\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n } @else {\n <!-- Direct typing (mask) + clock icon opens spinner overlay -->\n <p-inputmask\n #maskInputRef\n [inputId]=\"uid\"\n [mask]=\"effectiveTimeMask()\"\n [ngModel]=\"maskedTimeValue()\"\n (ngModelChange)=\"onMaskedTimeChange($event)\"\n (onBlur)=\"onBlur()\"\n [disabled]=\"effectiveDisabled()\">\n </p-inputmask>\n @if (showClear() && modelValue() && !effectiveDisabled()) {\n <tk-icon class=\"tk-mask-clear\" icon=\"xmark\" tabindex=\"0\" (click)=\"clear()\" (keydown.enter)=\"clear()\" (keydown.space)=\"clear()\" />\n }\n @if (showIcon()) {\n <span class=\"tk-time-overlay-anchor\" aria-hidden=\"true\">\n <p-datepicker\n iconDisplay=\"input\"\n [showIcon]=\"true\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onOverlayTimeChange($event)\"\n (onShow)=\"onOverlayShow()\"\n [timeOnly]=\"true\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\"\n [appendTo]=\"appendTo()\"\n [disabled]=\"effectiveDisabled()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"clock\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n </span>\n }\n }\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n @if (errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched)) {\n <small class=\"p-error\">{{ errorMessage() }}</small>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -31,10 +31,10 @@ class ToastComponent {
31
31
  return 'circle-info';
32
32
  }
33
33
  }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: ToastComponent, isStandalone: true, selector: "tk-toast", ngImport: i0, template: "<p-toast position=\"bottom-center\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"tk-toast-message tk-toast-{{message.severity || 'info'}}\">\n <!-- Header Row: Icon, Title -->\n <div class=\"tk-toast-header\">\n <div class=\"tk-toast-icon\">\n <tk-icon [icon]=\"getIconForSeverity(message.severity)\" styleIcon=\"solid\"></tk-icon>\n </div>\n\n @if (message.summary) {\n <div class=\"tk-toast-title\">{{message.summary}}</div>\n }\n </div>\n\n <!-- Detail Row -->\n @if (message.detail) {\n <div class=\"tk-toast-detail\">{{message.detail}}</div>\n }\n\n <!-- Action Button Row -->\n @if ((message.severity ?? 'info') === 'info' && message.data?.action) {\n <div class=\"tk-toast-action\">\n <tk-button \n [label]=\"message.data.action.label\" \n severity=\"primary\" \n (clicked)=\"message.data.action.handler()\">\n </tk-button>\n </div>\n }\n </div>\n </ng-template>\n</p-toast>\n", styles: [":host{display:block}::ng-deep .p-toast .p-toast-message{border-radius:var(--tk-borderRadius-s);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}::ng-deep .p-toast .p-toast-message .p-toast-message-content{padding:var(--tk-spacing-base-100)}::ng-deep .p-toast .p-toast-message .tk-toast-message{display:flex;flex-direction:column;align-items:flex-start;gap:var(--tk-spacing-base-50);width:100%}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-header{display:flex;align-items:center;gap:var(--tk-spacing-base-75)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-action{display:flex;align-items:center}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-icon{display:flex;align-items:center;font-size:var(--tk-font-size-base-150)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-title{font-weight:500;font-size:var(--tk-font-size-paragraph-m)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-detail{margin-bottom:var(--tk-spacing-base-50);font-size:var(--tk-font-size-paragraph-s);color:var(--tk-color-base-surface-900, #111827);line-height:1.4}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-icon{color:var(--tk-color-base-sky-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-title{color:var(--tk-color-base-sky-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-action tk-button ::ng-deep button{background-color:var(--tk-color-base-sky-500);color:var(--tk-color-text-inverted);border-color:var(--tk-color-base-sky-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-action tk-button ::ng-deep button:hover{background-color:var(--tk-color-base-sky-700);border-color:var(--tk-color-base-sky-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-success .tk-toast-icon{color:var(--tk-color-base-green-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-success .tk-toast-title{color:var(--tk-color-base-green-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-error .tk-toast-icon{color:var(--tk-color-base-red-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-error .tk-toast-title{color:var(--tk-color-base-red-700)}\n"], dependencies: [{ kind: "ngmodule", type: ToastModule }, { kind: "component", type: i1.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "motionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: ButtonComponent, selector: "tk-button", inputs: ["label", "disabled", "type", "severity", "variant", "link", "icon", "iconPosition", "tooltipText", "size"], outputs: ["clicked"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ToastComponent, isStandalone: true, selector: "tk-toast", ngImport: i0, template: "<p-toast position=\"bottom-center\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"tk-toast-message tk-toast-{{message.severity || 'info'}}\">\n <!-- Header Row: Icon, Title -->\n <div class=\"tk-toast-header\">\n <div class=\"tk-toast-icon\">\n <tk-icon [icon]=\"getIconForSeverity(message.severity)\" styleIcon=\"solid\"></tk-icon>\n </div>\n\n @if (message.summary) {\n <div class=\"tk-toast-title\">{{message.summary}}</div>\n }\n </div>\n\n <!-- Detail Row -->\n @if (message.detail) {\n <div class=\"tk-toast-detail\">{{message.detail}}</div>\n }\n\n <!-- Action Button Row -->\n @if ((message.severity ?? 'info') === 'info' && message.data?.action) {\n <div class=\"tk-toast-action\">\n <tk-button \n [label]=\"message.data.action.label\" \n severity=\"primary\" \n (clicked)=\"message.data.action.handler()\">\n </tk-button>\n </div>\n }\n </div>\n </ng-template>\n</p-toast>\n", styles: [":host{display:block}::ng-deep .p-toast .p-toast-message{border-radius:var(--tk-borderRadius-s);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}::ng-deep .p-toast .p-toast-message .p-toast-message-content{padding:var(--tk-spacing-base-100)}::ng-deep .p-toast .p-toast-message .tk-toast-message{display:flex;flex-direction:column;align-items:flex-start;gap:var(--tk-spacing-base-50);width:100%}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-header{display:flex;align-items:center;gap:var(--tk-spacing-base-75)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-action{display:flex;align-items:center}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-icon{display:flex;align-items:center;font-size:var(--tk-font-size-base-150)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-title{font-weight:500;font-size:var(--tk-font-size-paragraph-m)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-detail{margin-bottom:var(--tk-spacing-base-50);font-size:var(--tk-font-size-paragraph-s);color:var(--tk-color-base-surface-900, #111827);line-height:1.4}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-icon{color:var(--tk-color-base-sky-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-title{color:var(--tk-color-base-sky-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-action tk-button ::ng-deep button{background-color:var(--tk-color-base-sky-500);color:var(--tk-color-text-inverted);border-color:var(--tk-color-base-sky-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-action tk-button ::ng-deep button:hover{background-color:var(--tk-color-base-sky-700);border-color:var(--tk-color-base-sky-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-success .tk-toast-icon{color:var(--tk-color-base-green-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-success .tk-toast-title{color:var(--tk-color-base-green-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-error .tk-toast-icon{color:var(--tk-color-base-red-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-error .tk-toast-title{color:var(--tk-color-base-red-700)}\n"], dependencies: [{ kind: "ngmodule", type: ToastModule }, { kind: "component", type: i1.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "motionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: ButtonComponent, selector: "tk-button", inputs: ["label", "disabled", "type", "severity", "variant", "link", "icon", "iconPosition", "tooltipText", "size"], outputs: ["clicked"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
36
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: ToastComponent, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToastComponent, decorators: [{
38
38
  type: Component,
39
39
  args: [{ selector: 'tk-toast', standalone: true, imports: [ToastModule, ButtonComponent, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-toast position=\"bottom-center\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"tk-toast-message tk-toast-{{message.severity || 'info'}}\">\n <!-- Header Row: Icon, Title -->\n <div class=\"tk-toast-header\">\n <div class=\"tk-toast-icon\">\n <tk-icon [icon]=\"getIconForSeverity(message.severity)\" styleIcon=\"solid\"></tk-icon>\n </div>\n\n @if (message.summary) {\n <div class=\"tk-toast-title\">{{message.summary}}</div>\n }\n </div>\n\n <!-- Detail Row -->\n @if (message.detail) {\n <div class=\"tk-toast-detail\">{{message.detail}}</div>\n }\n\n <!-- Action Button Row -->\n @if ((message.severity ?? 'info') === 'info' && message.data?.action) {\n <div class=\"tk-toast-action\">\n <tk-button \n [label]=\"message.data.action.label\" \n severity=\"primary\" \n (clicked)=\"message.data.action.handler()\">\n </tk-button>\n </div>\n }\n </div>\n </ng-template>\n</p-toast>\n", styles: [":host{display:block}::ng-deep .p-toast .p-toast-message{border-radius:var(--tk-borderRadius-s);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}::ng-deep .p-toast .p-toast-message .p-toast-message-content{padding:var(--tk-spacing-base-100)}::ng-deep .p-toast .p-toast-message .tk-toast-message{display:flex;flex-direction:column;align-items:flex-start;gap:var(--tk-spacing-base-50);width:100%}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-header{display:flex;align-items:center;gap:var(--tk-spacing-base-75)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-action{display:flex;align-items:center}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-icon{display:flex;align-items:center;font-size:var(--tk-font-size-base-150)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-title{font-weight:500;font-size:var(--tk-font-size-paragraph-m)}::ng-deep .p-toast .p-toast-message .tk-toast-message .tk-toast-detail{margin-bottom:var(--tk-spacing-base-50);font-size:var(--tk-font-size-paragraph-s);color:var(--tk-color-base-surface-900, #111827);line-height:1.4}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-icon{color:var(--tk-color-base-sky-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-title{color:var(--tk-color-base-sky-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-action tk-button ::ng-deep button{background-color:var(--tk-color-base-sky-500);color:var(--tk-color-text-inverted);border-color:var(--tk-color-base-sky-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-info .tk-toast-action tk-button ::ng-deep button:hover{background-color:var(--tk-color-base-sky-700);border-color:var(--tk-color-base-sky-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-success .tk-toast-icon{color:var(--tk-color-base-green-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-success .tk-toast-title{color:var(--tk-color-base-green-700)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-error .tk-toast-icon{color:var(--tk-color-base-red-500)}::ng-deep .p-toast .p-toast-message .tk-toast-message.tk-toast-error .tk-toast-title{color:var(--tk-color-base-red-700)}\n"] }]
40
40
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-toast.mjs","sources":["../../../projects/design-system/components/toast/src/toast.component.ts","../../../projects/design-system/components/toast/src/toast.component.html","../../../projects/design-system/components/toast/tekus-design-system-components-toast.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { ToastModule } from 'primeng/toast';\nimport { ButtonComponent } from '@tekus/design-system/components/button';\nimport { IconComponent } from '@tekus/design-system/components/icon';\n\nexport interface TkToastAction {\n label: string;\n handler: () => void;\n}\n\n/**\n * @component ToastComponent\n * @description\n * Custom wrapper around PrimeNG's Toast component to adhere to our Design System.\n * Supports \\`info\\`, \\`success\\`, and \\`error\\` severities.\n * Includes support for a custom action button on the left for \\`info\\` severity.\n * \n * To use this, add \\`<tk-toast></tk-toast>\\` in the root of your application, and then\n * inject \\`MessageService\\` from \\`primeng/api\\` to trigger notifications.\n */\n@Component({\n selector: 'tk-toast',\n standalone: true,\n imports: [ToastModule, ButtonComponent, IconComponent],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastComponent {\n /**\n * Helper function to get the appropriate icon for a given severity.\n */\n getIconForSeverity(severity: string | undefined): string {\n switch (severity) {\n case 'success':\n return 'circle-check';\n case 'error':\n return 'circle-xmark';\n case 'info':\n default:\n return 'circle-info';\n }\n }\n}\n","<p-toast position=\"bottom-center\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"tk-toast-message tk-toast-{{message.severity || 'info'}}\">\n <!-- Header Row: Icon, Title -->\n <div class=\"tk-toast-header\">\n <div class=\"tk-toast-icon\">\n <tk-icon [icon]=\"getIconForSeverity(message.severity)\" styleIcon=\"solid\"></tk-icon>\n </div>\n\n @if (message.summary) {\n <div class=\"tk-toast-title\">{{message.summary}}</div>\n }\n </div>\n\n <!-- Detail Row -->\n @if (message.detail) {\n <div class=\"tk-toast-detail\">{{message.detail}}</div>\n }\n\n <!-- Action Button Row -->\n @if ((message.severity ?? 'info') === 'info' && message.data?.action) {\n <div class=\"tk-toast-action\">\n <tk-button \n [label]=\"message.data.action.label\" \n severity=\"primary\" \n (clicked)=\"message.data.action.handler()\">\n </tk-button>\n </div>\n }\n </div>\n </ng-template>\n</p-toast>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAUA;;;;;;;;;AASG;MASU,cAAc,CAAA;AACzB;;AAEG;AACH,IAAA,kBAAkB,CAAC,QAA4B,EAAA;QAC7C,QAAQ,QAAQ;AACd,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,MAAM;AACX,YAAA;AACE,gBAAA,OAAO,aAAa;;IAE1B;8GAdW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,oEC5B3B,qjCAgCA,EAAA,MAAA,EAAA,CAAA,uvEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDTY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,iMAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK1C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,eAAA,EAGrC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qjCAAA,EAAA,MAAA,EAAA,CAAA,uvEAAA,CAAA,EAAA;;;AE1BjD;;AAEG;;;;"}
1
+ {"version":3,"file":"tekus-design-system-components-toast.mjs","sources":["../../../projects/design-system/components/toast/src/toast.component.ts","../../../projects/design-system/components/toast/src/toast.component.html","../../../projects/design-system/components/toast/tekus-design-system-components-toast.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { ToastModule } from 'primeng/toast';\nimport { ButtonComponent } from '@tekus/design-system/components/button';\nimport { IconComponent } from '@tekus/design-system/components/icon';\n\nexport interface TkToastAction {\n label: string;\n handler: () => void;\n}\n\n/**\n * @component ToastComponent\n * @description\n * Custom wrapper around PrimeNG's Toast component to adhere to our Design System.\n * Supports \\`info\\`, \\`success\\`, and \\`error\\` severities.\n * Includes support for a custom action button on the left for \\`info\\` severity.\n * \n * To use this, add \\`<tk-toast></tk-toast>\\` in the root of your application, and then\n * inject \\`MessageService\\` from \\`primeng/api\\` to trigger notifications.\n */\n@Component({\n selector: 'tk-toast',\n standalone: true,\n imports: [ToastModule, ButtonComponent, IconComponent],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastComponent {\n /**\n * Helper function to get the appropriate icon for a given severity.\n */\n getIconForSeverity(severity: string | undefined): string {\n switch (severity) {\n case 'success':\n return 'circle-check';\n case 'error':\n return 'circle-xmark';\n case 'info':\n default:\n return 'circle-info';\n }\n }\n}\n","<p-toast position=\"bottom-center\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"tk-toast-message tk-toast-{{message.severity || 'info'}}\">\n <!-- Header Row: Icon, Title -->\n <div class=\"tk-toast-header\">\n <div class=\"tk-toast-icon\">\n <tk-icon [icon]=\"getIconForSeverity(message.severity)\" styleIcon=\"solid\"></tk-icon>\n </div>\n\n @if (message.summary) {\n <div class=\"tk-toast-title\">{{message.summary}}</div>\n }\n </div>\n\n <!-- Detail Row -->\n @if (message.detail) {\n <div class=\"tk-toast-detail\">{{message.detail}}</div>\n }\n\n <!-- Action Button Row -->\n @if ((message.severity ?? 'info') === 'info' && message.data?.action) {\n <div class=\"tk-toast-action\">\n <tk-button \n [label]=\"message.data.action.label\" \n severity=\"primary\" \n (clicked)=\"message.data.action.handler()\">\n </tk-button>\n </div>\n }\n </div>\n </ng-template>\n</p-toast>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAUA;;;;;;;;;AASG;MASU,cAAc,CAAA;AACzB;;AAEG;AACH,IAAA,kBAAkB,CAAC,QAA4B,EAAA;QAC7C,QAAQ,QAAQ;AACd,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,MAAM;AACX,YAAA;AACE,gBAAA,OAAO,aAAa;;IAE1B;+GAdW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,oEC5B3B,qjCAgCA,EAAA,MAAA,EAAA,CAAA,uvEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDTY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,iMAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAK1C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,eAAA,EAGrC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qjCAAA,EAAA,MAAA,EAAA,CAAA,uvEAAA,CAAA,EAAA;;;AE1BjD;;AAEG;;;;"}
@@ -79,10 +79,10 @@ class ToggleComponent {
79
79
  this.onTouched();
80
80
  this.effectiveControl.markAsTouched();
81
81
  }
82
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: ToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
83
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: ToggleComponent, isStandalone: true, selector: "tk-toggle", inputs: { model: { classPropertyName: "model", publicName: "model", 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-toggle-wrapper\">\n <div class=\"tk-toggle-group\" [class.tk-disabled]=\"disabled()\">\n <p-toggleswitch\n [inputId]=\"inputId()\"\n [name]=\"name()\"\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 (blur)=\"onBlur()\">\n </p-toggleswitch>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-toggle-label\">{{ label() }}</label>\n }\n </div>\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-toggle-wrapper{display:flex;flex-direction:column}:host ::ng-deep .tk-toggle-wrapper label{font-size:var(--tk-font-size-paragraph-s, .875rem);font-weight:var(--tk-font-weight-400, \"Regular\")}:host ::ng-deep .tk-toggle-group{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}:host ::ng-deep .tk-toggle-group.tk-disabled label{color:var(--tk-color-base-surface-600, #424243)}:host ::ng-deep .tk-toggle-label{cursor:pointer}: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-toggleswitch.ng-invalid.ng-touched .p-toggleswitch,:host ::ng-deep p-toggleswitch.ng-invalid.ng-dirty .p-toggleswitch{outline:2px solid var(--tk-color-base-red-700, #cf2604);outline-offset:2px;border-radius:var(--p-toggleswitch-border-radius)}\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: ToggleSwitchModule }, { kind: "component", type: i2.ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { 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 }); }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
83
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ToggleComponent, isStandalone: true, selector: "tk-toggle", inputs: { model: { classPropertyName: "model", publicName: "model", 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-toggle-wrapper\">\n <div class=\"tk-toggle-group\" [class.tk-disabled]=\"disabled()\">\n <p-toggleswitch\n [inputId]=\"inputId()\"\n [name]=\"name()\"\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 (blur)=\"onBlur()\">\n </p-toggleswitch>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-toggle-label\">{{ label() }}</label>\n }\n </div>\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-toggle-wrapper{display:flex;flex-direction:column}:host ::ng-deep .tk-toggle-wrapper label{font-size:var(--tk-font-size-paragraph-s, .875rem);font-weight:var(--tk-font-weight-400, \"Regular\")}:host ::ng-deep .tk-toggle-group{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}:host ::ng-deep .tk-toggle-group.tk-disabled label{color:var(--tk-color-base-surface-600, #424243)}:host ::ng-deep .tk-toggle-label{cursor:pointer}: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-toggleswitch.ng-invalid.ng-touched .p-toggleswitch,:host ::ng-deep p-toggleswitch.ng-invalid.ng-dirty .p-toggleswitch{outline:2px solid var(--tk-color-base-red-700, #cf2604);outline-offset:2px;border-radius:var(--p-toggleswitch-border-radius)}\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: ToggleSwitchModule }, { kind: "component", type: i2.ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { 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 }); }
84
84
  }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: ToggleComponent, decorators: [{
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToggleComponent, decorators: [{
86
86
  type: Component,
87
87
  args: [{ selector: 'tk-toggle', imports: [ReactiveFormsModule, FormsModule, ToggleSwitchModule, MessageModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tk-toggle-wrapper\">\n <div class=\"tk-toggle-group\" [class.tk-disabled]=\"disabled()\">\n <p-toggleswitch\n [inputId]=\"inputId()\"\n [name]=\"name()\"\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 (blur)=\"onBlur()\">\n </p-toggleswitch>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-toggle-label\">{{ label() }}</label>\n }\n </div>\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-toggle-wrapper{display:flex;flex-direction:column}:host ::ng-deep .tk-toggle-wrapper label{font-size:var(--tk-font-size-paragraph-s, .875rem);font-weight:var(--tk-font-weight-400, \"Regular\")}:host ::ng-deep .tk-toggle-group{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}:host ::ng-deep .tk-toggle-group.tk-disabled label{color:var(--tk-color-base-surface-600, #424243)}:host ::ng-deep .tk-toggle-label{cursor:pointer}: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-toggleswitch.ng-invalid.ng-touched .p-toggleswitch,:host ::ng-deep p-toggleswitch.ng-invalid.ng-dirty .p-toggleswitch{outline:2px solid var(--tk-color-base-red-700, #cf2604);outline-offset:2px;border-radius:var(--p-toggleswitch-border-radius)}\n"] }]
88
88
  }], ctorParameters: () => [], propDecorators: { model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: false }] }, { type: i0.Output, args: ["modelChange"] }], 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"] }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-toggle.mjs","sources":["../../../projects/design-system/components/toggle/src/toggle.component.ts","../../../projects/design-system/components/toggle/src/toggle.component.html","../../../projects/design-system/components/toggle/tekus-design-system-components-toggle.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 { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'tk-toggle',\n imports: [ReactiveFormsModule, FormsModule, ToggleSwitchModule, MessageModule],\n templateUrl: './toggle.component.html',\n styleUrl: './toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToggleComponent implements ControlValueAccessor, OnInit {\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n model = model<boolean>(false);\n\n label = input<string>('');\n\n name = input<string>('');\n\n inputId = input<string>('');\n\n control = input<FormControl>(new FormControl());\n\n errorMessage = input<string>('');\n\n disabled = model<boolean>(false);\n\n get effectiveControl(): FormControl {\n return (this.ngControl?.control as FormControl) || this.control();\n }\n\n onChange: (value: boolean) => void = () => {};\n onTouched: () => void = () => {};\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 writeValue(value: boolean): void {\n this.model.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n if (isDisabled) {\n this.control().disable({ emitEvent: false });\n } else {\n this.control().enable({ emitEvent: false });\n }\n }\n\n onModelChange(value: boolean): void {\n this.model.set(value);\n this.onChange(value);\n this.effectiveControl.setValue(value, { emitEvent: false });\n this.effectiveControl.markAsDirty();\n this.onTouched();\n }\n\n onBlur(): void {\n this.onTouched();\n this.effectiveControl.markAsTouched();\n }\n}\n","<div class=\"tk-toggle-wrapper\">\n <div class=\"tk-toggle-group\" [class.tk-disabled]=\"disabled()\">\n <p-toggleswitch\n [inputId]=\"inputId()\"\n [name]=\"name()\"\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 (blur)=\"onBlur()\">\n </p-toggleswitch>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-toggle-label\">{{ label() }}</label>\n }\n </div>\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-toggle.mjs","sources":["../../../projects/design-system/components/toggle/src/toggle.component.ts","../../../projects/design-system/components/toggle/src/toggle.component.html","../../../projects/design-system/components/toggle/tekus-design-system-components-toggle.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 { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'tk-toggle',\n imports: [ReactiveFormsModule, FormsModule, ToggleSwitchModule, MessageModule],\n templateUrl: './toggle.component.html',\n styleUrl: './toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToggleComponent implements ControlValueAccessor, OnInit {\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n model = model<boolean>(false);\n\n label = input<string>('');\n\n name = input<string>('');\n\n inputId = input<string>('');\n\n control = input<FormControl>(new FormControl());\n\n errorMessage = input<string>('');\n\n disabled = model<boolean>(false);\n\n get effectiveControl(): FormControl {\n return (this.ngControl?.control as FormControl) || this.control();\n }\n\n onChange: (value: boolean) => void = () => {};\n onTouched: () => void = () => {};\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 writeValue(value: boolean): void {\n this.model.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n if (isDisabled) {\n this.control().disable({ emitEvent: false });\n } else {\n this.control().enable({ emitEvent: false });\n }\n }\n\n onModelChange(value: boolean): void {\n this.model.set(value);\n this.onChange(value);\n this.effectiveControl.setValue(value, { emitEvent: false });\n this.effectiveControl.markAsDirty();\n this.onTouched();\n }\n\n onBlur(): void {\n this.onTouched();\n this.effectiveControl.markAsTouched();\n }\n}\n","<div class=\"tk-toggle-wrapper\">\n <div class=\"tk-toggle-group\" [class.tk-disabled]=\"disabled()\">\n <p-toggleswitch\n [inputId]=\"inputId()\"\n [name]=\"name()\"\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 (blur)=\"onBlur()\">\n </p-toggleswitch>\n @if (label()) {\n <label [for]=\"inputId()\" class=\"tk-toggle-label\">{{ label() }}</label>\n }\n </div>\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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"}
@@ -178,12 +178,12 @@ class ToolbarComponent {
178
178
  onReload() {
179
179
  this.reload.emit();
180
180
  }
181
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: ToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
182
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: ToolbarComponent, isStandalone: true, selector: "tk-toolbar", inputs: { searchModel: { classPropertyName: "searchModel", publicName: "searchModel", isSignal: true, isRequired: false, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, filterOptionLabel: { classPropertyName: "filterOptionLabel", publicName: "filterOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, filterFloatLabel: { classPropertyName: "filterFloatLabel", publicName: "filterFloatLabel", isSignal: true, isRequired: false, transformFunction: null }, searchFloatLabel: { classPropertyName: "searchFloatLabel", publicName: "searchFloatLabel", isSignal: true, isRequired: false, transformFunction: null }, searchVisible: { classPropertyName: "searchVisible", publicName: "searchVisible", isSignal: true, isRequired: false, transformFunction: null }, filterVisible: { classPropertyName: "filterVisible", publicName: "filterVisible", isSignal: true, isRequired: false, transformFunction: null }, reloadVisible: { classPropertyName: "reloadVisible", publicName: "reloadVisible", isSignal: true, isRequired: false, transformFunction: null }, reloadInterval: { classPropertyName: "reloadInterval", publicName: "reloadInterval", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchModel: "searchModelChange", filterModel: "filterModelChange", reload: "reload" }, ngImport: i0, template: "<div class=\"toolbar\">\n @if (showSearchInput() && searchVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n @if (showFilterSelect() && filterVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-select\n [options]=\"filterOptions()\"\n [optionLabel]=\"filterOptionLabel()\"\n [label]=\"filterFloatLabel()\"\n (modelChange)=\"onSelectedOption($event ?? null)\">\n </tk-select>\n </div>\n }\n <div class=\"toolbar__buttons\">\n @if (searchVisible()) {\n <tk-button\n [icon]=\"'magnifying-glass'\"\n severity=\"secondary\"\n [variant]=\"!showSearchInput() ? 'outlined' : undefined\"\n (clicked)=\"toggleSearchInput()\">\n </tk-button>\n }\n @if (filterVisible()) {\n <tk-button\n [icon]=\"'filter'\"\n severity=\"secondary\"\n [variant]=\"!showFilterSelect() ? 'outlined' : undefined\"\n (clicked)=\"toggleFilterSelect()\">\n </tk-button>\n }\n @if (reloadVisible()) {\n <tk-button\n class=\"toolbar__reload-btn\"\n [class.toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n </div>\n</div>\n", styles: [".toolbar{display:flex;justify-content:end;flex-wrap:wrap;gap:var(--tk-spacing-base-50, .5rem);row-gap:var(--tk-spacing-base-150, 1.5rem)}.toolbar__input-container{width:15rem}.toolbar__buttons{display:flex;gap:var(--tk-spacing-base-50, .5rem);margin-top:var(--tk-spacing-base-50, .5rem)}.toolbar__reload-btn{border-radius:var(--tk-borderRadius-s, 8px)!important;position:relative}.toolbar__reload-btn--animating:before{content:\"\";position:absolute;inset:-2px;background:conic-gradient(var(--tk-color-base-sky-300, #92bada) var(--progress, 0%),transparent var(--progress, 0%));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:2px;border-radius:inherit;animation:draw-border var(--reload-interval, 5s) infinite linear;pointer-events:none}.toolbar__reload-btn--spinning ::ng-deep tk-icon{display:inline-block;animation:spin 1s infinite linear}@media(max-width:768px){.toolbar{justify-content:flex-start}}@property --progress{syntax: \"<percentage>\"; inherits: false; initial-value: 0%;}@keyframes draw-border{0%{--progress: 0%}to{--progress: 100%}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host ::ng-deep .tk-input-bottom{display:none}:host ::ng-deep .p-button-outlined{border:1px solid transparent!important}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "tk-button", inputs: ["label", "disabled", "type", "severity", "variant", "link", "icon", "iconPosition", "tooltipText", "size"], outputs: ["clicked"] }, { kind: "component", type: InputTextComponent, selector: "tk-input-text", inputs: ["value", "control", "label", "type", "id", "icon", "clearable", "errorMessage", "hint", "maxLength"], outputs: ["valueChange"] }, { kind: "component", type: SelectComponent, selector: "tk-select", inputs: ["id", "control", "options", "dataSource", "optionLabel", "label", "showClear", "disabled", "errorMessage", "hint", "filter", "placeholder", "loading", "fetchParams", "sortField", "sortOrder", "model", "emptyMessage", "emptyFilterMessage"], outputs: ["dataSourceChange", "modelChange", "filterChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
181
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
182
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ToolbarComponent, isStandalone: true, selector: "tk-toolbar", inputs: { searchModel: { classPropertyName: "searchModel", publicName: "searchModel", isSignal: true, isRequired: false, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, filterOptionLabel: { classPropertyName: "filterOptionLabel", publicName: "filterOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, filterFloatLabel: { classPropertyName: "filterFloatLabel", publicName: "filterFloatLabel", isSignal: true, isRequired: false, transformFunction: null }, searchFloatLabel: { classPropertyName: "searchFloatLabel", publicName: "searchFloatLabel", isSignal: true, isRequired: false, transformFunction: null }, searchVisible: { classPropertyName: "searchVisible", publicName: "searchVisible", isSignal: true, isRequired: false, transformFunction: null }, filterVisible: { classPropertyName: "filterVisible", publicName: "filterVisible", isSignal: true, isRequired: false, transformFunction: null }, reloadVisible: { classPropertyName: "reloadVisible", publicName: "reloadVisible", isSignal: true, isRequired: false, transformFunction: null }, reloadInterval: { classPropertyName: "reloadInterval", publicName: "reloadInterval", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchModel: "searchModelChange", filterModel: "filterModelChange", reload: "reload" }, ngImport: i0, template: "<div class=\"toolbar\">\n @if (showSearchInput() && searchVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n @if (showFilterSelect() && filterVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-select\n [options]=\"filterOptions()\"\n [optionLabel]=\"filterOptionLabel()\"\n [label]=\"filterFloatLabel()\"\n (modelChange)=\"onSelectedOption($event ?? null)\">\n </tk-select>\n </div>\n }\n <div class=\"toolbar__buttons\">\n @if (searchVisible()) {\n <tk-button\n [icon]=\"'magnifying-glass'\"\n severity=\"secondary\"\n [variant]=\"!showSearchInput() ? 'outlined' : undefined\"\n (clicked)=\"toggleSearchInput()\">\n </tk-button>\n }\n @if (filterVisible()) {\n <tk-button\n [icon]=\"'filter'\"\n severity=\"secondary\"\n [variant]=\"!showFilterSelect() ? 'outlined' : undefined\"\n (clicked)=\"toggleFilterSelect()\">\n </tk-button>\n }\n @if (reloadVisible()) {\n <tk-button\n class=\"toolbar__reload-btn\"\n [class.toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n </div>\n</div>\n", styles: [".toolbar{display:flex;justify-content:end;flex-wrap:wrap;gap:var(--tk-spacing-base-50, .5rem);row-gap:var(--tk-spacing-base-150, 1.5rem)}.toolbar__input-container{width:15rem}.toolbar__buttons{display:flex;gap:var(--tk-spacing-base-50, .5rem);margin-top:var(--tk-spacing-base-50, .5rem)}.toolbar__reload-btn{border-radius:var(--tk-borderRadius-s, 8px)!important;position:relative}.toolbar__reload-btn--animating:before{content:\"\";position:absolute;inset:0;z-index:1;background:conic-gradient(var(--tk-color-base-sky-300, #92bada) var(--progress, 0%),transparent var(--progress, 0%));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:3px;border-radius:inherit;animation:draw-border var(--reload-interval, 5s) infinite linear;pointer-events:none}.toolbar__reload-btn--spinning ::ng-deep tk-icon{display:inline-block;animation:spin 1s infinite linear}@media(max-width:768px){.toolbar{justify-content:flex-start}}@property --progress{syntax: \"<percentage>\"; inherits: false; initial-value: 0%;}@keyframes draw-border{0%{--progress: 0%}to{--progress: 100%}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host ::ng-deep .tk-input-bottom{display:none}:host ::ng-deep .p-button-outlined{border:1px solid transparent!important}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "tk-button", inputs: ["label", "disabled", "type", "severity", "variant", "link", "icon", "iconPosition", "tooltipText", "size"], outputs: ["clicked"] }, { kind: "component", type: InputTextComponent, selector: "tk-input-text", inputs: ["value", "control", "label", "type", "id", "icon", "clearable", "errorMessage", "hint", "maxLength"], outputs: ["valueChange"] }, { kind: "component", type: SelectComponent, selector: "tk-select", inputs: ["id", "control", "options", "dataSource", "optionLabel", "label", "showClear", "disabled", "errorMessage", "hint", "filter", "placeholder", "loading", "fetchParams", "sortField", "sortOrder", "model", "emptyMessage", "emptyFilterMessage"], outputs: ["dataSourceChange", "modelChange", "filterChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
183
183
  }
184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: ToolbarComponent, decorators: [{
184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToolbarComponent, decorators: [{
185
185
  type: Component,
186
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'tk-toolbar', imports: [ButtonComponent, InputTextComponent, SelectComponent], template: "<div class=\"toolbar\">\n @if (showSearchInput() && searchVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n @if (showFilterSelect() && filterVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-select\n [options]=\"filterOptions()\"\n [optionLabel]=\"filterOptionLabel()\"\n [label]=\"filterFloatLabel()\"\n (modelChange)=\"onSelectedOption($event ?? null)\">\n </tk-select>\n </div>\n }\n <div class=\"toolbar__buttons\">\n @if (searchVisible()) {\n <tk-button\n [icon]=\"'magnifying-glass'\"\n severity=\"secondary\"\n [variant]=\"!showSearchInput() ? 'outlined' : undefined\"\n (clicked)=\"toggleSearchInput()\">\n </tk-button>\n }\n @if (filterVisible()) {\n <tk-button\n [icon]=\"'filter'\"\n severity=\"secondary\"\n [variant]=\"!showFilterSelect() ? 'outlined' : undefined\"\n (clicked)=\"toggleFilterSelect()\">\n </tk-button>\n }\n @if (reloadVisible()) {\n <tk-button\n class=\"toolbar__reload-btn\"\n [class.toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n </div>\n</div>\n", styles: [".toolbar{display:flex;justify-content:end;flex-wrap:wrap;gap:var(--tk-spacing-base-50, .5rem);row-gap:var(--tk-spacing-base-150, 1.5rem)}.toolbar__input-container{width:15rem}.toolbar__buttons{display:flex;gap:var(--tk-spacing-base-50, .5rem);margin-top:var(--tk-spacing-base-50, .5rem)}.toolbar__reload-btn{border-radius:var(--tk-borderRadius-s, 8px)!important;position:relative}.toolbar__reload-btn--animating:before{content:\"\";position:absolute;inset:-2px;background:conic-gradient(var(--tk-color-base-sky-300, #92bada) var(--progress, 0%),transparent var(--progress, 0%));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:2px;border-radius:inherit;animation:draw-border var(--reload-interval, 5s) infinite linear;pointer-events:none}.toolbar__reload-btn--spinning ::ng-deep tk-icon{display:inline-block;animation:spin 1s infinite linear}@media(max-width:768px){.toolbar{justify-content:flex-start}}@property --progress{syntax: \"<percentage>\"; inherits: false; initial-value: 0%;}@keyframes draw-border{0%{--progress: 0%}to{--progress: 100%}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host ::ng-deep .tk-input-bottom{display:none}:host ::ng-deep .p-button-outlined{border:1px solid transparent!important}\n"] }]
186
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'tk-toolbar', imports: [ButtonComponent, InputTextComponent, SelectComponent], template: "<div class=\"toolbar\">\n @if (showSearchInput() && searchVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n @if (showFilterSelect() && filterVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-select\n [options]=\"filterOptions()\"\n [optionLabel]=\"filterOptionLabel()\"\n [label]=\"filterFloatLabel()\"\n (modelChange)=\"onSelectedOption($event ?? null)\">\n </tk-select>\n </div>\n }\n <div class=\"toolbar__buttons\">\n @if (searchVisible()) {\n <tk-button\n [icon]=\"'magnifying-glass'\"\n severity=\"secondary\"\n [variant]=\"!showSearchInput() ? 'outlined' : undefined\"\n (clicked)=\"toggleSearchInput()\">\n </tk-button>\n }\n @if (filterVisible()) {\n <tk-button\n [icon]=\"'filter'\"\n severity=\"secondary\"\n [variant]=\"!showFilterSelect() ? 'outlined' : undefined\"\n (clicked)=\"toggleFilterSelect()\">\n </tk-button>\n }\n @if (reloadVisible()) {\n <tk-button\n class=\"toolbar__reload-btn\"\n [class.toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n </div>\n</div>\n", styles: [".toolbar{display:flex;justify-content:end;flex-wrap:wrap;gap:var(--tk-spacing-base-50, .5rem);row-gap:var(--tk-spacing-base-150, 1.5rem)}.toolbar__input-container{width:15rem}.toolbar__buttons{display:flex;gap:var(--tk-spacing-base-50, .5rem);margin-top:var(--tk-spacing-base-50, .5rem)}.toolbar__reload-btn{border-radius:var(--tk-borderRadius-s, 8px)!important;position:relative}.toolbar__reload-btn--animating:before{content:\"\";position:absolute;inset:0;z-index:1;background:conic-gradient(var(--tk-color-base-sky-300, #92bada) var(--progress, 0%),transparent var(--progress, 0%));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:3px;border-radius:inherit;animation:draw-border var(--reload-interval, 5s) infinite linear;pointer-events:none}.toolbar__reload-btn--spinning ::ng-deep tk-icon{display:inline-block;animation:spin 1s infinite linear}@media(max-width:768px){.toolbar{justify-content:flex-start}}@property --progress{syntax: \"<percentage>\"; inherits: false; initial-value: 0%;}@keyframes draw-border{0%{--progress: 0%}to{--progress: 100%}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host ::ng-deep .tk-input-bottom{display:none}:host ::ng-deep .p-button-outlined{border:1px solid transparent!important}\n"] }]
187
187
  }], ctorParameters: () => [], propDecorators: { searchModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchModel", required: false }] }, { type: i0.Output, args: ["searchModelChange"] }], filterModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterModel", required: false }] }, { type: i0.Output, args: ["filterModelChange"] }], filterOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptions", required: false }] }], filterOptionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptionLabel", required: false }] }], filterFloatLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterFloatLabel", required: false }] }], searchFloatLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFloatLabel", required: false }] }], searchVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchVisible", required: false }] }], filterVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterVisible", required: false }] }], reloadVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "reloadVisible", required: false }] }], reloadInterval: [{ type: i0.Input, args: [{ isSignal: true, alias: "reloadInterval", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], reload: [{ type: i0.Output, args: ["reload"] }] } });
188
188
 
189
189
  /**