@lucca-front/ng 21.1.0-rc.1 → 21.1.0-rc.2

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 (256) hide show
  1. package/fesm2022/lucca-front-ng-api.mjs +45 -13
  2. package/fesm2022/lucca-front-ng-api.mjs.map +1 -1
  3. package/fesm2022/lucca-front-ng-app-layout.mjs +2 -2
  4. package/fesm2022/lucca-front-ng-app-layout.mjs.map +1 -1
  5. package/fesm2022/lucca-front-ng-box.mjs +1 -1
  6. package/fesm2022/lucca-front-ng-box.mjs.map +1 -1
  7. package/fesm2022/lucca-front-ng-breadcrumbs.mjs.map +1 -1
  8. package/fesm2022/lucca-front-ng-bubble-icon.mjs +1 -1
  9. package/fesm2022/lucca-front-ng-bubble-icon.mjs.map +1 -1
  10. package/fesm2022/lucca-front-ng-button.mjs +1 -119
  11. package/fesm2022/lucca-front-ng-button.mjs.map +1 -1
  12. package/fesm2022/lucca-front-ng-callout.mjs +13 -39
  13. package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
  14. package/fesm2022/lucca-front-ng-chip.mjs +3 -33
  15. package/fesm2022/lucca-front-ng-chip.mjs.map +1 -1
  16. package/fesm2022/lucca-front-ng-clear.mjs +2 -17
  17. package/fesm2022/lucca-front-ng-clear.mjs.map +1 -1
  18. package/fesm2022/lucca-front-ng-comment.mjs +18 -20
  19. package/fesm2022/lucca-front-ng-comment.mjs.map +1 -1
  20. package/fesm2022/lucca-front-ng-container.mjs +7 -5
  21. package/fesm2022/lucca-front-ng-container.mjs.map +1 -1
  22. package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs +2 -0
  23. package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs.map +1 -1
  24. package/fesm2022/lucca-front-ng-core-select-user.mjs +2 -2
  25. package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
  26. package/fesm2022/lucca-front-ng-core-select.mjs +6 -6
  27. package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
  28. package/fesm2022/lucca-front-ng-core.mjs +3 -75
  29. package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
  30. package/fesm2022/lucca-front-ng-data-table.mjs +3 -3
  31. package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
  32. package/fesm2022/lucca-front-ng-date.mjs +37 -5
  33. package/fesm2022/lucca-front-ng-date.mjs.map +1 -1
  34. package/fesm2022/lucca-front-ng-date2.mjs +20 -32
  35. package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
  36. package/fesm2022/lucca-front-ng-department.mjs +18 -2
  37. package/fesm2022/lucca-front-ng-department.mjs.map +1 -1
  38. package/fesm2022/lucca-front-ng-dialog.mjs +3 -3
  39. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  40. package/fesm2022/lucca-front-ng-divider.mjs +1 -10
  41. package/fesm2022/lucca-front-ng-divider.mjs.map +1 -1
  42. package/fesm2022/lucca-front-ng-empty-state.mjs +1 -17
  43. package/fesm2022/lucca-front-ng-empty-state.mjs.map +1 -1
  44. package/fesm2022/lucca-front-ng-establishment.mjs +66 -2
  45. package/fesm2022/lucca-front-ng-establishment.mjs.map +1 -1
  46. package/fesm2022/lucca-front-ng-fancy-box.mjs +0 -12
  47. package/fesm2022/lucca-front-ng-fancy-box.mjs.map +1 -1
  48. package/fesm2022/lucca-front-ng-file-upload.mjs +1 -1
  49. package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
  50. package/fesm2022/lucca-front-ng-filter-pills.mjs +3 -3
  51. package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
  52. package/fesm2022/lucca-front-ng-footer.mjs +0 -3
  53. package/fesm2022/lucca-front-ng-footer.mjs.map +1 -1
  54. package/fesm2022/lucca-front-ng-form-field.mjs +7 -76
  55. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  56. package/fesm2022/lucca-front-ng-form-header.mjs +0 -3
  57. package/fesm2022/lucca-front-ng-form-header.mjs.map +1 -1
  58. package/fesm2022/lucca-front-ng-form.mjs +5 -19
  59. package/fesm2022/lucca-front-ng-form.mjs.map +1 -1
  60. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs +8 -9
  61. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs.map +1 -1
  62. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +34 -51
  63. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
  64. package/fesm2022/lucca-front-ng-forms.mjs +40 -88
  65. package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
  66. package/fesm2022/lucca-front-ng-gauge.mjs +5 -28
  67. package/fesm2022/lucca-front-ng-gauge.mjs.map +1 -1
  68. package/fesm2022/lucca-front-ng-grid.mjs +3 -3
  69. package/fesm2022/lucca-front-ng-grid.mjs.map +1 -1
  70. package/fesm2022/lucca-front-ng-highlight-data.mjs +26 -31
  71. package/fesm2022/lucca-front-ng-highlight-data.mjs.map +1 -1
  72. package/fesm2022/lucca-front-ng-horizontal-navigation.mjs +0 -3
  73. package/fesm2022/lucca-front-ng-horizontal-navigation.mjs.map +1 -1
  74. package/fesm2022/lucca-front-ng-icon.mjs +1 -42
  75. package/fesm2022/lucca-front-ng-icon.mjs.map +1 -1
  76. package/fesm2022/lucca-front-ng-index-table.mjs +3 -3
  77. package/fesm2022/lucca-front-ng-index-table.mjs.map +1 -1
  78. package/fesm2022/lucca-front-ng-inline-message.mjs +0 -12
  79. package/fesm2022/lucca-front-ng-inline-message.mjs.map +1 -1
  80. package/fesm2022/lucca-front-ng-link.mjs +0 -15
  81. package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
  82. package/fesm2022/lucca-front-ng-listbox.mjs +6 -18
  83. package/fesm2022/lucca-front-ng-listbox.mjs.map +1 -1
  84. package/fesm2022/lucca-front-ng-listing.mjs +8 -37
  85. package/fesm2022/lucca-front-ng-listing.mjs.map +1 -1
  86. package/fesm2022/lucca-front-ng-loading.mjs.map +1 -1
  87. package/fesm2022/lucca-front-ng-main-layout.mjs +2 -8
  88. package/fesm2022/lucca-front-ng-main-layout.mjs.map +1 -1
  89. package/fesm2022/lucca-front-ng-mobile-push.mjs +10 -18
  90. package/fesm2022/lucca-front-ng-mobile-push.mjs.map +1 -1
  91. package/fesm2022/lucca-front-ng-modal.mjs +1 -1
  92. package/fesm2022/lucca-front-ng-modal.mjs.map +1 -1
  93. package/fesm2022/lucca-front-ng-multi-select.mjs +9 -12
  94. package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
  95. package/fesm2022/lucca-front-ng-new-badge.mjs +0 -3
  96. package/fesm2022/lucca-front-ng-new-badge.mjs.map +1 -1
  97. package/fesm2022/lucca-front-ng-numeric-badge.mjs +1 -10
  98. package/fesm2022/lucca-front-ng-numeric-badge.mjs.map +1 -1
  99. package/fesm2022/lucca-front-ng-option.mjs +315 -203
  100. package/fesm2022/lucca-front-ng-option.mjs.map +1 -1
  101. package/fesm2022/lucca-front-ng-page-header.mjs +0 -9
  102. package/fesm2022/lucca-front-ng-page-header.mjs.map +1 -1
  103. package/fesm2022/lucca-front-ng-pagination.mjs +1 -25
  104. package/fesm2022/lucca-front-ng-pagination.mjs.map +1 -1
  105. package/fesm2022/lucca-front-ng-plg-push.mjs +1 -7
  106. package/fesm2022/lucca-front-ng-plg-push.mjs.map +1 -1
  107. package/fesm2022/lucca-front-ng-popover.mjs +33 -1
  108. package/fesm2022/lucca-front-ng-popover.mjs.map +1 -1
  109. package/fesm2022/lucca-front-ng-popover2.mjs +9 -19
  110. package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
  111. package/fesm2022/lucca-front-ng-progress-bar.mjs +5 -12
  112. package/fesm2022/lucca-front-ng-progress-bar.mjs.map +1 -1
  113. package/fesm2022/lucca-front-ng-read-more.mjs +1 -16
  114. package/fesm2022/lucca-front-ng-read-more.mjs.map +1 -1
  115. package/fesm2022/lucca-front-ng-resource-card.mjs +7 -7
  116. package/fesm2022/lucca-front-ng-resource-card.mjs.map +1 -1
  117. package/fesm2022/lucca-front-ng-scroll-box.mjs +2 -5
  118. package/fesm2022/lucca-front-ng-scroll-box.mjs.map +1 -1
  119. package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs +3 -9
  120. package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs.map +1 -1
  121. package/fesm2022/lucca-front-ng-segmented-control.mjs +1 -16
  122. package/fesm2022/lucca-front-ng-segmented-control.mjs.map +1 -1
  123. package/fesm2022/lucca-front-ng-simple-select.mjs +6 -21
  124. package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
  125. package/fesm2022/lucca-front-ng-skeleton.mjs +12 -63
  126. package/fesm2022/lucca-front-ng-skeleton.mjs.map +1 -1
  127. package/fesm2022/lucca-front-ng-sortable-list.mjs +1 -25
  128. package/fesm2022/lucca-front-ng-sortable-list.mjs.map +1 -1
  129. package/fesm2022/lucca-front-ng-status-badge.mjs +0 -12
  130. package/fesm2022/lucca-front-ng-status-badge.mjs.map +1 -1
  131. package/fesm2022/lucca-front-ng-tag.mjs +1 -7
  132. package/fesm2022/lucca-front-ng-tag.mjs.map +1 -1
  133. package/fesm2022/lucca-front-ng-time.mjs +16 -55
  134. package/fesm2022/lucca-front-ng-time.mjs.map +1 -1
  135. package/fesm2022/lucca-front-ng-tooltip.mjs +22 -6
  136. package/fesm2022/lucca-front-ng-tooltip.mjs.map +1 -1
  137. package/fesm2022/lucca-front-ng-user-popover.mjs +1 -1
  138. package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
  139. package/fesm2022/lucca-front-ng-user.mjs +25 -9
  140. package/fesm2022/lucca-front-ng-user.mjs.map +1 -1
  141. package/fesm2022/lucca-front-ng-vertical-navigation.mjs +2 -32
  142. package/fesm2022/lucca-front-ng-vertical-navigation.mjs.map +1 -1
  143. package/package.json +5 -7
  144. package/schematics/action-icon/index.js +5 -4
  145. package/schematics/action-icon/migration.js +4 -3
  146. package/schematics/action-icon/migration.spec.js +8 -8
  147. package/schematics/alignment-utilities/index.js +4 -3
  148. package/schematics/alignment-utilities/migration.spec.js +8 -8
  149. package/schematics/cdn-urls/index.js +4 -3
  150. package/schematics/cdn-urls/migration.js +9 -7
  151. package/schematics/cdn-urls/migration.spec.js +8 -8
  152. package/schematics/class-prefix/index.js +4 -3
  153. package/schematics/class-prefix/migration.spec.js +8 -8
  154. package/schematics/collection.json +0 -10
  155. package/schematics/color-text/index.js +4 -3
  156. package/schematics/color-text/migration.spec.js +8 -8
  157. package/schematics/component-path/index.js +4 -3
  158. package/schematics/component-path/migration.spec.js +8 -8
  159. package/schematics/empty-state-title/index.js +7 -5
  160. package/schematics/empty-state-title/migration.spec.js +5 -5
  161. package/schematics/lib/schematic.utils.js +0 -5
  162. package/schematics/lu-button/index.js +4 -3
  163. package/schematics/lu-button/migration.js +11 -5
  164. package/schematics/lu-button/migration.spec.js +5 -5
  165. package/schematics/lu-icon/index.js +4 -3
  166. package/schematics/lu-icon/migration.js +14 -8
  167. package/schematics/lu-icon/migration.spec.js +5 -5
  168. package/schematics/lu-select/index.js +4 -3
  169. package/schematics/lu-select/migration.js +21 -18
  170. package/schematics/lu-select/migration.spec.js +5 -5
  171. package/schematics/lu-select/util.js +19 -17
  172. package/schematics/lu-text-input/index.js +4 -3
  173. package/schematics/lu-text-input/migration.js +28 -22
  174. package/schematics/lu-text-input/migration.spec.js +5 -5
  175. package/schematics/new-icons/index.js +6 -5
  176. package/schematics/new-icons/migration.js +16 -11
  177. package/schematics/new-icons/migration.spec.js +8 -8
  178. package/schematics/palettes/index.js +4 -3
  179. package/schematics/palettes/migration.spec.js +8 -8
  180. package/schematics/tokens-radius/index.js +4 -3
  181. package/schematics/tokens-radius/migration.spec.js +8 -8
  182. package/schematics/tokens-spacing/index.js +4 -3
  183. package/schematics/tokens-spacing/migration.spec.js +8 -8
  184. package/schematics/tokens-typo/index.js +4 -3
  185. package/schematics/tokens-typo/migration.spec.js +8 -8
  186. package/src/components/cdk/_overlay.scss +0 -5
  187. package/src/definitions/option/_option-item.scss +0 -1
  188. package/types/lucca-front-ng-api.d.ts +19 -1
  189. package/types/lucca-front-ng-breadcrumbs.d.ts +1 -1
  190. package/types/lucca-front-ng-button.d.ts +1 -61
  191. package/types/lucca-front-ng-callout.d.ts +2 -32
  192. package/types/lucca-front-ng-chip.d.ts +2 -32
  193. package/types/lucca-front-ng-clear.d.ts +5 -20
  194. package/types/lucca-front-ng-comment.d.ts +11 -19
  195. package/types/lucca-front-ng-container.d.ts +4 -4
  196. package/types/lucca-front-ng-core-select.d.ts +1 -2
  197. package/types/lucca-front-ng-core.d.ts +3 -18
  198. package/types/lucca-front-ng-date.d.ts +19 -1
  199. package/types/lucca-front-ng-date2.d.ts +1 -2
  200. package/types/lucca-front-ng-department.d.ts +10 -1
  201. package/types/lucca-front-ng-divider.d.ts +0 -10
  202. package/types/lucca-front-ng-empty-state.d.ts +0 -16
  203. package/types/lucca-front-ng-establishment.d.ts +37 -1
  204. package/types/lucca-front-ng-fancy-box.d.ts +0 -12
  205. package/types/lucca-front-ng-footer.d.ts +0 -3
  206. package/types/lucca-front-ng-form-field.d.ts +4 -34
  207. package/types/lucca-front-ng-form-header.d.ts +0 -3
  208. package/types/lucca-front-ng-form.d.ts +5 -9
  209. package/types/lucca-front-ng-forms-phone-number-input.d.ts +0 -1
  210. package/types/lucca-front-ng-forms-rich-text-input.d.ts +0 -2
  211. package/types/lucca-front-ng-forms.d.ts +4 -16
  212. package/types/lucca-front-ng-gauge.d.ts +0 -25
  213. package/types/lucca-front-ng-grid.d.ts +1 -1
  214. package/types/lucca-front-ng-highlight-data.d.ts +15 -36
  215. package/types/lucca-front-ng-horizontal-navigation.d.ts +0 -3
  216. package/types/lucca-front-ng-icon.d.ts +1 -32
  217. package/types/lucca-front-ng-inline-message.d.ts +0 -12
  218. package/types/lucca-front-ng-link.d.ts +0 -15
  219. package/types/lucca-front-ng-listbox.d.ts +4 -16
  220. package/types/lucca-front-ng-listing.d.ts +2 -33
  221. package/types/lucca-front-ng-main-layout.d.ts +0 -6
  222. package/types/lucca-front-ng-mobile-push.d.ts +0 -7
  223. package/types/lucca-front-ng-new-badge.d.ts +0 -3
  224. package/types/lucca-front-ng-numeric-badge.d.ts +0 -9
  225. package/types/lucca-front-ng-option.d.ts +141 -78
  226. package/types/lucca-front-ng-page-header.d.ts +0 -9
  227. package/types/lucca-front-ng-pagination.d.ts +0 -24
  228. package/types/lucca-front-ng-plg-push.d.ts +0 -6
  229. package/types/lucca-front-ng-popover.d.ts +20 -1
  230. package/types/lucca-front-ng-popover2.d.ts +3 -5
  231. package/types/lucca-front-ng-progress-bar.d.ts +0 -9
  232. package/types/lucca-front-ng-read-more.d.ts +1 -16
  233. package/types/lucca-front-ng-resource-card.d.ts +0 -6
  234. package/types/lucca-front-ng-scroll-box.d.ts +1 -4
  235. package/types/lucca-front-ng-segmented-control-tabs.d.ts +1 -7
  236. package/types/lucca-front-ng-segmented-control.d.ts +1 -16
  237. package/types/lucca-front-ng-skeleton.d.ts +6 -61
  238. package/types/lucca-front-ng-sortable-list.d.ts +0 -24
  239. package/types/lucca-front-ng-status-badge.d.ts +0 -12
  240. package/types/lucca-front-ng-tag.d.ts +0 -6
  241. package/types/lucca-front-ng-time.d.ts +10 -16
  242. package/types/lucca-front-ng-tooltip.d.ts +11 -2
  243. package/types/lucca-front-ng-user.d.ts +11 -2
  244. package/types/lucca-front-ng-vertical-navigation.d.ts +0 -30
  245. package/fesm2022/lucca-front-ng-text-flow.mjs +0 -20
  246. package/fesm2022/lucca-front-ng-text-flow.mjs.map +0 -1
  247. package/schematics/lib/index.js +0 -29
  248. package/schematics/lu-container/index.js +0 -23
  249. package/schematics/lu-container/migration.js +0 -116
  250. package/schematics/lu-container/migration.spec.js +0 -23
  251. package/schematics/lu-container/schema.json +0 -23
  252. package/schematics/lu-loading/index.js +0 -23
  253. package/schematics/lu-loading/migration.js +0 -136
  254. package/schematics/lu-loading/migration.spec.js +0 -23
  255. package/schematics/lu-loading/schema.json +0 -28
  256. package/types/lucca-front-ng-text-flow.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-date2.mjs","sources":["../../../packages/ng/date2/calendar.token.ts","../../../packages/ng/date2/translations.ts","../../../packages/ng/date2/date2.translate.ts","../../../packages/ng/date2/repeat-times.directive.ts","../../../packages/ng/date2/date.const.ts","../../../packages/ng/date2/utils.ts","../../../packages/ng/date2/calendar2/calendar2.tokens.ts","../../../packages/ng/date2/calendar2/calendar2-cell.directive.ts","../../../packages/ng/date2/calendar2/calendar2.component.ts","../../../packages/ng/date2/calendar2/calendar2.component.html","../../../packages/ng/date2/date-format.ts","../../../packages/ng/date2/abstract-date-component.ts","../../../packages/ng/date2/date-input/date-input.component.ts","../../../packages/ng/date2/date-input/date-input.component.html","../../../packages/ng/date2/date-range-input/calendar-shortcut.ts","../../../packages/ng/date2/date-range-input/date-range-input.component.ts","../../../packages/ng/date2/date-range-input/date-range-input.component.html","../../../packages/ng/date2/lucca-front-ng-date2.ts"],"sourcesContent":["import { getLocaleFirstDayOfWeek, getLocaleWeekEndRange } from '@angular/common';\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\n\nexport type CalendarWeekDay = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\nexport interface CalendarWeekInfo {\n\tfirstDay: CalendarWeekDay;\n\tweekend: CalendarWeekDay[];\n}\n\nexport const WEEK_INFO = new InjectionToken<CalendarWeekInfo>('Calendar2:WeekInfo', {\n\tfactory: () => {\n\t\tconst locale = inject(LOCALE_ID);\n\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\tconst [weekendStart, weekendEnd] = getLocaleWeekEndRange(locale);\n\t\tconst weekend: number[] = [];\n\t\tlet weekDay: number = weekendStart;\n\t\twhile (weekDay != weekendEnd) {\n\t\t\t// Sunday is 0 in Angular but 7 in Intl\n\t\t\tweekend.push(weekDay || 7);\n\t\t\tweekDay = (weekDay + 1) % 7;\n\t\t}\n\t\tweekend.push(weekDay || 7);\n\t\treturn {\n\t\t\tfirstDay: (getLocaleFirstDayOfWeek(locale) + 7) % 7,\n\t\t\tweekend,\n\t\t} as CalendarWeekInfo;\n\t},\n});\n","export const Translations = {\n\tfr: {\n\t\tfrom: 'Du',\n\t\tto: 'au',\n\t\tdirectionKeysTip: 'Les touches directionnelles servent à parcourir les dates.',\n\t\tpickDate: 'Choisir une date dans le calendrier',\n\t\tprevious: 'Précédent',\n\t\tnext: 'Suivant',\n\t\tclear: 'Vider ce champ',\n\t},\n\ten: {\n\t\tfrom: 'From',\n\t\tto: 'to',\n\t\tdirectionKeysTip: 'The arrow keys are used to navigate through dates.',\n\t\tpickDate: 'Pick a date in calendar',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tclear: 'Clear',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_DATE2_TRANSLATIONS = new InjectionToken('LuDate2Translations', {\n\tfactory: () => luDate2Translations,\n});\n\nexport interface Date2Translate {\n\tfrom: string;\n\tto: string;\n\tdirectionKeysTip: string;\n\tpickDate: string;\n\tprevious: string;\n\tnext: string;\n\tclear: string;\n}\n\nexport const luDate2Translations: LuTranslation<Date2Translate> = Translations;\n","import { Directive, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n\tselector: '[luRepeatTimes]',\n})\nexport class RepeatTimesDirective {\n\tprivate templateRef = inject<TemplateRef<void>>(TemplateRef);\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\n\t@Input('luRepeatTimes')\n\tpublic set repeatTimes(times: number) {\n\t\tthis.viewContainerRef.clear();\n\n\t\tfor (let i = 0; i < times; i++) {\n\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t}\n\t}\n\n\tpublic static ngTemplateContextGuard(_dir: RepeatTimesDirective, ctx: unknown): ctx is void {\n\t\treturn true;\n\t}\n}\n","export const DATE_FORMAT = {\n\tDATE: 'date',\n\tDATE_ISO: 'date-iso',\n} as const;\n\nexport type DateFormat = (typeof DATE_FORMAT)[keyof typeof DATE_FORMAT];\n\nexport const DATE_ISO_FORMAT = 'yyyy-MM-dd';\n","import { isNil } from '@lucca-front/ng/core';\nimport { Day, format, isSameDay, isSameMonth, isSameYear, parse, startOfDecade, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarWeekDay, CalendarWeekInfo } from './calendar.token';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { DateRange, DateRangeInput } from './calendar2/date-range';\nimport { DATE_ISO_FORMAT } from './date.const';\n\nexport function getIntlWeekDay(date: Date): CalendarWeekDay {\n\treturn (date.getDay() || 7) as CalendarWeekDay;\n}\n\nexport function getJSFirstDayOfWeek(weekInfo: CalendarWeekInfo): Day {\n\treturn (weekInfo.firstDay % 7) as Day;\n}\n\nconst modeToComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameDay,\n\tmonth: isSameMonth,\n\tyear: isSameYear,\n};\n\nconst modeToCalendarComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameMonth,\n\tmonth: isSameYear,\n\tyear: (a, b) => Math.floor(a.getFullYear() / 10) === Math.floor(b.getFullYear() / 10),\n};\n\nconst modeToPeriodStart: Record<CalendarMode, (date: Date) => Date> = {\n\tday: startOfMonth,\n\tmonth: startOfYear,\n\tyear: startOfDecade,\n};\n\nexport function comparePeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn modeToComparator[mode](a, b);\n}\n\nexport function compareCalendarPeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn modeToCalendarComparator[mode](a, b);\n}\n\nexport function startOfPeriod(mode: CalendarMode, date: Date): Date {\n\treturn modeToPeriodStart[mode](date);\n}\n\nfunction stringToDateISO(value: string): Date {\n\tconst res = parse(value, DATE_ISO_FORMAT, new Date());\n\tif (isNaN(+res)) {\n\t\tthrow new Error('Invalid date: your input should be a valid iso date string (yyyy-MM-dd), received: ' + value);\n\t}\n\treturn res;\n}\n\nexport function transformDateInputToDate(value: Date | null | undefined | string): Date | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\treturn stringToDateISO(value);\n}\n\nexport function transformDateToDateISO(value: Date | null): string | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\n\treturn format(value, DATE_ISO_FORMAT);\n}\n\nfunction isDateRangeInput(value: DateRangeInput | DateRange): value is DateRangeInput {\n\treturn !(value.start instanceof Date);\n}\n\nexport function transformDateRangeInputToDateRange(value: DateRange | null | undefined | DateRangeInput): DateRange | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\n\tif (!isDateRangeInput(value)) {\n\t\treturn value;\n\t}\n\n\treturn {\n\t\t...value,\n\t\tstart: transformDateInputToDate(value.start),\n\t\tend: transformDateInputToDate(value.end),\n\t};\n}\n\nexport function transformDateRangeToDateRangeInput(value: DateRange): DateRangeInput {\n\treturn {\n\t\t...value,\n\t\tstart: transformDateToDateISO(value.start),\n\t\tend: transformDateToDateISO(value.end),\n\t};\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { Calendar2CellDirective } from './calendar2-cell.directive';\n\nexport const CALENDAR_CELLS = new InjectionToken<Signal<Calendar2CellDirective[]>>('Calendar2:Calendar2Cells');\nexport const CALENDAR_TABBABLE_DATE = new InjectionToken<WritableSignal<Date>>('Calendar2:TabbableDate');\n","import { computed, Directive, ElementRef, HostBinding, HostListener, inject, input } from '@angular/core';\nimport { add, addMonths, addYears, endOfWeek, startOfWeek, sub, subMonths, subYears } from 'date-fns';\nimport type { Duration } from 'date-fns';\nimport { WEEK_INFO } from '../calendar.token';\nimport { comparePeriods, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarMode } from './calendar-mode';\nimport { CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\n\nconst modeToDurationKey: Record<CalendarMode, keyof Duration> = {\n\tday: 'days',\n\tmonth: 'months',\n\tyear: 'years',\n};\n\n@Directive({\n\tselector: '[luCalendar2Cell]',\n})\nexport class Calendar2CellDirective {\n\t#host = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\t#tabbableDate = inject(CALENDAR_TABBABLE_DATE);\n\t#weekInfo = inject(WEEK_INFO);\n\n\t// Index of this day in the current week display row, not depending on locale, 0 is first day of week and 6 is last\n\tluCalendar2Cell = input.required<number>();\n\n\tluCalendar2Mode = input.required<CalendarMode>();\n\n\tluCalendar2Date = input.required<Date>();\n\n\t@HostBinding('tabindex')\n\tget tabindex(): 0 | -1 {\n\t\treturn this.isTabbableDate() ? 0 : -1;\n\t}\n\n\tisTabbableDate = computed(() => {\n\t\treturn comparePeriods(this.luCalendar2Mode(), this.luCalendar2Date(), this.#tabbableDate());\n\t});\n\n\t@HostListener('keydown', ['$event'])\n\tkeydown($event: Event): void {\n\t\t// See https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/#ex_label for keyboard\n\t\t// navigation standards on date pickers\n\t\tconst cellsPerRow = this.luCalendar2Mode() === 'day' ? 7 : 3;\n\t\tconst datePropertyToEdit = modeToDurationKey[this.luCalendar2Mode()];\n\t\tswitch (($event as KeyboardEvent).key) {\n\t\t\tcase 'ArrowRight':\n\t\t\t\tthis.#tabbableDate.set(add(this.luCalendar2Date(), { [datePropertyToEdit]: 1 }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tthis.#tabbableDate.set(sub(this.luCalendar2Date(), { [datePropertyToEdit]: 1 }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tthis.#tabbableDate.set(add(this.luCalendar2Date(), { [datePropertyToEdit]: cellsPerRow }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tthis.#tabbableDate.set(sub(this.luCalendar2Date(), { [datePropertyToEdit]: cellsPerRow }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tthis.#tabbableDate.set(startOfWeek(this.luCalendar2Date(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) }));\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tthis.#tabbableDate.set(endOfWeek(this.luCalendar2Date(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) }));\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tif (($event as KeyboardEvent).shiftKey) {\n\t\t\t\t\t\tthis.#tabbableDate.set(subYears(this.luCalendar2Date(), 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#tabbableDate.set(subMonths(this.luCalendar2Date(), 1));\n\t\t\t\t\t}\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tif (($event as KeyboardEvent).shiftKey) {\n\t\t\t\t\t\tthis.#tabbableDate.set(addYears(this.luCalendar2Date(), 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#tabbableDate.set(addMonths(this.luCalendar2Date(), 1));\n\t\t\t\t\t}\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfocus(): void {\n\t\tthis.#host.nativeElement.focus();\n\t}\n\n\tblur(): void {\n\t\tthis.#host.nativeElement.blur();\n\t}\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, LOCALE_ID, model, OnInit, output, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { LuTooltipTriggerDirective } from '@lucca-front/ng/tooltip';\nimport {\n\taddHours,\n\taddMonths,\n\taddYears,\n\teachDayOfInterval,\n\teachMonthOfInterval,\n\teachYearOfInterval,\n\tendOfDay,\n\tendOfDecade,\n\tendOfMonth,\n\tendOfWeek,\n\tendOfYear,\n\tisAfter,\n\tisSameDay,\n\tisSameMonth,\n\tisSameYear,\n\tisWithinInterval,\n\tlastDayOfMonth,\n\tstartOfDay,\n\tstartOfDecade,\n\tstartOfMonth,\n\tstartOfWeek,\n\tstartOfYear,\n\tsubMonths,\n\tsubYears,\n\tWeekOptions,\n} from 'date-fns';\nimport type { Interval } from 'date-fns';\nimport { WEEK_INFO } from '../calendar.token';\nimport { LU_DATE2_TRANSLATIONS } from '../date2.translate';\nimport { RepeatTimesDirective } from '../repeat-times.directive';\nimport { comparePeriods, getIntlWeekDay, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarCellInfo, CalendarMonthInfo, CalendarYearInfo } from './calendar-cell-info';\nimport { CalendarMode } from './calendar-mode';\nimport { Calendar2CellDirective } from './calendar2-cell.directive';\nimport { CALENDAR_CELLS, CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\nimport { CellStatus } from './cell-status';\nimport { DateRange } from './date-range';\n\nconst MODE_HIERARCHY: CalendarMode[] = ['day', 'month', 'year'];\n\n@Component({\n\tselector: 'lu-calendar2',\n\timports: [RepeatTimesDirective, Calendar2CellDirective, LuTooltipTriggerDirective],\n\ttemplateUrl: './calendar2.component.html',\n\tstyleUrl: './calendar2.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: CALENDAR_CELLS,\n\t\t\tuseFactory: () => inject(Calendar2Component).calendar2CellInstances,\n\t\t},\n\t\t{\n\t\t\tprovide: CALENDAR_TABBABLE_DATE,\n\t\t\tuseFactory: () => inject(Calendar2Component).tabbableDate,\n\t\t},\n\t],\n})\nexport class Calendar2Component implements OnInit {\n\t#locale = inject(LOCALE_ID);\n\t#weekInfo = inject(WEEK_INFO);\n\treadonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t#intlDateFormat = new Intl.DateTimeFormat(this.#locale, { month: 'long' });\n\t#intlDateYear = new Intl.DateTimeFormat(this.#locale, { year: 'numeric' });\n\n\t#intlDaysLong = new Intl.DateTimeFormat(this.#locale, { weekday: 'long' });\n\t#intlDaysShort = new Intl.DateTimeFormat(this.#locale, { weekday: 'short' });\n\t#intlRelativeDay = new Intl.RelativeTimeFormat(this.#locale, { numeric: 'auto' });\n\n\t#intlMonthsLong = new Intl.DateTimeFormat(this.#locale, { month: 'long' });\n\t#intlMonthsShort = new Intl.DateTimeFormat(this.#locale, { month: 'short' });\n\n\t#weekOptions: WeekOptions = { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) };\n\n\tintl = input(...intlInputOptions(LU_DATE2_TRANSLATIONS));\n\n\tshowOverflow = input(false, { transform: booleanAttribute });\n\n\tenableOverflow = input(false, { transform: booleanAttribute });\n\n\tremoveYearOverflow = input(false, { transform: booleanAttribute });\n\n\thideToday = input(false, { transform: booleanAttribute });\n\n\thasTodayButton = input(false, { transform: booleanAttribute });\n\n\thideWeekend = input(false, { transform: booleanAttribute });\n\n\tdisableModeChange = input(false, { transform: booleanAttribute });\n\n\t// Date used to init the component and as internal focus model\n\tdate = model.required<Date>();\n\n\ttabbableDate = model<Date | null>(null);\n\n\tmode = model<CalendarMode>('day');\n\n\tdisplayMode = model<CalendarMode | null>(null);\n\n\tranges = input<readonly DateRange[]>([]);\n\n\tgetCellInfo = input<(date: Date, displayMode: CalendarMode) => CellStatus>((_date: Date) => ({\n\t\tclasses: [],\n\t\tdisabled: false,\n\t}));\n\n\tmonth = computed(() => startOfMonth(this.date()));\n\n\tyear = computed(() => startOfYear(this.date()));\n\n\tdecade = computed(() => startOfDecade(this.date()));\n\n\tpreviousMonth = computed(() => subMonths(this.month(), 1));\n\n\tnextMonth = computed(() => addMonths(this.month(), 1));\n\n\tnextPage = output();\n\n\tpreviousPage = output();\n\n\tdateClicked = output<Date>();\n\n\tdateHovered = model<Date | null>(null);\n\n\ttodayLabel = this.#intlRelativeDay.format(0, 'day');\n\tthisMonthLabel = this.#intlRelativeDay.format(0, 'month');\n\tthisYearLabel = this.#intlRelativeDay.format(0, 'year');\n\n\tcalendar2CellInstances = viewChildren(Calendar2CellDirective);\n\n\tdaysOfWeek = eachDayOfInterval({\n\t\tstart: startOfWeek(new Date(), this.#weekOptions),\n\t\tend: endOfWeek(new Date(), this.#weekOptions),\n\t}).map((day) => ({\n\t\tlong: this.#intlDaysLong.format(day),\n\t\tshort: this.#intlDaysShort.format(day),\n\t}));\n\n\tmonthGridDisplay = computed(() => {\n\t\tconst daysOfMonth: CalendarCellInfo[] = eachDayOfInterval({\n\t\t\tstart: this.month(),\n\t\t\tend: endOfMonth(this.month()),\n\t\t}).map((date) => this.dateToCellInfo(date));\n\t\tconst daysByWeek = daysOfMonth.reduce<Record<number, CalendarCellInfo[]>>((acc, day) => {\n\t\t\tconst key = startOfWeek(day.date, this.#weekOptions).getTime();\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t[key]: [...(acc[key] || []), day],\n\t\t\t};\n\t\t}, {});\n\t\t// If we want to show days before and after this month\n\t\t// Use last week of previous month\n\t\tconst startOfPreviousOverflow = startOfWeek(lastDayOfMonth(this.previousMonth()), this.#weekOptions);\n\t\tconst previousOverflow = eachDayOfInterval({\n\t\t\tstart: startOfPreviousOverflow,\n\t\t\tend: endOfMonth(this.previousMonth()),\n\t\t}).map((date) => {\n\t\t\tif (this.showOverflow()) {\n\t\t\t\treturn this.dateToCellInfo(date, true);\n\t\t\t} else {\n\t\t\t\treturn this.dateToCellInfo(endOfMonth(date), true);\n\t\t\t}\n\t\t});\n\t\tif (daysByWeek[startOfPreviousOverflow.getTime()]) {\n\t\t\tdaysByWeek[startOfPreviousOverflow.getTime()] = [...previousOverflow, ...daysByWeek[startOfPreviousOverflow.getTime()]];\n\t\t}\n\t\t// Use first week of next month\n\t\tconst startOfNextMonthOverflow = startOfWeek(startOfMonth(this.nextMonth()), this.#weekOptions);\n\t\tconst endOfNextMonthOverflow = endOfWeek(startOfMonth(this.nextMonth()), this.#weekOptions);\n\t\tconst nextOverflow = eachDayOfInterval({\n\t\t\tstart: startOfMonth(this.nextMonth()),\n\t\t\tend: endOfNextMonthOverflow,\n\t\t}).map((date) => {\n\t\t\tif (this.showOverflow()) {\n\t\t\t\treturn this.dateToCellInfo(date, true);\n\t\t\t} else {\n\t\t\t\treturn this.dateToCellInfo(startOfMonth(date), true);\n\t\t\t}\n\t\t});\n\t\tif (daysByWeek[startOfNextMonthOverflow.getTime()]) {\n\t\t\tdaysByWeek[startOfNextMonthOverflow.getTime()] = [...daysByWeek[startOfNextMonthOverflow.getTime()], ...nextOverflow];\n\t\t}\n\t\treturn Object.keys(daysByWeek)\n\t\t\t.sort()\n\t\t\t.map((weekStart) => daysByWeek[+weekStart]);\n\t});\n\n\tyearGridDisplay = computed(() => {\n\t\tconst monthsOfYear: Date[] = eachMonthOfInterval({\n\t\t\tstart: this.year(),\n\t\t\tend: endOfYear(this.year()),\n\t\t});\n\t\treturn monthsOfYear\n\t\t\t.map((month) => {\n\t\t\t\treturn {\n\t\t\t\t\tdate: month,\n\t\t\t\t\tshort: this.#intlMonthsShort.format(month),\n\t\t\t\t\tlong: this.#intlMonthsLong.format(month),\n\t\t\t\t\t...this.dateToCellInfo(month),\n\t\t\t\t\tisCurrent: isSameMonth(new Date(), month),\n\t\t\t\t} as CalendarMonthInfo;\n\t\t\t})\n\t\t\t.reduce<CalendarMonthInfo[][]>((all, one, i) => {\n\t\t\t\tconst ch = Math.floor(i / 3);\n\t\t\t\tall[ch] = [...(all[ch] || []), one];\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t});\n\n\tdecadeGridDisplay = computed(() => {\n\t\tconst yearsOfDecade: Date[] = eachYearOfInterval({\n\t\t\tstart: this.removeYearOverflow() ? this.decade() : subYears(this.decade(), 1),\n\t\t\tend: this.removeYearOverflow() ? endOfDecade(this.decade()) : addYears(endOfDecade(this.decade()), 1),\n\t\t});\n\t\treturn yearsOfDecade\n\t\t\t.map((year) => {\n\t\t\t\treturn {\n\t\t\t\t\tdate: year,\n\t\t\t\t\t...this.dateToCellInfo(year),\n\t\t\t\t\tname: this.#intlDateYear.format(year),\n\t\t\t\t\tisCurrent: isSameYear(new Date(), year),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.reduce<CalendarYearInfo[][]>((all, one, i) => {\n\t\t\t\tconst ch = Math.floor(i / 3);\n\t\t\t\tall[ch] = [...(all[ch] || []), one];\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t});\n\n\tcurrentMonthLabel = computed(() => {\n\t\treturn this.#intlDateFormat.format(this.date());\n\t});\n\n\tcurrentYearLabel = computed(() => {\n\t\treturn this.#intlDateYear.format(this.date());\n\t});\n\n\tcurrentDecadeLabel = computed(() => {\n\t\treturn `${this.#intlDateYear.format(startOfDecade(this.decade()))} – ${this.#intlDateYear.format(endOfDecade(this.decade()))}`;\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (this.tabbableDate() === null) {\n\t\t\t\tthis.tabbableDate.set(this.date());\n\t\t\t}\n\t\t});\n\t}\n\n\tfocusTabbableDate(): void {\n\t\tthis.calendar2CellInstances()\n\t\t\t.find((cell) => cell.isTabbableDate())\n\t\t\t?.focus();\n\t}\n\n\tblurTabbableDate(): void {\n\t\tthis.calendar2CellInstances()\n\t\t\t.find((cell) => cell.isTabbableDate())\n\t\t\t?.blur();\n\t}\n\n\tclickToday() {\n\t\tthis.onCellClicked(startOfDay(new Date()));\n\t}\n\n\tngOnInit(): void {\n\t\t// On init, set display mode to the mode specified by component consumer\n\t\tif (this.displayMode() === null) {\n\t\t\tthis.displayMode.set(this.mode());\n\t\t}\n\t}\n\n\tonCellClicked(date: Date): void {\n\t\t// On cell clicked, if display mode is same as mode, emit value\n\t\t// Else, zoom in to new mode\n\t\tif (this.displayMode() === this.mode()) {\n\t\t\tthis.dateClicked.emit(date);\n\t\t} else {\n\t\t\t// Check that we are able to zoom in\n\t\t\tconst maxZoomLevel = MODE_HIERARCHY.indexOf(this.mode());\n\t\t\tconst currentZoomLevel = MODE_HIERARCHY.indexOf(this.displayMode());\n\t\t\tconst targetZoomLevel = currentZoomLevel - 1;\n\t\t\tif (targetZoomLevel >= 0 && targetZoomLevel >= maxZoomLevel) {\n\t\t\t\tconst newZoomLevel = MODE_HIERARCHY[targetZoomLevel];\n\t\t\t\tswitch (newZoomLevel) {\n\t\t\t\t\tcase 'year':\n\t\t\t\t\t\tthis.date.set(startOfDecade(date));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'month':\n\t\t\t\t\t\tthis.date.set(startOfYear(date));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'day':\n\t\t\t\t\t\tthis.date.set(startOfMonth(date));\n\t\t\t\t}\n\t\t\t\tthis.displayMode.set(newZoomLevel);\n\t\t\t}\n\t\t}\n\t}\n\n\tdateToCellInfo(date: Date, isOverflow = false): CalendarCellInfo {\n\t\t// This method is quite complex and packs a lot of logic, let's try to decompose and explain it.\n\n\t\t// First of all get cell status from the input, if the consumer needs to apply specific statuses to it\n\t\tconst status = this.getCellInfo()(date, this.displayMode());\n\n\t\t// We need to store a boolean for day mode, because some logic is specific to day display (like weekends for instance)\n\t\tconst isDayMode = this.displayMode() === 'day';\n\n\t\t// Keeping consumer's classes aside\n\t\tconst classes: string[] = status?.classes || [];\n\n\t\t// Let's grab the ranges in which this date is in, which includes the \"in progress\" one if it exists, using the current hovered date\n\t\tconst rangeInfo = this.getRangeInfo(date, this.displayMode(), isOverflow);\n\n\t\t// If the range includes classes, add them to our display classes\n\t\tif (rangeInfo?.class) {\n\t\t\tclasses.push(rangeInfo.class);\n\t\t}\n\n\t\t// Day specific logic\n\t\t// Is it weekend day? for is-dayOff class toggle\n\t\tconst isWeekend = isDayMode && this.#weekInfo.weekend.includes(getIntlWeekDay(date)) && !this.hideWeekend();\n\t\t// Is it first day of month? Mostly used for overflow display logic\n\t\tconst isFirstDayOfMonth = isDayMode && isSameDay(startOfMonth(date), rangeInfo?.range.start);\n\n\t\t// Is this the current period? Will match if same day as today, or same month in month display, or same year if year display\n\t\tconst isCurrent = comparePeriods(this.displayMode(), new Date(), date) && !this.hideToday();\n\n\t\t// Are we currently in a range that's being created (start date selected, end date is being hovered)\n\t\tconst isInProgress = rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() !== null;\n\n\t\t// Progress flags\n\t\tlet isProgressBody = false;\n\t\tlet isProgressStart = !!rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() === null;\n\t\tlet isProgressEnd = !!rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() === null;\n\t\t// Specific case for when start is == end and we're hovering it\n\t\tlet isSingleDayInProgress = false;\n\n\t\tif (isInProgress) {\n\t\t\tlet start = rangeInfo?.range.start;\n\t\t\t// If we're in day mode, depending on if first day of month or not, we want to consider the start or the end of the day,\n\t\t\t// To make sure we don't conflict with overflow\n\t\t\tif (isDayMode) {\n\t\t\t\tstart = isFirstDayOfMonth ? endOfDay(rangeInfo.range.start) : startOfDay(rangeInfo.range.start);\n\t\t\t}\n\t\t\tconst hoveredRange: Interval = {\n\t\t\t\tstart,\n\t\t\t\tend: startOfDay(this.dateHovered()),\n\t\t\t};\n\n\t\t\t// If start is after end, fix this by inverting the two, we always want to work with start before end\n\t\t\tif (isAfter(hoveredRange.start, hoveredRange.end)) {\n\t\t\t\tlet newStart = hoveredRange.end;\n\t\t\t\tconst newStartIsFirstDayOfMonth = isSameDay(startOfMonth(hoveredRange.end), hoveredRange.end);\n\t\t\t\tif (isDayMode) {\n\t\t\t\t\tnewStart = newStartIsFirstDayOfMonth ? endOfDay(hoveredRange.end) : startOfDay(hoveredRange.end);\n\t\t\t\t}\n\t\t\t\thoveredRange.end = rangeInfo.range.start;\n\t\t\t\thoveredRange.start = newStart;\n\t\t\t}\n\n\t\t\t// if we're working on overflow for after the last day of a month, we want to use end of day as comparison date\n\t\t\tconst isEndOfMonthOverflow = isOverflow && isSameDay(date, startOfMonth(date));\n\n\t\t\tif (isEndOfMonthOverflow) {\n\t\t\t\thoveredRange.end = endOfDay(hoveredRange.end);\n\t\t\t}\n\t\t\t// We're progress body if middle of day is in the current range\n\t\t\tisProgressBody = isWithinInterval(addHours(startOfDay(date), 12), hoveredRange);\n\t\t\t// Overflow cannot be start status for CSS, same for end\n\t\t\tisProgressStart = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.start as Date);\n\t\t\tisProgressEnd = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.end as Date);\n\n\t\t\t// This is the case where you clicked a first date and then are hovering it, which requires a specific case for CSS\n\t\t\tif (isSameDay(rangeInfo.range.start, this.dateHovered())) {\n\t\t\t\tisSingleDayInProgress = !isOverflow && isSameDay(hoveredRange.start, hoveredRange.end) && isSameDay(hoveredRange.start, this.dateHovered());\n\t\t\t}\n\t\t}\n\n\t\tconst isSelected = status.selected || (!!rangeInfo?.range && !isInProgress);\n\n\t\treturn {\n\t\t\tday: date.getDate(),\n\t\t\tstatus,\n\t\t\tlabel: status.label || rangeInfo?.label,\n\t\t\tdate,\n\t\t\trangeInfo,\n\t\t\tisWeekend,\n\t\t\tisCurrent,\n\t\t\tisOverflow,\n\t\t\tisSelected,\n\t\t\tnoButton: isOverflow && !this.showOverflow(),\n\t\t\tdisabled: status?.disabled || (isOverflow && !this.enableOverflow()),\n\t\t\t// Compile everything into a list of classes for CSS\n\t\t\tclasses: {\n\t\t\t\t'is-daysOff': isWeekend,\n\t\t\t\t'is-overflow': isOverflow,\n\t\t\t\t'is-current': isCurrent,\n\t\t\t\t'is-start': !isOverflow && (rangeInfo?.isStart || status.selected) && !isInProgress,\n\t\t\t\t'is-end': !isOverflow && (rangeInfo?.isEnd || status.selected) && !isInProgress,\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t// Range in progress statuses\n\t\t\t\t'is-selectionInProgress': isProgressBody,\n\t\t\t\t'is-startInProgress': isProgressStart,\n\t\t\t\t'is-endInProgress': isProgressEnd,\n\t\t\t\t'is-singleDayInProgress': isSingleDayInProgress,\n\n\t\t\t\t...classes.reduce((acc, key) => ({ ...acc, [key]: true }), {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tgetRangeInfo(date: Date, scope: CalendarMode, isOverflow = false) {\n\t\tconst range: DateRange | undefined = this.ranges().find((range: DateRange) => {\n\t\t\tconst isSameScope = (range.scope || 'day') === scope;\n\t\t\tif (isSameScope) {\n\t\t\t\tif (range.end) {\n\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\tstart: isOverflow ? endOfDay(range.start) : startOfDay(range.start),\n\t\t\t\t\t\tend: isOverflow ? startOfDay(range.end) : range.end,\n\t\t\t\t\t});\n\t\t\t\t} else if (this.dateHovered() !== null) {\n\t\t\t\t\t// Nominal case: end is after start\n\t\t\t\t\tif (isAfter(this.dateHovered(), startOfDay(range.start))) {\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(range.start),\n\t\t\t\t\t\t\tend: endOfDay(this.dateHovered()),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// When user clicked end date first and now wants to select a start date\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(this.dateHovered()),\n\t\t\t\t\t\t\tend: endOfDay(range.start),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (this.mode()) {\n\t\t\t\t\t\tcase 'day':\n\t\t\t\t\t\t\treturn isSameDay(date, range.start);\n\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\treturn isSameMonth(date, range.start);\n\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\treturn isSameYear(date, range.start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isStart: boolean = range && isSameDay(date, range.start);\n\t\tconst isEnd: boolean = range && range.end && isSameDay(date, range.end);\n\n\t\treturn {\n\t\t\trange,\n\t\t\tisStart,\n\t\t\tisEnd,\n\t\t\tlabel: range?.label,\n\t\t\tclass: range?.class,\n\t\t};\n\t}\n}\n","<div class=\"calendar\">\n\t@switch (displayMode()) {\n\t\t@case (\"day\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-name\" aria-live=\"polite\">\n\t\t\t\t@if (disableModeChange()) {\n\t\t\t\t\t{{ currentMonthLabel() }}&ngsp; {{ currentYearLabel() }}\n\t\t\t\t} @else {\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('month')\">{{ currentMonthLabel() }}</button>&ngsp;\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('year')\">{{ currentYearLabel() }}</button>\n\t\t\t\t}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-name\">\n\t\t\t\t<thead class=\"calendar-table-head\">\n\t\t\t\t\t<tr class=\"calendar-table-head-row\">\n\t\t\t\t\t\t@for (day of daysOfWeek; track day.long) {\n\t\t\t\t\t\t\t<th class=\"calendar-table-head-row-cell\" scope=\"col\">\n\t\t\t\t\t\t\t\t<span [attr.data-content-after]=\"day.short.substring(0, 1)\" aria-hidden=\"true\"></span>\n\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ day.long }}</span>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (week of monthGridDisplay(); track $index; let isLastWeek = $last) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (day of week; track dayIndex; let dayIndex = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"day.isOverflow ? null : dateHovered.set(day.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"day.isOverflow ? null : dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"day.isSelected && !day.isOverflow\"\n\t\t\t\t\t\t\t\t\t[class]=\"day.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@if (!day.noButton) {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"dayIndex\"\n\t\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"day.date\"\n\t\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"day\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"day.disabled ? 'true' : null\"\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"day.disabled ? null : onCellClicked(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"day.disabled ? null : onCellClicked(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(focus)=\"day.isOverflow ? null : dateHovered.set(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(blur)=\"day.isOverflow ? null : dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t\t[luTooltip]=\"day.label\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{{ day.day }}\n\t\t\t\t\t\t\t\t\t\t\t@if (day.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ todayLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if (day.isWeekend) {\n\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"calendar-table-body-row-cell-action-stripes\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<use href=\"#calendar-stripes-symbol\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<td class=\"calendar-table-body-row-cell is-overflow\" *luRepeatTimes=\"isLastWeek ? 7 - week.length : 0\"></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t\t<tr class=\"calendar-table-body-row\" *luRepeatTimes=\"6 - monthGridDisplay().length\">\n\t\t\t\t\t\t<td class=\"calendar-table-body-row-cell is-overflow\" *luRepeatTimes=\"7\"></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t@if (hasTodayButton()) {\n\t\t\t\t<div class=\"calendar-divider divider\"></div>\n\t\t\t\t<button class=\"calendar-todayLink link\" type=\"button\" (click)=\"clickToday()\">{{ todayLabel }}</button>\n\t\t\t}\n\t\t\t<svg class=\"calendar-stripes\" xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" aria-hidden=\"true\">\n\t\t\t\t<symbol id=\"calendar-stripes-symbol\" viewBox=\"0 0 60 60\">\n\t\t\t\t\t<path\n\t\t\t\t\t\tclass=\"calendar-stripes-symbol-path\"\n\t\t\t\t\t\td=\"m-41.82 43.03 84.85-84.85.53.53-84.85 84.85zm2.12 2.12L45.15-39.7l.53.53-84.85 84.85zm2.12 2.12\n\t\t\t84.85-84.85.53.53-84.85 84.85zm2.12 2.13L49.4-35.47l.53.53-84.85 84.85zm2.12 2.11\n\t\t\t84.85-84.85.54.53-84.86 84.86zm2.12 2.13 84.86-84.86.53.53-84.86 84.86zm2.12\n\t\t\t2.12L55.76-29.1l.53.53-84.86 84.86zm2.13 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12L60-24.85l.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12L64.24-20.6l.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.13L68.5-16.37l.53.53-84.86 84.86zm2.12 2.11 84.86-84.85.53.53-84.86 84.86zm2.13 2.13\n\t\t\t84.85-84.85.53.53-84.85 84.85zm2.12 2.12L74.85-10l.53.53-84.85 84.85zm2.12\n\t\t\t2.12L76.97-7.88l.53.53L-7.35 77.5zm2.12 2.13L79.09-5.77l.53.53-84.85 84.85zm2.12\n\t\t\t2.11L81.21-3.64l.53.53L-3.1 81.74zm2.12 2.12L83.33-1.52l.53.53L-.99\n\t\t\t83.86zM.6 85.46 85.46.6l.53.53L1.13 86zm2.12 2.12L87.58 2.72l.53.53L3.25 88.11zm2.13 2.12L89.7\n\t\t\t4.85l.53.53L5.38 90.23zm2.12 2.12L91.82 6.97l.53.53L7.5 92.35zm2.12 2.12L93.94 9.1l.53.53L9.62\n\t\t\t94.47zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12 84.86-84.85.53.53-84.86 84.86z\"\n\t\t\t\t\t/>\n\t\t\t\t</symbol>\n\t\t\t</svg>\n\t\t}\n\t\t@case (\"month\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-year-name\">\n\t\t\t\t@if (disableModeChange()) {\n\t\t\t\t\t{{ currentYearLabel() }}\n\t\t\t\t} @else {\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('year')\">{{ currentYearLabel() }}</button>\n\t\t\t\t}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-year-name\">\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (quarter of yearGridDisplay(); track $index) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (month of quarter; track month.date.getTime(); let index = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"month.status.selected || !!month.rangeInfo?.range\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"dateHovered.set(month.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[class]=\"month.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t[attr.data-content-after]=\"month.short\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"index\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"month.date\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"month.status.disabled\"\n\t\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(month.date)\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"onCellClicked(month.date)\"\n\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"onCellClicked(month.date)\"\n\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"month\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ month.long }}</span>\n\t\t\t\t\t\t\t\t\t\t@if (month.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ thisMonthLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t}\n\t\t@case (\"year\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-decade-name\">\n\t\t\t\t{{ currentDecadeLabel() }}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-decade-name\">\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (row of decadeGridDisplay(); track $index) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (year of row; track year.date.getTime(); let index = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"year.status.selected || !!year.rangeInfo?.range\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"dateHovered.set(year.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[class]=\"year.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"index\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"year.status.disabled\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"year.date\"\n\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"year\"\n\t\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(year.date)\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"onCellClicked(year.date)\"\n\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"onCellClicked(year.date)\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ year.name }}\n\t\t\t\t\t\t\t\t\t\t@if (year.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ thisYearLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t}\n\t}\n</div>\n","import { CalendarMode } from './public-api';\n\nexport function getDateFormat(locale: string, mode: CalendarMode = 'day'): string {\n\treturn new Intl.DateTimeFormat(locale)\n\t\t.formatToParts(new Date('01/01/2024'))\n\t\t.reduce((acc, part) => {\n\t\t\tif (part.type === 'day' && mode === 'day') {\n\t\t\t\treturn `${acc}${'d'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'month' && mode !== 'year') {\n\t\t\t\treturn `${acc}${'M'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'year') {\n\t\t\t\treturn `${acc}${'y'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'literal') {\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, '')\n\t\t.replace(/^\\/+/, '');\n}\n\nexport function getSeparator(locale: string): string {\n\treturn new Intl.DateTimeFormat(locale).formatToParts(new Date('01/01/2024')).find((part) => part.type === 'literal')?.value || '/';\n}\n\n// Warning: it works on Latin languages, but deserves to be tested on non-Latin languages\nexport function getLocalizedDateFormat(locale: string, period: 'year' | 'month' | 'day' = 'day'): string {\n\tconst letterLocalizedForDay = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'day')[2]['value'].charAt(1).toUpperCase();\n\tconst letterLocalizedForMonth = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'month')[2]['value'].charAt(1).toUpperCase();\n\tconst letterLocalizedForYear = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'year')[2]['value'].charAt(1).toUpperCase();\n\n\tconst intlConfig: Intl.DateTimeFormatOptions = {\n\t\tyear: 'numeric',\n\t};\n\n\tif (period === 'month' || period === 'day') {\n\t\tintlConfig.month = 'numeric';\n\t}\n\n\tif (period === 'day') {\n\t\tintlConfig.day = 'numeric';\n\t}\n\n\treturn new Intl.DateTimeFormat(locale, intlConfig).formatToParts(new Date('01/01/2024')).reduce((acc, part) => {\n\t\tswitch (part.type) {\n\t\t\tcase 'day':\n\t\t\t\treturn `${acc}${letterLocalizedForDay.repeat(part.value.length)}`;\n\t\t\tcase 'month':\n\t\t\t\treturn `${acc}${letterLocalizedForMonth.repeat(part.value.length)}`;\n\t\t\tcase 'year':\n\t\t\t\treturn `${acc}${letterLocalizedForYear.repeat(part.value.length)}`;\n\t\t\tcase 'literal':\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t}\n\t\treturn acc;\n\t}, '');\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, inject, input, LOCALE_ID, model, output, signal } from '@angular/core';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { addMonths, addYears, isAfter, isBefore, isSameMonth, startOfDay, startOfMonth } from 'date-fns';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { CellStatus } from './calendar2/cell-status';\nimport { DateRange, DateRangeInput } from './calendar2/date-range';\nimport { getDateFormat, getLocalizedDateFormat, getSeparator } from './date-format';\nimport { DATE_FORMAT, DateFormat } from './date.const';\nimport { LU_DATE2_TRANSLATIONS } from './date2.translate';\nimport { transformDateInputToDate, transformDateRangeInputToDateRange } from './utils';\n\n@Component({\n\tselector: '',\n\ttemplate: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AbstractDateComponent {\n\tprotected locale = inject(LOCALE_ID);\n\t// Contains the current date format (like dd/mm/yy etc) based on current locale\n\tprotected dateFormat = getDateFormat(this.locale);\n\tprotected separator = getSeparator(this.locale);\n\tprotected dateFormatWithMode = computed(() => getDateFormat(this.locale, this.mode()));\n\tintlDateTimeFormat = new Intl.DateTimeFormat(this.locale);\n\n\tintlDateTimeFormatMonth = new Intl.DateTimeFormat(this.locale, { month: 'numeric', year: 'numeric' });\n\tintlDateTimeFormatYear = new Intl.DateTimeFormat(this.locale, { year: 'numeric' });\n\n\tintl = input(...intlInputOptions(LU_DATE2_TRANSLATIONS));\n\n\tonTouched?: () => void;\n\tdisabled = signal<boolean>(false);\n\n\treadonly format = input<DateFormat>(DATE_FORMAT.DATE);\n\tprotected inDateISOFormat = computed(() => this.format() === DATE_FORMAT.DATE_ISO);\n\n\treadonly ranges = input([], { transform: (v: readonly DateRange[] | readonly DateRangeInput[]) => v.map(transformDateRangeInputToDateRange) });\n\treadonly hideToday = input(false, { transform: booleanAttribute });\n\treadonly hasTodayButton = input(false, { transform: booleanAttribute });\n\treadonly clearable = input(null, { transform: booleanAttribute });\n\treadonly clearBehavior = input<'clear' | 'reset'>('clear');\n\n\treadonly mode = input<CalendarMode>('day');\n\treadonly hideWeekend = input(false, { transform: booleanAttribute });\n\n\treadonly getCellInfo = input<((day: Date, mode: CalendarMode) => CellStatus) | null>();\n\n\treadonly min = input(new Date('1/1/1000'), {\n\t\ttransform: transformDateInputToDate,\n\t});\n\treadonly max = input(null, {\n\t\ttransform: transformDateInputToDate,\n\t});\n\treadonly focusedDate = input(null, {\n\t\ttransform: transformDateInputToDate,\n\t});\n\n\tcalendarMode = model<CalendarMode>();\n\n\treadonly panelOpened = output<void>();\n\n\treadonly panelClosed = output<void>();\n\n\treadonly dateFormatLocalized = computed(() => getLocalizedDateFormat(this.locale, this.mode()));\n\n\tprotected currentDate = signal(new Date());\n\n\tprotected tabbableDate = signal<Date | null>(null);\n\n\tprotected constructor() {\n\t\teffect(() => {\n\t\t\tconst focusedDate = this.focusedDate();\n\t\t\tif (focusedDate) {\n\t\t\t\tthis.currentDate.set(startOfDay(focusedDate));\n\t\t\t}\n\t\t});\n\t}\n\n\tisInMinMax(date: Date, mode: CalendarMode): boolean {\n\t\treturn this.isAfterMin(date, mode) && this.isBeforeMax(date, mode);\n\t}\n\n\tisAfterMin(date: Date, mode: CalendarMode): boolean {\n\t\tif (!this.min()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.min().getTime() <= date.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isBefore(startOfMonth(this.min()), startOfMonth(date)) || isSameMonth(this.min(), date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.min().getFullYear() <= date.getFullYear();\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tisBeforeMax(date: Date, mode: CalendarMode): boolean {\n\t\tif (!this.max()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.max().getTime() >= date.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isAfter(startOfMonth(this.max()), startOfMonth(date)) || isSameMonth(this.max(), date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.max().getFullYear() >= date.getFullYear();\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tisValidDate(date: Date): boolean {\n\t\treturn !!date && !isNaN(date.getTime());\n\t}\n\n\tprev(mode: CalendarMode) {\n\t\tthis.move(-1, mode);\n\t}\n\n\tnext(mode: CalendarMode) {\n\t\tthis.move(1, mode);\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tmove(direction: 1 | -1, mode: CalendarMode): void {\n\t\tswitch (mode) {\n\t\t\tcase 'year':\n\t\t\t\tthis.currentDate.set(addYears(this.currentDate(), direction * 10));\n\t\t\t\tthis.tabbableDate.set(addYears(this.tabbableDate(), direction * 10));\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\tthis.currentDate.set(addYears(this.currentDate(), direction));\n\t\t\t\tthis.tabbableDate.set(addYears(this.tabbableDate(), direction));\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\tthis.currentDate.set(addMonths(this.currentDate(), direction));\n\t\t\t\tthis.tabbableDate.set(addMonths(this.tabbableDate(), direction));\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n","import { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostBinding,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tsignal,\n\tuntracked,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgModel, Validator } from '@angular/forms';\nimport { LuccaIcon } from '@lucca-front/icons';\nimport { ClearComponent } from '@lucca-front/ng/clear';\nimport { isNil, LuClass, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills';\nimport { InputDirective, PresentationDisplayDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { isSameDay, parse, startOfDay } from 'date-fns';\nimport { AbstractDateComponent } from '../abstract-date-component';\nimport { CalendarMode } from '../calendar2/calendar-mode';\nimport { Calendar2Component } from '../calendar2/calendar2.component';\nimport { CellStatus } from '../calendar2/cell-status';\nimport { comparePeriods, startOfPeriod, transformDateInputToDate, transformDateToDateISO } from '../utils';\n\nexport type DateInputValidatorErrorType = {\n\tmin: true;\n\tmax: true;\n\tdate: true;\n};\n\n@Component({\n\tselector: 'lu-date-input',\n\timports: [PopoverDirective, Calendar2Component, IconComponent, InputDirective, NgTemplateOutlet, FilterPillDisplayerDirective, ClearComponent, PresentationDisplayDirective],\n\ttemplateUrl: './date-input.component.html',\n\tstyleUrl: './date-input.component.scss',\n\thost: {\n\t\tclass: 'dateField',\n\t},\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: FILTER_PILL_INPUT_COMPONENT,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t},\n\t\tLuClass,\n\t],\n})\nexport class DateInputComponent extends AbstractDateComponent implements OnInit, ControlValueAccessor, Validator, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\t#injector = inject(Injector);\n\tngControl: NgControl; // Initialized in ngOnInit\n\n\t// CVA stuff\n\t#onChange?: (value: Date | null) => void;\n\n\t#luClass = inject(LuClass);\n\n\tautocomplete = input<AutoFill>('off');\n\n\tplaceholder = input<string>();\n\n\tdisableOverflow = input(false, { transform: booleanAttribute });\n\thideOverflow = input(false, { transform: booleanAttribute });\n\twidthAuto = input(false, { transform: booleanAttribute });\n\n\tfilterPillDisabled = signal(false);\n\n\tpopoverPositions: ConnectionPositionPair[] = [\n\t\tnew ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, -8, 0),\n\t\tnew ConnectionPositionPair(\n\t\t\t{ originX: 'start', originY: 'top' },\n\t\t\t{\n\t\t\t\toverlayX: 'start',\n\t\t\t\toverlayY: 'bottom',\n\t\t\t},\n\t\t\t-8,\n\t\t\t-32,\n\t\t),\n\t];\n\n\tinputFocused = signal(false);\n\n\tselectedDate = signal<Date | null>(null);\n\n\tinitialValue = signal<Date | null>(undefined);\n\tdateFromWriteValue = signal<Date | null>(null);\n\n\tcalendar = viewChild(Calendar2Component);\n\n\tinputRef = viewChild<ElementRef<HTMLInputElement>>('date');\n\n\tdisplayValue = computed(() => {\n\t\tconst textInput = this.userTextInput();\n\t\tif (textInput !== 'ɵ') {\n\t\t\tconst parsedInput = parse(textInput, this.dateFormatWithMode(), startOfDay(new Date()));\n\t\t\tif (this.isValidDate(parsedInput) && this.inputFocused()) {\n\t\t\t\treturn textInput;\n\t\t\t}\n\t\t}\n\t\tif (this.selectedDate() && this.isValidDate(this.selectedDate())) {\n\t\t\tlet formatter: Intl.DateTimeFormat;\n\t\t\tswitch (this.mode()) {\n\t\t\t\tcase 'day':\n\t\t\t\t\tformatter = this.intlDateTimeFormat;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'month':\n\t\t\t\t\tformatter = this.intlDateTimeFormatMonth;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'year':\n\t\t\t\t\tformatter = this.intlDateTimeFormatYear;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn formatter.format(this.selectedDate());\n\t\t}\n\t\t// If we are initializing the component, we don't want to display the value\n\t\tif (textInput === 'ɵ') {\n\t\t\treturn '';\n\t\t}\n\t\treturn textInput;\n\t});\n\n\t// We need to use a \"magic key\" here to avoid sending a null value change on initialization\n\tuserTextInput = signal<string>('ɵ');\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: this.selectedDate() && this.calendarMode() === mode && comparePeriods(mode, date, this.selectedDate()),\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\tpreviousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\tnextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t@HostBinding('class.mod-filterPill')\n\tisFilterPill = false;\n\n\t@HostBinding('class.mod-auto')\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\tisFilterPillEmpty = computed(() => !this.selectedDate());\n\tisFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\t#defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\teffect(() => {\n\t\t\tconst nativeElement = this.inputRef()?.nativeElement;\n\t\t\tif (nativeElement) {\n\t\t\t\tconst cursorPositionBefore = nativeElement.selectionStart ?? 0;\n\t\t\t\tconst displayValue = this.displayValue();\n\t\t\t\tnativeElement.value = this.displayValue();\n\t\t\t\tif (displayValue.endsWith(this.separator)) {\n\t\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore + 1, cursorPositionBefore + 1);\n\t\t\t\t} else {\n\t\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore, cursorPositionBefore);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst inputValue = this.userTextInput();\n\t\t\t// If we are initializing the component, we don't want to parse the value\n\t\t\tif (inputValue === 'ɵ') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (inputValue.length > 0) {\n\t\t\t\tlet parsed: Date;\n\t\t\t\ttry {\n\t\t\t\t\tparsed = parse(inputValue, this.dateFormatWithMode(), startOfDay(new Date()));\n\t\t\t\t} catch {\n\t\t\t\t\t/* not a correct date */\n\t\t\t\t}\n\t\t\t\tif (parsed instanceof Date && parsed.getFullYear() > 999) {\n\t\t\t\t\tthis.selectedDate.set(startOfDay(parsed));\n\t\t\t\t\tthis.currentDate.set(startOfDay(parsed));\n\t\t\t\t\tthis.tabbableDate.set(startOfDay(parsed));\n\t\t\t\t} else if (!this.isFilterPill) {\n\t\t\t\t\tthis.onTouched?.();\n\t\t\t\t\tthis.selectedDate.set(parsed);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.selectedDate.set(null);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tif (!this.#safeCompareDate(untracked(this.dateFromWriteValue), this.selectedDate())) {\n\t\t\t\tthis.#onChange?.(this.selectedDate());\n\t\t\t\tthis.dateFromWriteValue.set(null);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.#luClass.setState({\n\t\t\t\t'mod-day': this.mode() === 'day',\n\t\t\t\t'mod-month': this.mode() === 'month',\n\t\t\t\t'mod-year': this.mode() === 'year',\n\t\t\t});\n\t\t});\n\n\t\tɵeffectWithDeps([this.mode, this.calendarMode], (mode, calendarMode) => {\n\t\t\tif (mode && isNil(calendarMode)) {\n\t\t\t\tthis.calendarMode.set(mode);\n\t\t\t}\n\t\t});\n\n\t\tɵeffectWithDeps([this.calendarMode, this.tabbableDate], (calendarMode, tabbableDate) => {\n\t\t\tif (tabbableDate && !comparePeriods(calendarMode, tabbableDate, this.currentDate())) {\n\t\t\t\tthis.currentDate.set(startOfPeriod(calendarMode, tabbableDate));\n\t\t\t}\n\t\t\tif (!this.isNavigationButtonFocused && !this.inputFocused()) {\n\t\t\t\tthis.calendar()?.blurTabbableDate();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.ngControl = this.#injector.get(NgControl);\n\t}\n\n\t#safeCompareDate(a: Date, b: Date): boolean {\n\t\treturn a === b || (!!a && !!b && isSameDay(a, b));\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.filterPillPopoverCloseFn = closeFn;\n\t}\n\n\tenableFilterPillMode(): void {\n\t\tthis.isFilterPill = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t}\n\n\tclearFilterPillValue(): void {\n\t\tthis.clear();\n\t}\n\n\tgetDefaultFilterPillIcon(): LuccaIcon {\n\t\treturn 'calendarDate';\n\t}\n\n\topenPopover(ref: PopoverDirective): void {\n\t\tif (!this.isFilterPill) {\n\t\t\tref.openPopover(true, true);\n\t\t\t// Once popover is opened, aka in the next CD cycle, focus current tabbable date\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t});\n\t\t}\n\t}\n\n\tarrowDown(popoverRef: PopoverDirective) {\n\t\tif (this.isFilterPill) {\n\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t} else {\n\t\t\tif (popoverRef.opened()) {\n\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t} else {\n\t\t\t\tthis.openPopover(popoverRef);\n\t\t\t}\n\t\t}\n\t}\n\n\tspaceDown(event: Event, popoverRef: PopoverDirective) {\n\t\tif (this.userTextInput()?.length === 0) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.openPopover(popoverRef);\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl<Date | string | null>): Partial<DateInputValidatorErrorType> | null {\n\t\t// null is not an error but means we'll skip everything else, we'll let the presence of a\n\t\t// Validators.required (or not) decide if it's an error.\n\t\tif (control.value === null || control.value === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\tconst date = transformDateInputToDate(control.value);\n\t\t// try to parse the display value cause formControl.value is undefined if date is not parsable\n\t\ttry {\n\t\t\tparse(this.displayValue(), this.dateFormatWithMode(), startOfDay(new Date()));\n\t\t} catch {\n\t\t\t/* not a correct date */\n\t\t\treturn { date: true };\n\t\t}\n\t\t// Check date validity\n\t\tif (!this.isValidDate(date)) {\n\t\t\treturn { date: true };\n\t\t}\n\t\t// Check min and max\n\t\tif (this.min() && !this.isAfterMin(date, this.mode())) {\n\t\t\treturn { min: true };\n\t\t} else if (this.max() && !this.isBeforeMax(date, this.mode())) {\n\t\t\treturn { max: true };\n\t\t}\n\t\t// Everything is valid\n\t\treturn null;\n\t}\n\n\twriteValue(date: Date | string | null): void {\n\t\tif (this.ngControl instanceof NgModel && isNil(this.#onChange)) {\n\t\t\t// avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-1310420293\n\t\t\treturn;\n\t\t}\n\n\t\tconst _date = transformDateInputToDate(date);\n\n\t\tif (this.initialValue() === undefined) {\n\t\t\tthis.initialValue.set(_date);\n\t\t}\n\n\t\tif (date != null) {\n\t\t\tconst start = startOfDay(_date);\n\t\t\tthis.dateFromWriteValue.set(start);\n\t\t\tthis.selectedDate.set(start);\n\t\t\tthis.currentDate.set(start);\n\t\t} else {\n\t\t\tthis.reset();\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: Date | string | null) => void): void {\n\t\tthis.#onChange = (date: Date | null) => {\n\t\t\tfn(date && this.inDateISOFormat() && this.isValidDate(date) ? transformDateToDateISO(date) : date);\n\t\t};\n\t}\n\n\toverride setDisabledState(isDisabled: boolean) {\n\t\tthis.filterPillDisabled.set(isDisabled);\n\t\tsuper.setDisabledState(isDisabled);\n\t}\n\n\treset(): Date | null {\n\t\tconst newValue = this.clearBehavior() === 'reset' ? this.initialValue() : null;\n\t\tthis.dateFromWriteValue.set(newValue);\n\t\tthis.selectedDate.set(newValue);\n\t\treturn newValue;\n\t}\n\n\tclear() {\n\t\tconst newValue = this.reset();\n\t\tthis.#onChange?.(newValue);\n\t\tthis.onTouched?.();\n\t}\n\n\tcurrentDateChangeFromCalendar(date: Date): void {\n\t\tthis.tabbableDate.set(date);\n\t\tthis.currentDate.set(date);\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tthis.selectedDate.set(date);\n\t\tthis.currentDate.set(date);\n\t\tthis.tabbableDate.set(date);\n\t\tif (!this.isFilterPill) {\n\t\t\tpopoverRef.close();\n\t\t\tthis.inputRef()?.nativeElement.focus();\n\t\t}\n\t\tthis.filterPillPopoverCloseFn?.();\n\t}\n\n\tinputBlurred(): void {\n\t\tthis.onTouched?.();\n\t\tthis.inputFocused.set(false);\n\t\tthis.userTextInput.set('ɵ');\n\t}\n}\n","@if (isFilterPill) {\n\t<label for=\"dateInput\" class=\"pr-u-mask\">{{ intl().pickDate }}</label>\n}\n<div class=\"textField dateField-textField\" #popoverAnchor>\n\t<div class=\"textField-input\">\n\t\t<input\n\t\t\ttype=\"text\"\n\t\t\tid=\"dateInput\"\n\t\t\t#date\n\t\t\tluInput\n\t\t\tclass=\"textField-input-value\"\n\t\t\t(input)=\"userTextInput.set(date.value)\"\n\t\t\t(blur)=\"inputBlurred()\"\n\t\t\t(focus)=\"inputFocused.set(true)\"\n\t\t\taria-haspopup=\"true\"\n\t\t\trole=\"combobox\"\n\t\t\t(click)=\"popoverRef.openPopover(true, true)\"\n\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef)\"\n\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t(keydown.space)=\"spaceDown($event, popoverRef)\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[attr.placeholder]=\"placeholder() || dateFormatLocalized()\"\n\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t/>\n\n\t\t<div class=\"textField-input-affix\">\n\t\t\t@if (clearable() && !disabled() && (clearBehavior() === \"clear\" ? date.value !== \"\" : selectedDate() !== initialValue())) {\n\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); date.focus()\">{{ intl().clear }}</lu-clear>\n\t\t\t}\n\t\t\t@if (isFilterPill && !isFilterPillEmpty()) {\n\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); date.focus()\">{{ intl().clear }}</lu-clear>\n\t\t\t}\n\t\t\t<button\n\t\t\t\t[luPopover2]=\"calendar\"\n\t\t\t\t[luPopoverAnchor]=\"popoverAnchor\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[luPopoverNoCloseButton]=\"true\"\n\t\t\t\t[luPopoverDisabled]=\"isFilterPill\"\n\t\t\t\t#popoverRef=\"luPopover2\"\n\t\t\t\t[customPositions]=\"popoverPositions\"\n\t\t\t\t(luPopoverClosed)=\"panelClosed.emit()\"\n\t\t\t\t(luPopoverOpened)=\"panelOpened.emit()\"\n\t\t\t\ttabindex=\"-1\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"button mod-onlyIcon mod-ghost textField-input-affix-toggle\"\n\t\t\t>\n\t\t\t\t<lu-icon [icon]=\"'calendarDate'\" [alt]=\"intl().pickDate\" />\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n\n@if (isFilterPill) {\n\t<ng-container *ngTemplateOutlet=\"calendar\" />\n}\n\n<div *luFilterPillDisplayer>{{ displayValue() }}</div>\n\n<ng-template #calendar>\n\t<div class=\"calendarWrapper\">\n\t\t<div class=\"calendarWrapper-navigation pr-u-left0\">\n\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"prev(calendarMode())\" #previousButtonRef>\n\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronLeft\"></span><span class=\"pr-u-mask\">{{ intl().previous }}</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"calendarWrapper-navigation pr-u-right0\">\n\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"next(calendarMode())\" #nextButtonRef>\n\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronRight\"></span><span class=\"pr-u-mask\"> {{ intl().next }}</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"calendarWrapper-content\" tabindex=\"-1\">\n\t\t\t<lu-calendar2\n\t\t\t\t[enableOverflow]=\"!disableOverflow()\"\n\t\t\t\t[showOverflow]=\"!hideOverflow()\"\n\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t[hasTodayButton]=\"hasTodayButton()\"\n\t\t\t\t[date]=\"currentDate()\"\n\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t[(tabbableDate)]=\"tabbableDate\"\n\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t[ranges]=\"ranges()\"\n\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t(nextPage)=\"move(1, calendarMode())\"\n\t\t\t\t(previousPage)=\"move(-1, calendarMode())\"\n\t\t\t\t[(displayMode)]=\"calendarMode\"\n\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-container *luPresentationDisplay>{{ displayValue() }}</ng-container>\n","import { DateRange } from '../calendar2/date-range';\nimport { endOfDay, endOfMonth, endOfQuarter, endOfWeek, endOfYear, startOfDay, startOfMonth, startOfQuarter, startOfWeek, startOfYear, subMonths, subQuarters, subWeeks, subYears } from 'date-fns';\nimport { getLocaleFirstDayOfWeek } from '@angular/common';\n\nexport interface CalendarShortcut {\n\tlabel: string;\n\trange: DateRange;\n}\n\nexport const PremadeShortcuts: Record<string, (locale: string) => DateRange> = {\n\tSinceStartOfWeek: (locale: string) => {\n\t\treturn {\n\t\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\t\tstart: startOfWeek(new Date(), { weekStartsOn: getLocaleFirstDayOfWeek(locale) }),\n\t\t\tend: startOfDay(new Date()),\n\t\t};\n\t},\n\tLastWeek: (locale: string) => {\n\t\tconst startOfLastWeek = startOfWeek(subWeeks(new Date(), 1), { weekStartsOn: getLocaleFirstDayOfWeek(locale) });\n\t\treturn {\n\t\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\t\tstart: startOfLastWeek,\n\t\t\tend: endOfWeek(startOfLastWeek, { weekStartsOn: getLocaleFirstDayOfWeek(locale) }),\n\t\t};\n\t},\n\tSinceStartOfMonth: () => {\n\t\treturn {\n\t\t\tstart: startOfMonth(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastMonth: () => {\n\t\tconst startOfLastMonth = startOfMonth(subMonths(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastMonth,\n\t\t\tend: endOfMonth(startOfLastMonth),\n\t\t};\n\t},\n\tSinceStartOfQuarter: () => {\n\t\treturn {\n\t\t\tstart: startOfQuarter(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastQuarter: () => {\n\t\tconst startOfLastQuarter = startOfQuarter(subQuarters(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastQuarter,\n\t\t\tend: endOfQuarter(startOfLastQuarter),\n\t\t};\n\t},\n\tSinceStartOfYear: () => {\n\t\treturn {\n\t\t\tstart: startOfYear(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastYear: () => {\n\t\tconst startOfLastYear = startOfYear(subYears(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastYear,\n\t\t\tend: endOfYear(startOfLastYear),\n\t\t};\n\t},\n\tLastTwelveMonths: () => {\n\t\treturn {\n\t\t\tstart: subMonths(new Date(), 12),\n\t\t\tend: new Date(),\n\t\t};\n\t},\n};\n","import { BreakpointObserver, LayoutModule } from '@angular/cdk/layout';\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostBinding,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tsignal,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgModel, ValidationErrors, Validator } from '@angular/forms';\nimport { LuccaIcon } from '@lucca-front/icons';\nimport { ClearComponent } from '@lucca-front/ng/clear';\nimport { isNil, LuClass, PortalContent, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills';\nimport { FORM_FIELD_INSTANCE, InputDirective, PresentationDisplayDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { addMonths, addYears, endOfDecade, endOfMonth, endOfYear, isAfter, isBefore, isSameDay, parse, startOfDay, startOfDecade, startOfMonth, startOfYear, subMonths, subYears } from 'date-fns';\nimport { map } from 'rxjs';\nimport { AbstractDateComponent } from '../abstract-date-component';\nimport { CalendarMode } from '../calendar2/calendar-mode';\nimport { Calendar2Component } from '../calendar2/calendar2.component';\nimport { CellStatus } from '../calendar2/cell-status';\nimport { DateRange, DateRangeInput } from '../calendar2/date-range';\nimport { compareCalendarPeriods, startOfPeriod, transformDateRangeInputToDateRange, transformDateRangeToDateRangeInput } from '../utils';\nimport { CalendarShortcut } from './calendar-shortcut';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-date-range-input',\n\timports: [\n\t\tPopoverDirective,\n\t\tCalendar2Component,\n\t\tIconComponent,\n\t\tInputDirective,\n\t\tLayoutModule,\n\t\tPortalDirective,\n\t\tNgTemplateOutlet,\n\t\tFilterPillDisplayerDirective,\n\t\tClearComponent,\n\t\tPresentationDisplayDirective,\n\t],\n\ttemplateUrl: './date-range-input.component.html',\n\tstyleUrl: './date-range-input.component.scss',\n\thost: {\n\t\tclass: 'dateRangeField',\n\t},\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: FILTER_PILL_INPUT_COMPONENT,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t},\n\t\tLuClass,\n\t],\n})\nexport class DateRangeInputComponent extends AbstractDateComponent implements OnInit, ControlValueAccessor, Validator, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\t#injector = inject(Injector);\n\t#ngControl: NgControl; // Initialized in ngOnInit\n\t#luClass = inject(LuClass);\n\n\t#formFieldRef = inject(FORM_FIELD_INSTANCE, { optional: true });\n\n\t#breakpointObserver = inject(BreakpointObserver);\n\n\thasTwoCalendars = toSignal(this.#breakpointObserver.observe('(min-width: 40em)').pipe(map((state) => state.matches)));\n\n\tidSuffix = nextId++;\n\n\tstartTextInputRef = viewChild<ElementRef<HTMLInputElement>>('start');\n\n\tendTextInputRef = viewChild<ElementRef<HTMLInputElement>>('end');\n\n\t// CVA stuff\n\t#onChange?: (value: DateRange) => void;\n\n\tinitialValue = signal<DateRange | null>(undefined);\n\tselectedRange = signal<DateRange | null>(null);\n\n\tdateHovered = signal<Date | null>(null);\n\n\tplaceholder = input<string>();\n\n\twidthAuto = input(false, { transform: booleanAttribute });\n\n\tlabel: PortalContent;\n\n\tpopoverPositions: ConnectionPositionPair[] = [\n\t\tnew ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, -8, 0),\n\t\tnew ConnectionPositionPair(\n\t\t\t{ originX: 'start', originY: 'top' },\n\t\t\t{\n\t\t\t\toverlayX: 'start',\n\t\t\t\toverlayY: 'bottom',\n\t\t\t},\n\t\t\t-8,\n\t\t\t-32,\n\t\t),\n\t];\n\n\tinputFocused = signal(false);\n\n\teditedField = signal<-1 | 0 | 1>(-1);\n\n\thighlightedField = signal<-1 | 0 | 1>(-1);\n\n\tshortcuts = input<readonly CalendarShortcut[]>();\n\n\tautocomplete = input<AutoFill>('off');\n\n\tprotected currentRightDate = computed(() => {\n\t\treturn this.hasTwoCalendars() ? this.getNextCalendarDate(this.currentDate()) : this.currentDate();\n\t});\n\n\tprotected currentStartDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfMonth(this.currentDate());\n\t\t\tcase 'month':\n\t\t\t\treturn startOfYear(this.currentDate());\n\t\t\tcase 'year':\n\t\t\t\treturn startOfDecade(this.currentDate());\n\t\t}\n\t});\n\n\tprotected currentEndDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn endOfMonth(this.currentRightDate());\n\t\t\tcase 'month':\n\t\t\t\treturn endOfYear(this.currentRightDate());\n\t\t\tcase 'year':\n\t\t\t\treturn endOfDecade(this.currentRightDate());\n\t\t}\n\t});\n\n\tcalendars = viewChildren(Calendar2Component);\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: false,\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\tcalendarRanges = computed(() => {\n\t\tif (this.selectedRange()) {\n\t\t\treturn [this.selectedRange(), ...this.ranges()];\n\t\t}\n\t\treturn this.ranges();\n\t});\n\n\tstartLabel = computed(() => {\n\t\tif (this.selectedRange()?.start && this.isValidDate(this.selectedRange()?.start)) {\n\t\t\treturn this.getDateLabelForInput(this.selectedRange()?.start);\n\t\t}\n\t\treturn '';\n\t});\n\n\tendLabel = computed(() => {\n\t\tif (this.selectedRange()?.end && this.isValidDate(this.selectedRange()?.end)) {\n\t\t\treturn this.getDateLabelForInput(this.selectedRange()?.end);\n\t\t}\n\t\treturn '';\n\t});\n\n\tpreviousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\tnextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t// Which calendar is currently being focused in, used for tabbable date logic\n\tfocusedCalendarIndex = signal(0);\n\n\tfocusedCalendar = computed(() => this.calendars()[this.focusedCalendarIndex()]);\n\n\t@HostBinding('class.mod-filterPill')\n\tisFilterPill = false;\n\n\t@HostBinding('class.mod-auto')\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\tisFilterPillEmpty = computed(() => this.selectedRange() === null);\n\tisFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\t#defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\tfilterPillDisabled = signal(false);\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (this.#formFieldRef) {\n\t\t\tthis.#formFieldRef.rolePresentationLabel.set(true);\n\t\t\tthis.label = this.#formFieldRef.label();\n\t\t}\n\n\t\teffect(() => {\n\t\t\tthis.#luClass.setState({\n\t\t\t\t'mod-day': this.mode() === 'day',\n\t\t\t\t'mod-month': this.mode() === 'month',\n\t\t\t\t'mod-year': this.mode() === 'year',\n\t\t\t});\n\t\t});\n\n\t\tɵeffectWithDeps([this.calendarMode, this.tabbableDate], (calendarMode, tabbableDate) => {\n\t\t\tif (tabbableDate) {\n\t\t\t\tif (isAfter(tabbableDate, this.currentEndDisplayDate())) {\n\t\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\t\tthis.currentDate.set(startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t} else if (isBefore(tabbableDate, this.currentStartDisplayDate())) {\n\t\t\t\t\tif (this.hasTwoCalendars()) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(1);\n\t\t\t\t\t}\n\t\t\t\t\tswitch (this.mode()) {\n\t\t\t\t\t\tcase 'day':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subMonths(startOfPeriod(calendarMode, tabbableDate), 1) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subYears(startOfPeriod(calendarMode, tabbableDate), 1) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subYears(startOfPeriod(calendarMode, tabbableDate), 10) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.hasTwoCalendars()) {\n\t\t\t\t\tif (this.focusedCalendarIndex() === 1 && isBefore(tabbableDate, this.currentRightDate())) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\t\t} else if (this.focusedCalendarIndex() === 0 && (isAfter(tabbableDate, this.currentRightDate()) || isSameDay(tabbableDate, this.currentRightDate()))) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.isNavigationButtonFocused && !this.inputFocused()) {\n\t\t\t\tthis.focusedCalendar()?.blurTabbableDate();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.#ngControl = this.#injector.get(NgControl);\n\t}\n\n\tgetNextCalendarDate(date: Date): Date {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfMonth(addMonths(date, 1));\n\t\t\tcase 'month':\n\t\t\t\treturn startOfYear(addYears(date, 1));\n\t\t\tcase 'year':\n\t\t\t\treturn startOfDecade(addYears(date, 10));\n\t\t}\n\t}\n\n\tpopoverClosed(): void {\n\t\tthis.panelClosed.emit();\n\t\tif (this.editedField() === 1) {\n\t\t\tthis.endTextInputRef().nativeElement.focus();\n\t\t} else if (this.editedField() === 0) {\n\t\t\tthis.startTextInputRef().nativeElement.focus();\n\t\t}\n\t}\n\n\tinputBlur(): void {\n\t\tthis.onTouched?.();\n\t\tthis.inputFocused.set(false);\n\t\tthis.highlightedField.set(-1);\n\t}\n\n\tfixOrderIfNeeded(): void {\n\t\tif (this.selectedRange() && isAfter(this.selectedRange()?.start, this.selectedRange()?.end)) {\n\t\t\tconst range = this.selectedRange();\n\t\t\tthis.selectedRange.set({\n\t\t\t\t...range,\n\t\t\t\tend: range.start,\n\t\t\t\tstart: range.end,\n\t\t\t});\n\t\t\tthis.#onChange?.(this.selectedRange());\n\t\t}\n\t}\n\n\ttabbableDateChange(date: Date, calendarIndex: number) {\n\t\tif (calendarIndex == this.focusedCalendarIndex()) {\n\t\t\tthis.tabbableDate.set(date);\n\t\t}\n\t}\n\n\topenPopover(ref: PopoverDirective, propertyToFocus?: 'start' | 'end', focusTabbableDate = false): void {\n\t\tif (this.isFilterPill) {\n\t\t\treturn;\n\t\t}\n\t\tif (!ref.opened()) {\n\t\t\tref.openPopover(true, true);\n\t\t}\n\t\t// Once popover is opened, aka in the next CD cycle, focus current tabbable date\n\t\tsetTimeout(() => {\n\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\tif (propertyToFocus && this.selectedRange()?.[propertyToFocus]) {\n\t\t\t\t// Specific case: if range is on a single month, focus on it on left calendar\n\t\t\t\t// Same goes for focus on start date, we want it on left panel\n\t\t\t\tif (propertyToFocus === 'start' || compareCalendarPeriods(this.mode(), this.selectedRange()?.start, this.selectedRange()?.end)) {\n\t\t\t\t\tthis.currentDate.set(this.selectedRange()?.[propertyToFocus]);\n\t\t\t\t\tthis.tabbableDate.set(this.selectedRange()?.[propertyToFocus]);\n\t\t\t\t} else {\n\t\t\t\t\t// Compute the date to use for proper focus on left panel, minus one calendar on focus date basically\n\t\t\t\t\tconst leftPanelFocus = this.selectedRange()?.end;\n\t\t\t\t\tthis.currentDate.set(leftPanelFocus);\n\t\t\t\t\tthis.tabbableDate.set(leftPanelFocus);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (focusTabbableDate) {\n\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t}\n\t\t});\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tif (this.selectedRange() === null) {\n\t\t\tthis.selectedRange.set({\n\t\t\t\tstart: date,\n\t\t\t\tscope: this.mode(),\n\t\t\t});\n\t\t\tthis.editedField.set(1);\n\t\t\tthis.highlightedField.set(1);\n\t\t} else {\n\t\t\t// If we're editing end field\n\t\t\tif (this.editedField() === 1) {\n\t\t\t\t// If end is before start, invert them\n\t\t\t\tif (isBefore(date, this.selectedRange().start)) {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t\tend: this.selectedRange().start,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\t...this.selectedRange(),\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t\tend: date,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tpopoverRef?.close();\n\t\t\t\tthis.filterPillPopoverCloseFn?.();\n\t\t\t\tthis.endTextInputRef().nativeElement.focus();\n\t\t\t\tthis.editedField.set(-1);\n\t\t\t\tthis.dateHovered.set(null);\n\t\t\t} else {\n\t\t\t\t// Else, we're editing start field\n\t\t\t\t// If start is after end, invert them\n\t\t\t\tif (isAfter(date, this.selectedRange().end)) {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\t...this.selectedRange(),\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.editedField.set(1);\n\t\t\t\tthis.highlightedField.set(1);\n\t\t\t\tthis.dateHovered.set(null);\n\t\t\t}\n\t\t}\n\n\t\tthis.#onChange?.(this.selectedRange());\n\t}\n\n\tarrowDown(popoverRef: PopoverDirective, fieldToFocus: 'start' | 'end'): void {\n\t\tthis.openPopover(popoverRef, fieldToFocus, true);\n\t\tif (this.isFilterPill) {\n\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t} else if (this.editedField() === -1) {\n\t\t\tthis.editedField.set(fieldToFocus === 'start' ? 0 : 1);\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl<DateRange | DateRangeInput | null>): ValidationErrors | null {\n\t\tif (!control.value) {\n\t\t\treturn null;\n\t\t}\n\t\tconst dateRange = transformDateRangeInputToDateRange(control.value);\n\n\t\treturn this.isValidDate(dateRange.start) ? null : { date: true };\n\t}\n\n\twriteValue(dateRange: DateRange | DateRangeInput | null): void {\n\t\tif (this.#ngControl instanceof NgModel && isNil(this.#onChange)) {\n\t\t\t// avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-1310420293\n\t\t\treturn;\n\t\t}\n\t\tconst _dateRange = transformDateRangeInputToDateRange(dateRange);\n\n\t\tif (isNil(this.initialValue())) {\n\t\t\tthis.selectedRange.set(this.clearBehavior() === 'reset' ? this.initialValue() : _dateRange);\n\t\t}\n\n\t\tif (dateRange != null) {\n\t\t\tthis.selectedRange.set(_dateRange);\n\t\t\tthis.currentDate.set(startOfDay(dateRange.start));\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: DateRange | DateRangeInput | null) => void): void {\n\t\tthis.#onChange = (dateRange: DateRange | null) => {\n\t\t\tfn(dateRange && this.inDateISOFormat() ? transformDateRangeToDateRangeInput(dateRange) : dateRange);\n\t\t};\n\t}\n\n\toverride setDisabledState(isDisabled: boolean) {\n\t\tthis.filterPillDisabled.set(isDisabled);\n\t\tsuper.setDisabledState(isDisabled);\n\t}\n\n\tclear() {\n\t\tconst newValue = this.clearBehavior() === 'reset' ? this.initialValue() : null;\n\t\tthis.selectedRange.set(newValue);\n\t\tthis.#onChange?.(this.selectedRange());\n\t\tthis.onTouched?.();\n\t\tthis.startTextInputRef().nativeElement.focus();\n\t}\n\n\tcurrentDateChangeFromCalendar(date: Date): void {\n\t\tthis.tabbableDate.set(date);\n\t\tthis.currentDate.set(date);\n\t}\n\n\tgetDateLabelForInput(date: Date): string {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.intlDateTimeFormat.format(date);\n\t\t\tcase 'month':\n\t\t\t\treturn this.intlDateTimeFormatMonth.format(date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.intlDateTimeFormatYear.format(date);\n\t\t}\n\t}\n\n\tselectShortcut(shortcut: CalendarShortcut, popover: PopoverDirective): void {\n\t\tthis.selectedRange.set(shortcut.range);\n\t\tthis.#onChange?.(this.selectedRange());\n\t\tpopover?.close();\n\t\tthis.filterPillPopoverCloseFn?.();\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.filterPillPopoverCloseFn = closeFn;\n\t}\n\n\tenableFilterPillMode(): void {\n\t\tthis.isFilterPill = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t}\n\n\tclearFilterPillValue(): void {\n\t\tthis.clear();\n\t}\n\n\tgetDefaultFilterPillIcon(): LuccaIcon {\n\t\treturn 'calendarPlanning';\n\t}\n\n\ttextInputChange(inputValue: string, rangeProperty: 'start' | 'end'): void {\n\t\tlet currentRange: DateRange = this.selectedRange() || ({} as DateRange);\n\t\tif (inputValue?.length > 0) {\n\t\t\tconst parsed = parse(inputValue, this.dateFormat, startOfDay(new Date()));\n\t\t\tif (parsed.getFullYear() > 999) {\n\t\t\t\tcurrentRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t[rangeProperty]: parsed,\n\t\t\t\t};\n\t\t\t\tthis.currentDate.set(startOfDay(parsed));\n\t\t\t\tthis.tabbableDate.set(startOfDay(parsed));\n\t\t\t} else if (this.isValidDate(parsed)) {\n\t\t\t\tcurrentRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t[rangeProperty]: parsed,\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (inputValue !== null) {\n\t\t\tcurrentRange = {\n\t\t\t\t...currentRange,\n\t\t\t\tscope: this.mode(),\n\t\t\t\t[rangeProperty]: undefined,\n\t\t\t};\n\t\t}\n\t\tif (!currentRange.start && !currentRange.end) {\n\t\t\tthis.selectedRange.set(null);\n\t\t} else {\n\t\t\tthis.selectedRange.set(currentRange);\n\t\t}\n\t\tthis.#onChange?.(this.selectedRange());\n\t}\n}\n","<fieldset class=\"dateRangeField-fieldset\">\n\t<legend>\n\t\t<span class=\"pr-u-mask\">\n\t\t\t<ng-container *luPortal=\"label\" />\n\t\t</span>\n\t</legend>\n\t<div class=\"dateRangeField-fieldset-textField textField\" #popoverAnchor>\n\t\t<div class=\"textField-input\">\n\t\t\t<div class=\"dateRangeField-fieldset-content mod-start\" [class.is-highlighted]=\"highlightedField() === 0\">\n\t\t\t\t<label for=\"range-input-start-{{ idSuffix }}\" class=\"pr-u-mask\">Start</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t#start\n\t\t\t\t\tid=\"range-input-start-{{ idSuffix }}\"\n\t\t\t\t\tattr.aria-describedby=\"range-input-start-{{ idSuffix }}-message\"\n\t\t\t\t\tluInput\n\t\t\t\t\tluInputStandalone\n\t\t\t\t\tclass=\"textField-input-value dateRangeField-fieldset-input-value\"\n\t\t\t\t\t[value]=\"startLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'start')\"\n\t\t\t\t\t(blur)=\"inputBlur()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(0); highlightedField.set(0)\"\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t(click)=\"editedField.set(0); openPopover(popoverRef, 'start')\"\n\t\t\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef, 'start')\"\n\t\t\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[attr.placeholder]=\"dateFormatLocalized()\"\n\t\t\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"dateRangeField-fieldset-content mod-end\" [class.is-highlighted]=\"highlightedField() === 1\">\n\t\t\t\t<label for=\"range-input-end-{{ idSuffix }}\" class=\"pr-u-mask\">End</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t#end\n\t\t\t\t\tid=\"range-input-end-{{ idSuffix }}\"\n\t\t\t\t\tattr.aria-describedby=\"range-input-start-{{ idSuffix }}-message\"\n\t\t\t\t\tluInput\n\t\t\t\t\tluInputStandalone\n\t\t\t\t\tclass=\"textField-input-value dateRangeField-fieldset-input-value\"\n\t\t\t\t\t[value]=\"endLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'end')\"\n\t\t\t\t\t(blur)=\"inputBlur(); fixOrderIfNeeded()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(1); highlightedField.set(1)\"\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t(click)=\"editedField.set(1); openPopover(popoverRef, 'end')\"\n\t\t\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef, 'end')\"\n\t\t\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[attr.placeholder]=\"dateFormatLocalized()\"\n\t\t\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<lu-icon [icon]=\"'arrowRight'\" [alt]=\"''\" class=\"dateRangeField-fieldset-arrow\" />\n\t\t\t<div class=\"textField-input-affix\">\n\t\t\t\t@if (!isFilterPill) {\n\t\t\t\t\t@if (clearable() && (start.value !== \"\" || end.value !== \"\")) {\n\t\t\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); start.focus()\">{{ intl().clear }}</lu-clear>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t<button\n\t\t\t\t\t[luPopover2]=\"calendar\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[luPopoverNoCloseButton]=\"true\"\n\t\t\t\t\t[luPopoverAnchor]=\"popoverAnchor\"\n\t\t\t\t\t#popoverRef=\"luPopover2\"\n\t\t\t\t\t[customPositions]=\"popoverPositions\"\n\t\t\t\t\t(luPopoverClosed)=\"popoverClosed()\"\n\t\t\t\t\t(luPopoverOpened)=\"panelOpened.emit()\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"button mod-onlyIcon mod-ghost textField-input-affix-toggle\"\n\t\t\t\t\t(click)=\"editedField.set(0)\"\n\t\t\t\t>\n\t\t\t\t\t<lu-icon [icon]=\"'calendarPlanning'\" [alt]=\"intl().pickDate\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</fieldset>\n\n<ng-template #calendar>\n\t<div class=\"calendarShortcutsOptional\">\n\t\t@if (shortcuts()?.length > 0) {\n\t\t\t<ul\n\t\t\t\tclass=\"calendarShortcuts\"\n\t\t\t\t[class.mod-day]=\"mode() === 'day'\"\n\t\t\t\t[class.mod-month]=\"mode() === 'month'\"\n\t\t\t\t[class.mod-year]=\"mode() === 'year'\"\n\t\t\t>\n\t\t\t\t@for (shortcut of shortcuts(); track $index) {\n\t\t\t\t\t<li class=\"calendarShortcutsButton-item\">\n\t\t\t\t\t\t<button type=\"button\" class=\"calendarShortcutsButton-item-button button\" (click)=\"selectShortcut(shortcut, popoverRef)\">\n\t\t\t\t\t\t\t{{ shortcut.label }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t}\n\t\t<div class=\"calendarWrapper\">\n\t\t\t<div class=\"calendarWrapper-navigation pr-u-left0\">\n\t\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"prev(mode())\" #previousButtonRef>\n\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronLeft\"></span><span class=\"pr-u-mask\">{{ intl().previous }}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"calendarWrapper-navigation pr-u-right0\">\n\t\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"next(mode())\" #nextButtonRef>\n\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronRight\"></span><span class=\"pr-u-mask\"> {{ intl().next }}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"calendarWrapper-content\" tabindex=\"-1\">\n\t\t\t\t<lu-calendar2\n\t\t\t\t\t[removeYearOverflow]=\"true\"\n\t\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t\t[date]=\"currentDate()\"\n\t\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t\t[tabbableDate]=\"tabbableDate()\"\n\t\t\t\t\t(tabbableDateChange)=\"tabbableDateChange($event, 0)\"\n\t\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t\t[(dateHovered)]=\"dateHovered\"\n\t\t\t\t\t[ranges]=\"calendarRanges()\"\n\t\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t\t(nextPage)=\"move(1, mode())\"\n\t\t\t\t\t(previousPage)=\"move(-1, mode())\"\n\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t\t\t[disableModeChange]=\"true\"\n\t\t\t\t/>\n\t\t\t\t@if (hasTwoCalendars()) {\n\t\t\t\t\t<lu-calendar2\n\t\t\t\t\t\t[removeYearOverflow]=\"true\"\n\t\t\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t\t\t[date]=\"currentRightDate()\"\n\t\t\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t\t\t[tabbableDate]=\"tabbableDate()\"\n\t\t\t\t\t\t(tabbableDateChange)=\"tabbableDateChange($event, 1)\"\n\t\t\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t\t\t[(dateHovered)]=\"dateHovered\"\n\t\t\t\t\t\t[ranges]=\"calendarRanges()\"\n\t\t\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t\t\t(nextPage)=\"move(1, mode())\"\n\t\t\t\t\t\t(previousPage)=\"move(-1, mode())\"\n\t\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t\t\t\t[disableModeChange]=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</ng-template>\n\n@if (isFilterPill) {\n\t<ng-container *ngTemplateOutlet=\"calendar\" />\n}\n\n<ng-container *luFilterPillDisplayer=\"let empty = isEmpty\">\n\t@if (!empty) {\n\t\t<span class=\"pr-u-mask\">{{ intl().from }}</span>\n\t\t{{ startLabel() }}\n\t\t<lu-icon [icon]=\"'arrowRight'\" size=\"XS\" [alt]=\"intl().to\" />\n\t\t{{ endLabel() }}\n\t}\n</ng-container>\n\n<ng-container *luPresentationDisplay>\n\t<span class=\"pr-u-mask\">{{ intl().from }}</span>\n\t{{ startLabel() }}\n\t<lu-icon [icon]=\"'arrowRight'\" size=\"XS\" [alt]=\"intl().to\" />\n\t{{ endLabel() }}\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps"],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-date2.mjs","sources":["../../../packages/ng/date2/calendar.token.ts","../../../packages/ng/date2/translations.ts","../../../packages/ng/date2/date2.translate.ts","../../../packages/ng/date2/repeat-times.directive.ts","../../../packages/ng/date2/date.const.ts","../../../packages/ng/date2/utils.ts","../../../packages/ng/date2/calendar2/calendar2.tokens.ts","../../../packages/ng/date2/calendar2/calendar2-cell.directive.ts","../../../packages/ng/date2/calendar2/calendar2.component.ts","../../../packages/ng/date2/calendar2/calendar2.component.html","../../../packages/ng/date2/date-format.ts","../../../packages/ng/date2/abstract-date-component.ts","../../../packages/ng/date2/date-input/date-input.component.ts","../../../packages/ng/date2/date-input/date-input.component.html","../../../packages/ng/date2/date-range-input/calendar-shortcut.ts","../../../packages/ng/date2/date-range-input/date-range-input.component.ts","../../../packages/ng/date2/date-range-input/date-range-input.component.html","../../../packages/ng/date2/lucca-front-ng-date2.ts"],"sourcesContent":["import { getLocaleFirstDayOfWeek, getLocaleWeekEndRange } from '@angular/common';\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\n\nexport type CalendarWeekDay = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\nexport interface CalendarWeekInfo {\n\tfirstDay: CalendarWeekDay;\n\tweekend: CalendarWeekDay[];\n}\n\nexport const WEEK_INFO = new InjectionToken<CalendarWeekInfo>('Calendar2:WeekInfo', {\n\tfactory: () => {\n\t\tconst locale = inject(LOCALE_ID);\n\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\tconst [weekendStart, weekendEnd] = getLocaleWeekEndRange(locale);\n\t\tconst weekend: number[] = [];\n\t\tlet weekDay: number = weekendStart;\n\t\twhile (weekDay != weekendEnd) {\n\t\t\t// Sunday is 0 in Angular but 7 in Intl\n\t\t\tweekend.push(weekDay || 7);\n\t\t\tweekDay = (weekDay + 1) % 7;\n\t\t}\n\t\tweekend.push(weekDay || 7);\n\t\treturn {\n\t\t\tfirstDay: (getLocaleFirstDayOfWeek(locale) + 7) % 7,\n\t\t\tweekend,\n\t\t} as CalendarWeekInfo;\n\t},\n});\n","export const Translations = {\n\tfr: {\n\t\tfrom: 'Du',\n\t\tto: 'au',\n\t\tdirectionKeysTip: 'Les touches directionnelles servent à parcourir les dates.',\n\t\tpickDate: 'Choisir une date dans le calendrier',\n\t\tprevious: 'Précédent',\n\t\tnext: 'Suivant',\n\t\tclear: 'Vider ce champ',\n\t},\n\ten: {\n\t\tfrom: 'From',\n\t\tto: 'to',\n\t\tdirectionKeysTip: 'The arrow keys are used to navigate through dates.',\n\t\tpickDate: 'Pick a date in calendar',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tclear: 'Clear',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_DATE2_TRANSLATIONS = new InjectionToken('LuDate2Translations', {\n\tfactory: () => luDate2Translations,\n});\n\nexport interface Date2Translate {\n\tfrom: string;\n\tto: string;\n\tdirectionKeysTip: string;\n\tpickDate: string;\n\tprevious: string;\n\tnext: string;\n\tclear: string;\n}\n\nexport const luDate2Translations: LuTranslation<Date2Translate> = Translations;\n","import { Directive, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n\tselector: '[luRepeatTimes]',\n})\nexport class RepeatTimesDirective {\n\tprivate templateRef = inject<TemplateRef<void>>(TemplateRef);\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\n\t@Input('luRepeatTimes')\n\tpublic set repeatTimes(times: number) {\n\t\tthis.viewContainerRef.clear();\n\n\t\tfor (let i = 0; i < times; i++) {\n\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t}\n\t}\n\n\tpublic static ngTemplateContextGuard(_dir: RepeatTimesDirective, ctx: unknown): ctx is void {\n\t\treturn true;\n\t}\n}\n","export const DATE_FORMAT = {\n\tDATE: 'date',\n\tDATE_ISO: 'date-iso',\n} as const;\n\nexport type DateFormat = (typeof DATE_FORMAT)[keyof typeof DATE_FORMAT];\n\nexport const DATE_ISO_FORMAT = 'yyyy-MM-dd';\n","import { isNil } from '@lucca-front/ng/core';\nimport { Day, format, isSameDay, isSameMonth, isSameYear, parse, startOfDecade, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarWeekDay, CalendarWeekInfo } from './calendar.token';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { DateRange, DateRangeInput } from './calendar2/date-range';\nimport { DATE_ISO_FORMAT } from './date.const';\n\nexport function getIntlWeekDay(date: Date): CalendarWeekDay {\n\treturn (date.getDay() || 7) as CalendarWeekDay;\n}\n\nexport function getJSFirstDayOfWeek(weekInfo: CalendarWeekInfo): Day {\n\treturn (weekInfo.firstDay % 7) as Day;\n}\n\nconst modeToComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameDay,\n\tmonth: isSameMonth,\n\tyear: isSameYear,\n};\n\nconst modeToCalendarComparator: Record<CalendarMode, (a: Date, b: Date) => boolean> = {\n\tday: isSameMonth,\n\tmonth: isSameYear,\n\tyear: (a, b) => Math.floor(a.getFullYear() / 10) === Math.floor(b.getFullYear() / 10),\n};\n\nconst modeToPeriodStart: Record<CalendarMode, (date: Date) => Date> = {\n\tday: startOfMonth,\n\tmonth: startOfYear,\n\tyear: startOfDecade,\n};\n\nexport function comparePeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn modeToComparator[mode](a, b);\n}\n\nexport function compareCalendarPeriods(mode: CalendarMode, a: Date, b: Date): boolean {\n\treturn modeToCalendarComparator[mode](a, b);\n}\n\nexport function startOfPeriod(mode: CalendarMode, date: Date): Date {\n\treturn modeToPeriodStart[mode](date);\n}\n\nfunction stringToDateISO(value: string): Date {\n\tconst res = parse(value, DATE_ISO_FORMAT, new Date());\n\tif (isNaN(+res)) {\n\t\tthrow new Error('Invalid date: your input should be a valid iso date string (yyyy-MM-dd), received: ' + value);\n\t}\n\treturn res;\n}\n\nexport function transformDateInputToDate(value: Date | null | undefined | string): Date | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\treturn stringToDateISO(value);\n}\n\nexport function transformDateToDateISO(value: Date | null): string | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\n\treturn format(value, DATE_ISO_FORMAT);\n}\n\nfunction isDateRangeInput(value: DateRangeInput | DateRange): value is DateRangeInput {\n\treturn !(value.start instanceof Date);\n}\n\nexport function transformDateRangeInputToDateRange(value: DateRange | null | undefined | DateRangeInput): DateRange | null {\n\tif (isNil(value)) {\n\t\treturn null;\n\t}\n\n\tif (!isDateRangeInput(value)) {\n\t\treturn value;\n\t}\n\n\treturn {\n\t\t...value,\n\t\tstart: transformDateInputToDate(value.start),\n\t\tend: transformDateInputToDate(value.end),\n\t};\n}\n\nexport function transformDateRangeToDateRangeInput(value: DateRange): DateRangeInput {\n\treturn {\n\t\t...value,\n\t\tstart: transformDateToDateISO(value.start),\n\t\tend: transformDateToDateISO(value.end),\n\t};\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { Calendar2CellDirective } from './calendar2-cell.directive';\n\nexport const CALENDAR_CELLS = new InjectionToken<Signal<Calendar2CellDirective[]>>('Calendar2:Calendar2Cells');\nexport const CALENDAR_TABBABLE_DATE = new InjectionToken<WritableSignal<Date>>('Calendar2:TabbableDate');\n","import { computed, Directive, ElementRef, HostBinding, HostListener, inject, input } from '@angular/core';\nimport { add, addMonths, addYears, endOfWeek, startOfWeek, sub, subMonths, subYears } from 'date-fns';\nimport type { Duration } from 'date-fns';\nimport { WEEK_INFO } from '../calendar.token';\nimport { comparePeriods, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarMode } from './calendar-mode';\nimport { CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\n\nconst modeToDurationKey: Record<CalendarMode, keyof Duration> = {\n\tday: 'days',\n\tmonth: 'months',\n\tyear: 'years',\n};\n\n@Directive({\n\tselector: '[luCalendar2Cell]',\n})\nexport class Calendar2CellDirective {\n\t#host = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\t#tabbableDate = inject(CALENDAR_TABBABLE_DATE);\n\t#weekInfo = inject(WEEK_INFO);\n\n\t// Index of this day in the current week display row, not depending on locale, 0 is first day of week and 6 is last\n\tluCalendar2Cell = input.required<number>();\n\n\tluCalendar2Mode = input.required<CalendarMode>();\n\n\tluCalendar2Date = input.required<Date>();\n\n\t@HostBinding('tabindex')\n\tget tabindex(): 0 | -1 {\n\t\treturn this.isTabbableDate() ? 0 : -1;\n\t}\n\n\tisTabbableDate = computed(() => {\n\t\treturn comparePeriods(this.luCalendar2Mode(), this.luCalendar2Date(), this.#tabbableDate());\n\t});\n\n\t@HostListener('keydown', ['$event'])\n\tkeydown($event: Event): void {\n\t\t// See https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/#ex_label for keyboard\n\t\t// navigation standards on date pickers\n\t\tconst cellsPerRow = this.luCalendar2Mode() === 'day' ? 7 : 3;\n\t\tconst datePropertyToEdit = modeToDurationKey[this.luCalendar2Mode()];\n\t\tswitch (($event as KeyboardEvent).key) {\n\t\t\tcase 'ArrowRight':\n\t\t\t\tthis.#tabbableDate.set(add(this.luCalendar2Date(), { [datePropertyToEdit]: 1 }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tthis.#tabbableDate.set(sub(this.luCalendar2Date(), { [datePropertyToEdit]: 1 }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tthis.#tabbableDate.set(add(this.luCalendar2Date(), { [datePropertyToEdit]: cellsPerRow }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tthis.#tabbableDate.set(sub(this.luCalendar2Date(), { [datePropertyToEdit]: cellsPerRow }));\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tthis.#tabbableDate.set(startOfWeek(this.luCalendar2Date(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) }));\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tthis.#tabbableDate.set(endOfWeek(this.luCalendar2Date(), { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) }));\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tif (($event as KeyboardEvent).shiftKey) {\n\t\t\t\t\t\tthis.#tabbableDate.set(subYears(this.luCalendar2Date(), 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#tabbableDate.set(subMonths(this.luCalendar2Date(), 1));\n\t\t\t\t\t}\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tif (this.luCalendar2Mode() === 'day') {\n\t\t\t\t\tif (($event as KeyboardEvent).shiftKey) {\n\t\t\t\t\t\tthis.#tabbableDate.set(addYears(this.luCalendar2Date(), 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#tabbableDate.set(addMonths(this.luCalendar2Date(), 1));\n\t\t\t\t\t}\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfocus(): void {\n\t\tthis.#host.nativeElement.focus();\n\t}\n\n\tblur(): void {\n\t\tthis.#host.nativeElement.blur();\n\t}\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, LOCALE_ID, model, OnInit, output, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { LuTooltipTriggerDirective } from '@lucca-front/ng/tooltip';\nimport {\n\taddHours,\n\taddMonths,\n\taddYears,\n\teachDayOfInterval,\n\teachMonthOfInterval,\n\teachYearOfInterval,\n\tendOfDay,\n\tendOfDecade,\n\tendOfMonth,\n\tendOfWeek,\n\tendOfYear,\n\tisAfter,\n\tisSameDay,\n\tisSameMonth,\n\tisSameYear,\n\tisWithinInterval,\n\tlastDayOfMonth,\n\tstartOfDay,\n\tstartOfDecade,\n\tstartOfMonth,\n\tstartOfWeek,\n\tstartOfYear,\n\tsubMonths,\n\tsubYears,\n\tWeekOptions,\n} from 'date-fns';\nimport type { Interval } from 'date-fns';\nimport { WEEK_INFO } from '../calendar.token';\nimport { LU_DATE2_TRANSLATIONS } from '../date2.translate';\nimport { RepeatTimesDirective } from '../repeat-times.directive';\nimport { comparePeriods, getIntlWeekDay, getJSFirstDayOfWeek } from '../utils';\nimport { CalendarCellInfo, CalendarMonthInfo, CalendarYearInfo } from './calendar-cell-info';\nimport { CalendarMode } from './calendar-mode';\nimport { Calendar2CellDirective } from './calendar2-cell.directive';\nimport { CALENDAR_CELLS, CALENDAR_TABBABLE_DATE } from './calendar2.tokens';\nimport { CellStatus } from './cell-status';\nimport { DateRange } from './date-range';\n\nconst MODE_HIERARCHY: CalendarMode[] = ['day', 'month', 'year'];\n\n@Component({\n\tselector: 'lu-calendar2',\n\timports: [RepeatTimesDirective, Calendar2CellDirective, LuTooltipTriggerDirective],\n\ttemplateUrl: './calendar2.component.html',\n\tstyleUrl: './calendar2.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: CALENDAR_CELLS,\n\t\t\tuseFactory: () => inject(Calendar2Component).calendar2CellInstances,\n\t\t},\n\t\t{\n\t\t\tprovide: CALENDAR_TABBABLE_DATE,\n\t\t\tuseFactory: () => inject(Calendar2Component).tabbableDate,\n\t\t},\n\t],\n})\nexport class Calendar2Component implements OnInit {\n\t#locale = inject(LOCALE_ID);\n\t#weekInfo = inject(WEEK_INFO);\n\treadonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t#intlDateFormat = new Intl.DateTimeFormat(this.#locale, { month: 'long' });\n\t#intlDateYear = new Intl.DateTimeFormat(this.#locale, { year: 'numeric' });\n\n\t#intlDaysLong = new Intl.DateTimeFormat(this.#locale, { weekday: 'long' });\n\t#intlDaysShort = new Intl.DateTimeFormat(this.#locale, { weekday: 'short' });\n\t#intlRelativeDay = new Intl.RelativeTimeFormat(this.#locale, { numeric: 'auto' });\n\n\t#intlMonthsLong = new Intl.DateTimeFormat(this.#locale, { month: 'long' });\n\t#intlMonthsShort = new Intl.DateTimeFormat(this.#locale, { month: 'short' });\n\n\t#weekOptions: WeekOptions = { weekStartsOn: getJSFirstDayOfWeek(this.#weekInfo) };\n\n\tintl = input(...intlInputOptions(LU_DATE2_TRANSLATIONS));\n\n\tshowOverflow = input(false, { transform: booleanAttribute });\n\n\tenableOverflow = input(false, { transform: booleanAttribute });\n\n\tremoveYearOverflow = input(false, { transform: booleanAttribute });\n\n\thideToday = input(false, { transform: booleanAttribute });\n\n\thasTodayButton = input(false, { transform: booleanAttribute });\n\n\thideWeekend = input(false, { transform: booleanAttribute });\n\n\tdisableModeChange = input(false, { transform: booleanAttribute });\n\n\t// Date used to init the component and as internal focus model\n\tdate = model.required<Date>();\n\n\ttabbableDate = model<Date | null>(null);\n\n\tmode = model<CalendarMode>('day');\n\n\tdisplayMode = model<CalendarMode | null>(null);\n\n\tranges = input<readonly DateRange[]>([]);\n\n\tgetCellInfo = input<(date: Date, displayMode: CalendarMode) => CellStatus>((_date: Date) => ({\n\t\tclasses: [],\n\t\tdisabled: false,\n\t}));\n\n\tmonth = computed(() => startOfMonth(this.date()));\n\n\tyear = computed(() => startOfYear(this.date()));\n\n\tdecade = computed(() => startOfDecade(this.date()));\n\n\tpreviousMonth = computed(() => subMonths(this.month(), 1));\n\n\tnextMonth = computed(() => addMonths(this.month(), 1));\n\n\tnextPage = output();\n\n\tpreviousPage = output();\n\n\tdateClicked = output<Date>();\n\n\tdateHovered = model<Date | null>(null);\n\n\ttodayLabel = this.#intlRelativeDay.format(0, 'day');\n\tthisMonthLabel = this.#intlRelativeDay.format(0, 'month');\n\tthisYearLabel = this.#intlRelativeDay.format(0, 'year');\n\n\tcalendar2CellInstances = viewChildren(Calendar2CellDirective);\n\n\tdaysOfWeek = eachDayOfInterval({\n\t\tstart: startOfWeek(new Date(), this.#weekOptions),\n\t\tend: endOfWeek(new Date(), this.#weekOptions),\n\t}).map((day) => ({\n\t\tlong: this.#intlDaysLong.format(day),\n\t\tshort: this.#intlDaysShort.format(day),\n\t}));\n\n\tmonthGridDisplay = computed(() => {\n\t\tconst daysOfMonth: CalendarCellInfo[] = eachDayOfInterval({\n\t\t\tstart: this.month(),\n\t\t\tend: endOfMonth(this.month()),\n\t\t}).map((date) => this.dateToCellInfo(date));\n\t\tconst daysByWeek = daysOfMonth.reduce<Record<number, CalendarCellInfo[]>>((acc, day) => {\n\t\t\tconst key = startOfWeek(day.date, this.#weekOptions).getTime();\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t[key]: [...(acc[key] || []), day],\n\t\t\t};\n\t\t}, {});\n\t\t// If we want to show days before and after this month\n\t\t// Use last week of previous month\n\t\tconst startOfPreviousOverflow = startOfWeek(lastDayOfMonth(this.previousMonth()), this.#weekOptions);\n\t\tconst previousOverflow = eachDayOfInterval({\n\t\t\tstart: startOfPreviousOverflow,\n\t\t\tend: endOfMonth(this.previousMonth()),\n\t\t}).map((date) => {\n\t\t\tif (this.showOverflow()) {\n\t\t\t\treturn this.dateToCellInfo(date, true);\n\t\t\t} else {\n\t\t\t\treturn this.dateToCellInfo(endOfMonth(date), true);\n\t\t\t}\n\t\t});\n\t\tif (daysByWeek[startOfPreviousOverflow.getTime()]) {\n\t\t\tdaysByWeek[startOfPreviousOverflow.getTime()] = [...previousOverflow, ...daysByWeek[startOfPreviousOverflow.getTime()]];\n\t\t}\n\t\t// Use first week of next month\n\t\tconst startOfNextMonthOverflow = startOfWeek(startOfMonth(this.nextMonth()), this.#weekOptions);\n\t\tconst endOfNextMonthOverflow = endOfWeek(startOfMonth(this.nextMonth()), this.#weekOptions);\n\t\tconst nextOverflow = eachDayOfInterval({\n\t\t\tstart: startOfMonth(this.nextMonth()),\n\t\t\tend: endOfNextMonthOverflow,\n\t\t}).map((date) => {\n\t\t\tif (this.showOverflow()) {\n\t\t\t\treturn this.dateToCellInfo(date, true);\n\t\t\t} else {\n\t\t\t\treturn this.dateToCellInfo(startOfMonth(date), true);\n\t\t\t}\n\t\t});\n\t\tif (daysByWeek[startOfNextMonthOverflow.getTime()]) {\n\t\t\tdaysByWeek[startOfNextMonthOverflow.getTime()] = [...daysByWeek[startOfNextMonthOverflow.getTime()], ...nextOverflow];\n\t\t}\n\t\treturn Object.keys(daysByWeek)\n\t\t\t.sort()\n\t\t\t.map((weekStart) => daysByWeek[+weekStart]);\n\t});\n\n\tyearGridDisplay = computed(() => {\n\t\tconst monthsOfYear: Date[] = eachMonthOfInterval({\n\t\t\tstart: this.year(),\n\t\t\tend: endOfYear(this.year()),\n\t\t});\n\t\treturn monthsOfYear\n\t\t\t.map((month) => {\n\t\t\t\treturn {\n\t\t\t\t\tdate: month,\n\t\t\t\t\tshort: this.#intlMonthsShort.format(month),\n\t\t\t\t\tlong: this.#intlMonthsLong.format(month),\n\t\t\t\t\t...this.dateToCellInfo(month),\n\t\t\t\t\tisCurrent: isSameMonth(new Date(), month),\n\t\t\t\t} as CalendarMonthInfo;\n\t\t\t})\n\t\t\t.reduce<CalendarMonthInfo[][]>((all, one, i) => {\n\t\t\t\tconst ch = Math.floor(i / 3);\n\t\t\t\tall[ch] = [...(all[ch] || []), one];\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t});\n\n\tdecadeGridDisplay = computed(() => {\n\t\tconst yearsOfDecade: Date[] = eachYearOfInterval({\n\t\t\tstart: this.removeYearOverflow() ? this.decade() : subYears(this.decade(), 1),\n\t\t\tend: this.removeYearOverflow() ? endOfDecade(this.decade()) : addYears(endOfDecade(this.decade()), 1),\n\t\t});\n\t\treturn yearsOfDecade\n\t\t\t.map((year) => {\n\t\t\t\treturn {\n\t\t\t\t\tdate: year,\n\t\t\t\t\t...this.dateToCellInfo(year),\n\t\t\t\t\tname: this.#intlDateYear.format(year),\n\t\t\t\t\tisCurrent: isSameYear(new Date(), year),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.reduce<CalendarYearInfo[][]>((all, one, i) => {\n\t\t\t\tconst ch = Math.floor(i / 3);\n\t\t\t\tall[ch] = [...(all[ch] || []), one];\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t});\n\n\tcurrentMonthLabel = computed(() => {\n\t\treturn this.#intlDateFormat.format(this.date());\n\t});\n\n\tcurrentYearLabel = computed(() => {\n\t\treturn this.#intlDateYear.format(this.date());\n\t});\n\n\tcurrentDecadeLabel = computed(() => {\n\t\treturn `${this.#intlDateYear.format(startOfDecade(this.decade()))} – ${this.#intlDateYear.format(endOfDecade(this.decade()))}`;\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (this.tabbableDate() === null) {\n\t\t\t\tthis.tabbableDate.set(this.date());\n\t\t\t}\n\t\t});\n\t}\n\n\tfocusTabbableDate(): void {\n\t\tthis.calendar2CellInstances()\n\t\t\t.find((cell) => cell.isTabbableDate())\n\t\t\t?.focus();\n\t}\n\n\tblurTabbableDate(): void {\n\t\tthis.calendar2CellInstances()\n\t\t\t.find((cell) => cell.isTabbableDate())\n\t\t\t?.blur();\n\t}\n\n\tclickToday() {\n\t\tthis.onCellClicked(startOfDay(new Date()));\n\t}\n\n\tngOnInit(): void {\n\t\t// On init, set display mode to the mode specified by component consumer\n\t\tif (this.displayMode() === null) {\n\t\t\tthis.displayMode.set(this.mode());\n\t\t}\n\t}\n\n\tonCellClicked(date: Date): void {\n\t\t// On cell clicked, if display mode is same as mode, emit value\n\t\t// Else, zoom in to new mode\n\t\tif (this.displayMode() === this.mode()) {\n\t\t\tthis.dateClicked.emit(date);\n\t\t} else {\n\t\t\t// Check that we are able to zoom in\n\t\t\tconst maxZoomLevel = MODE_HIERARCHY.indexOf(this.mode());\n\t\t\tconst currentZoomLevel = MODE_HIERARCHY.indexOf(this.displayMode());\n\t\t\tconst targetZoomLevel = currentZoomLevel - 1;\n\t\t\tif (targetZoomLevel >= 0 && targetZoomLevel >= maxZoomLevel) {\n\t\t\t\tconst newZoomLevel = MODE_HIERARCHY[targetZoomLevel];\n\t\t\t\tswitch (newZoomLevel) {\n\t\t\t\t\tcase 'year':\n\t\t\t\t\t\tthis.date.set(startOfDecade(date));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'month':\n\t\t\t\t\t\tthis.date.set(startOfYear(date));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'day':\n\t\t\t\t\t\tthis.date.set(startOfMonth(date));\n\t\t\t\t}\n\t\t\t\tthis.displayMode.set(newZoomLevel);\n\t\t\t}\n\t\t}\n\t}\n\n\tdateToCellInfo(date: Date, isOverflow = false): CalendarCellInfo {\n\t\t// This method is quite complex and packs a lot of logic, let's try to decompose and explain it.\n\n\t\t// First of all get cell status from the input, if the consumer needs to apply specific statuses to it\n\t\tconst status = this.getCellInfo()(date, this.displayMode());\n\n\t\t// We need to store a boolean for day mode, because some logic is specific to day display (like weekends for instance)\n\t\tconst isDayMode = this.displayMode() === 'day';\n\n\t\t// Keeping consumer's classes aside\n\t\tconst classes: string[] = status?.classes || [];\n\n\t\t// Let's grab the ranges in which this date is in, which includes the \"in progress\" one if it exists, using the current hovered date\n\t\tconst rangeInfo = this.getRangeInfo(date, this.displayMode(), isOverflow);\n\n\t\t// If the range includes classes, add them to our display classes\n\t\tif (rangeInfo?.class) {\n\t\t\tclasses.push(rangeInfo.class);\n\t\t}\n\n\t\t// Day specific logic\n\t\t// Is it weekend day? for is-dayOff class toggle\n\t\tconst isWeekend = isDayMode && this.#weekInfo.weekend.includes(getIntlWeekDay(date)) && !this.hideWeekend();\n\t\t// Is it first day of month? Mostly used for overflow display logic\n\t\tconst isFirstDayOfMonth = isDayMode && isSameDay(startOfMonth(date), rangeInfo?.range.start);\n\n\t\t// Is this the current period? Will match if same day as today, or same month in month display, or same year if year display\n\t\tconst isCurrent = comparePeriods(this.displayMode(), new Date(), date) && !this.hideToday();\n\n\t\t// Are we currently in a range that's being created (start date selected, end date is being hovered)\n\t\tconst isInProgress = rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() !== null;\n\n\t\t// Progress flags\n\t\tlet isProgressBody = false;\n\t\tlet isProgressStart = !!rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() === null;\n\t\tlet isProgressEnd = !!rangeInfo?.range && !rangeInfo.range.end && this.dateHovered() === null;\n\t\t// Specific case for when start is == end and we're hovering it\n\t\tlet isSingleDayInProgress = false;\n\n\t\tif (isInProgress) {\n\t\t\tlet start = rangeInfo?.range.start;\n\t\t\t// If we're in day mode, depending on if first day of month or not, we want to consider the start or the end of the day,\n\t\t\t// To make sure we don't conflict with overflow\n\t\t\tif (isDayMode) {\n\t\t\t\tstart = isFirstDayOfMonth ? endOfDay(rangeInfo.range.start) : startOfDay(rangeInfo.range.start);\n\t\t\t}\n\t\t\tconst hoveredRange: Interval = {\n\t\t\t\tstart,\n\t\t\t\tend: startOfDay(this.dateHovered()),\n\t\t\t};\n\n\t\t\t// If start is after end, fix this by inverting the two, we always want to work with start before end\n\t\t\tif (isAfter(hoveredRange.start, hoveredRange.end)) {\n\t\t\t\tlet newStart = hoveredRange.end;\n\t\t\t\tconst newStartIsFirstDayOfMonth = isSameDay(startOfMonth(hoveredRange.end), hoveredRange.end);\n\t\t\t\tif (isDayMode) {\n\t\t\t\t\tnewStart = newStartIsFirstDayOfMonth ? endOfDay(hoveredRange.end) : startOfDay(hoveredRange.end);\n\t\t\t\t}\n\t\t\t\thoveredRange.end = rangeInfo.range.start;\n\t\t\t\thoveredRange.start = newStart;\n\t\t\t}\n\n\t\t\t// if we're working on overflow for after the last day of a month, we want to use end of day as comparison date\n\t\t\tconst isEndOfMonthOverflow = isOverflow && isSameDay(date, startOfMonth(date));\n\n\t\t\tif (isEndOfMonthOverflow) {\n\t\t\t\thoveredRange.end = endOfDay(hoveredRange.end);\n\t\t\t}\n\t\t\t// We're progress body if middle of day is in the current range\n\t\t\tisProgressBody = isWithinInterval(addHours(startOfDay(date), 12), hoveredRange);\n\t\t\t// Overflow cannot be start status for CSS, same for end\n\t\t\tisProgressStart = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.start as Date);\n\t\t\tisProgressEnd = !isOverflow && comparePeriods(this.displayMode(), date, hoveredRange.end as Date);\n\n\t\t\t// This is the case where you clicked a first date and then are hovering it, which requires a specific case for CSS\n\t\t\tif (isSameDay(rangeInfo.range.start, this.dateHovered())) {\n\t\t\t\tisSingleDayInProgress = !isOverflow && isSameDay(hoveredRange.start, hoveredRange.end) && isSameDay(hoveredRange.start, this.dateHovered());\n\t\t\t}\n\t\t}\n\n\t\tconst isSelected = status.selected || (!!rangeInfo?.range && !isInProgress);\n\n\t\treturn {\n\t\t\tday: date.getDate(),\n\t\t\tstatus,\n\t\t\tlabel: status.label || rangeInfo?.label,\n\t\t\tdate,\n\t\t\trangeInfo,\n\t\t\tisWeekend,\n\t\t\tisCurrent,\n\t\t\tisOverflow,\n\t\t\tisSelected,\n\t\t\tnoButton: isOverflow && !this.showOverflow(),\n\t\t\tdisabled: status?.disabled || (isOverflow && !this.enableOverflow()),\n\t\t\t// Compile everything into a list of classes for CSS\n\t\t\tclasses: {\n\t\t\t\t'is-daysOff': isWeekend,\n\t\t\t\t'is-overflow': isOverflow,\n\t\t\t\t'is-current': isCurrent,\n\t\t\t\t'is-start': !isOverflow && (rangeInfo?.isStart || status.selected) && !isInProgress,\n\t\t\t\t'is-end': !isOverflow && (rangeInfo?.isEnd || status.selected) && !isInProgress,\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t// Range in progress statuses\n\t\t\t\t'is-selectionInProgress': isProgressBody,\n\t\t\t\t'is-startInProgress': isProgressStart,\n\t\t\t\t'is-endInProgress': isProgressEnd,\n\t\t\t\t'is-singleDayInProgress': isSingleDayInProgress,\n\n\t\t\t\t...classes.reduce((acc, key) => ({ ...acc, [key]: true }), {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tgetRangeInfo(date: Date, scope: CalendarMode, isOverflow = false) {\n\t\tconst range: DateRange | undefined = this.ranges().find((range: DateRange) => {\n\t\t\tconst isSameScope = (range.scope || 'day') === scope;\n\t\t\tif (isSameScope) {\n\t\t\t\tif (range.end) {\n\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\tstart: isOverflow ? endOfDay(range.start) : startOfDay(range.start),\n\t\t\t\t\t\tend: isOverflow ? startOfDay(range.end) : range.end,\n\t\t\t\t\t});\n\t\t\t\t} else if (this.dateHovered() !== null) {\n\t\t\t\t\t// Nominal case: end is after start\n\t\t\t\t\tif (isAfter(this.dateHovered(), startOfDay(range.start))) {\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(range.start),\n\t\t\t\t\t\t\tend: endOfDay(this.dateHovered()),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// When user clicked end date first and now wants to select a start date\n\t\t\t\t\t\treturn isWithinInterval(date, {\n\t\t\t\t\t\t\tstart: startOfDay(this.dateHovered()),\n\t\t\t\t\t\t\tend: endOfDay(range.start),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (this.mode()) {\n\t\t\t\t\t\tcase 'day':\n\t\t\t\t\t\t\treturn isSameDay(date, range.start);\n\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\treturn isSameMonth(date, range.start);\n\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\treturn isSameYear(date, range.start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isStart: boolean = range && isSameDay(date, range.start);\n\t\tconst isEnd: boolean = range && range.end && isSameDay(date, range.end);\n\n\t\treturn {\n\t\t\trange,\n\t\t\tisStart,\n\t\t\tisEnd,\n\t\t\tlabel: range?.label,\n\t\t\tclass: range?.class,\n\t\t};\n\t}\n}\n","<div class=\"calendar\">\n\t@switch (displayMode()) {\n\t\t@case (\"day\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-name\" aria-live=\"polite\">\n\t\t\t\t@if (disableModeChange()) {\n\t\t\t\t\t{{ currentMonthLabel() }}&ngsp; {{ currentYearLabel() }}\n\t\t\t\t} @else {\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('month')\">{{ currentMonthLabel() }}</button>&ngsp;\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('year')\">{{ currentYearLabel() }}</button>\n\t\t\t\t}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-name\">\n\t\t\t\t<thead class=\"calendar-table-head\">\n\t\t\t\t\t<tr class=\"calendar-table-head-row\">\n\t\t\t\t\t\t@for (day of daysOfWeek; track day.long) {\n\t\t\t\t\t\t\t<th class=\"calendar-table-head-row-cell\" scope=\"col\">\n\t\t\t\t\t\t\t\t<span [attr.data-content-after]=\"day.short.substring(0, 1)\" aria-hidden=\"true\"></span>\n\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ day.long }}</span>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (week of monthGridDisplay(); track $index; let isLastWeek = $last) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (day of week; track dayIndex; let dayIndex = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"day.isOverflow ? null : dateHovered.set(day.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"day.isOverflow ? null : dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"day.isSelected && !day.isOverflow\"\n\t\t\t\t\t\t\t\t\t[class]=\"day.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@if (!day.noButton) {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"dayIndex\"\n\t\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"day.date\"\n\t\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"day\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"day.disabled ? 'true' : null\"\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"day.disabled ? null : onCellClicked(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"day.disabled ? null : onCellClicked(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(focus)=\"day.isOverflow ? null : dateHovered.set(day.date)\"\n\t\t\t\t\t\t\t\t\t\t\t(blur)=\"day.isOverflow ? null : dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t\t[luTooltip]=\"day.label\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{{ day.day }}\n\t\t\t\t\t\t\t\t\t\t\t@if (day.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ todayLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if (day.isWeekend) {\n\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"calendar-table-body-row-cell-action-stripes\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<use href=\"#calendar-stripes-symbol\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<td class=\"calendar-table-body-row-cell is-overflow\" *luRepeatTimes=\"isLastWeek ? 7 - week.length : 0\"></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t\t<tr class=\"calendar-table-body-row\" *luRepeatTimes=\"6 - monthGridDisplay().length\">\n\t\t\t\t\t\t<td class=\"calendar-table-body-row-cell is-overflow\" *luRepeatTimes=\"7\"></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t@if (hasTodayButton()) {\n\t\t\t\t<div class=\"calendar-divider divider\"></div>\n\t\t\t\t<button class=\"calendar-todayLink link\" type=\"button\" (click)=\"clickToday()\">{{ todayLabel }}</button>\n\t\t\t}\n\t\t\t<svg class=\"calendar-stripes\" xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" aria-hidden=\"true\">\n\t\t\t\t<symbol id=\"calendar-stripes-symbol\" viewBox=\"0 0 60 60\">\n\t\t\t\t\t<path\n\t\t\t\t\t\tclass=\"calendar-stripes-symbol-path\"\n\t\t\t\t\t\td=\"m-41.82 43.03 84.85-84.85.53.53-84.85 84.85zm2.12 2.12L45.15-39.7l.53.53-84.85 84.85zm2.12 2.12\n\t\t\t84.85-84.85.53.53-84.85 84.85zm2.12 2.13L49.4-35.47l.53.53-84.85 84.85zm2.12 2.11\n\t\t\t84.85-84.85.54.53-84.86 84.86zm2.12 2.13 84.86-84.86.53.53-84.86 84.86zm2.12\n\t\t\t2.12L55.76-29.1l.53.53-84.86 84.86zm2.13 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12L60-24.85l.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12L64.24-20.6l.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.13L68.5-16.37l.53.53-84.86 84.86zm2.12 2.11 84.86-84.85.53.53-84.86 84.86zm2.13 2.13\n\t\t\t84.85-84.85.53.53-84.85 84.85zm2.12 2.12L74.85-10l.53.53-84.85 84.85zm2.12\n\t\t\t2.12L76.97-7.88l.53.53L-7.35 77.5zm2.12 2.13L79.09-5.77l.53.53-84.85 84.85zm2.12\n\t\t\t2.11L81.21-3.64l.53.53L-3.1 81.74zm2.12 2.12L83.33-1.52l.53.53L-.99\n\t\t\t83.86zM.6 85.46 85.46.6l.53.53L1.13 86zm2.12 2.12L87.58 2.72l.53.53L3.25 88.11zm2.13 2.12L89.7\n\t\t\t4.85l.53.53L5.38 90.23zm2.12 2.12L91.82 6.97l.53.53L7.5 92.35zm2.12 2.12L93.94 9.1l.53.53L9.62\n\t\t\t94.47zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12 2.12 84.85-84.85.53.53-84.85 84.85zm2.12\n\t\t\t2.12 84.86-84.85.53.53-84.86 84.86z\"\n\t\t\t\t\t/>\n\t\t\t\t</symbol>\n\t\t\t</svg>\n\t\t}\n\t\t@case (\"month\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-year-name\">\n\t\t\t\t@if (disableModeChange()) {\n\t\t\t\t\t{{ currentYearLabel() }}\n\t\t\t\t} @else {\n\t\t\t\t\t<button type=\"button\" class=\"calendar-name-button\" (click)=\"displayMode.set('year')\">{{ currentYearLabel() }}</button>\n\t\t\t\t}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-year-name\">\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (quarter of yearGridDisplay(); track $index) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (month of quarter; track month.date.getTime(); let index = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"month.status.selected || !!month.rangeInfo?.range\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"dateHovered.set(month.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[class]=\"month.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t[attr.data-content-after]=\"month.short\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"index\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"month.date\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"month.status.disabled\"\n\t\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(month.date)\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"onCellClicked(month.date)\"\n\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"onCellClicked(month.date)\"\n\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"month\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">{{ month.long }}</span>\n\t\t\t\t\t\t\t\t\t\t@if (month.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ thisMonthLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t}\n\t\t@case (\"year\") {\n\t\t\t<div class=\"calendar-name\" id=\"calendar-decade-name\">\n\t\t\t\t{{ currentDecadeLabel() }}\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().directionKeysTip }} </span>\n\t\t\t</div>\n\t\t\t<table class=\"calendar-table\" role=\"grid\" aria-labelledby=\"calendar-decade-name\">\n\t\t\t\t<tbody class=\"calendar-table-body\">\n\t\t\t\t\t@for (row of decadeGridDisplay(); track $index) {\n\t\t\t\t\t\t<tr class=\"calendar-table-body-row\">\n\t\t\t\t\t\t\t@for (year of row; track year.date.getTime(); let index = $index) {\n\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell\"\n\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"year.status.selected || !!year.rangeInfo?.range\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"dateHovered.set(year.date)\"\n\t\t\t\t\t\t\t\t\t(mouseleave)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t[class]=\"year.classes\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"calendar-table-body-row-cell-action\"\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Cell]=\"index\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"year.status.disabled\"\n\t\t\t\t\t\t\t\t\t\t[luCalendar2Date]=\"year.date\"\n\t\t\t\t\t\t\t\t\t\tluCalendar2Mode=\"year\"\n\t\t\t\t\t\t\t\t\t\t(focus)=\"dateHovered.set(year.date)\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"dateHovered.set(null)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"onCellClicked(year.date)\"\n\t\t\t\t\t\t\t\t\t\t(keydown.space)=\"onCellClicked(year.date)\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ year.name }}\n\t\t\t\t\t\t\t\t\t\t@if (year.isCurrent) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-mask\">({{ thisYearLabel }})</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t}\n\t}\n</div>\n","import { CalendarMode } from './public-api';\n\nexport function getDateFormat(locale: string, mode: CalendarMode = 'day'): string {\n\treturn new Intl.DateTimeFormat(locale)\n\t\t.formatToParts(new Date('01/01/2024'))\n\t\t.reduce((acc, part) => {\n\t\t\tif (part.type === 'day' && mode === 'day') {\n\t\t\t\treturn `${acc}${'d'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'month' && mode !== 'year') {\n\t\t\t\treturn `${acc}${'M'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'year') {\n\t\t\t\treturn `${acc}${'y'.repeat(part.value.length)}`;\n\t\t\t}\n\t\t\tif (part.type === 'literal') {\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, '')\n\t\t.replace(/^\\/+/, '');\n}\n\nexport function getSeparator(locale: string): string {\n\treturn new Intl.DateTimeFormat(locale).formatToParts(new Date('01/01/2024')).find((part) => part.type === 'literal')?.value || '/';\n}\n\n// Warning: it works on Latin languages, but deserves to be tested on non-Latin languages\nexport function getLocalizedDateFormat(locale: string, period: 'year' | 'month' | 'day' = 'day'): string {\n\tconst letterLocalizedForDay = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'day')[2]['value'].charAt(1).toUpperCase();\n\tconst letterLocalizedForMonth = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'month')[2]['value'].charAt(1).toUpperCase();\n\tconst letterLocalizedForYear = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).formatToParts(100, 'year')[2]['value'].charAt(1).toUpperCase();\n\n\tconst intlConfig: Intl.DateTimeFormatOptions = {\n\t\tyear: 'numeric',\n\t};\n\n\tif (period === 'month' || period === 'day') {\n\t\tintlConfig.month = 'numeric';\n\t}\n\n\tif (period === 'day') {\n\t\tintlConfig.day = 'numeric';\n\t}\n\n\treturn new Intl.DateTimeFormat(locale, intlConfig).formatToParts(new Date('01/01/2024')).reduce((acc, part) => {\n\t\tswitch (part.type) {\n\t\t\tcase 'day':\n\t\t\t\treturn `${acc}${letterLocalizedForDay.repeat(part.value.length)}`;\n\t\t\tcase 'month':\n\t\t\t\treturn `${acc}${letterLocalizedForMonth.repeat(part.value.length)}`;\n\t\t\tcase 'year':\n\t\t\t\treturn `${acc}${letterLocalizedForYear.repeat(part.value.length)}`;\n\t\t\tcase 'literal':\n\t\t\t\treturn `${acc}${part.value}`;\n\t\t}\n\t\treturn acc;\n\t}, '');\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, inject, input, LOCALE_ID, model, output, signal } from '@angular/core';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { addMonths, addYears, isAfter, isBefore, isSameMonth, startOfDay, startOfMonth } from 'date-fns';\nimport { CalendarMode } from './calendar2/calendar-mode';\nimport { CellStatus } from './calendar2/cell-status';\nimport { DateRange, DateRangeInput } from './calendar2/date-range';\nimport { getDateFormat, getLocalizedDateFormat, getSeparator } from './date-format';\nimport { DATE_FORMAT, DateFormat } from './date.const';\nimport { LU_DATE2_TRANSLATIONS } from './date2.translate';\nimport { transformDateInputToDate, transformDateRangeInputToDateRange } from './utils';\n\n@Component({\n\tselector: '',\n\ttemplate: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AbstractDateComponent {\n\tprotected locale = inject(LOCALE_ID);\n\t// Contains the current date format (like dd/mm/yy etc) based on current locale\n\tprotected dateFormat = getDateFormat(this.locale);\n\tprotected separator = getSeparator(this.locale);\n\tprotected dateFormatWithMode = computed(() => getDateFormat(this.locale, this.mode()));\n\tintlDateTimeFormat = new Intl.DateTimeFormat(this.locale);\n\n\tintlDateTimeFormatMonth = new Intl.DateTimeFormat(this.locale, { month: 'numeric', year: 'numeric' });\n\tintlDateTimeFormatYear = new Intl.DateTimeFormat(this.locale, { year: 'numeric' });\n\n\tintl = input(...intlInputOptions(LU_DATE2_TRANSLATIONS));\n\n\tonTouched?: () => void;\n\tdisabled = signal<boolean>(false);\n\n\treadonly format = input<DateFormat>(DATE_FORMAT.DATE);\n\tprotected inDateISOFormat = computed(() => this.format() === DATE_FORMAT.DATE_ISO);\n\n\treadonly ranges = input([], { transform: (v: readonly DateRange[] | readonly DateRangeInput[]) => v.map(transformDateRangeInputToDateRange) });\n\treadonly hideToday = input(false, { transform: booleanAttribute });\n\treadonly hasTodayButton = input(false, { transform: booleanAttribute });\n\treadonly clearable = input(null, { transform: booleanAttribute });\n\treadonly clearBehavior = input<'clear' | 'reset'>('clear');\n\n\treadonly mode = input<CalendarMode>('day');\n\treadonly hideWeekend = input(false, { transform: booleanAttribute });\n\n\treadonly getCellInfo = input<((day: Date, mode: CalendarMode) => CellStatus) | null>();\n\n\treadonly min = input(new Date('1/1/1000'), {\n\t\ttransform: transformDateInputToDate,\n\t});\n\treadonly max = input(null, {\n\t\ttransform: transformDateInputToDate,\n\t});\n\treadonly focusedDate = input(null, {\n\t\ttransform: transformDateInputToDate,\n\t});\n\n\tcalendarMode = model<CalendarMode>();\n\n\treadonly panelOpened = output<void>();\n\n\treadonly panelClosed = output<void>();\n\n\treadonly dateFormatLocalized = computed(() => getLocalizedDateFormat(this.locale, this.mode()));\n\n\tprotected currentDate = signal(new Date());\n\n\tprotected tabbableDate = signal<Date | null>(null);\n\n\tprotected constructor() {\n\t\teffect(() => {\n\t\t\tconst focusedDate = this.focusedDate();\n\t\t\tif (focusedDate) {\n\t\t\t\tthis.currentDate.set(startOfDay(focusedDate));\n\t\t\t}\n\t\t});\n\t}\n\n\tisInMinMax(date: Date, mode: CalendarMode): boolean {\n\t\treturn this.isAfterMin(date, mode) && this.isBeforeMax(date, mode);\n\t}\n\n\tisAfterMin(date: Date, mode: CalendarMode): boolean {\n\t\tif (!this.min()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.min().getTime() <= date.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isBefore(startOfMonth(this.min()), startOfMonth(date)) || isSameMonth(this.min(), date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.min().getFullYear() <= date.getFullYear();\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tisBeforeMax(date: Date, mode: CalendarMode): boolean {\n\t\tif (!this.max()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.max().getTime() >= date.getTime();\n\t\t\tcase 'month':\n\t\t\t\treturn isAfter(startOfMonth(this.max()), startOfMonth(date)) || isSameMonth(this.max(), date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.max().getFullYear() >= date.getFullYear();\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tisValidDate(date: Date): boolean {\n\t\treturn !!date && !isNaN(date.getTime());\n\t}\n\n\tprev(mode: CalendarMode) {\n\t\tthis.move(-1, mode);\n\t}\n\n\tnext(mode: CalendarMode) {\n\t\tthis.move(1, mode);\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tmove(direction: 1 | -1, mode: CalendarMode): void {\n\t\tswitch (mode) {\n\t\t\tcase 'year':\n\t\t\t\tthis.currentDate.set(addYears(this.currentDate(), direction * 10));\n\t\t\t\tthis.tabbableDate.set(addYears(this.tabbableDate(), direction * 10));\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\tthis.currentDate.set(addYears(this.currentDate(), direction));\n\t\t\t\tthis.tabbableDate.set(addYears(this.tabbableDate(), direction));\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\tthis.currentDate.set(addMonths(this.currentDate(), direction));\n\t\t\t\tthis.tabbableDate.set(addMonths(this.tabbableDate(), direction));\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n","import { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostBinding,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tsignal,\n\tuntracked,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgModel, Validator } from '@angular/forms';\nimport { LuccaIcon } from '@lucca-front/icons';\nimport { ClearComponent } from '@lucca-front/ng/clear';\nimport { isNil, LuClass, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills';\nimport { InputDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { isSameDay, parse, startOfDay } from 'date-fns';\nimport { AbstractDateComponent } from '../abstract-date-component';\nimport { CalendarMode } from '../calendar2/calendar-mode';\nimport { Calendar2Component } from '../calendar2/calendar2.component';\nimport { CellStatus } from '../calendar2/cell-status';\nimport { comparePeriods, startOfPeriod, transformDateInputToDate, transformDateToDateISO } from '../utils';\n\nexport type DateInputValidatorErrorType = {\n\tmin: true;\n\tmax: true;\n\tdate: true;\n};\n\n@Component({\n\tselector: 'lu-date-input',\n\timports: [PopoverDirective, Calendar2Component, IconComponent, InputDirective, NgTemplateOutlet, FilterPillDisplayerDirective, ClearComponent],\n\ttemplateUrl: './date-input.component.html',\n\tstyleUrl: './date-input.component.scss',\n\thost: {\n\t\tclass: 'dateField',\n\t},\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: FILTER_PILL_INPUT_COMPONENT,\n\t\t\tuseExisting: forwardRef(() => DateInputComponent),\n\t\t},\n\t\tLuClass,\n\t],\n})\nexport class DateInputComponent extends AbstractDateComponent implements OnInit, ControlValueAccessor, Validator, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\t#injector = inject(Injector);\n\t#ngControl: NgControl; // Initialized in ngOnInit\n\n\t// CVA stuff\n\t#onChange?: (value: Date | null) => void;\n\n\t#luClass = inject(LuClass);\n\n\tautocomplete = input<AutoFill>('off');\n\n\tplaceholder = input<string>();\n\n\tdisableOverflow = input(false, { transform: booleanAttribute });\n\thideOverflow = input(false, { transform: booleanAttribute });\n\twidthAuto = input(false, { transform: booleanAttribute });\n\n\tfilterPillDisabled = signal(false);\n\n\tpopoverPositions: ConnectionPositionPair[] = [\n\t\tnew ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, -8, 0),\n\t\tnew ConnectionPositionPair(\n\t\t\t{ originX: 'start', originY: 'top' },\n\t\t\t{\n\t\t\t\toverlayX: 'start',\n\t\t\t\toverlayY: 'bottom',\n\t\t\t},\n\t\t\t-8,\n\t\t\t-32,\n\t\t),\n\t];\n\n\tinputFocused = signal(false);\n\n\tselectedDate = signal<Date | null>(null);\n\n\tinitialValue = signal<Date | null>(undefined);\n\tdateFromWriteValue = signal<Date | null>(null);\n\n\tcalendar = viewChild(Calendar2Component);\n\n\tinputRef = viewChild<ElementRef<HTMLInputElement>>('date');\n\n\tdisplayValue = computed(() => {\n\t\tconst textInput = this.userTextInput();\n\t\tif (textInput !== 'ɵ') {\n\t\t\tconst parsedInput = parse(textInput, this.dateFormatWithMode(), startOfDay(new Date()));\n\t\t\tif (this.isValidDate(parsedInput) && this.inputFocused()) {\n\t\t\t\treturn textInput;\n\t\t\t}\n\t\t}\n\t\tif (this.selectedDate() && this.isValidDate(this.selectedDate())) {\n\t\t\tlet formatter: Intl.DateTimeFormat;\n\t\t\tswitch (this.mode()) {\n\t\t\t\tcase 'day':\n\t\t\t\t\tformatter = this.intlDateTimeFormat;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'month':\n\t\t\t\t\tformatter = this.intlDateTimeFormatMonth;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'year':\n\t\t\t\t\tformatter = this.intlDateTimeFormatYear;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn formatter.format(this.selectedDate());\n\t\t}\n\t\t// If we are initializing the component, we don't want to display the value\n\t\tif (textInput === 'ɵ') {\n\t\t\treturn '';\n\t\t}\n\t\treturn textInput;\n\t});\n\n\t// We need to use a \"magic key\" here to avoid sending a null value change on initialization\n\tuserTextInput = signal<string>('ɵ');\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: this.selectedDate() && this.calendarMode() === mode && comparePeriods(mode, date, this.selectedDate()),\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\tpreviousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\tnextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t@HostBinding('class.mod-filterPill')\n\tisFilterPill = false;\n\n\t@HostBinding('class.mod-auto')\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\tisFilterPillEmpty = computed(() => !this.selectedDate());\n\tisFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\t#defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\teffect(() => {\n\t\t\tconst nativeElement = this.inputRef().nativeElement;\n\t\t\tconst cursorPositionBefore = nativeElement.selectionStart;\n\t\t\tconst displayValue = this.displayValue();\n\t\t\tnativeElement.value = this.displayValue();\n\t\t\tif (displayValue.endsWith(this.separator)) {\n\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore + 1, cursorPositionBefore + 1);\n\t\t\t} else {\n\t\t\t\tnativeElement.setSelectionRange(cursorPositionBefore, cursorPositionBefore);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst inputValue = this.userTextInput();\n\t\t\t// If we are initializing the component, we don't want to parse the value\n\t\t\tif (inputValue === 'ɵ') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (inputValue.length > 0) {\n\t\t\t\tlet parsed: Date;\n\t\t\t\ttry {\n\t\t\t\t\tparsed = parse(inputValue, this.dateFormatWithMode(), startOfDay(new Date()));\n\t\t\t\t} catch {\n\t\t\t\t\t/* not a correct date */\n\t\t\t\t}\n\t\t\t\tif (parsed instanceof Date && parsed.getFullYear() > 999) {\n\t\t\t\t\tthis.selectedDate.set(startOfDay(parsed));\n\t\t\t\t\tthis.currentDate.set(startOfDay(parsed));\n\t\t\t\t\tthis.tabbableDate.set(startOfDay(parsed));\n\t\t\t\t} else if (!this.isFilterPill) {\n\t\t\t\t\tthis.onTouched?.();\n\t\t\t\t\tthis.selectedDate.set(parsed);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.selectedDate.set(null);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tif (!this.#safeCompareDate(untracked(this.dateFromWriteValue), this.selectedDate())) {\n\t\t\t\tthis.#onChange?.(this.selectedDate());\n\t\t\t\tthis.dateFromWriteValue.set(null);\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.#luClass.setState({\n\t\t\t\t'mod-day': this.mode() === 'day',\n\t\t\t\t'mod-month': this.mode() === 'month',\n\t\t\t\t'mod-year': this.mode() === 'year',\n\t\t\t});\n\t\t});\n\n\t\tɵeffectWithDeps([this.mode, this.calendarMode], (mode, calendarMode) => {\n\t\t\tif (mode && isNil(calendarMode)) {\n\t\t\t\tthis.calendarMode.set(mode);\n\t\t\t}\n\t\t});\n\n\t\tɵeffectWithDeps([this.calendarMode, this.tabbableDate], (calendarMode, tabbableDate) => {\n\t\t\tif (tabbableDate && !comparePeriods(calendarMode, tabbableDate, this.currentDate())) {\n\t\t\t\tthis.currentDate.set(startOfPeriod(calendarMode, tabbableDate));\n\t\t\t}\n\t\t\tif (!this.isNavigationButtonFocused && !this.inputFocused()) {\n\t\t\t\tthis.calendar()?.blurTabbableDate();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.#ngControl = this.#injector.get(NgControl);\n\t}\n\n\t#safeCompareDate(a: Date, b: Date): boolean {\n\t\treturn a === b || (!!a && !!b && isSameDay(a, b));\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.filterPillPopoverCloseFn = closeFn;\n\t}\n\n\tenableFilterPillMode(): void {\n\t\tthis.isFilterPill = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t}\n\n\tclearFilterPillValue(): void {\n\t\tthis.clear();\n\t}\n\n\tgetDefaultFilterPillIcon(): LuccaIcon {\n\t\treturn 'calendarDate';\n\t}\n\n\topenPopover(ref: PopoverDirective): void {\n\t\tif (!this.isFilterPill) {\n\t\t\tref.openPopover(true, true);\n\t\t\t// Once popover is opened, aka in the next CD cycle, focus current tabbable date\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t});\n\t\t}\n\t}\n\n\tarrowDown(popoverRef: PopoverDirective) {\n\t\tif (this.isFilterPill) {\n\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t} else {\n\t\t\tif (popoverRef.opened()) {\n\t\t\t\tthis.calendar()?.focusTabbableDate();\n\t\t\t} else {\n\t\t\t\tthis.openPopover(popoverRef);\n\t\t\t}\n\t\t}\n\t}\n\n\tspaceDown(event: Event, popoverRef: PopoverDirective) {\n\t\tif (this.userTextInput()?.length === 0) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.openPopover(popoverRef);\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl<Date | string | null>): Partial<DateInputValidatorErrorType> | null {\n\t\t// null is not an error but means we'll skip everything else, we'll let the presence of a\n\t\t// Validators.required (or not) decide if it's an error.\n\t\tif (control.value === null || control.value === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\tconst date = transformDateInputToDate(control.value);\n\t\t// try to parse the display value cause formControl.value is undefined if date is not parsable\n\t\ttry {\n\t\t\tparse(this.displayValue(), this.dateFormatWithMode(), startOfDay(new Date()));\n\t\t} catch {\n\t\t\t/* not a correct date */\n\t\t\treturn { date: true };\n\t\t}\n\t\t// Check date validity\n\t\tif (!this.isValidDate(date)) {\n\t\t\treturn { date: true };\n\t\t}\n\t\t// Check min and max\n\t\tif (this.min() && !this.isAfterMin(date, this.mode())) {\n\t\t\treturn { min: true };\n\t\t} else if (this.max() && !this.isBeforeMax(date, this.mode())) {\n\t\t\treturn { max: true };\n\t\t}\n\t\t// Everything is valid\n\t\treturn null;\n\t}\n\n\twriteValue(date: Date | string | null): void {\n\t\tif (this.#ngControl instanceof NgModel && isNil(this.#onChange)) {\n\t\t\t// avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-1310420293\n\t\t\treturn;\n\t\t}\n\n\t\tconst _date = transformDateInputToDate(date);\n\n\t\tif (this.initialValue() === undefined) {\n\t\t\tthis.initialValue.set(_date);\n\t\t}\n\n\t\tif (date != null) {\n\t\t\tconst start = startOfDay(_date);\n\t\t\tthis.dateFromWriteValue.set(start);\n\t\t\tthis.selectedDate.set(start);\n\t\t\tthis.currentDate.set(start);\n\t\t} else {\n\t\t\tthis.reset();\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: Date | string | null) => void): void {\n\t\tthis.#onChange = (date: Date | null) => {\n\t\t\tfn(date && this.inDateISOFormat() && this.isValidDate(date) ? transformDateToDateISO(date) : date);\n\t\t};\n\t}\n\n\toverride setDisabledState(isDisabled: boolean) {\n\t\tthis.filterPillDisabled.set(isDisabled);\n\t\tsuper.setDisabledState(isDisabled);\n\t}\n\n\treset(): Date | null {\n\t\tconst newValue = this.clearBehavior() === 'reset' ? this.initialValue() : null;\n\t\tthis.dateFromWriteValue.set(newValue);\n\t\tthis.selectedDate.set(newValue);\n\t\treturn newValue;\n\t}\n\n\tclear() {\n\t\tconst newValue = this.reset();\n\t\tthis.#onChange?.(newValue);\n\t\tthis.onTouched?.();\n\t}\n\n\tcurrentDateChangeFromCalendar(date: Date): void {\n\t\tthis.tabbableDate.set(date);\n\t\tthis.currentDate.set(date);\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tthis.selectedDate.set(date);\n\t\tthis.currentDate.set(date);\n\t\tthis.tabbableDate.set(date);\n\t\tif (!this.isFilterPill) {\n\t\t\tpopoverRef.close();\n\t\t\tthis.inputRef().nativeElement.focus();\n\t\t}\n\t\tthis.filterPillPopoverCloseFn?.();\n\t}\n\n\tinputBlurred(): void {\n\t\tthis.onTouched?.();\n\t\tthis.inputFocused.set(false);\n\t\tthis.userTextInput.set('ɵ');\n\t}\n}\n","@if (isFilterPill) {\n\t<label for=\"dateInput\" class=\"pr-u-mask\">{{ intl().pickDate }}</label>\n}\n<div class=\"textField dateField-textField\" #popoverAnchor>\n\t<div class=\"textField-input\">\n\t\t<input\n\t\t\ttype=\"text\"\n\t\t\tid=\"dateInput\"\n\t\t\t#date\n\t\t\tluInput\n\t\t\tclass=\"textField-input-value\"\n\t\t\t(input)=\"userTextInput.set(date.value)\"\n\t\t\t(blur)=\"inputBlurred()\"\n\t\t\t(focus)=\"inputFocused.set(true)\"\n\t\t\taria-haspopup=\"true\"\n\t\t\trole=\"combobox\"\n\t\t\t(click)=\"popoverRef.openPopover(true, true)\"\n\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef)\"\n\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t(keydown.space)=\"spaceDown($event, popoverRef)\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[attr.placeholder]=\"placeholder() || dateFormatLocalized()\"\n\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t/>\n\n\t\t<div class=\"textField-input-affix\">\n\t\t\t@if (clearable() && !disabled() && (clearBehavior() === \"clear\" ? date.value !== \"\" : selectedDate() !== initialValue())) {\n\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); date.focus()\">{{ intl().clear }}</lu-clear>\n\t\t\t}\n\t\t\t@if (isFilterPill && !isFilterPillEmpty()) {\n\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); date.focus()\">{{ intl().clear }}</lu-clear>\n\t\t\t}\n\t\t\t<button\n\t\t\t\t[luPopover2]=\"calendar\"\n\t\t\t\t[luPopoverAnchor]=\"popoverAnchor\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[luPopoverNoCloseButton]=\"true\"\n\t\t\t\t[luPopoverDisabled]=\"isFilterPill\"\n\t\t\t\t#popoverRef=\"luPopover2\"\n\t\t\t\t[customPositions]=\"popoverPositions\"\n\t\t\t\t(luPopoverClosed)=\"panelClosed.emit()\"\n\t\t\t\t(luPopoverOpened)=\"panelOpened.emit()\"\n\t\t\t\ttabindex=\"-1\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"button mod-onlyIcon mod-ghost textField-input-affix-toggle\"\n\t\t\t>\n\t\t\t\t<lu-icon [icon]=\"'calendarDate'\" [alt]=\"intl().pickDate\" />\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n\n@if (isFilterPill) {\n\t<ng-container *ngTemplateOutlet=\"calendar\" />\n}\n\n<div *luFilterPillDisplayer>{{ displayValue() }}</div>\n\n<ng-template #calendar>\n\t<div class=\"calendarWrapper\">\n\t\t<div class=\"calendarWrapper-navigation pr-u-left0\">\n\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"prev(calendarMode())\" #previousButtonRef>\n\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronLeft\"></span><span class=\"pr-u-mask\">{{ intl().previous }}</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"calendarWrapper-navigation pr-u-right0\">\n\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"next(calendarMode())\" #nextButtonRef>\n\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronRight\"></span><span class=\"pr-u-mask\"> {{ intl().next }}</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"calendarWrapper-content\" tabindex=\"-1\">\n\t\t\t<lu-calendar2\n\t\t\t\t[enableOverflow]=\"!disableOverflow()\"\n\t\t\t\t[showOverflow]=\"!hideOverflow()\"\n\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t[hasTodayButton]=\"hasTodayButton()\"\n\t\t\t\t[date]=\"currentDate()\"\n\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t[(tabbableDate)]=\"tabbableDate\"\n\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t[ranges]=\"ranges()\"\n\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t(nextPage)=\"move(1, calendarMode())\"\n\t\t\t\t(previousPage)=\"move(-1, calendarMode())\"\n\t\t\t\t[(displayMode)]=\"calendarMode\"\n\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</ng-template>\n","import { DateRange } from '../calendar2/date-range';\nimport { endOfDay, endOfMonth, endOfQuarter, endOfWeek, endOfYear, startOfDay, startOfMonth, startOfQuarter, startOfWeek, startOfYear, subMonths, subQuarters, subWeeks, subYears } from 'date-fns';\nimport { getLocaleFirstDayOfWeek } from '@angular/common';\n\nexport interface CalendarShortcut {\n\tlabel: string;\n\trange: DateRange;\n}\n\nexport const PremadeShortcuts: Record<string, (locale: string) => DateRange> = {\n\tSinceStartOfWeek: (locale: string) => {\n\t\treturn {\n\t\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\t\tstart: startOfWeek(new Date(), { weekStartsOn: getLocaleFirstDayOfWeek(locale) }),\n\t\t\tend: startOfDay(new Date()),\n\t\t};\n\t},\n\tLastWeek: (locale: string) => {\n\t\tconst startOfLastWeek = startOfWeek(subWeeks(new Date(), 1), { weekStartsOn: getLocaleFirstDayOfWeek(locale) });\n\t\treturn {\n\t\t\t// TODO find a reliable way to obtain this, Angular has a deprecated method, date-fns can't get locale from string, Intl's weekDay isn't in firefox\n\t\t\tstart: startOfLastWeek,\n\t\t\tend: endOfWeek(startOfLastWeek, { weekStartsOn: getLocaleFirstDayOfWeek(locale) }),\n\t\t};\n\t},\n\tSinceStartOfMonth: () => {\n\t\treturn {\n\t\t\tstart: startOfMonth(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastMonth: () => {\n\t\tconst startOfLastMonth = startOfMonth(subMonths(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastMonth,\n\t\t\tend: endOfMonth(startOfLastMonth),\n\t\t};\n\t},\n\tSinceStartOfQuarter: () => {\n\t\treturn {\n\t\t\tstart: startOfQuarter(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastQuarter: () => {\n\t\tconst startOfLastQuarter = startOfQuarter(subQuarters(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastQuarter,\n\t\t\tend: endOfQuarter(startOfLastQuarter),\n\t\t};\n\t},\n\tSinceStartOfYear: () => {\n\t\treturn {\n\t\t\tstart: startOfYear(new Date()),\n\t\t\tend: endOfDay(new Date()),\n\t\t};\n\t},\n\tLastYear: () => {\n\t\tconst startOfLastYear = startOfYear(subYears(new Date(), 1));\n\t\treturn {\n\t\t\tstart: startOfLastYear,\n\t\t\tend: endOfYear(startOfLastYear),\n\t\t};\n\t},\n\tLastTwelveMonths: () => {\n\t\treturn {\n\t\t\tstart: subMonths(new Date(), 12),\n\t\t\tend: new Date(),\n\t\t};\n\t},\n};\n","import { BreakpointObserver, LayoutModule } from '@angular/cdk/layout';\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostBinding,\n\tinject,\n\tInjector,\n\tinput,\n\tOnInit,\n\tsignal,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgModel, ValidationErrors, Validator } from '@angular/forms';\nimport { LuccaIcon } from '@lucca-front/icons';\nimport { ClearComponent } from '@lucca-front/ng/clear';\nimport { isNil, LuClass, PortalContent, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillInputComponent } from '@lucca-front/ng/filter-pills';\nimport { FORM_FIELD_INSTANCE, InputDirective } from '@lucca-front/ng/form-field';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { addMonths, addYears, endOfDecade, endOfMonth, endOfYear, isAfter, isBefore, isSameDay, parse, startOfDay, startOfDecade, startOfMonth, startOfYear, subMonths, subYears } from 'date-fns';\nimport { map } from 'rxjs';\nimport { AbstractDateComponent } from '../abstract-date-component';\nimport { CalendarMode } from '../calendar2/calendar-mode';\nimport { Calendar2Component } from '../calendar2/calendar2.component';\nimport { CellStatus } from '../calendar2/cell-status';\nimport { DateRange, DateRangeInput } from '../calendar2/date-range';\nimport { compareCalendarPeriods, startOfPeriod, transformDateRangeInputToDateRange, transformDateRangeToDateRangeInput } from '../utils';\nimport { CalendarShortcut } from './calendar-shortcut';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-date-range-input',\n\timports: [PopoverDirective, Calendar2Component, IconComponent, InputDirective, LayoutModule, PortalDirective, NgTemplateOutlet, FilterPillDisplayerDirective, ClearComponent],\n\ttemplateUrl: './date-range-input.component.html',\n\tstyleUrl: './date-range-input.component.scss',\n\thost: {\n\t\tclass: 'dateRangeField',\n\t},\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: FILTER_PILL_INPUT_COMPONENT,\n\t\t\tuseExisting: forwardRef(() => DateRangeInputComponent),\n\t\t},\n\t\tLuClass,\n\t],\n})\nexport class DateRangeInputComponent extends AbstractDateComponent implements OnInit, ControlValueAccessor, Validator, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\t#injector = inject(Injector);\n\t#ngControl: NgControl; // Initialized in ngOnInit\n\t#luClass = inject(LuClass);\n\n\t#formFieldRef = inject(FORM_FIELD_INSTANCE, { optional: true });\n\n\t#breakpointObserver = inject(BreakpointObserver);\n\n\thasTwoCalendars = toSignal(this.#breakpointObserver.observe('(min-width: 40em)').pipe(map((state) => state.matches)));\n\n\tidSuffix = nextId++;\n\n\tstartTextInputRef = viewChild<ElementRef<HTMLInputElement>>('start');\n\n\tendTextInputRef = viewChild<ElementRef<HTMLInputElement>>('end');\n\n\t// CVA stuff\n\t#onChange?: (value: DateRange) => void;\n\n\tinitialValue = signal<DateRange | null>(undefined);\n\tselectedRange = signal<DateRange | null>(null);\n\n\tdateHovered = signal<Date | null>(null);\n\n\tplaceholder = input<string>();\n\n\twidthAuto = input(false, { transform: booleanAttribute });\n\n\tlabel: PortalContent;\n\n\tpopoverPositions: ConnectionPositionPair[] = [\n\t\tnew ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, -8, 0),\n\t\tnew ConnectionPositionPair(\n\t\t\t{ originX: 'start', originY: 'top' },\n\t\t\t{\n\t\t\t\toverlayX: 'start',\n\t\t\t\toverlayY: 'bottom',\n\t\t\t},\n\t\t\t-8,\n\t\t\t-32,\n\t\t),\n\t];\n\n\tinputFocused = signal(false);\n\n\teditedField = signal<-1 | 0 | 1>(-1);\n\n\thighlightedField = signal<-1 | 0 | 1>(-1);\n\n\tshortcuts = input<readonly CalendarShortcut[]>();\n\n\tautocomplete = input<AutoFill>('off');\n\n\tprotected currentRightDate = computed(() => {\n\t\treturn this.hasTwoCalendars() ? this.getNextCalendarDate(this.currentDate()) : this.currentDate();\n\t});\n\n\tprotected currentStartDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfMonth(this.currentDate());\n\t\t\tcase 'month':\n\t\t\t\treturn startOfYear(this.currentDate());\n\t\t\tcase 'year':\n\t\t\t\treturn startOfDecade(this.currentDate());\n\t\t}\n\t});\n\n\tprotected currentEndDisplayDate = computed(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn endOfMonth(this.currentRightDate());\n\t\t\tcase 'month':\n\t\t\t\treturn endOfYear(this.currentRightDate());\n\t\t\tcase 'year':\n\t\t\t\treturn endOfDecade(this.currentRightDate());\n\t\t}\n\t});\n\n\tcalendars = viewChildren(Calendar2Component);\n\n\tcombinedGetCellInfo = (date: Date, mode: CalendarMode): CellStatus => {\n\t\tconst infoFromInput = this.getCellInfo()?.(date, mode);\n\t\treturn {\n\t\t\tclasses: [...(infoFromInput?.classes || [])],\n\t\t\tdisabled: infoFromInput?.disabled || !this.isInMinMax(date, mode),\n\t\t\tselected: false,\n\t\t\tlabel: infoFromInput?.label,\n\t\t};\n\t};\n\n\tcalendarRanges = computed(() => {\n\t\tif (this.selectedRange()) {\n\t\t\treturn [this.selectedRange(), ...this.ranges()];\n\t\t}\n\t\treturn this.ranges();\n\t});\n\n\tstartLabel = computed(() => {\n\t\tif (this.selectedRange()?.start && this.isValidDate(this.selectedRange()?.start)) {\n\t\t\treturn this.getDateLabelForInput(this.selectedRange()?.start);\n\t\t}\n\t\treturn '';\n\t});\n\n\tendLabel = computed(() => {\n\t\tif (this.selectedRange()?.end && this.isValidDate(this.selectedRange()?.end)) {\n\t\t\treturn this.getDateLabelForInput(this.selectedRange()?.end);\n\t\t}\n\t\treturn '';\n\t});\n\n\tpreviousButton = viewChild<ElementRef<Element>>('previousButtonRef');\n\n\tnextButton = viewChild<ElementRef<Element>>('nextButtonRef');\n\n\t// Which calendar is currently being focused in, used for tabbable date logic\n\tfocusedCalendarIndex = signal(0);\n\n\tfocusedCalendar = computed(() => this.calendars()[this.focusedCalendarIndex()]);\n\n\t@HostBinding('class.mod-filterPill')\n\tisFilterPill = false;\n\n\t@HostBinding('class.mod-auto')\n\tget isWidthAuto() {\n\t\treturn this.widthAuto();\n\t}\n\n\tisFilterPillEmpty = computed(() => this.selectedRange() === null);\n\tisFilterPillClearable = computed(() => this.clearable() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\t#defaultClearable = false;\n\t#defaultFilterPillClearable = signal<boolean | null>(null);\n\n\tfilterPillPopoverCloseFn?: () => void;\n\n\tfilterPillDisabled = signal(false);\n\n\tget isNavigationButtonFocused(): boolean {\n\t\treturn [this.previousButton()?.nativeElement, this.nextButton()?.nativeElement].includes(document.activeElement);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (this.#formFieldRef) {\n\t\t\tthis.#formFieldRef.rolePresentationLabel.set(true);\n\t\t\tthis.label = this.#formFieldRef.label();\n\t\t}\n\n\t\teffect(() => {\n\t\t\tthis.#luClass.setState({\n\t\t\t\t'mod-day': this.mode() === 'day',\n\t\t\t\t'mod-month': this.mode() === 'month',\n\t\t\t\t'mod-year': this.mode() === 'year',\n\t\t\t});\n\t\t});\n\n\t\tɵeffectWithDeps([this.calendarMode, this.tabbableDate], (calendarMode, tabbableDate) => {\n\t\t\tif (tabbableDate) {\n\t\t\t\tif (isAfter(tabbableDate, this.currentEndDisplayDate())) {\n\t\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\t\tthis.currentDate.set(startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t} else if (isBefore(tabbableDate, this.currentStartDisplayDate())) {\n\t\t\t\t\tif (this.hasTwoCalendars()) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(1);\n\t\t\t\t\t}\n\t\t\t\t\tswitch (this.mode()) {\n\t\t\t\t\t\tcase 'day':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subMonths(startOfPeriod(calendarMode, tabbableDate), 1) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subYears(startOfPeriod(calendarMode, tabbableDate), 1) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\tthis.currentDate.set(this.hasTwoCalendars() ? subYears(startOfPeriod(calendarMode, tabbableDate), 10) : startOfPeriod(calendarMode, tabbableDate));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.hasTwoCalendars()) {\n\t\t\t\t\tif (this.focusedCalendarIndex() === 1 && isBefore(tabbableDate, this.currentRightDate())) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\t\t\t} else if (this.focusedCalendarIndex() === 0 && (isAfter(tabbableDate, this.currentRightDate()) || isSameDay(tabbableDate, this.currentRightDate()))) {\n\t\t\t\t\t\tthis.focusedCalendarIndex.set(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.isNavigationButtonFocused && !this.inputFocused()) {\n\t\t\t\tthis.focusedCalendar()?.blurTabbableDate();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.#ngControl = this.#injector.get(NgControl);\n\t}\n\n\tgetNextCalendarDate(date: Date): Date {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn startOfMonth(addMonths(date, 1));\n\t\t\tcase 'month':\n\t\t\t\treturn startOfYear(addYears(date, 1));\n\t\t\tcase 'year':\n\t\t\t\treturn startOfDecade(addYears(date, 10));\n\t\t}\n\t}\n\n\tpopoverClosed(): void {\n\t\tthis.panelClosed.emit();\n\t\tif (this.editedField() === 1) {\n\t\t\tthis.endTextInputRef().nativeElement.focus();\n\t\t} else if (this.editedField() === 0) {\n\t\t\tthis.startTextInputRef().nativeElement.focus();\n\t\t}\n\t}\n\n\tinputBlur(): void {\n\t\tthis.onTouched?.();\n\t\tthis.inputFocused.set(false);\n\t\tthis.highlightedField.set(-1);\n\t}\n\n\tfixOrderIfNeeded(): void {\n\t\tif (this.selectedRange() && isAfter(this.selectedRange()?.start, this.selectedRange()?.end)) {\n\t\t\tconst range = this.selectedRange();\n\t\t\tthis.selectedRange.set({\n\t\t\t\t...range,\n\t\t\t\tend: range.start,\n\t\t\t\tstart: range.end,\n\t\t\t});\n\t\t\tthis.#onChange?.(this.selectedRange());\n\t\t}\n\t}\n\n\ttabbableDateChange(date: Date, calendarIndex: number) {\n\t\tif (calendarIndex == this.focusedCalendarIndex()) {\n\t\t\tthis.tabbableDate.set(date);\n\t\t}\n\t}\n\n\topenPopover(ref: PopoverDirective, propertyToFocus?: 'start' | 'end', focusTabbableDate = false): void {\n\t\tif (this.isFilterPill) {\n\t\t\treturn;\n\t\t}\n\t\tif (!ref.opened()) {\n\t\t\tref.openPopover(true, true);\n\t\t}\n\t\t// Once popover is opened, aka in the next CD cycle, focus current tabbable date\n\t\tsetTimeout(() => {\n\t\t\tthis.focusedCalendarIndex.set(0);\n\t\t\tif (propertyToFocus && this.selectedRange()?.[propertyToFocus]) {\n\t\t\t\t// Specific case: if range is on a single month, focus on it on left calendar\n\t\t\t\t// Same goes for focus on start date, we want it on left panel\n\t\t\t\tif (propertyToFocus === 'start' || compareCalendarPeriods(this.mode(), this.selectedRange()?.start, this.selectedRange()?.end)) {\n\t\t\t\t\tthis.currentDate.set(this.selectedRange()?.[propertyToFocus]);\n\t\t\t\t\tthis.tabbableDate.set(this.selectedRange()?.[propertyToFocus]);\n\t\t\t\t} else {\n\t\t\t\t\t// Compute the date to use for proper focus on left panel, minus one calendar on focus date basically\n\t\t\t\t\tconst leftPanelFocus = this.selectedRange()?.end;\n\t\t\t\t\tthis.currentDate.set(leftPanelFocus);\n\t\t\t\t\tthis.tabbableDate.set(leftPanelFocus);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (focusTabbableDate) {\n\t\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t\t}\n\t\t});\n\t}\n\n\tdateClicked(date: Date, popoverRef: PopoverDirective): void {\n\t\tif (this.selectedRange() === null) {\n\t\t\tthis.selectedRange.set({\n\t\t\t\tstart: date,\n\t\t\t\tscope: this.mode(),\n\t\t\t});\n\t\t\tthis.editedField.set(1);\n\t\t\tthis.highlightedField.set(1);\n\t\t} else {\n\t\t\t// If we're editing end field\n\t\t\tif (this.editedField() === 1) {\n\t\t\t\t// If end is before start, invert them\n\t\t\t\tif (isBefore(date, this.selectedRange().start)) {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t\tend: this.selectedRange().start,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\t...this.selectedRange(),\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t\tend: date,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tpopoverRef?.close();\n\t\t\t\tthis.filterPillPopoverCloseFn?.();\n\t\t\t\tthis.endTextInputRef().nativeElement.focus();\n\t\t\t\tthis.editedField.set(-1);\n\t\t\t\tthis.dateHovered.set(null);\n\t\t\t} else {\n\t\t\t\t// Else, we're editing start field\n\t\t\t\t// If start is after end, invert them\n\t\t\t\tif (isAfter(date, this.selectedRange().end)) {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.selectedRange.set({\n\t\t\t\t\t\t...this.selectedRange(),\n\t\t\t\t\t\tstart: date,\n\t\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.editedField.set(1);\n\t\t\t\tthis.highlightedField.set(1);\n\t\t\t\tthis.dateHovered.set(null);\n\t\t\t}\n\t\t}\n\n\t\tthis.#onChange?.(this.selectedRange());\n\t}\n\n\tarrowDown(popoverRef: PopoverDirective, fieldToFocus: 'start' | 'end'): void {\n\t\tthis.openPopover(popoverRef, fieldToFocus, true);\n\t\tif (this.isFilterPill) {\n\t\t\tthis.focusedCalendar()?.focusTabbableDate();\n\t\t} else if (this.editedField() === -1) {\n\t\t\tthis.editedField.set(fieldToFocus === 'start' ? 0 : 1);\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl<DateRange | DateRangeInput | null>): ValidationErrors | null {\n\t\tif (!control.value) {\n\t\t\treturn null;\n\t\t}\n\t\tconst dateRange = transformDateRangeInputToDateRange(control.value);\n\n\t\treturn this.isValidDate(dateRange.start) ? null : { date: true };\n\t}\n\n\twriteValue(dateRange: DateRange | DateRangeInput | null): void {\n\t\tif (this.#ngControl instanceof NgModel && isNil(this.#onChange)) {\n\t\t\t// avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-1310420293\n\t\t\treturn;\n\t\t}\n\t\tconst _dateRange = transformDateRangeInputToDateRange(dateRange);\n\n\t\tif (isNil(this.initialValue())) {\n\t\t\tthis.selectedRange.set(this.clearBehavior() === 'reset' ? this.initialValue() : _dateRange);\n\t\t}\n\n\t\tif (dateRange != null) {\n\t\t\tthis.selectedRange.set(_dateRange);\n\t\t\tthis.currentDate.set(startOfDay(dateRange.start));\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: DateRange | DateRangeInput | null) => void): void {\n\t\tthis.#onChange = (dateRange: DateRange | null) => {\n\t\t\tfn(dateRange && this.inDateISOFormat() ? transformDateRangeToDateRangeInput(dateRange) : dateRange);\n\t\t};\n\t}\n\n\toverride setDisabledState(isDisabled: boolean) {\n\t\tthis.filterPillDisabled.set(isDisabled);\n\t\tsuper.setDisabledState(isDisabled);\n\t}\n\n\tclear() {\n\t\tconst newValue = this.clearBehavior() === 'reset' ? this.initialValue() : null;\n\t\tthis.selectedRange.set(newValue);\n\t\tthis.#onChange?.(this.selectedRange());\n\t\tthis.onTouched?.();\n\t\tthis.startTextInputRef().nativeElement.focus();\n\t}\n\n\tcurrentDateChangeFromCalendar(date: Date): void {\n\t\tthis.tabbableDate.set(date);\n\t\tthis.currentDate.set(date);\n\t}\n\n\tgetDateLabelForInput(date: Date): string {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'day':\n\t\t\t\treturn this.intlDateTimeFormat.format(date);\n\t\t\tcase 'month':\n\t\t\t\treturn this.intlDateTimeFormatMonth.format(date);\n\t\t\tcase 'year':\n\t\t\t\treturn this.intlDateTimeFormatYear.format(date);\n\t\t}\n\t}\n\n\tselectShortcut(shortcut: CalendarShortcut, popover: PopoverDirective): void {\n\t\tthis.selectedRange.set(shortcut.range);\n\t\tthis.#onChange?.(this.selectedRange());\n\t\tpopover?.close();\n\t\tthis.filterPillPopoverCloseFn?.();\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.filterPillPopoverCloseFn = closeFn;\n\t}\n\n\tenableFilterPillMode(): void {\n\t\tthis.isFilterPill = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t}\n\n\tclearFilterPillValue(): void {\n\t\tthis.clear();\n\t}\n\n\tgetDefaultFilterPillIcon(): LuccaIcon {\n\t\treturn 'calendarPlanning';\n\t}\n\n\ttextInputChange(inputValue: string, rangeProperty: 'start' | 'end'): void {\n\t\tlet currentRange: DateRange = this.selectedRange() || ({} as DateRange);\n\t\tif (inputValue?.length > 0) {\n\t\t\tconst parsed = parse(inputValue, this.dateFormat, startOfDay(new Date()));\n\t\t\tif (parsed.getFullYear() > 999) {\n\t\t\t\tcurrentRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t[rangeProperty]: parsed,\n\t\t\t\t};\n\t\t\t\tthis.currentDate.set(startOfDay(parsed));\n\t\t\t\tthis.tabbableDate.set(startOfDay(parsed));\n\t\t\t} else if (this.isValidDate(parsed)) {\n\t\t\t\tcurrentRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tscope: this.mode(),\n\t\t\t\t\t[rangeProperty]: parsed,\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (inputValue !== null) {\n\t\t\tcurrentRange = {\n\t\t\t\t...currentRange,\n\t\t\t\tscope: this.mode(),\n\t\t\t\t[rangeProperty]: undefined,\n\t\t\t};\n\t\t}\n\t\tif (!currentRange.start && !currentRange.end) {\n\t\t\tthis.selectedRange.set(null);\n\t\t} else {\n\t\t\tthis.selectedRange.set(currentRange);\n\t\t}\n\t\tthis.#onChange?.(this.selectedRange());\n\t}\n}\n","<fieldset class=\"dateRangeField-fieldset\">\n\t<legend>\n\t\t<span class=\"pr-u-mask\">\n\t\t\t<ng-container *luPortal=\"label\" />\n\t\t</span>\n\t</legend>\n\t<div class=\"dateRangeField-fieldset-textField textField\" #popoverAnchor>\n\t\t<div class=\"textField-input\">\n\t\t\t<div class=\"dateRangeField-fieldset-content mod-start\" [class.is-highlighted]=\"highlightedField() === 0\">\n\t\t\t\t<label for=\"range-input-start-{{ idSuffix }}\" class=\"pr-u-mask\">Start</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t#start\n\t\t\t\t\tid=\"range-input-start-{{ idSuffix }}\"\n\t\t\t\t\tattr.aria-describedby=\"range-input-start-{{ idSuffix }}-message\"\n\t\t\t\t\tluInput\n\t\t\t\t\tluInputStandalone\n\t\t\t\t\tclass=\"textField-input-value dateRangeField-fieldset-input-value\"\n\t\t\t\t\t[value]=\"startLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'start')\"\n\t\t\t\t\t(blur)=\"inputBlur()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(0); highlightedField.set(0)\"\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t(click)=\"editedField.set(0); openPopover(popoverRef, 'start')\"\n\t\t\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef, 'start')\"\n\t\t\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[attr.placeholder]=\"dateFormatLocalized()\"\n\t\t\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"dateRangeField-fieldset-content mod-end\" [class.is-highlighted]=\"highlightedField() === 1\">\n\t\t\t\t<label for=\"range-input-end-{{ idSuffix }}\" class=\"pr-u-mask\">End</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t#end\n\t\t\t\t\tid=\"range-input-end-{{ idSuffix }}\"\n\t\t\t\t\tattr.aria-describedby=\"range-input-start-{{ idSuffix }}-message\"\n\t\t\t\t\tluInput\n\t\t\t\t\tluInputStandalone\n\t\t\t\t\tclass=\"textField-input-value dateRangeField-fieldset-input-value\"\n\t\t\t\t\t[value]=\"endLabel()\"\n\t\t\t\t\t(input)=\"textInputChange(start.value, 'end')\"\n\t\t\t\t\t(blur)=\"inputBlur(); fixOrderIfNeeded()\"\n\t\t\t\t\t(focus)=\"inputFocused.set(true); editedField.set(1); highlightedField.set(1)\"\n\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t(click)=\"editedField.set(1); openPopover(popoverRef, 'end')\"\n\t\t\t\t\t(keydown.arrowDown)=\"arrowDown(popoverRef, 'end')\"\n\t\t\t\t\t(keydown.escape)=\"popoverRef.close()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[attr.placeholder]=\"dateFormatLocalized()\"\n\t\t\t\t\t[attr.autocomplete]=\"autocomplete()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<lu-icon [icon]=\"'arrowRight'\" [alt]=\"''\" class=\"dateRangeField-fieldset-arrow\" />\n\t\t\t<div class=\"textField-input-affix\">\n\t\t\t\t@if (!isFilterPill) {\n\t\t\t\t\t@if (clearable() && (start.value !== \"\" || end.value !== \"\")) {\n\t\t\t\t\t\t<lu-clear class=\"textField-input-affix-clear\" (onClear)=\"clear(); start.focus()\">{{ intl().clear }}</lu-clear>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t<button\n\t\t\t\t\t[luPopover2]=\"calendar\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[luPopoverNoCloseButton]=\"true\"\n\t\t\t\t\t[luPopoverAnchor]=\"popoverAnchor\"\n\t\t\t\t\t#popoverRef=\"luPopover2\"\n\t\t\t\t\t[customPositions]=\"popoverPositions\"\n\t\t\t\t\t(luPopoverClosed)=\"popoverClosed()\"\n\t\t\t\t\t(luPopoverOpened)=\"panelOpened.emit()\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"button mod-onlyIcon mod-ghost textField-input-affix-toggle\"\n\t\t\t\t\t(click)=\"editedField.set(0)\"\n\t\t\t\t>\n\t\t\t\t\t<lu-icon [icon]=\"'calendarPlanning'\" [alt]=\"intl().pickDate\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</fieldset>\n\n<ng-template #calendar>\n\t<div class=\"calendarShortcutsOptional\">\n\t\t@if (shortcuts()?.length > 0) {\n\t\t\t<ul\n\t\t\t\tclass=\"calendarShortcuts\"\n\t\t\t\t[class.mod-day]=\"mode() === 'day'\"\n\t\t\t\t[class.mod-month]=\"mode() === 'month'\"\n\t\t\t\t[class.mod-year]=\"mode() === 'year'\"\n\t\t\t>\n\t\t\t\t@for (shortcut of shortcuts(); track $index) {\n\t\t\t\t\t<li class=\"calendarShortcutsButton-item\">\n\t\t\t\t\t\t<button type=\"button\" class=\"calendarShortcutsButton-item-button button\" (click)=\"selectShortcut(shortcut, popoverRef)\">\n\t\t\t\t\t\t\t{{ shortcut.label }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t}\n\t\t<div class=\"calendarWrapper\">\n\t\t\t<div class=\"calendarWrapper-navigation pr-u-left0\">\n\t\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"prev(mode())\" #previousButtonRef>\n\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronLeft\"></span><span class=\"pr-u-mask\">{{ intl().previous }}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"calendarWrapper-navigation pr-u-right0\">\n\t\t\t\t<button class=\"calendarWrapper-navigation-button button\" type=\"button\" (click)=\"next(mode())\" #nextButtonRef>\n\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowChevronRight\"></span><span class=\"pr-u-mask\"> {{ intl().next }}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"calendarWrapper-content\" tabindex=\"-1\">\n\t\t\t\t<lu-calendar2\n\t\t\t\t\t[removeYearOverflow]=\"true\"\n\t\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t\t[date]=\"currentDate()\"\n\t\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t\t[tabbableDate]=\"tabbableDate()\"\n\t\t\t\t\t(tabbableDateChange)=\"tabbableDateChange($event, 0)\"\n\t\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t\t[(dateHovered)]=\"dateHovered\"\n\t\t\t\t\t[ranges]=\"calendarRanges()\"\n\t\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t\t(nextPage)=\"move(1, mode())\"\n\t\t\t\t\t(previousPage)=\"move(-1, mode())\"\n\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t\t\t[disableModeChange]=\"true\"\n\t\t\t\t/>\n\t\t\t\t@if (hasTwoCalendars()) {\n\t\t\t\t\t<lu-calendar2\n\t\t\t\t\t\t[removeYearOverflow]=\"true\"\n\t\t\t\t\t\t[hideToday]=\"hideToday()\"\n\t\t\t\t\t\t[date]=\"currentRightDate()\"\n\t\t\t\t\t\t(dateChange)=\"currentDateChangeFromCalendar($event)\"\n\t\t\t\t\t\t[tabbableDate]=\"tabbableDate()\"\n\t\t\t\t\t\t(tabbableDateChange)=\"tabbableDateChange($event, 1)\"\n\t\t\t\t\t\t[getCellInfo]=\"combinedGetCellInfo\"\n\t\t\t\t\t\t[(dateHovered)]=\"dateHovered\"\n\t\t\t\t\t\t[ranges]=\"calendarRanges()\"\n\t\t\t\t\t\t(dateClicked)=\"dateClicked($event, popoverRef)\"\n\t\t\t\t\t\t(nextPage)=\"move(1, mode())\"\n\t\t\t\t\t\t(previousPage)=\"move(-1, mode())\"\n\t\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t\t[hideWeekend]=\"hideWeekend()\"\n\t\t\t\t\t\t[disableModeChange]=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</ng-template>\n\n@if (isFilterPill) {\n\t<ng-container *ngTemplateOutlet=\"calendar\" />\n}\n\n<ng-container *luFilterPillDisplayer=\"let empty = isEmpty\">\n\t@if (!empty) {\n\t\t<span class=\"pr-u-mask\">{{ intl().from }}</span>\n\t\t{{ startLabel() }}\n\t\t<lu-icon [icon]=\"'arrowRight'\" size=\"XS\" [alt]=\"intl().to\" />\n\t\t{{ endLabel() }}\n\t}\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps"],"mappings":"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"}