@koobiq/components 21.0.1 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/badge/_badge-theme.scss +31 -0
  2. package/breadcrumbs/breadcrumbs.scss +5 -1
  3. package/checkbox/_checkbox-theme.scss +0 -17
  4. package/checkbox/checkbox-tokens.scss +0 -4
  5. package/code-block/_code-block-theme.scss +7 -6
  6. package/code-block/code-block-tokens.scss +8 -4
  7. package/code-block/code-block.scss +54 -32
  8. package/content-panel/content-panel-header.scss +2 -3
  9. package/content-panel/content-panel.scss +3 -0
  10. package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
  11. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  12. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
  14. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
  16. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-badge.mjs +2 -2
  18. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
  22. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-checkbox.mjs +18 -8
  24. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
  26. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-code-block.mjs +63 -379
  28. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-content-panel.mjs +4 -4
  30. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-core.mjs +300 -37
  32. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-datepicker.mjs +151 -60
  34. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-divider.mjs +3 -3
  36. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-dropdown.mjs +3 -3
  38. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-file-upload.mjs +17 -8
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-filter-bar.mjs +115 -36
  42. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-flag.mjs +3 -3
  44. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-form-field.mjs +90 -27
  46. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-icon.mjs +2 -2
  48. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
  50. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-input.mjs +76 -17
  52. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-list.mjs +1 -1
  54. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-modal.mjs +3 -3
  56. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-navbar.mjs +86 -25
  58. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-notification-center.mjs +4 -4
  60. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
  62. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-popover.mjs +86 -7
  64. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-radio.mjs +41 -19
  66. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
  68. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-select.mjs +49 -12
  70. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-splitter.mjs +49 -25
  74. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-tabs.mjs +30 -11
  76. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-tags.mjs +1 -1
  78. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-textarea.mjs +28 -11
  80. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-time-range.mjs +2 -2
  82. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-timepicker.mjs +71 -16
  84. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  86. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-toast.mjs +2 -2
  88. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-toggle.mjs +25 -9
  90. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-tooltip.mjs +90 -17
  92. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-top-bar.mjs +27 -7
  94. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-tree-select.mjs +4 -4
  96. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-tree.mjs +71 -27
  98. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  99. package/file-upload/_file-upload-theme.scss +0 -12
  100. package/file-upload/file-upload-tokens.scss +0 -1
  101. package/file-upload/file-upload.scss +0 -1
  102. package/filter-bar/_filter-bar-theme.scss +7 -8
  103. package/filter-bar/filter-bar.scss +0 -1
  104. package/filter-bar/pipes/base-pipe.scss +36 -2
  105. package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
  106. package/form-field/_fieldset-theme.scss +2 -7
  107. package/form-field/_form-field-theme.scss +9 -22
  108. package/form-field/_hint-theme.scss +20 -0
  109. package/form-field/fieldset-tokens.scss +0 -1
  110. package/form-field/fieldset.scss +0 -3
  111. package/form-field/form-field-tokens.scss +1 -1
  112. package/form-field/form-field.scss +9 -0
  113. package/form-field/hint-tokens.scss +3 -0
  114. package/modal/modal.scss +2 -0
  115. package/navbar/_navbar-item_vertical.scss +48 -2
  116. package/navbar/_navbar-theme.scss +11 -3
  117. package/navbar/navbar-item.scss +17 -0
  118. package/navbar/navbar-tokens.scss +3 -0
  119. package/package.json +4 -4
  120. package/popover/popover.scss +1 -1
  121. package/radio/_radio-theme.scss +0 -30
  122. package/radio/radio-tokens.scss +0 -2
  123. package/schematics/migrations/deprecated-icons/README.md +21 -5
  124. package/schematics/migrations/deprecated-icons/index.cjs +8 -22
  125. package/schematics/migrations/deprecated-icons/schema.json +1 -1
  126. package/schematics/migrations/icons-replacement/README.md +16 -2
  127. package/schematics/migrations/icons-replacement/index.cjs +18 -16
  128. package/schematics/migrations/icons-replacement/schema.json +12 -3
  129. package/schematics/migrations/new-icons-pack/README.md +37 -25
  130. package/schematics/migrations/new-icons-pack/index.cjs +22 -32
  131. package/schematics/migrations/new-icons-pack/replacement.json +2 -14
  132. package/schematics/migrations/new-icons-pack/schema.json +3 -3
  133. package/schematics/ng-add/index.cjs +4 -4
  134. package/schematics/utils/custom-data.cjs +64 -0
  135. package/schematics/utils/icon-migration.cjs +9 -3
  136. package/schematics/utils/messages.cjs +4 -0
  137. package/schematics/utils/package-config.cjs +19 -0
  138. package/select/select.scss +7 -0
  139. package/tabs/_tabs-common.scss +23 -0
  140. package/textarea/textarea-tokens.scss +4 -1
  141. package/toast/toast.component.scss +1 -0
  142. package/toggle/_toggle-theme.scss +0 -17
  143. package/tooltip/tooltip.scss +1 -1
  144. package/top-bar/top-bar-tokens.scss +1 -0
  145. package/top-bar/top-bar.scss +10 -0
  146. package/types/koobiq-components-accordion.d.ts +25 -0
  147. package/types/koobiq-components-button-toggle.d.ts +6 -0
  148. package/types/koobiq-components-checkbox.d.ts +30 -0
  149. package/types/koobiq-components-clamped-text.d.ts +16 -3
  150. package/types/koobiq-components-code-block.d.ts +17 -3
  151. package/types/koobiq-components-core.d.ts +226 -13
  152. package/types/koobiq-components-datepicker.d.ts +28 -1
  153. package/types/koobiq-components-divider.d.ts +28 -10
  154. package/types/koobiq-components-dropdown.d.ts +19 -0
  155. package/types/koobiq-components-filter-bar.d.ts +77 -4
  156. package/types/koobiq-components-flag.d.ts +18 -0
  157. package/types/koobiq-components-form-field.d.ts +87 -6
  158. package/types/koobiq-components-icon.d.ts +15 -0
  159. package/types/koobiq-components-inline-edit.d.ts +8 -1
  160. package/types/koobiq-components-input.d.ts +22 -3
  161. package/types/koobiq-components-list.d.ts +6 -0
  162. package/types/koobiq-components-modal.d.ts +7 -0
  163. package/types/koobiq-components-navbar.d.ts +71 -7
  164. package/types/koobiq-components-notification-center.d.ts +13 -0
  165. package/types/koobiq-components-overflow-items.d.ts +26 -2
  166. package/types/koobiq-components-popover.d.ts +38 -3
  167. package/types/koobiq-components-radio.d.ts +30 -0
  168. package/types/koobiq-components-search-expandable.d.ts +10 -0
  169. package/types/koobiq-components-select.d.ts +36 -4
  170. package/types/koobiq-components-sidepanel.d.ts +52 -1
  171. package/types/koobiq-components-splitter.d.ts +13 -4
  172. package/types/koobiq-components-tabs.d.ts +4 -0
  173. package/types/koobiq-components-tags.d.ts +6 -0
  174. package/types/koobiq-components-textarea.d.ts +9 -2
  175. package/types/koobiq-components-timepicker.d.ts +15 -0
  176. package/types/koobiq-components-toggle.d.ts +30 -0
  177. package/types/koobiq-components-tooltip.d.ts +55 -10
  178. package/types/koobiq-components-top-bar.d.ts +11 -3
  179. package/types/koobiq-components-tree-select.d.ts +12 -0
  180. package/types/koobiq-components-tree.d.ts +37 -2
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-datepicker.mjs","sources":["../../../packages/components/datepicker/calendar-body.component.ts","../../../packages/components/datepicker/calendar-body.html","../../../packages/components/datepicker/datepicker-errors.ts","../../../packages/components/datepicker/calendar-header.component.ts","../../../packages/components/datepicker/calendar-header.html","../../../packages/components/datepicker/month-view.component.ts","../../../packages/components/datepicker/month-view.html","../../../packages/components/datepicker/calendar.component.ts","../../../packages/components/datepicker/calendar.html","../../../packages/components/datepicker/datepicker-input.directive.ts","../../../packages/components/datepicker/datepicker-toggle.component.ts","../../../packages/components/datepicker/datepicker.component.ts","../../../packages/components/datepicker/datepicker-content.html","../../../packages/components/datepicker/datepicker-module.ts","../../../packages/components/datepicker/koobiq-components-datepicker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation,\n input,\n output\n} from '@angular/core';\n\n/**\n * Extra CSS classes that can be associated with a calendar cell.\n */\nexport type KbqCalendarCellCssClasses = string | string[] | Set<string> | { [key: string]: any };\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n *\n * @docs-private\n */\nexport class KbqCalendarCell {\n constructor(\n public value: number,\n public displayValue: string,\n public enabled: boolean,\n public cssClasses?: KbqCalendarCellCssClasses\n ) {}\n}\n\n/**\n * An internal component used to display calendar data in a table.\n *\n * @docs-private\n */\n@Component({\n selector: '[kbq-calendar-body]',\n imports: [],\n templateUrl: 'calendar-body.html',\n styleUrls: ['calendar-body.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-calendar__body'\n },\n exportAs: 'kbqCalendarBody'\n})\nexport class KbqCalendarBody implements OnChanges {\n /** The cells to display in the table. */\n readonly rows = input<KbqCalendarCell[][]>(undefined!);\n\n /** The value in the table that corresponds to today. */\n readonly todayValue = input<number>(undefined!);\n\n /** The value in the table that is currently selected. */\n readonly selectedValue = input<number>(undefined!);\n\n /** The minimum number of free cells needed to fit the label in the first row. */\n readonly labelMinRequiredCells = input<number>(undefined!);\n\n /** The number of columns in the table. */\n readonly numCols = input(7);\n\n /** The cell number of the active cell in the table. */\n readonly activeCell = input(0);\n\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n readonly cellAspectRatio = input(1);\n\n /** Emits when a new value is selected. */\n readonly selectedValueChange = output<number>();\n\n /** The number of blank cells to put at the beginning for the first row. */\n firstRowOffset: number;\n\n /** Padding for the individual date cells. */\n cellPadding: string;\n\n /** Width of an individual cell. */\n cellWidth: string;\n\n cellClicked(cell: KbqCalendarCell): void {\n if (cell.enabled) {\n this.selectedValueChange.emit(cell.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const columnChanges = changes.numCols;\n const { rows: rowsInput, numCols: numColsInput } = this;\n const rows = rowsInput();\n const numCols = numColsInput();\n\n if (changes.rows || columnChanges) {\n this.firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n\n if (changes.cellAspectRatio || columnChanges || !this.cellPadding) {\n // todo\n // this.cellPadding = `${this.cellAspectRatio * 50 / numCols}%`;\n this.cellPadding = '0';\n }\n\n if (columnChanges || !this.cellWidth) {\n this.cellWidth = `${100 / numCols}%`;\n }\n }\n\n isActiveCell(rowIndex: number, colIndex: number): boolean {\n let cellNumber = rowIndex * this.numCols() + colIndex;\n\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this.firstRowOffset;\n }\n\n return cellNumber === this.activeCell();\n }\n}\n","<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows(); track $index; let rowIndex = $index) {\n <tr>\n <!-- We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\n The aspect ratio of the table cells is maintained by setting the top and bottom padding as a\n percentage of the width (a variant of the trick described here:\n https://www.w3schools.com/howto/howto_css_aspect_ratio.asp). -->\n @if (rowIndex === 0 && firstRowOffset) {\n <td class=\"kbq-calendar__body-label\" [attr.colspan]=\"firstRowOffset\"></td>\n }\n @for (item of row; track item.displayValue; let colIndex = $index) {\n <td\n class=\"kbq-calendar__body-cell\"\n [class.kbq-calendar__body_active]=\"isActiveCell(rowIndex, colIndex)\"\n [class]=\"item.cssClasses!\"\n [style.paddingBottom]=\"cellPadding\"\n [style.paddingTop]=\"cellPadding\"\n [style.width]=\"cellWidth\"\n [tabindex]=\"-1\"\n (click)=\"cellClicked(item)\"\n >\n <div\n class=\"kbq-calendar__body-cell-content\"\n [class.kbq-calendar__body-today]=\"todayValue() === item.value\"\n [class.kbq-disabled]=\"!item.enabled\"\n [class.kbq-selected]=\"selectedValue() === item.value\"\n >\n {{ item.displayValue }}\n </div>\n </td>\n }\n </tr>\n}\n","import { inject } from '@angular/core';\nimport { DateAdapter } from '@koobiq/components/core';\n\n/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n return Error(\n `KbqDatepicker: No provider found for ${provider}. You must import one of the existing ` +\n `modules at your application root or provide a custom implementation or use exists ones.`\n );\n}\n\n/** Injects `DateAdapter`, naming the missing provider instead of letting DI throw a bare `NullInjectorError`. */\nexport function injectRequiredDateAdapter<D>(): DateAdapter<D> {\n const adapter = inject<DateAdapter<D>>(DateAdapter, { optional: true });\n\n if (!adapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n return adapter;\n}\n","import { TitleCasePipe } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n input,\n OnChanges,\n output,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { kbqInjectA11yLocaleConfiguration, KbqOptionModule } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqSelectModule } from '@koobiq/components/select';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\n\nconst defaultMinYear = 1900;\nconst defaultMaxYear = 2099;\n\nexport type MonthName = {\n name: string;\n nameShort: string;\n value: number;\n disabled: boolean;\n};\n\n/** Default header for KbqCalendar */\n@Component({\n selector: 'kbq-calendar-header',\n imports: [\n TitleCasePipe,\n KbqButtonModule,\n KbqIconModule,\n KbqSelectModule,\n KbqOptionModule\n ],\n templateUrl: 'calendar-header.html',\n styleUrls: ['calendar-header.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-calendar-header'\n },\n exportAs: 'kbqCalendarHeader'\n})\nexport class KbqCalendarHeader<D> implements AfterContentInit, OnChanges {\n private readonly adapter = injectRequiredDateAdapter<D>();\n\n /** Accessible names for the icon-only month navigation buttons. */\n protected readonly a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();\n\n monthNames: MonthName[];\n selectedMonth: number;\n\n years: number[] = [];\n selectedYear: number;\n\n get activeDate(): D {\n return this._activeDate;\n }\n\n set activeDate(value: D) {\n this._activeDate = value;\n\n this.updateSelectedValues();\n this.updateSelectionOptions();\n }\n\n private _activeDate: D;\n\n get maxDate(): D | null {\n return this._maxDate;\n }\n\n set maxDate(value: D | null) {\n if (!value) {\n return;\n }\n\n this._maxDate = value;\n\n this.updateSelectionOptions();\n }\n\n private _maxDate = this.adapter.createDate(defaultMaxYear, 11);\n\n get minDate(): D | null {\n return this._minDate;\n }\n\n set minDate(value: D | null) {\n if (!value) {\n return;\n }\n\n this._minDate = value;\n\n this.updateSelectionOptions();\n }\n\n private _minDate = this.adapter.createDate(defaultMinYear, 1);\n\n /** @docs-private */\n readonly activeDateInput = input<D | undefined>(undefined, { alias: 'activeDate' });\n\n /** @docs-private */\n readonly maxDateInput = input<D | null | undefined>(undefined, { alias: 'maxDate' });\n\n /** @docs-private */\n readonly minDateInput = input<D | null | undefined>(undefined, { alias: 'minDate' });\n\n get previousDisabled(): boolean {\n return this.compareDate(this.activeDate, this.minDate!) <= 0;\n }\n\n get currentDisabled(): boolean {\n const today = this.adapter.today();\n\n return this.compareDate(today, this.minDate!) < 0 || this.compareDate(today, this.maxDate!) > 0;\n }\n\n get nextDisabled(): boolean {\n return this.compareDate(this.activeDate, this.maxDate!) >= 0;\n }\n\n /** Emits when any date is activated. */\n readonly activeDateChange = output<D>();\n readonly monthSelected = output<D>();\n readonly yearSelected = output<D>();\n\n constructor() {\n this.monthNames = this.adapter.getMonthNames('long').map((name, i) => {\n return { name, nameShort: this.adapter.getMonthNames('short')[i], value: i, disabled: false };\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['maxDateInput']) {\n const maxDate = this.maxDateInput();\n\n if (maxDate !== undefined) this.maxDate = maxDate;\n }\n\n if (changes['minDateInput']) {\n const minDate = this.minDateInput();\n\n if (minDate !== undefined) this.minDate = minDate;\n }\n\n if (changes['activeDateInput']) {\n const activeDate = this.activeDateInput();\n\n if (activeDate !== undefined) this.activeDate = activeDate;\n }\n }\n\n ngAfterContentInit(): void {\n this.updateYearsOptions();\n this.updateMonthOptions();\n this.updateSelectedValues();\n }\n\n /** Handles when a new month is selected. */\n onMonthSelected(month: number) {\n const year = this.adapter.getYear(this.activeDate);\n const normalizedDate = this.adapter.createDate(year, month);\n const daysInMonth = this.adapter.getNumDaysInMonth(normalizedDate);\n\n this.activeDate = this.adapter.createDate(\n year,\n month,\n Math.min(this.adapter.getDate(this.activeDate), daysInMonth)\n );\n\n this.monthSelected.emit(this.activeDate);\n this.activeDateChange.emit(this.activeDate);\n }\n\n /** Handles when a new year is selected. */\n onYearSelected(year: number) {\n const month = this.adapter.getMonth(this.activeDate);\n const daysInMonth = this.adapter.getNumDaysInMonth(this.adapter.createDate(year, month));\n\n this.activeDate = this.adapter.createDate(\n year,\n month,\n Math.min(this.adapter.getDate(this.activeDate), daysInMonth)\n );\n\n this.yearSelected.emit(this.activeDate);\n this.activeDateChange.emit(this.activeDate);\n\n this.updateMonthOptions();\n }\n\n selectCurrentDate(): void {\n this.activeDate = this.adapter.today();\n\n this.activeDateChange.emit(this.activeDate);\n }\n\n /** Handles user clicks on the previous button. */\n selectPreviousMonth(): void {\n this.activeDate = this.adapter.addCalendarMonths(this.activeDate, -1);\n\n this.activeDateChange.emit(this.activeDate);\n }\n\n /** Handles user clicks on the next button. */\n selectNextMonth(): void {\n this.activeDate = this.adapter.addCalendarMonths(this.activeDate, 1);\n\n this.activeDateChange.emit(this.activeDate);\n }\n\n private compareDate(first: D, second: D): number {\n const normalizedFirst = this.adapter.createDate(this.adapter.getYear(first), this.adapter.getMonth(first));\n\n const normalizedSecond = this.adapter.createDate(this.adapter.getYear(second), this.adapter.getMonth(second));\n\n return this.adapter.compareDate(normalizedFirst, normalizedSecond);\n }\n\n private updateSelectedValues() {\n this.selectedMonth = this.monthNames[this.adapter.getMonth(this.activeDate)].value;\n\n const year = this.adapter.getYear(this.activeDate);\n\n this.selectedYear = this.years.find((item) => item === year) || this.years[0];\n }\n\n private updateSelectionOptions() {\n this.updateYearsOptions();\n this.updateMonthOptions();\n }\n\n private updateYearsOptions() {\n const minYear = this.adapter.getYear(this.minDate!);\n const maxYear = this.adapter.getYear(this.maxDate!);\n\n this.years = [];\n\n for (let key: number = minYear; key <= maxYear; key++) {\n this.years.push(key);\n }\n }\n\n private updateMonthOptions() {\n if (!this._activeDate) {\n return;\n }\n\n const minYear = this.adapter.getYear(this.minDate!);\n const minMonth = this.adapter.getMonth(this.minDate!);\n\n const maxYear = this.adapter.getYear(this.maxDate!);\n const maxMonth = this.adapter.getMonth(this.maxDate!);\n\n const currentYear = this.adapter.getYear(this._activeDate);\n\n if (currentYear === minYear) {\n this.monthNames.forEach((month) => (month.disabled = month.value < minMonth));\n } else if (currentYear === maxYear) {\n this.monthNames.forEach((month) => (month.disabled = month.value > maxMonth));\n } else {\n this.monthNames.forEach((month) => (month.disabled = false));\n }\n }\n}\n","<div class=\"kbq-calendar-header__select-group\">\n <kbq-select\n #monthSelect=\"kbqSelect\"\n class=\"kbq-calendar-header__select\"\n [panelClass]=\"'kbq-calendar-select-panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selectedMonth\"\n (selectionChange)=\"onMonthSelected($event.value)\"\n >\n <button\n kbq-button\n kbq-select-matcher\n class=\"layout-padding-right-xs\"\n [class.kbq-active]=\"monthSelect.panelOpen\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n >\n {{ monthNames[selectedMonth].nameShort | titlecase }}\n\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\" [color]=\"'contrast'\"></i>\n </button>\n\n @for (month of monthNames; track month.nameShort) {\n <kbq-option [disabled]=\"month.disabled\" [kbqTooltipDisabled]=\"true\" [value]=\"month.value\">\n {{ month.name }}\n </kbq-option>\n }\n </kbq-select>\n\n <kbq-select\n #yearSelect=\"kbqSelect\"\n [panelClass]=\"'kbq-calendar-select-panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selectedYear\"\n (selectionChange)=\"onYearSelected($event.value)\"\n >\n <button\n kbq-button\n kbq-select-matcher\n class=\"layout-padding-right-xs\"\n [class.kbq-active]=\"yearSelect.panelOpen\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n >\n {{ selectedYear }}\n\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\"></i>\n </button>\n\n @for (year of years; track year) {\n <kbq-option [kbqTooltipDisabled]=\"true\" [value]=\"year\">\n {{ year }}\n </kbq-option>\n }\n </kbq-select>\n</div>\n\n<div class=\"kbq-calendar-header__button-group\">\n <button\n kbq-button\n class=\"kbq-calendar-header__previous-button\"\n [attr.aria-label]=\"a11yLocaleConfiguration().previousMonth\"\n [color]=\"'contrast'\"\n [disabled]=\"previousDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectPreviousMonth()\"\n >\n <i kbq-icon=\"kbq-chevron-left_16\"></i>\n </button>\n\n <button\n kbq-button\n [attr.aria-label]=\"a11yLocaleConfiguration().currentDate\"\n [color]=\"'contrast'\"\n [disabled]=\"currentDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\"\n >\n <i kbq-icon=\"kbq-circle-xs_16\"></i>\n </button>\n\n <button\n kbq-button\n class=\"kbq-calendar-header__next-button\"\n [attr.aria-label]=\"a11yLocaleConfiguration().nextMonth\"\n [color]=\"'contrast'\"\n [disabled]=\"nextDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectNextMonth()\"\n >\n <i kbq-icon=\"kbq-chevron-right_16\"></i>\n </button>\n</div>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n input,\n output,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter, KbqDateTimezoneService } from '@koobiq/components/core';\nimport { KbqCalendarBody, KbqCalendarCell, KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\n\nconst DAYS_PER_WEEK = 7;\n\n/**\n * An internal component used to display a single month in the datepicker.\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-month-view',\n imports: [\n KbqCalendarBody\n ],\n templateUrl: 'month-view.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'kbqMonthView'\n})\nexport class KbqMonthView<D> implements AfterContentInit, OnChanges {\n private changeDetectorRef = inject(ChangeDetectorRef);\n private readonly timezoneService = inject(KbqDateTimezoneService);\n adapter: DateAdapter<D> = injectRequiredDateAdapter<D>();\n\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n get activeDate(): D {\n return this._activeDate;\n }\n\n set activeDate(value: D) {\n const oldValue = this._activeDate;\n\n this._activeDate = value;\n\n if (!this.hasSameMonthAndYear(oldValue, value)) {\n this.init();\n }\n }\n\n private _activeDate: D;\n\n /** The currently selected date. */\n get selected(): D | null {\n return this._selected;\n }\n\n set selected(value: D | null) {\n this._selected = value;\n this.selectedDate = this.getDateInCurrentMonth(this._selected);\n }\n\n private _selected: D | null;\n\n /** @docs-private */\n readonly activeDateInput = input<D | undefined>(undefined, { alias: 'activeDate' });\n\n /** @docs-private */\n readonly selectedInput = input<D | null | undefined>(undefined, { alias: 'selected' });\n\n /** The minimum selectable date. */\n readonly minDate = input<D | null>(undefined!);\n\n /** The maximum selectable date. */\n readonly maxDate = input<D | null>(undefined!);\n\n /** Function used to filter which dates are selectable. */\n readonly dateFilter = input<(date: D) => boolean>(undefined!);\n\n /** Function that can be used to add custom CSS classes to dates. */\n readonly dateClass = input<(date: D) => KbqCalendarCellCssClasses>(undefined!);\n\n /** Emits when a new date is selected. */\n readonly selectedChange = output<D | null>();\n\n /** Emits when any date is selected. */\n readonly userSelection = output<void>();\n\n /** Emits when any date is activated. */\n readonly activeDateChange = output<D>();\n\n /** The body of calendar table */\n readonly kbqCalendarBody = viewChild.required(KbqCalendarBody);\n\n /** Grid of calendar cells representing the dates of the month. */\n weeks: KbqCalendarCell[][];\n\n /** The number of blank cells in the first row before the 1st of the month. */\n firstWeekOffset: number;\n\n /**\n * The date of the month that the currently selected Date falls on.\n * Null if the currently selected Date is in another month.\n */\n selectedDate: number | null;\n\n /** The date of the month that today falls on. Null if today is in another month. */\n todayDate: number | null;\n\n /** The names of the weekdays. */\n weekdays: { long: string; narrow: string }[];\n\n constructor() {\n const firstDayOfWeek = this.adapter.getFirstDayOfWeek();\n const narrowWeekdays = this.adapter.getDayOfWeekNames('short');\n const longWeekdays = this.adapter.getDayOfWeekNames('long');\n\n // Rotate the labels for days of the week based on the configured first day of the week.\n const weekdays = longWeekdays.map((long, i) => {\n return { long, narrow: narrowWeekdays[i] };\n });\n\n this.weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n\n this._activeDate = this.adapter.today();\n\n this.timezoneService.changes.pipe(takeUntilDestroyed()).subscribe(() => {\n // `todayDate` and the cell dates are resolved once, in `init()`, against the zone that was\n // active then; a new one can move which cell is today.\n this.init();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['selectedInput']) {\n const selected = this.selectedInput();\n\n if (selected !== undefined) this.selected = selected;\n }\n\n if (changes['activeDateInput']) {\n const activeDate = this.activeDateInput();\n\n if (activeDate !== undefined) this.activeDate = activeDate;\n }\n }\n\n ngAfterContentInit() {\n this.init();\n }\n\n /** Handles when a new date is selected. */\n dateSelected(date: number) {\n if (this.selectedDate !== date) {\n const selectedYear = this.adapter.getYear(this.activeDate);\n const selectedMonth = this.adapter.getMonth(this.activeDate);\n const selectedDate = this.adapter.createDate(selectedYear, selectedMonth, date);\n\n this.selectedChange.emit(selectedDate);\n }\n\n this.userSelection.emit();\n }\n\n /** Initializes this month view. */\n init() {\n this.selectedDate = this.getDateInCurrentMonth(this.selected);\n this.todayDate = this.getDateInCurrentMonth(this.adapter.today());\n\n const firstOfMonth = this.adapter.createDate(\n this.adapter.getYear(this.activeDate),\n this.adapter.getMonth(this.activeDate)\n );\n\n this.firstWeekOffset =\n (DAYS_PER_WEEK + this.adapter.getDayOfWeek(firstOfMonth) - this.adapter.getFirstDayOfWeek()) %\n DAYS_PER_WEEK;\n\n this.createWeekCells();\n this.changeDetectorRef.markForCheck();\n }\n\n /** Creates KbqCalendarCells for the dates in this month. */\n private createWeekCells() {\n const daysInMonth = this.adapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this.adapter.getDateNames();\n\n this.weeks = [[]];\n\n for (let i = 0, cell = this.firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell === DAYS_PER_WEEK) {\n this.weeks.push([]);\n cell = 0;\n }\n\n const date = this.adapter.createDate(\n this.adapter.getYear(this.activeDate),\n this.adapter.getMonth(this.activeDate),\n i + 1\n );\n const enabled = this.shouldEnableDate(date);\n const dateClass = this.dateClass();\n const cellClasses = dateClass ? dateClass(date) : undefined;\n\n this.weeks[this.weeks.length - 1].push(new KbqCalendarCell(i + 1, dateNames[i], enabled, cellClasses));\n }\n }\n\n /** Date filter for the month */\n private shouldEnableDate(date: D): boolean {\n const dateFilter = this.dateFilter();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n return (\n !!date &&\n (!dateFilter || dateFilter(date)) &&\n (!minDate || this.adapter.compareDate(date, minDate) >= 0) &&\n (!maxDate || this.adapter.compareDate(date, maxDate) <= 0)\n );\n }\n\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n private getDateInCurrentMonth(date: D | null): number | null {\n return date && this.hasSameMonthAndYear(date, this.activeDate) ? this.adapter.getDate(date) : null;\n }\n\n /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n private hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n return !!(\n d1 &&\n d2 &&\n this.adapter.getMonth(d1) === this.adapter.getMonth(d2) &&\n this.adapter.getYear(d1) === this.adapter.getYear(d2)\n );\n }\n}\n","<table class=\"kbq-calendar__table\">\n <thead class=\"kbq-calendar__table-header\">\n <tr>\n @for (day of weekdays; track day) {\n <th [attr.aria-label]=\"day.long\">\n {{ day.narrow }}\n </th>\n }\n </tr>\n <tr>\n <th colspan=\"7\" class=\"kbq-calendar__table-header-divider\"></th>\n </tr>\n </thead>\n <tbody\n kbq-calendar-body\n [activeCell]=\"adapter.getDate(activeDate) - 1\"\n [labelMinRequiredCells]=\"3\"\n [rows]=\"weeks\"\n [selectedValue]=\"selectedDate!\"\n [todayValue]=\"todayDate!\"\n (selectedValueChange)=\"dateSelected($event)\"\n ></tbody>\n</table>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n input,\n output,\n viewChild\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { KbqCalendarHeader } from './calendar-header.component';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\nimport { KbqMonthView } from './month-view.component';\n\n/**\n * A calendar that is used as part of the datepicker.\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-calendar',\n imports: [\n KbqCalendarHeader,\n KbqMonthView\n ],\n templateUrl: 'calendar.html',\n styleUrls: ['calendar.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-calendar'\n },\n exportAs: 'kbqCalendar'\n})\nexport class KbqCalendar<D> implements AfterContentInit, OnDestroy, OnChanges {\n private readonly adapter = injectRequiredDateAdapter<D>();\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n /** A date representing the period (month or year) to start the calendar in. */\n get startAt(): D | null {\n return this._startAt;\n }\n\n set startAt(value: D | null) {\n const deserializedValue = this.getValidDateOrNull(this.adapter.deserialize(value));\n\n this._startAt =\n deserializedValue !== null ? this.adapter.clampDate(deserializedValue, this.minDate, this.maxDate) : null;\n }\n\n private _startAt: D | null;\n\n /** The currently selected date. */\n get selected(): D | null {\n return this._selected;\n }\n\n set selected(value: D | null) {\n this._selected = this.adapter.deserialize(value);\n }\n\n private _selected: D | null;\n\n /** The minimum selectable date. */\n get minDate(): D | null {\n return this._minDate;\n }\n\n set minDate(value: D | null) {\n this._minDate = this.adapter.deserialize(value);\n\n this.startAt = this._startAt;\n }\n\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n get maxDate(): D | null {\n return this._maxDate;\n }\n\n set maxDate(value: D | null) {\n this._maxDate = this.adapter.deserialize(value);\n\n this.startAt = this._startAt;\n }\n\n private _maxDate: D | null;\n\n /** @docs-private */\n readonly startAtInput = input<D | null | undefined>(undefined, { alias: 'startAt' });\n\n /** @docs-private */\n readonly selectedInput = input<D | null | undefined>(undefined, { alias: 'selected' });\n\n /** @docs-private */\n readonly minDateInput = input<D | null | undefined>(undefined, { alias: 'minDate' });\n\n /** @docs-private */\n readonly maxDateInput = input<D | null | undefined>(undefined, { alias: 'maxDate' });\n\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted and used as the anchor on when using keyboard navigation.\n */\n get activeDate(): D {\n return this._activeDate;\n }\n\n set activeDate(value: D | null) {\n this._activeDate = this.adapter.clampDate(value || this.getActiveDateDefault(), this.minDate, this.maxDate);\n\n this.stateChanges.next();\n }\n\n private _activeDate: D;\n\n /** Function used to filter which dates are selectable. */\n readonly dateFilter = input<(date: D) => boolean>(undefined!);\n\n /** Function that can be used to add custom CSS classes to dates. */\n readonly dateClass = input<(date: D) => KbqCalendarCellCssClasses>(undefined!);\n\n /** Emits when the currently selected date changes. */\n readonly selectedChange = output<D>();\n\n /**\n * Emits the year chosen in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n readonly yearSelected = output<D>();\n\n /**\n * Emits the month chosen in year view.\n * This doesn't imply a change on the selected date.\n */\n readonly monthSelected = output<D>();\n\n /** Emits when any date is selected. */\n readonly userSelection = output<void>();\n\n /** Reference to the current month view component. */\n readonly monthView = viewChild.required(KbqMonthView);\n\n /**\n * Emits whenever there is a state change that the header may need to respond to.\n */\n stateChanges = new Subject<void>();\n\n /** The input element this datepicker is associated with. */\n datepickerInput;\n\n /** Subscription to value changes in the associated input element. */\n private inputSubscription = Subscription.EMPTY;\n\n ngOnChanges(changes: SimpleChanges) {\n // A bound input is handed to its member; unbound, it leaves what code wrote. A\n // bound `undefined` is handed over too, as an unset date: a bound that becomes unset lifts its restriction.\n if (changes['minDateInput']) this.minDate = this.minDateInput() ?? null;\n\n if (changes['maxDateInput']) this.maxDate = this.maxDateInput() ?? null;\n\n if (changes['selectedInput']) this.selected = this.selectedInput() ?? null;\n\n // After the bounds, which `startAt` is clamped to.\n if (changes['startAtInput']) this.startAt = this.startAtInput() ?? null;\n\n const change = changes['minDateInput'] || changes['maxDateInput'] || changes['dateFilter'];\n\n if (change && !change.firstChange) {\n const monthView = this.monthView();\n\n if (monthView) {\n // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n // passed down to the view via data bindings which won't be up-to-date when we call `init`.\n this.changeDetectorRef.detectChanges();\n monthView.init();\n }\n }\n\n this.stateChanges.next();\n }\n\n ngAfterContentInit() {\n this.activeDate = this.getActiveDateDefault();\n }\n\n ngOnDestroy() {\n this.inputSubscription.unsubscribe();\n this.stateChanges.complete();\n }\n\n /**\n * Register an input with this calendar.\n *\n * @param input The calendar input to register with this calendar.\n */\n registerInput(input): void {\n if (this.datepickerInput) {\n throw Error('A KbqDatepicker can only be associated with a single input.');\n }\n\n this.datepickerInput = input;\n this.inputSubscription = this.datepickerInput.valueChange.subscribe((value: D | null) => {\n this.selected = value;\n\n this.monthView()?.init();\n this.activeDate = value as D;\n });\n }\n\n /** Updates today's date after an update of the active date */\n updateTodaysDate() {\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.monthView().ngAfterContentInit();\n }\n\n /** Handles date selection in the month view. */\n dateSelected(date: D): void {\n if (!this.adapter.sameDate(date, this.selected)) {\n this.selectedChange.emit(date);\n }\n }\n\n userSelected(): void {\n this.userSelection.emit();\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n // todo выглядит как костыль от которого нужно избавиться\n private getValidDateOrNull(obj: any): D | null {\n return this.adapter.isDateInstance(obj) && this.adapter.isValid(obj) ? obj : null;\n }\n\n private getActiveDateDefault(): D {\n return this.startAt || this.adapter.today();\n }\n}\n","<kbq-calendar-header\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [(activeDate)]=\"activeDate\"\n (monthSelected)=\"monthSelected.emit(activeDate)\"\n (yearSelected)=\"yearSelected.emit(activeDate)\"\n/>\n\n<div class=\"kbq-calendar__content\">\n <kbq-month-view\n [dateClass]=\"dateClass()\"\n [dateFilter]=\"dateFilter()\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [(activeDate)]=\"activeDate\"\n (selectedChange)=\"dateSelected($event!)\"\n (userSelection)=\"userSelected()\"\n />\n</div>\n","import {\n AfterContentInit,\n booleanAttribute,\n computed,\n Directive,\n DoCheck,\n effect,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n InjectionToken,\n input,\n linkedSignal,\n OnChanges,\n OnDestroy,\n output,\n Provider,\n Renderer2,\n signal,\n SimpleChanges,\n untracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormGroupDirective,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgForm,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n BACKSPACE,\n DateAdapter,\n DELETE,\n DOWN_ARROW,\n END,\n ErrorStateMatcher,\n ESCAPE,\n hasModifierKey,\n HOME,\n isHorizontalMovement,\n isLetterKey,\n isVerticalMovement,\n KBQ_DATE_FORMATS,\n KBQ_DATE_LOCALE,\n KBQ_DEFAULT_LOCALE_DATA_FACTORY,\n KbqDateFormats,\n KbqDatepickerLocaleConfiguration,\n KbqDateTimezoneService,\n KbqDeepPartial,\n KbqErrorStateTracker,\n kbqLocaleConfigurationOverrideProvider,\n KbqLocaleDataInput,\n KbqLocaleOverridesDirective,\n kbqRevealSelection,\n kbqSetSelectionRange,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n ruRULocaleData,\n SPACE,\n TAB,\n UP_ARROW,\n validationTooltipHideDelay,\n validationTooltipShowDelay\n} from '@koobiq/components/core';\nimport { KBQ_FORM_FIELD, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport type { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subscription } from 'rxjs';\nimport { KbqCalendar } from './calendar.component';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\nimport { KbqDatepicker } from './datepicker.component';\n\nenum DateParts {\n year = 'y',\n month = 'm',\n day = 'd'\n}\n\nexport const MAX_YEAR = 9999;\nconst YEAR_LENGTH = 4;\n\nclass DateDigit {\n maxDays = 31;\n maxMonth = 12;\n\n parse: (value: string) => number;\n\n constructor(\n public value: DateParts,\n public start: number,\n public length: number\n ) {\n if (value === DateParts.day) {\n this.parse = this.parseDay;\n } else if (value === DateParts.month) {\n this.parse = this.parseMonth;\n } else if (value === DateParts.year) {\n this.parse = this.parseYear;\n }\n }\n\n get end(): number {\n return this.start + this.length;\n }\n\n get isDay(): boolean {\n return this.value === DateParts.day;\n }\n\n get isMonth(): boolean {\n return this.value === DateParts.month;\n }\n\n get isYear(): boolean {\n return this.value === DateParts.year;\n }\n\n get fullName(): string {\n if (this.isDay) {\n return 'date';\n }\n\n if (this.isMonth) {\n return 'month';\n }\n\n if (this.isYear) {\n return 'year';\n }\n\n return '';\n }\n\n private parseDay(value: string): number {\n const parsedValue: number = parseInt(value);\n\n if (parsedValue === 0) {\n return 1;\n }\n\n if (parsedValue > this.maxDays) {\n return this.maxDays;\n }\n\n return parsedValue;\n }\n\n private parseMonth(value: string): number {\n const parsedValue: number = parseInt(value);\n\n if (parsedValue === 0) {\n return 1;\n }\n\n if (parsedValue > this.maxMonth) {\n return this.maxMonth;\n }\n\n return parsedValue;\n }\n\n private parseYear(value: string): number {\n const parsedValue: number = parseInt(value);\n\n if (parsedValue === 0) {\n return 1;\n }\n\n if (parsedValue > MAX_YEAR) {\n return parseInt(value.substring(0, YEAR_LENGTH));\n }\n\n return parsedValue;\n }\n}\n\n/** @docs-private */\nexport const KBQ_DATEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqDatepickerInput),\n multi: true\n};\n\n/** @docs-private */\nexport const KBQ_DATEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => KbqDatepickerInput),\n multi: true\n};\n\n/** default configuration of datepicker */\n/** @docs-private */\nexport const KBQ_DATEPICKER_DEFAULT_LOCALE_CONFIGURATION = ruRULocaleData.datepicker;\n\n/** The `datepicker` section of the shipped locale `localeId`, if the library ships one. */\nconst shippedDatepickerLocaleConfiguration = (localeId: string): KbqDatepickerLocaleConfiguration | undefined => {\n const shipped: KbqLocaleDataInput = KBQ_DEFAULT_LOCALE_DATA_FACTORY();\n const locale = shipped[localeId];\n\n // A shipped locale is complete, its sections included.\n return locale && !Array.isArray(locale) ? (locale.datepicker as KbqDatepickerLocaleConfiguration) : undefined;\n};\n\n/** The values of the token's own factory, told apart from strings an application provides for the token. */\nconst factoryDefaults = new WeakSet<KbqDatepickerLocaleConfiguration>();\n\n/** Injection Token for providing configuration of datepicker */\n/** @docs-private */\nexport const KBQ_DATEPICKER_LOCALE_CONFIGURATION = new InjectionToken<KbqDatepickerLocaleConfiguration>(\n 'KbqDatepickerLocaleConfiguration',\n {\n factory: () => {\n // A copy: the shipped section itself may also be provided on purpose.\n const configuration = {\n ...(shippedDatepickerLocaleConfiguration(inject(KBQ_DATE_LOCALE)) ??\n KBQ_DATEPICKER_DEFAULT_LOCALE_CONFIGURATION)\n };\n\n factoryDefaults.add(configuration);\n\n return configuration;\n }\n }\n);\n\n/** The default strings of one input. */\nconst KBQ_DATEPICKER_INPUT_LOCALE_CONFIGURATION = new InjectionToken<KbqDatepickerLocaleConfiguration>(\n 'KbqDatepickerInputLocaleConfiguration'\n);\n\n/**\n * Unless strings are provided for the token, those of the format the input parses: the token's own default resolves\n * in the root injector, which knows only the date locale of the application, not the date adapter of the input.\n */\nconst datepickerInputLocaleConfiguration = (): KbqDatepickerLocaleConfiguration => {\n const configuration = inject(KBQ_DATEPICKER_LOCALE_CONFIGURATION);\n const adapter = inject(DateAdapter, { optional: true });\n\n if (!factoryDefaults.has(configuration) || !adapter?.config) return configuration;\n\n const format: string = inject(KBQ_DATE_FORMATS, { optional: true })?.dateInput || adapter.config.dateInput;\n // The shipped placeholders name the locale's own format, lower-cased and translated.\n const shipped = format === adapter.config.dateInput && shippedDatepickerLocaleConfiguration(adapter.config.name);\n\n return shipped || { placeholder: format.toLowerCase() };\n};\n\n/**\n * Utility provider for `KBQ_DATEPICKER_LOCALE_CONFIGURATION`. Only the strings you pass are overridden; the rest\n * keep following the active locale.\n */\nexport const kbqDatepickerLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqDatepickerLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('datepicker', configuration);\n\n/** @deprecated Use {@link KBQ_DATEPICKER_DEFAULT_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_DATEPICKER_DEFAULT_CONFIGURATION = KBQ_DATEPICKER_DEFAULT_LOCALE_CONFIGURATION;\n/** @deprecated Use {@link KBQ_DATEPICKER_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_DATEPICKER_CONFIGURATION = KBQ_DATEPICKER_LOCALE_CONFIGURATION;\n\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use KbqDatepickerInputEvent instead.\n */\nexport class KbqDatepickerInputEvent<D> {\n /** The new value for the target datepicker input. */\n value: D | null;\n\n constructor(\n /** Reference to the datepicker input component that emitted the event. */\n public target: KbqDatepickerInput<D>,\n /** Reference to the native input element associated with the datepicker input. */\n public targetElement: HTMLElement\n ) {\n this.value = this.target.value();\n }\n}\n\nlet uniqueComponentIdSuffix = 0;\n\ninterface DateTimeObject {\n year: number;\n month: number;\n date: number;\n hours: number;\n minutes: number;\n seconds: number;\n milliseconds: number;\n}\n\n/** Directive used to connect an input to a KbqDatepicker. */\n@Directive({\n selector: 'input[kbqDatepicker], input[kbqCalendar]',\n providers: [\n KBQ_DATEPICKER_VALUE_ACCESSOR,\n KBQ_DATEPICKER_VALIDATORS,\n { provide: KbqFormFieldControl, useExisting: KbqDatepickerInput },\n { provide: KBQ_DATEPICKER_INPUT_LOCALE_CONFIGURATION, useFactory: datepickerInputLocaleConfiguration }\n ],\n host: {\n class: 'kbq-input kbq-datepicker',\n '[attr.id]': 'id()',\n '[attr.placeholder]': 'placeholder()',\n '[attr.required]': 'required() || null',\n '[attr.disabled]': 'disabled() || null',\n '[attr.min]': 'min ? toISO8601(min) : null',\n '[attr.max]': 'max ? toISO8601(max) : null',\n '[attr.autocomplete]': '\"off\"',\n '(paste)': 'onPaste($event)',\n '(change)': 'onChange()',\n '(focus)': 'focusChanged(true)',\n '(blur)': 'onBlur()',\n '(keydown)': 'onKeyDown($event)'\n },\n // Covers the strings this input renders itself. The calendar is created through `<kbq-datepicker>`, a\n // sibling of this element rather than a descendant, so it carries its own — bind `[localeOverrides]`\n // there for the pop-up, or put a carrier on an element enclosing both.\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ],\n exportAs: 'kbqDatepickerInput'\n})\nexport class KbqDatepickerInput<D>\n implements KbqFormFieldControl<D>, ControlValueAccessor, Validator, OnChanges, OnDestroy, DoCheck, AfterContentInit\n{\n elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n readonly adapter: DateAdapter<D> = injectRequiredDateAdapter<D>();\n private readonly timezoneService = inject(KbqDateTimezoneService);\n private readonly dateFormats = inject<KbqDateFormats>(KBQ_DATE_FORMATS, { optional: true });\n /** @docs-private */\n protected readonly formField = inject(KBQ_FORM_FIELD, { optional: true, host: true });\n\n protected readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'datepicker',\n KBQ_DATEPICKER_INPUT_LOCALE_CONFIGURATION\n );\n\n private readonly errorStateTracker = new KbqErrorStateTracker(\n inject(ErrorStateMatcher),\n // update ngControl later, so it will be initialized\n null,\n inject(FormGroupDirective, { optional: true }),\n inject(NgForm, { optional: true })\n );\n\n /** Whether the input is in an error state. */\n readonly errorState = this.errorStateTracker.errorState;\n\n controlType: string = 'datepicker';\n\n private readonly focusedValue = signal(false);\n\n /** Whether the input has focus. */\n readonly focused = this.focusedValue.asReadonly();\n\n datepicker: KbqDatepicker<D>;\n calendar: KbqCalendar<D>;\n\n dateFilter: (date: D | null) => boolean;\n\n /** Emits when the value changes (either due to user input or programmatic change). */\n valueChange = new EventEmitter<D | null>();\n\n /** Emits when the disabled state has changed */\n disabledChange = new EventEmitter<boolean>();\n\n /** Object used to control when error messages are shown. */\n readonly errorStateMatcher = input<ErrorStateMatcher>();\n\n /** @docs-private */\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\n\n /** Placeholder of the input. Defaults to the localized date pattern. */\n readonly placeholder = computed(() => this.placeholderInput() || this.localeConfiguration().placeholder);\n\n /** Whether the input is required. */\n readonly required = input<boolean, boolean | string | null | undefined>(false, { transform: booleanAttribute });\n\n /** The datepicker that this input is associated with. */\n set kbqDatepicker(value: KbqDatepicker<D>) {\n if (!value) {\n return;\n }\n\n this.datepicker = value;\n this.datepicker.registerInput(this);\n this.datepickerSubscription.unsubscribe();\n\n this.datepickerSubscription = this.datepicker.selectedChanged.subscribe((selected: D) => {\n const newValue = this.saveTimePart(selected);\n\n this.setValue(newValue);\n this.cvaOnChange(newValue);\n this.onTouched();\n this.dateChange.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n });\n }\n\n /** The calendar that this input is associated with. */\n set kbqCalendar(value: KbqCalendar<D>) {\n if (!value) {\n return;\n }\n\n this.calendar = value;\n this.calendar.registerInput(this);\n }\n\n /** @docs-private */\n readonly kbqDatepickerInput = input<KbqDatepicker<D> | undefined>(undefined, { alias: 'kbqDatepicker' });\n\n /** @docs-private */\n readonly kbqCalendarInput = input<KbqCalendar<D> | undefined>(undefined, { alias: 'kbqCalendar' });\n\n /** Function that can be used to filter out dates within the datepicker. `undefined` removes the filter. */\n set kbqDatepickerFilter(value: ((date: D | null) => boolean) | undefined) {\n // `dateFilter` is unset until a filter is given; `undefined` returns it there.\n this.dateFilter = value!;\n this.validatorOnChange();\n }\n\n /** @docs-private */\n readonly kbqDatepickerFilterInput = input<((date: D | null) => boolean) | undefined>(undefined, {\n alias: 'kbqDatepickerFilter'\n });\n\n /** @docs-private */\n readonly valueInput = input<D | null | undefined>(undefined, { alias: 'value' });\n\n private readonly valueState = signal<D | null>(null);\n\n /** The date the input holds: set with `[value]`, by the form control, by typing and by the calendar. */\n readonly value = this.valueState.asReadonly();\n\n /**\n * The minimum valid date. Drives validation only — including dates typed or pasted into the\n * input — and reports `kbqDatepickerMin`. The calendar is restricted separately, by `minDate`\n * on the associated `<kbq-datepicker>`.\n *\n * Compared down to the millisecond, not by calendar day: the input keeps the time part of the\n * value it parses, and the comparison is made on wall-clock components rather than on absolute\n * time.\n */\n get min(): D | null {\n return this._min;\n }\n\n set min(value: D | null) {\n this._min = this.getValidDateOrNull(this.adapter.deserialize(value));\n this.validatorOnChange();\n }\n\n private _min: D | null;\n\n /**\n * The maximum valid date. Drives validation only — including dates typed or pasted into the\n * input — and reports `kbqDatepickerMax`. The calendar is restricted separately, by `maxDate`\n * on the associated `<kbq-datepicker>`.\n *\n * Compared down to the millisecond, not by calendar day: the input keeps the time part of the\n * value it parses, so an upper bound meant to include its whole day has to be the end of that\n * day.\n */\n get max(): D | null {\n return this._max;\n }\n\n set max(value: D | null) {\n this._max = this.getValidDateOrNull(this.adapter.deserialize(value));\n this.validatorOnChange();\n }\n\n private _max: D | null;\n\n /** @docs-private */\n readonly minInput = input<D | null | undefined>(undefined, { alias: 'min' });\n\n /** @docs-private */\n readonly maxInput = input<D | null | undefined>(undefined, { alias: 'max' });\n\n /** @docs-private */\n readonly disabledInput = input<boolean, boolean | string | null | undefined>(false, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** Whether the datepicker-input is disabled. Also set by the bound form control. */\n readonly disabled = linkedSignal(() => this.disabledInput());\n\n /** @docs-private */\n readonly idInput = input<string | undefined>(undefined, { alias: 'id' });\n\n /** Unique id of the element, generated when not provided. */\n readonly id = computed(() => this.idInput() || this.uid);\n\n set kbqValidationTooltip(tooltip: KbqTooltipTrigger) {\n if (!tooltip) {\n return;\n }\n\n tooltip.enterDelay = validationTooltipShowDelay;\n tooltip.trigger = 'manual';\n\n tooltip.initListeners();\n\n this.incorrectInput.subscribe(() => {\n if (tooltip.isOpen) {\n return;\n }\n\n tooltip.show();\n\n setTimeout(() => tooltip.hide(), validationTooltipHideDelay);\n });\n }\n\n /** @docs-private */\n readonly kbqValidationTooltipInput = input<KbqTooltipTrigger | undefined>(undefined, {\n alias: 'kbqValidationTooltip'\n });\n\n readonly incorrectInput = output<void>();\n\n /** Emits when a `change` event is fired on this `<input>`. */\n readonly dateChange = output<KbqDatepickerInputEvent<D>>();\n\n /** Emits when an `input` event is fired on this `<input>`. */\n readonly dateInput = output<KbqDatepickerInputEvent<D>>();\n\n private readonly emptyValue = signal(true);\n\n /** Whether the input renders no text. */\n readonly empty = this.emptyValue.asReadonly();\n\n get viewValue(): string {\n return this.elementRef.nativeElement.value;\n }\n\n get ngControl(): any {\n return this.control;\n }\n\n get isReadOnly(): boolean {\n return this.elementRef.nativeElement.readOnly;\n }\n\n get dateInputFormat(): string {\n return this.dateFormats?.dateInput || this.adapter.config.dateInput;\n }\n\n private get readyForParse(): boolean {\n return !!(this.firstDigit && this.secondDigit && this.thirdDigit);\n }\n\n private get selectionStart(): number | null {\n return this.elementRef.nativeElement.selectionStart;\n }\n\n private get selectionEnd(): number | null {\n return this.elementRef.nativeElement.selectionEnd;\n }\n\n private control: AbstractControl | undefined;\n private readonly uid = `kbq-datepicker-input-${uniqueComponentIdSuffix++}`;\n\n private datepickerSubscription = Subscription.EMPTY;\n\n /** Whether the last value set on the input was valid. */\n private lastValueValid = false;\n\n /** The combined form control validator for this input. */\n private readonly validator: ValidatorFn | null;\n\n private separator: string;\n\n private firstDigit: DateDigit | null = null;\n private secondDigit: DateDigit | null = null;\n private thirdDigit: DateDigit | null = null;\n\n private separatorPositions: number[];\n\n /** Work the keys left to timers, in the order the timers run. */\n private readonly deferred = new Map<ReturnType<typeof setTimeout>, () => void>();\n\n constructor() {\n this.validator = Validators.compose([\n this.parseValidator,\n this.minValidator,\n this.maxValidator,\n this.filterValidator\n ]);\n\n this.setFormat(this.dateInputFormat);\n\n // A bound value is applied whenever the binding changes; an unbound one leaves the value to the form.\n let bound = false;\n\n effect(() => {\n const value = this.valueInput();\n\n if (!bound && value === undefined) return;\n\n bound = true;\n\n untracked(() => this.setValue(value ?? null));\n });\n\n let wasDisabled = false;\n\n effect(() => {\n const disabled = this.disabled();\n\n untracked(() => {\n if (disabled !== wasDisabled) {\n wasDisabled = disabled;\n this.disabledChange.emit(disabled);\n }\n\n const element = this.elementRef.nativeElement;\n\n // We need to null check the `blur` method, because it's undefined during SSR.\n if (disabled && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n });\n });\n\n let isFirstRun = true;\n\n effect(() => {\n this.localeConfiguration();\n\n // Nothing to re-format on the first run: `setFormat` above already ran against the active\n // locale, while re-assigning `value` here would emit `valueChange` at a point where the\n // datepicker and the calendar are already subscribed to it.\n if (isFirstRun) {\n isFirstRun = false;\n\n return;\n }\n\n // The date adapter follows the same locale, so its input format may have changed with it: the\n // digit layout has to be re-derived and the rendered value re-formatted.\n untracked(() => {\n this.setFormat(this.dateInputFormat);\n this.setValue(this.valueState());\n });\n });\n\n this.timezoneService.changes.pipe(takeUntilDestroyed()).subscribe(() => {\n // The rendered text names a wall clock in the zone it was formatted in. Left as it is, the\n // next keystroke re-parses it against the new zone and emits a different instant.\n this.setValue(this.valueState());\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n // Not in an effect, which runs too late: `min`, `max` and the filter revalidate the form control before the\n // template reads its errors.\n if (changes['kbqDatepickerInput']) {\n const datepicker = this.kbqDatepickerInput();\n\n if (datepicker !== undefined) this.kbqDatepicker = datepicker;\n }\n\n if (changes['kbqCalendarInput']) {\n const calendar = this.kbqCalendarInput();\n\n if (calendar !== undefined) this.kbqCalendar = calendar;\n }\n\n // A bound `undefined` is handed over too: it removes the filter.\n if (changes['kbqDatepickerFilterInput']) this.kbqDatepickerFilter = this.kbqDatepickerFilterInput();\n\n if (changes['minInput']) this.min = this.minInput() ?? null;\n\n if (changes['maxInput']) this.max = this.maxInput() ?? null;\n\n if (changes['kbqValidationTooltipInput']) {\n const tooltip = this.kbqValidationTooltipInput();\n\n if (tooltip !== undefined) this.kbqValidationTooltip = tooltip;\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n // The browser changes the rendered text without notice as the user types; `setViewValue()` covers the rest.\n this.emptyValue.set(this.isEmpty());\n }\n\n onContainerClick() {\n this.focus();\n }\n\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n focusChanged(isFocused: boolean): void {\n if (isFocused !== this.focused()) {\n this.focusedValue.set(isFocused);\n this.onTouched();\n }\n }\n\n /**\n * Called when the control is blurred. Needed to properly implement `ControlValueAccessor`.\n *\n * @docs-private\n */\n onTouched = () => {};\n\n ngAfterContentInit() {\n this.updateErrorState();\n }\n\n ngOnDestroy() {\n this.datepickerSubscription.unsubscribe();\n this.valueChange.complete();\n this.disabledChange.complete();\n }\n\n /** @docs-private */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n /** @docs-private */\n validate(control: AbstractControl): ValidationErrors | null {\n this.setControl(control);\n\n // Untracked, as `writeValue()`: a form control set from a consumer's `effect()` writes and validates on the\n // spot, and the state read on the way — `focused`, the value — would make the effect run again.\n return this.validator ? untracked(() => this.validator!(control)) : null;\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: D): void {\n untracked(() => this.setValue(value));\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void): void {\n this.cvaOnChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.isReadOnly) {\n return;\n }\n\n // Keys from a scanner, an autotype or a busy page arrive before the timers the previous ones set. Run that\n // work first, so that each key acts on the value and selection a slower typist's would.\n this.runDeferred();\n\n const keyCode = event.keyCode;\n\n if (this.isLetterKey(event)) {\n event.preventDefault();\n\n this.incorrectInput.emit();\n } else if (this.isKeyForOpen(event)) {\n event.preventDefault();\n\n this.datepicker?.open();\n } else if (this.isKeyForClose(event)) {\n // Consumed only when there is a calendar to close, so a dialog around the input still takes the key.\n if (!this.datepicker?.opened) return;\n\n event.preventDefault();\n\n this.datepicker.close();\n } else if (keyCode === TAB) {\n this.datepicker?.close(false);\n } else if (this.isKeyForByPass(event)) {\n return;\n } else if (keyCode === SPACE) {\n this.spaceKeyHandler(event);\n } else if ([UP_ARROW, DOWN_ARROW].includes(keyCode)) {\n event.preventDefault();\n\n this.verticalArrowKeyHandler(keyCode);\n } else if ([LEFT_ARROW, RIGHT_ARROW, HOME, PAGE_UP, END, PAGE_DOWN].includes(keyCode)) {\n event.preventDefault();\n\n this.changeCaretPosition(keyCode);\n } else if (/^\\D$/.test(event.key)) {\n event.preventDefault();\n\n const newValue = this.getNewValue(event.key, this.selectionStart as number);\n const formattedValue = this.replaceSymbols(newValue);\n\n if (newValue !== formattedValue) {\n this.setViewValue(formattedValue, true);\n\n this.defer(this.onInput);\n } else {\n this.incorrectInput.emit();\n }\n } else {\n this.defer(this.onInput);\n }\n }\n\n onInput = () => {\n const cursorPosition = this.correctedCursorPosition();\n const formattedValue = this.replaceSymbols(this.viewValue);\n\n const newTimeObj = this.getDateFromString(formattedValue);\n\n this.lastValueValid = !!newTimeObj;\n\n if (!newTimeObj) {\n if (!this.viewValue) {\n this.lastValueValid = false;\n this.updateValue(newTimeObj as D);\n } else {\n this.control?.updateValueAndValidity();\n }\n\n return;\n }\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat), true);\n\n this.selectNextDigitByCursor(cursorPosition);\n\n this.updateValue(newTimeObj);\n };\n\n parseOnBlur = (): any => {\n if (!this.viewValue || !this.readyForParse) {\n return null;\n }\n\n const date: DateTimeObject = this.getDefaultValue();\n\n const viewDigits: string[] = this.viewValue\n .split(this.separator)\n .map((value: string) => value)\n .filter((value) => value);\n\n const [firsViewDigit, secondViewDigit, thirdViewDigit] = viewDigits;\n\n if (viewDigits.length !== 3) {\n this.lastValueValid = false;\n this.valueState.set(null);\n\n return setTimeout(() => this.control?.updateValueAndValidity());\n }\n\n date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n date[this.thirdDigit!.fullName] = this.thirdDigit!.parse(thirdViewDigit);\n\n const [digitWithYear, viewDigitWithYear] = [this.firstDigit, this.secondDigit, this.thirdDigit].reduce(\n (acc: any, digit, index) => (digit!.value === DateParts.year ? [digit, viewDigits[index]] : acc),\n []\n );\n\n if (viewDigitWithYear.length < 3) {\n date.year += date.year < 30 ? 2000 : 1900;\n } else if (viewDigitWithYear.length < digitWithYear.length) {\n this.lastValueValid = false;\n this.valueState.set(null);\n\n return setTimeout(() => this.control?.updateValueAndValidity());\n }\n\n const newTimeObj = this.createDateTime(date);\n\n if (!newTimeObj) {\n this.lastValueValid = false;\n this.valueState.set(null);\n this.cvaOnChange(null);\n\n return setTimeout(() => this.control?.updateValueAndValidity());\n }\n\n /* Check if the number of days entered does not match the entered month */\n if (!this.getValidDateOrNull(newTimeObj)) {\n return null;\n }\n\n this.lastValueValid = !!newTimeObj;\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat), true);\n\n this.updateValue(newTimeObj);\n };\n\n onChange() {\n setTimeout(() => {\n this.dateChange.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n });\n }\n\n /** Handles blur events on the input. */\n onBlur() {\n // Reformat the input only if we have a valid value.\n this.parseOnBlur();\n\n this.focusChanged(false);\n\n this.onInput();\n }\n\n onPaste($event) {\n $event.preventDefault();\n\n let rawValue = $event.clipboardData.getData('text');\n\n if (rawValue.match(/^\\d\\D/)) {\n rawValue = `0${rawValue}`;\n }\n\n rawValue.replace(/[^A-Za-z0-9]+/g, this.separator);\n\n if (/[a-z]/gi.test(rawValue)) {\n this.incorrectInput.emit();\n }\n\n const match: RegExpMatchArray | null = rawValue.match(/^(?<first>\\d+)\\W(?<second>\\d+)\\W(?<third>\\d+)$/);\n\n if (!match?.groups?.first || !match?.groups?.second || !match?.groups?.third) {\n this.setViewValue(rawValue);\n\n return rawValue;\n }\n\n const value = [match.groups.first, match.groups.second, match.groups.third].join(this.separator);\n\n const newTimeObj = this.getDateFromString(value);\n\n if (!newTimeObj) {\n this.setViewValue(value);\n\n return value;\n }\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat));\n\n this.updateValue(newTimeObj);\n }\n\n toISO8601(value: D): string {\n return this.adapter.toIso8601(value);\n }\n\n /** Refreshes the error state of the input. */\n updateErrorState() {\n this.errorStateTracker.errorStateMatcher = this.errorStateMatcher();\n this.errorStateTracker.updateErrorState();\n }\n\n /** Returns the ElementRef of the formField if it exists; otherwise, returns the ElementRef of the input. */\n getOrigin(): ElementRef {\n return this.formField ? this.formField.getConnectedOverlayOrigin() : this.elementRef;\n }\n\n private saveTimePart(selected: D) {\n const value = this.value();\n\n if (!value) {\n return selected;\n }\n\n const years = this.adapter.getYear(selected);\n const month = this.adapter.getMonth(selected);\n const day = this.adapter.getDate(selected);\n\n const hours = this.adapter.getHours(value);\n const minutes = this.adapter.getMinutes(value);\n const seconds = this.adapter.getSeconds(value);\n const milliseconds = this.adapter.getMilliseconds(value);\n\n return this.adapter.createDateTime(years, month, day, hours, minutes, seconds, milliseconds);\n }\n\n private setFormat(format: string): void {\n // `[a-zA-Z]`, not `[aA-zZ]`: the latter reads as `a`, the range `A-z` and `Z`, and that range\n // takes in the six characters ASCII puts between the two alphabets — opening bracket,\n // backslash, closing bracket, caret, underscore and backtick. A format escaping a literal in\n // brackets could therefore have had that bracket counted as part of a placeholder.\n this.separator = format.match(/[a-zA-Z]+(?<separator>\\W|\\D)[a-zA-Z]+/)!.groups!.separator;\n\n this.separatorPositions = format\n .split('')\n .reduce((acc: any, item, index: number) => (this.separator === item ? [...acc, index + 1] : acc), []);\n\n this.getDigitPositions(format);\n }\n\n /** Takes a value from any source, re-rendering the element with it. */\n private setValue(value: D | null): void {\n let newValue = this.adapter.deserialize(value);\n\n this.lastValueValid = !newValue || this.adapter.isValid(newValue);\n\n newValue = this.getValidDateOrNull(newValue);\n\n const oldDate = this.valueState();\n\n this.valueState.set(newValue);\n this.formatValue(newValue);\n\n if (!this.adapter.sameDate(oldDate, newValue)) {\n this.valueChange.emit(newValue);\n }\n }\n\n private updateValue(newValue: D) {\n if (!this.adapter.sameDate(newValue, this.value())) {\n this.valueState.set(newValue);\n this.cvaOnChange(newValue);\n this.valueChange.emit(newValue);\n this.dateInput.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n }\n\n this.control?.updateValueAndValidity({ emitEvent: false });\n }\n\n private isKeyForClose(event: KeyboardEvent): boolean {\n return (event.altKey && event.keyCode === UP_ARROW) || event.keyCode === ESCAPE;\n }\n\n private isKeyForOpen(event: KeyboardEvent): boolean {\n return event.altKey && event.keyCode === DOWN_ARROW;\n }\n\n private isLetterKey(event: KeyboardEvent): boolean {\n return isLetterKey(event) && !event.ctrlKey && !event.metaKey;\n }\n\n private isKeyForByPass(event: KeyboardEvent): boolean {\n return (\n (hasModifierKey(event) && (isVerticalMovement(event) || isHorizontalMovement(event))) ||\n event.ctrlKey ||\n event.metaKey ||\n [DELETE, BACKSPACE, TAB].includes(event.keyCode)\n );\n }\n\n private spaceKeyHandler(event: KeyboardEvent) {\n event.preventDefault();\n\n const position = this.selectionStart as number;\n\n // Right after a separator the digit group is empty, so a space cannot stand in for one:\n // advance instead of inserting a character the value can never be parsed with.\n if (this.selectionStart !== this.selectionEnd || this.separatorPositions.includes(position)) {\n this.selectNextDigit(position, true);\n\n return;\n }\n\n this.setViewValue(this.getNewValue(event.key, position));\n\n this.defer(this.onInput);\n }\n\n private getNewValue(key: string, position: number) {\n return [this.viewValue.slice(0, position), key, this.viewValue.slice(position)].join('');\n }\n\n private setViewValue(value: string, savePosition: boolean = false) {\n const element = this.elementRef.nativeElement;\n const selectionStart = this.selectionStart ?? 0;\n const selectionEnd = this.selectionEnd ?? 0;\n\n this.renderer.setProperty(element, 'value', value);\n // Right away: a form or a `[value]` binding writes after `ngDoCheck()` has run.\n this.emptyValue.set(this.isEmpty());\n\n if (savePosition) {\n this.setSelection(selectionStart, selectionEnd);\n } else {\n // A paste, a model write or a calendar pick replaces the whole value, and the offset the\n // previous one was left at has to go with it.\n kbqRevealSelection(element);\n }\n }\n\n private setSelection(start: number, end: number): void {\n kbqSetSelectionRange(this.elementRef.nativeElement, start, end);\n }\n\n private replaceSymbols(value: string): string {\n return value\n .split(this.separator)\n .map((part: string) => part.replace(/^([0-9]+)\\W$/, '0$1'))\n .join(this.separator);\n }\n\n private getDateFromString(timeString: string): D | null {\n if (!timeString || timeString.length < this.firstDigit!.length) {\n return null;\n }\n\n const date = this.getDefaultValue();\n\n const viewDigits: string[] = timeString.split(this.separator).map((value: string) => value);\n\n const [firsViewDigit, secondViewDigit, thirdViewDigit] = viewDigits;\n\n if (viewDigits.length === 1) {\n if (/\\D/.test(firsViewDigit) || firsViewDigit.length < this.firstDigit!.length) {\n return null;\n }\n\n date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n\n if (this.firstDigit!.isDay) {\n date.month = 1;\n }\n } else if (viewDigits.length === 2) {\n if (firsViewDigit.length < this.firstDigit!.length || secondViewDigit.length < this.secondDigit!.length) {\n return null;\n }\n\n date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n } else if (viewDigits.length === 3) {\n if (\n firsViewDigit.length < this.firstDigit!.length ||\n secondViewDigit.length < this.secondDigit!.length ||\n thirdViewDigit.length < this.thirdDigit!.length\n ) {\n return null;\n }\n\n const digitViewValue: { date?: number; month?: number; year?: number } = {};\n const dateDigits = [this.firstDigit, this.secondDigit, this.thirdDigit];\n\n for (const [index, dateDigit] of dateDigits.entries()) {\n digitViewValue[dateDigit!.fullName] = parseInt(viewDigits[index]);\n }\n\n if (this.value() && digitViewValue.month && digitViewValue.month <= this.firstDigit!.maxMonth) {\n dateDigits.forEach(\n (digit) =>\n (digit!.maxDays = this.getLastDayFor(\n digitViewValue.year as number,\n (digitViewValue.month as number) - 1\n ))\n );\n }\n\n date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n date[this.thirdDigit!.fullName] = this.thirdDigit!.parse(thirdViewDigit);\n } else {\n return null;\n }\n\n return this.getValidDateOrNull(this.createDateTime(date));\n }\n\n private getDefaultValue(): DateTimeObject {\n const defaultValue = this.value() || this.adapter.today();\n\n return {\n year: this.adapter.getYear(defaultValue),\n month: this.adapter.getMonth(defaultValue),\n date: this.adapter.getDate(defaultValue),\n hours: this.adapter.getHours(defaultValue),\n minutes: this.adapter.getMinutes(defaultValue),\n seconds: this.adapter.getSeconds(defaultValue),\n milliseconds: this.adapter.getMilliseconds(defaultValue)\n };\n }\n\n private getTimeStringFromDate(value: D | null, timeFormat: string): string {\n if (!value || !this.adapter.isValid(value)) {\n return '';\n }\n\n return this.adapter.format(value, timeFormat);\n }\n\n private getDateEditMetrics(\n cursorPosition: number\n ): [modifiedTimePart: DateParts, cursorStartPosition: number, cursorEndPosition: number] {\n for (const digit of [this.firstDigit, this.secondDigit, this.thirdDigit]) {\n if (cursorPosition >= digit!.start && cursorPosition <= digit!.end) {\n return [digit!.value, digit!.start, digit!.end];\n }\n }\n\n return [this.thirdDigit!.value, this.thirdDigit!.start, this.thirdDigit!.end];\n }\n\n private isMaxMonth(date: D): boolean {\n return this.adapter.getMonth(date) === this.getMaxMonth(date);\n }\n\n private isMinMonth(date: D): boolean {\n return this.adapter.getMonth(date) === this.getMinMonth(date);\n }\n\n private isMaxYear(date: D): boolean {\n return this.adapter.getYear(date) === this.getMaxYear();\n }\n\n private isMinYear(date: D): boolean {\n return this.adapter.getYear(date) === this.getMinYear();\n }\n\n private getMaxDate(date: D): number {\n const maxDate = this.datepicker?.maxDate();\n\n if (maxDate && this.isMaxYear(date) && this.isMaxMonth(date)) {\n return this.adapter.getDate(maxDate);\n }\n\n return this.adapter.getNumDaysInMonth(date);\n }\n\n private getMinDate(date: D): number {\n const minDate = this.datepicker?.minDate();\n\n if (minDate && this.isMinYear(date) && this.isMinMonth(date)) {\n return this.adapter.getDate(minDate);\n }\n\n return 1;\n }\n\n private getMaxMonth(date: D): number {\n const maxDate = this.datepicker?.maxDate();\n\n if (maxDate && this.isMaxYear(date)) {\n return this.adapter.getMonth(maxDate);\n }\n\n return 11;\n }\n\n private getMinMonth(date: D): number {\n const minDate = this.datepicker?.minDate();\n\n if (minDate && this.isMinYear(date)) {\n return this.adapter.getMonth(minDate);\n }\n\n return 0;\n }\n\n private getMaxYear(): number {\n const maxDate = this.datepicker?.maxDate();\n\n if (maxDate) {\n return this.adapter.getYear(maxDate);\n }\n\n return MAX_YEAR;\n }\n\n private getMinYear(): number {\n const minDate = this.datepicker?.minDate();\n\n if (minDate) {\n return this.adapter.getYear(minDate);\n }\n\n return 1;\n }\n\n private incrementDate(date: D, whatToIncrement: DateParts): D {\n let year = this.adapter.getYear(date);\n let month = this.adapter.getMonth(date);\n let day = this.adapter.getDate(date);\n\n switch (whatToIncrement) {\n case DateParts.day:\n day++;\n\n if (day > this.getMaxDate(date)) {\n if (this.isMaxYear(date) && this.isMaxMonth(date)) {\n day = this.getMaxDate(date);\n } else if (this.isMinYear(date) && this.isMinMonth(date)) {\n day = this.getMinDate(date);\n } else {\n day = 1;\n }\n }\n\n break;\n case DateParts.month: {\n month++;\n\n if (month > this.getMaxMonth(date)) {\n if (this.isMaxYear(date)) {\n month = this.getMaxMonth(date);\n } else if (this.isMinYear(date)) {\n month = this.getMinMonth(date);\n } else {\n month = 0;\n }\n }\n\n const lastDay = this.getLastDayFor(year, month);\n\n if (day > lastDay) {\n day = lastDay;\n }\n\n break;\n }\n case DateParts.year:\n year++;\n\n if (year > this.getMaxYear()) {\n year = this.getMaxYear();\n }\n\n break;\n default:\n }\n\n return this.createDate(year, month, day);\n }\n\n private getLastDayFor(year: number, month: number): number {\n return this.adapter.getNumDaysInMonth(this.createDate(year, month, 1));\n }\n\n private decrementDate(date: D, whatToDecrement: DateParts): D {\n let year = this.adapter.getYear(date);\n let month = this.adapter.getMonth(date);\n let day = this.adapter.getDate(date);\n\n switch (whatToDecrement) {\n case DateParts.day:\n day--;\n\n if (day < this.getMinDate(date)) {\n if (this.isMinYear(date) && this.isMinMonth(date)) {\n day = this.getMinDate(date);\n } else if (this.isMaxYear(date) && this.isMaxMonth(date)) {\n day = this.getMaxDate(date);\n } else {\n day = this.adapter.getNumDaysInMonth(date);\n }\n }\n\n break;\n case DateParts.month: {\n month--;\n\n if (month < this.getMinMonth(date)) {\n if (year === this.getMinYear()) {\n month = this.getMinMonth(date);\n } else if (this.isMaxYear(date)) {\n month = this.getMaxMonth(date);\n } else {\n month = 11;\n }\n }\n\n const lastDay = this.getLastDayFor(year, month);\n\n if (day > lastDay) {\n day = lastDay;\n }\n\n break;\n }\n case DateParts.year:\n year--;\n\n if (year < this.getMinYear()) {\n year = this.getMinYear();\n }\n\n break;\n default:\n }\n\n return this.createDate(year, month, day);\n }\n\n private verticalArrowKeyHandler(keyCode: number): void {\n const value = this.value();\n\n if (!value) {\n return;\n }\n\n let changedTime;\n\n const [modifiedTimePart, selectionStart, selectionEnd] = this.getDateEditMetrics(this.selectionStart as number);\n\n if (keyCode === UP_ARROW) {\n changedTime = this.incrementDate(value, modifiedTimePart);\n }\n\n if (keyCode === DOWN_ARROW) {\n changedTime = this.decrementDate(value, modifiedTimePart);\n }\n\n this.setValue(changedTime);\n\n this.setSelection(selectionStart, selectionEnd);\n\n this.cvaOnChange(changedTime);\n\n this.onChange();\n }\n\n private changeCaretPosition(keyCode: number): void {\n if (!this.value()) {\n return;\n }\n\n let cursorPos = this.selectionStart as number;\n\n if ([HOME, PAGE_UP].includes(keyCode)) {\n cursorPos = 0;\n } else if ([END, PAGE_DOWN].includes(keyCode)) {\n cursorPos = this.viewValue.length;\n } else if (keyCode === LEFT_ARROW) {\n this.fixEmptyDigit();\n\n cursorPos = cursorPos === 0 ? this.viewValue.length : cursorPos - 1;\n } else if (keyCode === RIGHT_ARROW) {\n this.fixEmptyDigit();\n\n const nextSeparatorPos: number = this.viewValue.indexOf(this.separator, cursorPos);\n\n cursorPos = nextSeparatorPos ? nextSeparatorPos + 1 : 0;\n }\n\n this.selectDigitByCursor(cursorPos);\n }\n\n private fixEmptyDigit() {\n const hasEmptyDigit = this.viewValue\n .split(this.separator)\n .map((part) => part.length)\n .some((item) => !item);\n\n const value = this.value();\n\n if (hasEmptyDigit && value) {\n const year = this.adapter.getYear(value);\n const month = this.adapter.getMonth(value);\n const day = this.adapter.getDate(value);\n\n this.setValue(this.createDate(year, month, day));\n }\n }\n\n private selectDigitByCursor(cursorPos: number): void {\n this.defer(() => {\n const [, selectionStart, selectionEnd] = this.getDateEditMetrics(cursorPos);\n\n this.setSelection(selectionStart, selectionEnd);\n });\n }\n\n private selectNextDigitByCursor(cursorPos: number): void {\n this.defer(() => {\n const [, , endPositionOfCurrentDigit] = this.getDateEditMetrics(cursorPos);\n const [, selectionStart, selectionEnd] = this.getDateEditMetrics(endPositionOfCurrentDigit + 1);\n\n this.setSelection(selectionStart, selectionEnd);\n });\n }\n\n private selectNextDigit(cursorPos: number, cycle: boolean = false): void {\n this.defer(() => {\n const lastValue = cycle ? 0 : cursorPos;\n const nextSeparatorPos: number = this.viewValue.indexOf(this.separator, cursorPos);\n\n const newCursorPos = nextSeparatorPos > 0 ? nextSeparatorPos + 1 : lastValue;\n\n const [, selectionStart, selectionEnd] = this.getDateEditMetrics(newCursorPos);\n\n this.setSelection(selectionStart, selectionEnd);\n });\n }\n\n /** Runs `work` on a timer, or earlier if the next key comes first. */\n private defer(work: () => void): void {\n const timer = setTimeout(() => {\n this.deferred.delete(timer);\n work();\n });\n\n this.deferred.set(timer, work);\n }\n\n /** Runs the work still waiting for its timer, including what that work defers in turn. */\n private runDeferred(): void {\n // A Map iteration also visits the entries added during it.\n for (const [timer, work] of this.deferred) {\n clearTimeout(timer);\n this.deferred.delete(timer);\n work();\n }\n }\n\n /** Checks whether the input is invalid based on the native validation. */\n private isBadInput(): boolean {\n const validity = (<HTMLInputElement>this.elementRef.nativeElement).validity;\n\n return validity && validity.badInput;\n }\n\n /** Whether the input renders no text, read from the element rather than from the last change detection. */\n private isEmpty(): boolean {\n return !this.viewValue && !this.isBadInput();\n }\n\n private cvaOnChange: (value: any) => void = () => {};\n\n private validatorOnChange = () => {};\n\n /** The form control validator for whether the input parses. */\n private parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this.focused() || this.isEmpty() || this.lastValueValid\n ? null\n : { kbqDatepickerParse: { text: this.elementRef.nativeElement.value } };\n };\n\n /** The form control validator for the min date. */\n private minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n // An unparseable value compares as NaN against any bound, which fails both `<= 0` and\n // `>= 0` and would report the value as simultaneously too early and too late.\n const controlValue = this.getValidDateOrNull(this.adapter.deserialize(control.value));\n\n return !this.min || !controlValue || this.adapter.compareDateTime(this.min, controlValue) <= 0\n ? null\n : { kbqDatepickerMin: { min: this.min, actual: controlValue } };\n };\n\n /** The form control validator for the max date. */\n private maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this.getValidDateOrNull(this.adapter.deserialize(control.value));\n\n return !this.max || !controlValue || this.adapter.compareDateTime(this.max, controlValue) >= 0\n ? null\n : { kbqDatepickerMax: { max: this.max, actual: controlValue } };\n };\n\n /** The form control validator for the date filter. */\n private filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this.adapter.deserialize(control.value);\n\n return !this.dateFilter || !controlValue || this.dateFilter(controlValue)\n ? null\n : { kbqDatepickerFilter: true };\n };\n\n /** Formats a value and sets it on the input element. */\n private formatValue(value: D | null) {\n const formattedValue = value ? this.adapter.format(value, this.dateInputFormat) : '';\n\n this.setViewValue(formattedValue);\n }\n\n private setControl(control: AbstractControl) {\n if (this.control) {\n return;\n }\n\n this.control = control;\n\n this.control.valueChanges.subscribe((value) => this.valueState.set(value));\n\n // @TODO resolve types\n this.errorStateTracker.ngControl = { control } as unknown as NgControl;\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n private getValidDateOrNull(obj: any): D | null {\n return this.adapter.isDateInstance(obj) && this.adapter.isValid(obj) ? obj : null;\n }\n\n private getDigitPositions(format: string) {\n this.firstDigit = this.secondDigit = this.thirdDigit = null;\n\n const formatInLowerCase = format.toLowerCase();\n\n formatInLowerCase.split('').reduce(\n ({ prev, length, start }: any, value: string, index: number, arr) => {\n if (value === this.separator || arr.length - 1 === index) {\n if (!this.firstDigit) {\n this.firstDigit = new DateDigit(prev, start, length);\n } else if (!this.secondDigit) {\n this.secondDigit = new DateDigit(prev, start, length);\n } else if (!this.thirdDigit) {\n this.thirdDigit = new DateDigit(prev, start, arr.length - start);\n }\n\n length = 0;\n start = index + 1;\n } else {\n length++;\n }\n\n return { prev: value, length, start };\n },\n { length: 0, start: 0 }\n );\n\n if (!this.firstDigit || !this.secondDigit || !this.thirdDigit) {\n Error(`Can' t use this format: ${format}`);\n }\n }\n\n private createDate(year: number, month: number, day: number): D {\n return this.adapter.createDateTime(\n year,\n month,\n day,\n this.adapter.getHours(this.value() as D),\n this.adapter.getMinutes(this.value() as D),\n this.adapter.getSeconds(this.value() as D),\n this.adapter.getMilliseconds(this.value() as D)\n );\n }\n\n private createDateTime(value: DateTimeObject): D | null {\n if (Object.values(value).some(isNaN)) {\n return null;\n }\n\n return this.adapter.createDateTime(\n value.year,\n value.month - 1,\n value.date,\n value.hours,\n value.minutes,\n value.seconds,\n value.milliseconds\n );\n }\n\n // The position to advance from, with a caret that landed just past a separator pulled back onto\n // the digit before it. Returned rather than applied to the field: on the paths where the value\n // cannot be parsed, a moved caret would survive into the next keystroke and change what it does.\n private correctedCursorPosition(): number {\n const position = this.selectionStart ?? 0;\n\n return this.separatorPositions.includes(position) ? position - 1 : position;\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n Directive,\n input,\n OnChanges,\n signal,\n SimpleChanges,\n untracked,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputToObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { KbqSiblingPopup, kbqSiblingPopupProvider } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { merge, Observable } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { KbqDatepicker } from './datepicker.component';\n\n/** Can be used to override the icon of a `kbqDatepickerToggle`. */\n@Directive({\n selector: '[kbqDatepickerToggleIcon]'\n})\nexport class KbqDatepickerToggleIcon {}\n\n@Component({\n selector: 'kbq-datepicker-toggle-icon',\n imports: [KbqIconModule],\n template: `\n <ng-content select=\"[kbqDatepickerToggleIcon]\">\n <i\n color=\"contrast-fade\"\n aria-hidden=\"true\"\n kbq-icon-button=\"kbq-calendar-o_16\"\n [tabindex]=\"-1\"\n [class.kbq-active]=\"datepicker() && datepicker().opened\"\n [disabled]=\"disabled\"\n [autoColor]=\"true\"\n ></i>\n </ng-content>\n `,\n styleUrls: ['./datepicker-toggle.scss'],\n providers: [kbqSiblingPopupProvider(KbqDatepickerToggleIconComponent)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-datepicker-toggle-icon',\n '[attr.aria-expanded]': 'datepicker().opened',\n '[attr.aria-disabled]': 'disabled',\n '(mousedown)': 'onMousedown($event)',\n '(click)': 'open($event)'\n }\n})\nexport class KbqDatepickerToggleIconComponent<D> implements OnChanges, KbqSiblingPopup {\n /** Whether the toggle button is disabled. */\n get disabled(): boolean {\n return this.datepicker().disabled || this.disabledState();\n }\n\n set disabled(value: boolean) {\n this.disabledState.set(coerceBooleanProperty(value));\n }\n\n private readonly disabledState = signal(false);\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** Datepicker instance that the button will toggle. */\n readonly datepicker = input<KbqDatepicker<D>>(undefined!, { alias: 'for' });\n\n /** Whether the calendar is currently on screen. Part of the `KbqSiblingPopup` contract. */\n get isAttached(): boolean {\n return !!this.datepicker()?.opened;\n }\n\n /**\n * Emits `true` when the calendar opens and `false` when it closes. Part of the `KbqSiblingPopup`\n * contract.\n *\n * Built on top of the `datepicker` signal rather than read once, because the instance is bound after the\n * consumers of this stream (a tooltip on the same element subscribes in its constructor) and may be\n * swapped later.\n */\n readonly openedChange: Observable<boolean> = toObservable(this.datepicker).pipe(\n filter(Boolean),\n switchMap((datepicker) =>\n merge(\n outputToObservable(datepicker.openedStream).pipe(map(() => true)),\n outputToObservable(datepicker.closedStream).pipe(map(() => false))\n )\n )\n );\n\n /** Whether the calendar was open when the toggle was pressed. */\n private openedOnPress = false;\n\n ngOnChanges(changes: SimpleChanges) {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n }\n\n /** Opens the calendar, moving the focus to its input; closes it instead when it was open at the press. */\n open($event: MouseEvent) {\n // Untracked: called from a consumer's `effect()`, the state read on the way — the inputs, `disabled` — would\n // make the effect run again whenever it changes.\n untracked(() => this.toggleCalendar($event));\n }\n\n /** Body of `open()`. */\n private toggleCalendar($event: MouseEvent): void {\n const datepicker = this.datepicker();\n const openedOnPress = this.openedOnPress;\n\n this.openedOnPress = false;\n\n if (!datepicker || this.disabled) return;\n\n $event.stopPropagation();\n\n // A click on the toggle of an open calendar closes it. The overlay has usually done so before the click gets\n // here, taking it for a click outside the calendar.\n if (openedOnPress) {\n datepicker.close();\n\n return;\n }\n\n // The input, not the icon, handles the keys of the datepicker and gets the focus back once it closes.\n datepicker.datepickerInput.focus();\n datepicker.open();\n }\n\n /** @internal */\n protected onMousedown(event: MouseEvent): void {\n // A press on the icon, focusable by its `tabindex`, would take the focus from the input.\n event.preventDefault();\n\n this.openedOnPress = !!this.datepicker()?.opened;\n }\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Overlay, OverlayConfig, OverlayRef, PositionStrategy, ScrollStrategy } from '@angular/cdk/overlay';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ElementRef,\n inject,\n InjectionToken,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n output,\n signal,\n SimpleChanges,\n untracked,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ESCAPE,\n KBQ_CONNECTED_OVERLAY_ABOVE_CLASS,\n KBQ_CONNECTED_OVERLAY_BELOW_CLASS,\n KBQ_OVERLAY_LAYERS,\n kbqAfterAnimations,\n kbqAnimationsDisabled,\n KbqLocaleOverridesDirective\n} from '@koobiq/components/core';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { KbqCalendar } from './calendar.component';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\nimport { KbqDatepickerInput } from './datepicker-input.directive';\n\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n\n/**\n * Injection token that determines the scroll handling while the calendar is open. The root default keeps the\n * datepicker usable outside `KbqDatepickerModule`'s injector; providing the token anywhere still wins over it.\n */\nexport const KBQ_DATEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'kbq-datepicker-scroll-strategy',\n {\n providedIn: 'root',\n factory: () => KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY(inject(Overlay))\n }\n);\n\n/** @docs-private */\nexport function KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/**\n * Redundant to the root factory of the token; kept so an app can restore the default under its own override (#DS-2196).\n *\n * @docs-private\n */\nexport const KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: KBQ_DATEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY\n};\n\n/**\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\n * KbqCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-datepicker__content',\n imports: [\n KbqCalendar\n ],\n templateUrl: 'datepicker-content.html',\n styleUrls: ['datepicker-content.scss', 'datepicker-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-datepicker__content',\n '[class.kbq-datepicker__content_leave]': \"animationState === 'void'\",\n '[class.kbq-animations-disabled]': 'animationsDisabled'\n },\n exportAs: 'kbqDatepickerContent'\n})\nexport class KbqDatepickerContent<D> implements OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n /** Whether the panel opens and closes without motion. */\n protected readonly animationsDisabled = kbqAnimationsDisabled();\n\n /** Emits when the exit animation has finished. */\n readonly animationDone = new Subject<void>();\n\n /** Reference to the datepicker that created the overlay. */\n datepicker: KbqDatepicker<D>;\n\n /** Current state of the animation. */\n get animationState(): 'enter' | 'void' {\n return this.currentAnimationState();\n }\n\n set animationState(value: 'enter' | 'void') {\n this.currentAnimationState.set(value);\n }\n\n private readonly currentAnimationState = signal<'enter' | 'void'>('enter');\n\n /** Reference to the internal calendar component. */\n readonly calendar = viewChild.required(KbqCalendar);\n\n ngOnDestroy() {\n this.animationDone.complete();\n }\n\n startExitAnimation() {\n this.animationState = 'void';\n\n kbqAfterAnimations(\n () => this.elementRef.nativeElement,\n () => this.animationDone.next(),\n this.injector\n );\n }\n}\n\n/** Component responsible for managing the datepicker popup/dialog. */\n// TODO: We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"kbqDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n@Component({\n selector: 'kbq-datepicker',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n // The calendar is created through this component's `ViewContainerRef`, so this is the element whose\n // carrier it resolves — the one on the input is a sibling of it and never reaches the pop-up.\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ],\n exportAs: 'kbqDatepicker'\n})\nexport class KbqDatepicker<D> implements OnChanges, OnDestroy {\n private overlay = inject(Overlay);\n private readonly overlayLayers = inject(KBQ_OVERLAY_LAYERS);\n private readonly injector = inject(Injector);\n private viewContainerRef = inject(ViewContainerRef);\n private readonly dateAdapter = injectRequiredDateAdapter<D>();\n private dir = inject(Directionality, { optional: true })!;\n\n protected readonly document = inject<Document>(DOCUMENT);\n\n get hasBackdrop(): boolean {\n return this._hasBackdrop;\n }\n\n set hasBackdrop(value: boolean) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n\n private _hasBackdrop: boolean = false;\n\n /** The date to open the calendar to initially. */\n get startAt(): D | null {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || this.datepickerInput?.value();\n }\n\n set startAt(value: D | null) {\n const deserializedValue = this.dateAdapter.deserialize(value);\n\n // Untracked, as in the `disabled` setter: an `effect()` that assigns it must not come to depend on the state\n // read on the way.\n this._startAt =\n deserializedValue !== null\n ? this.dateAdapter.clampDate(deserializedValue, untracked(this.minDate), untracked(this.maxDate))\n : null;\n }\n\n private _startAt: D | null;\n\n /** Whether the datepicker pop-up should be disabled. */\n get disabled(): boolean {\n const disabled = this.disabledState();\n\n return disabled === undefined && this.datepickerInput ? this.datepickerInput.disabled() : !!disabled;\n }\n\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== untracked(this.disabledState)) {\n this.disabledState.set(newValue);\n this.disabledChange.next(newValue);\n }\n }\n\n private readonly disabledState = signal<boolean | undefined>(undefined);\n\n /** Whether the calendar is open. */\n get opened(): boolean {\n return this.openedState();\n }\n\n set opened(value: boolean) {\n if (coerceBooleanProperty(value)) {\n this.open();\n } else {\n this.close();\n }\n }\n\n private readonly openedState = signal(false);\n\n /** @docs-private */\n readonly hasBackdropInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'hasBackdrop',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly startAtInput = input<D | null | undefined>(undefined, { alias: 'startAt' });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly openedInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'opened',\n transform: booleanAttribute\n });\n\n /** The currently selected date. */\n get selected(): D | null {\n return this.validSelected;\n }\n\n set selected(value: D | null) {\n this.validSelected = value;\n }\n\n get dateFilter(): (date: D | null) => boolean {\n return this.datepickerInput && this.datepickerInput.dateFilter;\n }\n\n get value(): D | null {\n return this.selected;\n }\n\n /** The minimum selectable date. */\n readonly minDate = input<D | null>(undefined!);\n\n /** The maximum selectable date. */\n readonly maxDate = input<D | null>(undefined!);\n\n /**\n * Emits selected year in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n readonly yearSelected = output<D>();\n\n /**\n * Emits selected month in year view.\n * This doesn't imply a change on the selected date.\n */\n readonly monthSelected = output<D>();\n\n /** Classes to be passed to the date picker panel. Supports the same syntax as the `[class]` binding. */\n readonly panelClass = input<string | string[]>(undefined!);\n\n /** Function that can be used to add custom CSS classes to dates. */\n readonly dateClass = input<(date: D) => KbqCalendarCellCssClasses>(undefined!);\n\n readonly backdropClass = input<string>('cdk-overlay-transparent-backdrop');\n\n /** Emits when the datepicker has been opened. */\n readonly openedStream = output<void>({ alias: 'opened' });\n\n /** Emits when the datepicker has been closed. */\n readonly closedStream = output<void>({ alias: 'closed' });\n\n /** Emits when the datepicker is disabled. */\n readonly disabledChange = new Subject<boolean>();\n\n /** Emits new selected date when selected date changes. */\n readonly selectedChanged = new Subject<D>();\n\n /** The id for the datepicker calendar. */\n id: string = `kbq-datepicker-${datepickerUid++}`;\n\n /** A reference to the overlay when the calendar is opened as a popup. */\n popupRef: OverlayRef | null;\n\n /** The input element this datepicker is associated with. */\n datepickerInput: KbqDatepickerInput<D>;\n\n private scrollStrategy: () => ScrollStrategy;\n\n private validSelected: D | null = null;\n\n /** A portal containing the calendar for this datepicker. */\n private calendarPortal: ComponentPortal<KbqDatepickerContent<D>>;\n\n /** Reference to the component instantiated in popup mode. */\n private popupComponentRef: ComponentRef<KbqDatepickerContent<D>> | null;\n\n /** The element that was focused before the datepicker was opened. */\n private focusedElementBeforeOpen: HTMLElement | null = null;\n\n /** Subscription to value changes in the associated input element. */\n private inputSubscription = Subscription.EMPTY;\n\n private closeSubscription = Subscription.EMPTY;\n\n constructor() {\n this.scrollStrategy = inject(KBQ_DATEPICKER_SCROLL_STRATEGY);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['hasBackdropInput']) {\n const hasBackdrop = this.hasBackdropInput();\n\n if (hasBackdrop !== undefined) this.hasBackdrop = hasBackdrop;\n }\n\n // A bound `undefined` is handed over too, as an unset date.\n if (changes['startAtInput']) this.startAt = this.startAtInput() ?? null;\n\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n\n if (changes['openedInput']) {\n const opened = this.openedInput();\n\n if (opened !== undefined) this.opened = opened;\n }\n }\n\n ngOnDestroy() {\n // Before `close()`: a datepicker going away takes its popup along without playing the exit animation.\n this.destroyOverlay();\n this.close();\n this.inputSubscription.unsubscribe();\n this.closeSubscription.unsubscribe();\n this.disabledChange.complete();\n }\n\n /** Selects the given date */\n select(date: D): void {\n const oldValue = this.selected;\n\n this.selected = date;\n\n if (!this.dateAdapter.sameDate(oldValue, this.selected)) {\n untracked(() => this.selectedChanged.next(date));\n }\n }\n\n /** Emits the selected year in multiyear view */\n selectYear(normalizedYear: D): void {\n this.yearSelected.emit(normalizedYear);\n }\n\n /** Emits selected month in year view */\n selectMonth(normalizedMonth: D): void {\n this.monthSelected.emit(normalizedMonth);\n }\n\n /**\n * Register an input with this datepicker.\n *\n * @param input The datepicker input to register with this datepicker.\n */\n registerInput(input: KbqDatepickerInput<D>): void {\n if (this.datepickerInput) {\n throw Error('A KbqDatepicker can only be associated with a single input.');\n }\n\n this.datepickerInput = input;\n this.inputSubscription = this.datepickerInput.valueChange.subscribe((value: D | null) => {\n this.selected = value;\n\n if (this.popupComponentRef) {\n const calendar = this.popupComponentRef.instance.calendar();\n\n calendar.monthView()?.init();\n calendar.activeDate = value as D;\n }\n });\n }\n\n /** Open the calendar. */\n open(): void {\n // Untracked, as `close()`, `toggle()` and `select()`: called from a consumer's `effect()`, the state read on\n // the way — `opened`, `disabled`, the inputs, the value of the input — would make the effect run again on\n // every open and close.\n untracked(() => this.openCalendar());\n }\n\n /** Close the calendar. */\n close(restoreFocus: boolean = true): void {\n untracked(() => this.closeCalendar(restoreFocus));\n }\n\n toggle(): void {\n if (this.datepickerInput.isReadOnly) {\n return;\n }\n\n if (untracked(this.openedState)) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Body of `open()`. */\n private openCalendar(): void {\n if (this.openedState() || this.disabled) {\n return;\n }\n\n if (!this.datepickerInput) {\n throw Error('Attempted to open an KbqDatepicker with no associated input.');\n }\n\n if (this.document) {\n this.focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n }\n\n this.openAsPopup();\n\n this.openedState.set(true);\n this.openedStream.emit();\n }\n\n /** Body of `close()`. */\n private closeCalendar(restoreFocus: boolean): void {\n if (!this.openedState()) {\n return;\n }\n\n // A popup the overlay has already taken down, e.g. on scroll, has nothing left to animate.\n if (this.popupComponentRef?.hostView.destroyed) {\n this.destroyOverlay();\n } else if (this.popupComponentRef) {\n const instance = this.popupComponentRef.instance;\n\n instance.startExitAnimation();\n\n instance.animationDone.pipe(take(1)).subscribe(() => this.destroyOverlay());\n }\n\n if (restoreFocus) {\n this.focusedElementBeforeOpen!.focus();\n }\n\n this.openedState.set(false);\n this.closedStream.emit();\n this.focusedElementBeforeOpen = null;\n }\n\n /** Destroys the current overlay. */\n private destroyOverlay() {\n if (this.popupRef) {\n this.popupRef.dispose();\n this.popupRef = this.popupComponentRef = null;\n }\n }\n\n /** Open the calendar as a popup. */\n private openAsPopup(): void {\n if (!this.calendarPortal) {\n this.calendarPortal = new ComponentPortal<KbqDatepickerContent<D>>(\n KbqDatepickerContent,\n this.viewContainerRef\n );\n }\n\n // The popup of the last opening may still be playing its exit: disposed once that ends, it would close this one.\n if (this.popupComponentRef?.instance.animationState === 'void') {\n this.destroyOverlay();\n }\n\n if (!this.popupRef) {\n this.createPopup();\n }\n\n if (!this.popupRef!.hasAttached()) {\n this.popupComponentRef = this.popupRef!.attach(this.calendarPortal);\n this.popupComponentRef.instance.datepicker = this;\n\n // Update the position once the calendar has rendered.\n afterNextRender(() => this.popupRef?.updatePosition(), { injector: this.injector });\n }\n }\n\n /** Create the popup. */\n private createPopup(): void {\n const overlayConfig = new OverlayConfig({\n positionStrategy: this.createPopupPositionStrategy(),\n hasBackdrop: this.hasBackdrop,\n backdropClass: this.backdropClass(),\n direction: this.dir,\n scrollStrategy: this.scrollStrategy(),\n panelClass: 'kbq-datepicker__popup'\n });\n\n this.popupRef = this.overlay.create(overlayConfig);\n this.overlayLayers.adopt(this.popupRef, this.datepickerInput.getOrigin().nativeElement);\n\n this.closeSubscription = this.closingActions().subscribe(() => this.close(this.restoreFocus()));\n\n // The input handles the keys while it has the focus; this covers a focus inside the calendar. CDK hands a key\n // only to the topmost overlay listening for keys, so a modal underneath no longer closes on the same Escape.\n this.closeSubscription.add(\n this.popupRef\n .keydownEvents()\n .pipe(filter((event) => event.keyCode === ESCAPE))\n .subscribe((event) => {\n event.preventDefault();\n this.close();\n })\n );\n }\n\n /** Whether a close from outside the calendar has to return the focus: unless the press moved it somewhere else. */\n private restoreFocus(): boolean {\n const focused = this.document.activeElement;\n\n // A press that keeps the focus where it was, as on the toggle, leaves it in the calendar about to go away.\n return focused === this.document.body || !!this.popupComponentRef?.location.nativeElement.contains(focused);\n }\n\n private closingActions() {\n return merge(\n this.popupRef!.backdropClick(),\n this.popupRef!.outsidePointerEvents(),\n this.popupRef!.detachments()\n );\n }\n\n /** Create the popup PositionStrategy. */\n private createPopupPositionStrategy(): PositionStrategy {\n return (\n this.overlay\n .position()\n .flexibleConnectedTo(this.datepickerInput.getOrigin())\n .withTransformOriginOn('.kbq-datepicker__content')\n .withFlexibleDimensions(false)\n // Also large enough to absorb the trigger↔panel gap padding (kbq-connected-overlay-gap,\n // defaultOffsetY = 4) that CDK's viewport-fit check can't see, since that padding is applied\n // via panelClass after the fit decision is made.\n .withViewportMargin(8)\n .withLockedPosition()\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n panelClass: KBQ_CONNECTED_OVERLAY_BELOW_CLASS\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: KBQ_CONNECTED_OVERLAY_ABOVE_CLASS\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n }\n ])\n );\n }\n}\n","<kbq-calendar\n [dateClass]=\"datepicker.dateClass()\"\n [dateFilter]=\"datepicker.dateFilter\"\n [id]=\"datepicker.id\"\n [maxDate]=\"datepicker.maxDate()\"\n [minDate]=\"datepicker.minDate()\"\n [class]=\"datepicker.panelClass()\"\n [selected]=\"datepicker.selected\"\n [startAt]=\"datepicker.startAt\"\n (monthSelected)=\"datepicker.selectMonth($event)\"\n (selectedChange)=\"datepicker.select($event)\"\n (userSelection)=\"datepicker.close()\"\n (yearSelected)=\"datepicker.selectYear($event)\"\n/>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { TitleCasePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqSelectModule } from '@koobiq/components/select';\nimport { KbqCalendarBody } from './calendar-body.component';\nimport { KbqCalendarHeader } from './calendar-header.component';\nimport { KbqCalendar } from './calendar.component';\nimport { KbqDatepickerInput } from './datepicker-input.directive';\nimport { KbqDatepickerToggleIcon, KbqDatepickerToggleIconComponent } from './datepicker-toggle.component';\nimport { KbqDatepicker, KbqDatepickerContent } from './datepicker.component';\nimport { KbqMonthView } from './month-view.component';\n\n@NgModule({\n imports: [\n KbqButtonModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n KbqSelectModule,\n KbqIconModule,\n KbqDatepickerToggleIconComponent,\n TitleCasePipe,\n KbqCalendar,\n KbqCalendarBody,\n KbqDatepicker,\n KbqDatepickerContent,\n KbqDatepickerInput,\n KbqDatepickerToggleIcon,\n KbqMonthView,\n KbqCalendarHeader\n ],\n exports: [\n KbqCalendar,\n KbqCalendarBody,\n KbqDatepicker,\n KbqDatepickerContent,\n KbqDatepickerInput,\n KbqDatepickerToggleIcon,\n KbqDatepickerToggleIconComponent,\n KbqMonthView,\n KbqCalendarHeader,\n KbqFormFieldModule\n ]\n})\nexport class KbqDatepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-datepicker.mjs","sources":["../../../packages/components/datepicker/calendar-body.component.ts","../../../packages/components/datepicker/calendar-body.html","../../../packages/components/datepicker/datepicker-errors.ts","../../../packages/components/datepicker/calendar-header.component.ts","../../../packages/components/datepicker/calendar-header.html","../../../packages/components/datepicker/month-view.component.ts","../../../packages/components/datepicker/month-view.html","../../../packages/components/datepicker/calendar.component.ts","../../../packages/components/datepicker/calendar.html","../../../packages/components/datepicker/datepicker-input.directive.ts","../../../packages/components/datepicker/datepicker-toggle.component.ts","../../../packages/components/datepicker/datepicker.component.ts","../../../packages/components/datepicker/datepicker-content.html","../../../packages/components/datepicker/datepicker-module.ts","../../../packages/components/datepicker/koobiq-components-datepicker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation,\n input,\n output\n} from '@angular/core';\n\n/**\n * Extra CSS classes that can be associated with a calendar cell.\n */\nexport type KbqCalendarCellCssClasses = string | string[] | Set<string> | { [key: string]: any };\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n *\n * @docs-private\n */\nexport class KbqCalendarCell {\n constructor(\n public value: number,\n public displayValue: string,\n public enabled: boolean,\n public cssClasses?: KbqCalendarCellCssClasses\n ) {}\n}\n\n/**\n * An internal component used to display calendar data in a table.\n *\n * @docs-private\n */\n@Component({\n selector: '[kbq-calendar-body]',\n imports: [],\n templateUrl: 'calendar-body.html',\n styleUrls: ['calendar-body.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-calendar__body'\n },\n exportAs: 'kbqCalendarBody'\n})\nexport class KbqCalendarBody implements OnChanges {\n /** The cells to display in the table. */\n readonly rows = input<KbqCalendarCell[][]>(undefined!);\n\n /** The value in the table that corresponds to today. */\n readonly todayValue = input<number>(undefined!);\n\n /** The value in the table that is currently selected. */\n readonly selectedValue = input<number>(undefined!);\n\n /** The minimum number of free cells needed to fit the label in the first row. */\n readonly labelMinRequiredCells = input<number>(undefined!);\n\n /** The number of columns in the table. */\n readonly numCols = input(7);\n\n /** The cell number of the active cell in the table. */\n readonly activeCell = input(0);\n\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n readonly cellAspectRatio = input(1);\n\n /** Emits when a new value is selected. */\n readonly selectedValueChange = output<number>();\n\n /** The number of blank cells to put at the beginning for the first row. */\n firstRowOffset: number;\n\n /** Padding for the individual date cells. */\n cellPadding: string;\n\n /** Width of an individual cell. */\n cellWidth: string;\n\n cellClicked(cell: KbqCalendarCell): void {\n if (cell.enabled) {\n this.selectedValueChange.emit(cell.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const columnChanges = changes.numCols;\n const { rows: rowsInput, numCols: numColsInput } = this;\n const rows = rowsInput();\n const numCols = numColsInput();\n\n if (changes.rows || columnChanges) {\n this.firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n\n if (changes.cellAspectRatio || columnChanges || !this.cellPadding) {\n // todo\n // this.cellPadding = `${this.cellAspectRatio * 50 / numCols}%`;\n this.cellPadding = '0';\n }\n\n if (columnChanges || !this.cellWidth) {\n this.cellWidth = `${100 / numCols}%`;\n }\n }\n\n isActiveCell(rowIndex: number, colIndex: number): boolean {\n let cellNumber = rowIndex * this.numCols() + colIndex;\n\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this.firstRowOffset;\n }\n\n return cellNumber === this.activeCell();\n }\n}\n","<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows(); track $index; let rowIndex = $index) {\n <tr>\n <!-- We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\n The aspect ratio of the table cells is maintained by setting the top and bottom padding as a\n percentage of the width (a variant of the trick described here:\n https://www.w3schools.com/howto/howto_css_aspect_ratio.asp). -->\n @if (rowIndex === 0 && firstRowOffset) {\n <td class=\"kbq-calendar__body-label\" [attr.colspan]=\"firstRowOffset\"></td>\n }\n @for (item of row; track item.displayValue; let colIndex = $index) {\n <td\n class=\"kbq-calendar__body-cell\"\n [class.kbq-calendar__body_active]=\"isActiveCell(rowIndex, colIndex)\"\n [class]=\"item.cssClasses!\"\n [style.paddingBottom]=\"cellPadding\"\n [style.paddingTop]=\"cellPadding\"\n [style.width]=\"cellWidth\"\n [tabindex]=\"-1\"\n (click)=\"cellClicked(item)\"\n >\n <div\n class=\"kbq-calendar__body-cell-content\"\n [class.kbq-calendar__body-today]=\"todayValue() === item.value\"\n [class.kbq-disabled]=\"!item.enabled\"\n [class.kbq-selected]=\"selectedValue() === item.value\"\n >\n {{ item.displayValue }}\n </div>\n </td>\n }\n </tr>\n}\n","import { inject } from '@angular/core';\nimport { DateAdapter } from '@koobiq/components/core';\n\n/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n return Error(\n `KbqDatepicker: No provider found for ${provider}. You must import one of the existing ` +\n `modules at your application root or provide a custom implementation or use exists ones.`\n );\n}\n\n/** Injects `DateAdapter`, naming the missing provider instead of letting DI throw a bare `NullInjectorError`. */\nexport function injectRequiredDateAdapter<D>(): DateAdapter<D> {\n const adapter = inject<DateAdapter<D>>(DateAdapter, { optional: true });\n\n if (!adapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n return adapter;\n}\n","import { TitleCasePipe } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n input,\n OnChanges,\n output,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { kbqInjectA11yLocaleConfiguration, KbqOptionModule } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqSelectModule } from '@koobiq/components/select';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\n\nconst defaultMinYear = 1900;\nconst defaultMaxYear = 2099;\n\nexport type MonthName = {\n name: string;\n nameShort: string;\n value: number;\n disabled: boolean;\n};\n\n/** Default header for KbqCalendar */\n@Component({\n selector: 'kbq-calendar-header',\n imports: [\n TitleCasePipe,\n KbqButtonModule,\n KbqIconModule,\n KbqSelectModule,\n KbqOptionModule\n ],\n templateUrl: 'calendar-header.html',\n styleUrls: ['calendar-header.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-calendar-header'\n },\n exportAs: 'kbqCalendarHeader'\n})\nexport class KbqCalendarHeader<D> implements AfterContentInit, OnChanges {\n private readonly adapter = injectRequiredDateAdapter<D>();\n\n /** Accessible names for the icon-only month navigation buttons. */\n protected readonly a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();\n\n monthNames: MonthName[];\n selectedMonth: number;\n\n years: number[] = [];\n selectedYear: number;\n\n get activeDate(): D {\n return this._activeDate;\n }\n\n set activeDate(value: D) {\n this._activeDate = value;\n\n this.updateSelectedValues();\n this.updateSelectionOptions();\n }\n\n private _activeDate: D;\n\n get maxDate(): D | null {\n return this._maxDate;\n }\n\n set maxDate(value: D | null) {\n if (!value) {\n return;\n }\n\n this._maxDate = value;\n\n this.updateSelectionOptions();\n }\n\n private _maxDate = this.adapter.createDate(defaultMaxYear, 11);\n\n get minDate(): D | null {\n return this._minDate;\n }\n\n set minDate(value: D | null) {\n if (!value) {\n return;\n }\n\n this._minDate = value;\n\n this.updateSelectionOptions();\n }\n\n private _minDate = this.adapter.createDate(defaultMinYear, 1);\n\n /** @docs-private */\n readonly activeDateInput = input<D | undefined>(undefined, { alias: 'activeDate' });\n\n /** @docs-private */\n readonly maxDateInput = input<D | null | undefined>(undefined, { alias: 'maxDate' });\n\n /** @docs-private */\n readonly minDateInput = input<D | null | undefined>(undefined, { alias: 'minDate' });\n\n get previousDisabled(): boolean {\n return this.compareDate(this.activeDate, this.minDate!) <= 0;\n }\n\n get currentDisabled(): boolean {\n const today = this.adapter.today();\n\n return this.compareDate(today, this.minDate!) < 0 || this.compareDate(today, this.maxDate!) > 0;\n }\n\n get nextDisabled(): boolean {\n return this.compareDate(this.activeDate, this.maxDate!) >= 0;\n }\n\n /** Emits when any date is activated. */\n readonly activeDateChange = output<D>();\n readonly monthSelected = output<D>();\n readonly yearSelected = output<D>();\n\n constructor() {\n this.monthNames = this.adapter.getMonthNames('long').map((name, i) => {\n return { name, nameShort: this.adapter.getMonthNames('short')[i], value: i, disabled: false };\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['maxDateInput']) {\n const maxDate = this.maxDateInput();\n\n if (maxDate !== undefined) this.maxDate = maxDate;\n }\n\n if (changes['minDateInput']) {\n const minDate = this.minDateInput();\n\n if (minDate !== undefined) this.minDate = minDate;\n }\n\n if (changes['activeDateInput']) {\n const activeDate = this.activeDateInput();\n\n if (activeDate !== undefined) this.activeDate = activeDate;\n }\n }\n\n ngAfterContentInit(): void {\n this.updateYearsOptions();\n this.updateMonthOptions();\n this.updateSelectedValues();\n }\n\n /** Handles when a new month is selected. */\n onMonthSelected(month: number) {\n const year = this.adapter.getYear(this.activeDate);\n const normalizedDate = this.adapter.createDate(year, month);\n const daysInMonth = this.adapter.getNumDaysInMonth(normalizedDate);\n\n this.activeDate = this.adapter.createDate(\n year,\n month,\n Math.min(this.adapter.getDate(this.activeDate), daysInMonth)\n );\n\n this.monthSelected.emit(this.activeDate);\n this.activeDateChange.emit(this.activeDate);\n }\n\n /** Handles when a new year is selected. */\n onYearSelected(year: number) {\n const month = this.adapter.getMonth(this.activeDate);\n const daysInMonth = this.adapter.getNumDaysInMonth(this.adapter.createDate(year, month));\n\n this.activeDate = this.adapter.createDate(\n year,\n month,\n Math.min(this.adapter.getDate(this.activeDate), daysInMonth)\n );\n\n this.yearSelected.emit(this.activeDate);\n this.activeDateChange.emit(this.activeDate);\n\n this.updateMonthOptions();\n }\n\n selectCurrentDate(): void {\n this.activeDate = this.adapter.today();\n\n this.activeDateChange.emit(this.activeDate);\n }\n\n /** Handles user clicks on the previous button. */\n selectPreviousMonth(): void {\n this.activeDate = this.adapter.addCalendarMonths(this.activeDate, -1);\n\n this.activeDateChange.emit(this.activeDate);\n }\n\n /** Handles user clicks on the next button. */\n selectNextMonth(): void {\n this.activeDate = this.adapter.addCalendarMonths(this.activeDate, 1);\n\n this.activeDateChange.emit(this.activeDate);\n }\n\n private compareDate(first: D, second: D): number {\n const normalizedFirst = this.adapter.createDate(this.adapter.getYear(first), this.adapter.getMonth(first));\n\n const normalizedSecond = this.adapter.createDate(this.adapter.getYear(second), this.adapter.getMonth(second));\n\n return this.adapter.compareDate(normalizedFirst, normalizedSecond);\n }\n\n private updateSelectedValues() {\n this.selectedMonth = this.monthNames[this.adapter.getMonth(this.activeDate)].value;\n\n const year = this.adapter.getYear(this.activeDate);\n\n this.selectedYear = this.years.find((item) => item === year) || this.years[0];\n }\n\n private updateSelectionOptions() {\n this.updateYearsOptions();\n this.updateMonthOptions();\n }\n\n private updateYearsOptions() {\n const minYear = this.adapter.getYear(this.minDate!);\n const maxYear = this.adapter.getYear(this.maxDate!);\n\n this.years = [];\n\n for (let key: number = minYear; key <= maxYear; key++) {\n this.years.push(key);\n }\n }\n\n private updateMonthOptions() {\n if (!this._activeDate) {\n return;\n }\n\n const minYear = this.adapter.getYear(this.minDate!);\n const minMonth = this.adapter.getMonth(this.minDate!);\n\n const maxYear = this.adapter.getYear(this.maxDate!);\n const maxMonth = this.adapter.getMonth(this.maxDate!);\n\n const currentYear = this.adapter.getYear(this._activeDate);\n\n if (currentYear === minYear) {\n this.monthNames.forEach((month) => (month.disabled = month.value < minMonth));\n } else if (currentYear === maxYear) {\n this.monthNames.forEach((month) => (month.disabled = month.value > maxMonth));\n } else {\n this.monthNames.forEach((month) => (month.disabled = false));\n }\n }\n}\n","<div class=\"kbq-calendar-header__select-group\">\n <kbq-select\n #monthSelect=\"kbqSelect\"\n class=\"kbq-calendar-header__select\"\n [panelClass]=\"'kbq-calendar-select-panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selectedMonth\"\n (selectionChange)=\"onMonthSelected($event.value)\"\n >\n <button\n kbq-button\n kbq-select-matcher\n class=\"layout-padding-right-xs\"\n [class.kbq-active]=\"monthSelect.panelOpen\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n >\n {{ monthNames[selectedMonth].nameShort | titlecase }}\n\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\" [color]=\"'contrast'\"></i>\n </button>\n\n @for (month of monthNames; track month.nameShort) {\n <kbq-option [disabled]=\"month.disabled\" [kbqTooltipDisabled]=\"true\" [value]=\"month.value\">\n {{ month.name }}\n </kbq-option>\n }\n </kbq-select>\n\n <kbq-select\n #yearSelect=\"kbqSelect\"\n [panelClass]=\"'kbq-calendar-select-panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selectedYear\"\n (selectionChange)=\"onYearSelected($event.value)\"\n >\n <button\n kbq-button\n kbq-select-matcher\n class=\"layout-padding-right-xs\"\n [class.kbq-active]=\"yearSelect.panelOpen\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n >\n {{ selectedYear }}\n\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\"></i>\n </button>\n\n @for (year of years; track year) {\n <kbq-option [kbqTooltipDisabled]=\"true\" [value]=\"year\">\n {{ year }}\n </kbq-option>\n }\n </kbq-select>\n</div>\n\n<div class=\"kbq-calendar-header__button-group\">\n <button\n kbq-button\n class=\"kbq-calendar-header__previous-button\"\n [attr.aria-label]=\"a11yLocaleConfiguration().previousMonth\"\n [color]=\"'contrast'\"\n [disabled]=\"previousDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectPreviousMonth()\"\n >\n <i kbq-icon=\"kbq-chevron-left_16\"></i>\n </button>\n\n <button\n kbq-button\n [attr.aria-label]=\"a11yLocaleConfiguration().currentDate\"\n [color]=\"'contrast'\"\n [disabled]=\"currentDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\"\n >\n <i kbq-icon=\"kbq-circle-xs_16\"></i>\n </button>\n\n <button\n kbq-button\n class=\"kbq-calendar-header__next-button\"\n [attr.aria-label]=\"a11yLocaleConfiguration().nextMonth\"\n [color]=\"'contrast'\"\n [disabled]=\"nextDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectNextMonth()\"\n >\n <i kbq-icon=\"kbq-chevron-right_16\"></i>\n </button>\n</div>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n input,\n output,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter, KbqDateTimezoneService } from '@koobiq/components/core';\nimport { KbqCalendarBody, KbqCalendarCell, KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\n\nconst DAYS_PER_WEEK = 7;\n\n/**\n * An internal component used to display a single month in the datepicker.\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-month-view',\n imports: [\n KbqCalendarBody\n ],\n templateUrl: 'month-view.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'kbqMonthView'\n})\nexport class KbqMonthView<D> implements AfterContentInit, OnChanges {\n private changeDetectorRef = inject(ChangeDetectorRef);\n private readonly timezoneService = inject(KbqDateTimezoneService);\n adapter: DateAdapter<D> = injectRequiredDateAdapter<D>();\n\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n get activeDate(): D {\n return this._activeDate;\n }\n\n set activeDate(value: D) {\n const oldValue = this._activeDate;\n\n this._activeDate = value;\n\n if (!this.hasSameMonthAndYear(oldValue, value)) {\n this.init();\n }\n }\n\n private _activeDate: D;\n\n /** The currently selected date. */\n get selected(): D | null {\n return this._selected;\n }\n\n set selected(value: D | null) {\n this._selected = value;\n this.selectedDate = this.getDateInCurrentMonth(this._selected);\n }\n\n private _selected: D | null;\n\n /** @docs-private */\n readonly activeDateInput = input<D | undefined>(undefined, { alias: 'activeDate' });\n\n /** @docs-private */\n readonly selectedInput = input<D | null | undefined>(undefined, { alias: 'selected' });\n\n /** The minimum selectable date. */\n readonly minDate = input<D | null>(undefined!);\n\n /** The maximum selectable date. */\n readonly maxDate = input<D | null>(undefined!);\n\n /** Function used to filter which dates are selectable. */\n readonly dateFilter = input<(date: D) => boolean>(undefined!);\n\n /** Function that can be used to add custom CSS classes to dates. */\n readonly dateClass = input<(date: D) => KbqCalendarCellCssClasses>(undefined!);\n\n /** Emits when a new date is selected. */\n readonly selectedChange = output<D | null>();\n\n /** Emits when any date is selected. */\n readonly userSelection = output<void>();\n\n /** Emits when any date is activated. */\n readonly activeDateChange = output<D>();\n\n /** The body of calendar table */\n readonly kbqCalendarBody = viewChild.required(KbqCalendarBody);\n\n /** Grid of calendar cells representing the dates of the month. */\n weeks: KbqCalendarCell[][];\n\n /** The number of blank cells in the first row before the 1st of the month. */\n firstWeekOffset: number;\n\n /**\n * The date of the month that the currently selected Date falls on.\n * Null if the currently selected Date is in another month.\n */\n selectedDate: number | null;\n\n /** The date of the month that today falls on. Null if today is in another month. */\n todayDate: number | null;\n\n /** The names of the weekdays. */\n weekdays: { long: string; narrow: string }[];\n\n constructor() {\n const firstDayOfWeek = this.adapter.getFirstDayOfWeek();\n const narrowWeekdays = this.adapter.getDayOfWeekNames('short');\n const longWeekdays = this.adapter.getDayOfWeekNames('long');\n\n // Rotate the labels for days of the week based on the configured first day of the week.\n const weekdays = longWeekdays.map((long, i) => {\n return { long, narrow: narrowWeekdays[i] };\n });\n\n this.weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n\n this._activeDate = this.adapter.today();\n\n this.timezoneService.changes.pipe(takeUntilDestroyed()).subscribe(() => {\n // `todayDate` and the cell dates are resolved once, in `init()`, against the zone that was\n // active then; a new one can move which cell is today.\n this.init();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['selectedInput']) {\n const selected = this.selectedInput();\n\n if (selected !== undefined) this.selected = selected;\n }\n\n if (changes['activeDateInput']) {\n const activeDate = this.activeDateInput();\n\n if (activeDate !== undefined) this.activeDate = activeDate;\n }\n }\n\n ngAfterContentInit() {\n this.init();\n }\n\n /** Handles when a new date is selected. */\n dateSelected(date: number) {\n if (this.selectedDate !== date) {\n const selectedYear = this.adapter.getYear(this.activeDate);\n const selectedMonth = this.adapter.getMonth(this.activeDate);\n const selectedDate = this.adapter.createDate(selectedYear, selectedMonth, date);\n\n this.selectedChange.emit(selectedDate);\n }\n\n this.userSelection.emit();\n }\n\n /** Initializes this month view. */\n init() {\n this.selectedDate = this.getDateInCurrentMonth(this.selected);\n this.todayDate = this.getDateInCurrentMonth(this.adapter.today());\n\n const firstOfMonth = this.adapter.createDate(\n this.adapter.getYear(this.activeDate),\n this.adapter.getMonth(this.activeDate)\n );\n\n this.firstWeekOffset =\n (DAYS_PER_WEEK + this.adapter.getDayOfWeek(firstOfMonth) - this.adapter.getFirstDayOfWeek()) %\n DAYS_PER_WEEK;\n\n this.createWeekCells();\n this.changeDetectorRef.markForCheck();\n }\n\n /** Creates KbqCalendarCells for the dates in this month. */\n private createWeekCells() {\n const daysInMonth = this.adapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this.adapter.getDateNames();\n\n this.weeks = [[]];\n\n for (let i = 0, cell = this.firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell === DAYS_PER_WEEK) {\n this.weeks.push([]);\n cell = 0;\n }\n\n const date = this.adapter.createDate(\n this.adapter.getYear(this.activeDate),\n this.adapter.getMonth(this.activeDate),\n i + 1\n );\n const enabled = this.shouldEnableDate(date);\n const dateClass = this.dateClass();\n const cellClasses = dateClass ? dateClass(date) : undefined;\n\n this.weeks[this.weeks.length - 1].push(new KbqCalendarCell(i + 1, dateNames[i], enabled, cellClasses));\n }\n }\n\n /** Date filter for the month */\n private shouldEnableDate(date: D): boolean {\n const dateFilter = this.dateFilter();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n return (\n !!date &&\n (!dateFilter || dateFilter(date)) &&\n (!minDate || this.adapter.compareDate(date, minDate) >= 0) &&\n (!maxDate || this.adapter.compareDate(date, maxDate) <= 0)\n );\n }\n\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n private getDateInCurrentMonth(date: D | null): number | null {\n return date && this.hasSameMonthAndYear(date, this.activeDate) ? this.adapter.getDate(date) : null;\n }\n\n /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n private hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n return !!(\n d1 &&\n d2 &&\n this.adapter.getMonth(d1) === this.adapter.getMonth(d2) &&\n this.adapter.getYear(d1) === this.adapter.getYear(d2)\n );\n }\n}\n","<table class=\"kbq-calendar__table\">\n <thead class=\"kbq-calendar__table-header\">\n <tr>\n @for (day of weekdays; track day) {\n <th [attr.aria-label]=\"day.long\">\n {{ day.narrow }}\n </th>\n }\n </tr>\n <tr>\n <th colspan=\"7\" class=\"kbq-calendar__table-header-divider\"></th>\n </tr>\n </thead>\n <tbody\n kbq-calendar-body\n [activeCell]=\"adapter.getDate(activeDate) - 1\"\n [labelMinRequiredCells]=\"3\"\n [rows]=\"weeks\"\n [selectedValue]=\"selectedDate!\"\n [todayValue]=\"todayDate!\"\n (selectedValueChange)=\"dateSelected($event)\"\n ></tbody>\n</table>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n input,\n output,\n viewChild\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { KbqCalendarHeader } from './calendar-header.component';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\nimport { KbqMonthView } from './month-view.component';\n\n/**\n * A calendar that is used as part of the datepicker.\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-calendar',\n imports: [\n KbqCalendarHeader,\n KbqMonthView\n ],\n templateUrl: 'calendar.html',\n styleUrls: ['calendar.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-calendar'\n },\n exportAs: 'kbqCalendar'\n})\nexport class KbqCalendar<D> implements AfterContentInit, OnDestroy, OnChanges {\n private readonly adapter = injectRequiredDateAdapter<D>();\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n /** A date representing the period (month or year) to start the calendar in. */\n get startAt(): D | null {\n return this._startAt;\n }\n\n set startAt(value: D | null) {\n const deserializedValue = this.getValidDateOrNull(this.adapter.deserialize(value));\n\n this._startAt =\n deserializedValue !== null ? this.adapter.clampDate(deserializedValue, this.minDate, this.maxDate) : null;\n }\n\n private _startAt: D | null;\n\n /** The currently selected date. */\n get selected(): D | null {\n return this._selected;\n }\n\n set selected(value: D | null) {\n this._selected = this.adapter.deserialize(value);\n }\n\n private _selected: D | null;\n\n /** The minimum selectable date. */\n get minDate(): D | null {\n return this._minDate;\n }\n\n set minDate(value: D | null) {\n this._minDate = this.adapter.deserialize(value);\n\n this.startAt = this._startAt;\n }\n\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n get maxDate(): D | null {\n return this._maxDate;\n }\n\n set maxDate(value: D | null) {\n this._maxDate = this.adapter.deserialize(value);\n\n this.startAt = this._startAt;\n }\n\n private _maxDate: D | null;\n\n /** @docs-private */\n readonly startAtInput = input<D | null | undefined>(undefined, { alias: 'startAt' });\n\n /** @docs-private */\n readonly selectedInput = input<D | null | undefined>(undefined, { alias: 'selected' });\n\n /** @docs-private */\n readonly minDateInput = input<D | null | undefined>(undefined, { alias: 'minDate' });\n\n /** @docs-private */\n readonly maxDateInput = input<D | null | undefined>(undefined, { alias: 'maxDate' });\n\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted and used as the anchor on when using keyboard navigation.\n */\n get activeDate(): D {\n return this._activeDate;\n }\n\n set activeDate(value: D | null) {\n this._activeDate = this.adapter.clampDate(value || this.getActiveDateDefault(), this.minDate, this.maxDate);\n\n this.stateChanges.next();\n }\n\n private _activeDate: D;\n\n /** Function used to filter which dates are selectable. */\n readonly dateFilter = input<(date: D) => boolean>(undefined!);\n\n /** Function that can be used to add custom CSS classes to dates. */\n readonly dateClass = input<(date: D) => KbqCalendarCellCssClasses>(undefined!);\n\n /** Emits when the currently selected date changes. */\n readonly selectedChange = output<D>();\n\n /**\n * Emits the year chosen in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n readonly yearSelected = output<D>();\n\n /**\n * Emits the month chosen in year view.\n * This doesn't imply a change on the selected date.\n */\n readonly monthSelected = output<D>();\n\n /** Emits when any date is selected. */\n readonly userSelection = output<void>();\n\n /** Reference to the current month view component. */\n readonly monthView = viewChild.required(KbqMonthView);\n\n /**\n * Emits whenever there is a state change that the header may need to respond to.\n */\n stateChanges = new Subject<void>();\n\n /** The input element this datepicker is associated with. */\n datepickerInput;\n\n /** Subscription to value changes in the associated input element. */\n private inputSubscription = Subscription.EMPTY;\n\n ngOnChanges(changes: SimpleChanges) {\n // A bound input is handed to its member; unbound, it leaves what code wrote. A\n // bound `undefined` is handed over too, as an unset date: a bound that becomes unset lifts its restriction.\n if (changes['minDateInput']) this.minDate = this.minDateInput() ?? null;\n\n if (changes['maxDateInput']) this.maxDate = this.maxDateInput() ?? null;\n\n if (changes['selectedInput']) this.selected = this.selectedInput() ?? null;\n\n // After the bounds, which `startAt` is clamped to.\n if (changes['startAtInput']) this.startAt = this.startAtInput() ?? null;\n\n const change = changes['minDateInput'] || changes['maxDateInput'] || changes['dateFilter'];\n\n if (change && !change.firstChange) {\n const monthView = this.monthView();\n\n if (monthView) {\n // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n // passed down to the view via data bindings which won't be up-to-date when we call `init`.\n this.changeDetectorRef.detectChanges();\n monthView.init();\n }\n }\n\n this.stateChanges.next();\n }\n\n ngAfterContentInit() {\n this.activeDate = this.getActiveDateDefault();\n }\n\n ngOnDestroy() {\n this.inputSubscription.unsubscribe();\n this.stateChanges.complete();\n }\n\n /**\n * Register an input with this calendar.\n *\n * @param input The calendar input to register with this calendar.\n */\n registerInput(input): void {\n if (this.datepickerInput) {\n throw Error('A KbqDatepicker can only be associated with a single input.');\n }\n\n this.datepickerInput = input;\n this.inputSubscription = this.datepickerInput.valueChange.subscribe((value: D | null) => {\n this.selected = value;\n\n this.monthView()?.init();\n this.activeDate = value as D;\n });\n }\n\n /** Updates today's date after an update of the active date */\n updateTodaysDate() {\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.monthView().ngAfterContentInit();\n }\n\n /** Handles date selection in the month view. */\n dateSelected(date: D): void {\n if (!this.adapter.sameDate(date, this.selected)) {\n this.selectedChange.emit(date);\n }\n }\n\n userSelected(): void {\n this.userSelection.emit();\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n // todo выглядит как костыль от которого нужно избавиться\n private getValidDateOrNull(obj: any): D | null {\n return this.adapter.isDateInstance(obj) && this.adapter.isValid(obj) ? obj : null;\n }\n\n private getActiveDateDefault(): D {\n return this.startAt || this.adapter.today();\n }\n}\n","<kbq-calendar-header\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [(activeDate)]=\"activeDate\"\n (monthSelected)=\"monthSelected.emit(activeDate)\"\n (yearSelected)=\"yearSelected.emit(activeDate)\"\n/>\n\n<div class=\"kbq-calendar__content\">\n <kbq-month-view\n [dateClass]=\"dateClass()\"\n [dateFilter]=\"dateFilter()\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [(activeDate)]=\"activeDate\"\n (selectedChange)=\"dateSelected($event!)\"\n (userSelection)=\"userSelected()\"\n />\n</div>\n","import {\n AfterContentInit,\n booleanAttribute,\n computed,\n Directive,\n DoCheck,\n effect,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n InjectionToken,\n input,\n linkedSignal,\n OnChanges,\n OnDestroy,\n output,\n Provider,\n Renderer2,\n signal,\n SimpleChanges,\n untracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormGroupDirective,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgForm,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n BACKSPACE,\n DateAdapter,\n DELETE,\n DOWN_ARROW,\n END,\n ErrorStateMatcher,\n ESCAPE,\n hasModifierKey,\n HOME,\n isHorizontalMovement,\n isLetterKey,\n isVerticalMovement,\n KBQ_DATE_FORMATS,\n KBQ_DATE_LOCALE,\n KBQ_DEFAULT_LOCALE_DATA_FACTORY,\n KbqDateFormats,\n KbqDatepickerLocaleConfiguration,\n KbqDateTimezoneService,\n KbqDeepPartial,\n KbqErrorStateTracker,\n kbqLocaleConfigurationOverrideProvider,\n KbqLocaleDataInput,\n KbqLocaleOverridesDirective,\n kbqRevealSelection,\n kbqSetSelectionRange,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n ruRULocaleData,\n SPACE,\n TAB,\n UP_ARROW,\n validationTooltipHideDelay,\n validationTooltipShowDelay\n} from '@koobiq/components/core';\nimport { KBQ_FORM_FIELD, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport type { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subscription } from 'rxjs';\nimport { KbqCalendar } from './calendar.component';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\nimport { KbqDatepicker } from './datepicker.component';\n\nenum DateParts {\n year = 'y',\n month = 'm',\n day = 'd'\n}\n\nexport const MAX_YEAR = 9999;\nconst YEAR_LENGTH = 4;\n\n/** Days in the longest month */\nconst MAX_DAYS_IN_MONTH = 31;\n\n/** A one- or two-digit year below it falls in the current century, any other in the previous one */\nconst SHORT_YEAR_PIVOT = 30;\n\n/** First year of the current century */\nconst CURRENT_CENTURY_START = 2000;\n\n/** First year of the previous century */\nconst PREVIOUS_CENTURY_START = 1900;\n\n/** Key of the error reported for text that is not a date */\nconst parseErrorKey = 'kbqDatepickerParse';\n\nclass DateDigit {\n maxDays = MAX_DAYS_IN_MONTH;\n maxMonth = 12;\n\n parse: (value: string) => number;\n\n constructor(\n public value: DateParts,\n public start: number,\n public length: number\n ) {\n if (value === DateParts.day) {\n this.parse = this.parseDay;\n } else if (value === DateParts.month) {\n this.parse = this.parseMonth;\n } else if (value === DateParts.year) {\n this.parse = this.parseYear;\n }\n }\n\n get end(): number {\n return this.start + this.length;\n }\n\n get isDay(): boolean {\n return this.value === DateParts.day;\n }\n\n get isMonth(): boolean {\n return this.value === DateParts.month;\n }\n\n get isYear(): boolean {\n return this.value === DateParts.year;\n }\n\n get fullName(): string {\n if (this.isDay) {\n return 'date';\n }\n\n if (this.isMonth) {\n return 'month';\n }\n\n if (this.isYear) {\n return 'year';\n }\n\n return '';\n }\n\n private parseDay(value: string): number {\n const parsedValue: number = parseInt(value);\n\n if (parsedValue === 0) {\n return 1;\n }\n\n if (parsedValue > this.maxDays) {\n return this.maxDays;\n }\n\n return parsedValue;\n }\n\n private parseMonth(value: string): number {\n const parsedValue: number = parseInt(value);\n\n if (parsedValue === 0) {\n return 1;\n }\n\n if (parsedValue > this.maxMonth) {\n return this.maxMonth;\n }\n\n return parsedValue;\n }\n\n private parseYear(value: string): number {\n const parsedValue: number = parseInt(value);\n\n if (parsedValue === 0) {\n return 1;\n }\n\n if (parsedValue > MAX_YEAR) {\n return parseInt(value.substring(0, YEAR_LENGTH));\n }\n\n return parsedValue;\n }\n}\n\n/** @docs-private */\nexport const KBQ_DATEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqDatepickerInput),\n multi: true\n};\n\n/** @docs-private */\nexport const KBQ_DATEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => KbqDatepickerInput),\n multi: true\n};\n\n/** default configuration of datepicker */\n/** @docs-private */\nexport const KBQ_DATEPICKER_DEFAULT_LOCALE_CONFIGURATION = ruRULocaleData.datepicker;\n\n/** The `datepicker` section of the shipped locale `localeId`, if the library ships one. */\nconst shippedDatepickerLocaleConfiguration = (localeId: string): KbqDatepickerLocaleConfiguration | undefined => {\n const shipped: KbqLocaleDataInput = KBQ_DEFAULT_LOCALE_DATA_FACTORY();\n const locale = shipped[localeId];\n\n // A shipped locale is complete, its sections included.\n return locale && !Array.isArray(locale) ? (locale.datepicker as KbqDatepickerLocaleConfiguration) : undefined;\n};\n\n/** The values of the token's own factory, told apart from strings an application provides for the token. */\nconst factoryDefaults = new WeakSet<KbqDatepickerLocaleConfiguration>();\n\n/** Injection Token for providing configuration of datepicker */\n/** @docs-private */\nexport const KBQ_DATEPICKER_LOCALE_CONFIGURATION = new InjectionToken<KbqDatepickerLocaleConfiguration>(\n 'KbqDatepickerLocaleConfiguration',\n {\n factory: () => {\n // A copy: the shipped section itself may also be provided on purpose.\n const configuration = {\n ...(shippedDatepickerLocaleConfiguration(inject(KBQ_DATE_LOCALE)) ??\n KBQ_DATEPICKER_DEFAULT_LOCALE_CONFIGURATION)\n };\n\n factoryDefaults.add(configuration);\n\n return configuration;\n }\n }\n);\n\n/** The default strings of one input. */\nconst KBQ_DATEPICKER_INPUT_LOCALE_CONFIGURATION = new InjectionToken<KbqDatepickerLocaleConfiguration>(\n 'KbqDatepickerInputLocaleConfiguration'\n);\n\n/**\n * Unless strings are provided for the token, those of the format the input parses: the token's own default resolves\n * in the root injector, which knows only the date locale of the application, not the date adapter of the input.\n */\nconst datepickerInputLocaleConfiguration = (): KbqDatepickerLocaleConfiguration => {\n const configuration = inject(KBQ_DATEPICKER_LOCALE_CONFIGURATION);\n const adapter = inject(DateAdapter, { optional: true });\n\n if (!factoryDefaults.has(configuration) || !adapter?.config) return configuration;\n\n const format: string = inject(KBQ_DATE_FORMATS, { optional: true })?.dateInput || adapter.config.dateInput;\n // The shipped placeholders name the locale's own format, lower-cased and translated.\n const shipped = format === adapter.config.dateInput && shippedDatepickerLocaleConfiguration(adapter.config.name);\n\n return shipped || { placeholder: format.toLowerCase() };\n};\n\n/**\n * Utility provider for `KBQ_DATEPICKER_LOCALE_CONFIGURATION`. Only the strings you pass are overridden; the rest\n * keep following the active locale.\n */\nexport const kbqDatepickerLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqDatepickerLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('datepicker', configuration);\n\n/** @deprecated Use {@link KBQ_DATEPICKER_DEFAULT_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_DATEPICKER_DEFAULT_CONFIGURATION = KBQ_DATEPICKER_DEFAULT_LOCALE_CONFIGURATION;\n/** @deprecated Use {@link KBQ_DATEPICKER_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_DATEPICKER_CONFIGURATION = KBQ_DATEPICKER_LOCALE_CONFIGURATION;\n\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use KbqDatepickerInputEvent instead.\n */\nexport class KbqDatepickerInputEvent<D> {\n /** The new value for the target datepicker input. */\n value: D | null;\n\n constructor(\n /** Reference to the datepicker input component that emitted the event. */\n public target: KbqDatepickerInput<D>,\n /** Reference to the native input element associated with the datepicker input. */\n public targetElement: HTMLElement\n ) {\n this.value = this.target.value();\n }\n}\n\nlet uniqueComponentIdSuffix = 0;\n\ninterface DateTimeObject {\n year: number;\n month: number;\n date: number;\n hours: number;\n minutes: number;\n seconds: number;\n milliseconds: number;\n}\n\n/** Directive used to connect an input to a KbqDatepicker. */\n@Directive({\n selector: 'input[kbqDatepicker], input[kbqCalendar]',\n providers: [\n KBQ_DATEPICKER_VALUE_ACCESSOR,\n KBQ_DATEPICKER_VALIDATORS,\n { provide: KbqFormFieldControl, useExisting: KbqDatepickerInput },\n { provide: KBQ_DATEPICKER_INPUT_LOCALE_CONFIGURATION, useFactory: datepickerInputLocaleConfiguration }\n ],\n host: {\n class: 'kbq-input kbq-datepicker',\n '[attr.id]': 'id()',\n '[attr.placeholder]': 'placeholder()',\n '[attr.required]': 'required() || null',\n '[attr.disabled]': 'disabled() || null',\n '[attr.min]': 'min ? toISO8601(min) : null',\n '[attr.max]': 'max ? toISO8601(max) : null',\n '[attr.autocomplete]': '\"off\"',\n '(paste)': 'onPaste($event)',\n '(drop)': 'onDrop($event)',\n '(dragstart)': 'draggingOwnText = true',\n '(dragend)': 'draggingOwnText = false',\n '(change)': 'onChange()',\n '(focus)': 'focusChanged(true)',\n '(blur)': 'onBlur()',\n '(keydown)': 'onKeyDown($event)'\n },\n // Covers the strings this input renders itself. The calendar is created through `<kbq-datepicker>`, a\n // sibling of this element rather than a descendant, so it carries its own — bind `[localeOverrides]`\n // there for the pop-up, or put a carrier on an element enclosing both.\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ],\n exportAs: 'kbqDatepickerInput'\n})\nexport class KbqDatepickerInput<D>\n implements KbqFormFieldControl<D>, ControlValueAccessor, Validator, OnChanges, OnDestroy, DoCheck, AfterContentInit\n{\n elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n readonly adapter: DateAdapter<D> = injectRequiredDateAdapter<D>();\n private readonly timezoneService = inject(KbqDateTimezoneService);\n private readonly dateFormats = inject<KbqDateFormats>(KBQ_DATE_FORMATS, { optional: true });\n /** @docs-private */\n protected readonly formField = inject(KBQ_FORM_FIELD, { optional: true, host: true });\n\n protected readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'datepicker',\n KBQ_DATEPICKER_INPUT_LOCALE_CONFIGURATION\n );\n\n private readonly errorStateTracker = new KbqErrorStateTracker(\n inject(ErrorStateMatcher),\n // update ngControl later, so it will be initialized\n null,\n inject(FormGroupDirective, { optional: true }),\n inject(NgForm, { optional: true })\n );\n\n /** Whether the input is in an error state. */\n readonly errorState = this.errorStateTracker.errorState;\n\n controlType: string = 'datepicker';\n\n private readonly focusedValue = signal(false);\n\n /** Whether the input has focus. */\n readonly focused = this.focusedValue.asReadonly();\n\n datepicker: KbqDatepicker<D>;\n calendar: KbqCalendar<D>;\n\n dateFilter: (date: D | null) => boolean;\n\n /** Emits when the value changes (either due to user input or programmatic change). */\n valueChange = new EventEmitter<D | null>();\n\n /** Emits when the disabled state has changed */\n disabledChange = new EventEmitter<boolean>();\n\n /** Object used to control when error messages are shown. */\n readonly errorStateMatcher = input<ErrorStateMatcher>();\n\n /** @docs-private */\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\n\n /** Placeholder of the input. Defaults to the localized date pattern. */\n readonly placeholder = computed(() => this.placeholderInput() || this.localeConfiguration().placeholder);\n\n /** Whether the input is required. */\n readonly required = input<boolean, boolean | string | null | undefined>(false, { transform: booleanAttribute });\n\n /** The datepicker that this input is associated with. */\n set kbqDatepicker(value: KbqDatepicker<D>) {\n if (!value) {\n return;\n }\n\n this.datepicker = value;\n this.datepicker.registerInput(this);\n this.datepickerSubscription.unsubscribe();\n\n this.datepickerSubscription = this.datepicker.selectedChanged.subscribe((selected: D) => {\n const newValue = this.saveTimePart(selected);\n\n this.setValue(newValue);\n this.cvaOnChange(newValue);\n this.onTouched();\n this.dateChange.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n });\n }\n\n /** The calendar that this input is associated with. */\n set kbqCalendar(value: KbqCalendar<D>) {\n if (!value) {\n return;\n }\n\n this.calendar = value;\n this.calendar.registerInput(this);\n }\n\n /** @docs-private */\n readonly kbqDatepickerInput = input<KbqDatepicker<D> | undefined>(undefined, { alias: 'kbqDatepicker' });\n\n /** @docs-private */\n readonly kbqCalendarInput = input<KbqCalendar<D> | undefined>(undefined, { alias: 'kbqCalendar' });\n\n /** Function that can be used to filter out dates within the datepicker. `undefined` removes the filter. */\n set kbqDatepickerFilter(value: ((date: D | null) => boolean) | undefined) {\n // `dateFilter` is unset until a filter is given; `undefined` returns it there.\n this.dateFilter = value!;\n this.validatorOnChange();\n }\n\n /** @docs-private */\n readonly kbqDatepickerFilterInput = input<((date: D | null) => boolean) | undefined>(undefined, {\n alias: 'kbqDatepickerFilter'\n });\n\n /** @docs-private */\n readonly valueInput = input<D | null | undefined>(undefined, { alias: 'value' });\n\n private readonly valueState = signal<D | null>(null);\n\n /** The date the input holds: set with `[value]`, by the form control, by typing and by the calendar. */\n readonly value = this.valueState.asReadonly();\n\n /**\n * The minimum valid date. Drives validation only — including dates typed or pasted into the\n * input — and reports `kbqDatepickerMin`. The calendar is restricted separately, by `minDate`\n * on the associated `<kbq-datepicker>`.\n *\n * Compared down to the millisecond, not by calendar day: the input keeps the time part of the\n * value it parses, and the comparison is made on wall-clock components rather than on absolute\n * time.\n */\n get min(): D | null {\n return this._min;\n }\n\n set min(value: D | null) {\n this._min = this.getValidDateOrNull(this.adapter.deserialize(value));\n this.validatorOnChange();\n }\n\n private _min: D | null;\n\n /**\n * The maximum valid date. Drives validation only — including dates typed or pasted into the\n * input — and reports `kbqDatepickerMax`. The calendar is restricted separately, by `maxDate`\n * on the associated `<kbq-datepicker>`.\n *\n * Compared down to the millisecond, not by calendar day: the input keeps the time part of the\n * value it parses, so an upper bound meant to include its whole day has to be the end of that\n * day.\n */\n get max(): D | null {\n return this._max;\n }\n\n set max(value: D | null) {\n this._max = this.getValidDateOrNull(this.adapter.deserialize(value));\n this.validatorOnChange();\n }\n\n private _max: D | null;\n\n /** @docs-private */\n readonly minInput = input<D | null | undefined>(undefined, { alias: 'min' });\n\n /** @docs-private */\n readonly maxInput = input<D | null | undefined>(undefined, { alias: 'max' });\n\n /** @docs-private */\n readonly disabledInput = input<boolean, boolean | string | null | undefined>(false, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** Whether the datepicker-input is disabled. Also set by the bound form control. */\n readonly disabled = linkedSignal(() => this.disabledInput());\n\n /** @docs-private */\n readonly idInput = input<string | undefined>(undefined, { alias: 'id' });\n\n /** Unique id of the element, generated when not provided. */\n readonly id = computed(() => this.idInput() || this.uid);\n\n set kbqValidationTooltip(tooltip: KbqTooltipTrigger) {\n if (!tooltip) {\n return;\n }\n\n tooltip.enterDelay = validationTooltipShowDelay;\n tooltip.trigger = 'manual';\n\n tooltip.initListeners();\n\n this.incorrectInput.subscribe(() => {\n if (tooltip.isOpen) {\n return;\n }\n\n tooltip.show();\n\n setTimeout(() => tooltip.hide(), validationTooltipHideDelay);\n });\n }\n\n /** @docs-private */\n readonly kbqValidationTooltipInput = input<KbqTooltipTrigger | undefined>(undefined, {\n alias: 'kbqValidationTooltip'\n });\n\n readonly incorrectInput = output<void>();\n\n /** Emits when a `change` event is fired on this `<input>`. */\n readonly dateChange = output<KbqDatepickerInputEvent<D>>();\n\n /** Emits when an `input` event is fired on this `<input>`. */\n readonly dateInput = output<KbqDatepickerInputEvent<D>>();\n\n private readonly emptyValue = signal(true);\n\n /** Whether the input renders no text. */\n readonly empty = this.emptyValue.asReadonly();\n\n get viewValue(): string {\n return this.elementRef.nativeElement.value;\n }\n\n get ngControl(): any {\n return this.control;\n }\n\n get isReadOnly(): boolean {\n return this.elementRef.nativeElement.readOnly;\n }\n\n get dateInputFormat(): string {\n return this.dateFormats?.dateInput || this.adapter.config.dateInput;\n }\n\n private get readyForParse(): boolean {\n return !!(this.firstDigit && this.secondDigit && this.thirdDigit);\n }\n\n private get selectionStart(): number | null {\n return this.elementRef.nativeElement.selectionStart;\n }\n\n private get selectionEnd(): number | null {\n return this.elementRef.nativeElement.selectionEnd;\n }\n\n private control: AbstractControl | undefined;\n private readonly uid = `kbq-datepicker-input-${uniqueComponentIdSuffix++}`;\n\n private datepickerSubscription = Subscription.EMPTY;\n\n /** Whether the last value set on the input was valid. */\n private lastValueValid = false;\n\n /**\n * Whether a drag started in this field, so that its drop here is the field's own text.\n *\n * @docs-private\n */\n protected draggingOwnText = false;\n\n /** The combined form control validator for this input. */\n private readonly validator: ValidatorFn | null;\n\n private separator: string;\n\n private firstDigit: DateDigit | null = null;\n private secondDigit: DateDigit | null = null;\n private thirdDigit: DateDigit | null = null;\n\n private separatorPositions: number[];\n\n /** Work the keys left to timers, in the order the timers run. */\n private readonly deferred = new Map<ReturnType<typeof setTimeout>, () => void>();\n\n constructor() {\n this.validator = Validators.compose([\n this.parseValidator,\n this.minValidator,\n this.maxValidator,\n this.filterValidator\n ]);\n\n this.setFormat(this.dateInputFormat);\n\n // A bound value is applied whenever the binding changes; an unbound one leaves the value to the form.\n let bound = false;\n\n effect(() => {\n const value = this.valueInput();\n\n if (!bound && value === undefined) return;\n\n bound = true;\n\n untracked(() => this.setValue(value ?? null));\n });\n\n let wasDisabled = false;\n\n effect(() => {\n const disabled = this.disabled();\n\n untracked(() => {\n if (disabled !== wasDisabled) {\n wasDisabled = disabled;\n this.disabledChange.emit(disabled);\n }\n\n const element = this.elementRef.nativeElement;\n\n // We need to null check the `blur` method, because it's undefined during SSR.\n if (disabled && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n });\n });\n\n let isFirstRun = true;\n\n effect(() => {\n this.localeConfiguration();\n\n // Nothing to re-format on the first run: `setFormat` above already ran against the active\n // locale, while re-assigning `value` here would emit `valueChange` at a point where the\n // datepicker and the calendar are already subscribed to it.\n if (isFirstRun) {\n isFirstRun = false;\n\n return;\n }\n\n // The date adapter follows the same locale, so its input format may have changed with it: the\n // digit layout has to be re-derived and the rendered value re-formatted.\n // Only a complete value is re-rendered: with none, the text is the user's, and `''` written over it\n // would leave the form with an error about text that is gone.\n untracked(() => {\n this.setFormat(this.dateInputFormat);\n\n const value = this.valueState();\n\n if (value) this.setValue(value);\n });\n });\n\n this.timezoneService.changes.pipe(takeUntilDestroyed()).subscribe(() => {\n // The rendered text names a wall clock in the zone it was formatted in. Left as it is, the\n // next keystroke re-parses it against the new zone and emits a different instant. Only a\n // complete value, as above.\n const value = this.valueState();\n\n if (value) this.setValue(value);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n // Not in an effect, which runs too late: `min`, `max` and the filter revalidate the form control before the\n // template reads its errors.\n if (changes['kbqDatepickerInput']) {\n const datepicker = this.kbqDatepickerInput();\n\n if (datepicker !== undefined) this.kbqDatepicker = datepicker;\n }\n\n if (changes['kbqCalendarInput']) {\n const calendar = this.kbqCalendarInput();\n\n if (calendar !== undefined) this.kbqCalendar = calendar;\n }\n\n // A bound `undefined` is handed over too: it removes the filter.\n if (changes['kbqDatepickerFilterInput']) this.kbqDatepickerFilter = this.kbqDatepickerFilterInput();\n\n if (changes['minInput']) this.min = this.minInput() ?? null;\n\n if (changes['maxInput']) this.max = this.maxInput() ?? null;\n\n if (changes['kbqValidationTooltipInput']) {\n const tooltip = this.kbqValidationTooltipInput();\n\n if (tooltip !== undefined) this.kbqValidationTooltip = tooltip;\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n // The browser changes the rendered text without notice as the user types; `setViewValue()` covers the rest.\n this.emptyValue.set(this.isEmpty());\n }\n\n onContainerClick() {\n this.focus();\n }\n\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n focusChanged(isFocused: boolean): void {\n if (isFocused !== this.focused()) {\n this.focusedValue.set(isFocused);\n this.onTouched();\n }\n }\n\n /**\n * Called when the control is blurred. Needed to properly implement `ControlValueAccessor`.\n *\n * @docs-private\n */\n onTouched = () => {};\n\n ngAfterContentInit() {\n this.updateErrorState();\n }\n\n ngOnDestroy() {\n this.datepickerSubscription.unsubscribe();\n this.valueChange.complete();\n this.disabledChange.complete();\n }\n\n /** @docs-private */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n /** @docs-private */\n validate(control: AbstractControl): ValidationErrors | null {\n this.setControl(control);\n\n // Untracked, as `writeValue()`: a form control set from a consumer's `effect()` writes and validates on the\n // spot, and the state read on the way — `focused`, the value — would make the effect run again.\n return this.validator ? untracked(() => this.validator!(control)) : null;\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: D): void {\n untracked(() => this.setValue(value));\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void): void {\n this.cvaOnChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.isReadOnly) {\n return;\n }\n\n // Keys from a scanner, an autotype or a busy page arrive before the timers the previous ones set. Run that\n // work first, so that each key acts on the value and selection a slower typist's would.\n this.runDeferred();\n\n const keyCode = event.keyCode;\n\n if (this.isLetterKey(event)) {\n event.preventDefault();\n\n this.incorrectInput.emit();\n } else if (this.isKeyForOpen(event)) {\n event.preventDefault();\n\n this.datepicker?.open();\n } else if (this.isKeyForClose(event)) {\n // Consumed only when there is a calendar to close, so a dialog around the input still takes the key.\n if (!this.datepicker?.opened) return;\n\n event.preventDefault();\n\n this.datepicker.close();\n } else if (keyCode === TAB) {\n this.datepicker?.close(false);\n } else if (this.isKeyForByPass(event)) {\n return;\n } else if (keyCode === SPACE) {\n this.spaceKeyHandler(event);\n } else if ([UP_ARROW, DOWN_ARROW].includes(keyCode)) {\n event.preventDefault();\n\n this.verticalArrowKeyHandler(keyCode);\n } else if ([LEFT_ARROW, RIGHT_ARROW, HOME, PAGE_UP, END, PAGE_DOWN].includes(keyCode)) {\n event.preventDefault();\n\n this.changeCaretPosition(keyCode);\n } else if (/^\\D$/.test(event.key)) {\n event.preventDefault();\n\n const newValue = this.getNewValue(event.key, this.selectionStart as number);\n const formattedValue = this.replaceSymbols(newValue);\n\n if (newValue !== formattedValue) {\n this.setViewValue(formattedValue, true);\n\n this.defer(this.onInput);\n } else {\n this.incorrectInput.emit();\n }\n } else {\n this.defer(this.onInput);\n }\n }\n\n onInput = () => {\n if (!this.readViewValue() && this.viewValue) {\n this.control?.updateValueAndValidity();\n }\n };\n\n parseOnBlur = (): any => {\n if (!this.viewValue || !this.readyForParse) {\n return null;\n }\n\n const date: DateTimeObject = this.getDefaultValue();\n\n const viewDigits: string[] = this.viewValue\n .split(this.separator)\n .map((value: string) => value)\n .filter((value) => value);\n\n const [firsViewDigit, secondViewDigit, thirdViewDigit] = viewDigits;\n\n // A text that fails here is reported by `onBlur()` unless the next parse takes it.\n if (viewDigits.length !== 3) {\n this.lastValueValid = false;\n this.valueState.set(null);\n\n return null;\n }\n\n date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n date[this.thirdDigit!.fullName] = this.thirdDigit!.parse(thirdViewDigit);\n\n const [digitWithYear, viewDigitWithYear] = [this.firstDigit, this.secondDigit, this.thirdDigit].reduce(\n (acc: any, digit, index) => (digit!.value === DateParts.year ? [digit, viewDigits[index]] : acc),\n []\n );\n\n if (viewDigitWithYear.length < 3) {\n // From the text rather than `date.year`: the year part reads `00` as 1.\n date.year = this.expandShortYear(parseInt(viewDigitWithYear));\n } else if (viewDigitWithYear.length < digitWithYear.length) {\n this.lastValueValid = false;\n this.valueState.set(null);\n\n return null;\n }\n\n const newTimeObj = this.createDateTime(date);\n\n if (!newTimeObj) {\n this.lastValueValid = false;\n this.valueState.set(null);\n\n return null;\n }\n\n /* Check if the number of days entered does not match the entered month */\n if (!this.getValidDateOrNull(newTimeObj)) {\n return null;\n }\n\n this.lastValueValid = !!newTimeObj;\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat), true);\n\n this.updateValue(newTimeObj);\n };\n\n onChange() {\n setTimeout(() => {\n this.dateChange.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n });\n }\n\n /** Handles blur events on the input. */\n onBlur() {\n const wasFocused = this.focused();\n const reportedText = this.control?.getError(parseErrorKey)?.text ?? '';\n\n // `focused` goes first, as the validators read it, and `onTouched` last: it is what commits the\n // value of a control with `updateOn: 'blur'`, and whatever is emitted after it waits for the next blur.\n this.focusedValue.set(false);\n\n // A text the form already knows is not a date: parsing it again would only restart its async validators.\n if (!reportedText || reportedText !== this.viewValue) {\n this.parseOnBlur();\n this.readViewValue();\n\n // Text that is not a date reaches the element without a keydown: an undo, an IME, autofill.\n if (!this.lastValueValid && this.viewValue) {\n this.valueState.set(null);\n this.cvaOnChange(null);\n }\n }\n\n if (wasFocused) this.onTouched();\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n\n if (this.isReadOnly) return;\n\n this.replaceText(event.clipboardData?.getData('text') ?? '');\n }\n\n /**\n * Takes dropped text the way a paste is taken. The browser would insert it at the pointer, with no event\n * the parsing listens to.\n *\n * @docs-private\n */\n protected onDrop(event: DragEvent): void {\n event.preventDefault();\n\n // A part dragged within the field would be read as the whole date. A disabled or read-only field is only\n // reached when an ancestor accepts the drop.\n if (this.draggingOwnText || this.disabled() || this.isReadOnly) return;\n\n this.focus();\n // Not left to the focus: a window that is not active, where a drag from another one ends, fires none.\n this.onTouched();\n\n this.replaceText(event.dataTransfer?.getData('text') ?? '');\n }\n\n toISO8601(value: D): string {\n return this.adapter.toIso8601(value);\n }\n\n /** Refreshes the error state of the input. */\n updateErrorState() {\n this.errorStateTracker.errorStateMatcher = this.errorStateMatcher();\n this.errorStateTracker.updateErrorState();\n }\n\n /** Returns the ElementRef of the formField if it exists; otherwise, returns the ElementRef of the input. */\n getOrigin(): ElementRef {\n return this.formField ? this.formField.getConnectedOverlayOrigin() : this.elementRef;\n }\n\n /** Parses the rendered text as typing does, taking the date it holds. Returns whether there was one. */\n private readViewValue(): boolean {\n const cursorPosition = this.correctedCursorPosition();\n const newTimeObj = this.getDateFromString(this.replaceSymbols(this.viewValue));\n\n this.lastValueValid = !!newTimeObj;\n\n if (!newTimeObj) {\n if (!this.viewValue) {\n this.updateValue(null as D);\n }\n\n return false;\n }\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat), true);\n\n this.selectNextDigitByCursor(cursorPosition);\n\n this.updateValue(newTimeObj);\n\n return true;\n }\n\n /** Takes a pasted or dropped text as the whole value; one that is not a date is rejected as a letter key is. */\n private replaceText(text: string): void {\n // Punctuation around the date comes along when it is copied out of a sentence or brackets.\n const newTimeObj = this.readPastedDate(text.replace(/^[^\\p{L}\\d]+|[^\\p{L}\\d]+$/gu, ''));\n\n if (!newTimeObj) {\n if (text.trim()) this.incorrectInput.emit();\n\n return;\n }\n\n this.lastValueValid = true;\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat));\n\n this.updateValue(newTimeObj);\n }\n\n /**\n * Reads the parts of the format, in its order, from two or three groups of digits split by anything but a\n * letter. A short day or month is padded and a short year expanded as blur does; a group longer than its\n * part, such as the year of an ISO date, makes the text not a date.\n */\n private readPastedDate(text: string): D | null {\n if (!this.readyForParse || !/^\\d+(?:[^\\p{L}\\d]+\\d+){1,2}$/u.test(text)) return null;\n\n const digits = [this.firstDigit!, this.secondDigit!, this.thirdDigit!];\n const parts: string[] = [];\n\n for (const [index, part] of text.split(/[^\\p{L}\\d]+/u).entries()) {\n const digit = digits[index];\n\n if (part.length > digit.length) return null;\n\n if (!digit.isYear) {\n parts.push(part.padStart(digit.length, '0'));\n } else if (part.length === digit.length) {\n parts.push(part);\n } else if (part.length <= 2) {\n parts.push(`${this.expandShortYear(parseInt(part))}`);\n } else {\n return null;\n }\n }\n\n return this.getDateFromString(parts.join(this.separator));\n }\n\n /** A year of one or two digits as a full one. */\n private expandShortYear(year: number): number {\n return year + (year < SHORT_YEAR_PIVOT ? CURRENT_CENTURY_START : PREVIOUS_CENTURY_START);\n }\n\n private saveTimePart(selected: D) {\n const value = this.value();\n\n if (!value) {\n return selected;\n }\n\n const years = this.adapter.getYear(selected);\n const month = this.adapter.getMonth(selected);\n const day = this.adapter.getDate(selected);\n\n const hours = this.adapter.getHours(value);\n const minutes = this.adapter.getMinutes(value);\n const seconds = this.adapter.getSeconds(value);\n const milliseconds = this.adapter.getMilliseconds(value);\n\n return this.adapter.createDateTime(years, month, day, hours, minutes, seconds, milliseconds);\n }\n\n private setFormat(format: string): void {\n // `[a-zA-Z]`, not `[aA-zZ]`: the latter reads as `a`, the range `A-z` and `Z`, and that range\n // takes in the six characters ASCII puts between the two alphabets — opening bracket,\n // backslash, closing bracket, caret, underscore and backtick. A format escaping a literal in\n // brackets could therefore have had that bracket counted as part of a placeholder.\n this.separator = format.match(/[a-zA-Z]+(?<separator>\\W|\\D)[a-zA-Z]+/)!.groups!.separator;\n\n this.separatorPositions = format\n .split('')\n .reduce((acc: any, item, index: number) => (this.separator === item ? [...acc, index + 1] : acc), []);\n\n this.getDigitPositions(format);\n }\n\n /** Takes a value from any source, re-rendering the element with it. */\n private setValue(value: D | null): void {\n let newValue = this.adapter.deserialize(value);\n\n this.lastValueValid = !newValue || this.adapter.isValid(newValue);\n\n newValue = this.getValidDateOrNull(newValue);\n\n const oldDate = this.valueState();\n\n this.valueState.set(newValue);\n this.formatValue(newValue);\n\n if (!this.adapter.sameDate(oldDate, newValue)) {\n this.valueChange.emit(newValue);\n }\n }\n\n private updateValue(newValue: D) {\n if (!this.adapter.sameDate(newValue, this.value())) {\n this.valueState.set(newValue);\n this.cvaOnChange(newValue);\n this.valueChange.emit(newValue);\n this.dateInput.emit(new KbqDatepickerInputEvent(this, this.elementRef.nativeElement));\n }\n\n this.control?.updateValueAndValidity({ emitEvent: false });\n }\n\n private isKeyForClose(event: KeyboardEvent): boolean {\n return (event.altKey && event.keyCode === UP_ARROW) || event.keyCode === ESCAPE;\n }\n\n private isKeyForOpen(event: KeyboardEvent): boolean {\n return event.altKey && event.keyCode === DOWN_ARROW;\n }\n\n private isLetterKey(event: KeyboardEvent): boolean {\n return isLetterKey(event) && !event.ctrlKey && !event.metaKey;\n }\n\n private isKeyForByPass(event: KeyboardEvent): boolean {\n return (\n (hasModifierKey(event) && (isVerticalMovement(event) || isHorizontalMovement(event))) ||\n event.ctrlKey ||\n event.metaKey ||\n [DELETE, BACKSPACE, TAB].includes(event.keyCode)\n );\n }\n\n private spaceKeyHandler(event: KeyboardEvent) {\n event.preventDefault();\n\n const position = this.selectionStart as number;\n\n // Right after a separator the digit group is empty, so a space cannot stand in for one:\n // advance instead of inserting a character the value can never be parsed with.\n if (this.selectionStart !== this.selectionEnd || this.separatorPositions.includes(position)) {\n this.selectNextDigit(position, true);\n\n return;\n }\n\n this.setViewValue(this.getNewValue(event.key, position));\n\n this.defer(this.onInput);\n }\n\n private getNewValue(key: string, position: number) {\n return [this.viewValue.slice(0, position), key, this.viewValue.slice(position)].join('');\n }\n\n private setViewValue(value: string, savePosition: boolean = false) {\n const element = this.elementRef.nativeElement;\n const selectionStart = this.selectionStart ?? 0;\n const selectionEnd = this.selectionEnd ?? 0;\n\n this.renderer.setProperty(element, 'value', value);\n // Right away: a form or a `[value]` binding writes after `ngDoCheck()` has run.\n this.emptyValue.set(this.isEmpty());\n\n if (savePosition) {\n this.setSelection(selectionStart, selectionEnd);\n } else {\n // A paste, a model write or a calendar pick replaces the whole value, and the offset the\n // previous one was left at has to go with it.\n kbqRevealSelection(element);\n }\n }\n\n private setSelection(start: number, end: number): void {\n kbqSetSelectionRange(this.elementRef.nativeElement, start, end);\n }\n\n private replaceSymbols(value: string): string {\n return value\n .split(this.separator)\n .map((part: string) => part.replace(/^([0-9]+)\\W$/, '0$1'))\n .join(this.separator);\n }\n\n private getDateFromString(timeString: string): D | null {\n if (!timeString || timeString.length < this.firstDigit!.length) {\n return null;\n }\n\n const date = this.getDefaultValue();\n\n const viewDigits: string[] = timeString.split(this.separator).map((value: string) => value);\n\n const [firsViewDigit, secondViewDigit, thirdViewDigit] = viewDigits;\n\n if (viewDigits.length === 1) {\n if (/\\D/.test(firsViewDigit) || firsViewDigit.length < this.firstDigit!.length) {\n return null;\n }\n\n date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n\n if (this.firstDigit!.isDay) {\n date.month = 1;\n }\n } else if (viewDigits.length === 2) {\n if (firsViewDigit.length < this.firstDigit!.length || secondViewDigit.length < this.secondDigit!.length) {\n return null;\n }\n\n date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n } else if (viewDigits.length === 3) {\n if (\n firsViewDigit.length < this.firstDigit!.length ||\n secondViewDigit.length < this.secondDigit!.length ||\n thirdViewDigit.length < this.thirdDigit!.length\n ) {\n return null;\n }\n\n const digitViewValue: { date?: number; month?: number; year?: number } = {};\n const dateDigits = [this.firstDigit, this.secondDigit, this.thirdDigit];\n\n for (const [index, dateDigit] of dateDigits.entries()) {\n digitViewValue[dateDigit!.fullName] = parseInt(viewDigits[index]);\n }\n\n const { month, year } = digitViewValue;\n // Set on every parse: a limit left by an earlier date would cut the day of this one.\n const maxDays =\n month && month <= this.firstDigit!.maxMonth && !isNaN(year as number)\n ? this.getLastDayFor(year as number, month - 1)\n : MAX_DAYS_IN_MONTH;\n\n dateDigits.forEach((digit) => (digit!.maxDays = maxDays));\n\n date[this.firstDigit!.fullName] = this.firstDigit!.parse(firsViewDigit);\n date[this.secondDigit!.fullName] = this.secondDigit!.parse(secondViewDigit);\n date[this.thirdDigit!.fullName] = this.thirdDigit!.parse(thirdViewDigit);\n } else {\n return null;\n }\n\n return this.getValidDateOrNull(this.createDateTime(date));\n }\n\n private getDefaultValue(): DateTimeObject {\n const defaultValue = this.value() || this.adapter.today();\n\n return {\n year: this.adapter.getYear(defaultValue),\n month: this.adapter.getMonth(defaultValue),\n date: this.adapter.getDate(defaultValue),\n hours: this.adapter.getHours(defaultValue),\n minutes: this.adapter.getMinutes(defaultValue),\n seconds: this.adapter.getSeconds(defaultValue),\n milliseconds: this.adapter.getMilliseconds(defaultValue)\n };\n }\n\n private getTimeStringFromDate(value: D | null, timeFormat: string): string {\n if (!value || !this.adapter.isValid(value)) {\n return '';\n }\n\n return this.adapter.format(value, timeFormat);\n }\n\n private getDateEditMetrics(\n cursorPosition: number\n ): [modifiedTimePart: DateParts, cursorStartPosition: number, cursorEndPosition: number] {\n for (const digit of [this.firstDigit, this.secondDigit, this.thirdDigit]) {\n if (cursorPosition >= digit!.start && cursorPosition <= digit!.end) {\n return [digit!.value, digit!.start, digit!.end];\n }\n }\n\n return [this.thirdDigit!.value, this.thirdDigit!.start, this.thirdDigit!.end];\n }\n\n private isMaxMonth(date: D): boolean {\n return this.adapter.getMonth(date) === this.getMaxMonth(date);\n }\n\n private isMinMonth(date: D): boolean {\n return this.adapter.getMonth(date) === this.getMinMonth(date);\n }\n\n private isMaxYear(date: D): boolean {\n return this.adapter.getYear(date) === this.getMaxYear();\n }\n\n private isMinYear(date: D): boolean {\n return this.adapter.getYear(date) === this.getMinYear();\n }\n\n private getMaxDate(date: D): number {\n const maxDate = this.datepicker?.maxDate();\n\n if (maxDate && this.isMaxYear(date) && this.isMaxMonth(date)) {\n return this.adapter.getDate(maxDate);\n }\n\n return this.adapter.getNumDaysInMonth(date);\n }\n\n private getMinDate(date: D): number {\n const minDate = this.datepicker?.minDate();\n\n if (minDate && this.isMinYear(date) && this.isMinMonth(date)) {\n return this.adapter.getDate(minDate);\n }\n\n return 1;\n }\n\n private getMaxMonth(date: D): number {\n const maxDate = this.datepicker?.maxDate();\n\n if (maxDate && this.isMaxYear(date)) {\n return this.adapter.getMonth(maxDate);\n }\n\n return 11;\n }\n\n private getMinMonth(date: D): number {\n const minDate = this.datepicker?.minDate();\n\n if (minDate && this.isMinYear(date)) {\n return this.adapter.getMonth(minDate);\n }\n\n return 0;\n }\n\n private getMaxYear(): number {\n const maxDate = this.datepicker?.maxDate();\n\n if (maxDate) {\n return this.adapter.getYear(maxDate);\n }\n\n return MAX_YEAR;\n }\n\n private getMinYear(): number {\n const minDate = this.datepicker?.minDate();\n\n if (minDate) {\n return this.adapter.getYear(minDate);\n }\n\n return 1;\n }\n\n private incrementDate(date: D, whatToIncrement: DateParts): D {\n let year = this.adapter.getYear(date);\n let month = this.adapter.getMonth(date);\n let day = this.adapter.getDate(date);\n\n switch (whatToIncrement) {\n case DateParts.day:\n day++;\n\n if (day > this.getMaxDate(date)) {\n if (this.isMaxYear(date) && this.isMaxMonth(date)) {\n day = this.getMaxDate(date);\n } else if (this.isMinYear(date) && this.isMinMonth(date)) {\n day = this.getMinDate(date);\n } else {\n day = 1;\n }\n }\n\n break;\n case DateParts.month: {\n month++;\n\n if (month > this.getMaxMonth(date)) {\n if (this.isMaxYear(date)) {\n month = this.getMaxMonth(date);\n } else if (this.isMinYear(date)) {\n month = this.getMinMonth(date);\n } else {\n month = 0;\n }\n }\n\n const lastDay = this.getLastDayFor(year, month);\n\n if (day > lastDay) {\n day = lastDay;\n }\n\n break;\n }\n case DateParts.year:\n year++;\n\n if (year > this.getMaxYear()) {\n year = this.getMaxYear();\n }\n\n break;\n default:\n }\n\n return this.createDate(year, month, day);\n }\n\n private getLastDayFor(year: number, month: number): number {\n // The adapter's own date: the input's one takes the time of the value, and there may be none.\n return this.adapter.getNumDaysInMonth(this.adapter.createDate(year, month, 1));\n }\n\n private decrementDate(date: D, whatToDecrement: DateParts): D {\n let year = this.adapter.getYear(date);\n let month = this.adapter.getMonth(date);\n let day = this.adapter.getDate(date);\n\n switch (whatToDecrement) {\n case DateParts.day:\n day--;\n\n if (day < this.getMinDate(date)) {\n if (this.isMinYear(date) && this.isMinMonth(date)) {\n day = this.getMinDate(date);\n } else if (this.isMaxYear(date) && this.isMaxMonth(date)) {\n day = this.getMaxDate(date);\n } else {\n day = this.adapter.getNumDaysInMonth(date);\n }\n }\n\n break;\n case DateParts.month: {\n month--;\n\n if (month < this.getMinMonth(date)) {\n if (year === this.getMinYear()) {\n month = this.getMinMonth(date);\n } else if (this.isMaxYear(date)) {\n month = this.getMaxMonth(date);\n } else {\n month = 11;\n }\n }\n\n const lastDay = this.getLastDayFor(year, month);\n\n if (day > lastDay) {\n day = lastDay;\n }\n\n break;\n }\n case DateParts.year:\n year--;\n\n if (year < this.getMinYear()) {\n year = this.getMinYear();\n }\n\n break;\n default:\n }\n\n return this.createDate(year, month, day);\n }\n\n private verticalArrowKeyHandler(keyCode: number): void {\n const value = this.value();\n\n if (!value) {\n return;\n }\n\n let changedTime;\n\n const [modifiedTimePart, selectionStart, selectionEnd] = this.getDateEditMetrics(this.selectionStart as number);\n\n if (keyCode === UP_ARROW) {\n changedTime = this.incrementDate(value, modifiedTimePart);\n }\n\n if (keyCode === DOWN_ARROW) {\n changedTime = this.decrementDate(value, modifiedTimePart);\n }\n\n this.setValue(changedTime);\n\n this.setSelection(selectionStart, selectionEnd);\n\n this.cvaOnChange(changedTime);\n\n this.onChange();\n }\n\n private changeCaretPosition(keyCode: number): void {\n if (!this.value()) {\n return;\n }\n\n let cursorPos = this.selectionStart as number;\n\n if ([HOME, PAGE_UP].includes(keyCode)) {\n cursorPos = 0;\n } else if ([END, PAGE_DOWN].includes(keyCode)) {\n cursorPos = this.viewValue.length;\n } else if (keyCode === LEFT_ARROW) {\n this.fixEmptyDigit();\n\n cursorPos = cursorPos === 0 ? this.viewValue.length : cursorPos - 1;\n } else if (keyCode === RIGHT_ARROW) {\n this.fixEmptyDigit();\n\n const nextSeparatorPos: number = this.viewValue.indexOf(this.separator, cursorPos);\n\n cursorPos = nextSeparatorPos ? nextSeparatorPos + 1 : 0;\n }\n\n this.selectDigitByCursor(cursorPos);\n }\n\n private fixEmptyDigit() {\n const hasEmptyDigit = this.viewValue\n .split(this.separator)\n .map((part) => part.length)\n .some((item) => !item);\n\n const value = this.value();\n\n if (hasEmptyDigit && value) {\n const year = this.adapter.getYear(value);\n const month = this.adapter.getMonth(value);\n const day = this.adapter.getDate(value);\n\n this.setValue(this.createDate(year, month, day));\n }\n }\n\n private selectDigitByCursor(cursorPos: number): void {\n this.defer(() => {\n const [, selectionStart, selectionEnd] = this.getDateEditMetrics(cursorPos);\n\n this.setSelection(selectionStart, selectionEnd);\n });\n }\n\n private selectNextDigitByCursor(cursorPos: number): void {\n this.defer(() => {\n const [, , endPositionOfCurrentDigit] = this.getDateEditMetrics(cursorPos);\n const [, selectionStart, selectionEnd] = this.getDateEditMetrics(endPositionOfCurrentDigit + 1);\n\n this.setSelection(selectionStart, selectionEnd);\n });\n }\n\n private selectNextDigit(cursorPos: number, cycle: boolean = false): void {\n this.defer(() => {\n const lastValue = cycle ? 0 : cursorPos;\n const nextSeparatorPos: number = this.viewValue.indexOf(this.separator, cursorPos);\n\n const newCursorPos = nextSeparatorPos > 0 ? nextSeparatorPos + 1 : lastValue;\n\n const [, selectionStart, selectionEnd] = this.getDateEditMetrics(newCursorPos);\n\n this.setSelection(selectionStart, selectionEnd);\n });\n }\n\n /** Runs `work` on a timer, or earlier if the next key comes first. */\n private defer(work: () => void): void {\n const timer = setTimeout(() => {\n this.deferred.delete(timer);\n work();\n });\n\n this.deferred.set(timer, work);\n }\n\n /** Runs the work still waiting for its timer, including what that work defers in turn. */\n private runDeferred(): void {\n // A Map iteration also visits the entries added during it.\n for (const [timer, work] of this.deferred) {\n clearTimeout(timer);\n this.deferred.delete(timer);\n work();\n }\n }\n\n /** Checks whether the input is invalid based on the native validation. */\n private isBadInput(): boolean {\n const validity = (<HTMLInputElement>this.elementRef.nativeElement).validity;\n\n return validity && validity.badInput;\n }\n\n /** Whether the input renders no text, read from the element rather than from the last change detection. */\n private isEmpty(): boolean {\n return !this.viewValue && !this.isBadInput();\n }\n\n private cvaOnChange: (value: any) => void = () => {};\n\n private validatorOnChange = () => {};\n\n /** The form control validator for whether the input parses. */\n private parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this.focused() || this.isEmpty() || this.lastValueValid\n ? null\n : { [parseErrorKey]: { text: this.elementRef.nativeElement.value } };\n };\n\n /** The form control validator for the min date. */\n private minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n // An unparseable value compares as NaN against any bound, which fails both `<= 0` and\n // `>= 0` and would report the value as simultaneously too early and too late.\n const controlValue = this.getValidDateOrNull(this.adapter.deserialize(control.value));\n\n return !this.min || !controlValue || this.adapter.compareDateTime(this.min, controlValue) <= 0\n ? null\n : { kbqDatepickerMin: { min: this.min, actual: controlValue } };\n };\n\n /** The form control validator for the max date. */\n private maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this.getValidDateOrNull(this.adapter.deserialize(control.value));\n\n return !this.max || !controlValue || this.adapter.compareDateTime(this.max, controlValue) >= 0\n ? null\n : { kbqDatepickerMax: { max: this.max, actual: controlValue } };\n };\n\n /** The form control validator for the date filter. */\n private filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this.adapter.deserialize(control.value);\n\n return !this.dateFilter || !controlValue || this.dateFilter(controlValue)\n ? null\n : { kbqDatepickerFilter: true };\n };\n\n /** Formats a value and sets it on the input element. */\n private formatValue(value: D | null) {\n const formattedValue = value ? this.adapter.format(value, this.dateInputFormat) : '';\n\n this.setViewValue(formattedValue);\n }\n\n private setControl(control: AbstractControl) {\n if (this.control) {\n return;\n }\n\n this.control = control;\n\n this.control.valueChanges.subscribe((value) => this.valueState.set(value));\n\n // @TODO resolve types\n this.errorStateTracker.ngControl = { control } as unknown as NgControl;\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n private getValidDateOrNull(obj: any): D | null {\n return this.adapter.isDateInstance(obj) && this.adapter.isValid(obj) ? obj : null;\n }\n\n private getDigitPositions(format: string) {\n this.firstDigit = this.secondDigit = this.thirdDigit = null;\n\n const formatInLowerCase = format.toLowerCase();\n\n formatInLowerCase.split('').reduce(\n ({ prev, length, start }: any, value: string, index: number, arr) => {\n if (value === this.separator || arr.length - 1 === index) {\n if (!this.firstDigit) {\n this.firstDigit = new DateDigit(prev, start, length);\n } else if (!this.secondDigit) {\n this.secondDigit = new DateDigit(prev, start, length);\n } else if (!this.thirdDigit) {\n this.thirdDigit = new DateDigit(prev, start, arr.length - start);\n }\n\n length = 0;\n start = index + 1;\n } else {\n length++;\n }\n\n return { prev: value, length, start };\n },\n { length: 0, start: 0 }\n );\n\n if (!this.firstDigit || !this.secondDigit || !this.thirdDigit) {\n Error(`Can' t use this format: ${format}`);\n }\n }\n\n private createDate(year: number, month: number, day: number): D {\n return this.adapter.createDateTime(\n year,\n month,\n day,\n this.adapter.getHours(this.value() as D),\n this.adapter.getMinutes(this.value() as D),\n this.adapter.getSeconds(this.value() as D),\n this.adapter.getMilliseconds(this.value() as D)\n );\n }\n\n private createDateTime(value: DateTimeObject): D | null {\n if (Object.values(value).some(isNaN)) {\n return null;\n }\n\n return this.adapter.createDateTime(\n value.year,\n value.month - 1,\n value.date,\n value.hours,\n value.minutes,\n value.seconds,\n value.milliseconds\n );\n }\n\n // The position to advance from, with a caret that landed just past a separator pulled back onto\n // the digit before it. Returned rather than applied to the field: on the paths where the value\n // cannot be parsed, a moved caret would survive into the next keystroke and change what it does.\n private correctedCursorPosition(): number {\n const position = this.selectionStart ?? 0;\n\n return this.separatorPositions.includes(position) ? position - 1 : position;\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n Directive,\n input,\n OnChanges,\n signal,\n SimpleChanges,\n untracked,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputToObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { KbqSiblingPopup, kbqSiblingPopupProvider } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { merge, Observable } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { KbqDatepicker } from './datepicker.component';\n\n/** Can be used to override the icon of a `kbqDatepickerToggle`. */\n@Directive({\n selector: '[kbqDatepickerToggleIcon]'\n})\nexport class KbqDatepickerToggleIcon {}\n\n@Component({\n selector: 'kbq-datepicker-toggle-icon',\n imports: [KbqIconModule],\n template: `\n <ng-content select=\"[kbqDatepickerToggleIcon]\">\n <i\n color=\"contrast-fade\"\n aria-hidden=\"true\"\n kbq-icon-button=\"kbq-calendar-o_16\"\n [tabindex]=\"-1\"\n [class.kbq-active]=\"datepicker() && datepicker().opened\"\n [disabled]=\"disabled\"\n [autoColor]=\"true\"\n ></i>\n </ng-content>\n `,\n styleUrls: ['./datepicker-toggle.scss'],\n providers: [kbqSiblingPopupProvider(KbqDatepickerToggleIconComponent)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-datepicker-toggle-icon',\n '[attr.aria-expanded]': 'datepicker().opened',\n '[attr.aria-disabled]': 'disabled',\n '(mousedown)': 'onMousedown($event)',\n '(click)': 'open($event)'\n }\n})\nexport class KbqDatepickerToggleIconComponent<D> implements OnChanges, KbqSiblingPopup {\n /** Whether the toggle button is disabled. */\n get disabled(): boolean {\n return this.datepicker().disabled || this.disabledState();\n }\n\n set disabled(value: boolean) {\n this.disabledState.set(coerceBooleanProperty(value));\n }\n\n private readonly disabledState = signal(false);\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** Datepicker instance that the button will toggle. */\n readonly datepicker = input<KbqDatepicker<D>>(undefined!, { alias: 'for' });\n\n /** Whether the calendar is currently on screen. Part of the `KbqSiblingPopup` contract. */\n get isAttached(): boolean {\n return !!this.datepicker()?.opened;\n }\n\n /**\n * Emits `true` when the calendar opens and `false` when it closes. Part of the `KbqSiblingPopup`\n * contract.\n *\n * Built on top of the `datepicker` signal rather than read once, because the instance is bound after the\n * consumers of this stream (a tooltip on the same element subscribes in its constructor) and may be\n * swapped later.\n */\n readonly openedChange: Observable<boolean> = toObservable(this.datepicker).pipe(\n filter(Boolean),\n switchMap((datepicker) =>\n merge(\n outputToObservable(datepicker.openedStream).pipe(map(() => true)),\n outputToObservable(datepicker.closedStream).pipe(map(() => false))\n )\n )\n );\n\n /** Whether the calendar was open when the toggle was pressed. */\n private openedOnPress = false;\n\n ngOnChanges(changes: SimpleChanges) {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n }\n\n /** Opens the calendar, moving the focus to its input; closes it instead when it was open at the press. */\n open($event: MouseEvent) {\n // Untracked: called from a consumer's `effect()`, the state read on the way — the inputs, `disabled` — would\n // make the effect run again whenever it changes.\n untracked(() => this.toggleCalendar($event));\n }\n\n /** Body of `open()`. */\n private toggleCalendar($event: MouseEvent): void {\n const datepicker = this.datepicker();\n const openedOnPress = this.openedOnPress;\n\n this.openedOnPress = false;\n\n if (!datepicker || this.disabled) return;\n\n $event.stopPropagation();\n\n // A click on the toggle of an open calendar closes it. The overlay has usually done so before the click gets\n // here, taking it for a click outside the calendar.\n if (openedOnPress) {\n datepicker.close();\n\n return;\n }\n\n // The input, not the icon, handles the keys of the datepicker and gets the focus back once it closes.\n datepicker.datepickerInput.focus();\n datepicker.open();\n }\n\n /** @docs-private */\n protected onMousedown(event: MouseEvent): void {\n // A press on the icon, focusable by its `tabindex`, would take the focus from the input.\n event.preventDefault();\n\n this.openedOnPress = !!this.datepicker()?.opened;\n }\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Overlay, OverlayConfig, OverlayRef, PositionStrategy, ScrollStrategy } from '@angular/cdk/overlay';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ElementRef,\n inject,\n InjectionToken,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n output,\n signal,\n SimpleChanges,\n untracked,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ESCAPE,\n KBQ_CONNECTED_OVERLAY_ABOVE_CLASS,\n KBQ_CONNECTED_OVERLAY_BELOW_CLASS,\n KBQ_OVERLAY_LAYERS,\n kbqAfterAnimations,\n kbqAnimationsDisabled,\n KbqLocaleOverridesDirective\n} from '@koobiq/components/core';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { KbqCalendarCellCssClasses } from './calendar-body.component';\nimport { KbqCalendar } from './calendar.component';\nimport { injectRequiredDateAdapter } from './datepicker-errors';\nimport { KbqDatepickerInput } from './datepicker-input.directive';\n\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n\n/**\n * Injection token that determines the scroll handling while the calendar is open. The root default keeps the\n * datepicker usable outside `KbqDatepickerModule`'s injector; providing the token anywhere still wins over it.\n */\nexport const KBQ_DATEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'kbq-datepicker-scroll-strategy',\n {\n providedIn: 'root',\n factory: () => KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY(inject(Overlay))\n }\n);\n\n/** @docs-private */\nexport function KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/**\n * Redundant to the root factory of the token; kept so an app can restore the default under its own override (#DS-2196).\n *\n * @docs-private\n */\nexport const KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: KBQ_DATEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY\n};\n\n/**\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\n * KbqCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-datepicker__content',\n imports: [\n KbqCalendar\n ],\n templateUrl: 'datepicker-content.html',\n styleUrls: ['datepicker-content.scss', 'datepicker-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-datepicker__content',\n '[class.kbq-datepicker__content_leave]': \"animationState === 'void'\",\n '[class.kbq-animations-disabled]': 'animationsDisabled'\n },\n exportAs: 'kbqDatepickerContent'\n})\nexport class KbqDatepickerContent<D> implements OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n /** Whether the panel opens and closes without motion. */\n protected readonly animationsDisabled = kbqAnimationsDisabled();\n\n /** Emits when the exit animation has finished. */\n readonly animationDone = new Subject<void>();\n\n /** Reference to the datepicker that created the overlay. */\n datepicker: KbqDatepicker<D>;\n\n /** Current state of the animation. */\n get animationState(): 'enter' | 'void' {\n return this.currentAnimationState();\n }\n\n set animationState(value: 'enter' | 'void') {\n this.currentAnimationState.set(value);\n }\n\n private readonly currentAnimationState = signal<'enter' | 'void'>('enter');\n\n /** Reference to the internal calendar component. */\n readonly calendar = viewChild.required(KbqCalendar);\n\n ngOnDestroy() {\n this.animationDone.complete();\n }\n\n startExitAnimation() {\n this.animationState = 'void';\n\n kbqAfterAnimations(\n () => this.elementRef.nativeElement,\n () => this.animationDone.next(),\n this.injector\n );\n }\n}\n\n/** Component responsible for managing the datepicker popup/dialog. */\n// TODO: We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"kbqDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n@Component({\n selector: 'kbq-datepicker',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n // The calendar is created through this component's `ViewContainerRef`, so this is the element whose\n // carrier it resolves — the one on the input is a sibling of it and never reaches the pop-up.\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ],\n exportAs: 'kbqDatepicker'\n})\nexport class KbqDatepicker<D> implements OnChanges, OnDestroy {\n private overlay = inject(Overlay);\n private readonly overlayLayers = inject(KBQ_OVERLAY_LAYERS);\n private readonly injector = inject(Injector);\n private viewContainerRef = inject(ViewContainerRef);\n private readonly dateAdapter = injectRequiredDateAdapter<D>();\n private dir = inject(Directionality, { optional: true })!;\n\n protected readonly document = inject<Document>(DOCUMENT);\n\n get hasBackdrop(): boolean {\n return this._hasBackdrop;\n }\n\n set hasBackdrop(value: boolean) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n\n private _hasBackdrop: boolean = false;\n\n /** The date to open the calendar to initially. */\n get startAt(): D | null {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || this.datepickerInput?.value();\n }\n\n set startAt(value: D | null) {\n const deserializedValue = this.dateAdapter.deserialize(value);\n\n // Untracked, as in the `disabled` setter: an `effect()` that assigns it must not come to depend on the state\n // read on the way.\n this._startAt =\n deserializedValue !== null\n ? this.dateAdapter.clampDate(deserializedValue, untracked(this.minDate), untracked(this.maxDate))\n : null;\n }\n\n private _startAt: D | null;\n\n /** Whether the datepicker pop-up should be disabled. */\n get disabled(): boolean {\n const disabled = this.disabledState();\n\n return disabled === undefined && this.datepickerInput ? this.datepickerInput.disabled() : !!disabled;\n }\n\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== untracked(this.disabledState)) {\n this.disabledState.set(newValue);\n this.disabledChange.next(newValue);\n }\n }\n\n private readonly disabledState = signal<boolean | undefined>(undefined);\n\n /** Whether the calendar is open. */\n get opened(): boolean {\n return this.openedState();\n }\n\n set opened(value: boolean) {\n if (coerceBooleanProperty(value)) {\n this.open();\n } else {\n this.close();\n }\n }\n\n private readonly openedState = signal(false);\n\n /** @docs-private */\n readonly hasBackdropInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'hasBackdrop',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly startAtInput = input<D | null | undefined>(undefined, { alias: 'startAt' });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly openedInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'opened',\n transform: booleanAttribute\n });\n\n /** The currently selected date. */\n get selected(): D | null {\n return this.validSelected;\n }\n\n set selected(value: D | null) {\n this.validSelected = value;\n }\n\n get dateFilter(): (date: D | null) => boolean {\n return this.datepickerInput && this.datepickerInput.dateFilter;\n }\n\n get value(): D | null {\n return this.selected;\n }\n\n /** The minimum selectable date. */\n readonly minDate = input<D | null>(undefined!);\n\n /** The maximum selectable date. */\n readonly maxDate = input<D | null>(undefined!);\n\n /**\n * Emits selected year in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n readonly yearSelected = output<D>();\n\n /**\n * Emits selected month in year view.\n * This doesn't imply a change on the selected date.\n */\n readonly monthSelected = output<D>();\n\n /** Classes to be passed to the date picker panel. Supports the same syntax as the `[class]` binding. */\n readonly panelClass = input<string | string[]>(undefined!);\n\n /** Function that can be used to add custom CSS classes to dates. */\n readonly dateClass = input<(date: D) => KbqCalendarCellCssClasses>(undefined!);\n\n readonly backdropClass = input<string>('cdk-overlay-transparent-backdrop');\n\n /** Emits when the datepicker has been opened. */\n readonly openedStream = output<void>({ alias: 'opened' });\n\n /** Emits when the datepicker has been closed. */\n readonly closedStream = output<void>({ alias: 'closed' });\n\n /** Emits when the datepicker is disabled. */\n readonly disabledChange = new Subject<boolean>();\n\n /** Emits new selected date when selected date changes. */\n readonly selectedChanged = new Subject<D>();\n\n /** The id for the datepicker calendar. */\n id: string = `kbq-datepicker-${datepickerUid++}`;\n\n /** A reference to the overlay when the calendar is opened as a popup. */\n popupRef: OverlayRef | null;\n\n /** The input element this datepicker is associated with. */\n datepickerInput: KbqDatepickerInput<D>;\n\n private scrollStrategy: () => ScrollStrategy;\n\n private validSelected: D | null = null;\n\n /** A portal containing the calendar for this datepicker. */\n private calendarPortal: ComponentPortal<KbqDatepickerContent<D>>;\n\n /** Reference to the component instantiated in popup mode. */\n private popupComponentRef: ComponentRef<KbqDatepickerContent<D>> | null;\n\n /** The element that was focused before the datepicker was opened. */\n private focusedElementBeforeOpen: HTMLElement | null = null;\n\n /** Subscription to value changes in the associated input element. */\n private inputSubscription = Subscription.EMPTY;\n\n private closeSubscription = Subscription.EMPTY;\n\n constructor() {\n this.scrollStrategy = inject(KBQ_DATEPICKER_SCROLL_STRATEGY);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['hasBackdropInput']) {\n const hasBackdrop = this.hasBackdropInput();\n\n if (hasBackdrop !== undefined) this.hasBackdrop = hasBackdrop;\n }\n\n // A bound `undefined` is handed over too, as an unset date.\n if (changes['startAtInput']) this.startAt = this.startAtInput() ?? null;\n\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n\n if (changes['openedInput']) {\n const opened = this.openedInput();\n\n if (opened !== undefined) this.opened = opened;\n }\n }\n\n ngOnDestroy() {\n // Before `close()`: a datepicker going away takes its popup along without playing the exit animation.\n this.destroyOverlay();\n this.close();\n this.inputSubscription.unsubscribe();\n this.closeSubscription.unsubscribe();\n this.disabledChange.complete();\n }\n\n /** Selects the given date */\n select(date: D): void {\n const oldValue = this.selected;\n\n this.selected = date;\n\n if (!this.dateAdapter.sameDate(oldValue, this.selected)) {\n untracked(() => this.selectedChanged.next(date));\n }\n }\n\n /** Emits the selected year in multiyear view */\n selectYear(normalizedYear: D): void {\n this.yearSelected.emit(normalizedYear);\n }\n\n /** Emits selected month in year view */\n selectMonth(normalizedMonth: D): void {\n this.monthSelected.emit(normalizedMonth);\n }\n\n /**\n * Register an input with this datepicker.\n *\n * @param input The datepicker input to register with this datepicker.\n */\n registerInput(input: KbqDatepickerInput<D>): void {\n if (this.datepickerInput) {\n throw Error('A KbqDatepicker can only be associated with a single input.');\n }\n\n this.datepickerInput = input;\n this.inputSubscription = this.datepickerInput.valueChange.subscribe((value: D | null) => {\n this.selected = value;\n\n if (this.popupComponentRef) {\n const calendar = this.popupComponentRef.instance.calendar();\n\n calendar.monthView()?.init();\n calendar.activeDate = value as D;\n }\n });\n }\n\n /** Open the calendar. */\n open(): void {\n // Untracked, as `close()`, `toggle()` and `select()`: called from a consumer's `effect()`, the state read on\n // the way — `opened`, `disabled`, the inputs, the value of the input — would make the effect run again on\n // every open and close.\n untracked(() => this.openCalendar());\n }\n\n /** Close the calendar. */\n close(restoreFocus: boolean = true): void {\n untracked(() => this.closeCalendar(restoreFocus));\n }\n\n toggle(): void {\n if (this.datepickerInput.isReadOnly) {\n return;\n }\n\n if (untracked(this.openedState)) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Body of `open()`. */\n private openCalendar(): void {\n if (this.openedState() || this.disabled) {\n return;\n }\n\n if (!this.datepickerInput) {\n throw Error('Attempted to open an KbqDatepicker with no associated input.');\n }\n\n if (this.document) {\n this.focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n }\n\n this.openAsPopup();\n\n this.openedState.set(true);\n this.openedStream.emit();\n }\n\n /** Body of `close()`. */\n private closeCalendar(restoreFocus: boolean): void {\n if (!this.openedState()) {\n return;\n }\n\n // A popup the overlay has already taken down, e.g. on scroll, has nothing left to animate.\n if (this.popupComponentRef?.hostView.destroyed) {\n this.destroyOverlay();\n } else if (this.popupComponentRef) {\n const instance = this.popupComponentRef.instance;\n\n instance.startExitAnimation();\n\n instance.animationDone.pipe(take(1)).subscribe(() => this.destroyOverlay());\n }\n\n if (restoreFocus) {\n this.focusedElementBeforeOpen!.focus();\n }\n\n this.openedState.set(false);\n this.closedStream.emit();\n this.focusedElementBeforeOpen = null;\n }\n\n /** Destroys the current overlay. */\n private destroyOverlay() {\n if (this.popupRef) {\n this.popupRef.dispose();\n this.popupRef = this.popupComponentRef = null;\n }\n }\n\n /** Open the calendar as a popup. */\n private openAsPopup(): void {\n if (!this.calendarPortal) {\n this.calendarPortal = new ComponentPortal<KbqDatepickerContent<D>>(\n KbqDatepickerContent,\n this.viewContainerRef\n );\n }\n\n // The popup of the last opening may still be playing its exit: disposed once that ends, it would close this one.\n if (this.popupComponentRef?.instance.animationState === 'void') {\n this.destroyOverlay();\n }\n\n if (!this.popupRef) {\n this.createPopup();\n }\n\n if (!this.popupRef!.hasAttached()) {\n this.popupComponentRef = this.popupRef!.attach(this.calendarPortal);\n this.popupComponentRef.instance.datepicker = this;\n\n // Update the position once the calendar has rendered.\n afterNextRender(() => this.popupRef?.updatePosition(), { injector: this.injector });\n }\n }\n\n /** Create the popup. */\n private createPopup(): void {\n const overlayConfig = new OverlayConfig({\n positionStrategy: this.createPopupPositionStrategy(),\n hasBackdrop: this.hasBackdrop,\n backdropClass: this.backdropClass(),\n direction: this.dir,\n scrollStrategy: this.scrollStrategy(),\n panelClass: 'kbq-datepicker__popup'\n });\n\n this.popupRef = this.overlay.create(overlayConfig);\n this.overlayLayers.adopt(this.popupRef, this.datepickerInput.getOrigin().nativeElement);\n\n this.closeSubscription = this.closingActions().subscribe(() => this.close(this.restoreFocus()));\n\n // The input handles the keys while it has the focus; this covers a focus inside the calendar. CDK hands a key\n // only to the topmost overlay listening for keys, so a modal underneath no longer closes on the same Escape.\n this.closeSubscription.add(\n this.popupRef\n .keydownEvents()\n .pipe(filter((event) => event.keyCode === ESCAPE))\n .subscribe((event) => {\n event.preventDefault();\n this.close();\n })\n );\n }\n\n /** Whether a close from outside the calendar has to return the focus: unless the press moved it somewhere else. */\n private restoreFocus(): boolean {\n const focused = this.document.activeElement;\n\n // A press that keeps the focus where it was, as on the toggle, leaves it in the calendar about to go away.\n return focused === this.document.body || !!this.popupComponentRef?.location.nativeElement.contains(focused);\n }\n\n private closingActions() {\n return merge(\n this.popupRef!.backdropClick(),\n this.popupRef!.outsidePointerEvents(),\n this.popupRef!.detachments()\n );\n }\n\n /** Create the popup PositionStrategy. */\n private createPopupPositionStrategy(): PositionStrategy {\n return (\n this.overlay\n .position()\n .flexibleConnectedTo(this.datepickerInput.getOrigin())\n .withTransformOriginOn('.kbq-datepicker__content')\n .withFlexibleDimensions(false)\n // Also large enough to absorb the trigger↔panel gap padding (kbq-connected-overlay-gap,\n // defaultOffsetY = 4) that CDK's viewport-fit check can't see, since that padding is applied\n // via panelClass after the fit decision is made.\n .withViewportMargin(8)\n .withLockedPosition()\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n panelClass: KBQ_CONNECTED_OVERLAY_BELOW_CLASS\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: KBQ_CONNECTED_OVERLAY_ABOVE_CLASS\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n }\n ])\n );\n }\n}\n","<kbq-calendar\n [dateClass]=\"datepicker.dateClass()\"\n [dateFilter]=\"datepicker.dateFilter\"\n [id]=\"datepicker.id\"\n [maxDate]=\"datepicker.maxDate()\"\n [minDate]=\"datepicker.minDate()\"\n [class]=\"datepicker.panelClass()\"\n [selected]=\"datepicker.selected\"\n [startAt]=\"datepicker.startAt\"\n (monthSelected)=\"datepicker.selectMonth($event)\"\n (selectedChange)=\"datepicker.select($event)\"\n (userSelection)=\"datepicker.close()\"\n (yearSelected)=\"datepicker.selectYear($event)\"\n/>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { TitleCasePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqSelectModule } from '@koobiq/components/select';\nimport { KbqCalendarBody } from './calendar-body.component';\nimport { KbqCalendarHeader } from './calendar-header.component';\nimport { KbqCalendar } from './calendar.component';\nimport { KbqDatepickerInput } from './datepicker-input.directive';\nimport { KbqDatepickerToggleIcon, KbqDatepickerToggleIconComponent } from './datepicker-toggle.component';\nimport { KbqDatepicker, KbqDatepickerContent } from './datepicker.component';\nimport { KbqMonthView } from './month-view.component';\n\n@NgModule({\n imports: [\n KbqButtonModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n KbqSelectModule,\n KbqIconModule,\n KbqDatepickerToggleIconComponent,\n TitleCasePipe,\n KbqCalendar,\n KbqCalendarBody,\n KbqDatepicker,\n KbqDatepickerContent,\n KbqDatepickerInput,\n KbqDatepickerToggleIcon,\n KbqMonthView,\n KbqCalendarHeader\n ],\n exports: [\n KbqCalendar,\n KbqCalendarBody,\n KbqDatepicker,\n KbqDatepickerContent,\n KbqDatepickerInput,\n KbqDatepickerToggleIcon,\n KbqDatepickerToggleIconComponent,\n KbqMonthView,\n KbqCalendarHeader,\n KbqFormFieldModule\n ]\n})\nexport class KbqDatepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}