@lucca-front/ng 20.3.3-rc.6 → 21.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/api/index.d.ts +18 -0
  2. package/breadcrumbs/index.d.ts +1 -3
  3. package/callout/index.d.ts +8 -2
  4. package/chip/index.d.ts +3 -2
  5. package/clear/index.d.ts +30 -0
  6. package/code/index.d.ts +9 -0
  7. package/container/index.d.ts +2 -2
  8. package/core/index.d.ts +6 -6
  9. package/core-select/department/index.d.ts +1 -1
  10. package/core-select/index.d.ts +2 -1
  11. package/core-select/occupation-category/index.d.ts +26 -0
  12. package/data-table/index.d.ts +68 -30
  13. package/date/index.d.ts +18 -0
  14. package/date2/index.d.ts +15 -15
  15. package/department/index.d.ts +10 -1
  16. package/divider/index.d.ts +7 -4
  17. package/dropdown/index.d.ts +6 -3
  18. package/establishment/index.d.ts +15 -0
  19. package/fancy-box/index.d.ts +2 -1
  20. package/fesm2022/lucca-front-ng-a11y.mjs +32 -32
  21. package/fesm2022/lucca-front-ng-a11y.mjs.map +1 -1
  22. package/fesm2022/lucca-front-ng-animations.mjs.map +1 -1
  23. package/fesm2022/lucca-front-ng-api.mjs +76 -59
  24. package/fesm2022/lucca-front-ng-api.mjs.map +1 -1
  25. package/fesm2022/lucca-front-ng-app-layout.mjs +8 -8
  26. package/fesm2022/lucca-front-ng-app-layout.mjs.map +1 -1
  27. package/fesm2022/lucca-front-ng-box.mjs +8 -8
  28. package/fesm2022/lucca-front-ng-box.mjs.map +1 -1
  29. package/fesm2022/lucca-front-ng-breadcrumbs.mjs +18 -30
  30. package/fesm2022/lucca-front-ng-breadcrumbs.mjs.map +1 -1
  31. package/fesm2022/lucca-front-ng-button.mjs +12 -7
  32. package/fesm2022/lucca-front-ng-button.mjs.map +1 -1
  33. package/fesm2022/lucca-front-ng-callout.mjs +117 -64
  34. package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
  35. package/fesm2022/lucca-front-ng-chip.mjs +29 -25
  36. package/fesm2022/lucca-front-ng-chip.mjs.map +1 -1
  37. package/fesm2022/lucca-front-ng-clear.mjs +94 -0
  38. package/fesm2022/lucca-front-ng-clear.mjs.map +1 -0
  39. package/fesm2022/lucca-front-ng-code.mjs +21 -0
  40. package/fesm2022/lucca-front-ng-code.mjs.map +1 -0
  41. package/fesm2022/lucca-front-ng-comment.mjs +31 -31
  42. package/fesm2022/lucca-front-ng-comment.mjs.map +1 -1
  43. package/fesm2022/lucca-front-ng-container.mjs +18 -18
  44. package/fesm2022/lucca-front-ng-container.mjs.map +1 -1
  45. package/fesm2022/lucca-front-ng-core-select-api.mjs +14 -16
  46. package/fesm2022/lucca-front-ng-core-select-api.mjs.map +1 -1
  47. package/fesm2022/lucca-front-ng-core-select-department.mjs +16 -18
  48. package/fesm2022/lucca-front-ng-core-select-department.mjs.map +1 -1
  49. package/fesm2022/lucca-front-ng-core-select-establishment.mjs +18 -19
  50. package/fesm2022/lucca-front-ng-core-select-establishment.mjs.map +1 -1
  51. package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs +12 -13
  52. package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs.map +1 -1
  53. package/fesm2022/lucca-front-ng-core-select-occupation-category.mjs +79 -0
  54. package/fesm2022/lucca-front-ng-core-select-occupation-category.mjs.map +1 -0
  55. package/fesm2022/lucca-front-ng-core-select-user.mjs +60 -62
  56. package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
  57. package/fesm2022/lucca-front-ng-core-select.mjs +103 -113
  58. package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
  59. package/fesm2022/lucca-front-ng-core.mjs +48 -49
  60. package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
  61. package/fesm2022/lucca-front-ng-data-table.mjs +266 -87
  62. package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
  63. package/fesm2022/lucca-front-ng-date.mjs +113 -97
  64. package/fesm2022/lucca-front-ng-date.mjs.map +1 -1
  65. package/fesm2022/lucca-front-ng-date2.mjs +134 -136
  66. package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
  67. package/fesm2022/lucca-front-ng-department.mjs +56 -47
  68. package/fesm2022/lucca-front-ng-department.mjs.map +1 -1
  69. package/fesm2022/lucca-front-ng-dialog.mjs +53 -56
  70. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  71. package/fesm2022/lucca-front-ng-divider.mjs +13 -15
  72. package/fesm2022/lucca-front-ng-divider.mjs.map +1 -1
  73. package/fesm2022/lucca-front-ng-dropdown.mjs +225 -224
  74. package/fesm2022/lucca-front-ng-dropdown.mjs.map +1 -1
  75. package/fesm2022/lucca-front-ng-empty-state.mjs +13 -9
  76. package/fesm2022/lucca-front-ng-empty-state.mjs.map +1 -1
  77. package/fesm2022/lucca-front-ng-establishment.mjs +85 -71
  78. package/fesm2022/lucca-front-ng-establishment.mjs.map +1 -1
  79. package/fesm2022/lucca-front-ng-fancy-box.mjs +10 -6
  80. package/fesm2022/lucca-front-ng-fancy-box.mjs.map +1 -1
  81. package/fesm2022/lucca-front-ng-file-upload.mjs +112 -112
  82. package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
  83. package/fesm2022/lucca-front-ng-filter-pills.mjs +78 -81
  84. package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
  85. package/fesm2022/lucca-front-ng-footer.mjs +12 -19
  86. package/fesm2022/lucca-front-ng-footer.mjs.map +1 -1
  87. package/fesm2022/lucca-front-ng-form-field.mjs +88 -88
  88. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  89. package/fesm2022/lucca-front-ng-form-header.mjs +23 -0
  90. package/fesm2022/lucca-front-ng-form-header.mjs.map +1 -0
  91. package/fesm2022/lucca-front-ng-form.mjs +24 -0
  92. package/fesm2022/lucca-front-ng-form.mjs.map +1 -0
  93. package/fesm2022/lucca-front-ng-formly.mjs +77 -77
  94. package/fesm2022/lucca-front-ng-formly.mjs.map +1 -1
  95. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs +19 -20
  96. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs.map +1 -1
  97. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-html.mjs.map +1 -1
  98. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-markdown.mjs +3 -2
  99. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-markdown.mjs.map +1 -1
  100. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-plain-text.mjs.map +1 -1
  101. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +206 -150
  102. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
  103. package/fesm2022/lucca-front-ng-forms.mjs +185 -171
  104. package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
  105. package/fesm2022/lucca-front-ng-gauge.mjs +26 -26
  106. package/fesm2022/lucca-front-ng-gauge.mjs.map +1 -1
  107. package/fesm2022/lucca-front-ng-grid.mjs +26 -26
  108. package/fesm2022/lucca-front-ng-grid.mjs.map +1 -1
  109. package/fesm2022/lucca-front-ng-highlight-data.mjs +20 -20
  110. package/fesm2022/lucca-front-ng-highlight-data.mjs.map +1 -1
  111. package/fesm2022/lucca-front-ng-horizontal-navigation.mjs +17 -32
  112. package/fesm2022/lucca-front-ng-horizontal-navigation.mjs.map +1 -1
  113. package/fesm2022/lucca-front-ng-icon.mjs +6 -6
  114. package/fesm2022/lucca-front-ng-icon.mjs.map +1 -1
  115. package/fesm2022/lucca-front-ng-index-table.mjs +355 -0
  116. package/fesm2022/lucca-front-ng-index-table.mjs.map +1 -0
  117. package/fesm2022/lucca-front-ng-inline-message.mjs +4 -4
  118. package/fesm2022/lucca-front-ng-inline-message.mjs.map +1 -1
  119. package/fesm2022/lucca-front-ng-input.mjs +67 -57
  120. package/fesm2022/lucca-front-ng-input.mjs.map +1 -1
  121. package/fesm2022/lucca-front-ng-link.mjs +24 -23
  122. package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
  123. package/fesm2022/lucca-front-ng-listbox.mjs +31 -31
  124. package/fesm2022/lucca-front-ng-listbox.mjs.map +1 -1
  125. package/fesm2022/lucca-front-ng-listing.mjs +28 -24
  126. package/fesm2022/lucca-front-ng-listing.mjs.map +1 -1
  127. package/fesm2022/lucca-front-ng-loading.mjs +11 -11
  128. package/fesm2022/lucca-front-ng-loading.mjs.map +1 -1
  129. package/fesm2022/lucca-front-ng-main-layout.mjs +14 -14
  130. package/fesm2022/lucca-front-ng-main-layout.mjs.map +1 -1
  131. package/fesm2022/lucca-front-ng-mobile-push.mjs +39 -31
  132. package/fesm2022/lucca-front-ng-mobile-push.mjs.map +1 -1
  133. package/fesm2022/lucca-front-ng-modal.mjs +57 -62
  134. package/fesm2022/lucca-front-ng-modal.mjs.map +1 -1
  135. package/fesm2022/lucca-front-ng-multi-select.mjs +247 -230
  136. package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
  137. package/fesm2022/lucca-front-ng-new-badge.mjs +4 -4
  138. package/fesm2022/lucca-front-ng-new-badge.mjs.map +1 -1
  139. package/fesm2022/lucca-front-ng-number-format.mjs +11 -13
  140. package/fesm2022/lucca-front-ng-number-format.mjs.map +1 -1
  141. package/fesm2022/lucca-front-ng-number.mjs +11 -10
  142. package/fesm2022/lucca-front-ng-number.mjs.map +1 -1
  143. package/fesm2022/lucca-front-ng-numeric-badge.mjs +22 -10
  144. package/fesm2022/lucca-front-ng-numeric-badge.mjs.map +1 -1
  145. package/fesm2022/lucca-front-ng-option.mjs +287 -240
  146. package/fesm2022/lucca-front-ng-option.mjs.map +1 -1
  147. package/fesm2022/lucca-front-ng-page-header.mjs +11 -11
  148. package/fesm2022/lucca-front-ng-page-header.mjs.map +1 -1
  149. package/fesm2022/lucca-front-ng-pagination.mjs +38 -38
  150. package/fesm2022/lucca-front-ng-pagination.mjs.map +1 -1
  151. package/fesm2022/lucca-front-ng-plg-push.mjs +54 -5
  152. package/fesm2022/lucca-front-ng-plg-push.mjs.map +1 -1
  153. package/fesm2022/lucca-front-ng-popover.mjs +38 -28
  154. package/fesm2022/lucca-front-ng-popover.mjs.map +1 -1
  155. package/fesm2022/lucca-front-ng-popover2.mjs +36 -33
  156. package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
  157. package/fesm2022/lucca-front-ng-popup.mjs +13 -10
  158. package/fesm2022/lucca-front-ng-popup.mjs.map +1 -1
  159. package/fesm2022/lucca-front-ng-progress-bar.mjs +28 -0
  160. package/fesm2022/lucca-front-ng-progress-bar.mjs.map +1 -0
  161. package/fesm2022/lucca-front-ng-read-more.mjs +46 -78
  162. package/fesm2022/lucca-front-ng-read-more.mjs.map +1 -1
  163. package/fesm2022/lucca-front-ng-safe-content.mjs +10 -11
  164. package/fesm2022/lucca-front-ng-safe-content.mjs.map +1 -1
  165. package/fesm2022/lucca-front-ng-scroll-box.mjs +46 -0
  166. package/fesm2022/lucca-front-ng-scroll-box.mjs.map +1 -0
  167. package/fesm2022/lucca-front-ng-scroll.mjs +10 -8
  168. package/fesm2022/lucca-front-ng-scroll.mjs.map +1 -1
  169. package/fesm2022/lucca-front-ng-scrollBox.mjs +1 -66
  170. package/fesm2022/lucca-front-ng-scrollBox.mjs.map +1 -1
  171. package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs +98 -0
  172. package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs.map +1 -0
  173. package/fesm2022/lucca-front-ng-segmented-control.mjs +71 -0
  174. package/fesm2022/lucca-front-ng-segmented-control.mjs.map +1 -0
  175. package/fesm2022/lucca-front-ng-segmentedControl.mjs +1 -66
  176. package/fesm2022/lucca-front-ng-segmentedControl.mjs.map +1 -1
  177. package/fesm2022/lucca-front-ng-segmentedControlTabs.mjs +1 -93
  178. package/fesm2022/lucca-front-ng-segmentedControlTabs.mjs.map +1 -1
  179. package/fesm2022/lucca-front-ng-select.mjs +21 -20
  180. package/fesm2022/lucca-front-ng-select.mjs.map +1 -1
  181. package/fesm2022/lucca-front-ng-sidepanel.mjs +7 -7
  182. package/fesm2022/lucca-front-ng-sidepanel.mjs.map +1 -1
  183. package/fesm2022/lucca-front-ng-simple-select.mjs +75 -67
  184. package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
  185. package/fesm2022/lucca-front-ng-skeleton.mjs +46 -44
  186. package/fesm2022/lucca-front-ng-skeleton.mjs.map +1 -1
  187. package/fesm2022/lucca-front-ng-sortable-list.mjs +49 -0
  188. package/fesm2022/lucca-front-ng-sortable-list.mjs.map +1 -0
  189. package/fesm2022/lucca-front-ng-status-badge.mjs +34 -0
  190. package/fesm2022/lucca-front-ng-status-badge.mjs.map +1 -0
  191. package/fesm2022/lucca-front-ng-statusBadge.mjs +1 -29
  192. package/fesm2022/lucca-front-ng-statusBadge.mjs.map +1 -1
  193. package/fesm2022/lucca-front-ng-table-of-content.mjs +39 -0
  194. package/fesm2022/lucca-front-ng-table-of-content.mjs.map +1 -0
  195. package/fesm2022/lucca-front-ng-tag.mjs +35 -13
  196. package/fesm2022/lucca-front-ng-tag.mjs.map +1 -1
  197. package/fesm2022/lucca-front-ng-time.mjs +132 -142
  198. package/fesm2022/lucca-front-ng-time.mjs.map +1 -1
  199. package/fesm2022/lucca-front-ng-title.mjs +10 -10
  200. package/fesm2022/lucca-front-ng-title.mjs.map +1 -1
  201. package/fesm2022/lucca-front-ng-toast.mjs +26 -23
  202. package/fesm2022/lucca-front-ng-toast.mjs.map +1 -1
  203. package/fesm2022/lucca-front-ng-tooltip.mjs +40 -32
  204. package/fesm2022/lucca-front-ng-tooltip.mjs.map +1 -1
  205. package/fesm2022/lucca-front-ng-tree-select.mjs +20 -21
  206. package/fesm2022/lucca-front-ng-tree-select.mjs.map +1 -1
  207. package/fesm2022/lucca-front-ng-user-popover.mjs +23 -27
  208. package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
  209. package/fesm2022/lucca-front-ng-user.mjs +134 -111
  210. package/fesm2022/lucca-front-ng-user.mjs.map +1 -1
  211. package/fesm2022/lucca-front-ng-vertical-navigation.mjs +91 -0
  212. package/fesm2022/lucca-front-ng-vertical-navigation.mjs.map +1 -0
  213. package/file-upload/index.d.ts +25 -25
  214. package/footer/index.d.ts +7 -7
  215. package/form/index.d.ts +9 -0
  216. package/form-field/index.d.ts +33 -32
  217. package/form-header/index.d.ts +9 -0
  218. package/forms/index.d.ts +39 -37
  219. package/forms/rich-text-input/index.d.ts +4 -1
  220. package/gauge/index.d.ts +17 -17
  221. package/grid/index.d.ts +14 -14
  222. package/horizontal-navigation/index.d.ts +5 -8
  223. package/index-table/index.d.ts +103 -0
  224. package/input/index.d.ts +27 -15
  225. package/link/index.d.ts +3 -4
  226. package/listbox/index.d.ts +20 -20
  227. package/listing/index.d.ts +13 -9
  228. package/loading/index.d.ts +4 -4
  229. package/main-layout/index.d.ts +3 -3
  230. package/modal/index.d.ts +3 -2
  231. package/multi-select/index.d.ts +13 -3
  232. package/number/index.d.ts +3 -0
  233. package/option/index.d.ts +58 -4
  234. package/package.json +125 -69
  235. package/page-header/index.d.ts +5 -5
  236. package/plg-push/index.d.ts +13 -1
  237. package/popover/index.d.ts +12 -0
  238. package/popup/index.d.ts +3 -0
  239. package/progress-bar/index.d.ts +14 -0
  240. package/read-more/index.d.ts +6 -12
  241. package/scroll/index.d.ts +3 -0
  242. package/scroll-box/index.d.ts +15 -0
  243. package/scrollBox/index.d.ts +1 -19
  244. package/segmented-control/index.d.ts +28 -0
  245. package/segmented-control-tabs/index.d.ts +34 -0
  246. package/segmentedControl/index.d.ts +1 -28
  247. package/segmentedControlTabs/index.d.ts +1 -34
  248. package/select/index.d.ts +5 -4
  249. package/simple-select/index.d.ts +1 -0
  250. package/skeleton/index.d.ts +2 -1
  251. package/sortable-list/index.d.ts +22 -0
  252. package/src/components/cdk/_dragDrop.scss +31 -3
  253. package/src/definitions/option/_option-item.scss +6 -0
  254. package/status-badge/index.d.ts +16 -0
  255. package/statusBadge/index.d.ts +1 -16
  256. package/table-of-content/index.d.ts +16 -0
  257. package/time/index.d.ts +30 -30
  258. package/toast/index.d.ts +3 -0
  259. package/tooltip/index.d.ts +9 -0
  260. package/user/index.d.ts +20 -3
  261. package/vertical-navigation/index.d.ts +42 -0
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-time.mjs","sources":["../../../packages/ng/time/core/base-picker.component.ts","../../../packages/ng/time/core/duration.utils.ts","../../../packages/ng/time/core/math.utils.ts","../../../packages/ng/time/core/repeat-on-hold.directive.ts","../../../packages/ng/time/core/time-picker-part.component.ts","../../../packages/ng/time/core/time-picker-part.component.html","../../../packages/ng/time/duration-picker/duration-picker.model.ts","../../../packages/ng/time/duration-picker/translations.ts","../../../packages/ng/time/duration-picker/duration-picker.translate.ts","../../../packages/ng/time/duration-picker/duration-picker.component.ts","../../../packages/ng/time/duration-picker/duration-picker.component.html","../../../packages/ng/time/core/date.utils.ts","../../../packages/ng/time/time-picker/time-picker.model.ts","../../../packages/ng/time/time-picker/translations.ts","../../../packages/ng/time/time-picker/time-picker.translate.ts","../../../packages/ng/time/time-picker/time-picker.component.ts","../../../packages/ng/time/time-picker/time-picker.component.html","../../../packages/ng/time/lucca-front-ng-time.ts"],"sourcesContent":["import { Component, computed, input, model, ViewChild } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { ISO8601Duration, ISO8601Time } from './date-primitives';\nimport { TimePickerPartComponent } from './time-picker-part.component';\n\n@Component({\n\ttemplate: '',\n})\nexport abstract class BasePickerComponent implements ControlValueAccessor {\n\tonChange: (value: ISO8601Time | ISO8601Duration) => void;\n\tonTouched: () => void;\n\n\tstep = input<ISO8601Duration>(null);\n\n\tdisabled = model(false);\n\n\tsize = input<'S' | 'M'>();\n\n\t@ViewChild('hoursPart')\n\thoursPart?: TimePickerPartComponent;\n\n\t@ViewChild('minutesPart')\n\tminutesPart?: TimePickerPartComponent;\n\n\tprotected hoursIncrement = computed(() => this.getHoursIncrement());\n\tprotected minutesIncrement = computed(() => this.getMinutesIncrement());\n\n\tregisterOnChange(fn: () => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tabstract writeValue(value: ISO8601Time | ISO8601Duration): void;\n\n\tabstract getHoursIncrement(): number;\n\n\tabstract getMinutesIncrement(): number;\n\n\tprotected focusPart(type: 'hours' | 'minutes') {\n\t\tthis.onTouched?.();\n\t\tif (type === 'hours') {\n\t\t\tif (this.hoursIncrement() === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.hoursPart?.focus();\n\t\t}\n\t\tif (type === 'minutes') {\n\t\t\tif (this.minutesIncrement() === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.minutesPart?.focus();\n\t\t}\n\t}\n}\n","import { isNotNil } from '@lucca-front/ng/core';\nimport { Duration } from 'date-fns';\nimport { ISO8601Duration } from './date-primitives';\n\nexport type NonNullableDateFnsDuration = {\n\tyears: number;\n\tmonths: number;\n\tdays: number;\n\thours: number;\n\tminutes: number;\n\tseconds: number;\n};\n\ntype DateFnsDuration = Duration;\n\nconst ISO8601DurationRegExp =\n\t/^(?<sign>-)?P(?:(?<years>-?\\d+)Y)?(?:(?<months>-?\\d+)M)?(?:(?<weeks>-?\\d+)W)?(?:(?<days>-?\\d+)D)?(?:T(?:(?<hours>-?\\d+)H)?(?:(?<minutes>-?\\d+)M)?(?:(?<seconds>-?\\d+(?:\\.\\d+)?)S)?)?$/;\n\n// TODO memoize\nexport const isoDurationToDateFnsDuration = (isoDuration: ISO8601Duration): NonNullableDateFnsDuration => {\n\tconst matches = ISO8601DurationRegExp.exec(isoDuration);\n\n\tconst groups = matches?.groups;\n\n\tif (!groups) {\n\t\tthrow new Error(`Invalid ISO 8601 duration: ${isoDuration}`);\n\t}\n\n\tconst withSign = groups['sign'] === '-' ? -1 : 1;\n\n\tconst result: NonNullableDateFnsDuration = {\n\t\tyears: groups['years'] ? Number(groups['years']) : 0,\n\t\tmonths: groups['months'] ? Number(groups['months']) : 0,\n\t\tdays: groups['days'] ? Number(groups['days']) : 0,\n\t\thours: groups['hours'] ? Number(groups['hours']) : 0,\n\t\tminutes: groups['minutes'] ? Number(groups['minutes']) : 0,\n\t\tseconds: groups['seconds'] ? Number(groups['seconds']) : 0,\n\t};\n\n\tresult.years *= withSign;\n\tresult.months *= withSign;\n\tresult.days *= withSign;\n\tresult.hours *= withSign;\n\tresult.minutes *= withSign;\n\tresult.seconds *= withSign;\n\n\treturn result;\n};\n\nexport function isISO8601Duration(value: string): value is ISO8601Duration {\n\treturn ISO8601DurationRegExp.test(value);\n}\n\nexport const dateFnsDurationToSeconds = (durationFns: DateFnsDuration): number => {\n\tconst { years, months } = durationFns;\n\tlet { days, hours, minutes, seconds } = durationFns;\n\n\tif ((isNotNil(years) && years !== 0) || (isNotNil(months) && months !== 0)) {\n\t\tthrow new Error('years and months are not supported');\n\t}\n\n\tdays = days || 0;\n\thours = hours || 0;\n\tminutes = minutes || 0;\n\tseconds = seconds || 0;\n\n\treturn days * 24 * 60 * 60 + hours * 60 * 60 + minutes * 60 + seconds;\n};\n\nexport const isoDurationToSeconds = (duration: ISO8601Duration): number => {\n\tconst durationFns = isoDurationToDateFnsDuration(duration);\n\n\treturn dateFnsDurationToSeconds(durationFns);\n};\n\nexport const getHoursPartFromDuration = (duration: ISO8601Duration): number => {\n\treturn Math.floor(isoDurationToSeconds(duration) / 3600);\n};\n\nexport const getMinutesPartFromDuration = (duration: ISO8601Duration): number => {\n\treturn Math.floor((isoDurationToSeconds(duration) % 3600) / 60);\n};\n\nexport const createDurationFromHoursAndMinutes = (hours: number, minutes: number): ISO8601Duration => {\n\treturn `PT${hours}H${minutes}M`;\n};\n","export const roundToNearest = (value: number, step: number) => Math.round(value / step) * step;\n\nexport const floorToNearest = (value: number, step: number) => Math.floor(value / step) * step;\n\nexport const ceilToNearest = (value: number, step: number) => Math.ceil(value / step) * step;\n\n/**\n * Returns the value of n circularized between 0 and max.\n * Given n = 0 and max = 10, returns 0.\n * Given n = 10 and max = 10, returns 10.\n * Given n = 11 and max = 10, returns 1.\n * Given n = -1 and max = 10, returns 9.\n */\nexport const circularize = (n: number, max: number) => {\n\tif (n % max === 0) {\n\t\treturn n === 0 ? 0 : max;\n\t}\n\treturn ((n % max) + max) % max;\n};\n","import { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\n\nconst INITIAL_INTERVAL = 500;\n\n@Directive({\n\tselector: '[luRepeatOnHold]',\n\tstandalone: true,\n})\nexport class RepeatOnHoldDirective implements OnDestroy, OnInit {\n\t@Output() hold = new EventEmitter<void>();\n\n\tonMouseDown = () => {\n\t\tif (this.startTime !== undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.hold.emit();\n\t\tthis.animationFrameId = window.requestAnimationFrame(this.animationFrameHandler);\n\n\t\twindow.removeEventListener('mouseup', this.onWindowMouseUp);\n\t\twindow.addEventListener('mouseup', this.onWindowMouseUp);\n\t};\n\n\tonWindowMouseUp = () => {\n\t\tthis.cancelAnimationFrame();\n\t};\n\n\tconstructor(private elementRef: ElementRef<HTMLElement>) {}\n\n\tngOnInit(): void {\n\t\tthis.elementRef.nativeElement.addEventListener('mousedown', this.onMouseDown);\n\t}\n\n\tinterval = INITIAL_INTERVAL;\n\tstartTime: number | undefined = undefined;\n\tpreviousTime: number | undefined = undefined;\n\tanimationFrameId: number | undefined = undefined;\n\n\tprivate cancelAnimationFrame(): void {\n\t\tif (this.animationFrameId) {\n\t\t\tthis.previousTime = undefined;\n\t\t\tthis.interval = INITIAL_INTERVAL;\n\t\t\tthis.startTime = undefined;\n\t\t\twindow.cancelAnimationFrame(this.animationFrameId);\n\t\t\tthis.animationFrameId = undefined;\n\t\t}\n\t}\n\n\tprivate animationFrameHandler = (time: number): void => {\n\t\tif (this.startTime === undefined) {\n\t\t\tthis.startTime = time;\n\t\t}\n\n\t\tif (this.previousTime === undefined) {\n\t\t\tthis.previousTime = time;\n\t\t}\n\n\t\tif (time - this.previousTime > this.interval) {\n\t\t\tthis.hold.emit();\n\t\t\tthis.previousTime = time;\n\t\t}\n\n\t\tif (time - this.startTime > 1000) {\n\t\t\tthis.interval = 200;\n\t\t}\n\n\t\tif (time - this.startTime > 2000) {\n\t\t\tthis.interval = 50;\n\t\t}\n\n\t\tthis.animationFrameId = window.requestAnimationFrame(this.animationFrameHandler);\n\t};\n\n\tngOnDestroy(): void {\n\t\tthis.elementRef.nativeElement.removeEventListener('mousedown', this.onMouseDown);\n\t\twindow.removeEventListener('mouseup', this.onWindowMouseUp);\n\t\tthis.cancelAnimationFrame();\n\t}\n}\n","import { DecimalPipe, formatNumber } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInject,\n\tLOCALE_ID,\n\tModelSignal,\n\tOutput,\n\tViewChild,\n\tbooleanAttribute,\n\tcomputed,\n\tinput,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { InputDirective } from '@lucca-front/ng/form-field';\nimport { PickerControlDirection } from './misc.utils';\nimport { RepeatOnHoldDirective } from './repeat-on-hold.directive';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-time-picker-part',\n\tstandalone: true,\n\timports: [RepeatOnHoldDirective, DecimalPipe, InputDirective],\n\ttemplateUrl: './time-picker-part.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimePickerPartComponent {\n\tlabel = input('');\n\n\tdecimalConf = input('2.0-0');\n\n\tvalue: ModelSignal<number | '––'> = model('––');\n\n\tdisplay = input<number | '––'>();\n\n\tmax = input(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\tdisplayArrows = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\tisReadonly = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\thideValue = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\tdisabled = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\tfocused = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t@Output() prevRequest = new EventEmitter<void>();\n\t@Output() nextRequest = new EventEmitter<void>();\n\t@Output() inputControlClick = new EventEmitter<PickerControlDirection>();\n\t@Output() touched = new EventEmitter<void>();\n\n\t@ViewChild('timePickerInput') timePickerInput?: ElementRef<HTMLInputElement>;\n\n\tvalueLabel = computed(() => {\n\t\tif (this.hideValue()) {\n\t\t\treturn ' ';\n\t\t}\n\t\tif (this.display() !== undefined) {\n\t\t\treturn this.display();\n\t\t}\n\t\tconst value = this.value();\n\t\tif (value === '––') {\n\t\t\treturn value;\n\t\t}\n\t\treturn formatNumber(value, this.locale, this.decimalConf());\n\t});\n\n\tprotected inputId = `time-picker-part-${nextId++}`;\n\n\tconstructor(@Inject(LOCALE_ID) private locale: string) {}\n\n\tarrowKeyPressed(event: KeyboardEvent, isUpArrow: boolean): void {\n\t\tevent.preventDefault();\n\t\tthis.inputControlClick.emit(isUpArrow ? 'up' : 'down');\n\t}\n\n\tkeysInputHandler(event: Event): void {\n\t\tevent.preventDefault();\n\n\t\tif (!(event.target instanceof HTMLInputElement) || !(event instanceof InputEvent)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.data && /\\D+/.test(event.data)) {\n\t\t\tevent.target.value = String(this.value());\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = event.target.value;\n\n\t\tlet val = value.slice(-2) || '00';\n\n\t\tif (this.max() && Number(val) * 10 > this.max()) {\n\t\t\tthis.moveRequest(event, 'next');\n\t\t}\n\n\t\tif (this.max() && Number(val) > this.max()) {\n\t\t\tval = value.slice(-1);\n\t\t}\n\n\t\tevent.target.value = val;\n\t\tthis.value.set(Number(val));\n\t}\n\n\tclearField(event: Event): void {\n\t\tif (event instanceof KeyboardEvent) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tthis.value.set(0);\n\t}\n\n\tclickHandler(event: MouseEvent) {\n\t\tevent.preventDefault();\n\t}\n\n\tup(): void {\n\t\tthis.inputControlClick.emit('up');\n\t}\n\n\tdown(): void {\n\t\tthis.inputControlClick.emit('down');\n\t}\n\n\tkeydownHandler(event: KeyboardEvent): void {\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tthis.moveRequest(event, 'prev');\n\t\t\t\tbreak;\n\t\t\tcase 'H':\n\t\t\tcase 'h':\n\t\t\tcase ':':\n\t\t\tcase 'ArrowRight':\n\t\t\t\tthis.moveRequest(event, 'next');\n\t\t\t\tbreak;\n\t\t\tcase 'Delete':\n\t\t\tcase 'Backspace':\n\t\t\t\tthis.clearField(event);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tthis.arrowKeyPressed(event, true);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tthis.arrowKeyPressed(event, false);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tmoveRequest(event: Event, direction: 'prev' | 'next'): void {\n\t\tevent.preventDefault();\n\n\t\tif (direction === 'prev') {\n\t\t\tthis.prevRequest.emit();\n\t\t} else {\n\t\t\tthis.nextRequest.emit();\n\t\t}\n\t}\n\n\tfocus(): void {\n\t\tif (this.timePickerInput) {\n\t\t\tthis.timePickerInput.nativeElement.focus();\n\t\t}\n\t}\n}\n","<div class=\"timePicker-fieldset-group-textfield\">\n\t<label class=\"formLabel pr-u-mask\" [attr.id]=\"inputId + '-label'\" [attr.for]=\"inputId + '-input'\">{{ label() }}</label>\n\t<div class=\"timePicker-fieldset-group-textfield\">\n\t\t<input\n\t\t\t#timePickerInput\n\t\t\ttype=\"text\"\n\t\t\tluInput\n\t\t\tluInputStandalone\n\t\t\tinputmode=\"numeric\"\n\t\t\t[attr.id]=\"inputId + '-input'\"\n\t\t\tclass=\"timePicker-fieldset-group-textfield-input\"\n\t\t\t[attr.aria-labelledby]=\"inputId + '-label'\"\n\t\t\tautocomplete=\"off\"\n\t\t\t[value]=\"hideValue() ? null : value()\"\n\t\t\t(input)=\"keysInputHandler($event)\"\n\t\t\t(click)=\"clickHandler($event)\"\n\t\t\t(keydown)=\"keydownHandler($event)\"\n\t\t\t(blur)=\"touched.emit()\"\n\t\t\t(focus)=\"timePickerInput.select()\"\n\t\t/>\n\t\t<span aria-hidden=\"true\" class=\"timePicker-fieldset-group-textfield-display\">{{ valueLabel() }}</span>\n\t</div>\n\t@if (displayArrows()) {\n\t\t<button class=\"timePicker-fieldset-group-stepper\" type=\"button\" tabindex=\"-1\" aria-hidden=\"true\" luRepeatOnHold (hold)=\"up()\">\n\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-northArrow\"></span>\n\t\t</button>\n\t\t<button class=\"timePicker-fieldset-group-stepper\" type=\"button\" tabindex=\"-1\" aria-hidden=\"true\" luRepeatOnHold (hold)=\"down()\">\n\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-southArrow\"></span>\n\t\t</button>\n\t}\n</div>\n","import { ISO8601Duration } from '../core/date-primitives';\n\nexport type DurationChangeEvent = {\n\tpreviousValue: ISO8601Duration | null;\n\tvalue: ISO8601Duration;\n} & (\n\t| {\n\t\t\tsource: 'input' | 'paste';\n\t }\n\t| { source: 'control'; part: 'minutes' | 'hours'; direction: 'up' | 'down' }\n);\n\nexport const DEFAULT_TIME_DECIMAL_PIPE_FORMAT = '2.0-0';\n","export const Translations = {\n\ten: {\n\t\ttimePickerHours: 'hours',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minutes',\n\t},\n\tde: {\n\t\ttimePickerHours: 'Stunden',\n\t\ttimePickerTimeSeparator: 'Std.',\n\t\ttimePickerMinutes: 'Minuten',\n\t},\n\tfr: {\n\t\ttimePickerHours: 'heures',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minutes',\n\t},\n\tit: {\n\t\ttimePickerHours: 'ore',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minuti',\n\t},\n\tnl: {\n\t\ttimePickerHours: 'uren',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minuten',\n\t},\n\t'nl-BE': {\n\t\ttimePickerHours: 'uren',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minuten',\n\t},\n\tes: {\n\t\ttimePickerHours: 'horas',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minutos',\n\t},\n\tpt: {\n\t\ttimePickerHours: 'horas',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minutos',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_DURATION_PICKER_TRANSLATIONS = new InjectionToken('LuDurationPickerTranslations', {\n\tfactory: () => luDurationPickerTranslations,\n});\n\nexport type DurationPickerTranslations = {\n\ttimePickerHours: string;\n\ttimePickerTimeSeparator: string;\n\ttimePickerMinutes: string;\n};\n\nexport const luDurationPickerTranslations: LuTranslation<DurationPickerTranslations> = Translations;\n","import { NgClass } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, computed, forwardRef, Input, input, model, output, ViewEncapsulation } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { getIntl, isNil, isNotNil } from '@lucca-front/ng/core';\nimport { BasePickerComponent } from '../core/base-picker.component';\nimport { ISO8601Duration } from '../core/date-primitives';\nimport { createDurationFromHoursAndMinutes, getHoursPartFromDuration, getMinutesPartFromDuration, isISO8601Duration, isoDurationToDateFnsDuration, isoDurationToSeconds } from '../core/duration.utils';\nimport { ceilToNearest, circularize, floorToNearest, roundToNearest } from '../core/math.utils';\n\nimport { PickerControlDirection } from '../core/misc.utils';\nimport { TimePickerPartComponent } from '../core/time-picker-part.component';\nimport { DEFAULT_TIME_DECIMAL_PIPE_FORMAT, DurationChangeEvent } from './duration-picker.model';\nimport { LU_DURATION_PICKER_TRANSLATIONS } from './duration-picker.translate';\n\n@Component({\n\tselector: 'lu-duration-picker',\n\tstandalone: true,\n\timports: [TimePickerPartComponent, NgClass],\n\ttemplateUrl: './duration-picker.component.html',\n\tstyleUrl: './duration-picker.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DurationPickerComponent),\n\t\t\tmulti: true,\n\t\t},\n\t],\n})\nexport class DurationPickerComponent extends BasePickerComponent {\n\tprotected intl = getIntl(LU_DURATION_PICKER_TRANSLATIONS);\n\n\tvalue = model<ISO8601Duration>('PT0S');\n\tmax = input<ISO8601Duration>('PT99H');\n\n\tdisplayArrows = input(false, { transform: booleanAttribute });\n\n\t@Input() label: string;\n\n\thideZeroValue = input(false, { transform: booleanAttribute });\n\n\tdurationChange = output<DurationChangeEvent>();\n\n\tprotected hours = computed(() => getHoursPartFromDuration(this.value()));\n\tprotected minutes = computed(() => getMinutesPartFromDuration(this.value()));\n\tprotected shouldHideValue = computed(() => this.hideZeroValue() && this.hours() === 0 && this.minutes() === 0);\n\n\tprotected pickerClasses = computed(() => {\n\t\treturn {\n\t\t\ttimePicker: true,\n\t\t\t'mod-stepper': this.displayArrows(),\n\t\t\t'mod-stepperHover': this.displayArrows(),\n\t\t\t[`mod-${this.size()}`]: Boolean(this.size()),\n\t\t};\n\t});\n\tprotected fieldsetSuffixClasses = computed(() => {\n\t\treturn {\n\t\t\t'timePicker-fieldset-groupSeparator': true,\n\t\t\t'pr-u-visibilityHidden': this.shouldHideValue(),\n\t\t};\n\t});\n\tprotected separator = this.intl.timePickerTimeSeparator;\n\n\tprotected hoursDecimalConf = DEFAULT_TIME_DECIMAL_PIPE_FORMAT;\n\n\twriteValue(value: ISO8601Duration): void {\n\t\tthis.value.set(value || 'PT0S');\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tprotected hoursInputHandler(value: number | '––'): void {\n\t\tthis.setTime({\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: createDurationFromHoursAndMinutes(+value, this.minutes()),\n\t\t\tsource: 'input',\n\t\t});\n\t}\n\n\tprotected minutesInputHandler(value: number | '––'): void {\n\t\tthis.setTime({\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: createDurationFromHoursAndMinutes(this.hours(), +value),\n\t\t\tsource: 'input',\n\t\t});\n\t}\n\n\tprotected copyHandler(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\t// write value to clipboard\n\t\tconst value = this.value();\n\t\tif (isNotNil(value)) {\n\t\t\tevent.clipboardData?.setData('text/plain', value);\n\t\t}\n\t}\n\n\tprotected pasteHandler(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\tconst pastedValue = event.clipboardData?.getData('text/plain');\n\t\tif (isNotNil(pastedValue)) {\n\t\t\tlet value: ISO8601Duration;\n\t\t\t// If it's an iso duration, handle as-is\n\t\t\tif (isISO8601Duration(pastedValue)) {\n\t\t\t\tvalue = pastedValue;\n\t\t\t}\n\t\t\tif (/\\d?\\dh\\d\\d/.test(pastedValue)) {\n\t\t\t\tconst split = pastedValue.split('h');\n\t\t\t\tvalue = createDurationFromHoursAndMinutes(+split[0], +split[1]);\n\t\t\t}\n\t\t\tif (/\\d?\\d:\\d\\d/.test(pastedValue)) {\n\t\t\t\tconst split = pastedValue.split(':');\n\t\t\t\tvalue = createDurationFromHoursAndMinutes(+split[0], +split[1]);\n\t\t\t}\n\t\t\tif (value) {\n\t\t\t\tthis.durationChange.emit({\n\t\t\t\t\tpreviousValue: this.value(),\n\t\t\t\t\tsource: 'paste',\n\t\t\t\t\tvalue,\n\t\t\t\t});\n\t\t\t\tthis.value.set(value);\n\t\t\t\tthis.onChange?.(value);\n\t\t\t}\n\t\t}\n\t}\n\n\toverride getHoursIncrement(): number {\n\t\tconst step = this.step();\n\t\tif (isNil(step)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst { hours } = isoDurationToDateFnsDuration(step);\n\n\t\tif (hours === 0) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 24 % hours === 0 ? hours : 1;\n\t}\n\n\toverride getMinutesIncrement(): number | null {\n\t\tconst step = this.step();\n\t\tif (isNil(step)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst { minutes } = isoDurationToDateFnsDuration(step);\n\n\t\tif (minutes === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn 60 % minutes === 0 ? minutes : 1;\n\t}\n\n\tprivate setTime(protoEvent: DurationChangeEvent): void {\n\t\tlet hoursPart = getHoursPartFromDuration(protoEvent.value);\n\t\tconst minutesPart = getMinutesPartFromDuration(protoEvent.value);\n\n\t\tif (hoursPart < 0) {\n\t\t\thoursPart = getHoursPartFromDuration(this.max());\n\t\t\tif (isoDurationToSeconds(createDurationFromHoursAndMinutes(hoursPart, minutesPart)) > isoDurationToSeconds(this.max())) {\n\t\t\t\t// If current value with minutes is > max, decrement hours again\n\t\t\t\thoursPart--;\n\t\t\t}\n\t\t} else if (hoursPart > getHoursPartFromDuration(this.max())) {\n\t\t\thoursPart = 0;\n\t\t}\n\n\t\tconst max = isoDurationToSeconds(this.max());\n\n\t\tconst candidateTimeAsSeconds = hoursPart * 3600 + minutesPart * 60;\n\n\t\tconst seconds = roundToNearest(circularize(candidateTimeAsSeconds, max), 60);\n\n\t\tconst hours = Math.floor(seconds / 3600);\n\t\tconst minutes = Math.floor((seconds % 3600) / 60);\n\n\t\tconst result = createDurationFromHoursAndMinutes(hours, minutes);\n\n\t\tthis.value.set(result);\n\t\tthis.onChange?.(result);\n\t\tthis.durationChange.emit({\n\t\t\t...protoEvent,\n\t\t\tvalue: result,\n\t\t});\n\t}\n\n\tprotected inputControlClickHandler(part: 'hours' | 'minutes', direction: PickerControlDirection): void {\n\t\tconst val = this.value() ?? 'PT0S';\n\t\tconst hoursPart = getHoursPartFromDuration(val);\n\t\tconst minutesPart = getMinutesPartFromDuration(val);\n\n\t\tconst selectedPart = part === 'hours' ? hoursPart : minutesPart;\n\t\tconst selectedIncrement = part === 'hours' ? this.hoursIncrement() : this.minutesIncrement();\n\t\tlet modifiedVal: number;\n\n\t\tif (selectedIncrement === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction === 'up') {\n\t\t\tmodifiedVal = floorToNearest(selectedPart + selectedIncrement, selectedIncrement);\n\t\t} else {\n\t\t\tmodifiedVal = ceilToNearest(selectedPart - selectedIncrement, selectedIncrement);\n\t\t}\n\n\t\tconst newTime = part === 'hours' ? createDurationFromHoursAndMinutes(modifiedVal, minutesPart) : createDurationFromHoursAndMinutes(hoursPart, modifiedVal);\n\n\t\tthis.setTime({\n\t\t\tsource: 'control',\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: newTime,\n\t\t\tpart,\n\t\t\tdirection,\n\t\t});\n\t}\n\n\tpublic focus() {\n\t\tif (isNotNil(this.hoursPart)) {\n\t\t\tthis.focusPart('hours');\n\t\t}\n\t}\n}\n","<div [class]=\"pickerClasses()\" (copy)=\"copyHandler($event)\" (paste)=\"pasteHandler($event)\">\n\t<fieldset class=\"timePicker-fieldset\" [disabled]=\"disabled()\">\n\t\t<legend>\n\t\t\t<span class=\"pr-u-mask\">{{ label }}</span>\n\t\t</legend>\n\t\t<lu-time-picker-part\n\t\t\t#hoursPart\n\t\t\tclass=\"timePicker-fieldset-group\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[label]=\"intl.timePickerHours\"\n\t\t\t[value]=\"hours()\"\n\t\t\t[decimalConf]=\"hoursDecimalConf\"\n\t\t\t[hideValue]=\"shouldHideValue()\"\n\t\t\t[displayArrows]=\"displayArrows()\"\n\t\t\t(valueChange)=\"hoursInputHandler($event)\"\n\t\t\t(nextRequest)=\"focusPart('minutes')\"\n\t\t\t(inputControlClick)=\"inputControlClickHandler('hours', $event)\"\n\t\t/>\n\t\t<div aria-hidden=\"true\" [class]=\"fieldsetSuffixClasses()\">{{ separator }}</div>\n\t\t<lu-time-picker-part\n\t\t\t#minutesPart\n\t\t\tclass=\"timePicker-fieldset-group\"\n\t\t\t[label]=\"intl.timePickerMinutes\"\n\t\t\t[value]=\"minutes()\"\n\t\t\t[max]=\"59\"\n\t\t\t[hideValue]=\"shouldHideValue()\"\n\t\t\t[displayArrows]=\"displayArrows()\"\n\t\t\t[disabled]=\"disabled() || !minutesIncrement()\"\n\t\t\t(valueChange)=\"minutesInputHandler($event)\"\n\t\t\t(prevRequest)=\"focusPart('hours')\"\n\t\t\t(inputControlClick)=\"inputControlClickHandler('minutes', $event)\"\n\t\t/>\n\t</fieldset>\n</div>\n","import { ISO8601Time } from './date-primitives';\n\nexport const castToIsoTime = (str: string) => str as ISO8601Time;\n\nexport const convertStringToIsoTime = (time: string): ISO8601Time => {\n\tif (/^\\d{1,2}:\\d{2}:\\d{2}$/.test(time)) {\n\t\treturn castToIsoTime(time);\n\t}\n\n\tif (/^\\d{1,2}:\\d{2}$/.test(time)) {\n\t\treturn castToIsoTime(`${time}:00`);\n\t}\n\n\tif (/^\\d{1,2}h\\d{2}$/.test(time)) {\n\t\treturn convertStringToIsoTime(time.replace('h', ':'));\n\t}\n\n\tthrow new Error(`Invalid time format: ${time}`);\n};\n\nexport const createIsoTimeFromHoursAndMinutes = (hours: number, minutes: number, seconds: number = 0): ISO8601Time => {\n\tconst hoursStr = hours.toString().padStart(2, '0');\n\tconst minutesStr = minutes.toString().padStart(2, '0');\n\tconst secondsStr = seconds.toString().padStart(2, '0');\n\n\treturn `${hoursStr}:${minutesStr}:${secondsStr}`;\n};\n\nexport const isoTimeToSeconds = (time: ISO8601Time): number => {\n\treturn getHoursPartFromIsoTime(time) * 3600 + getMinutesPartFromIsoTime(time) * 60 + getSecondsPartFromIsoTime(time);\n};\n\nexport const getHoursPartFromIsoTime = (time: ISO8601Time): number => Number(time.split(':')[0]) || 0;\n\nexport const getMinutesPartFromIsoTime = (time: ISO8601Time): number => Number(time.split(':')[1]) || 0;\nexport const getSecondsPartFromIsoTime = (time: ISO8601Time): number => Number(time.split(':')[2]) || 0;\n\nexport const getHoursDisplayPartFromIsoTime = (time: ISO8601Time, ampm = false): number | '––' => {\n\tconst hours = time.split(':')[0];\n\tif (hours === '––') {\n\t\treturn hours;\n\t}\n\tif (ampm) {\n\t\t// Most consistent impl is to create a date and ask date-fns\n\t\treturn formatAMPM(Number(hours)).hours;\n\t}\n\treturn Number(hours);\n};\n\nexport const formatAMPM = (inputHours: number): { hours: number; suffix: 'AM' | 'PM' } => {\n\tlet hours = inputHours;\n\tconst suffix = hours >= 12 ? 'PM' : 'AM';\n\thours = hours % 12;\n\thours = hours ? hours : 12; // 0 should be 12\n\treturn {\n\t\thours,\n\t\tsuffix,\n\t};\n};\n\nexport const getMinutesDisplayPartFromIsoTime = (time: ISO8601Time): number | '––' => {\n\tconst minutes = time.split(':')[1];\n\tif (minutes === '––') {\n\t\treturn minutes;\n\t}\n\treturn Number(minutes);\n};\n","import { ISO8601Time } from '../core/date-primitives';\n\nexport type TimeChangeEvent = {\n\tpreviousValue: ISO8601Time | null;\n\tvalue: ISO8601Time;\n} & (\n\t| {\n\t\t\tsource: 'input' | 'paste';\n\t }\n\t| { source: 'control'; part: 'minutes' | 'hours'; direction: 'up' | 'down' }\n);\nexport const DEFAULT_MIN_TIME: ISO8601Time = '--:--:--';\n\nexport const DEFAULT_TIME_DECIMAL_PIPE_FORMAT = '2.0-0';\n","export const Translations = {\n\ten: {\n\t\ttimePickerHours: 'hours',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minutes',\n\t},\n\tde: {\n\t\ttimePickerHours: 'Stunden',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'Minuten',\n\t},\n\tfr: {\n\t\ttimePickerHours: 'heures',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minutes',\n\t},\n\tit: {\n\t\ttimePickerHours: 'ore',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minuti',\n\t},\n\tnl: {\n\t\ttimePickerHours: 'uren',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minuten',\n\t},\n\t'nl-BE': {\n\t\ttimePickerHours: 'uren',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minuten',\n\t},\n\tes: {\n\t\ttimePickerHours: 'horas',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minutos',\n\t},\n\tpt: {\n\t\ttimePickerHours: 'horas',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minutos',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_TIME_PICKER_TRANSLATIONS = new InjectionToken('LuTimePickerTranslations', {\n\tfactory: () => luTimePickerTranslations,\n});\n\nexport type TimePickerTranslations = {\n\ttimePickerHours: string;\n\ttimePickerTimeSeparator: string;\n\ttimePickerMinutes: string;\n};\n\nexport const luTimePickerTranslations: LuTranslation<TimePickerTranslations> = Translations;\n","import { NgClass } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, computed, ElementRef, forwardRef, inject, Input, input, LOCALE_ID, model, output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { getIntl, isNil, isNotNil } from '@lucca-front/ng/core';\nimport { BasePickerComponent } from '../core/base-picker.component';\nimport { ISO8601Time } from '../core/date-primitives';\nimport {\n\tconvertStringToIsoTime,\n\tcreateIsoTimeFromHoursAndMinutes,\n\tformatAMPM,\n\tgetHoursDisplayPartFromIsoTime,\n\tgetHoursPartFromIsoTime,\n\tgetMinutesDisplayPartFromIsoTime,\n\tgetMinutesPartFromIsoTime,\n\tisoTimeToSeconds,\n} from '../core/date.utils';\nimport { isoDurationToDateFnsDuration } from '../core/duration.utils';\nimport { ceilToNearest, circularize, floorToNearest, roundToNearest } from '../core/math.utils';\nimport { PickerControlDirection } from '../core/misc.utils';\nimport { RepeatOnHoldDirective } from '../core/repeat-on-hold.directive';\nimport { TimePickerPartComponent } from '../core/time-picker-part.component';\nimport { DEFAULT_MIN_TIME, DEFAULT_TIME_DECIMAL_PIPE_FORMAT, TimeChangeEvent } from './time-picker.model';\nimport { LU_TIME_PICKER_TRANSLATIONS } from './time-picker.translate';\n\nconst MAX_TIME = '23:59:59';\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-time-picker',\n\tstandalone: true,\n\timports: [TimePickerPartComponent, NgClass, FormsModule, RepeatOnHoldDirective],\n\ttemplateUrl: './time-picker.component.html',\n\tstyleUrl: './time-picker.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => TimePickerComponent),\n\t\t\tmulti: true,\n\t\t},\n\t],\n})\nexport class TimePickerComponent extends BasePickerComponent {\n\tprotected intl = getIntl(LU_TIME_PICKER_TRANSLATIONS);\n\tprotected localeId = inject(LOCALE_ID);\n\n\tidSuffix = nextId++;\n\n\t@ViewChild('anteMeridiemRef')\n\tanteMeridiemRef: ElementRef<HTMLInputElement>;\n\n\t@ViewChild('postMeridiemRef')\n\tpostMeridiemRef: ElementRef<HTMLInputElement>;\n\n\tvalue = model<ISO8601Time>('--:--:--');\n\tmax = input<ISO8601Time>(MAX_TIME);\n\n\tdisplayArrows = input(false, { transform: booleanAttribute });\n\n\tforceMeridiemDisplay = input<boolean | null>(null);\n\n\tenableMeridiemDisplay = computed(() => {\n\t\tif (this.forceMeridiemDisplay() !== null) {\n\t\t\treturn this.forceMeridiemDisplay();\n\t\t}\n\t\t// We can't ask the API if time should include meridiem so the easiest was to just make it format a static date.\n\t\treturn Intl.DateTimeFormat(this.localeId, {\n\t\t\ttimeStyle: 'short',\n\t\t\tdateStyle: 'short',\n\t\t})\n\t\t\t.format(new Date('1/1/1 17:00:00'))\n\t\t\t.includes('PM');\n\t});\n\n\t@Input() label: string;\n\n\ttimeChange = output<TimeChangeEvent>();\n\n\tprotected hoursDisplay = computed(() => getHoursDisplayPartFromIsoTime(this.value(), this.enableMeridiemDisplay()));\n\tprotected minutesDisplay = computed(() => getMinutesDisplayPartFromIsoTime(this.value()));\n\n\tprotected hours = computed(() => getHoursPartFromIsoTime(this.value()));\n\tprotected minutes = computed(() => getMinutesPartFromIsoTime(this.value()));\n\tprotected pickerClasses = computed(() => {\n\t\treturn {\n\t\t\ttimePicker: true,\n\t\t\t'mod-stepper': this.displayArrows(),\n\t\t\t'mod-stepperHover': this.displayArrows(),\n\t\t\t[`mod-${this.size()}`]: Boolean(this.size()),\n\t\t};\n\t});\n\tprotected separator = this.intl.timePickerTimeSeparator;\n\n\tprotected hoursDecimalConf = DEFAULT_TIME_DECIMAL_PIPE_FORMAT;\n\n\tprotected maxHours = computed(() => {\n\t\tif (this.enableMeridiemDisplay()) {\n\t\t\treturn 12;\n\t\t}\n\t\treturn getHoursPartFromIsoTime(this.max() ?? '23:59:59');\n\t});\n\n\tprotected ampmDisplay = computed(() => {\n\t\treturn formatAMPM(this.hours()).suffix;\n\t});\n\n\tprotected override focusPart(type: 'hours' | 'minutes' | 'meridiem') {\n\t\tif (type === 'meridiem') {\n\t\t\tconst elementToFocus = this.ampmDisplay() === 'AM' ? this.anteMeridiemRef?.nativeElement : this.postMeridiemRef?.nativeElement;\n\t\t\telementToFocus?.focus();\n\t\t} else {\n\t\t\tsuper.focusPart(type);\n\t\t}\n\t}\n\n\twriteValue(value: ISO8601Time): void {\n\t\tthis.value.set(value || '––:––:––');\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tprotected hoursInputHandler(value: number | '––'): void {\n\t\tthis.setTime({\n\t\t\tpreviousValue: this.value(),\n\t\t\t// Mostly for compiler because we never set the time to –– with input handler\n\t\t\tvalue: createIsoTimeFromHoursAndMinutes(+value, this.minutes()),\n\t\t\tsource: 'input',\n\t\t});\n\t}\n\n\tprotected minutesInputHandler(value: number | '––'): void {\n\t\tthis.setTime({\n\t\t\tpreviousValue: this.value(),\n\t\t\t// Mostly for compiler because we never set the time to –– with input handler\n\t\t\tvalue: createIsoTimeFromHoursAndMinutes(this.hours(), +value),\n\t\t\tsource: 'input',\n\t\t});\n\t}\n\n\tprotected copyHandler(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\t// write value to clipboard\n\t\tconst value = this.value();\n\t\tif (isNotNil(value)) {\n\t\t\tevent.clipboardData?.setData('text/plain', value);\n\t\t}\n\t}\n\n\tprotected pasteHandler(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\tconst pastedValue = event.clipboardData?.getData('text/plain');\n\t\tif (isNotNil(pastedValue)) {\n\t\t\ttry {\n\t\t\t\tconst value = convertStringToIsoTime(pastedValue);\n\t\t\t\tthis.timeChange.emit({\n\t\t\t\t\tpreviousValue: this.value(),\n\t\t\t\t\tsource: 'paste',\n\t\t\t\t\tvalue,\n\t\t\t\t});\n\t\t\t\tthis.value.set(value);\n\t\t\t\tthis.onChange?.(value);\n\t\t\t} catch {\n\t\t\t\t// do nothing\n\t\t\t}\n\t\t}\n\t}\n\n\toverride getHoursIncrement(): number {\n\t\tconst step = this.step();\n\t\tif (isNil(step)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst { hours } = isoDurationToDateFnsDuration(step);\n\n\t\tif (hours === 0) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 24 % hours === 0 ? hours : 1;\n\t}\n\n\toverride getMinutesIncrement(): number | null {\n\t\tconst step = this.step();\n\t\tif (isNil(step)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst { minutes } = isoDurationToDateFnsDuration(step);\n\n\t\tif (minutes === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn 60 % minutes === 0 ? minutes : 1;\n\t}\n\n\tprivate setTime(protoEvent: TimeChangeEvent): void {\n\t\tconst hoursPart = getHoursPartFromIsoTime(protoEvent.value);\n\t\tconst minutesPart = getMinutesPartFromIsoTime(protoEvent.value);\n\n\t\tconst max = isoTimeToSeconds(this.max());\n\n\t\tconst candidateTimeAsSeconds = hoursPart * 3600 + minutesPart * 60;\n\n\t\tconst seconds = roundToNearest(circularize(candidateTimeAsSeconds, max), 60);\n\n\t\tconst hours = Math.floor(seconds / 3600);\n\t\tconst minutes = Math.floor((seconds % 3600) / 60);\n\n\t\tconst result = createIsoTimeFromHoursAndMinutes(hours, minutes);\n\n\t\tthis.value.set(result);\n\t\tthis.onChange?.(result);\n\t\tthis.timeChange.emit({\n\t\t\t...protoEvent,\n\t\t\tvalue: result,\n\t\t});\n\t}\n\n\tprotected inputControlClickHandler(part: 'hours' | 'minutes', direction: PickerControlDirection): void {\n\t\tconst val = this.value() ?? DEFAULT_MIN_TIME;\n\t\tconst hoursPart = getHoursPartFromIsoTime(val);\n\t\tconst minutesPart = getMinutesPartFromIsoTime(val);\n\n\t\tconst selectedPart = part === 'hours' ? hoursPart : minutesPart;\n\t\tconst selectedIncrement = part === 'hours' ? this.hoursIncrement() : this.minutesIncrement();\n\t\tlet modifiedVal: number;\n\n\t\tif (selectedIncrement === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction === 'up') {\n\t\t\tmodifiedVal = floorToNearest(selectedPart + selectedIncrement, selectedIncrement);\n\t\t} else {\n\t\t\tmodifiedVal = ceilToNearest(selectedPart - selectedIncrement, selectedIncrement);\n\t\t}\n\n\t\tconst newTime = part === 'hours' ? createIsoTimeFromHoursAndMinutes(modifiedVal, minutesPart) : createIsoTimeFromHoursAndMinutes(hoursPart, modifiedVal);\n\n\t\tthis.setTime({\n\t\t\tsource: 'control',\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: newTime,\n\t\t\tpart,\n\t\t\tdirection,\n\t\t});\n\t}\n\n\tpublic focus() {\n\t\tif (isNotNil(this.hoursPart)) {\n\t\t\tthis.focusPart('hours');\n\t\t}\n\t}\n\n\tswitchMeridiem(newValue: 'AM' | 'PM') {\n\t\tlet hours = getHoursPartFromIsoTime(this.value());\n\t\tconst minutes = getMinutesPartFromIsoTime(this.value());\n\t\tif (newValue === 'PM') {\n\t\t\thours = circularize(hours + 12, 23);\n\t\t} else {\n\t\t\thours = circularize(hours - 12, 23);\n\t\t}\n\t\tthis.setTime({\n\t\t\tsource: 'input',\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: createIsoTimeFromHoursAndMinutes(hours, minutes),\n\t\t});\n\t}\n}\n","<div [class]=\"pickerClasses()\" (copy)=\"copyHandler($event)\" (paste)=\"pasteHandler($event)\">\n\t<fieldset class=\"timePicker-fieldset\" [disabled]=\"disabled()\">\n\t\t<legend>\n\t\t\t<span class=\"pr-u-mask\">{{ label }}</span>\n\t\t</legend>\n\t\t<lu-time-picker-part\n\t\t\t#hoursPart\n\t\t\tclass=\"timePicker-fieldset-group\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[label]=\"intl.timePickerHours\"\n\t\t\t[value]=\"hours()\"\n\t\t\t[display]=\"hoursDisplay()\"\n\t\t\t[max]=\"maxHours()\"\n\t\t\t[decimalConf]=\"hoursDecimalConf\"\n\t\t\t[displayArrows]=\"displayArrows()\"\n\t\t\t(touched)=\"onTouched?.()\"\n\t\t\t(valueChange)=\"hoursInputHandler($event)\"\n\t\t\t(nextRequest)=\"focusPart('minutes')\"\n\t\t\t(inputControlClick)=\"inputControlClickHandler('hours', $event)\"\n\t\t/>\n\t\t<div aria-hidden=\"true\" class=\"timePicker-fieldset-groupSeparator\">{{ separator }}</div>\n\t\t<lu-time-picker-part\n\t\t\t#minutesPart\n\t\t\tclass=\"timePicker-fieldset-group\"\n\t\t\t[label]=\"intl.timePickerMinutes\"\n\t\t\t[value]=\"minutesDisplay()\"\n\t\t\t[max]=\"59\"\n\t\t\t[displayArrows]=\"displayArrows()\"\n\t\t\t(touched)=\"onTouched?.()\"\n\t\t\t[disabled]=\"disabled() || !minutesIncrement()\"\n\t\t\t(valueChange)=\"minutesInputHandler($event)\"\n\t\t\t(prevRequest)=\"focusPart('hours')\"\n\t\t\t(nextRequest)=\"focusPart('meridiem')\"\n\t\t\t(inputControlClick)=\"inputControlClickHandler('minutes', $event)\"\n\t\t/>\n\t\t@if (enableMeridiemDisplay()) {\n\t\t\t<div\n\t\t\t\tclass=\"timePicker-fieldset-meridiem\"\n\t\t\t\t(copy)=\"copyHandler($event)\"\n\t\t\t\t(paste)=\"pasteHandler($event)\"\n\t\t\t\t(keydown.A)=\"anteMeridiemRef.click()\"\n\t\t\t\t(keydown.P)=\"postMeridiemRef.click()\"\n\t\t\t\t(keydown.shift.A)=\"anteMeridiemRef.click()\"\n\t\t\t\t(keydown.shift.P)=\"postMeridiemRef.click()\"\n\t\t\t\t(click)=\"ampmDisplay() === 'AM' ? anteMeridiemRef.focus() : postMeridiemRef.focus()\"\n\t\t\t>\n\t\t\t\t<div class=\"timePicker-fieldset-meridiem-ante\">\n\t\t\t\t\t<label [attr.for]=\"'anteMeridiem-' + idSuffix\">AM</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#anteMeridiemRef\n\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t[attr.name]=\"'meridiem-' + idSuffix\"\n\t\t\t\t\t\t[name]=\"'meridiem-' + idSuffix\"\n\t\t\t\t\t\t[attr.id]=\"'anteMeridiem-' + idSuffix\"\n\t\t\t\t\t\tclass=\"timePicker-fieldset-meridiem-ante-input\"\n\t\t\t\t\t\tvalue=\"AM\"\n\t\t\t\t\t\t[ngModel]=\"ampmDisplay()\"\n\t\t\t\t\t\t(ngModelChange)=\"switchMeridiem($event)\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keydown.arrowleft)=\"$event.preventDefault(); focusPart('minutes')\"\n\t\t\t\t\t\t(keydown.arrowright)=\"$event.preventDefault()\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"timePicker-fieldset-meridiem-post\">\n\t\t\t\t\t<label [attr.for]=\"'postMeridiem-' + idSuffix\">PM</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#postMeridiemRef\n\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t[attr.name]=\"'meridiem-' + idSuffix\"\n\t\t\t\t\t\t[name]=\"'meridiem-' + idSuffix\"\n\t\t\t\t\t\t[attr.id]=\"'postMeridiem-' + idSuffix\"\n\t\t\t\t\t\tclass=\"timePicker-fieldset-meridiem-post-input\"\n\t\t\t\t\t\tvalue=\"PM\"\n\t\t\t\t\t\t[ngModel]=\"ampmDisplay()\"\n\t\t\t\t\t\t(ngModelChange)=\"switchMeridiem($event)\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keydown.arrowleft)=\"$event.preventDefault(); focusPart('minutes')\"\n\t\t\t\t\t\t(keydown.arrowright)=\"$event.preventDefault()\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t@if (displayArrows()) {\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"timePicker-fieldset-group-stepper\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t(click)=\"switchMeridiem(ampmDisplay() === 'AM' ? 'PM' : 'AM')\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-northArrow\"></span>\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"timePicker-fieldset-group-stepper\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t(click)=\"switchMeridiem(ampmDisplay() === 'AM' ? 'PM' : 'AM')\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-southArrow\"></span>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</fieldset>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId","DEFAULT_TIME_DECIMAL_PIPE_FORMAT","Translations"],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-time.mjs","sources":["../../../packages/ng/time/core/base-picker.component.ts","../../../packages/ng/time/core/duration.utils.ts","../../../packages/ng/time/core/math.utils.ts","../../../packages/ng/time/core/repeat-on-hold.directive.ts","../../../packages/ng/time/core/time-picker-part.component.ts","../../../packages/ng/time/core/time-picker-part.component.html","../../../packages/ng/time/duration-picker/duration-picker.model.ts","../../../packages/ng/time/duration-picker/translations.ts","../../../packages/ng/time/duration-picker/duration-picker.translate.ts","../../../packages/ng/time/duration-picker/duration-picker.component.ts","../../../packages/ng/time/duration-picker/duration-picker.component.html","../../../packages/ng/time/core/date.utils.ts","../../../packages/ng/time/time-picker/time-picker.model.ts","../../../packages/ng/time/time-picker/translations.ts","../../../packages/ng/time/time-picker/time-picker.translate.ts","../../../packages/ng/time/time-picker/time-picker.component.ts","../../../packages/ng/time/time-picker/time-picker.component.html","../../../packages/ng/time/lucca-front-ng-time.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, model, viewChild } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { ISO8601Duration, ISO8601Time } from './date-primitives';\nimport { TimePickerPartComponent } from './time-picker-part.component';\n\n@Component({\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: '',\n})\nexport abstract class BasePickerComponent implements ControlValueAccessor {\n\tonChange: (value: ISO8601Time | ISO8601Duration) => void;\n\tonTouched: () => void;\n\n\tstep = input<ISO8601Duration>(null);\n\n\tdisabled = model(false);\n\n\tsize = input<'S' | 'M'>();\n\n\thoursPart = viewChild<TimePickerPartComponent>('hoursPart');\n\n\tminutesPart = viewChild<TimePickerPartComponent>('minutesPart');\n\n\tprotected hoursIncrement = computed(() => this.getHoursIncrement());\n\tprotected minutesIncrement = computed(() => this.getMinutesIncrement());\n\n\tregisterOnChange(fn: () => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tabstract writeValue(value: ISO8601Time | ISO8601Duration): void;\n\n\tabstract getHoursIncrement(): number;\n\n\tabstract getMinutesIncrement(): number;\n\n\tprotected focusPart(type: 'hours' | 'minutes') {\n\t\tthis.onTouched?.();\n\t\tif (type === 'hours') {\n\t\t\tif (this.hoursIncrement() === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.hoursPart()?.focus();\n\t\t}\n\t\tif (type === 'minutes') {\n\t\t\tif (this.minutesIncrement() === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.minutesPart()?.focus();\n\t\t}\n\t}\n}\n","import { isNotNil } from '@lucca-front/ng/core';\nimport { Duration } from 'date-fns';\nimport { ISO8601Duration } from './date-primitives';\n\nexport type NonNullableDateFnsDuration = {\n\tyears: number;\n\tmonths: number;\n\tdays: number;\n\thours: number;\n\tminutes: number;\n\tseconds: number;\n};\n\ntype DateFnsDuration = Duration;\n\nconst ISO8601DurationRegExp =\n\t/^(?<sign>-)?P(?:(?<years>-?\\d+)Y)?(?:(?<months>-?\\d+)M)?(?:(?<weeks>-?\\d+)W)?(?:(?<days>-?\\d+)D)?(?:T(?:(?<hours>-?\\d+)H)?(?:(?<minutes>-?\\d+)M)?(?:(?<seconds>-?\\d+(?:\\.\\d+)?)S)?)?$/;\n\n// TODO memoize\nexport const isoDurationToDateFnsDuration = (isoDuration: ISO8601Duration): NonNullableDateFnsDuration => {\n\tconst matches = ISO8601DurationRegExp.exec(isoDuration);\n\n\tconst groups = matches?.groups;\n\n\tif (!groups) {\n\t\tthrow new Error(`Invalid ISO 8601 duration: ${isoDuration}`);\n\t}\n\n\tconst withSign = groups['sign'] === '-' ? -1 : 1;\n\n\tconst result: NonNullableDateFnsDuration = {\n\t\tyears: groups['years'] ? Number(groups['years']) : 0,\n\t\tmonths: groups['months'] ? Number(groups['months']) : 0,\n\t\tdays: groups['days'] ? Number(groups['days']) : 0,\n\t\thours: groups['hours'] ? Number(groups['hours']) : 0,\n\t\tminutes: groups['minutes'] ? Number(groups['minutes']) : 0,\n\t\tseconds: groups['seconds'] ? Number(groups['seconds']) : 0,\n\t};\n\n\tresult.years *= withSign;\n\tresult.months *= withSign;\n\tresult.days *= withSign;\n\tresult.hours *= withSign;\n\tresult.minutes *= withSign;\n\tresult.seconds *= withSign;\n\n\treturn result;\n};\n\nexport function isISO8601Duration(value: string): value is ISO8601Duration {\n\treturn ISO8601DurationRegExp.test(value);\n}\n\nexport const dateFnsDurationToSeconds = (durationFns: DateFnsDuration): number => {\n\tconst { years, months } = durationFns;\n\tlet { days, hours, minutes, seconds } = durationFns;\n\n\tif ((isNotNil(years) && years !== 0) || (isNotNil(months) && months !== 0)) {\n\t\tthrow new Error('years and months are not supported');\n\t}\n\n\tdays = days || 0;\n\thours = hours || 0;\n\tminutes = minutes || 0;\n\tseconds = seconds || 0;\n\n\treturn days * 24 * 60 * 60 + hours * 60 * 60 + minutes * 60 + seconds;\n};\n\nexport const isoDurationToSeconds = (duration: ISO8601Duration): number => {\n\tconst durationFns = isoDurationToDateFnsDuration(duration);\n\n\treturn dateFnsDurationToSeconds(durationFns);\n};\n\nexport const getHoursPartFromDuration = (duration: ISO8601Duration): number => {\n\treturn Math.floor(isoDurationToSeconds(duration) / 3600);\n};\n\nexport const getMinutesPartFromDuration = (duration: ISO8601Duration): number => {\n\treturn Math.floor((isoDurationToSeconds(duration) % 3600) / 60);\n};\n\nexport const createDurationFromHoursAndMinutes = (hours: number, minutes: number): ISO8601Duration => {\n\treturn `PT${hours}H${minutes}M`;\n};\n","export const roundToNearest = (value: number, step: number) => Math.round(value / step) * step;\n\nexport const floorToNearest = (value: number, step: number) => Math.floor(value / step) * step;\n\nexport const ceilToNearest = (value: number, step: number) => Math.ceil(value / step) * step;\n\n/**\n * Returns the value of n circularized between 0 and max.\n * Given n = 0 and max = 10, returns 0.\n * Given n = 10 and max = 10, returns 10.\n * Given n = 11 and max = 10, returns 1.\n * Given n = -1 and max = 10, returns 9.\n */\nexport const circularize = (n: number, max: number) => {\n\tif (n % max === 0) {\n\t\treturn n === 0 ? 0 : max;\n\t}\n\treturn ((n % max) + max) % max;\n};\n","import { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\n\nconst INITIAL_INTERVAL = 500;\n\n@Directive({\n\tselector: '[luRepeatOnHold]',\n})\nexport class RepeatOnHoldDirective implements OnDestroy, OnInit {\n\t@Output() hold = new EventEmitter<void>();\n\n\tonMouseDown = () => {\n\t\tif (this.startTime !== undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.hold.emit();\n\t\tthis.animationFrameId = window.requestAnimationFrame(this.animationFrameHandler);\n\n\t\twindow.removeEventListener('mouseup', this.onWindowMouseUp);\n\t\twindow.addEventListener('mouseup', this.onWindowMouseUp);\n\t};\n\n\tonWindowMouseUp = () => {\n\t\tthis.cancelAnimationFrame();\n\t};\n\n\tconstructor(private elementRef: ElementRef<HTMLElement>) {}\n\n\tngOnInit(): void {\n\t\tthis.elementRef.nativeElement.addEventListener('mousedown', this.onMouseDown);\n\t}\n\n\tinterval = INITIAL_INTERVAL;\n\tstartTime: number | undefined = undefined;\n\tpreviousTime: number | undefined = undefined;\n\tanimationFrameId: number | undefined = undefined;\n\n\tprivate cancelAnimationFrame(): void {\n\t\tif (this.animationFrameId) {\n\t\t\tthis.previousTime = undefined;\n\t\t\tthis.interval = INITIAL_INTERVAL;\n\t\t\tthis.startTime = undefined;\n\t\t\twindow.cancelAnimationFrame(this.animationFrameId);\n\t\t\tthis.animationFrameId = undefined;\n\t\t}\n\t}\n\n\tprivate animationFrameHandler = (time: number): void => {\n\t\tif (this.startTime === undefined) {\n\t\t\tthis.startTime = time;\n\t\t}\n\n\t\tif (this.previousTime === undefined) {\n\t\t\tthis.previousTime = time;\n\t\t}\n\n\t\tif (time - this.previousTime > this.interval) {\n\t\t\tthis.hold.emit();\n\t\t\tthis.previousTime = time;\n\t\t}\n\n\t\tif (time - this.startTime > 1000) {\n\t\t\tthis.interval = 200;\n\t\t}\n\n\t\tif (time - this.startTime > 2000) {\n\t\t\tthis.interval = 50;\n\t\t}\n\n\t\tthis.animationFrameId = window.requestAnimationFrame(this.animationFrameHandler);\n\t};\n\n\tngOnDestroy(): void {\n\t\tthis.elementRef.nativeElement.removeEventListener('mousedown', this.onMouseDown);\n\t\twindow.removeEventListener('mouseup', this.onWindowMouseUp);\n\t\tthis.cancelAnimationFrame();\n\t}\n}\n","import { DecimalPipe, formatNumber } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInject,\n\tLOCALE_ID,\n\tModelSignal,\n\tOutput,\n\tViewChild,\n\tbooleanAttribute,\n\tcomputed,\n\tinput,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { InputDirective } from '@lucca-front/ng/form-field';\nimport { PickerControlDirection } from './misc.utils';\nimport { RepeatOnHoldDirective } from './repeat-on-hold.directive';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-time-picker-part',\n\timports: [RepeatOnHoldDirective, DecimalPipe, InputDirective],\n\ttemplateUrl: './time-picker-part.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimePickerPartComponent {\n\tlabel = input('');\n\n\tdecimalConf = input('2.0-0');\n\n\tvalue: ModelSignal<number | '––'> = model('––');\n\n\tdisplay = input<number | '––'>();\n\n\tmax = input(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\tdisplayArrows = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\tisReadonly = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\thideValue = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\tdisabled = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\tfocused = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t@Output() prevRequest = new EventEmitter<void>();\n\t@Output() nextRequest = new EventEmitter<void>();\n\t@Output() inputControlClick = new EventEmitter<PickerControlDirection>();\n\t@Output() touched = new EventEmitter<void>();\n\n\t@ViewChild('timePickerInput') timePickerInput?: ElementRef<HTMLInputElement>;\n\n\tvalueLabel = computed(() => {\n\t\tif (this.hideValue()) {\n\t\t\treturn ' ';\n\t\t}\n\t\tif (this.display() !== undefined) {\n\t\t\treturn this.display();\n\t\t}\n\t\tconst value = this.value();\n\t\tif (value === '––') {\n\t\t\treturn value;\n\t\t}\n\t\treturn formatNumber(value, this.locale, this.decimalConf());\n\t});\n\n\tprotected inputId = `time-picker-part-${nextId++}`;\n\n\tconstructor(@Inject(LOCALE_ID) private locale: string) {}\n\n\tarrowKeyPressed(event: KeyboardEvent, isUpArrow: boolean): void {\n\t\tevent.preventDefault();\n\t\tthis.inputControlClick.emit(isUpArrow ? 'up' : 'down');\n\t}\n\n\tkeysInputHandler(event: Event): void {\n\t\tevent.preventDefault();\n\n\t\tif (!(event.target instanceof HTMLInputElement) || !(event instanceof InputEvent)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.data && /\\D+/.test(event.data)) {\n\t\t\tevent.target.value = String(this.value());\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = event.target.value;\n\n\t\tlet val = value.slice(-2) || '00';\n\n\t\tif (this.max() && Number(val) * 10 > this.max()) {\n\t\t\tthis.moveRequest(event, 'next');\n\t\t}\n\n\t\tif (this.max() && Number(val) > this.max()) {\n\t\t\tval = value.slice(-1);\n\t\t}\n\n\t\tevent.target.value = val;\n\t\tthis.value.set(Number(val));\n\t}\n\n\tclearField(event: Event): void {\n\t\tif (event instanceof KeyboardEvent) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tthis.value.set(0);\n\t}\n\n\tclickHandler(event: MouseEvent) {\n\t\tevent.preventDefault();\n\t}\n\n\tup(): void {\n\t\tthis.inputControlClick.emit('up');\n\t}\n\n\tdown(): void {\n\t\tthis.inputControlClick.emit('down');\n\t}\n\n\tkeydownHandler(event: KeyboardEvent): void {\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tthis.moveRequest(event, 'prev');\n\t\t\t\tbreak;\n\t\t\tcase 'H':\n\t\t\tcase 'h':\n\t\t\tcase ':':\n\t\t\tcase 'ArrowRight':\n\t\t\t\tthis.moveRequest(event, 'next');\n\t\t\t\tbreak;\n\t\t\tcase 'Delete':\n\t\t\tcase 'Backspace':\n\t\t\t\tthis.clearField(event);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tthis.arrowKeyPressed(event, true);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tthis.arrowKeyPressed(event, false);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tmoveRequest(event: Event, direction: 'prev' | 'next'): void {\n\t\tevent.preventDefault();\n\n\t\tif (direction === 'prev') {\n\t\t\tthis.prevRequest.emit();\n\t\t} else {\n\t\t\tthis.nextRequest.emit();\n\t\t}\n\t}\n\n\tfocus(): void {\n\t\tif (this.timePickerInput) {\n\t\t\tthis.timePickerInput.nativeElement.focus();\n\t\t}\n\t}\n}\n","<div class=\"timePicker-fieldset-group-textfield\">\n\t<label class=\"formLabel pr-u-mask\" [attr.id]=\"inputId + '-label'\" [attr.for]=\"inputId + '-input'\">{{ label() }}</label>\n\t<div class=\"timePicker-fieldset-group-textfield\">\n\t\t<input\n\t\t\t#timePickerInput\n\t\t\ttype=\"text\"\n\t\t\tluInput\n\t\t\tluInputStandalone\n\t\t\tinputmode=\"numeric\"\n\t\t\t[attr.id]=\"inputId + '-input'\"\n\t\t\tclass=\"timePicker-fieldset-group-textfield-input\"\n\t\t\t[attr.aria-labelledby]=\"inputId + '-label'\"\n\t\t\tautocomplete=\"off\"\n\t\t\t[value]=\"hideValue() ? null : value()\"\n\t\t\t(input)=\"keysInputHandler($event)\"\n\t\t\t(click)=\"clickHandler($event)\"\n\t\t\t(keydown)=\"keydownHandler($event)\"\n\t\t\t(blur)=\"touched.emit()\"\n\t\t\t(focus)=\"timePickerInput.select()\"\n\t\t/>\n\t\t<span aria-hidden=\"true\" class=\"timePicker-fieldset-group-textfield-display\">{{ valueLabel() }}</span>\n\t</div>\n\t@if (displayArrows()) {\n\t\t<button class=\"timePicker-fieldset-group-stepper\" type=\"button\" tabindex=\"-1\" aria-hidden=\"true\" luRepeatOnHold (hold)=\"up()\">\n\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-northArrow\"></span>\n\t\t</button>\n\t\t<button class=\"timePicker-fieldset-group-stepper\" type=\"button\" tabindex=\"-1\" aria-hidden=\"true\" luRepeatOnHold (hold)=\"down()\">\n\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-southArrow\"></span>\n\t\t</button>\n\t}\n</div>\n","import { ISO8601Duration } from '../core/date-primitives';\n\nexport type DurationChangeEvent = {\n\tpreviousValue: ISO8601Duration | null;\n\tvalue: ISO8601Duration;\n} & (\n\t| {\n\t\t\tsource: 'input' | 'paste';\n\t }\n\t| { source: 'control'; part: 'minutes' | 'hours'; direction: 'up' | 'down' }\n);\n\nexport const DEFAULT_TIME_DECIMAL_PIPE_FORMAT = '2.0-0';\n","export const Translations = {\n\tpt: {\n\t\ttimePickerHours: 'horas',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minutos',\n\t},\n\tes: {\n\t\ttimePickerHours: 'horas',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minutos',\n\t},\n\t'nl-BE': {\n\t\ttimePickerHours: 'uren',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minuten',\n\t},\n\tnl: {\n\t\ttimePickerHours: 'uren',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minuten',\n\t},\n\tit: {\n\t\ttimePickerHours: 'ore',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minuti',\n\t},\n\tde: {\n\t\ttimePickerHours: 'Stunden',\n\t\ttimePickerTimeSeparator: 'Std.',\n\t\ttimePickerMinutes: 'Minuten',\n\t},\n\tfr: {\n\t\ttimePickerHours: 'heures',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minutes',\n\t},\n\ten: {\n\t\ttimePickerHours: 'hours',\n\t\ttimePickerTimeSeparator: 'h',\n\t\ttimePickerMinutes: 'minutes',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_DURATION_PICKER_TRANSLATIONS = new InjectionToken('LuDurationPickerTranslations', {\n\tfactory: () => luDurationPickerTranslations,\n});\n\nexport type DurationPickerTranslations = {\n\ttimePickerHours: string;\n\ttimePickerTimeSeparator: string;\n\ttimePickerMinutes: string;\n};\n\nexport const luDurationPickerTranslations: LuTranslation<DurationPickerTranslations> = Translations;\n","import { NgClass } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, computed, forwardRef, input, model, output, ViewEncapsulation } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { getIntl, isNil, isNotNil } from '@lucca-front/ng/core';\nimport { BasePickerComponent } from '../core/base-picker.component';\nimport { ISO8601Duration } from '../core/date-primitives';\nimport { createDurationFromHoursAndMinutes, getHoursPartFromDuration, getMinutesPartFromDuration, isISO8601Duration, isoDurationToDateFnsDuration, isoDurationToSeconds } from '../core/duration.utils';\nimport { ceilToNearest, circularize, floorToNearest, roundToNearest } from '../core/math.utils';\n\nimport { PickerControlDirection } from '../core/misc.utils';\nimport { TimePickerPartComponent } from '../core/time-picker-part.component';\nimport { DEFAULT_TIME_DECIMAL_PIPE_FORMAT, DurationChangeEvent } from './duration-picker.model';\nimport { LU_DURATION_PICKER_TRANSLATIONS } from './duration-picker.translate';\n\n@Component({\n\tselector: 'lu-duration-picker',\n\timports: [TimePickerPartComponent, NgClass],\n\ttemplateUrl: './duration-picker.component.html',\n\tstyleUrl: './duration-picker.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DurationPickerComponent),\n\t\t\tmulti: true,\n\t\t},\n\t],\n})\nexport class DurationPickerComponent extends BasePickerComponent {\n\tprotected intl = getIntl(LU_DURATION_PICKER_TRANSLATIONS);\n\n\tvalue = model<ISO8601Duration>('PT0S');\n\treadonly max = input<ISO8601Duration>('PT99H');\n\n\treadonly displayArrows = input(false, { transform: booleanAttribute });\n\n\treadonly label = input<string>();\n\n\treadonly hideZeroValue = input(false, { transform: booleanAttribute });\n\n\treadonly durationChange = output<DurationChangeEvent>();\n\n\tprotected readonly hours = computed(() => getHoursPartFromDuration(this.value()));\n\tprotected readonly minutes = computed(() => getMinutesPartFromDuration(this.value()));\n\tprotected readonly shouldHideValue = computed(() => this.hideZeroValue() && this.hours() === 0 && this.minutes() === 0);\n\n\tprotected readonly pickerClasses = computed(() => {\n\t\treturn {\n\t\t\ttimePicker: true,\n\t\t\t'mod-stepper': this.displayArrows(),\n\t\t\t'mod-stepperHover': this.displayArrows(),\n\t\t\t[`mod-${this.size()}`]: Boolean(this.size()),\n\t\t};\n\t});\n\tprotected readonly fieldsetSuffixClasses = computed(() => {\n\t\treturn {\n\t\t\t'timePicker-fieldset-groupSeparator': true,\n\t\t\t'pr-u-visibilityHidden': this.shouldHideValue(),\n\t\t};\n\t});\n\tprotected separator = this.intl.timePickerTimeSeparator;\n\n\tprotected hoursDecimalConf = DEFAULT_TIME_DECIMAL_PIPE_FORMAT;\n\n\twriteValue(value: ISO8601Duration): void {\n\t\tthis.value.set(value || 'PT0S');\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tprotected hoursInputHandler(value: number | '––'): void {\n\t\tthis.setTime({\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: createDurationFromHoursAndMinutes(+value, this.minutes()),\n\t\t\tsource: 'input',\n\t\t});\n\t}\n\n\tprotected minutesInputHandler(value: number | '––'): void {\n\t\tthis.setTime({\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: createDurationFromHoursAndMinutes(this.hours(), +value),\n\t\t\tsource: 'input',\n\t\t});\n\t}\n\n\tprotected copyHandler(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\t// write value to clipboard\n\t\tconst value = this.value();\n\t\tif (isNotNil(value)) {\n\t\t\tevent.clipboardData?.setData('text/plain', value);\n\t\t}\n\t}\n\n\tprotected pasteHandler(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\tconst pastedValue = event.clipboardData?.getData('text/plain');\n\t\tif (isNotNil(pastedValue)) {\n\t\t\tlet value: ISO8601Duration;\n\t\t\t// If it's an iso duration, handle as-is\n\t\t\tif (isISO8601Duration(pastedValue)) {\n\t\t\t\tvalue = pastedValue;\n\t\t\t}\n\t\t\tif (/\\d?\\dh\\d\\d/.test(pastedValue)) {\n\t\t\t\tconst split = pastedValue.split('h');\n\t\t\t\tvalue = createDurationFromHoursAndMinutes(+split[0], +split[1]);\n\t\t\t}\n\t\t\tif (/\\d?\\d:\\d\\d/.test(pastedValue)) {\n\t\t\t\tconst split = pastedValue.split(':');\n\t\t\t\tvalue = createDurationFromHoursAndMinutes(+split[0], +split[1]);\n\t\t\t}\n\t\t\tif (value) {\n\t\t\t\tthis.durationChange.emit({\n\t\t\t\t\tpreviousValue: this.value(),\n\t\t\t\t\tsource: 'paste',\n\t\t\t\t\tvalue,\n\t\t\t\t});\n\t\t\t\tthis.value.set(value);\n\t\t\t\tthis.onChange?.(value);\n\t\t\t}\n\t\t}\n\t}\n\n\toverride getHoursIncrement(): number {\n\t\tconst step = this.step();\n\t\tif (isNil(step)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst { hours } = isoDurationToDateFnsDuration(step);\n\n\t\tif (hours === 0) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 24 % hours === 0 ? hours : 1;\n\t}\n\n\toverride getMinutesIncrement(): number | null {\n\t\tconst step = this.step();\n\t\tif (isNil(step)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst { minutes } = isoDurationToDateFnsDuration(step);\n\n\t\tif (minutes === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn 60 % minutes === 0 ? minutes : 1;\n\t}\n\n\tprivate setTime(protoEvent: DurationChangeEvent): void {\n\t\tlet hoursPart = getHoursPartFromDuration(protoEvent.value);\n\t\tconst minutesPart = getMinutesPartFromDuration(protoEvent.value);\n\n\t\tif (hoursPart < 0) {\n\t\t\thoursPart = getHoursPartFromDuration(this.max());\n\t\t\tif (isoDurationToSeconds(createDurationFromHoursAndMinutes(hoursPart, minutesPart)) > isoDurationToSeconds(this.max())) {\n\t\t\t\t// If current value with minutes is > max, decrement hours again\n\t\t\t\thoursPart--;\n\t\t\t}\n\t\t} else if (hoursPart > getHoursPartFromDuration(this.max())) {\n\t\t\thoursPart = 0;\n\t\t}\n\n\t\tconst max = isoDurationToSeconds(this.max());\n\n\t\tconst candidateTimeAsSeconds = hoursPart * 3600 + minutesPart * 60;\n\n\t\tconst seconds = roundToNearest(circularize(candidateTimeAsSeconds, max), 60);\n\n\t\tconst hours = Math.floor(seconds / 3600);\n\t\tconst minutes = Math.floor((seconds % 3600) / 60);\n\n\t\tconst result = createDurationFromHoursAndMinutes(hours, minutes);\n\n\t\tthis.value.set(result);\n\t\tthis.onChange?.(result);\n\t\tthis.durationChange.emit({\n\t\t\t...protoEvent,\n\t\t\tvalue: result,\n\t\t});\n\t}\n\n\tprotected inputControlClickHandler(part: 'hours' | 'minutes', direction: PickerControlDirection): void {\n\t\tconst val = this.value() ?? 'PT0S';\n\t\tconst hoursPart = getHoursPartFromDuration(val);\n\t\tconst minutesPart = getMinutesPartFromDuration(val);\n\n\t\tconst selectedPart = part === 'hours' ? hoursPart : minutesPart;\n\t\tconst selectedIncrement = part === 'hours' ? this.hoursIncrement() : this.minutesIncrement();\n\t\tlet modifiedVal: number;\n\n\t\tif (selectedIncrement === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction === 'up') {\n\t\t\tmodifiedVal = floorToNearest(selectedPart + selectedIncrement, selectedIncrement);\n\t\t} else {\n\t\t\tmodifiedVal = ceilToNearest(selectedPart - selectedIncrement, selectedIncrement);\n\t\t}\n\n\t\tconst newTime = part === 'hours' ? createDurationFromHoursAndMinutes(modifiedVal, minutesPart) : createDurationFromHoursAndMinutes(hoursPart, modifiedVal);\n\n\t\tthis.setTime({\n\t\t\tsource: 'control',\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: newTime,\n\t\t\tpart,\n\t\t\tdirection,\n\t\t});\n\t}\n\n\tpublic focus() {\n\t\tif (isNotNil(this.hoursPart)) {\n\t\t\tthis.focusPart('hours');\n\t\t}\n\t}\n}\n","<div [class]=\"pickerClasses()\" (copy)=\"copyHandler($event)\" (paste)=\"pasteHandler($event)\">\n\t<fieldset class=\"timePicker-fieldset\" [disabled]=\"disabled()\">\n\t\t<legend>\n\t\t\t<span class=\"pr-u-mask\">{{ label() }}</span>\n\t\t</legend>\n\t\t<lu-time-picker-part\n\t\t\t#hoursPart\n\t\t\tclass=\"timePicker-fieldset-group\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[label]=\"intl.timePickerHours\"\n\t\t\t[value]=\"hours()\"\n\t\t\t[decimalConf]=\"hoursDecimalConf\"\n\t\t\t[hideValue]=\"shouldHideValue()\"\n\t\t\t[displayArrows]=\"displayArrows()\"\n\t\t\t(valueChange)=\"hoursInputHandler($event)\"\n\t\t\t(nextRequest)=\"focusPart('minutes')\"\n\t\t\t(inputControlClick)=\"inputControlClickHandler('hours', $event)\"\n\t\t/>\n\t\t<div aria-hidden=\"true\" [class]=\"fieldsetSuffixClasses()\">{{ separator }}</div>\n\t\t<lu-time-picker-part\n\t\t\t#minutesPart\n\t\t\tclass=\"timePicker-fieldset-group\"\n\t\t\t[label]=\"intl.timePickerMinutes\"\n\t\t\t[value]=\"minutes()\"\n\t\t\t[max]=\"59\"\n\t\t\t[hideValue]=\"shouldHideValue()\"\n\t\t\t[displayArrows]=\"displayArrows()\"\n\t\t\t[disabled]=\"disabled() || !minutesIncrement()\"\n\t\t\t(valueChange)=\"minutesInputHandler($event)\"\n\t\t\t(prevRequest)=\"focusPart('hours')\"\n\t\t\t(inputControlClick)=\"inputControlClickHandler('minutes', $event)\"\n\t\t/>\n\t</fieldset>\n</div>\n","import { ISO8601Time } from './date-primitives';\n\nexport const castToIsoTime = (str: string) => str as ISO8601Time;\n\nexport const convertStringToIsoTime = (time: string): ISO8601Time => {\n\tif (/^\\d{1,2}:\\d{2}:\\d{2}$/.test(time)) {\n\t\treturn castToIsoTime(time);\n\t}\n\n\tif (/^\\d{1,2}:\\d{2}$/.test(time)) {\n\t\treturn castToIsoTime(`${time}:00`);\n\t}\n\n\tif (/^\\d{1,2}h\\d{2}$/.test(time)) {\n\t\treturn convertStringToIsoTime(time.replace('h', ':'));\n\t}\n\n\tthrow new Error(`Invalid time format: ${time}`);\n};\n\nexport const createIsoTimeFromHoursAndMinutes = (hours: number, minutes: number, seconds: number = 0): ISO8601Time => {\n\tconst hoursStr = hours.toString().padStart(2, '0');\n\tconst minutesStr = minutes.toString().padStart(2, '0');\n\tconst secondsStr = seconds.toString().padStart(2, '0');\n\n\treturn `${hoursStr}:${minutesStr}:${secondsStr}`;\n};\n\nexport const isoTimeToSeconds = (time: ISO8601Time): number => {\n\treturn getHoursPartFromIsoTime(time) * 3600 + getMinutesPartFromIsoTime(time) * 60 + getSecondsPartFromIsoTime(time);\n};\n\nexport const getHoursPartFromIsoTime = (time: ISO8601Time): number => Number(time.split(':')[0]) || 0;\n\nexport const getMinutesPartFromIsoTime = (time: ISO8601Time): number => Number(time.split(':')[1]) || 0;\nexport const getSecondsPartFromIsoTime = (time: ISO8601Time): number => Number(time.split(':')[2]) || 0;\n\nexport const getHoursDisplayPartFromIsoTime = (time: ISO8601Time, ampm = false): number | '––' => {\n\tconst hours = time.split(':')[0];\n\tif (hours === '––') {\n\t\treturn hours;\n\t}\n\tif (ampm) {\n\t\t// Most consistent impl is to create a date and ask date-fns\n\t\treturn formatAMPM(Number(hours)).hours;\n\t}\n\treturn Number(hours);\n};\n\nexport const formatAMPM = (inputHours: number): { hours: number; suffix: 'AM' | 'PM' } => {\n\tlet hours = inputHours;\n\tconst suffix = hours >= 12 ? 'PM' : 'AM';\n\thours = hours % 12;\n\thours = hours ? hours : 12; // 0 should be 12\n\treturn {\n\t\thours,\n\t\tsuffix,\n\t};\n};\n\nexport const getMinutesDisplayPartFromIsoTime = (time: ISO8601Time): number | '––' => {\n\tconst minutes = time.split(':')[1];\n\tif (minutes === '––') {\n\t\treturn minutes;\n\t}\n\treturn Number(minutes);\n};\n","import { ISO8601Time } from '../core/date-primitives';\n\nexport type TimeChangeEvent = {\n\tpreviousValue: ISO8601Time | null;\n\tvalue: ISO8601Time;\n} & (\n\t| {\n\t\t\tsource: 'input' | 'paste';\n\t }\n\t| { source: 'control'; part: 'minutes' | 'hours'; direction: 'up' | 'down' }\n);\nexport const DEFAULT_MIN_TIME: ISO8601Time = '--:--:--';\n\nexport const DEFAULT_TIME_DECIMAL_PIPE_FORMAT = '2.0-0';\n","export const Translations = {\n\tpt: {\n\t\ttimePickerHours: 'horas',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minutos',\n\t},\n\tes: {\n\t\ttimePickerHours: 'horas',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minutos',\n\t},\n\t'nl-BE': {\n\t\ttimePickerHours: 'uren',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minuten',\n\t},\n\tnl: {\n\t\ttimePickerHours: 'uren',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minuten',\n\t},\n\tit: {\n\t\ttimePickerHours: 'ore',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minuti',\n\t},\n\tde: {\n\t\ttimePickerHours: 'Stunden',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'Minuten',\n\t},\n\tfr: {\n\t\ttimePickerHours: 'heures',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minutes',\n\t},\n\ten: {\n\t\ttimePickerHours: 'hours',\n\t\ttimePickerTimeSeparator: ':',\n\t\ttimePickerMinutes: 'minutes',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_TIME_PICKER_TRANSLATIONS = new InjectionToken('LuTimePickerTranslations', {\n\tfactory: () => luTimePickerTranslations,\n});\n\nexport type TimePickerTranslations = {\n\ttimePickerHours: string;\n\ttimePickerTimeSeparator: string;\n\ttimePickerMinutes: string;\n};\n\nexport const luTimePickerTranslations: LuTranslation<TimePickerTranslations> = Translations;\n","import { NgClass } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, computed, ElementRef, forwardRef, inject, input, LOCALE_ID, model, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { getIntl, isNil, isNotNil } from '@lucca-front/ng/core';\nimport { BasePickerComponent } from '../core/base-picker.component';\nimport { ISO8601Time } from '../core/date-primitives';\nimport {\n\tconvertStringToIsoTime,\n\tcreateIsoTimeFromHoursAndMinutes,\n\tformatAMPM,\n\tgetHoursDisplayPartFromIsoTime,\n\tgetHoursPartFromIsoTime,\n\tgetMinutesDisplayPartFromIsoTime,\n\tgetMinutesPartFromIsoTime,\n\tisoTimeToSeconds,\n} from '../core/date.utils';\nimport { isoDurationToDateFnsDuration } from '../core/duration.utils';\nimport { ceilToNearest, circularize, floorToNearest, roundToNearest } from '../core/math.utils';\nimport { PickerControlDirection } from '../core/misc.utils';\nimport { RepeatOnHoldDirective } from '../core/repeat-on-hold.directive';\nimport { TimePickerPartComponent } from '../core/time-picker-part.component';\nimport { DEFAULT_MIN_TIME, DEFAULT_TIME_DECIMAL_PIPE_FORMAT, TimeChangeEvent } from './time-picker.model';\nimport { LU_TIME_PICKER_TRANSLATIONS } from './time-picker.translate';\n\nconst MAX_TIME = '23:59:59';\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-time-picker',\n\timports: [TimePickerPartComponent, NgClass, FormsModule, RepeatOnHoldDirective],\n\ttemplateUrl: './time-picker.component.html',\n\tstyleUrl: './time-picker.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => TimePickerComponent),\n\t\t\tmulti: true,\n\t\t},\n\t],\n})\nexport class TimePickerComponent extends BasePickerComponent {\n\tprotected intl = getIntl(LU_TIME_PICKER_TRANSLATIONS);\n\tprotected localeId = inject(LOCALE_ID);\n\n\treadonly idSuffix = nextId++;\n\n\treadonly anteMeridiemRef = viewChild<ElementRef<HTMLInputElement>>('anteMeridiemRef');\n\n\treadonly postMeridiemRef = viewChild<ElementRef<HTMLInputElement>>('postMeridiemRef');\n\n\tvalue = model<ISO8601Time>('--:--:--');\n\treadonly max = input<ISO8601Time>(MAX_TIME);\n\n\treadonly displayArrows = input(false, { transform: booleanAttribute });\n\n\treadonly forceMeridiemDisplay = input<boolean | null>(null);\n\n\treadonly enableMeridiemDisplay = computed(() => {\n\t\tif (this.forceMeridiemDisplay() !== null) {\n\t\t\treturn this.forceMeridiemDisplay();\n\t\t}\n\t\t// We can't ask the API if time should include meridiem so the easiest was to just make it format a static date.\n\t\treturn Intl.DateTimeFormat(this.localeId, {\n\t\t\ttimeStyle: 'short',\n\t\t\tdateStyle: 'short',\n\t\t})\n\t\t\t.format(new Date('1/1/1 17:00:00'))\n\t\t\t.includes('PM');\n\t});\n\n\treadonly label = input<string>();\n\n\treadonly timeChange = output<TimeChangeEvent>();\n\n\tprotected readonly hoursDisplay = computed(() => getHoursDisplayPartFromIsoTime(this.value(), this.enableMeridiemDisplay()));\n\tprotected readonly minutesDisplay = computed(() => getMinutesDisplayPartFromIsoTime(this.value()));\n\n\tprotected readonly hours = computed(() => getHoursPartFromIsoTime(this.value()));\n\tprotected readonly minutes = computed(() => getMinutesPartFromIsoTime(this.value()));\n\tprotected readonly pickerClasses = computed(() => {\n\t\treturn {\n\t\t\ttimePicker: true,\n\t\t\t'mod-stepper': this.displayArrows(),\n\t\t\t'mod-stepperHover': this.displayArrows(),\n\t\t\t[`mod-${this.size()}`]: Boolean(this.size()),\n\t\t};\n\t});\n\tprotected separator = this.intl.timePickerTimeSeparator;\n\n\tprotected hoursDecimalConf = DEFAULT_TIME_DECIMAL_PIPE_FORMAT;\n\n\tprotected readonly maxHours = computed(() => {\n\t\tif (this.enableMeridiemDisplay()) {\n\t\t\treturn 12;\n\t\t}\n\t\treturn getHoursPartFromIsoTime(this.max() ?? '23:59:59');\n\t});\n\n\tprotected readonly ampmDisplay = computed(() => {\n\t\treturn formatAMPM(this.hours()).suffix;\n\t});\n\n\tprotected override focusPart(type: 'hours' | 'minutes' | 'meridiem') {\n\t\tif (type === 'meridiem') {\n\t\t\tconst elementToFocus = this.ampmDisplay() === 'AM' ? this.anteMeridiemRef()?.nativeElement : this.postMeridiemRef()?.nativeElement;\n\t\t\telementToFocus?.focus();\n\t\t} else {\n\t\t\tsuper.focusPart(type);\n\t\t}\n\t}\n\n\twriteValue(value: ISO8601Time): void {\n\t\tthis.value.set(value || '––:––:––');\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tprotected hoursInputHandler(value: number | '––'): void {\n\t\tthis.setTime({\n\t\t\tpreviousValue: this.value(),\n\t\t\t// Mostly for compiler because we never set the time to –– with input handler\n\t\t\tvalue: createIsoTimeFromHoursAndMinutes(+value, this.minutes()),\n\t\t\tsource: 'input',\n\t\t});\n\t}\n\n\tprotected minutesInputHandler(value: number | '––'): void {\n\t\tthis.setTime({\n\t\t\tpreviousValue: this.value(),\n\t\t\t// Mostly for compiler because we never set the time to –– with input handler\n\t\t\tvalue: createIsoTimeFromHoursAndMinutes(this.hours(), +value),\n\t\t\tsource: 'input',\n\t\t});\n\t}\n\n\tprotected copyHandler(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\t// write value to clipboard\n\t\tconst value = this.value();\n\t\tif (isNotNil(value)) {\n\t\t\tevent.clipboardData?.setData('text/plain', value);\n\t\t}\n\t}\n\n\tprotected pasteHandler(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\tconst pastedValue = event.clipboardData?.getData('text/plain');\n\t\tif (isNotNil(pastedValue)) {\n\t\t\ttry {\n\t\t\t\tconst value = convertStringToIsoTime(pastedValue);\n\t\t\t\tthis.timeChange.emit({\n\t\t\t\t\tpreviousValue: this.value(),\n\t\t\t\t\tsource: 'paste',\n\t\t\t\t\tvalue,\n\t\t\t\t});\n\t\t\t\tthis.value.set(value);\n\t\t\t\tthis.onChange?.(value);\n\t\t\t} catch {\n\t\t\t\t// do nothing\n\t\t\t}\n\t\t}\n\t}\n\n\toverride getHoursIncrement(): number {\n\t\tconst step = this.step();\n\t\tif (isNil(step)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst { hours } = isoDurationToDateFnsDuration(step);\n\n\t\tif (hours === 0) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 24 % hours === 0 ? hours : 1;\n\t}\n\n\toverride getMinutesIncrement(): number | null {\n\t\tconst step = this.step();\n\t\tif (isNil(step)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst { minutes } = isoDurationToDateFnsDuration(step);\n\n\t\tif (minutes === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn 60 % minutes === 0 ? minutes : 1;\n\t}\n\n\tprivate setTime(protoEvent: TimeChangeEvent): void {\n\t\tconst hoursPart = getHoursPartFromIsoTime(protoEvent.value);\n\t\tconst minutesPart = getMinutesPartFromIsoTime(protoEvent.value);\n\n\t\tconst max = isoTimeToSeconds(this.max());\n\n\t\tconst candidateTimeAsSeconds = hoursPart * 3600 + minutesPart * 60;\n\n\t\tconst seconds = roundToNearest(circularize(candidateTimeAsSeconds, max), 60);\n\n\t\tconst hours = Math.floor(seconds / 3600);\n\t\tconst minutes = Math.floor((seconds % 3600) / 60);\n\n\t\tconst result = createIsoTimeFromHoursAndMinutes(hours, minutes);\n\n\t\tthis.value.set(result);\n\t\tthis.onChange?.(result);\n\t\tthis.timeChange.emit({\n\t\t\t...protoEvent,\n\t\t\tvalue: result,\n\t\t});\n\t}\n\n\tprotected inputControlClickHandler(part: 'hours' | 'minutes', direction: PickerControlDirection): void {\n\t\tconst val = this.value() ?? DEFAULT_MIN_TIME;\n\t\tconst hoursPart = getHoursPartFromIsoTime(val);\n\t\tconst minutesPart = getMinutesPartFromIsoTime(val);\n\n\t\tconst selectedPart = part === 'hours' ? hoursPart : minutesPart;\n\t\tconst selectedIncrement = part === 'hours' ? this.hoursIncrement() : this.minutesIncrement();\n\t\tlet modifiedVal: number;\n\n\t\tif (selectedIncrement === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (direction === 'up') {\n\t\t\tmodifiedVal = floorToNearest(selectedPart + selectedIncrement, selectedIncrement);\n\t\t} else {\n\t\t\tmodifiedVal = ceilToNearest(selectedPart - selectedIncrement, selectedIncrement);\n\t\t}\n\n\t\tconst newTime = part === 'hours' ? createIsoTimeFromHoursAndMinutes(modifiedVal, minutesPart) : createIsoTimeFromHoursAndMinutes(hoursPart, modifiedVal);\n\n\t\tthis.setTime({\n\t\t\tsource: 'control',\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: newTime,\n\t\t\tpart,\n\t\t\tdirection,\n\t\t});\n\t}\n\n\tpublic focus() {\n\t\tif (isNotNil(this.hoursPart)) {\n\t\t\tthis.focusPart('hours');\n\t\t}\n\t}\n\n\tswitchMeridiem(newValue: 'AM' | 'PM') {\n\t\tlet hours = getHoursPartFromIsoTime(this.value());\n\t\tconst minutes = getMinutesPartFromIsoTime(this.value());\n\t\tif (newValue === 'PM') {\n\t\t\thours = circularize(hours + 12, 23);\n\t\t} else {\n\t\t\thours = circularize(hours - 12, 23);\n\t\t}\n\t\tthis.setTime({\n\t\t\tsource: 'input',\n\t\t\tpreviousValue: this.value(),\n\t\t\tvalue: createIsoTimeFromHoursAndMinutes(hours, minutes),\n\t\t});\n\t}\n}\n","<div [class]=\"pickerClasses()\" (copy)=\"copyHandler($event)\" (paste)=\"pasteHandler($event)\">\n\t<fieldset class=\"timePicker-fieldset\" [disabled]=\"disabled()\">\n\t\t<legend>\n\t\t\t<span class=\"pr-u-mask\">{{ label() }}</span>\n\t\t</legend>\n\t\t<lu-time-picker-part\n\t\t\t#hoursPart\n\t\t\tclass=\"timePicker-fieldset-group\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[label]=\"intl.timePickerHours\"\n\t\t\t[value]=\"hours()\"\n\t\t\t[display]=\"hoursDisplay()\"\n\t\t\t[max]=\"maxHours()\"\n\t\t\t[decimalConf]=\"hoursDecimalConf\"\n\t\t\t[displayArrows]=\"displayArrows()\"\n\t\t\t(touched)=\"onTouched?.()\"\n\t\t\t(valueChange)=\"hoursInputHandler($event)\"\n\t\t\t(nextRequest)=\"focusPart('minutes')\"\n\t\t\t(inputControlClick)=\"inputControlClickHandler('hours', $event)\"\n\t\t/>\n\t\t<div aria-hidden=\"true\" class=\"timePicker-fieldset-groupSeparator\">{{ separator }}</div>\n\t\t<lu-time-picker-part\n\t\t\t#minutesPart\n\t\t\tclass=\"timePicker-fieldset-group\"\n\t\t\t[label]=\"intl.timePickerMinutes\"\n\t\t\t[value]=\"minutesDisplay()\"\n\t\t\t[max]=\"59\"\n\t\t\t[displayArrows]=\"displayArrows()\"\n\t\t\t(touched)=\"onTouched?.()\"\n\t\t\t[disabled]=\"disabled() || !minutesIncrement()\"\n\t\t\t(valueChange)=\"minutesInputHandler($event)\"\n\t\t\t(prevRequest)=\"focusPart('hours')\"\n\t\t\t(nextRequest)=\"focusPart('meridiem')\"\n\t\t\t(inputControlClick)=\"inputControlClickHandler('minutes', $event)\"\n\t\t/>\n\t\t@if (enableMeridiemDisplay()) {\n\t\t\t<div\n\t\t\t\tclass=\"timePicker-fieldset-meridiem\"\n\t\t\t\t(copy)=\"copyHandler($event)\"\n\t\t\t\t(paste)=\"pasteHandler($event)\"\n\t\t\t\t(keydown.A)=\"anteMeridiemRef.click()\"\n\t\t\t\t(keydown.P)=\"postMeridiemRef.click()\"\n\t\t\t\t(keydown.shift.A)=\"anteMeridiemRef.click()\"\n\t\t\t\t(keydown.shift.P)=\"postMeridiemRef.click()\"\n\t\t\t\t(click)=\"ampmDisplay() === 'AM' ? anteMeridiemRef.focus() : postMeridiemRef.focus()\"\n\t\t\t>\n\t\t\t\t<div class=\"timePicker-fieldset-meridiem-ante\">\n\t\t\t\t\t<label [attr.for]=\"'anteMeridiem-' + idSuffix\">AM</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#anteMeridiemRef\n\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t[attr.name]=\"'meridiem-' + idSuffix\"\n\t\t\t\t\t\t[name]=\"'meridiem-' + idSuffix\"\n\t\t\t\t\t\t[attr.id]=\"'anteMeridiem-' + idSuffix\"\n\t\t\t\t\t\tclass=\"timePicker-fieldset-meridiem-ante-input\"\n\t\t\t\t\t\tvalue=\"AM\"\n\t\t\t\t\t\t[ngModel]=\"ampmDisplay()\"\n\t\t\t\t\t\t(ngModelChange)=\"switchMeridiem($event)\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keydown.arrowleft)=\"$event.preventDefault(); focusPart('minutes')\"\n\t\t\t\t\t\t(keydown.arrowright)=\"$event.preventDefault()\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"timePicker-fieldset-meridiem-post\">\n\t\t\t\t\t<label [attr.for]=\"'postMeridiem-' + idSuffix\">PM</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#postMeridiemRef\n\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t[attr.name]=\"'meridiem-' + idSuffix\"\n\t\t\t\t\t\t[name]=\"'meridiem-' + idSuffix\"\n\t\t\t\t\t\t[attr.id]=\"'postMeridiem-' + idSuffix\"\n\t\t\t\t\t\tclass=\"timePicker-fieldset-meridiem-post-input\"\n\t\t\t\t\t\tvalue=\"PM\"\n\t\t\t\t\t\t[ngModel]=\"ampmDisplay()\"\n\t\t\t\t\t\t(ngModelChange)=\"switchMeridiem($event)\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keydown.arrowleft)=\"$event.preventDefault(); focusPart('minutes')\"\n\t\t\t\t\t\t(keydown.arrowright)=\"$event.preventDefault()\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t@if (displayArrows()) {\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"timePicker-fieldset-group-stepper\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t(click)=\"switchMeridiem(ampmDisplay() === 'AM' ? 'PM' : 'AM')\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-northArrow\"></span>\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"timePicker-fieldset-group-stepper\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t(click)=\"switchMeridiem(ampmDisplay() === 'AM' ? 'PM' : 'AM')\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-southArrow\"></span>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</fieldset>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId","DEFAULT_TIME_DECIMAL_PIPE_FORMAT","Translations"],"mappings":"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"}
@@ -37,10 +37,10 @@ class LuTitleService {
37
37
  overrideFirstTitlePart(title) {
38
38
  this.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);
39
39
  }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleService, deps: [{ token: i1.Router }, { token: i2.Title }, { token: LU_TITLE_TRANSLATE_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable }); }
41
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleService }); }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleService, deps: [{ token: i1.Router }, { token: i2.Title }, { token: LU_TITLE_TRANSLATE_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable }); }
41
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleService }); }
42
42
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleService, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleService, decorators: [{
44
44
  type: Injectable
45
45
  }], ctorParameters: () => [{ type: i1.Router }, { type: i2.Title }, { type: undefined, decorators: [{
46
46
  type: Inject,
@@ -61,11 +61,11 @@ function uniqTitle$1(titleParts) {
61
61
  * @deprecated use title streatgy instead
62
62
  */
63
63
  class LuTitleModule {
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
65
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.12", ngImport: i0, type: LuTitleModule, imports: [RouterModule] }); }
66
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleModule, providers: [LuTitleService], imports: [RouterModule] }); }
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
65
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: LuTitleModule, imports: [RouterModule] }); }
66
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleModule, providers: [LuTitleService], imports: [RouterModule] }); }
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleModule, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleModule, decorators: [{
69
69
  type: NgModule,
70
70
  args: [{
71
71
  imports: [RouterModule],
@@ -125,10 +125,10 @@ class LuTitleStrategy extends TitleStrategy {
125
125
  }
126
126
  return `${appTitle}${TitleSeparator}${Lucca}`;
127
127
  }
128
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
129
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleStrategy, providedIn: 'root' }); }
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
129
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleStrategy, providedIn: 'root' }); }
130
130
  }
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: LuTitleStrategy, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTitleStrategy, decorators: [{
132
132
  type: Injectable,
133
133
  args: [{ providedIn: 'root' }]
134
134
  }], ctorParameters: () => [] });
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-title.mjs","sources":["../../../packages/ng/title/title-translate.service.ts","../../../packages/ng/title/title.model.ts","../../../packages/ng/title/title.service.ts","../../../packages/ng/title/title.module.ts","../../../packages/ng/title/title.strategy.ts","../../../packages/ng/title/lucca-front-ng-title.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken<ILuTitleTranslateService>('LU_TITLE_TRANSLATE_SERVICE');\n\nexport interface ILuTitleTranslateService {\n\ttranslate(key: string, args?: Record<string, unknown>): string | Observable<string>;\n}\n","export type PageTitle = { title: string; params?: { [param: string]: string } };\nexport const TitleSeparator = ' – ';\n","import { Inject, Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\nimport { BehaviorSubject, combineLatest, ObservableInput, of } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap, tap } from 'rxjs/operators';\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\nimport { PageTitle, TitleSeparator } from './title.model';\n\n/**\n * @deprecated use Title strategy instead\n */\n@Injectable()\nexport class LuTitleService {\n\tprivate titlePartsSubject = new BehaviorSubject<Array<string | ObservableInput<string>>>(['Lucca']);\n\ttitleParts$ = this.titlePartsSubject.asObservable();\n\ttitle$ = this.titleParts$.pipe(\n\t\tswitchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))),\n\t\tmap((parts) => parts.join(TitleSeparator)),\n\t);\n\n\tconstructor(\n\t\tprivate router: Router,\n\t\tprivate title: Title,\n\t\t@Inject(LU_TITLE_TRANSLATE_SERVICE) private translateService: ILuTitleTranslateService,\n\t) {}\n\n\tinit(applicationNameTranslationKey: string) {\n\t\tthis.router.events\n\t\t\t.pipe(\n\t\t\t\tfilter((event) => {\n\t\t\t\t\treturn event instanceof ActivationEnd && event.snapshot.children.length === 0;\n\t\t\t\t}),\n\t\t\t\tmap((event: ActivationEnd) => getPageTitleParts(event.snapshot)),\n\t\t\t\tmap((titleParts) => uniqTitle(titleParts)),\n\t\t\t\tmap((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))),\n\t\t\t\tmap((titleParts: Array<string>) => [...titleParts, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap((titleParts) => this.titlePartsSubject.next(titleParts)),\n\t\t\t)\n\t\t\t.subscribe();\n\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\n\t}\n\n\tprependTitle(title: string | ObservableInput<string>) {\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value]);\n\t}\n\n\toverrideFirstTitlePart(title: string | ObservableInput<string>) {\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);\n\t}\n}\n\nfunction getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\n\tconst pageTitle: PageTitle = {\n\t\ttitle: (snapshot.data?.['title'] || '') as string,\n\t\tparams: { ...snapshot.params, ...snapshot.data },\n\t};\n\treturn snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];\n}\n\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { LuTitleService } from './title.service';\n\n/**\n * @deprecated use title streatgy instead\n */\n@NgModule({\n\timports: [RouterModule],\n\tproviders: [LuTitleService],\n})\nexport class LuTitleModule {}\n","import { inject, Injectable, InjectionToken, Provider } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, TitleStrategy } from '@angular/router';\nimport { BehaviorSubject, combineLatest, isObservable, Observable, ObservableInput, of } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators';\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\nimport { PageTitle, TitleSeparator } from './title.model';\n\nexport const ɵAPP_TITLE = new InjectionToken<string | Observable<string>>('APP_TITLE');\nexport type LuTitleNamingStrategy = 'product' | 'other';\nexport const ɵNAMING_STRATEGY = new InjectionToken<LuTitleNamingStrategy>('NAMING_STRATEGY', { factory: () => 'product' });\n\n/**\n * @deprecated Use `provideLuTitleStrategy` instead.\n */\nexport const APP_TITLE = ɵAPP_TITLE;\n\nconst Lucca = 'Lucca';\n\n@Injectable({ providedIn: 'root' })\nexport class LuTitleStrategy extends TitleStrategy {\n\tprivate title = inject(Title);\n\tprivate translateService = inject<ILuTitleTranslateService>(LU_TITLE_TRANSLATE_SERVICE, { optional: true });\n\tprivate appTitle = inject(ɵAPP_TITLE);\n\tprivate namingStrategy = inject(ɵNAMING_STRATEGY);\n\n\tprivate luccaTitle$ = isObservable(this.appTitle) ? this.appTitle.pipe(map((title) => this.#luccaTitle(title))) : of(this.#luccaTitle(this.appTitle));\n\n\tprivate titlePartsSubject = new BehaviorSubject<Array<string | ObservableInput<string>>>([Lucca]);\n\ttitleParts$ = this.titlePartsSubject.asObservable();\n\ttitle$ = this.titleParts$.pipe(\n\t\tswitchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))),\n\t\tmap((parts) => parts.join(TitleSeparator)),\n\t\tdistinctUntilChanged(),\n\t);\n\tconstructor() {\n\t\tsuper();\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\n\t}\n\n\toverride updateTitle(routerState: RouterStateSnapshot) {\n\t\t// Title page is display from child to root\n\t\tconst pageTitles = this.#getPageTitleParts(routerState.root).reverse();\n\t\tconst translatedPageTitles = uniqTitle(pageTitles)\n\t\t\t.filter(({ title }) => title !== '')\n\t\t\t.map(({ title, params }) => (this.translateService ? this.translateService.translate(title, params) : title));\n\t\t// Add the name app\n\t\tconst titleParts = [...translatedPageTitles, this.luccaTitle$].filter((x) => !!x);\n\t\tthis.titlePartsSubject.next(titleParts);\n\t}\n\n\tprependTitle(title: string | ObservableInput<string>) {\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value]);\n\t}\n\n\toverrideFirstTitlePart(title: string | ObservableInput<string>) {\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);\n\t}\n\n\t#getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\n\t\tconst pageTitle: PageTitle = {\n\t\t\ttitle: this.getResolvedTitleForRoute(snapshot) as string,\n\t\t\tparams: { ...snapshot.params, ...snapshot.data },\n\t\t};\n\t\treturn snapshot.firstChild ? [pageTitle, ...this.#getPageTitleParts(snapshot.firstChild)] : [pageTitle];\n\t}\n\n\t#luccaTitle(appTitle: string) {\n\t\tif (appTitle.includes(Lucca)) {\n\t\t\treturn appTitle;\n\t\t}\n\t\tif (this.namingStrategy === 'product') {\n\t\t\treturn `${Lucca} ${appTitle}`;\n\t\t}\n\t\treturn `${appTitle}${TitleSeparator}${Lucca}`;\n\t}\n}\n\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\n}\n\nexport interface LuTitleStrategyOptions {\n\tappTitle?: () => string | Observable<string>;\n\ttranslateService?: () => ILuTitleTranslateService;\n\tnamingStrategy?: LuTitleNamingStrategy;\n}\n\nexport function provideLuTitleStrategy(options: LuTitleStrategyOptions): Provider[] {\n\tconst providers: Provider[] = [{ provide: TitleStrategy, useClass: LuTitleStrategy }];\n\n\tif (options.appTitle) {\n\t\tproviders.push({ provide: ɵAPP_TITLE, useFactory: options.appTitle });\n\t}\n\tif (options.translateService) {\n\t\tproviders.push({ provide: LU_TITLE_TRANSLATE_SERVICE, useFactory: options.translateService });\n\t}\n\tif (options.namingStrategy) {\n\t\tproviders.push({ provide: ɵNAMING_STRATEGY, useValue: options.namingStrategy });\n\t}\n\n\treturn providers;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqTitle"],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-title.mjs","sources":["../../../packages/ng/title/title-translate.service.ts","../../../packages/ng/title/title.model.ts","../../../packages/ng/title/title.service.ts","../../../packages/ng/title/title.module.ts","../../../packages/ng/title/title.strategy.ts","../../../packages/ng/title/lucca-front-ng-title.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken<ILuTitleTranslateService>('LU_TITLE_TRANSLATE_SERVICE');\n\nexport interface ILuTitleTranslateService {\n\ttranslate(key: string, args?: Record<string, unknown>): string | Observable<string>;\n}\n","export type PageTitle = { title: string; params?: { [param: string]: string } };\nexport const TitleSeparator = ' – ';\n","import { Inject, Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\nimport { BehaviorSubject, combineLatest, ObservableInput, of } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap, tap } from 'rxjs/operators';\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\nimport { PageTitle, TitleSeparator } from './title.model';\n\n/**\n * @deprecated use Title strategy instead\n */\n@Injectable()\nexport class LuTitleService {\n\tprivate titlePartsSubject = new BehaviorSubject<Array<string | ObservableInput<string>>>(['Lucca']);\n\ttitleParts$ = this.titlePartsSubject.asObservable();\n\ttitle$ = this.titleParts$.pipe(\n\t\tswitchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))),\n\t\tmap((parts) => parts.join(TitleSeparator)),\n\t);\n\n\tconstructor(\n\t\tprivate router: Router,\n\t\tprivate title: Title,\n\t\t@Inject(LU_TITLE_TRANSLATE_SERVICE) private translateService: ILuTitleTranslateService,\n\t) {}\n\n\tinit(applicationNameTranslationKey: string) {\n\t\tthis.router.events\n\t\t\t.pipe(\n\t\t\t\tfilter((event) => {\n\t\t\t\t\treturn event instanceof ActivationEnd && event.snapshot.children.length === 0;\n\t\t\t\t}),\n\t\t\t\tmap((event: ActivationEnd) => getPageTitleParts(event.snapshot)),\n\t\t\t\tmap((titleParts) => uniqTitle(titleParts)),\n\t\t\t\tmap((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))),\n\t\t\t\tmap((titleParts: Array<string>) => [...titleParts, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap((titleParts) => this.titlePartsSubject.next(titleParts)),\n\t\t\t)\n\t\t\t.subscribe();\n\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\n\t}\n\n\tprependTitle(title: string | ObservableInput<string>) {\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value]);\n\t}\n\n\toverrideFirstTitlePart(title: string | ObservableInput<string>) {\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);\n\t}\n}\n\nfunction getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\n\tconst pageTitle: PageTitle = {\n\t\ttitle: (snapshot.data?.['title'] || '') as string,\n\t\tparams: { ...snapshot.params, ...snapshot.data },\n\t};\n\treturn snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];\n}\n\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { LuTitleService } from './title.service';\n\n/**\n * @deprecated use title streatgy instead\n */\n@NgModule({\n\timports: [RouterModule],\n\tproviders: [LuTitleService],\n})\nexport class LuTitleModule {}\n","import { inject, Injectable, InjectionToken, Provider } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, TitleStrategy } from '@angular/router';\nimport { BehaviorSubject, combineLatest, isObservable, Observable, ObservableInput, of } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators';\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\nimport { PageTitle, TitleSeparator } from './title.model';\n\nexport const ɵAPP_TITLE = new InjectionToken<string | Observable<string>>('APP_TITLE');\nexport type LuTitleNamingStrategy = 'product' | 'other';\nexport const ɵNAMING_STRATEGY = new InjectionToken<LuTitleNamingStrategy>('NAMING_STRATEGY', { factory: () => 'product' });\n\n/**\n * @deprecated Use `provideLuTitleStrategy` instead.\n */\nexport const APP_TITLE = ɵAPP_TITLE;\n\nconst Lucca = 'Lucca';\n\n@Injectable({ providedIn: 'root' })\nexport class LuTitleStrategy extends TitleStrategy {\n\tprivate title = inject(Title);\n\tprivate translateService = inject<ILuTitleTranslateService>(LU_TITLE_TRANSLATE_SERVICE, { optional: true });\n\tprivate appTitle = inject(ɵAPP_TITLE);\n\tprivate namingStrategy = inject(ɵNAMING_STRATEGY);\n\n\tprivate luccaTitle$ = isObservable(this.appTitle) ? this.appTitle.pipe(map((title) => this.#luccaTitle(title))) : of(this.#luccaTitle(this.appTitle));\n\n\tprivate titlePartsSubject = new BehaviorSubject<Array<string | ObservableInput<string>>>([Lucca]);\n\ttitleParts$ = this.titlePartsSubject.asObservable();\n\ttitle$ = this.titleParts$.pipe(\n\t\tswitchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))),\n\t\tmap((parts) => parts.join(TitleSeparator)),\n\t\tdistinctUntilChanged(),\n\t);\n\tconstructor() {\n\t\tsuper();\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\n\t}\n\n\toverride updateTitle(routerState: RouterStateSnapshot) {\n\t\t// Title page is display from child to root\n\t\tconst pageTitles = this.#getPageTitleParts(routerState.root).reverse();\n\t\tconst translatedPageTitles = uniqTitle(pageTitles)\n\t\t\t.filter(({ title }) => title !== '')\n\t\t\t.map(({ title, params }) => (this.translateService ? this.translateService.translate(title, params) : title));\n\t\t// Add the name app\n\t\tconst titleParts = [...translatedPageTitles, this.luccaTitle$].filter((x) => !!x);\n\t\tthis.titlePartsSubject.next(titleParts);\n\t}\n\n\tprependTitle(title: string | ObservableInput<string>) {\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value]);\n\t}\n\n\toverrideFirstTitlePart(title: string | ObservableInput<string>) {\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);\n\t}\n\n\t#getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\n\t\tconst pageTitle: PageTitle = {\n\t\t\ttitle: this.getResolvedTitleForRoute(snapshot) as string,\n\t\t\tparams: { ...snapshot.params, ...snapshot.data },\n\t\t};\n\t\treturn snapshot.firstChild ? [pageTitle, ...this.#getPageTitleParts(snapshot.firstChild)] : [pageTitle];\n\t}\n\n\t#luccaTitle(appTitle: string) {\n\t\tif (appTitle.includes(Lucca)) {\n\t\t\treturn appTitle;\n\t\t}\n\t\tif (this.namingStrategy === 'product') {\n\t\t\treturn `${Lucca} ${appTitle}`;\n\t\t}\n\t\treturn `${appTitle}${TitleSeparator}${Lucca}`;\n\t}\n}\n\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\n}\n\nexport interface LuTitleStrategyOptions {\n\tappTitle?: () => string | Observable<string>;\n\ttranslateService?: () => ILuTitleTranslateService;\n\tnamingStrategy?: LuTitleNamingStrategy;\n}\n\nexport function provideLuTitleStrategy(options: LuTitleStrategyOptions): Provider[] {\n\tconst providers: Provider[] = [{ provide: TitleStrategy, useClass: LuTitleStrategy }];\n\n\tif (options.appTitle) {\n\t\tproviders.push({ provide: ɵAPP_TITLE, useFactory: options.appTitle });\n\t}\n\tif (options.translateService) {\n\t\tproviders.push({ provide: LU_TITLE_TRANSLATE_SERVICE, useFactory: options.translateService });\n\t}\n\tif (options.namingStrategy) {\n\t\tproviders.push({ provide: ɵNAMING_STRATEGY, useValue: options.namingStrategy });\n\t}\n\n\treturn providers;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqTitle"],"mappings":"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"}