@ngneers/controls 0.0.1-pre6 → 0.0.1-pre7

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 (148) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +10 -10
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-api-ng.mjs +12 -9
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
  5. package/fesm2022/ngneers-controls-avatar.mjs +6 -6
  6. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
  7. package/fesm2022/ngneers-controls-base.mjs +9 -9
  8. package/fesm2022/ngneers-controls-base.mjs.map +1 -1
  9. package/fesm2022/ngneers-controls-breadcrumb.mjs +7 -7
  10. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-button-group.mjs +3 -3
  12. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-button.mjs +6 -6
  14. package/fesm2022/ngneers-controls-button.mjs.map +1 -1
  15. package/fesm2022/{ngneers-controls-calendar-time-Bzlv9Vkn.mjs → ngneers-controls-calendar-time-CKAqRgOP.mjs} +4 -4
  16. package/fesm2022/{ngneers-controls-calendar-time-Bzlv9Vkn.mjs.map → ngneers-controls-calendar-time-CKAqRgOP.mjs.map} +1 -1
  17. package/fesm2022/ngneers-controls-calendar.mjs +11 -11
  18. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  19. package/fesm2022/ngneers-controls-checkbox.mjs +4 -4
  20. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-chip.mjs +4 -4
  22. package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-default-icons.mjs +61 -0
  24. package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
  25. package/fesm2022/ngneers-controls-defer.mjs +3 -3
  26. package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
  27. package/fesm2022/ngneers-controls-dialog.mjs +10 -10
  28. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-directives.mjs +21 -21
  30. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-drawer.mjs +7 -7
  32. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-edit-inplace.mjs +7 -7
  34. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-filter.mjs +4 -4
  36. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  37. package/fesm2022/ngneers-controls-i18n.mjs +3 -3
  38. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
  39. package/fesm2022/ngneers-controls-icon.mjs +108 -44
  40. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  41. package/fesm2022/ngneers-controls-inplace.mjs +6 -6
  42. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
  43. package/fesm2022/ngneers-controls-input-field.mjs +5 -5
  44. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-input-mask.mjs +3 -3
  46. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-input.mjs +3 -3
  48. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-item-view.mjs +6 -6
  50. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
  51. package/fesm2022/ngneers-controls-list-box.mjs +6 -6
  52. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-menu.mjs +10 -10
  54. package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-message.mjs +3 -3
  56. package/fesm2022/ngneers-controls-message.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-paginator.mjs +4 -4
  58. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-popover.mjs +11 -6
  60. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-progress.mjs +3 -3
  62. package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
  63. package/fesm2022/ngneers-controls-scroll-shadow.mjs +54 -0
  64. package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
  65. package/fesm2022/ngneers-controls-scroller.mjs +9 -9
  66. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-select-button.mjs +4 -4
  68. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-select.mjs +8 -7
  70. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  71. package/fesm2022/ngneers-controls-slider.mjs +3 -3
  72. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-spinner.mjs +3 -3
  74. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-splitter.mjs +10 -10
  76. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
  77. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  78. package/fesm2022/ngneers-controls-switch.mjs.map +1 -1
  79. package/fesm2022/ngneers-controls-table.mjs +227 -293
  80. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  81. package/fesm2022/ngneers-controls-tabs.mjs +10 -10
  82. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  83. package/fesm2022/ngneers-controls-tag.mjs +3 -3
  84. package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
  85. package/fesm2022/ngneers-controls-toast.mjs +10 -10
  86. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  87. package/fesm2022/ngneers-controls-toggle-button.mjs +4 -4
  88. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  89. package/fesm2022/ngneers-controls-tooltip.mjs +44 -8
  90. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  91. package/fesm2022/ngneers-controls-utils-ng.mjs +3 -3
  92. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
  93. package/fesm2022/ngneers-controls-utils.mjs +1 -1
  94. package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
  95. package/package.json +29 -11
  96. package/types/ngneers-controls-accordion.d.ts +6 -4
  97. package/types/ngneers-controls-api-ng.d.ts +5 -0
  98. package/types/ngneers-controls-api.d.ts +2 -2
  99. package/types/ngneers-controls-breadcrumb.d.ts +5 -3
  100. package/types/ngneers-controls-checkbox.d.ts +5 -3
  101. package/types/ngneers-controls-chip.d.ts +3 -1
  102. package/types/ngneers-controls-default-icons.d.ts +5 -0
  103. package/types/ngneers-controls-drawer.d.ts +3 -1
  104. package/types/ngneers-controls-filter.d.ts +1 -1
  105. package/types/ngneers-controls-icon.d.ts +23 -40
  106. package/types/ngneers-controls-input-field.d.ts +3 -1
  107. package/types/ngneers-controls-item-view.d.ts +4 -2
  108. package/types/ngneers-controls-menu.d.ts +3 -1
  109. package/types/ngneers-controls-message.d.ts +3 -1
  110. package/types/ngneers-controls-popover.d.ts +1 -0
  111. package/types/ngneers-controls-scroll-shadow.d.ts +16 -0
  112. package/types/ngneers-controls-select.d.ts +5 -10
  113. package/types/ngneers-controls-table.d.ts +29 -41
  114. package/types/ngneers-controls-tabs.d.ts +4 -2
  115. package/types/ngneers-controls-tag.d.ts +3 -1
  116. package/types/ngneers-controls-toast.d.ts +4 -2
  117. package/types/ngneers-controls-toggle-button.d.ts +5 -3
  118. package/types/ngneers-controls-tooltip.d.ts +7 -1
  119. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +0 -4
  120. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +0 -1
  121. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +0 -4
  122. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +0 -1
  123. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +0 -4
  124. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +0 -1
  125. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +0 -4
  126. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +0 -1
  127. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +0 -4
  128. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +0 -1
  129. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +0 -4
  130. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +0 -1
  131. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +0 -4
  132. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +0 -1
  133. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +0 -4
  134. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +0 -1
  135. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +0 -4
  136. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +0 -1
  137. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +0 -4
  138. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +0 -1
  139. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +0 -4
  140. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +0 -1
  141. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +0 -4
  142. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +0 -1
  143. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +0 -4
  144. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +0 -1
  145. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +0 -4
  146. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +0 -1
  147. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +0 -4
  148. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-calendar-time-Bzlv9Vkn.mjs","sources":["../../src/calendar/time/time.ts","../../src/calendar/time/time.html"],"sourcesContent":["import { Component, computed, inject, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { Platform } from '@ngneers/controls/api/ng';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnInput } from '@ngneers/controls/input';\r\nimport { MASKS, NgnInputMask } from '@ngneers/controls/input-mask';\r\n\r\nimport type { NgnBaseSafe } from '@ngneers/controls/base';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar-time',\r\n templateUrl: './time.html',\r\n imports: [NgnInput, NgnInputMask],\r\n})\r\nexport class CalendarTime {\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly isTouchDevice = inject(Platform).isTouchDevice();\r\n\r\n public readonly component = input.required<NgnBaseSafe<'calendar'>>();\r\n public readonly currentValue = input.required<Date | null>();\r\n public readonly showSeconds = input.required<boolean>();\r\n public readonly timeChange = output<Date | null>();\r\n public readonly mask = computed(() => (this.showSeconds() ? MASKS.timeSeconds : MASKS.time));\r\n\r\n protected readonly value = computed(() => {\r\n const currentValue = this.currentValue();\r\n if (!currentValue) return null;\r\n\r\n function padZero(num: number): string {\r\n return num < 10 ? `0${num}` : `${num}`;\r\n }\r\n\r\n const hours = padZero(currentValue.getHours());\r\n const minutes = padZero(currentValue.getMinutes());\r\n const seconds = padZero(currentValue.getSeconds());\r\n\r\n return this.showSeconds() ? `${hours}:${minutes}:${seconds}` : `${hours}:${minutes}`;\r\n });\r\n\r\n protected onValueChange(value: string) {\r\n const [hours, minutes, seconds] = value.split(':').map(Number);\r\n\r\n if (hours === undefined || minutes === undefined) {\r\n throw new Error(`Invalid time value: ${value}`);\r\n }\r\n\r\n if (isNaN(hours)) {\r\n this.timeChange.emit(null);\r\n }\r\n\r\n const fixedMinutes = isNaN(minutes) ? 0 : minutes;\r\n\r\n const currentDate = this.currentValue();\r\n const newDate = new Date(currentDate || new Date());\r\n newDate.setHours(hours);\r\n newDate.setMinutes(fixedMinutes);\r\n\r\n if (this.showSeconds()) {\r\n const fixedSeconds = isNaN(seconds ?? 0) ? 0 : (seconds ?? 0);\r\n newDate.setSeconds(fixedSeconds);\r\n } else {\r\n newDate.setSeconds(0);\r\n }\r\n\r\n if (\r\n newDate.getMinutes() !== currentDate?.getMinutes() ||\r\n newDate.getHours() !== currentDate?.getHours() ||\r\n (this.showSeconds() && newDate.getSeconds() !== currentDate?.getSeconds())\r\n ) {\r\n this.timeChange.emit(newDate);\r\n }\r\n }\r\n}\r\n","<div>\r\n @if (isTouchDevice) {\r\n <input\r\n type=\"time\"\r\n ngnInput\r\n [step]=\"showSeconds() ? 1 : 60\"\r\n [value]=\"value()\"\r\n (valueChange)=\"onValueChange($event || '')\"\r\n />\r\n } @else {\r\n <ngn-input-mask [mask]=\"mask()\">\r\n <input\r\n #input\r\n ngnInput\r\n type=\"text\"\r\n [value]=\"value()\"\r\n (blur)=\"onValueChange(input.value || '')\"\r\n />\r\n </ngn-input-mask>\r\n }\r\n</div>\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-calendar-time-CKAqRgOP.mjs","sources":["../../src/calendar/time/time.ts","../../src/calendar/time/time.html"],"sourcesContent":["import { Component, computed, inject, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { Platform } from '@ngneers/controls/api/ng';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnInput } from '@ngneers/controls/input';\r\nimport { MASKS, NgnInputMask } from '@ngneers/controls/input-mask';\r\n\r\nimport type { NgnBaseSafe } from '@ngneers/controls/base';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar-time',\r\n templateUrl: './time.html',\r\n imports: [NgnInput, NgnInputMask],\r\n})\r\nexport class CalendarTime {\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly isTouchDevice = inject(Platform).isTouchDevice();\r\n\r\n public readonly component = input.required<NgnBaseSafe<'calendar'>>();\r\n public readonly currentValue = input.required<Date | null>();\r\n public readonly showSeconds = input.required<boolean>();\r\n public readonly timeChange = output<Date | null>();\r\n public readonly mask = computed(() => (this.showSeconds() ? MASKS.timeSeconds : MASKS.time));\r\n\r\n protected readonly value = computed(() => {\r\n const currentValue = this.currentValue();\r\n if (!currentValue) return null;\r\n\r\n function padZero(num: number): string {\r\n return num < 10 ? `0${num}` : `${num}`;\r\n }\r\n\r\n const hours = padZero(currentValue.getHours());\r\n const minutes = padZero(currentValue.getMinutes());\r\n const seconds = padZero(currentValue.getSeconds());\r\n\r\n return this.showSeconds() ? `${hours}:${minutes}:${seconds}` : `${hours}:${minutes}`;\r\n });\r\n\r\n protected onValueChange(value: string) {\r\n const [hours, minutes, seconds] = value.split(':').map(Number);\r\n\r\n if (hours === undefined || minutes === undefined) {\r\n throw new Error(`Invalid time value: ${value}`);\r\n }\r\n\r\n if (isNaN(hours)) {\r\n this.timeChange.emit(null);\r\n }\r\n\r\n const fixedMinutes = isNaN(minutes) ? 0 : minutes;\r\n\r\n const currentDate = this.currentValue();\r\n const newDate = new Date(currentDate || new Date());\r\n newDate.setHours(hours);\r\n newDate.setMinutes(fixedMinutes);\r\n\r\n if (this.showSeconds()) {\r\n const fixedSeconds = isNaN(seconds ?? 0) ? 0 : (seconds ?? 0);\r\n newDate.setSeconds(fixedSeconds);\r\n } else {\r\n newDate.setSeconds(0);\r\n }\r\n\r\n if (\r\n newDate.getMinutes() !== currentDate?.getMinutes() ||\r\n newDate.getHours() !== currentDate?.getHours() ||\r\n (this.showSeconds() && newDate.getSeconds() !== currentDate?.getSeconds())\r\n ) {\r\n this.timeChange.emit(newDate);\r\n }\r\n }\r\n}\r\n","<div>\r\n @if (isTouchDevice) {\r\n <input\r\n type=\"time\"\r\n ngnInput\r\n [step]=\"showSeconds() ? 1 : 60\"\r\n [value]=\"value()\"\r\n (valueChange)=\"onValueChange($event || '')\"\r\n />\r\n } @else {\r\n <ngn-input-mask [mask]=\"mask()\">\r\n <input\r\n #input\r\n ngnInput\r\n type=\"text\"\r\n [value]=\"value()\"\r\n (blur)=\"onValueChange(input.value || '')\"\r\n />\r\n </ngn-input-mask>\r\n }\r\n</div>\r\n"],"names":[],"mappings":"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"}
@@ -62,10 +62,10 @@ class CalendarTemplates extends ValueControlBase {
62
62
  * Types for the calendar templates.
63
63
  */
64
64
  templateTypes = templateTypesFn();
65
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: CalendarTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
66
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.2", type: CalendarTemplates, isStandalone: true, inputs: { templateDay: { classPropertyName: "templateDay", publicName: "templateDay", isSignal: true, isRequired: false, transformFunction: null }, templateWeekDay: { classPropertyName: "templateWeekDay", publicName: "templateWeekDay", isSignal: true, isRequired: false, transformFunction: null }, templateMonth: { classPropertyName: "templateMonth", publicName: "templateMonth", isSignal: true, isRequired: false, transformFunction: null }, templateTime: { classPropertyName: "templateTime", publicName: "templateTime", isSignal: true, isRequired: false, transformFunction: null }, templateYear: { classPropertyName: "templateYear", publicName: "templateYear", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userDayTemplate", first: true, predicate: ["day"], descendants: true, isSignal: true }, { propertyName: "_userWeekDayTemplate", first: true, predicate: ["weekDay"], descendants: true, isSignal: true }, { propertyName: "_userMonthTemplate", first: true, predicate: ["month"], descendants: true, isSignal: true }, { propertyName: "_userTimeTemplate", first: true, predicate: ["time"], descendants: true, isSignal: true }, { propertyName: "_userYearTemplate", first: true, predicate: ["year"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultDayTemplate", first: true, predicate: ["defaultDayTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultWeekDayTemplate", first: true, predicate: ["defaultWeekDayTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultMonthTemplate", first: true, predicate: ["defaultMonthTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultTimeTemplate", first: true, predicate: ["defaultTimeTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultYearTemplate", first: true, predicate: ["defaultYearTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
65
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: CalendarTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
66
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.10", type: CalendarTemplates, isStandalone: true, inputs: { templateDay: { classPropertyName: "templateDay", publicName: "templateDay", isSignal: true, isRequired: false, transformFunction: null }, templateWeekDay: { classPropertyName: "templateWeekDay", publicName: "templateWeekDay", isSignal: true, isRequired: false, transformFunction: null }, templateMonth: { classPropertyName: "templateMonth", publicName: "templateMonth", isSignal: true, isRequired: false, transformFunction: null }, templateTime: { classPropertyName: "templateTime", publicName: "templateTime", isSignal: true, isRequired: false, transformFunction: null }, templateYear: { classPropertyName: "templateYear", publicName: "templateYear", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userDayTemplate", first: true, predicate: ["day"], descendants: true, isSignal: true }, { propertyName: "_userWeekDayTemplate", first: true, predicate: ["weekDay"], descendants: true, isSignal: true }, { propertyName: "_userMonthTemplate", first: true, predicate: ["month"], descendants: true, isSignal: true }, { propertyName: "_userTimeTemplate", first: true, predicate: ["time"], descendants: true, isSignal: true }, { propertyName: "_userYearTemplate", first: true, predicate: ["year"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultDayTemplate", first: true, predicate: ["defaultDayTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultWeekDayTemplate", first: true, predicate: ["defaultWeekDayTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultMonthTemplate", first: true, predicate: ["defaultMonthTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultTimeTemplate", first: true, predicate: ["defaultTimeTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultYearTemplate", first: true, predicate: ["defaultYearTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: CalendarTemplates, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: CalendarTemplates, decorators: [{
69
69
  type: Directive
70
70
  }], propDecorators: { _defaultDayTemplate: [{ type: i0.ViewChild, args: ['defaultDayTemplate', { isSignal: true }] }], _userDayTemplate: [{ type: i0.ContentChild, args: ['day', { isSignal: true }] }], templateDay: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateDay", required: false }] }], _defaultWeekDayTemplate: [{ type: i0.ViewChild, args: ['defaultWeekDayTemplate', { isSignal: true }] }], _userWeekDayTemplate: [{ type: i0.ContentChild, args: ['weekDay', { isSignal: true }] }], templateWeekDay: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateWeekDay", required: false }] }], _defaultMonthTemplate: [{ type: i0.ViewChild, args: ['defaultMonthTemplate', { isSignal: true }] }], _userMonthTemplate: [{ type: i0.ContentChild, args: ['month', { isSignal: true }] }], templateMonth: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateMonth", required: false }] }], _defaultTimeTemplate: [{ type: i0.ViewChild, args: ['defaultTimeTemplate', { isSignal: true }] }], _userTimeTemplate: [{ type: i0.ContentChild, args: ['time', { isSignal: true }] }], templateTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateTime", required: false }] }], _defaultYearTemplate: [{ type: i0.ViewChild, args: ['defaultYearTemplate', { isSignal: true }] }], _userYearTemplate: [{ type: i0.ContentChild, args: ['year', { isSignal: true }] }], templateYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateYear", required: false }] }] } });
71
71
 
@@ -252,12 +252,12 @@ class CalendarDays {
252
252
  }
253
253
  }
254
254
  }
255
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: CalendarDays, deps: [], target: i0.ɵɵFactoryTarget.Component });
256
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: CalendarDays, isStandalone: true, selector: "ngn-calendar-days", inputs: { component: { classPropertyName: "component", publicName: "component", isSignal: true, isRequired: true, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: true, transformFunction: null }, year: { classPropertyName: "year", publicName: "year", isSignal: true, isRequired: true, transformFunction: null }, month: { classPropertyName: "month", publicName: "month", isSignal: true, isRequired: true, transformFunction: null }, currentValue: { classPropertyName: "currentValue", publicName: "currentValue", isSignal: true, isRequired: true, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: true, transformFunction: null }, dayTemplate: { classPropertyName: "dayTemplate", publicName: "dayTemplate", isSignal: true, isRequired: true, transformFunction: null }, weekDayTemplate: { classPropertyName: "weekDayTemplate", publicName: "weekDayTemplate", isSignal: true, isRequired: true, transformFunction: null }, timeTemplate: { classPropertyName: "timeTemplate", publicName: "timeTemplate", isSignal: true, isRequired: true, transformFunction: null }, yearTemplate: { classPropertyName: "yearTemplate", publicName: "yearTemplate", isSignal: true, isRequired: true, transformFunction: null }, monthTemplate: { classPropertyName: "monthTemplate", publicName: "monthTemplate", isSignal: true, isRequired: true, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: true, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { previousMonth: "previousMonth", nextMonth: "nextMonth", daySelected: "daySelected", yearSelected: "yearSelected", monthSelected: "monthSelected", timeChanged: "timeChanged" }, viewQueries: [{ propertyName: "_dayButton", predicate: ["dayButton"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [ptInt]=\"component()\" [ptClass]=\"'details'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'header'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'navigation'\">\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"'previous'\"\r\n (click)=\"prev()\"\r\n >\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n </button>\r\n <button ngnButton [kind]=\"'icon'\" [ptInt]=\"component()\" [ptClass]=\"'next'\" (click)=\"next()\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthTemplate();\r\n context: {\r\n $implicit: {\r\n month: MONTHS[month()],\r\n change: doMonthChange,\r\n },\r\n }\r\n \"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n yearTemplate();\r\n context: {\r\n $implicit: {\r\n year: year(),\r\n change: doYearChange,\r\n },\r\n }\r\n \"\r\n />\r\n </div>\r\n <div class=\"ngn-calendar-days\">\r\n @for (weekDay of weekDaysSorted(); track weekDay) {\r\n <span [ptInt]=\"component()\" [ptClass]=\"'week-day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekDayTemplate();\r\n context: {\r\n $implicit: {\r\n weekDay: weekDay.weekDay,\r\n translation: weekDay.translation(),\r\n },\r\n }\r\n \"\r\n />\r\n </span>\r\n }\r\n @for (item of monthModel().weeks; track $index) {\r\n @for (day of item.days; track $index) {\r\n <button\r\n #dayButton\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"{\r\n day: true,\r\n 'day-other-month': day.monthOffset !== 0,\r\n 'day-today':\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n 'day-selected':\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n }\"\r\n [tabIndex]=\"!day.monthOffset && tabFocusDay() === day.date ? 0 : -1\"\r\n type=\"button\"\r\n (click)=\"\r\n daySelected.emit({\r\n date: day.date,\r\n monthOffset: day.monthOffset,\r\n })\r\n \"\r\n (keydown)=\"dayKeydown($event, dayButton)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dayTemplate();\r\n context: {\r\n $implicit: {\r\n date: day.date,\r\n fromOtherMonth: day.monthOffset !== 0,\r\n selected:\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n today:\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n },\r\n }\r\n \"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n @if (showTime()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n timeTemplate();\r\n context: {\r\n $implicit: { time: currentValue(), showSeconds: showSeconds(), change: doTimeChange },\r\n }\r\n \"\r\n />\r\n }\r\n</div>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
255
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: CalendarDays, deps: [], target: i0.ɵɵFactoryTarget.Component });
256
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: CalendarDays, isStandalone: true, selector: "ngn-calendar-days", inputs: { component: { classPropertyName: "component", publicName: "component", isSignal: true, isRequired: true, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: true, transformFunction: null }, year: { classPropertyName: "year", publicName: "year", isSignal: true, isRequired: true, transformFunction: null }, month: { classPropertyName: "month", publicName: "month", isSignal: true, isRequired: true, transformFunction: null }, currentValue: { classPropertyName: "currentValue", publicName: "currentValue", isSignal: true, isRequired: true, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: true, transformFunction: null }, dayTemplate: { classPropertyName: "dayTemplate", publicName: "dayTemplate", isSignal: true, isRequired: true, transformFunction: null }, weekDayTemplate: { classPropertyName: "weekDayTemplate", publicName: "weekDayTemplate", isSignal: true, isRequired: true, transformFunction: null }, timeTemplate: { classPropertyName: "timeTemplate", publicName: "timeTemplate", isSignal: true, isRequired: true, transformFunction: null }, yearTemplate: { classPropertyName: "yearTemplate", publicName: "yearTemplate", isSignal: true, isRequired: true, transformFunction: null }, monthTemplate: { classPropertyName: "monthTemplate", publicName: "monthTemplate", isSignal: true, isRequired: true, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: true, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { previousMonth: "previousMonth", nextMonth: "nextMonth", daySelected: "daySelected", yearSelected: "yearSelected", monthSelected: "monthSelected", timeChanged: "timeChanged" }, viewQueries: [{ propertyName: "_dayButton", predicate: ["dayButton"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [ptInt]=\"component()\" [ptClass]=\"'details'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'header'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'navigation'\">\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"'previous'\"\r\n (click)=\"prev()\"\r\n >\r\n <ngn-icon [defaultIcon]=\"'calendar-previous-month'\" />\r\n </button>\r\n <button ngnButton [kind]=\"'icon'\" [ptInt]=\"component()\" [ptClass]=\"'next'\" (click)=\"next()\">\r\n <ngn-icon [defaultIcon]=\"'calendar-next-month'\" />\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthTemplate();\r\n context: {\r\n $implicit: {\r\n month: MONTHS[month()],\r\n change: doMonthChange,\r\n },\r\n }\r\n \"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n yearTemplate();\r\n context: {\r\n $implicit: {\r\n year: year(),\r\n change: doYearChange,\r\n },\r\n }\r\n \"\r\n />\r\n </div>\r\n <div class=\"ngn-calendar-days\">\r\n @for (weekDay of weekDaysSorted(); track weekDay) {\r\n <span [ptInt]=\"component()\" [ptClass]=\"'week-day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekDayTemplate();\r\n context: {\r\n $implicit: {\r\n weekDay: weekDay.weekDay,\r\n translation: weekDay.translation(),\r\n },\r\n }\r\n \"\r\n />\r\n </span>\r\n }\r\n @for (item of monthModel().weeks; track $index) {\r\n @for (day of item.days; track $index) {\r\n <button\r\n #dayButton\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"{\r\n day: true,\r\n 'day-other-month': day.monthOffset !== 0,\r\n 'day-today':\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n 'day-selected':\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n }\"\r\n [tabIndex]=\"!day.monthOffset && tabFocusDay() === day.date ? 0 : -1\"\r\n type=\"button\"\r\n (click)=\"\r\n daySelected.emit({\r\n date: day.date,\r\n monthOffset: day.monthOffset,\r\n })\r\n \"\r\n (keydown)=\"dayKeydown($event, dayButton)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dayTemplate();\r\n context: {\r\n $implicit: {\r\n date: day.date,\r\n fromOtherMonth: day.monthOffset !== 0,\r\n selected:\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n today:\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n },\r\n }\r\n \"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n @if (showTime()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n timeTemplate();\r\n context: {\r\n $implicit: { time: currentValue(), showSeconds: showSeconds(), change: doTimeChange },\r\n }\r\n \"\r\n />\r\n }\r\n</div>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
257
257
  }
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: CalendarDays, decorators: [{
258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: CalendarDays, decorators: [{
259
259
  type: Component,
260
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-calendar-days', imports: [NgTemplateOutlet, NgnPt, NgnButton, NgnIcon], template: "<div [ptInt]=\"component()\" [ptClass]=\"'details'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'header'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'navigation'\">\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"'previous'\"\r\n (click)=\"prev()\"\r\n >\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n </button>\r\n <button ngnButton [kind]=\"'icon'\" [ptInt]=\"component()\" [ptClass]=\"'next'\" (click)=\"next()\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthTemplate();\r\n context: {\r\n $implicit: {\r\n month: MONTHS[month()],\r\n change: doMonthChange,\r\n },\r\n }\r\n \"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n yearTemplate();\r\n context: {\r\n $implicit: {\r\n year: year(),\r\n change: doYearChange,\r\n },\r\n }\r\n \"\r\n />\r\n </div>\r\n <div class=\"ngn-calendar-days\">\r\n @for (weekDay of weekDaysSorted(); track weekDay) {\r\n <span [ptInt]=\"component()\" [ptClass]=\"'week-day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekDayTemplate();\r\n context: {\r\n $implicit: {\r\n weekDay: weekDay.weekDay,\r\n translation: weekDay.translation(),\r\n },\r\n }\r\n \"\r\n />\r\n </span>\r\n }\r\n @for (item of monthModel().weeks; track $index) {\r\n @for (day of item.days; track $index) {\r\n <button\r\n #dayButton\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"{\r\n day: true,\r\n 'day-other-month': day.monthOffset !== 0,\r\n 'day-today':\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n 'day-selected':\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n }\"\r\n [tabIndex]=\"!day.monthOffset && tabFocusDay() === day.date ? 0 : -1\"\r\n type=\"button\"\r\n (click)=\"\r\n daySelected.emit({\r\n date: day.date,\r\n monthOffset: day.monthOffset,\r\n })\r\n \"\r\n (keydown)=\"dayKeydown($event, dayButton)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dayTemplate();\r\n context: {\r\n $implicit: {\r\n date: day.date,\r\n fromOtherMonth: day.monthOffset !== 0,\r\n selected:\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n today:\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n },\r\n }\r\n \"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n @if (showTime()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n timeTemplate();\r\n context: {\r\n $implicit: { time: currentValue(), showSeconds: showSeconds(), change: doTimeChange },\r\n }\r\n \"\r\n />\r\n }\r\n</div>\r\n" }]
260
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-calendar-days', imports: [NgTemplateOutlet, NgnPt, NgnButton, NgnIcon], template: "<div [ptInt]=\"component()\" [ptClass]=\"'details'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'header'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'navigation'\">\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"'previous'\"\r\n (click)=\"prev()\"\r\n >\r\n <ngn-icon [defaultIcon]=\"'calendar-previous-month'\" />\r\n </button>\r\n <button ngnButton [kind]=\"'icon'\" [ptInt]=\"component()\" [ptClass]=\"'next'\" (click)=\"next()\">\r\n <ngn-icon [defaultIcon]=\"'calendar-next-month'\" />\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthTemplate();\r\n context: {\r\n $implicit: {\r\n month: MONTHS[month()],\r\n change: doMonthChange,\r\n },\r\n }\r\n \"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n yearTemplate();\r\n context: {\r\n $implicit: {\r\n year: year(),\r\n change: doYearChange,\r\n },\r\n }\r\n \"\r\n />\r\n </div>\r\n <div class=\"ngn-calendar-days\">\r\n @for (weekDay of weekDaysSorted(); track weekDay) {\r\n <span [ptInt]=\"component()\" [ptClass]=\"'week-day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekDayTemplate();\r\n context: {\r\n $implicit: {\r\n weekDay: weekDay.weekDay,\r\n translation: weekDay.translation(),\r\n },\r\n }\r\n \"\r\n />\r\n </span>\r\n }\r\n @for (item of monthModel().weeks; track $index) {\r\n @for (day of item.days; track $index) {\r\n <button\r\n #dayButton\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"{\r\n day: true,\r\n 'day-other-month': day.monthOffset !== 0,\r\n 'day-today':\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n 'day-selected':\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n }\"\r\n [tabIndex]=\"!day.monthOffset && tabFocusDay() === day.date ? 0 : -1\"\r\n type=\"button\"\r\n (click)=\"\r\n daySelected.emit({\r\n date: day.date,\r\n monthOffset: day.monthOffset,\r\n })\r\n \"\r\n (keydown)=\"dayKeydown($event, dayButton)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dayTemplate();\r\n context: {\r\n $implicit: {\r\n date: day.date,\r\n fromOtherMonth: day.monthOffset !== 0,\r\n selected:\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n today:\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n },\r\n }\r\n \"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n @if (showTime()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n timeTemplate();\r\n context: {\r\n $implicit: { time: currentValue(), showSeconds: showSeconds(), change: doTimeChange },\r\n }\r\n \"\r\n />\r\n }\r\n</div>\r\n" }]
261
261
  }], propDecorators: { component: [{ type: i0.Input, args: [{ isSignal: true, alias: "component", required: true }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: true }] }], year: [{ type: i0.Input, args: [{ isSignal: true, alias: "year", required: true }] }], month: [{ type: i0.Input, args: [{ isSignal: true, alias: "month", required: true }] }], currentValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentValue", required: true }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: true }] }], dayTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "dayTemplate", required: true }] }], weekDayTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekDayTemplate", required: true }] }], timeTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeTemplate", required: true }] }], yearTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "yearTemplate", required: true }] }], monthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "monthTemplate", required: true }] }], showTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTime", required: true }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: true }] }], previousMonth: [{ type: i0.Output, args: ["previousMonth"] }], nextMonth: [{ type: i0.Output, args: ["nextMonth"] }], daySelected: [{ type: i0.Output, args: ["daySelected"] }], yearSelected: [{ type: i0.Output, args: ["yearSelected"] }], monthSelected: [{ type: i0.Output, args: ["monthSelected"] }], timeChanged: [{ type: i0.Output, args: ["timeChanged"] }], _dayButton: [{ type: i0.ViewChildren, args: ['dayButton', { isSignal: true }] }] } });
262
262
 
263
263
  function generateYearOptions() {
@@ -440,11 +440,11 @@ class NgnCalendar extends CalendarTemplates {
440
440
  this.touched.set(true);
441
441
  });
442
442
  }
443
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnCalendar, deps: null, target: i0.ɵɵFactoryTarget.Component });
444
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: NgnCalendar, isStandalone: true, selector: "ngn-calendar", inputs: { firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnCalendar)], viewQueries: [{ propertyName: "_popover", first: true, predicate: NgnPopover, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (inline()) {\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n} @else {\r\n <ngn-input-field\r\n #field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <input\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n ngnInput\r\n #input\r\n (valueChange)=\"stringValueChange($event)\"\r\n [type]=\"showTime() ? 'datetime-local' : 'date'\"\r\n [value]=\"valueStr()\"\r\n [disabled]=\"disabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n <ngn-icon defaultIcon=\"calendar\" />\r\n </ngn-input-field>\r\n <ngn-popover\r\n #popover\r\n [anchor]=\"field.element.nativeElement\"\r\n [id]=\"inputId() + '_popover'\"\r\n (closing)=\"potentiallyBlurred()\"\r\n >\r\n <ng-template #lazy>\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n </ng-template>\r\n </ngn-popover>\r\n}\r\n\r\n<ng-template #calendar>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n root: true,\r\n inline: inline(),\r\n }\"\r\n >\r\n <ngn-calendar-days\r\n [component]=\"this\"\r\n [theme]=\"theme\"\r\n [year]=\"year()\"\r\n [month]=\"month()\"\r\n [currentValue]=\"value()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n (previousMonth)=\"previousMonth()\"\r\n (nextMonth)=\"nextMonth()\"\r\n (daySelected)=\"selectDay($event)\"\r\n (monthSelected)=\"selectMonth($event)\"\r\n (yearSelected)=\"selectYear($event)\"\r\n (timeChanged)=\"changeTime($event)\"\r\n [dayTemplate]=\"dayTemplate()\"\r\n [weekDayTemplate]=\"weekDayTemplate()\"\r\n [timeTemplate]=\"timeTemplate()\"\r\n [yearTemplate]=\"yearTemplate()\"\r\n [monthTemplate]=\"monthTemplate()\"\r\n [showTime]=\"showTime()\"\r\n [showSeconds]=\"showSeconds()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n />\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayTemplate [ngnTemplate]=\"templateTypes.day\" let-day>\r\n {{ day.date }}\r\n</ng-template>\r\n\r\n<ng-template #defaultWeekDayTemplate [ngnTemplate]=\"templateTypes.weekDay\" let-weekDay>\r\n <span>\r\n {{ weekDay.translation }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultTimeTemplate [ngnTemplate]=\"templateTypes.time\" let-time>\r\n @defer {\r\n <div [ptInt]=\"this\" [ptClass]=\"'time'\">\r\n <ngn-calendar-time\r\n [component]=\"this\"\r\n [currentValue]=\"time.time\"\r\n [showSeconds]=\"time.showSeconds\"\r\n (timeChange)=\"time.change($event)\"\r\n />\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultYearTemplate [ngnTemplate]=\"templateTypes.year\" let-y>\r\n @defer {\r\n <ngn-select\r\n [editable]=\"true\"\r\n [value]=\"year() + ''\"\r\n (valueChange)=\"y.change(+($event || 0))\"\r\n [options]=\"yearOptions\"\r\n [virtual]=\"true\"\r\n [itemHeight]=\"40\"\r\n [popoverOptions]=\"{ sizeConstraints: { maxHeight: '300px' } }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-year'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [editableAutoFilter]=\"false\"\r\n [tabindex]=\"-1\"\r\n >\r\n <input ngnInput type=\"number\" [attr.aria-label]=\"i18n['calendar_selectYear']()\" />\r\n </ngn-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultMonthTemplate [ngnTemplate]=\"templateTypes.month\" let-m>\r\n @defer {\r\n <ngn-select\r\n [value]=\"m.month\"\r\n (valueChange)=\"m.change($event!)\"\r\n [options]=\"monthOptions()\"\r\n [popoverOptions]=\"{\r\n sizeConstraints: { maxHeight: '300px', width: '130px', maxWidth: '130px' },\r\n }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-month'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [tabindex]=\"-1\"\r\n />\r\n }\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgnInput, selector: "input[ngnInput], textarea[ngnInput]", inputs: ["invalid", "value"], outputs: ["valueChange"], exportAs: ["ngnInput"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "component", type: NgnInputField, selector: "ngn-input-field", inputs: ["label", "labelledBy", "labelKind", "inputId", "showClearButton", "iconClearButton", "tabindex", "invalid", "readonly", "disabled"] }, { kind: "component", type: NgnPopover, selector: "ngn-popover", inputs: ["open", "anchor", "options", "hasShrinkableContent", "closeBy"], outputs: ["closed", "closing", "openChange"] }, { kind: "component", type: CalendarDays, selector: "ngn-calendar-days", inputs: ["component", "theme", "year", "month", "currentValue", "firstDayOfWeek", "dayTemplate", "weekDayTemplate", "timeTemplate", "yearTemplate", "monthTemplate", "showTime", "showSeconds"], outputs: ["previousMonth", "nextMonth", "daySelected", "yearSelected", "monthSelected", "timeChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [NgnPt, import('./ngneers-controls-calendar-time-Bzlv9Vkn.mjs').then(m => m.CalendarTime)], () => [NgnPt,
443
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnCalendar, deps: null, target: i0.ɵɵFactoryTarget.Component });
444
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnCalendar, isStandalone: true, selector: "ngn-calendar", inputs: { firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnCalendar)], viewQueries: [{ propertyName: "_popover", first: true, predicate: NgnPopover, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (inline()) {\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n} @else {\r\n <ngn-input-field\r\n #field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <input\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n ngnInput\r\n #input\r\n (valueChange)=\"stringValueChange($event)\"\r\n [type]=\"showTime() ? 'datetime-local' : 'date'\"\r\n [value]=\"valueStr()\"\r\n [disabled]=\"disabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n <ngn-icon defaultIcon=\"calendar-trigger\" />\r\n </ngn-input-field>\r\n <ngn-popover\r\n #popover\r\n [anchor]=\"field.element.nativeElement\"\r\n [id]=\"inputId() + '_popover'\"\r\n (closing)=\"potentiallyBlurred()\"\r\n >\r\n <ng-template #lazy>\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n </ng-template>\r\n </ngn-popover>\r\n}\r\n\r\n<ng-template #calendar>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n root: true,\r\n inline: inline(),\r\n }\"\r\n >\r\n <ngn-calendar-days\r\n [component]=\"this\"\r\n [theme]=\"theme\"\r\n [year]=\"year()\"\r\n [month]=\"month()\"\r\n [currentValue]=\"value()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n (previousMonth)=\"previousMonth()\"\r\n (nextMonth)=\"nextMonth()\"\r\n (daySelected)=\"selectDay($event)\"\r\n (monthSelected)=\"selectMonth($event)\"\r\n (yearSelected)=\"selectYear($event)\"\r\n (timeChanged)=\"changeTime($event)\"\r\n [dayTemplate]=\"dayTemplate()\"\r\n [weekDayTemplate]=\"weekDayTemplate()\"\r\n [timeTemplate]=\"timeTemplate()\"\r\n [yearTemplate]=\"yearTemplate()\"\r\n [monthTemplate]=\"monthTemplate()\"\r\n [showTime]=\"showTime()\"\r\n [showSeconds]=\"showSeconds()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n />\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayTemplate [ngnTemplate]=\"templateTypes.day\" let-day>\r\n {{ day.date }}\r\n</ng-template>\r\n\r\n<ng-template #defaultWeekDayTemplate [ngnTemplate]=\"templateTypes.weekDay\" let-weekDay>\r\n <span>\r\n {{ weekDay.translation }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultTimeTemplate [ngnTemplate]=\"templateTypes.time\" let-time>\r\n @defer {\r\n <div [ptInt]=\"this\" [ptClass]=\"'time'\">\r\n <ngn-calendar-time\r\n [component]=\"this\"\r\n [currentValue]=\"time.time\"\r\n [showSeconds]=\"time.showSeconds\"\r\n (timeChange)=\"time.change($event)\"\r\n />\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultYearTemplate [ngnTemplate]=\"templateTypes.year\" let-y>\r\n @defer {\r\n <ngn-select\r\n [editable]=\"true\"\r\n [value]=\"year() + ''\"\r\n (valueChange)=\"y.change(+($event || 0))\"\r\n [options]=\"yearOptions\"\r\n [virtual]=\"true\"\r\n [itemHeight]=\"40\"\r\n [popoverOptions]=\"{ sizeConstraints: { maxHeight: '300px' } }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-year'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [editableAutoFilter]=\"false\"\r\n [tabindex]=\"-1\"\r\n >\r\n <input ngnInput type=\"number\" [attr.aria-label]=\"i18n['calendar_selectYear']()\" />\r\n </ngn-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultMonthTemplate [ngnTemplate]=\"templateTypes.month\" let-m>\r\n @defer {\r\n <ngn-select\r\n [value]=\"m.month\"\r\n (valueChange)=\"m.change($event!)\"\r\n [options]=\"monthOptions()\"\r\n [popoverOptions]=\"{\r\n sizeConstraints: { maxHeight: '300px', width: '130px', maxWidth: '130px' },\r\n }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-month'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [tabindex]=\"-1\"\r\n />\r\n }\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgnInput, selector: "input[ngnInput], textarea[ngnInput]", inputs: ["invalid", "value"], outputs: ["valueChange"], exportAs: ["ngnInput"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "component", type: NgnInputField, selector: "ngn-input-field", inputs: ["label", "labelledBy", "labelKind", "inputId", "showClearButton", "iconClearButton", "tabindex", "invalid", "readonly", "disabled"] }, { kind: "component", type: NgnPopover, selector: "ngn-popover", inputs: ["open", "anchor", "options", "hasShrinkableContent", "closeBy"], outputs: ["closed", "closing", "openChange"] }, { kind: "component", type: CalendarDays, selector: "ngn-calendar-days", inputs: ["component", "theme", "year", "month", "currentValue", "firstDayOfWeek", "dayTemplate", "weekDayTemplate", "timeTemplate", "yearTemplate", "monthTemplate", "showTime", "showSeconds"], outputs: ["previousMonth", "nextMonth", "daySelected", "yearSelected", "monthSelected", "timeChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [NgnPt, import('./ngneers-controls-calendar-time-CKAqRgOP.mjs').then(m => m.CalendarTime)], () => [NgnPt,
445
445
  NgnInput, import('@ngneers/controls/select').then(m => m.NgnSelect)], () => [NgnPt, import('@ngneers/controls/select').then(m => m.NgnSelect)]] });
446
446
  }
447
- i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.2.2", ngImport: i0, type: NgnCalendar, resolveDeferredDeps: () => [import('./ngneers-controls-calendar-time-Bzlv9Vkn.mjs').then(m => m.CalendarTime), import('@ngneers/controls/select').then(m => m.NgnSelect)], resolveMetadata: (CalendarTime, NgnSelect) => ({ decorators: [{
447
+ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.2.10", ngImport: i0, type: NgnCalendar, resolveDeferredDeps: () => [import('./ngneers-controls-calendar-time-CKAqRgOP.mjs').then(m => m.CalendarTime), import('@ngneers/controls/select').then(m => m.NgnSelect)], resolveMetadata: (CalendarTime, NgnSelect) => ({ decorators: [{
448
448
  type: Component,
449
449
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-calendar', imports: [
450
450
  NgTemplateOutlet,
@@ -457,7 +457,7 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.2.2", ng
457
457
  NgnPopover,
458
458
  CalendarDays,
459
459
  CalendarTime,
460
- ], providers: [provideSelf(NgnCalendar)], template: "@if (inline()) {\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n} @else {\r\n <ngn-input-field\r\n #field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <input\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n ngnInput\r\n #input\r\n (valueChange)=\"stringValueChange($event)\"\r\n [type]=\"showTime() ? 'datetime-local' : 'date'\"\r\n [value]=\"valueStr()\"\r\n [disabled]=\"disabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n <ngn-icon defaultIcon=\"calendar\" />\r\n </ngn-input-field>\r\n <ngn-popover\r\n #popover\r\n [anchor]=\"field.element.nativeElement\"\r\n [id]=\"inputId() + '_popover'\"\r\n (closing)=\"potentiallyBlurred()\"\r\n >\r\n <ng-template #lazy>\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n </ng-template>\r\n </ngn-popover>\r\n}\r\n\r\n<ng-template #calendar>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n root: true,\r\n inline: inline(),\r\n }\"\r\n >\r\n <ngn-calendar-days\r\n [component]=\"this\"\r\n [theme]=\"theme\"\r\n [year]=\"year()\"\r\n [month]=\"month()\"\r\n [currentValue]=\"value()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n (previousMonth)=\"previousMonth()\"\r\n (nextMonth)=\"nextMonth()\"\r\n (daySelected)=\"selectDay($event)\"\r\n (monthSelected)=\"selectMonth($event)\"\r\n (yearSelected)=\"selectYear($event)\"\r\n (timeChanged)=\"changeTime($event)\"\r\n [dayTemplate]=\"dayTemplate()\"\r\n [weekDayTemplate]=\"weekDayTemplate()\"\r\n [timeTemplate]=\"timeTemplate()\"\r\n [yearTemplate]=\"yearTemplate()\"\r\n [monthTemplate]=\"monthTemplate()\"\r\n [showTime]=\"showTime()\"\r\n [showSeconds]=\"showSeconds()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n />\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayTemplate [ngnTemplate]=\"templateTypes.day\" let-day>\r\n {{ day.date }}\r\n</ng-template>\r\n\r\n<ng-template #defaultWeekDayTemplate [ngnTemplate]=\"templateTypes.weekDay\" let-weekDay>\r\n <span>\r\n {{ weekDay.translation }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultTimeTemplate [ngnTemplate]=\"templateTypes.time\" let-time>\r\n @defer {\r\n <div [ptInt]=\"this\" [ptClass]=\"'time'\">\r\n <ngn-calendar-time\r\n [component]=\"this\"\r\n [currentValue]=\"time.time\"\r\n [showSeconds]=\"time.showSeconds\"\r\n (timeChange)=\"time.change($event)\"\r\n />\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultYearTemplate [ngnTemplate]=\"templateTypes.year\" let-y>\r\n @defer {\r\n <ngn-select\r\n [editable]=\"true\"\r\n [value]=\"year() + ''\"\r\n (valueChange)=\"y.change(+($event || 0))\"\r\n [options]=\"yearOptions\"\r\n [virtual]=\"true\"\r\n [itemHeight]=\"40\"\r\n [popoverOptions]=\"{ sizeConstraints: { maxHeight: '300px' } }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-year'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [editableAutoFilter]=\"false\"\r\n [tabindex]=\"-1\"\r\n >\r\n <input ngnInput type=\"number\" [attr.aria-label]=\"i18n['calendar_selectYear']()\" />\r\n </ngn-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultMonthTemplate [ngnTemplate]=\"templateTypes.month\" let-m>\r\n @defer {\r\n <ngn-select\r\n [value]=\"m.month\"\r\n (valueChange)=\"m.change($event!)\"\r\n [options]=\"monthOptions()\"\r\n [popoverOptions]=\"{\r\n sizeConstraints: { maxHeight: '300px', width: '130px', maxWidth: '130px' },\r\n }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-month'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [tabindex]=\"-1\"\r\n />\r\n }\r\n</ng-template>\r\n" }]
460
+ ], providers: [provideSelf(NgnCalendar)], template: "@if (inline()) {\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n} @else {\r\n <ngn-input-field\r\n #field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <input\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n ngnInput\r\n #input\r\n (valueChange)=\"stringValueChange($event)\"\r\n [type]=\"showTime() ? 'datetime-local' : 'date'\"\r\n [value]=\"valueStr()\"\r\n [disabled]=\"disabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n <ngn-icon defaultIcon=\"calendar-trigger\" />\r\n </ngn-input-field>\r\n <ngn-popover\r\n #popover\r\n [anchor]=\"field.element.nativeElement\"\r\n [id]=\"inputId() + '_popover'\"\r\n (closing)=\"potentiallyBlurred()\"\r\n >\r\n <ng-template #lazy>\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n </ng-template>\r\n </ngn-popover>\r\n}\r\n\r\n<ng-template #calendar>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n root: true,\r\n inline: inline(),\r\n }\"\r\n >\r\n <ngn-calendar-days\r\n [component]=\"this\"\r\n [theme]=\"theme\"\r\n [year]=\"year()\"\r\n [month]=\"month()\"\r\n [currentValue]=\"value()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n (previousMonth)=\"previousMonth()\"\r\n (nextMonth)=\"nextMonth()\"\r\n (daySelected)=\"selectDay($event)\"\r\n (monthSelected)=\"selectMonth($event)\"\r\n (yearSelected)=\"selectYear($event)\"\r\n (timeChanged)=\"changeTime($event)\"\r\n [dayTemplate]=\"dayTemplate()\"\r\n [weekDayTemplate]=\"weekDayTemplate()\"\r\n [timeTemplate]=\"timeTemplate()\"\r\n [yearTemplate]=\"yearTemplate()\"\r\n [monthTemplate]=\"monthTemplate()\"\r\n [showTime]=\"showTime()\"\r\n [showSeconds]=\"showSeconds()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n />\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayTemplate [ngnTemplate]=\"templateTypes.day\" let-day>\r\n {{ day.date }}\r\n</ng-template>\r\n\r\n<ng-template #defaultWeekDayTemplate [ngnTemplate]=\"templateTypes.weekDay\" let-weekDay>\r\n <span>\r\n {{ weekDay.translation }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultTimeTemplate [ngnTemplate]=\"templateTypes.time\" let-time>\r\n @defer {\r\n <div [ptInt]=\"this\" [ptClass]=\"'time'\">\r\n <ngn-calendar-time\r\n [component]=\"this\"\r\n [currentValue]=\"time.time\"\r\n [showSeconds]=\"time.showSeconds\"\r\n (timeChange)=\"time.change($event)\"\r\n />\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultYearTemplate [ngnTemplate]=\"templateTypes.year\" let-y>\r\n @defer {\r\n <ngn-select\r\n [editable]=\"true\"\r\n [value]=\"year() + ''\"\r\n (valueChange)=\"y.change(+($event || 0))\"\r\n [options]=\"yearOptions\"\r\n [virtual]=\"true\"\r\n [itemHeight]=\"40\"\r\n [popoverOptions]=\"{ sizeConstraints: { maxHeight: '300px' } }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-year'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [editableAutoFilter]=\"false\"\r\n [tabindex]=\"-1\"\r\n >\r\n <input ngnInput type=\"number\" [attr.aria-label]=\"i18n['calendar_selectYear']()\" />\r\n </ngn-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultMonthTemplate [ngnTemplate]=\"templateTypes.month\" let-m>\r\n @defer {\r\n <ngn-select\r\n [value]=\"m.month\"\r\n (valueChange)=\"m.change($event!)\"\r\n [options]=\"monthOptions()\"\r\n [popoverOptions]=\"{\r\n sizeConstraints: { maxHeight: '300px', width: '130px', maxWidth: '130px' },\r\n }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-month'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [tabindex]=\"-1\"\r\n />\r\n }\r\n</ng-template>\r\n" }]
461
461
  }], ctorParameters: null, propDecorators: { firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], showTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTime", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], _popover: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NgnPopover), { isSignal: true }] }] } }) });
462
462
 
463
463
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-calendar.mjs","sources":["../../src/calendar/calendar-templates.ts","../../src/calendar/types.ts","../../src/calendar/days/days.ts","../../src/calendar/days/days.html","../../src/calendar/calendar.ts","../../src/calendar/calendar.html","../../src/calendar/ngneers-controls-calendar.ts"],"sourcesContent":["import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { ValueControlBase } from '@ngneers/controls/base';\r\n\r\nimport type {\r\n DayTemplateType,\r\n MonthTemplateType,\r\n TimeTemplateType,\r\n WeekDayTemplateType,\r\n YearTemplateType,\r\n} from './types';\r\n\r\n@Directive()\r\nexport abstract class CalendarTemplates extends ValueControlBase<'calendar', Date | null> {\r\n // Day template\r\n private readonly _defaultDayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.day>>('defaultDayTemplate');\r\n private readonly _userDayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.day>>('day');\r\n /**\r\n * Set a custom template for a day.\r\n * Can also be set using an `<ng-template>` element with `#day` template reference variable.\r\n */\r\n public readonly templateDay = input<TemplateRef<typeof this.templateTypes.day> | null>(null);\r\n protected readonly dayTemplate = computed(\r\n () => this._userDayTemplate() ?? this.templateDay() ?? this._defaultDayTemplate()\r\n );\r\n // Week day template\r\n private readonly _defaultWeekDayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.weekDay>>('defaultWeekDayTemplate');\r\n private readonly _userWeekDayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.weekDay>>('weekDay');\r\n /**\r\n * Set a custom template for a week day.\r\n * Can also be set using an `<ng-template>` element with `#weekDay` template reference variable.\r\n */\r\n public readonly templateWeekDay = input<TemplateRef<typeof this.templateTypes.weekDay> | null>(\r\n null\r\n );\r\n protected readonly weekDayTemplate = computed(\r\n () => this._userWeekDayTemplate() ?? this.templateWeekDay() ?? this._defaultWeekDayTemplate()\r\n );\r\n // Month template\r\n private readonly _defaultMonthTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.month>>('defaultMonthTemplate');\r\n private readonly _userMonthTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.month>>('month');\r\n /**\r\n * Set a custom template for a month.\r\n * Can also be set using an `<ng-template>` element with `#month` template reference variable.\r\n */\r\n public readonly templateMonth = input<TemplateRef<typeof this.templateTypes.month> | null>(null);\r\n protected readonly monthTemplate = computed(\r\n () => this._userMonthTemplate() ?? this.templateMonth() ?? this._defaultMonthTemplate()\r\n );\r\n // Time template\r\n private readonly _defaultTimeTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.time>>('defaultTimeTemplate');\r\n private readonly _userTimeTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.time>>('time');\r\n /**\r\n * Set a custom template for the time input.\r\n * Can also be set using an `<ng-template>` element with `#time` template reference variable.\r\n */\r\n public readonly templateTime = input<TemplateRef<typeof this.templateTypes.time> | null>(null);\r\n protected readonly timeTemplate = computed(\r\n () => this._userTimeTemplate() ?? this.templateTime() ?? this._defaultTimeTemplate()\r\n );\r\n // Year template\r\n private readonly _defaultYearTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.year>>('defaultYearTemplate');\r\n private readonly _userYearTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.year>>('year');\r\n /**\r\n * Set a custom template for the year input.\r\n * Can also be set using an `<ng-template>` element with `#year` template reference variable.\r\n */\r\n public readonly templateYear = input<TemplateRef<typeof this.templateTypes.year> | null>(null);\r\n protected readonly yearTemplate = computed(\r\n () => this._userYearTemplate() ?? this.templateYear() ?? this._defaultYearTemplate()\r\n );\r\n\r\n /**\r\n * Types for the calendar templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the day template.\r\n */\r\n day: DayTemplateType;\r\n /**\r\n * Type of the template variable for the week day template.\r\n */\r\n weekDay: WeekDayTemplateType;\r\n /**\r\n * Type of the template variable for the month template.\r\n */\r\n month: MonthTemplateType;\r\n /**\r\n * Type of the template variable for the time template.\r\n */\r\n time: TimeTemplateType;\r\n /**\r\n * Type of the template variable for the year template.\r\n */\r\n year: YearTemplateType;\r\n }>();\r\n}\r\n","export const MONTHS = [\r\n 'january',\r\n 'february',\r\n 'march',\r\n 'april',\r\n 'may',\r\n 'june',\r\n 'july',\r\n 'august',\r\n 'september',\r\n 'october',\r\n 'november',\r\n 'december',\r\n] as const;\r\n\r\nexport type Month = (typeof MONTHS)[number];\r\n\r\nexport const WEEK_DAYS = [\r\n 'sunday',\r\n 'monday',\r\n 'tuesday',\r\n 'wednesday',\r\n 'thursday',\r\n 'friday',\r\n 'saturday',\r\n] as const;\r\n\r\nexport type WeekDay = (typeof WEEK_DAYS)[number];\r\n\r\nexport type DayModel = {\r\n date: number;\r\n /**\r\n * -1 = previous month, 0 = current month, 1 = next month\r\n */\r\n monthOffset: number;\r\n};\r\n\r\nexport type DayTemplateType = {\r\n $implicit: {\r\n date: number;\r\n selected: boolean;\r\n today: boolean;\r\n fromOtherMonth: boolean;\r\n };\r\n};\r\n\r\nexport type WeekDayTemplateType = {\r\n $implicit: {\r\n weekDay: WeekDay;\r\n translation: string;\r\n };\r\n};\r\n\r\nexport type MonthTemplateType = {\r\n $implicit: {\r\n month: Month;\r\n change: (newMonth: Month) => void;\r\n };\r\n};\r\n\r\nexport type TimeTemplateType = {\r\n $implicit: {\r\n time: Date | null;\r\n showSeconds: boolean;\r\n change: (newTime: Date | null) => void;\r\n };\r\n};\r\n\r\nexport type YearTemplateType = {\r\n $implicit: {\r\n year: number;\r\n change: (newYear: number) => void;\r\n };\r\n};\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n TemplateRef,\r\n viewChildren,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { type NgnBaseSafe, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { calendarControlTemplate } from '@ngneers/controls-themes/templates/calendar';\r\n\r\nimport {\r\n type DayModel,\r\n type DayTemplateType,\r\n type Month,\r\n MONTHS,\r\n type MonthTemplateType,\r\n type TimeTemplateType,\r\n WEEK_DAYS,\r\n type WeekDay,\r\n type WeekDayTemplateType,\r\n type YearTemplateType,\r\n} from '../types';\r\n\r\nimport type { ControlTemplateInfo } from '@ngneers/controls/api/ng';\r\n\r\n// Configuration: Number of weeks to show before and after the current month\r\nconst WEEKS_BEFORE = 1;\r\nconst WEEKS_AFTER = 1;\r\n\r\ntype MonthModel = {\r\n weeks: WeekModel[];\r\n};\r\n\r\ntype WeekModel = {\r\n days: DayModel[];\r\n};\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar-days',\r\n templateUrl: './days.html',\r\n imports: [NgTemplateOutlet, NgnPt, NgnButton, NgnIcon],\r\n})\r\nexport class CalendarDays {\r\n public readonly component = input.required<NgnBaseSafe<'calendar'>>();\r\n public readonly theme = input.required<ControlTemplateInfo<typeof calendarControlTemplate>>();\r\n public readonly year = input.required<number>();\r\n public readonly month = input.required<number>();\r\n public readonly currentValue = input.required<Date | null>();\r\n public readonly firstDayOfWeek = input.required<WeekDay>();\r\n public readonly dayTemplate = input.required<TemplateRef<DayTemplateType>>();\r\n public readonly weekDayTemplate = input.required<TemplateRef<WeekDayTemplateType>>();\r\n public readonly timeTemplate = input.required<TemplateRef<TimeTemplateType>>();\r\n public readonly yearTemplate = input.required<TemplateRef<YearTemplateType>>();\r\n public readonly monthTemplate = input.required<TemplateRef<MonthTemplateType>>();\r\n public readonly showTime = input.required<boolean>();\r\n public readonly showSeconds = input.required<boolean>();\r\n public readonly previousMonth = output();\r\n public readonly nextMonth = output();\r\n public readonly daySelected = output<DayModel>();\r\n public readonly yearSelected = output<number>();\r\n public readonly monthSelected = output<Month>();\r\n public readonly timeChanged = output<Date | null>();\r\n\r\n protected readonly MONTHS = MONTHS;\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly todaysDay = new Date().getDate();\r\n protected readonly todaysMonth = new Date().getMonth();\r\n protected readonly todaysYear = new Date().getFullYear();\r\n protected readonly doTimeChange = (t: Date | null) => this.timeChanged.emit(t);\r\n protected readonly doYearChange = (t: number) => this.yearSelected.emit(t);\r\n protected readonly doMonthChange = (t: Month) => this.monthSelected.emit(t);\r\n\r\n protected readonly weekDaysSorted = computed(() =>\r\n WEEK_DAYS.slice(this._firstDayOfWeekIndex())\r\n .concat(WEEK_DAYS.slice(0, this._firstDayOfWeekIndex()))\r\n .map(day => ({\r\n weekDay: day,\r\n translation: this.i18n[`calendar_weekdaysShort_${day}`],\r\n }))\r\n );\r\n\r\n private readonly _dayButton = viewChildren<ElementRef<HTMLButtonElement>>('dayButton');\r\n private readonly _firstDayOfWeekIndex = computed(() => WEEK_DAYS.indexOf(this.firstDayOfWeek()));\r\n private readonly _daysInMonth = computed(() =>\r\n new Date(this.year(), this.month() + 1, 0).getDate()\r\n );\r\n private readonly _daysInPreviousMonth = computed(() =>\r\n new Date(this.year(), this.month(), 0).getDate()\r\n );\r\n private readonly _firstDayOfMonth = computed(() =>\r\n new Date(this.year(), this.month(), 1).getDay()\r\n );\r\n\r\n protected readonly monthModel = computed((): MonthModel => {\r\n const firstDayOfMonth = this._firstDayOfMonth();\r\n const firstDayOfWeek = this._firstDayOfWeekIndex();\r\n const daysInMonth = this._daysInMonth();\r\n const daysInPreviousMonth = this._daysInPreviousMonth();\r\n\r\n // Calculate starting point and total days needed\r\n const firstDayOffset = (firstDayOfMonth - firstDayOfWeek + 7) % 7;\r\n const daysFromPreviousMonth = firstDayOffset + WEEKS_BEFORE * 7;\r\n const daysToNextMonth = (7 - ((daysFromPreviousMonth + daysInMonth) % 7)) % 7;\r\n const totalDays = daysFromPreviousMonth + daysInMonth + daysToNextMonth + WEEKS_AFTER * 7;\r\n const startDay = daysInPreviousMonth - daysFromPreviousMonth + 1;\r\n\r\n // Build all days in one pass\r\n const allDays: DayModel[] = [];\r\n let currentDate = startDay;\r\n let currentMonth = -1; // -1 = previous, 0 = current, 1 = next\r\n\r\n for (let i = 0; i < totalDays; i++) {\r\n // Determine which month we're in\r\n if (currentDate > daysInPreviousMonth && currentMonth === -1) {\r\n currentDate = 1;\r\n currentMonth = 0;\r\n } else if (currentDate > daysInMonth && currentMonth === 0) {\r\n currentDate = 1;\r\n currentMonth = 1;\r\n }\r\n\r\n allDays.push({\r\n date: currentDate,\r\n monthOffset: currentMonth,\r\n });\r\n\r\n currentDate++;\r\n }\r\n\r\n // Group into weeks\r\n const weeks: WeekModel[] = [];\r\n for (let i = 0; i < allDays.length; i += 7) {\r\n weeks.push({\r\n days: allDays.slice(i, i + 7),\r\n });\r\n }\r\n\r\n return { weeks };\r\n });\r\n\r\n protected readonly tabFocusDay = computed(() => {\r\n const val = this.currentValue();\r\n if (val && val.getMonth() === this.month() && val.getFullYear() === this.year()) {\r\n return val.getDate();\r\n }\r\n return 1;\r\n });\r\n\r\n protected prev() {\r\n this.previousMonth.emit();\r\n }\r\n\r\n protected next() {\r\n this.nextMonth.emit();\r\n }\r\n\r\n protected selectYear(year: number) {\r\n this.yearSelected.emit(year);\r\n }\r\n\r\n protected dayKeydown(event: KeyboardEvent, day: HTMLButtonElement) {\r\n if (['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown'].includes(event.key)) {\r\n event.preventDefault();\r\n\r\n const getCurrentMonthButtons = () => {\r\n return this._dayButton()\r\n .map(ref => ref.nativeElement)\r\n .filter(x => !x.classList.contains(this.theme().class('day-other-month')));\r\n };\r\n\r\n const allDayButtons = getCurrentMonthButtons();\r\n const index = allDayButtons.indexOf(day);\r\n const daysInMonth = this._daysInMonth();\r\n if (event.key === 'ArrowRight') {\r\n if (index < daysInMonth - 1) {\r\n allDayButtons[index + 1]?.focus();\r\n } else {\r\n this.next();\r\n setTimeout(() => {\r\n getCurrentMonthButtons()[0]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowLeft') {\r\n if (index > 0) {\r\n allDayButtons[index - 1]?.focus();\r\n } else {\r\n this.prev();\r\n setTimeout(() => {\r\n const buttons = getCurrentMonthButtons();\r\n buttons[buttons.length - 1]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowDown') {\r\n if (index < daysInMonth - 7) {\r\n allDayButtons[index + 7]?.focus();\r\n } else {\r\n this.next();\r\n const nextIndex = (index + 7) % daysInMonth;\r\n setTimeout(() => {\r\n getCurrentMonthButtons()[nextIndex]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n if (index >= 7) {\r\n allDayButtons[index - 7]?.focus();\r\n } else {\r\n this.prev();\r\n setTimeout(() => {\r\n const buttons = getCurrentMonthButtons();\r\n const targetIndex = Math.min(buttons.length - 7 + index, buttons.length - 1);\r\n buttons[targetIndex]?.focus();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","<div [ptInt]=\"component()\" [ptClass]=\"'details'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'header'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'navigation'\">\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"'previous'\"\r\n (click)=\"prev()\"\r\n >\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n </button>\r\n <button ngnButton [kind]=\"'icon'\" [ptInt]=\"component()\" [ptClass]=\"'next'\" (click)=\"next()\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthTemplate();\r\n context: {\r\n $implicit: {\r\n month: MONTHS[month()],\r\n change: doMonthChange,\r\n },\r\n }\r\n \"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n yearTemplate();\r\n context: {\r\n $implicit: {\r\n year: year(),\r\n change: doYearChange,\r\n },\r\n }\r\n \"\r\n />\r\n </div>\r\n <div class=\"ngn-calendar-days\">\r\n @for (weekDay of weekDaysSorted(); track weekDay) {\r\n <span [ptInt]=\"component()\" [ptClass]=\"'week-day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekDayTemplate();\r\n context: {\r\n $implicit: {\r\n weekDay: weekDay.weekDay,\r\n translation: weekDay.translation(),\r\n },\r\n }\r\n \"\r\n />\r\n </span>\r\n }\r\n @for (item of monthModel().weeks; track $index) {\r\n @for (day of item.days; track $index) {\r\n <button\r\n #dayButton\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"{\r\n day: true,\r\n 'day-other-month': day.monthOffset !== 0,\r\n 'day-today':\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n 'day-selected':\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n }\"\r\n [tabIndex]=\"!day.monthOffset && tabFocusDay() === day.date ? 0 : -1\"\r\n type=\"button\"\r\n (click)=\"\r\n daySelected.emit({\r\n date: day.date,\r\n monthOffset: day.monthOffset,\r\n })\r\n \"\r\n (keydown)=\"dayKeydown($event, dayButton)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dayTemplate();\r\n context: {\r\n $implicit: {\r\n date: day.date,\r\n fromOtherMonth: day.monthOffset !== 0,\r\n selected:\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n today:\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n },\r\n }\r\n \"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n @if (showTime()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n timeTemplate();\r\n context: {\r\n $implicit: { time: currentValue(), showSeconds: showSeconds(), change: doTimeChange },\r\n }\r\n \"\r\n />\r\n }\r\n</div>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n type Signal,\r\n viewChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnTemplate, Platform } from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { NgnInput } from '@ngneers/controls/input';\r\nimport { NgnInputField } from '@ngneers/controls/input-field';\r\nimport { NgnPopover } from '@ngneers/controls/popover';\r\nimport { NgnSelect } from '@ngneers/controls/select';\r\nimport { NgnError, throwExp } from '@ngneers/controls/utils';\r\nimport { calendarControlTemplate } from '@ngneers/controls-themes/templates/calendar';\r\n\r\nimport { CalendarTemplates } from './calendar-templates';\r\nimport { CalendarDays } from './days/days';\r\nimport { CalendarTime } from './time/time';\r\nimport { type DayModel, type Month, MONTHS, type WeekDay } from './types';\r\n\r\nimport type { NgnItem } from '@ngneers/controls/api';\r\n\r\nfunction generateYearOptions(): NgnItem[] {\r\n const MAX_ITEMS = 200;\r\n const currentYear = new Date().getFullYear();\r\n return Array.from({ length: MAX_ITEMS }, (_, i) => ({\r\n label: (currentYear - MAX_ITEMS / 2 + i).toString(),\r\n value: currentYear - MAX_ITEMS / 2 + i,\r\n }));\r\n}\r\n\r\ntype MonthItemType = NgnItem<{ $: (typeof MONTHS)[number] }, '$'>;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar',\r\n templateUrl: './calendar.html',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnPt,\r\n NgnInput,\r\n NgnIcon,\r\n NgnInputField,\r\n NgnSelect,\r\n NgnPopover,\r\n CalendarDays,\r\n CalendarTime,\r\n ],\r\n providers: [provideSelf(NgnCalendar)],\r\n})\r\nexport class NgnCalendar extends CalendarTemplates {\r\n /**\r\n * Set the first day of the week.\r\n * @default 'monday'\r\n */\r\n public readonly firstDayOfWeek = input<WeekDay>('monday');\r\n /**\r\n * Whether to show the time input.\r\n * @default false\r\n */\r\n public readonly showTime = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to show seconds in the time input.\r\n * @default false\r\n */\r\n public readonly showSeconds = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to show the calendar inline instead of with a input field & popup.\r\n * @default false\r\n */\r\n public readonly inline = input(false, { transform: booleanAttribute });\r\n\r\n private readonly _popover = viewChild<NgnPopover>(NgnPopover);\r\n private readonly _platform = inject(Platform);\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly theme = this.injectThemeTemplate(calendarControlTemplate);\r\n protected readonly year = linkedSignal(\r\n () => this.value()?.getFullYear() || new Date().getFullYear()\r\n );\r\n protected readonly month = linkedSignal(() => this.value()?.getMonth() ?? new Date().getMonth());\r\n protected readonly yearOptions = generateYearOptions();\r\n protected readonly monthOptions: Signal<NgnItem<MonthItemType>[]> = computed(() => {\r\n const months = Array.from(\r\n { length: 12 },\r\n (_, i) =>\r\n <NgnItem>{\r\n label:\r\n this.i18n[\r\n `calendar_months_${MONTHS[i] ?? throwExp('calendar', 'invalid month index')}`\r\n ],\r\n value: MONTHS[i],\r\n testId: `calendar-month-${MONTHS[i]}`,\r\n }\r\n );\r\n return months;\r\n });\r\n protected readonly valueStr = computed(() => {\r\n const value = this.value();\r\n if (!value) {\r\n return null;\r\n }\r\n // Format as YYYY-MM-DD(THH:MM(:SS))\r\n return `${String(value.getFullYear()).padStart(4, '0')}-${String(value.getMonth() + 1).padStart(\r\n 2,\r\n '0'\r\n )}-${String(value.getDate()).padStart(2, '0')}${\r\n this.showTime()\r\n ? `T${String(value.getHours()).padStart(\r\n 2,\r\n '0'\r\n )}:${String(value.getMinutes()).padStart(2, '0')}${\r\n this.showSeconds() ? `:${String(value.getSeconds()).padStart(2, '0')}` : ''\r\n }`\r\n : ''\r\n }`;\r\n });\r\n\r\n protected readonly previousMonth = () => {\r\n const currentMonth = this.month();\r\n const currentYear = this.year();\r\n if (currentMonth === 0) {\r\n this.year.set(currentYear - 1);\r\n this.month.set(11); // December\r\n } else {\r\n this.month.set(currentMonth - 1);\r\n }\r\n };\r\n\r\n protected readonly nextMonth = () => {\r\n const currentMonth = this.month();\r\n const currentYear = this.year();\r\n if (currentMonth === 11) {\r\n this.year.set(currentYear + 1);\r\n this.month.set(0); // January\r\n } else {\r\n this.month.set(currentMonth + 1);\r\n }\r\n };\r\n\r\n protected readonly previousYear = () => {\r\n this.year.set(this.year() - 1);\r\n };\r\n\r\n protected readonly nextYear = () => {\r\n this.year.set(this.year() + 1);\r\n };\r\n\r\n protected selectMonth(month: Month) {\r\n this.month.set(MONTHS.indexOf(month));\r\n }\r\n\r\n protected selectYear(year: number) {\r\n this.year.set(year);\r\n }\r\n\r\n protected selectDay(day: DayModel) {\r\n const newValue = new Date(this.value() || new Date());\r\n newValue.setFullYear(this.year());\r\n newValue.setMonth(this.month() + day.monthOffset);\r\n newValue.setDate(day.date);\r\n this.value.set(newValue);\r\n }\r\n\r\n protected changeTime(newTime: Date | null) {\r\n if (!newTime) {\r\n this.value.set(null);\r\n return;\r\n }\r\n const currentValue = this.value();\r\n if (currentValue) {\r\n const newValue = new Date(currentValue);\r\n newValue.setHours(newTime.getHours());\r\n newValue.setMinutes(newTime.getMinutes());\r\n newValue.setSeconds(newTime.getSeconds());\r\n this.value.set(newValue);\r\n }\r\n }\r\n\r\n /**\r\n * Shows the calendar popup. Only works if `inline` is `false`.\r\n */\r\n public show() {\r\n if (this.inline()) {\r\n throw new NgnError('calendar', 'cannot open inline calendar');\r\n }\r\n if (this._platform.isTouchDevice() || this.disabled() || this.readonly()) {\r\n return;\r\n }\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.show();\r\n }\r\n\r\n /**\r\n * Hides the calendar popup. Only works if `inline` is `false`.\r\n */\r\n public hide() {\r\n if (this.inline()) {\r\n throw new NgnError('calendar', 'cannot close inline calendar');\r\n }\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.hide();\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent) {\r\n // @todo: handle date selection with keys\r\n\r\n // if event is not handled by the listbox, we can handle it here\r\n if (event.key === 'Enter' && !this.inline()) {\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.toggle();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n protected stringValueChange(newValue: string | null) {\r\n if (!newValue) {\r\n return true;\r\n }\r\n\r\n const date = new Date(newValue);\r\n if (!isNaN(date.getTime())) {\r\n if (!this.showTime()) {\r\n date.setHours(this.value()?.getHours() || 0);\r\n date.setMinutes(this.value()?.getMinutes() || 0);\r\n date.setSeconds(this.value()?.getSeconds() || 0);\r\n } else if (!this.showSeconds()) {\r\n date.setSeconds(this.value()?.getSeconds() || 0);\r\n }\r\n this.value.set(date);\r\n }\r\n return true;\r\n }\r\n\r\n protected potentiallyBlurred() {\r\n setTimeout(() => {\r\n if (this.element.nativeElement.contains(document.activeElement) || this._popover()?.open()) {\r\n return;\r\n }\r\n this.touched.set(true);\r\n });\r\n }\r\n}\r\n","@if (inline()) {\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n} @else {\r\n <ngn-input-field\r\n #field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <input\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n ngnInput\r\n #input\r\n (valueChange)=\"stringValueChange($event)\"\r\n [type]=\"showTime() ? 'datetime-local' : 'date'\"\r\n [value]=\"valueStr()\"\r\n [disabled]=\"disabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n <ngn-icon defaultIcon=\"calendar\" />\r\n </ngn-input-field>\r\n <ngn-popover\r\n #popover\r\n [anchor]=\"field.element.nativeElement\"\r\n [id]=\"inputId() + '_popover'\"\r\n (closing)=\"potentiallyBlurred()\"\r\n >\r\n <ng-template #lazy>\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n </ng-template>\r\n </ngn-popover>\r\n}\r\n\r\n<ng-template #calendar>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n root: true,\r\n inline: inline(),\r\n }\"\r\n >\r\n <ngn-calendar-days\r\n [component]=\"this\"\r\n [theme]=\"theme\"\r\n [year]=\"year()\"\r\n [month]=\"month()\"\r\n [currentValue]=\"value()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n (previousMonth)=\"previousMonth()\"\r\n (nextMonth)=\"nextMonth()\"\r\n (daySelected)=\"selectDay($event)\"\r\n (monthSelected)=\"selectMonth($event)\"\r\n (yearSelected)=\"selectYear($event)\"\r\n (timeChanged)=\"changeTime($event)\"\r\n [dayTemplate]=\"dayTemplate()\"\r\n [weekDayTemplate]=\"weekDayTemplate()\"\r\n [timeTemplate]=\"timeTemplate()\"\r\n [yearTemplate]=\"yearTemplate()\"\r\n [monthTemplate]=\"monthTemplate()\"\r\n [showTime]=\"showTime()\"\r\n [showSeconds]=\"showSeconds()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n />\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayTemplate [ngnTemplate]=\"templateTypes.day\" let-day>\r\n {{ day.date }}\r\n</ng-template>\r\n\r\n<ng-template #defaultWeekDayTemplate [ngnTemplate]=\"templateTypes.weekDay\" let-weekDay>\r\n <span>\r\n {{ weekDay.translation }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultTimeTemplate [ngnTemplate]=\"templateTypes.time\" let-time>\r\n @defer {\r\n <div [ptInt]=\"this\" [ptClass]=\"'time'\">\r\n <ngn-calendar-time\r\n [component]=\"this\"\r\n [currentValue]=\"time.time\"\r\n [showSeconds]=\"time.showSeconds\"\r\n (timeChange)=\"time.change($event)\"\r\n />\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultYearTemplate [ngnTemplate]=\"templateTypes.year\" let-y>\r\n @defer {\r\n <ngn-select\r\n [editable]=\"true\"\r\n [value]=\"year() + ''\"\r\n (valueChange)=\"y.change(+($event || 0))\"\r\n [options]=\"yearOptions\"\r\n [virtual]=\"true\"\r\n [itemHeight]=\"40\"\r\n [popoverOptions]=\"{ sizeConstraints: { maxHeight: '300px' } }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-year'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [editableAutoFilter]=\"false\"\r\n [tabindex]=\"-1\"\r\n >\r\n <input ngnInput type=\"number\" [attr.aria-label]=\"i18n['calendar_selectYear']()\" />\r\n </ngn-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultMonthTemplate [ngnTemplate]=\"templateTypes.month\" let-m>\r\n @defer {\r\n <ngn-select\r\n [value]=\"m.month\"\r\n (valueChange)=\"m.change($event!)\"\r\n [options]=\"monthOptions()\"\r\n [popoverOptions]=\"{\r\n sizeConstraints: { maxHeight: '300px', width: '130px', maxWidth: '130px' },\r\n }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-month'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [tabindex]=\"-1\"\r\n />\r\n }\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-calendar.mjs","sources":["../../src/calendar/calendar-templates.ts","../../src/calendar/types.ts","../../src/calendar/days/days.ts","../../src/calendar/days/days.html","../../src/calendar/calendar.ts","../../src/calendar/calendar.html","../../src/calendar/ngneers-controls-calendar.ts"],"sourcesContent":["import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { ValueControlBase } from '@ngneers/controls/base';\r\n\r\nimport type {\r\n DayTemplateType,\r\n MonthTemplateType,\r\n TimeTemplateType,\r\n WeekDayTemplateType,\r\n YearTemplateType,\r\n} from './types';\r\n\r\n@Directive()\r\nexport abstract class CalendarTemplates extends ValueControlBase<'calendar', Date | null> {\r\n // Day template\r\n private readonly _defaultDayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.day>>('defaultDayTemplate');\r\n private readonly _userDayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.day>>('day');\r\n /**\r\n * Set a custom template for a day.\r\n * Can also be set using an `<ng-template>` element with `#day` template reference variable.\r\n */\r\n public readonly templateDay = input<TemplateRef<typeof this.templateTypes.day> | null>(null);\r\n protected readonly dayTemplate = computed(\r\n () => this._userDayTemplate() ?? this.templateDay() ?? this._defaultDayTemplate()\r\n );\r\n // Week day template\r\n private readonly _defaultWeekDayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.weekDay>>('defaultWeekDayTemplate');\r\n private readonly _userWeekDayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.weekDay>>('weekDay');\r\n /**\r\n * Set a custom template for a week day.\r\n * Can also be set using an `<ng-template>` element with `#weekDay` template reference variable.\r\n */\r\n public readonly templateWeekDay = input<TemplateRef<typeof this.templateTypes.weekDay> | null>(\r\n null\r\n );\r\n protected readonly weekDayTemplate = computed(\r\n () => this._userWeekDayTemplate() ?? this.templateWeekDay() ?? this._defaultWeekDayTemplate()\r\n );\r\n // Month template\r\n private readonly _defaultMonthTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.month>>('defaultMonthTemplate');\r\n private readonly _userMonthTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.month>>('month');\r\n /**\r\n * Set a custom template for a month.\r\n * Can also be set using an `<ng-template>` element with `#month` template reference variable.\r\n */\r\n public readonly templateMonth = input<TemplateRef<typeof this.templateTypes.month> | null>(null);\r\n protected readonly monthTemplate = computed(\r\n () => this._userMonthTemplate() ?? this.templateMonth() ?? this._defaultMonthTemplate()\r\n );\r\n // Time template\r\n private readonly _defaultTimeTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.time>>('defaultTimeTemplate');\r\n private readonly _userTimeTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.time>>('time');\r\n /**\r\n * Set a custom template for the time input.\r\n * Can also be set using an `<ng-template>` element with `#time` template reference variable.\r\n */\r\n public readonly templateTime = input<TemplateRef<typeof this.templateTypes.time> | null>(null);\r\n protected readonly timeTemplate = computed(\r\n () => this._userTimeTemplate() ?? this.templateTime() ?? this._defaultTimeTemplate()\r\n );\r\n // Year template\r\n private readonly _defaultYearTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.year>>('defaultYearTemplate');\r\n private readonly _userYearTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.year>>('year');\r\n /**\r\n * Set a custom template for the year input.\r\n * Can also be set using an `<ng-template>` element with `#year` template reference variable.\r\n */\r\n public readonly templateYear = input<TemplateRef<typeof this.templateTypes.year> | null>(null);\r\n protected readonly yearTemplate = computed(\r\n () => this._userYearTemplate() ?? this.templateYear() ?? this._defaultYearTemplate()\r\n );\r\n\r\n /**\r\n * Types for the calendar templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the day template.\r\n */\r\n day: DayTemplateType;\r\n /**\r\n * Type of the template variable for the week day template.\r\n */\r\n weekDay: WeekDayTemplateType;\r\n /**\r\n * Type of the template variable for the month template.\r\n */\r\n month: MonthTemplateType;\r\n /**\r\n * Type of the template variable for the time template.\r\n */\r\n time: TimeTemplateType;\r\n /**\r\n * Type of the template variable for the year template.\r\n */\r\n year: YearTemplateType;\r\n }>();\r\n}\r\n","export const MONTHS = [\r\n 'january',\r\n 'february',\r\n 'march',\r\n 'april',\r\n 'may',\r\n 'june',\r\n 'july',\r\n 'august',\r\n 'september',\r\n 'october',\r\n 'november',\r\n 'december',\r\n] as const;\r\n\r\nexport type Month = (typeof MONTHS)[number];\r\n\r\nexport const WEEK_DAYS = [\r\n 'sunday',\r\n 'monday',\r\n 'tuesday',\r\n 'wednesday',\r\n 'thursday',\r\n 'friday',\r\n 'saturday',\r\n] as const;\r\n\r\nexport type WeekDay = (typeof WEEK_DAYS)[number];\r\n\r\nexport type DayModel = {\r\n date: number;\r\n /**\r\n * -1 = previous month, 0 = current month, 1 = next month\r\n */\r\n monthOffset: number;\r\n};\r\n\r\nexport type DayTemplateType = {\r\n $implicit: {\r\n date: number;\r\n selected: boolean;\r\n today: boolean;\r\n fromOtherMonth: boolean;\r\n };\r\n};\r\n\r\nexport type WeekDayTemplateType = {\r\n $implicit: {\r\n weekDay: WeekDay;\r\n translation: string;\r\n };\r\n};\r\n\r\nexport type MonthTemplateType = {\r\n $implicit: {\r\n month: Month;\r\n change: (newMonth: Month) => void;\r\n };\r\n};\r\n\r\nexport type TimeTemplateType = {\r\n $implicit: {\r\n time: Date | null;\r\n showSeconds: boolean;\r\n change: (newTime: Date | null) => void;\r\n };\r\n};\r\n\r\nexport type YearTemplateType = {\r\n $implicit: {\r\n year: number;\r\n change: (newYear: number) => void;\r\n };\r\n};\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n TemplateRef,\r\n viewChildren,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { type NgnBaseSafe, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { calendarControlTemplate } from '@ngneers/controls-themes/templates/calendar';\r\n\r\nimport {\r\n type DayModel,\r\n type DayTemplateType,\r\n type Month,\r\n MONTHS,\r\n type MonthTemplateType,\r\n type TimeTemplateType,\r\n WEEK_DAYS,\r\n type WeekDay,\r\n type WeekDayTemplateType,\r\n type YearTemplateType,\r\n} from '../types';\r\n\r\nimport type { ControlTemplateInfo } from '@ngneers/controls/api/ng';\r\n\r\n// Configuration: Number of weeks to show before and after the current month\r\nconst WEEKS_BEFORE = 1;\r\nconst WEEKS_AFTER = 1;\r\n\r\ntype MonthModel = {\r\n weeks: WeekModel[];\r\n};\r\n\r\ntype WeekModel = {\r\n days: DayModel[];\r\n};\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar-days',\r\n templateUrl: './days.html',\r\n imports: [NgTemplateOutlet, NgnPt, NgnButton, NgnIcon],\r\n})\r\nexport class CalendarDays {\r\n public readonly component = input.required<NgnBaseSafe<'calendar'>>();\r\n public readonly theme = input.required<ControlTemplateInfo<typeof calendarControlTemplate>>();\r\n public readonly year = input.required<number>();\r\n public readonly month = input.required<number>();\r\n public readonly currentValue = input.required<Date | null>();\r\n public readonly firstDayOfWeek = input.required<WeekDay>();\r\n public readonly dayTemplate = input.required<TemplateRef<DayTemplateType>>();\r\n public readonly weekDayTemplate = input.required<TemplateRef<WeekDayTemplateType>>();\r\n public readonly timeTemplate = input.required<TemplateRef<TimeTemplateType>>();\r\n public readonly yearTemplate = input.required<TemplateRef<YearTemplateType>>();\r\n public readonly monthTemplate = input.required<TemplateRef<MonthTemplateType>>();\r\n public readonly showTime = input.required<boolean>();\r\n public readonly showSeconds = input.required<boolean>();\r\n public readonly previousMonth = output();\r\n public readonly nextMonth = output();\r\n public readonly daySelected = output<DayModel>();\r\n public readonly yearSelected = output<number>();\r\n public readonly monthSelected = output<Month>();\r\n public readonly timeChanged = output<Date | null>();\r\n\r\n protected readonly MONTHS = MONTHS;\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly todaysDay = new Date().getDate();\r\n protected readonly todaysMonth = new Date().getMonth();\r\n protected readonly todaysYear = new Date().getFullYear();\r\n protected readonly doTimeChange = (t: Date | null) => this.timeChanged.emit(t);\r\n protected readonly doYearChange = (t: number) => this.yearSelected.emit(t);\r\n protected readonly doMonthChange = (t: Month) => this.monthSelected.emit(t);\r\n\r\n protected readonly weekDaysSorted = computed(() =>\r\n WEEK_DAYS.slice(this._firstDayOfWeekIndex())\r\n .concat(WEEK_DAYS.slice(0, this._firstDayOfWeekIndex()))\r\n .map(day => ({\r\n weekDay: day,\r\n translation: this.i18n[`calendar_weekdaysShort_${day}`],\r\n }))\r\n );\r\n\r\n private readonly _dayButton = viewChildren<ElementRef<HTMLButtonElement>>('dayButton');\r\n private readonly _firstDayOfWeekIndex = computed(() => WEEK_DAYS.indexOf(this.firstDayOfWeek()));\r\n private readonly _daysInMonth = computed(() =>\r\n new Date(this.year(), this.month() + 1, 0).getDate()\r\n );\r\n private readonly _daysInPreviousMonth = computed(() =>\r\n new Date(this.year(), this.month(), 0).getDate()\r\n );\r\n private readonly _firstDayOfMonth = computed(() =>\r\n new Date(this.year(), this.month(), 1).getDay()\r\n );\r\n\r\n protected readonly monthModel = computed((): MonthModel => {\r\n const firstDayOfMonth = this._firstDayOfMonth();\r\n const firstDayOfWeek = this._firstDayOfWeekIndex();\r\n const daysInMonth = this._daysInMonth();\r\n const daysInPreviousMonth = this._daysInPreviousMonth();\r\n\r\n // Calculate starting point and total days needed\r\n const firstDayOffset = (firstDayOfMonth - firstDayOfWeek + 7) % 7;\r\n const daysFromPreviousMonth = firstDayOffset + WEEKS_BEFORE * 7;\r\n const daysToNextMonth = (7 - ((daysFromPreviousMonth + daysInMonth) % 7)) % 7;\r\n const totalDays = daysFromPreviousMonth + daysInMonth + daysToNextMonth + WEEKS_AFTER * 7;\r\n const startDay = daysInPreviousMonth - daysFromPreviousMonth + 1;\r\n\r\n // Build all days in one pass\r\n const allDays: DayModel[] = [];\r\n let currentDate = startDay;\r\n let currentMonth = -1; // -1 = previous, 0 = current, 1 = next\r\n\r\n for (let i = 0; i < totalDays; i++) {\r\n // Determine which month we're in\r\n if (currentDate > daysInPreviousMonth && currentMonth === -1) {\r\n currentDate = 1;\r\n currentMonth = 0;\r\n } else if (currentDate > daysInMonth && currentMonth === 0) {\r\n currentDate = 1;\r\n currentMonth = 1;\r\n }\r\n\r\n allDays.push({\r\n date: currentDate,\r\n monthOffset: currentMonth,\r\n });\r\n\r\n currentDate++;\r\n }\r\n\r\n // Group into weeks\r\n const weeks: WeekModel[] = [];\r\n for (let i = 0; i < allDays.length; i += 7) {\r\n weeks.push({\r\n days: allDays.slice(i, i + 7),\r\n });\r\n }\r\n\r\n return { weeks };\r\n });\r\n\r\n protected readonly tabFocusDay = computed(() => {\r\n const val = this.currentValue();\r\n if (val && val.getMonth() === this.month() && val.getFullYear() === this.year()) {\r\n return val.getDate();\r\n }\r\n return 1;\r\n });\r\n\r\n protected prev() {\r\n this.previousMonth.emit();\r\n }\r\n\r\n protected next() {\r\n this.nextMonth.emit();\r\n }\r\n\r\n protected selectYear(year: number) {\r\n this.yearSelected.emit(year);\r\n }\r\n\r\n protected dayKeydown(event: KeyboardEvent, day: HTMLButtonElement) {\r\n if (['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown'].includes(event.key)) {\r\n event.preventDefault();\r\n\r\n const getCurrentMonthButtons = () => {\r\n return this._dayButton()\r\n .map(ref => ref.nativeElement)\r\n .filter(x => !x.classList.contains(this.theme().class('day-other-month')));\r\n };\r\n\r\n const allDayButtons = getCurrentMonthButtons();\r\n const index = allDayButtons.indexOf(day);\r\n const daysInMonth = this._daysInMonth();\r\n if (event.key === 'ArrowRight') {\r\n if (index < daysInMonth - 1) {\r\n allDayButtons[index + 1]?.focus();\r\n } else {\r\n this.next();\r\n setTimeout(() => {\r\n getCurrentMonthButtons()[0]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowLeft') {\r\n if (index > 0) {\r\n allDayButtons[index - 1]?.focus();\r\n } else {\r\n this.prev();\r\n setTimeout(() => {\r\n const buttons = getCurrentMonthButtons();\r\n buttons[buttons.length - 1]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowDown') {\r\n if (index < daysInMonth - 7) {\r\n allDayButtons[index + 7]?.focus();\r\n } else {\r\n this.next();\r\n const nextIndex = (index + 7) % daysInMonth;\r\n setTimeout(() => {\r\n getCurrentMonthButtons()[nextIndex]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n if (index >= 7) {\r\n allDayButtons[index - 7]?.focus();\r\n } else {\r\n this.prev();\r\n setTimeout(() => {\r\n const buttons = getCurrentMonthButtons();\r\n const targetIndex = Math.min(buttons.length - 7 + index, buttons.length - 1);\r\n buttons[targetIndex]?.focus();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","<div [ptInt]=\"component()\" [ptClass]=\"'details'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'header'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'navigation'\">\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"'previous'\"\r\n (click)=\"prev()\"\r\n >\r\n <ngn-icon [defaultIcon]=\"'calendar-previous-month'\" />\r\n </button>\r\n <button ngnButton [kind]=\"'icon'\" [ptInt]=\"component()\" [ptClass]=\"'next'\" (click)=\"next()\">\r\n <ngn-icon [defaultIcon]=\"'calendar-next-month'\" />\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthTemplate();\r\n context: {\r\n $implicit: {\r\n month: MONTHS[month()],\r\n change: doMonthChange,\r\n },\r\n }\r\n \"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n yearTemplate();\r\n context: {\r\n $implicit: {\r\n year: year(),\r\n change: doYearChange,\r\n },\r\n }\r\n \"\r\n />\r\n </div>\r\n <div class=\"ngn-calendar-days\">\r\n @for (weekDay of weekDaysSorted(); track weekDay) {\r\n <span [ptInt]=\"component()\" [ptClass]=\"'week-day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekDayTemplate();\r\n context: {\r\n $implicit: {\r\n weekDay: weekDay.weekDay,\r\n translation: weekDay.translation(),\r\n },\r\n }\r\n \"\r\n />\r\n </span>\r\n }\r\n @for (item of monthModel().weeks; track $index) {\r\n @for (day of item.days; track $index) {\r\n <button\r\n #dayButton\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"{\r\n day: true,\r\n 'day-other-month': day.monthOffset !== 0,\r\n 'day-today':\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n 'day-selected':\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n }\"\r\n [tabIndex]=\"!day.monthOffset && tabFocusDay() === day.date ? 0 : -1\"\r\n type=\"button\"\r\n (click)=\"\r\n daySelected.emit({\r\n date: day.date,\r\n monthOffset: day.monthOffset,\r\n })\r\n \"\r\n (keydown)=\"dayKeydown($event, dayButton)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dayTemplate();\r\n context: {\r\n $implicit: {\r\n date: day.date,\r\n fromOtherMonth: day.monthOffset !== 0,\r\n selected:\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n today:\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n },\r\n }\r\n \"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n @if (showTime()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n timeTemplate();\r\n context: {\r\n $implicit: { time: currentValue(), showSeconds: showSeconds(), change: doTimeChange },\r\n }\r\n \"\r\n />\r\n }\r\n</div>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n type Signal,\r\n viewChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnTemplate, Platform } from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { NgnInput } from '@ngneers/controls/input';\r\nimport { NgnInputField } from '@ngneers/controls/input-field';\r\nimport { NgnPopover } from '@ngneers/controls/popover';\r\nimport { NgnSelect } from '@ngneers/controls/select';\r\nimport { NgnError, throwExp } from '@ngneers/controls/utils';\r\nimport { calendarControlTemplate } from '@ngneers/controls-themes/templates/calendar';\r\n\r\nimport { CalendarTemplates } from './calendar-templates';\r\nimport { CalendarDays } from './days/days';\r\nimport { CalendarTime } from './time/time';\r\nimport { type DayModel, type Month, MONTHS, type WeekDay } from './types';\r\n\r\nimport type { NgnItem } from '@ngneers/controls/api';\r\n\r\nfunction generateYearOptions(): NgnItem[] {\r\n const MAX_ITEMS = 200;\r\n const currentYear = new Date().getFullYear();\r\n return Array.from({ length: MAX_ITEMS }, (_, i) => ({\r\n label: (currentYear - MAX_ITEMS / 2 + i).toString(),\r\n value: currentYear - MAX_ITEMS / 2 + i,\r\n }));\r\n}\r\n\r\ntype MonthItemType = NgnItem<{ $: (typeof MONTHS)[number] }, '$'>;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar',\r\n templateUrl: './calendar.html',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnPt,\r\n NgnInput,\r\n NgnIcon,\r\n NgnInputField,\r\n NgnSelect,\r\n NgnPopover,\r\n CalendarDays,\r\n CalendarTime,\r\n ],\r\n providers: [provideSelf(NgnCalendar)],\r\n})\r\nexport class NgnCalendar extends CalendarTemplates {\r\n /**\r\n * Set the first day of the week.\r\n * @default 'monday'\r\n */\r\n public readonly firstDayOfWeek = input<WeekDay>('monday');\r\n /**\r\n * Whether to show the time input.\r\n * @default false\r\n */\r\n public readonly showTime = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to show seconds in the time input.\r\n * @default false\r\n */\r\n public readonly showSeconds = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to show the calendar inline instead of with a input field & popup.\r\n * @default false\r\n */\r\n public readonly inline = input(false, { transform: booleanAttribute });\r\n\r\n private readonly _popover = viewChild<NgnPopover>(NgnPopover);\r\n private readonly _platform = inject(Platform);\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly theme = this.injectThemeTemplate(calendarControlTemplate);\r\n protected readonly year = linkedSignal(\r\n () => this.value()?.getFullYear() || new Date().getFullYear()\r\n );\r\n protected readonly month = linkedSignal(() => this.value()?.getMonth() ?? new Date().getMonth());\r\n protected readonly yearOptions = generateYearOptions();\r\n protected readonly monthOptions: Signal<NgnItem<MonthItemType>[]> = computed(() => {\r\n const months = Array.from(\r\n { length: 12 },\r\n (_, i) =>\r\n <NgnItem>{\r\n label:\r\n this.i18n[\r\n `calendar_months_${MONTHS[i] ?? throwExp('calendar', 'invalid month index')}`\r\n ],\r\n value: MONTHS[i],\r\n testId: `calendar-month-${MONTHS[i]}`,\r\n }\r\n );\r\n return months;\r\n });\r\n protected readonly valueStr = computed(() => {\r\n const value = this.value();\r\n if (!value) {\r\n return null;\r\n }\r\n // Format as YYYY-MM-DD(THH:MM(:SS))\r\n return `${String(value.getFullYear()).padStart(4, '0')}-${String(value.getMonth() + 1).padStart(\r\n 2,\r\n '0'\r\n )}-${String(value.getDate()).padStart(2, '0')}${\r\n this.showTime()\r\n ? `T${String(value.getHours()).padStart(\r\n 2,\r\n '0'\r\n )}:${String(value.getMinutes()).padStart(2, '0')}${\r\n this.showSeconds() ? `:${String(value.getSeconds()).padStart(2, '0')}` : ''\r\n }`\r\n : ''\r\n }`;\r\n });\r\n\r\n protected readonly previousMonth = () => {\r\n const currentMonth = this.month();\r\n const currentYear = this.year();\r\n if (currentMonth === 0) {\r\n this.year.set(currentYear - 1);\r\n this.month.set(11); // December\r\n } else {\r\n this.month.set(currentMonth - 1);\r\n }\r\n };\r\n\r\n protected readonly nextMonth = () => {\r\n const currentMonth = this.month();\r\n const currentYear = this.year();\r\n if (currentMonth === 11) {\r\n this.year.set(currentYear + 1);\r\n this.month.set(0); // January\r\n } else {\r\n this.month.set(currentMonth + 1);\r\n }\r\n };\r\n\r\n protected readonly previousYear = () => {\r\n this.year.set(this.year() - 1);\r\n };\r\n\r\n protected readonly nextYear = () => {\r\n this.year.set(this.year() + 1);\r\n };\r\n\r\n protected selectMonth(month: Month) {\r\n this.month.set(MONTHS.indexOf(month));\r\n }\r\n\r\n protected selectYear(year: number) {\r\n this.year.set(year);\r\n }\r\n\r\n protected selectDay(day: DayModel) {\r\n const newValue = new Date(this.value() || new Date());\r\n newValue.setFullYear(this.year());\r\n newValue.setMonth(this.month() + day.monthOffset);\r\n newValue.setDate(day.date);\r\n this.value.set(newValue);\r\n }\r\n\r\n protected changeTime(newTime: Date | null) {\r\n if (!newTime) {\r\n this.value.set(null);\r\n return;\r\n }\r\n const currentValue = this.value();\r\n if (currentValue) {\r\n const newValue = new Date(currentValue);\r\n newValue.setHours(newTime.getHours());\r\n newValue.setMinutes(newTime.getMinutes());\r\n newValue.setSeconds(newTime.getSeconds());\r\n this.value.set(newValue);\r\n }\r\n }\r\n\r\n /**\r\n * Shows the calendar popup. Only works if `inline` is `false`.\r\n */\r\n public show() {\r\n if (this.inline()) {\r\n throw new NgnError('calendar', 'cannot open inline calendar');\r\n }\r\n if (this._platform.isTouchDevice() || this.disabled() || this.readonly()) {\r\n return;\r\n }\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.show();\r\n }\r\n\r\n /**\r\n * Hides the calendar popup. Only works if `inline` is `false`.\r\n */\r\n public hide() {\r\n if (this.inline()) {\r\n throw new NgnError('calendar', 'cannot close inline calendar');\r\n }\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.hide();\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent) {\r\n // @todo: handle date selection with keys\r\n\r\n // if event is not handled by the listbox, we can handle it here\r\n if (event.key === 'Enter' && !this.inline()) {\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.toggle();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n protected stringValueChange(newValue: string | null) {\r\n if (!newValue) {\r\n return true;\r\n }\r\n\r\n const date = new Date(newValue);\r\n if (!isNaN(date.getTime())) {\r\n if (!this.showTime()) {\r\n date.setHours(this.value()?.getHours() || 0);\r\n date.setMinutes(this.value()?.getMinutes() || 0);\r\n date.setSeconds(this.value()?.getSeconds() || 0);\r\n } else if (!this.showSeconds()) {\r\n date.setSeconds(this.value()?.getSeconds() || 0);\r\n }\r\n this.value.set(date);\r\n }\r\n return true;\r\n }\r\n\r\n protected potentiallyBlurred() {\r\n setTimeout(() => {\r\n if (this.element.nativeElement.contains(document.activeElement) || this._popover()?.open()) {\r\n return;\r\n }\r\n this.touched.set(true);\r\n });\r\n }\r\n}\r\n","@if (inline()) {\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n} @else {\r\n <ngn-input-field\r\n #field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <input\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n ngnInput\r\n #input\r\n (valueChange)=\"stringValueChange($event)\"\r\n [type]=\"showTime() ? 'datetime-local' : 'date'\"\r\n [value]=\"valueStr()\"\r\n [disabled]=\"disabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n <ngn-icon defaultIcon=\"calendar-trigger\" />\r\n </ngn-input-field>\r\n <ngn-popover\r\n #popover\r\n [anchor]=\"field.element.nativeElement\"\r\n [id]=\"inputId() + '_popover'\"\r\n (closing)=\"potentiallyBlurred()\"\r\n >\r\n <ng-template #lazy>\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n </ng-template>\r\n </ngn-popover>\r\n}\r\n\r\n<ng-template #calendar>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n root: true,\r\n inline: inline(),\r\n }\"\r\n >\r\n <ngn-calendar-days\r\n [component]=\"this\"\r\n [theme]=\"theme\"\r\n [year]=\"year()\"\r\n [month]=\"month()\"\r\n [currentValue]=\"value()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n (previousMonth)=\"previousMonth()\"\r\n (nextMonth)=\"nextMonth()\"\r\n (daySelected)=\"selectDay($event)\"\r\n (monthSelected)=\"selectMonth($event)\"\r\n (yearSelected)=\"selectYear($event)\"\r\n (timeChanged)=\"changeTime($event)\"\r\n [dayTemplate]=\"dayTemplate()\"\r\n [weekDayTemplate]=\"weekDayTemplate()\"\r\n [timeTemplate]=\"timeTemplate()\"\r\n [yearTemplate]=\"yearTemplate()\"\r\n [monthTemplate]=\"monthTemplate()\"\r\n [showTime]=\"showTime()\"\r\n [showSeconds]=\"showSeconds()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n />\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayTemplate [ngnTemplate]=\"templateTypes.day\" let-day>\r\n {{ day.date }}\r\n</ng-template>\r\n\r\n<ng-template #defaultWeekDayTemplate [ngnTemplate]=\"templateTypes.weekDay\" let-weekDay>\r\n <span>\r\n {{ weekDay.translation }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultTimeTemplate [ngnTemplate]=\"templateTypes.time\" let-time>\r\n @defer {\r\n <div [ptInt]=\"this\" [ptClass]=\"'time'\">\r\n <ngn-calendar-time\r\n [component]=\"this\"\r\n [currentValue]=\"time.time\"\r\n [showSeconds]=\"time.showSeconds\"\r\n (timeChange)=\"time.change($event)\"\r\n />\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultYearTemplate [ngnTemplate]=\"templateTypes.year\" let-y>\r\n @defer {\r\n <ngn-select\r\n [editable]=\"true\"\r\n [value]=\"year() + ''\"\r\n (valueChange)=\"y.change(+($event || 0))\"\r\n [options]=\"yearOptions\"\r\n [virtual]=\"true\"\r\n [itemHeight]=\"40\"\r\n [popoverOptions]=\"{ sizeConstraints: { maxHeight: '300px' } }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-year'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [editableAutoFilter]=\"false\"\r\n [tabindex]=\"-1\"\r\n >\r\n <input ngnInput type=\"number\" [attr.aria-label]=\"i18n['calendar_selectYear']()\" />\r\n </ngn-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultMonthTemplate [ngnTemplate]=\"templateTypes.month\" let-m>\r\n @defer {\r\n <ngn-select\r\n [value]=\"m.month\"\r\n (valueChange)=\"m.change($event!)\"\r\n [options]=\"monthOptions()\"\r\n [popoverOptions]=\"{\r\n sizeConstraints: { maxHeight: '300px', width: '130px', maxWidth: '130px' },\r\n }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-month'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [tabindex]=\"-1\"\r\n />\r\n }\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAaM,MAAgB,iBAAkB,SAAQ,gBAAyC,CAAA;;AAEtE,IAAA,mBAAmB,GAClC,SAAS,CAAC,QAAQ,CAA6C,oBAAoB,CAAC;AACrE,IAAA,gBAAgB,GAC/B,YAAY,CAA6C,KAAK,uFAAC;AACjE;;;AAGG;AACa,IAAA,WAAW,GAAG,KAAK,CAAoD,IAAI,kFAAC;IACzE,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAClF;;AAEgB,IAAA,uBAAuB,GACtC,SAAS,CAAC,QAAQ,CAAiD,wBAAwB,CAAC;AAC7E,IAAA,oBAAoB,GACnC,YAAY,CAAiD,SAAS,2FAAC;AACzE;;;AAGG;AACa,IAAA,eAAe,GAAG,KAAK,CACrC,IAAI,sFACL;IACkB,eAAe,GAAG,QAAQ,CAC3C,MAAM,IAAI,CAAC,oBAAoB,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC9F;;AAEgB,IAAA,qBAAqB,GACpC,SAAS,CAAC,QAAQ,CAA+C,sBAAsB,CAAC;AACzE,IAAA,kBAAkB,GACjC,YAAY,CAA+C,OAAO,yFAAC;AACrE;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK,CAAsD,IAAI,oFAAC;IAC7E,aAAa,GAAG,QAAQ,CACzC,MAAM,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACxF;;AAEgB,IAAA,oBAAoB,GACnC,SAAS,CAAC,QAAQ,CAA8C,qBAAqB,CAAC;AACvE,IAAA,iBAAiB,GAChC,YAAY,CAA8C,MAAM,wFAAC;AACnE;;;AAGG;AACa,IAAA,YAAY,GAAG,KAAK,CAAqD,IAAI,mFAAC;IAC3E,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACrF;;AAEgB,IAAA,oBAAoB,GACnC,SAAS,CAAC,QAAQ,CAA8C,qBAAqB,CAAC;AACvE,IAAA,iBAAiB,GAChC,YAAY,CAA8C,MAAM,wFAAC;AACnE;;;AAGG;AACa,IAAA,YAAY,GAAG,KAAK,CAAqD,IAAI,mFAAC;IAC3E,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACrF;AAED;;AAEG;IACa,aAAa,GAAG,eAAe,EAqB3C;wGA7FgB,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBADtC;AAIkE,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,oBAAoB,6EAE1B,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAWK,wBAAwB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAE9B,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAaL,sBAAsB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAE5B,OAAO,wLAWF,qBAAqB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAE3B,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAWA,qBAAqB,8EAE3B,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACxE7D,MAAM,MAAM,GAAG;IACpB,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;;AAKL,MAAM,SAAS,GAAG;IACvB,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,WAAW;IACX,UAAU;IACV,QAAQ;IACR,UAAU;;;ACSZ;AACA,MAAM,YAAY,GAAG,CAAC;AACtB,MAAM,WAAW,GAAG,CAAC;MAgBR,YAAY,CAAA;AACP,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,+EAA2B;AACrD,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAuD;AAC7E,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAU;AAC/B,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAU;AAChC,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,kFAAe;AAC5C,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,oFAAW;AAC1C,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,iFAAgC;AAC5D,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,qFAAoC;AACpE,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,kFAAiC;AAC9D,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,kFAAiC;AAC9D,IAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,mFAAkC;AAChE,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAW;AACpC,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,iFAAW;IACvC,aAAa,GAAG,MAAM,EAAE;IACxB,SAAS,GAAG,MAAM,EAAE;IACpB,WAAW,GAAG,MAAM,EAAY;IAChC,YAAY,GAAG,MAAM,EAAU;IAC/B,aAAa,GAAG,MAAM,EAAS;IAC/B,WAAW,GAAG,MAAM,EAAe;IAEhC,MAAM,GAAG,MAAM;AACf,IAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY;AAChC,IAAA,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAChC,IAAA,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE;AACnC,IAAA,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACrC,IAAA,YAAY,GAAG,CAAC,CAAc,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,IAAA,YAAY,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,IAAA,aAAa,GAAG,CAAC,CAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAExD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAC3C,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACxC,SAAA,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACtD,SAAA,GAAG,CAAC,GAAG,KAAK;AACX,QAAA,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC;KACxD,CAAC,CAAC,qFACN;AAEgB,IAAA,UAAU,GAAG,YAAY,CAAgC,WAAW,iFAAC;AACrE,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,2FAAC;IAC/E,YAAY,GAAG,QAAQ,CAAC,MACvC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACrD;IACgB,oBAAoB,GAAG,QAAQ,CAAC,MAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACjD;IACgB,gBAAgB,GAAG,QAAQ,CAAC,MAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAChD;AAEkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAiB;AACxD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC/C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAClD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;AACvC,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE;;QAGvD,MAAM,cAAc,GAAG,CAAC,eAAe,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC;AACjE,QAAA,MAAM,qBAAqB,GAAG,cAAc,GAAG,YAAY,GAAG,CAAC;AAC/D,QAAA,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,GAAG,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC;QAC7E,MAAM,SAAS,GAAG,qBAAqB,GAAG,WAAW,GAAG,eAAe,GAAG,WAAW,GAAG,CAAC;AACzF,QAAA,MAAM,QAAQ,GAAG,mBAAmB,GAAG,qBAAqB,GAAG,CAAC;;QAGhE,MAAM,OAAO,GAAe,EAAE;QAC9B,IAAI,WAAW,GAAG,QAAQ;AAC1B,QAAA,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;AAEtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;;YAElC,IAAI,WAAW,GAAG,mBAAmB,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;gBAC5D,WAAW,GAAG,CAAC;gBACf,YAAY,GAAG,CAAC;YAClB;iBAAO,IAAI,WAAW,GAAG,WAAW,IAAI,YAAY,KAAK,CAAC,EAAE;gBAC1D,WAAW,GAAG,CAAC;gBACf,YAAY,GAAG,CAAC;YAClB;YAEA,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,WAAW,EAAE,YAAY;AAC1B,aAAA,CAAC;AAEF,YAAA,WAAW,EAAE;QACf;;QAGA,MAAM,KAAK,GAAgB,EAAE;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC1C,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA,CAAC;QACJ;QAEA,OAAO,EAAE,KAAK,EAAE;AAClB,IAAA,CAAC,iFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;QAC/B,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE;AAC/E,YAAA,OAAO,GAAG,CAAC,OAAO,EAAE;QACtB;AACA,QAAA,OAAO,CAAC;AACV,IAAA,CAAC,kFAAC;IAEQ,IAAI,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;IAEU,IAAI,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;AAEU,IAAA,UAAU,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;IAEU,UAAU,CAAC,KAAoB,EAAE,GAAsB,EAAA;AAC/D,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC3E,KAAK,CAAC,cAAc,EAAE;YAEtB,MAAM,sBAAsB,GAAG,MAAK;gBAClC,OAAO,IAAI,CAAC,UAAU;qBACnB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa;qBAC5B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC9E,YAAA,CAAC;AAED,YAAA,MAAM,aAAa,GAAG,sBAAsB,EAAE;YAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;AACxC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;AACvC,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE;AAC9B,gBAAA,IAAI,KAAK,GAAG,WAAW,GAAG,CAAC,EAAE;oBAC3B,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;gBACnC;qBAAO;oBACL,IAAI,CAAC,IAAI,EAAE;oBACX,UAAU,CAAC,MAAK;AACd,wBAAA,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AACtC,oBAAA,CAAC,CAAC;gBACJ;YACF;AAAO,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;AACpC,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;gBACnC;qBAAO;oBACL,IAAI,CAAC,IAAI,EAAE;oBACX,UAAU,CAAC,MAAK;AACd,wBAAA,MAAM,OAAO,GAAG,sBAAsB,EAAE;wBACxC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;AACtC,oBAAA,CAAC,CAAC;gBACJ;YACF;AAAO,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;AACpC,gBAAA,IAAI,KAAK,GAAG,WAAW,GAAG,CAAC,EAAE;oBAC3B,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;gBACnC;qBAAO;oBACL,IAAI,CAAC,IAAI,EAAE;oBACX,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,WAAW;oBAC3C,UAAU,CAAC,MAAK;AACd,wBAAA,sBAAsB,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE;AAC9C,oBAAA,CAAC,CAAC;gBACJ;YACF;AAAO,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;AAClC,gBAAA,IAAI,KAAK,IAAI,CAAC,EAAE;oBACd,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;gBACnC;qBAAO;oBACL,IAAI,CAAC,IAAI,EAAE;oBACX,UAAU,CAAC,MAAK;AACd,wBAAA,MAAM,OAAO,GAAG,sBAAsB,EAAE;wBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5E,wBAAA,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE;AAC/B,oBAAA,CAAC,CAAC;gBACJ;YACF;QACF;IACF;wGA7KW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnDzB,uvHAqHA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDpEY,gBAAgB,oJAAE,KAAK,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAE1C,YAAY,EAAA,UAAA,EAAA,CAAA;kBANxB,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,mBAAmB,EAAA,OAAA,EAEpB,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,uvHAAA,EAAA;4rDAyCoB,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5DvF,SAAS,mBAAmB,GAAA;IAC1B,MAAM,SAAS,GAAG,GAAG;IACrB,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC5C,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM;AAClD,QAAA,KAAK,EAAE,CAAC,WAAW,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE;AACnD,QAAA,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC;AACvC,KAAA,CAAC,CAAC;AACL;AAIA;;AAEG;AAmBG,MAAO,WAAY,SAAQ,iBAAiB,CAAA;AAChD;;;AAGG;AACa,IAAA,cAAc,GAAG,KAAK,CAAU,QAAQ,qFAAC;AACzD;;;AAGG;IACa,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACxE;;;AAGG;IACa,WAAW,GAAG,KAAK,CAAC,KAAK,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAC3E;;;AAGG;IACa,MAAM,GAAG,KAAK,CAAC,KAAK,8EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAErD,IAAA,QAAQ,GAAG,SAAS,CAAa,UAAU,+EAAC;AAC5C,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC1B,IAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY;AAChC,IAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC;IACzD,IAAI,GAAG,YAAY,CACpC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC9D;IACkB,KAAK,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IAC7E,WAAW,GAAG,mBAAmB,EAAE;AACnC,IAAA,YAAY,GAAqC,QAAQ,CAAC,MAAK;AAChF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,EAAE,MAAM,EAAE,EAAE,EAAE,EACd,CAAC,CAAC,EAAE,CAAC,MACM;AACP,YAAA,KAAK,EACH,IAAI,CAAC,IAAI,CACP,CAAA,gBAAA,EAAmB,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,CAC9E;AACH,YAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAChB,YAAA,MAAM,EAAE,CAAA,eAAA,EAAkB,MAAM,CAAC,CAAC,CAAC,CAAA,CAAE;AACtC,SAAA,CAAA,CACJ;AACD,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,mFAAC;AACiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;;QAEA,OAAO,CAAA,EAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAC7F,CAAC,EACD,GAAG,CACJ,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,EAC3C,IAAI,CAAC,QAAQ;cACT,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CACnC,CAAC,EACD,GAAG,CACJ,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,EAC9C,IAAI,CAAC,WAAW,EAAE,GAAG,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE,GAAG,EAC3E,CAAA;cACA,EACN,CAAA,CAAE;AACJ,IAAA,CAAC,+EAAC;IAEiB,aAAa,GAAG,MAAK;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;AAC/B,QAAA,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;QAClC;AACF,IAAA,CAAC;IAEkB,SAAS,GAAG,MAAK;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;AAC/B,QAAA,IAAI,YAAY,KAAK,EAAE,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;QAClC;AACF,IAAA,CAAC;IAEkB,YAAY,GAAG,MAAK;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,CAAC;IAEkB,QAAQ,GAAG,MAAK;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,CAAC;AAES,IAAA,WAAW,CAAC,KAAY,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC;AAEU,IAAA,UAAU,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACrB;AAEU,IAAA,SAAS,CAAC,GAAa,EAAA;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QACrD,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACjC,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC;AACjD,QAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC1B;AAEU,IAAA,UAAU,CAAC,OAAoB,EAAA;QACvC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACpB;QACF;AACA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;QACjC,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC;YACvC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACzC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B;IACF;AAEA;;AAEG;IACI,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,6BAA6B,CAAC;QAC/D;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACxE;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,8CAA8C,CAAC;QAChF;QACA,OAAO,CAAC,IAAI,EAAE;IAChB;AAEA;;AAEG;IACI,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,8BAA8B,CAAC;QAChE;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,8CAA8C,CAAC;QAChF;QACA,OAAO,CAAC,IAAI,EAAE;IAChB;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;;;AAItC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAC3C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,8CAA8C,CAAC;YAChF;YACA,OAAO,CAAC,MAAM,EAAE;YAChB,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;AAEU,IAAA,iBAAiB,CAAC,QAAuB,EAAA;QACjD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC5C,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAClD;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC9B,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAClD;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB;AACA,QAAA,OAAO,IAAI;IACb;IAEU,kBAAkB,GAAA;QAC1B,UAAU,CAAC,MAAK;YACd,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE;gBAC1F;YACF;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,CAAC,CAAC;IACJ;wGAxMW,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFX,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwBa,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpF9D,glIAqIA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDpFI,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,WAAW,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,KAAK,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,QAAQ,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEb,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,YAAY,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,sBAAA,EAAA,CAAA,MAAA,CANZ,KAAK,6FAAL,KAAK;AACL,gBAAA,QAAQ,qEADR,KAAK,EAAA,OAAA,0BAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,EAAA,CAAA;;iGAWI,WAAW,EAAA,mBAAA,EAAA,MAAA,CAAA,OAAA,+CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,YAAA,CAAA,EAAA,OAAA,0BAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,eAAA,EAAA,CAAA,YAAA,EAAA,SAAA,MAAA,EAAA,UAAA,EAAA,CAAA;sBAlBvB,SAAS;AACS,gBAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,cAAc,EAAA,OAAA,EAEf;4BACP,gBAAgB;4BAChB,WAAW;4BACX,KAAK;4BACL,QAAQ;4BACR,OAAO;4BACP,aAAa;4BACb,SAAS;4BACT,UAAU;4BACV,YAAY;4BACZ,YAAY;yBACb,EAAA,SAAA,EACU,CAAC,WAAW,CAAA,WAAA,CAAa,CAAC,EAAA,QAAA,EAAA,glIAAA,EAAA;kgBAwBa,UAAU,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA,EAAA,CAAA;;AEpF9D;;AAEG;;;;"}
@@ -42,12 +42,12 @@ class NgnCheckbox extends ValueControlBase {
42
42
  constructor() {
43
43
  super();
44
44
  }
45
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: NgnCheckbox, isStandalone: true, selector: "ngn-checkbox", inputs: { iconChecked: { classPropertyName: "iconChecked", publicName: "iconChecked", isSignal: true, isRequired: false, transformFunction: null }, iconUnchecked: { classPropertyName: "iconUnchecked", publicName: "iconUnchecked", isSignal: true, isRequired: false, transformFunction: null }, iconIndeterminate: { classPropertyName: "iconIndeterminate", publicName: "iconIndeterminate", isSignal: true, isRequired: false, transformFunction: null }, allowIndeterminate: { classPropertyName: "allowIndeterminate", publicName: "allowIndeterminate", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnCheckbox)], usesInheritance: true, ngImport: i0, template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'minus'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'check'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnCheckbox, isStandalone: true, selector: "ngn-checkbox", inputs: { iconChecked: { classPropertyName: "iconChecked", publicName: "iconChecked", isSignal: true, isRequired: false, transformFunction: null }, iconUnchecked: { classPropertyName: "iconUnchecked", publicName: "iconUnchecked", isSignal: true, isRequired: false, transformFunction: null }, iconIndeterminate: { classPropertyName: "iconIndeterminate", publicName: "iconIndeterminate", isSignal: true, isRequired: false, transformFunction: null }, allowIndeterminate: { classPropertyName: "allowIndeterminate", publicName: "allowIndeterminate", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnCheckbox)], usesInheritance: true, ngImport: i0, template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'checkbox-indeterminate'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'checkbox-checked'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
47
47
  }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnCheckbox, decorators: [{
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnCheckbox, decorators: [{
49
49
  type: Component,
50
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-checkbox', imports: [NgnPt, NgnIcon], providers: [provideSelf(NgnCheckbox)], template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'minus'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'check'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n" }]
50
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-checkbox', imports: [NgnPt, NgnIcon], providers: [provideSelf(NgnCheckbox)], template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'checkbox-indeterminate'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'checkbox-checked'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n" }]
51
51
  }], ctorParameters: () => [], propDecorators: { iconChecked: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconChecked", required: false }] }], iconUnchecked: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconUnchecked", required: false }] }], iconIndeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconIndeterminate", required: false }] }], allowIndeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowIndeterminate", required: false }] }] } });
52
52
 
53
53
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-checkbox.mjs","sources":["../../src/checkbox/checkbox.ts","../../src/checkbox/checkbox.html","../../src/checkbox/ngneers-controls-checkbox.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { NgnPt, provideSelf, ValueControlBase } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { checkboxControlTemplate } from '@ngneers/controls-themes/templates/checkbox';\r\n\r\nimport type { InputGeneric } from '@ngneers/controls/utils';\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\ntype ValueType<Indeterminate extends boolean> =\r\n InputGeneric<Indeterminate, false> extends false ? boolean : boolean | null;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-checkbox',\r\n templateUrl: './checkbox.html',\r\n imports: [NgnPt, NgnIcon],\r\n providers: [provideSelf(NgnCheckbox)],\r\n})\r\nexport class NgnCheckbox<Indeterminate extends boolean> extends ValueControlBase<\r\n 'checkbox',\r\n ValueType<Indeterminate>\r\n> {\r\n protected readonly theme = this.injectThemeTemplate(checkboxControlTemplate, {\r\n root: true,\r\n invalid: () => this.invalid(),\r\n });\r\n\r\n /**\r\n * Set a custom icon for the checked state.\r\n */\r\n public readonly iconChecked = input<IconType>();\r\n /**\r\n * Set a custom icon for the unchecked state.\r\n */\r\n public readonly iconUnchecked = input<IconType>();\r\n /**\r\n * Set a custom icon for the indeterminate state.\r\n */\r\n public readonly iconIndeterminate = input<IconType>();\r\n /**\r\n * Set whether to allow the indeterminate state.\r\n * If `true`, this will change the {@link value} type to `boolean | null`.\r\n */\r\n public readonly allowIndeterminate = input<Indeterminate>();\r\n protected readonly indeterminate = computed(\r\n () => this.allowIndeterminate() && this.value() === null\r\n );\r\n\r\n protected changed(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.value.set(target.checked);\r\n }\r\n\r\n protected onClick(event: Event) {\r\n if (this.readonly() || this.disabled()) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'minus'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'check'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-checkbox.mjs","sources":["../../src/checkbox/checkbox.ts","../../src/checkbox/checkbox.html","../../src/checkbox/ngneers-controls-checkbox.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { NgnPt, provideSelf, ValueControlBase } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { checkboxControlTemplate } from '@ngneers/controls-themes/templates/checkbox';\r\n\r\nimport type { InputGeneric } from '@ngneers/controls/utils';\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\ntype ValueType<Indeterminate extends boolean> =\r\n InputGeneric<Indeterminate, false> extends false ? boolean : boolean | null;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-checkbox',\r\n templateUrl: './checkbox.html',\r\n imports: [NgnPt, NgnIcon],\r\n providers: [provideSelf(NgnCheckbox)],\r\n})\r\nexport class NgnCheckbox<Indeterminate extends boolean> extends ValueControlBase<\r\n 'checkbox',\r\n ValueType<Indeterminate>\r\n> {\r\n protected readonly theme = this.injectThemeTemplate(checkboxControlTemplate, {\r\n root: true,\r\n invalid: () => this.invalid(),\r\n });\r\n\r\n /**\r\n * Set a custom icon for the checked state.\r\n */\r\n public readonly iconChecked = input<IconType>();\r\n /**\r\n * Set a custom icon for the unchecked state.\r\n */\r\n public readonly iconUnchecked = input<IconType>();\r\n /**\r\n * Set a custom icon for the indeterminate state.\r\n */\r\n public readonly iconIndeterminate = input<IconType>();\r\n /**\r\n * Set whether to allow the indeterminate state.\r\n * If `true`, this will change the {@link value} type to `boolean | null`.\r\n */\r\n public readonly allowIndeterminate = input<Indeterminate>();\r\n protected readonly indeterminate = computed(\r\n () => this.allowIndeterminate() && this.value() === null\r\n );\r\n\r\n protected changed(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.value.set(target.checked);\r\n }\r\n\r\n protected onClick(event: Event) {\r\n if (this.readonly() || this.disabled()) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'checkbox-indeterminate'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'checkbox-checked'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}