@koobiq/components 21.0.0 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/badge/_badge-theme.scss +31 -0
  2. package/breadcrumbs/breadcrumbs.scss +5 -1
  3. package/checkbox/_checkbox-theme.scss +0 -17
  4. package/checkbox/checkbox-tokens.scss +0 -4
  5. package/code-block/_code-block-theme.scss +7 -6
  6. package/code-block/code-block-tokens.scss +8 -4
  7. package/code-block/code-block.scss +54 -32
  8. package/content-panel/content-panel-header.scss +2 -3
  9. package/content-panel/content-panel.scss +3 -0
  10. package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
  11. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  12. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
  14. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
  16. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-badge.mjs +2 -2
  18. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
  22. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-checkbox.mjs +18 -8
  24. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
  26. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-code-block.mjs +106 -394
  28. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-content-panel.mjs +4 -4
  30. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-core.mjs +300 -37
  32. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-datepicker.mjs +151 -60
  34. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-divider.mjs +3 -3
  36. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-dropdown.mjs +3 -3
  38. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-file-upload.mjs +17 -8
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-filter-bar.mjs +124 -41
  42. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-flag.mjs +3 -3
  44. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-form-field.mjs +90 -27
  46. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-icon.mjs +38 -17
  48. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
  50. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-input.mjs +76 -17
  52. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-list.mjs +1 -1
  54. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-modal.mjs +3 -3
  56. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-navbar.mjs +86 -25
  58. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-notification-center.mjs +4 -4
  60. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
  62. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-popover.mjs +86 -7
  64. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-radio.mjs +41 -19
  66. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
  68. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-select.mjs +49 -12
  70. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-splitter.mjs +49 -25
  74. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-tabs.mjs +30 -11
  76. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-tags.mjs +1 -1
  78. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-textarea.mjs +28 -11
  80. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-time-range.mjs +2 -2
  82. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-timepicker.mjs +71 -16
  84. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  86. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-toast.mjs +2 -2
  88. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-toggle.mjs +25 -9
  90. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-tooltip.mjs +90 -17
  92. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-top-bar.mjs +27 -7
  94. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-tree-select.mjs +24 -9
  96. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-tree.mjs +288 -109
  98. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  99. package/file-upload/_file-upload-theme.scss +0 -12
  100. package/file-upload/file-upload-tokens.scss +0 -1
  101. package/file-upload/file-upload.scss +0 -1
  102. package/filter-bar/_filter-bar-theme.scss +7 -8
  103. package/filter-bar/filter-bar.scss +0 -1
  104. package/filter-bar/pipes/base-pipe.scss +36 -2
  105. package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
  106. package/form-field/_fieldset-theme.scss +2 -7
  107. package/form-field/_form-field-theme.scss +9 -22
  108. package/form-field/_hint-theme.scss +20 -0
  109. package/form-field/fieldset-tokens.scss +0 -1
  110. package/form-field/fieldset.scss +0 -3
  111. package/form-field/form-field-tokens.scss +1 -1
  112. package/form-field/form-field.scss +9 -0
  113. package/form-field/hint-tokens.scss +3 -0
  114. package/modal/modal.scss +2 -0
  115. package/navbar/_navbar-item_vertical.scss +48 -2
  116. package/navbar/_navbar-theme.scss +11 -3
  117. package/navbar/navbar-item.scss +17 -0
  118. package/navbar/navbar-tokens.scss +3 -0
  119. package/package.json +4 -4
  120. package/popover/popover.scss +1 -1
  121. package/radio/_radio-theme.scss +0 -30
  122. package/radio/radio-tokens.scss +0 -2
  123. package/schematics/collection.json +94 -89
  124. package/schematics/migrations/accordion-state-saving-default/{index.js → index.cjs} +5 -4
  125. package/schematics/migrations/actions-panel-overlay-container/{index.js → index.cjs} +5 -4
  126. package/schematics/migrations/alert-signals/{index.js → index.cjs} +14 -13
  127. package/schematics/migrations/angular-animations-removal/index.cjs +21 -0
  128. package/schematics/migrations/app-switcher-signals/{index.js → index.cjs} +7 -6
  129. package/schematics/migrations/autocomplete-panel-width-auto/{index.js → index.cjs} +6 -5
  130. package/schematics/migrations/autocomplete-signals/{index.js → index.cjs} +7 -6
  131. package/schematics/migrations/badge-signals/{index.js → index.cjs} +7 -6
  132. package/schematics/migrations/button-state-and-styles/{index.js → index.cjs} +7 -6
  133. package/schematics/migrations/button-supported-colors/{index.js → index.cjs} +7 -6
  134. package/schematics/migrations/button-toggle-signals-and-aria/{index.js → index.cjs} +7 -6
  135. package/schematics/migrations/button-truncation/{index.js → index.cjs} +7 -6
  136. package/schematics/migrations/checkbox-signals/{index.js → index.cjs} +9 -8
  137. package/schematics/migrations/clamped-text-disclosure/{index.js → index.cjs} +5 -4
  138. package/schematics/migrations/code-block-highlight-js-core/README.md +53 -0
  139. package/schematics/migrations/code-block-highlight-js-core/data.cjs +64 -0
  140. package/schematics/migrations/code-block-highlight-js-core/index.cjs +319 -0
  141. package/schematics/migrations/code-block-highlight-js-core/schema.json +20 -0
  142. package/schematics/migrations/code-block-signals/{index.js → index.cjs} +7 -6
  143. package/schematics/migrations/color-signals/index.cjs +20 -0
  144. package/schematics/migrations/core-mixins-removal/index.cjs +18 -0
  145. package/schematics/migrations/css-selectors/{index.js → index.cjs} +4 -3
  146. package/schematics/migrations/datepicker-signals/index.cjs +18 -0
  147. package/schematics/migrations/deprecated-icons/README.md +21 -5
  148. package/schematics/migrations/deprecated-icons/{index.js → index.cjs} +15 -28
  149. package/schematics/migrations/deprecated-icons/schema.json +1 -1
  150. package/schematics/migrations/design-tokens-v4/{index.js → index.cjs} +3 -2
  151. package/schematics/migrations/divider-signals-and-aria/{index.js → index.cjs} +5 -4
  152. package/schematics/migrations/dl-attribute-coercion/{index.js → index.cjs} +7 -6
  153. package/schematics/migrations/dl-standalone-names/{index.js → index.cjs} +11 -10
  154. package/schematics/migrations/dropdown-demote-overlay/{index.js → index.cjs} +7 -6
  155. package/schematics/migrations/dropdown-signals/index.cjs +20 -0
  156. package/schematics/migrations/empty-state-error-color/{index.js → index.cjs} +5 -4
  157. package/schematics/migrations/empty-state-size-attr/{index.js → index.cjs} +6 -5
  158. package/schematics/migrations/file-upload-cva-and-primitives/{index.js → index.cjs} +5 -4
  159. package/schematics/migrations/file-upload-deprecated-outputs/{index.js → index.cjs} +5 -4
  160. package/schematics/migrations/filter-bar-rename-action/{index.js → index.cjs} +5 -4
  161. package/schematics/migrations/filter-bar-signals/{index.js → index.cjs} +16 -15
  162. package/schematics/migrations/filter-bar-state-saving-default/{index.js → index.cjs} +5 -4
  163. package/schematics/migrations/flag-inner-html/{index.js → index.cjs} +5 -4
  164. package/schematics/migrations/form-field-signals/{index.js → index.cjs} +18 -17
  165. package/schematics/migrations/icon-semantics-and-api/{data.js → data.cjs} +4 -4
  166. package/schematics/migrations/icon-semantics-and-api/{index.js → index.cjs} +6 -5
  167. package/schematics/migrations/icons-replacement/README.md +16 -2
  168. package/schematics/migrations/icons-replacement/{index.js → index.cjs} +21 -18
  169. package/schematics/migrations/icons-replacement/schema.json +12 -3
  170. package/schematics/migrations/inline-edit-a11y-and-types/{index.js → index.cjs} +5 -4
  171. package/schematics/migrations/input-number-surface/{index.js → index.cjs} +5 -4
  172. package/schematics/migrations/input-signals/index.cjs +18 -0
  173. package/schematics/migrations/link-deprecated-path/{index.js → index.cjs} +4 -3
  174. package/schematics/migrations/link-signals/{index.js → index.cjs} +5 -4
  175. package/schematics/migrations/list-signals/index.cjs +18 -0
  176. package/schematics/migrations/list-tree-multiple-input/{index.js → index.cjs} +7 -6
  177. package/schematics/migrations/loader-overlay-signals/{index.js → index.cjs} +7 -6
  178. package/schematics/migrations/loader-overlay-size-attr/{index.js → index.cjs} +6 -5
  179. package/schematics/migrations/locale-configuration-providers/{index.js → index.cjs} +5 -4
  180. package/schematics/migrations/mandatory-peer-dependencies/{index.js → index.cjs} +3 -2
  181. package/schematics/migrations/markdown-signals/{index.js → index.cjs} +7 -6
  182. package/schematics/migrations/modal-dialog-semantics/{index.js → index.cjs} +5 -4
  183. package/schematics/migrations/modal-signals/index.cjs +20 -0
  184. package/schematics/migrations/navbar-signals-and-aria/{index.js → index.cjs} +7 -6
  185. package/schematics/migrations/new-icons-pack/README.md +37 -25
  186. package/schematics/migrations/new-icons-pack/{index.js → index.cjs} +29 -38
  187. package/schematics/migrations/new-icons-pack/replacement.json +2 -14
  188. package/schematics/migrations/new-icons-pack/schema.json +3 -3
  189. package/schematics/migrations/notification-center-signals/{index.js → index.cjs} +5 -4
  190. package/schematics/migrations/option-signals/index.cjs +20 -0
  191. package/schematics/migrations/popover-leave-delay/{index.js → index.cjs} +5 -4
  192. package/schematics/migrations/progress-bar-percentage-and-aria/{index.js → index.cjs} +5 -4
  193. package/schematics/migrations/progress-spinner-signals/{index.js → index.cjs} +7 -6
  194. package/schematics/migrations/query-list-signals/index.cjs +18 -0
  195. package/schematics/migrations/radio-signals-and-aria/{index.js → index.cjs} +9 -8
  196. package/schematics/migrations/read-state-dwell-handlers/{index.js → index.cjs} +5 -4
  197. package/schematics/migrations/scrollbar-deprecated-path/{index.js → index.cjs} +4 -3
  198. package/schematics/migrations/select-signal-inputs/{index.js → index.cjs} +5 -4
  199. package/schematics/migrations/sidepanel-non-modal-behavior/{index.js → index.cjs} +5 -4
  200. package/schematics/migrations/signal-inputs-subclasses/index.cjs +18 -0
  201. package/schematics/migrations/split-button-optional-disabled/{index.js → index.cjs} +5 -4
  202. package/schematics/migrations/splitter-deprecated-path/{index.js → index.cjs} +4 -3
  203. package/schematics/migrations/state-saving-default/{index.js → index.cjs} +5 -4
  204. package/schematics/migrations/table-cell-content/{index.js → index.cjs} +5 -4
  205. package/schematics/migrations/tabs-signals-and-aria/{index.js → index.cjs} +5 -4
  206. package/schematics/migrations/tag-list-cleaner/{index.js → index.cjs} +7 -6
  207. package/schematics/migrations/tag-slots/{index.js → index.cjs} +6 -5
  208. package/schematics/migrations/tags-signals/{index.js → index.cjs} +7 -6
  209. package/schematics/migrations/textarea-signals/{index.js → index.cjs} +7 -6
  210. package/schematics/migrations/time-range-title-for/{index.js → index.cjs} +5 -4
  211. package/schematics/migrations/timepicker-signals/{index.js → index.cjs} +7 -6
  212. package/schematics/migrations/timezone-grouping-utils/{index.js → index.cjs} +5 -4
  213. package/schematics/migrations/title-encapsulation/{index.js → index.cjs} +5 -4
  214. package/schematics/migrations/toast-stack-and-defaults/{index.js → index.cjs} +5 -4
  215. package/schematics/migrations/tooltip-pointer-events-and-types/{index.js → index.cjs} +5 -4
  216. package/schematics/migrations/top-bar-container-selectors/{index.js → index.cjs} +5 -4
  217. package/schematics/migrations/tree-select-signals/{index.js → index.cjs} +5 -4
  218. package/schematics/migrations/tree-signals/{index.js → index.cjs} +5 -4
  219. package/schematics/migrations/tree-state-saving-default/{index.js → index.cjs} +5 -4
  220. package/schematics/migrations/username-pipe-injection/{index.js → index.cjs} +5 -4
  221. package/schematics/migrations/v20-upgrade/{data.js → data.cjs} +7 -7
  222. package/schematics/migrations/v20-upgrade/index.cjs +19 -0
  223. package/schematics/migrations/v21-upgrade/{data.js → data.cjs} +22 -22
  224. package/schematics/migrations/v21-upgrade/{index.js → index.cjs} +11 -10
  225. package/schematics/migrations/zoneless-change-detection/index.cjs +21 -0
  226. package/schematics/migrations.json +87 -82
  227. package/schematics/ng-add/{index.js → index.cjs} +15 -289
  228. package/schematics/utils/{angular-parsing.js → angular-parsing.cjs} +2 -2
  229. package/schematics/utils/custom-data.cjs +64 -0
  230. package/schematics/utils/{deprecated-path-migration.js → deprecated-path-migration.cjs} +4 -3
  231. package/schematics/utils/html-config.cjs +148 -0
  232. package/schematics/utils/{icon-migration.js → icon-migration.cjs} +11 -5
  233. package/schematics/utils/list-item-pattern.cjs +16 -0
  234. package/schematics/utils/{messages.js → messages.cjs} +4 -0
  235. package/schematics/utils/package-config.cjs +99 -0
  236. package/schematics/utils/project-files.cjs +25 -0
  237. package/schematics/utils/replacement-driver.cjs +337 -0
  238. package/schematics/utils/safe-rule.cjs +23 -0
  239. package/schematics/utils/signal-members-migration.cjs +779 -0
  240. package/schematics/utils/tag-patterns.cjs +21 -0
  241. package/schematics/utils/template-ref-access.cjs +155 -0
  242. package/schematics/utils/{typescript.js → typescript.cjs} +1 -1
  243. package/schematics/utils/warn-only-migration.cjs +52 -0
  244. package/schematics/utils/workspace-styles.cjs +123 -0
  245. package/select/select.scss +7 -0
  246. package/tabs/_tabs-common.scss +23 -0
  247. package/textarea/textarea-tokens.scss +4 -1
  248. package/toast/toast.component.scss +1 -0
  249. package/toggle/_toggle-theme.scss +0 -17
  250. package/tooltip/tooltip.scss +1 -1
  251. package/top-bar/top-bar-tokens.scss +1 -0
  252. package/top-bar/top-bar.scss +10 -0
  253. package/types/koobiq-components-accordion.d.ts +25 -0
  254. package/types/koobiq-components-button-toggle.d.ts +6 -0
  255. package/types/koobiq-components-checkbox.d.ts +30 -0
  256. package/types/koobiq-components-clamped-text.d.ts +16 -3
  257. package/types/koobiq-components-code-block.d.ts +55 -14
  258. package/types/koobiq-components-core.d.ts +226 -13
  259. package/types/koobiq-components-datepicker.d.ts +28 -1
  260. package/types/koobiq-components-divider.d.ts +28 -10
  261. package/types/koobiq-components-dropdown.d.ts +19 -0
  262. package/types/koobiq-components-filter-bar.d.ts +79 -6
  263. package/types/koobiq-components-flag.d.ts +18 -0
  264. package/types/koobiq-components-form-field.d.ts +87 -6
  265. package/types/koobiq-components-icon.d.ts +15 -0
  266. package/types/koobiq-components-inline-edit.d.ts +8 -1
  267. package/types/koobiq-components-input.d.ts +22 -3
  268. package/types/koobiq-components-list.d.ts +6 -0
  269. package/types/koobiq-components-modal.d.ts +7 -0
  270. package/types/koobiq-components-navbar.d.ts +71 -7
  271. package/types/koobiq-components-notification-center.d.ts +13 -0
  272. package/types/koobiq-components-overflow-items.d.ts +26 -2
  273. package/types/koobiq-components-popover.d.ts +38 -3
  274. package/types/koobiq-components-radio.d.ts +30 -0
  275. package/types/koobiq-components-search-expandable.d.ts +10 -0
  276. package/types/koobiq-components-select.d.ts +36 -4
  277. package/types/koobiq-components-sidepanel.d.ts +52 -1
  278. package/types/koobiq-components-splitter.d.ts +13 -4
  279. package/types/koobiq-components-tabs.d.ts +4 -0
  280. package/types/koobiq-components-tags.d.ts +6 -0
  281. package/types/koobiq-components-textarea.d.ts +9 -2
  282. package/types/koobiq-components-timepicker.d.ts +15 -0
  283. package/types/koobiq-components-toggle.d.ts +30 -0
  284. package/types/koobiq-components-tooltip.d.ts +55 -10
  285. package/types/koobiq-components-top-bar.d.ts +11 -3
  286. package/types/koobiq-components-tree-select.d.ts +23 -8
  287. package/types/koobiq-components-tree.d.ts +144 -60
  288. package/schematics/migrations/angular-animations-removal/index.js +0 -20
  289. package/schematics/migrations/color-signals/index.js +0 -19
  290. package/schematics/migrations/core-mixins-removal/index.js +0 -17
  291. package/schematics/migrations/datepicker-signals/index.js +0 -17
  292. package/schematics/migrations/dropdown-signals/index.js +0 -19
  293. package/schematics/migrations/input-signals/index.js +0 -17
  294. package/schematics/migrations/list-signals/index.js +0 -17
  295. package/schematics/migrations/modal-signals/index.js +0 -19
  296. package/schematics/migrations/option-signals/index.js +0 -19
  297. package/schematics/migrations/query-list-signals/index.js +0 -17
  298. package/schematics/migrations/signal-inputs-subclasses/index.js +0 -17
  299. package/schematics/migrations/v20-upgrade/index.js +0 -18
  300. package/schematics/migrations/zoneless-change-detection/index.js +0 -20
  301. package/schematics/utils/package-config.js +0 -13
  302. /package/schematics/migrations/accordion-state-saving-default/{data.js → data.cjs} +0 -0
  303. /package/schematics/migrations/actions-panel-overlay-container/{data.js → data.cjs} +0 -0
  304. /package/schematics/migrations/alert-signals/{data.js → data.cjs} +0 -0
  305. /package/schematics/migrations/angular-animations-removal/{data.js → data.cjs} +0 -0
  306. /package/schematics/migrations/app-switcher-signals/{data.js → data.cjs} +0 -0
  307. /package/schematics/migrations/autocomplete-signals/{data.js → data.cjs} +0 -0
  308. /package/schematics/migrations/badge-signals/{data.js → data.cjs} +0 -0
  309. /package/schematics/migrations/button-state-and-styles/{data.js → data.cjs} +0 -0
  310. /package/schematics/migrations/button-supported-colors/{data.js → data.cjs} +0 -0
  311. /package/schematics/migrations/button-toggle-signals-and-aria/{data.js → data.cjs} +0 -0
  312. /package/schematics/migrations/button-truncation/{data.js → data.cjs} +0 -0
  313. /package/schematics/migrations/checkbox-signals/{data.js → data.cjs} +0 -0
  314. /package/schematics/migrations/clamped-text-disclosure/{data.js → data.cjs} +0 -0
  315. /package/schematics/migrations/code-block-signals/{data.js → data.cjs} +0 -0
  316. /package/schematics/migrations/color-signals/{data.js → data.cjs} +0 -0
  317. /package/schematics/migrations/core-mixins-removal/{data.js → data.cjs} +0 -0
  318. /package/schematics/migrations/css-selectors/{data.js → data.cjs} +0 -0
  319. /package/schematics/migrations/datepicker-signals/{data.js → data.cjs} +0 -0
  320. /package/schematics/migrations/deprecated-icons/{data.js → data.cjs} +0 -0
  321. /package/schematics/migrations/divider-signals-and-aria/{data.js → data.cjs} +0 -0
  322. /package/schematics/migrations/dl-attribute-coercion/{data.js → data.cjs} +0 -0
  323. /package/schematics/migrations/dl-standalone-names/{data.js → data.cjs} +0 -0
  324. /package/schematics/migrations/dropdown-demote-overlay/{data.js → data.cjs} +0 -0
  325. /package/schematics/migrations/dropdown-signals/{data.js → data.cjs} +0 -0
  326. /package/schematics/migrations/empty-state-error-color/{data.js → data.cjs} +0 -0
  327. /package/schematics/migrations/file-upload-cva-and-primitives/{data.js → data.cjs} +0 -0
  328. /package/schematics/migrations/file-upload-deprecated-outputs/{data.js → data.cjs} +0 -0
  329. /package/schematics/migrations/filter-bar-rename-action/{data.js → data.cjs} +0 -0
  330. /package/schematics/migrations/filter-bar-signals/{data.js → data.cjs} +0 -0
  331. /package/schematics/migrations/filter-bar-state-saving-default/{data.js → data.cjs} +0 -0
  332. /package/schematics/migrations/flag-inner-html/{data.js → data.cjs} +0 -0
  333. /package/schematics/migrations/form-field-signals/{data.js → data.cjs} +0 -0
  334. /package/schematics/migrations/icons-replacement/{data.js → data.cjs} +0 -0
  335. /package/schematics/migrations/inline-edit-a11y-and-types/{data.js → data.cjs} +0 -0
  336. /package/schematics/migrations/input-number-surface/{data.js → data.cjs} +0 -0
  337. /package/schematics/migrations/input-signals/{data.js → data.cjs} +0 -0
  338. /package/schematics/migrations/link-signals/{data.js → data.cjs} +0 -0
  339. /package/schematics/migrations/list-signals/{data.js → data.cjs} +0 -0
  340. /package/schematics/migrations/list-tree-multiple-input/{data.js → data.cjs} +0 -0
  341. /package/schematics/migrations/loader-overlay-signals/{data.js → data.cjs} +0 -0
  342. /package/schematics/migrations/locale-configuration-providers/{data.js → data.cjs} +0 -0
  343. /package/schematics/migrations/markdown-signals/{data.js → data.cjs} +0 -0
  344. /package/schematics/migrations/modal-dialog-semantics/{data.js → data.cjs} +0 -0
  345. /package/schematics/migrations/modal-signals/{data.js → data.cjs} +0 -0
  346. /package/schematics/migrations/navbar-signals-and-aria/{data.js → data.cjs} +0 -0
  347. /package/schematics/migrations/new-icons-pack/{data.js → data.cjs} +0 -0
  348. /package/schematics/migrations/notification-center-signals/{data.js → data.cjs} +0 -0
  349. /package/schematics/migrations/option-signals/{data.js → data.cjs} +0 -0
  350. /package/schematics/migrations/popover-leave-delay/{data.js → data.cjs} +0 -0
  351. /package/schematics/migrations/progress-bar-percentage-and-aria/{data.js → data.cjs} +0 -0
  352. /package/schematics/migrations/progress-spinner-signals/{data.js → data.cjs} +0 -0
  353. /package/schematics/migrations/query-list-signals/{data.js → data.cjs} +0 -0
  354. /package/schematics/migrations/radio-signals-and-aria/{data.js → data.cjs} +0 -0
  355. /package/schematics/migrations/read-state-dwell-handlers/{data.js → data.cjs} +0 -0
  356. /package/schematics/migrations/select-signal-inputs/{data.js → data.cjs} +0 -0
  357. /package/schematics/migrations/sidepanel-non-modal-behavior/{data.js → data.cjs} +0 -0
  358. /package/schematics/migrations/signal-inputs-subclasses/{data.js → data.cjs} +0 -0
  359. /package/schematics/migrations/split-button-optional-disabled/{data.js → data.cjs} +0 -0
  360. /package/schematics/migrations/state-saving-default/{data.js → data.cjs} +0 -0
  361. /package/schematics/migrations/table-cell-content/{data.js → data.cjs} +0 -0
  362. /package/schematics/migrations/tabs-signals-and-aria/{data.js → data.cjs} +0 -0
  363. /package/schematics/migrations/tag-list-cleaner/{data.js → data.cjs} +0 -0
  364. /package/schematics/migrations/tags-signals/{data.js → data.cjs} +0 -0
  365. /package/schematics/migrations/textarea-signals/{data.js → data.cjs} +0 -0
  366. /package/schematics/migrations/time-range-title-for/{data.js → data.cjs} +0 -0
  367. /package/schematics/migrations/timepicker-signals/{data.js → data.cjs} +0 -0
  368. /package/schematics/migrations/timezone-grouping-utils/{data.js → data.cjs} +0 -0
  369. /package/schematics/migrations/title-encapsulation/{data.js → data.cjs} +0 -0
  370. /package/schematics/migrations/toast-stack-and-defaults/{data.js → data.cjs} +0 -0
  371. /package/schematics/migrations/tooltip-pointer-events-and-types/{data.js → data.cjs} +0 -0
  372. /package/schematics/migrations/top-bar-container-selectors/{data.js → data.cjs} +0 -0
  373. /package/schematics/migrations/tree-select-signals/{data.js → data.cjs} +0 -0
  374. /package/schematics/migrations/tree-signals/{data.js → data.cjs} +0 -0
  375. /package/schematics/migrations/tree-state-saving-default/{data.js → data.cjs} +0 -0
  376. /package/schematics/migrations/username-pipe-injection/{data.js → data.cjs} +0 -0
  377. /package/schematics/migrations/zoneless-change-detection/{data.js → data.cjs} +0 -0
  378. /package/schematics/utils/{ast.js → ast.cjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-time-range.mjs","sources":["../../../packages/components/time-range/constants.ts","../../../packages/components/time-range/time-range-editor-bridge.ts","../../../packages/components/time-range/time-range.service.ts","../../../packages/components/time-range/time-range-editor.ts","../../../packages/components/time-range/time-range-editor.html","../../../packages/components/time-range/time-range-title.ts","../../../packages/components/time-range/time-range.ts","../../../packages/components/time-range/time-range-title-as-form-field.ts","../../../packages/components/time-range/time-range.module.ts","../../../packages/components/time-range/koobiq-components-time-range.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqCustomTimeRangeType, KbqTimeRangeType } from './types';\n\n/** Preset of selectable time ranges, provided by DI. */\nexport const KBQ_DEFAULT_TIME_RANGE_TYPES = new InjectionToken<KbqTimeRangeType[]>('KBQ_DEFAULT_TIME_RANGE_TYPES');\n\n/** Preset of custom time ranges, provided by DI. */\nexport const KBQ_CUSTOM_TIME_RANGE_TYPES = new InjectionToken<KbqCustomTimeRangeType[]>('KBQ_CUSTOM_TIME_RANGE_TYPES');\n\n/** Time range types in range editor if nothing provided */\nexport const defaultTimeRangeTypes: KbqTimeRangeType[] = [\n 'lastHour',\n 'last24Hours',\n 'last3Days',\n 'last7Days',\n 'last14Days',\n 'currentQuarter',\n 'currentYear',\n 'allTime',\n 'range'\n];\n\n/** @internal */\nexport function createMissingDateImplError(componentName: string, provider: string): Error {\n return Error(\n `${componentName}: No provider found for ${provider}. You must import one of the existing ` +\n `modules at your application root or provide a custom implementation or use exists ones.`\n );\n}\n\n/**\n * Validates that the 'from' date-time is not greater than the 'to' date-time in a range form.\n * Returns an error if the start date-time occurs after the end date-time.\n *\n * @param timeRangeService - Service used to manipulate date-time values.\n */\nexport const rangeValidator = <T>(timeRangeService: KbqTimeRangeService<T>): ValidatorFn => {\n // TODO: a consumer cannot call this: `KbqTimeRangeService` is not exported from the entry point. Export the\n // service or take a `DateAdapter`, then add a docs example (#DS-2196).\n return (control: AbstractControl) => {\n const form = control.value;\n\n if (!form.fromTime || !form.fromDate || !form.toTime || !form.toDate) {\n return null;\n }\n\n const fromDateTime = timeRangeService.combineDateAndTime(form.fromDate, form.fromTime);\n const toDateTime = timeRangeService.combineDateAndTime(form.toDate, form.toTime);\n\n return timeRangeService.dateAdapter.compareDateTime(fromDateTime, toDateTime) > 0\n ? { fromIsGreaterThanTo: fromDateTime }\n : null;\n };\n};\n","import { Injectable } from '@angular/core';\n\n/**\n * Channel between the popover footer, which `KbqTimeRange` owns, and the editor rendered inside the\n * popover. Provided by `KbqTimeRange`, so there is exactly one instance per component.\n *\n * @docs-private\n */\n@Injectable()\nexport class KbqTimeRangeEditorBridge {\n /**\n * Raised while a pointer is held down on the footer. `focusout` on its own cannot tell \"the user is\n * pressing apply\" apart from \"the user clicked a blank spot\": Safari does not move focus onto a\n * `<button>` when it is clicked, so both arrive with a `null` `relatedTarget`.\n */\n applyGestureInProgress = false;\n\n /**\n * Registered by the editor. Reveals the errors of both borders and moves focus to the first field\n * carrying one; returns whether the editor is free of errors.\n */\n revealErrors: () => boolean = () => true;\n}\n","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { DateAdapter, DateFormatter } from '@koobiq/components/core';\nimport {\n createMissingDateImplError,\n defaultTimeRangeTypes,\n KBQ_CUSTOM_TIME_RANGE_TYPES,\n KBQ_DEFAULT_TIME_RANGE_TYPES\n} from './constants';\nimport {\n KbqCustomTimeRangeType,\n KbqRange,\n KbqRangeValue,\n KbqTimeRangeRange,\n KbqTimeRangeTranslationType,\n KbqTimeRangeType,\n KbqTimeRangeUnits\n} from './types';\n\n/** The owning component's bound inputs, read live rather than copied. @docs-private */\ninterface KbqTimeRangeBoundsSource<T> {\n min: Signal<T | null | undefined>;\n max: Signal<T | null | undefined>;\n}\n\n@Injectable()\nexport class KbqTimeRangeService<T> {\n // Optional so the constructor can name the missing provider instead of letting DI throw a bare\n // `NullInjectorError`. Neither is optional in practice - the guards below reject a missing one.\n readonly dateAdapter = inject<DateAdapter<T>>(DateAdapter, { optional: true })!;\n readonly dateFormatter = inject<DateFormatter<T>>(DateFormatter, { optional: true })!;\n\n readonly providedDefaultTimeRangeTypes =\n inject(KBQ_DEFAULT_TIME_RANGE_TYPES, { optional: true }) || defaultTimeRangeTypes;\n\n readonly customTimeRangeTypes = inject(KBQ_CUSTOM_TIME_RANGE_TYPES, { optional: true });\n\n readonly DEFAULT_RANGE_TYPE: KbqTimeRangeType = 'lastHour';\n\n private readonly boundsSource = signal<KbqTimeRangeBoundsSource<T>>({\n min: signal(null),\n max: signal(null)\n });\n\n /**\n * Bounds of the owning component, so that every default and every check reads one pair. Both are\n * exact instants rather than whole days: a `maxDate` that should admit its own day has to carry the\n * end of that day.\n */\n readonly minDate = computed(() => this.boundsSource().min() ?? null);\n /** Upper bound of the owning component, read the way `minDate` reads the lower one. */\n readonly maxDate = computed(() => this.boundsSource().max() ?? null);\n\n readonly timeRangeConfig: Record<KbqTimeRangeType, Omit<KbqCustomTimeRangeType, 'type'>> = {\n lastMinute: { units: { minutes: -1 }, translationType: 'minutes' },\n last5Minutes: { units: { minutes: -5 }, translationType: 'minutes' },\n last15Minutes: { units: { minutes: -15 }, translationType: 'minutes' },\n last30Minutes: { units: { minutes: -30 }, translationType: 'minutes' },\n\n lastHour: { units: { hours: -1 }, translationType: 'hours' },\n last24Hours: { units: { hours: -24 }, translationType: 'hours' },\n\n last3Days: { units: { days: -3 }, translationType: 'days' },\n last7Days: { units: { days: -7 }, translationType: 'days' },\n last14Days: { units: { days: -14 }, translationType: 'days' },\n last30Days: { units: { days: -30 }, translationType: 'days' },\n\n last3Months: { units: { months: -3 }, translationType: 'months' },\n last12Months: { units: { months: -12 }, translationType: 'months' },\n\n allTime: { units: {}, translationType: 'other' },\n currentQuarter: { units: {}, translationType: 'other' },\n currentYear: { units: {}, translationType: 'other' },\n range: { units: {}, translationType: 'other' }\n };\n\n constructor() {\n if (!this.dateAdapter) {\n throw createMissingDateImplError('KbqTimeRange', 'DateAdapter');\n }\n\n if (!this.dateFormatter) {\n throw createMissingDateImplError('KbqTimeRange', 'DateFormatter');\n }\n\n this.customTimeRangeTypes\n ?.filter(({ type }) => {\n return !this.timeRangeConfig[type];\n })\n .forEach((type) => this.add(type));\n }\n\n static range = (dateTimeISOString: string): KbqRange => ({\n startDateTime: dateTimeISOString\n });\n\n add({ type, ...customTimeRangeConfig }: KbqCustomTimeRangeType): void {\n this.timeRangeConfig[type] = customTimeRangeConfig;\n }\n\n /**\n * Hands the owning component's own bound inputs over, rather than a copy of their values: a signal\n * input reads as its initial value until the first change detection, so a mirror would leave every\n * default computed in a constructor clamped against no bounds at all.\n */\n bindBounds(min: Signal<T | null | undefined>, max: Signal<T | null | undefined>): void {\n this.boundsSource.set({ min, max });\n }\n\n getTimeRangeTypeUnits(type: KbqTimeRangeType): KbqTimeRangeUnits {\n return this.timeRangeConfig[type].units;\n }\n\n getTimeRangeUnitByType(type: KbqTimeRangeType): KbqTimeRangeTranslationType {\n return this.timeRangeConfig[type].translationType;\n }\n\n /**\n * \"Yesterday to today\", pulled inside {@link minDate}/{@link maxDate} when they are set - otherwise\n * the editor opens on a range it would itself report as out of bounds.\n *\n * Milliseconds are dropped from \"today\" *before* clamping, so a clamped end lands exactly on its\n * bound rather than a fraction of a second below it.\n */\n getDefaultRangeValue(): Required<KbqRangeValue<T>> {\n const today = this.omitMilliseconds(this.dateAdapter.today());\n // `from` is derived from the clamped `to`, so the one-day window survives bounds that lie\n // entirely in the past - clamping both ends independently would collapse it onto `maxDate`.\n const to = this.clampToBounds(today);\n const from = this.clampToBounds(this.dateAdapter.addCalendarUnits(to, { days: -1 }));\n // Bounds lying entirely in the future leave no room below `to`, and both ends land on `minDate`.\n // The window is opened upwards instead, which is the same day in the other direction.\n const end =\n this.dateAdapter.compareDateTime(from, to) === 0\n ? this.clampToBounds(this.dateAdapter.addCalendarUnits(from, { days: 1 }))\n : to;\n\n return { fromTime: from, fromDate: from, toTime: end, toDate: end };\n }\n\n getTimeRangeDefaultValue(\n rangeValue: KbqRangeValue<T>,\n availableTimeRangeTypes: KbqTimeRangeType[] = []\n ): KbqTimeRangeRange {\n const defaultType =\n availableTimeRangeTypes[0] ?? this.providedDefaultTimeRangeTypes[0] ?? this.DEFAULT_RANGE_TYPE;\n\n return {\n ...this.calculateTimeRange(defaultType, rangeValue || this.getDefaultRangeValue()),\n type: defaultType\n };\n }\n\n calculateTimeRange(type?: KbqTimeRangeType, rangeValue?: KbqRangeValue<T>): KbqRange {\n if (!type) {\n return {};\n }\n\n if (type === 'range') {\n const checkedRangeValue = rangeValue || this.getDefaultRangeValue();\n\n return {\n startDateTime:\n checkedRangeValue.fromDate && checkedRangeValue.fromTime\n ? this.dateAdapter.toIso8601(\n this.combineDateAndTime(checkedRangeValue.fromDate, checkedRangeValue.fromTime)\n )\n : '',\n endDateTime:\n checkedRangeValue.toDate && checkedRangeValue.toTime\n ? this.dateAdapter.toIso8601(\n this.combineDateAndTime(checkedRangeValue.toDate, checkedRangeValue.toTime)\n )\n : ''\n };\n }\n\n switch (this.getTimeRangeUnitByType(type)) {\n case 'other': {\n switch (type) {\n case 'currentQuarter':\n return KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'quarter'))\n );\n case 'currentYear':\n return KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'year'))\n );\n case 'allTime':\n default: {\n return this.timeRangeConfig[type].range ?? {};\n }\n }\n }\n default: {\n return this.lastUnitsRange(this.getTimeRangeTypeUnits(type));\n }\n }\n }\n\n combineDateAndTime(date: T, time: T): T {\n return this.dateAdapter!.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n this.dateAdapter.getHours(time),\n this.dateAdapter.getMinutes(time),\n this.dateAdapter.getSeconds(time),\n this.dateAdapter.getMilliseconds(time)\n );\n }\n\n lastUnitsRange = (unitsInfo: KbqTimeRangeUnits): KbqRange =>\n KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.addCalendarUnits(this.dateAdapter.today(), unitsInfo))\n );\n\n checkAndCorrectTimeRangeValue(\n value: KbqTimeRangeRange | null | undefined,\n availableTimeRangeTypes: KbqTimeRangeType[],\n rangeValue: KbqRangeValue<T>\n ): KbqTimeRangeRange {\n let result =\n value && (!availableTimeRangeTypes.length || availableTimeRangeTypes.includes(value.type))\n ? value\n : this.getTimeRangeDefaultValue(rangeValue, availableTimeRangeTypes);\n\n if (!result.startDateTime || (result.type === 'range' && (!result.startDateTime || !result.endDateTime))) {\n result = {\n ...this.calculateTimeRange(result.type, rangeValue),\n type: result.type\n };\n }\n\n return result;\n }\n\n /** Which bound, if any, an instant falls outside of. */\n private checkBounds(dateTime: T): 'min' | 'max' | null {\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n if (minDate && this.dateAdapter.compareDateTime(dateTime, minDate) < 0) return 'min';\n\n if (maxDate && this.dateAdapter.compareDateTime(dateTime, maxDate) > 0) return 'max';\n\n return null;\n }\n\n /**\n * `DateAdapter.clampDate` compares whole days only, while a border is rejected by its time as well -\n * a value clamped to the day would still land outside the bounds.\n */\n private clampToBounds(date: T): T {\n switch (this.checkBounds(date)) {\n case 'min':\n return this.minDate()!;\n case 'max':\n return this.maxDate()!;\n default:\n return date;\n }\n }\n\n omitMilliseconds(date: T): T {\n return this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n this.dateAdapter.getHours(date),\n this.dateAdapter.getMinutes(date),\n this.dateAdapter.getSeconds(date),\n 0\n );\n }\n}\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnInit,\n TemplateRef,\n untracked,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn\n} from '@angular/forms';\nimport { ErrorStateMatcher, KbqTimeRangeLocaleConfiguration } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqError, KbqFieldset, KbqFieldsetItem, KbqHint } from '@koobiq/components/form-field';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqRadioModule } from '@koobiq/components/radio';\nimport { KbqTimepickerModule, TimeFormats } from '@koobiq/components/timepicker';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { KbqTimeRangeEditorBridge } from './time-range-editor-bridge';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n KbqRangeValue,\n KbqTimeRangeOptionContext,\n KbqTimeRangeRange,\n KbqTimeRangeType,\n KbqTimeRangeTypeContext\n} from './types';\n\ninterface FormValue<T> {\n type: FormControl<KbqTimeRangeType>;\n fromTime: FormControl<T>;\n fromDate: FormControl<T>;\n toTime: FormControl<T>;\n toDate: FormControl<T>;\n}\n\n/** One end of the range. Its date and its time are checked together, and revealed together. */\ntype RangeBorder = 'from' | 'to';\n\ntype BorderHalf = 'Date' | 'Time';\n\nconst borders: RangeBorder[] = ['from', 'to'];\nconst halves: BorderHalf[] = ['Time', 'Date'];\n\n/**\n * Errors are reported only once the user has left the border they belong to, and go quiet again as soon\n * as typing resumes. The validators themselves always run, so that `validate()` stays honest about\n * whether the range could be saved - only the painting waits.\n */\nclass RangeErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null): boolean {\n return !!control?.invalid && !!control.touched;\n }\n}\n\nlet nextUniqueId = 0;\n\n/** @docs-private */\n@Component({\n selector: 'kbq-time-range-editor',\n imports: [\n NgTemplateOutlet,\n ReactiveFormsModule,\n KbqError,\n KbqFieldset,\n KbqFieldsetItem,\n KbqHint,\n KbqDatepickerModule,\n KbqTimepickerModule,\n KbqRadioModule,\n KbqIcon\n ],\n templateUrl: './time-range-editor.html',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: KbqTimeRangeEditor\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: KbqTimeRangeEditor\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-time-range__editor',\n // The editor is a composite control: no single field's blur means the user is done with it,\n // so touched is driven by focus leaving the editor as a whole.\n '(focusout)': 'onEditorFocusOut($event)'\n }\n})\nexport class KbqTimeRangeEditor<T> implements ControlValueAccessor, Validator, OnInit {\n private readonly timeRangeService = inject<KbqTimeRangeService<T>>(KbqTimeRangeService);\n private readonly editorBridge = inject(KbqTimeRangeEditorBridge, { optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n\n /** The maximum selectable date. */\n readonly maxDate = input<T | null>(null);\n /** The minimum selectable date. */\n readonly minDate = input<T | null>(null);\n /** Preset of selectable ranges */\n readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n /** Provided value of selected range */\n readonly rangeValue = input<Required<KbqRangeValue<T>>>(this.timeRangeService.getDefaultRangeValue());\n readonly showRangeAsDefault = input.required<boolean>();\n readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfiguration>();\n /** Customizable option output */\n readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n\n /** @docs-private */\n protected readonly isRangeVisible = computed(\n () => this.showRangeAsDefault() || this.availableTimeRangeTypes().includes('range')\n );\n\n /** @docs-private */\n protected readonly timeRangeTypesWithoutRange = computed<KbqTimeRangeOptionContext[]>(() => {\n const localeConfig = this.localeConfiguration();\n\n return this.availableTimeRangeTypes()\n .filter((type) => type !== 'range')\n .map((type) => ({\n type,\n translationType: this.timeRangeService.getTimeRangeUnitByType(type),\n units: this.timeRangeService.getTimeRangeTypeUnits(type),\n formattedValue: this.getFormattedOption(type, localeConfig)\n }));\n });\n\n /**\n * Caption under the \"range\" option, spelling out the bounds the border has to stay within. Read from\n * the service rather than from this component's own inputs, so that it can never disagree with what\n * the border validators go on to enforce.\n *\n * @docs-private\n */\n protected readonly boundsHint = computed(() => {\n const { dateFormatter } = this.timeRangeService;\n const minDate = this.timeRangeService.minDate();\n const maxDate = this.timeRangeService.maxDate();\n\n if (!minDate && !maxDate) return '';\n\n // The time half earns a place in the caption only once a bound actually carries one.\n return [minDate, maxDate].some((bound) => bound && this.carriesTime(bound))\n ? dateFormatter.rangeShortDateTime(minDate, maxDate ?? undefined)\n : dateFormatter.rangeShortDate(minDate, maxDate ?? undefined);\n });\n\n /** @docs-private */\n protected readonly form: FormGroup<FormValue<T>>;\n\n /**\n * The same four controls as `form`, indexed as two ends each with a date and a time. The form itself\n * has to stay flat, because its value is the `KbqRangeValue` the service and the bound control speak\n * in - this is the single place the two shapes are tied together, and `Record` over both dimensions is\n * what keeps it exhaustive.\n */\n private readonly borderControls: Record<RangeBorder, Record<BorderHalf, FormControl<T>>>;\n /** The same four, flat, for the checks that treat the range as one thing. */\n private readonly rangeControls: FormControl<T>[];\n\n /** @docs-private */\n protected readonly timepickerFormat = TimeFormats.HHmmss;\n /** @docs-private */\n protected readonly rangeStateMatcher = new RangeErrorStateMatcher();\n\n /** Raised by the first \"apply\", after which a border left wholly empty counts as an error too. */\n private applyAttempted = false;\n\n /**\n * Ids of the `from`/`to` prefixes, so both fields of a pair take the prefix as part of their\n * accessible name. `aria-label` on the prefix itself is inert - a bare `<span>` has no role that\n * supports naming.\n *\n * @docs-private\n */\n protected readonly fromLabelId = `kbq-time-range-editor-from-${nextUniqueId}`;\n /** @docs-private */\n protected readonly toLabelId = `kbq-time-range-editor-to-${nextUniqueId++}`;\n\n constructor() {\n const defaultRangeValue = this.rangeValue();\n\n this.form = new FormGroup({\n type: new FormControl<KbqTimeRangeType>(this.timeRangeService.DEFAULT_RANGE_TYPE, {\n nonNullable: true\n }),\n fromTime: new FormControl<T>(defaultRangeValue.fromTime, { nonNullable: true }),\n fromDate: new FormControl<T>(defaultRangeValue.fromDate, { nonNullable: true }),\n toTime: new FormControl<T>(defaultRangeValue.toTime, { nonNullable: true }),\n toDate: new FormControl<T>(defaultRangeValue.toDate, { nonNullable: true })\n });\n\n const { fromTime, fromDate, toTime, toDate } = this.form.controls;\n\n this.borderControls = {\n from: { Time: fromTime, Date: fromDate },\n to: { Time: toTime, Date: toDate }\n };\n this.rangeControls = borders.flatMap((border) => this.borderHalves(border));\n\n borders.forEach((border) =>\n halves.forEach((half) =>\n this.borderControls[border][half].addValidators(this.borderValidator(border, half))\n )\n );\n\n if (this.editorBridge) this.editorBridge.revealErrors = () => this.revealErrors();\n\n this.form.valueChanges\n .pipe(\n map((formValue) => formValue.type),\n distinctUntilChanged(),\n takeUntilDestroyed()\n )\n .subscribe((type) => this.syncRangeControlsDisabledState(type));\n\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((formValue) => {\n // Each half is checked against its sibling, so editing one has to re-run the other. Silent,\n // or this would re-enter through `valueChanges`.\n this.revalidateRange();\n\n const range = this.mapTimeRange(formValue);\n\n if (range) this.onChange(range);\n });\n }\n\n ngOnInit(): void {\n const defaultRangeValue = this.rangeValue();\n const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n this.form.setValue({\n type: (availableTimeRangeTypes.length && availableTimeRangeTypes[0]) || 'range',\n fromTime: defaultRangeValue.fromTime,\n fromDate: defaultRangeValue.fromDate,\n toTime: defaultRangeValue.toTime,\n toDate: defaultRangeValue.toDate\n });\n }\n\n /** @docs-private */\n validate(): ValidationErrors | null {\n return this.concatControlValidationErrors();\n }\n\n /** Implemented as part of ControlValueAccessor */\n writeValue(value?: KbqTimeRangeRange): void {\n // Untracked, as `setDisabledState()`: a form control set from a consumer's `effect()` writes here on the\n // spot, and the inputs and bounds read on the way, by the validators too, would make the effect run again.\n untracked(() => this.applyValue(value));\n }\n\n /** Body of `writeValue()`. */\n private applyValue(value?: KbqTimeRangeRange): void {\n if (!value) return;\n\n const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n value,\n this.availableTimeRangeTypes(),\n this.form.value\n );\n\n this.form.controls.type.setValue(corrected.type);\n\n if (corrected.type === 'range' && corrected.startDateTime && corrected.endDateTime) {\n const { dateAdapter } = this.timeRangeService;\n // An unparseable end leaves its halves empty, which the border validators then report.\n const from = dateAdapter.deserialize(corrected.startDateTime)!;\n const to = dateAdapter.deserialize(corrected.endDateTime)!;\n\n this.form.patchValue({\n fromTime: from,\n fromDate: from,\n toTime: to,\n toDate: to\n });\n }\n }\n\n /** @docs-private */\n onChange = (_value: KbqTimeRangeRange) => {};\n /** @docs-private */\n onTouch = () => {};\n /** Implemented as part of ControlValueAccessor */\n registerOnChange(fn: (value: KbqTimeRangeRange) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n /**\n * The editor counts as left only once focus is out of it entirely. Moving between its own fields -\n * the two halves of a border, or from a border to the radio that drives it - is still editing, and\n * a `focusout` fires for each of those moves.\n *\n * @docs-private\n */\n protected onEditorFocusOut({ currentTarget, relatedTarget }: FocusEvent): void {\n if (this.staysWithin(currentTarget as HTMLElement, relatedTarget as HTMLElement | null)) return;\n\n this.onTouch();\n }\n\n /**\n * Leaving one border reports what is wrong with it. Angular marks a control touched on its own blur,\n * which is a finer grain than the spec asks for - so moving between a border's own date and time\n * takes the touch back off, and the pair is judged only once focus is out of both.\n *\n * @docs-private\n */\n protected onBorderFocusOut(border: RangeBorder, { currentTarget, relatedTarget }: FocusEvent): void {\n this.setBorderTouched(\n border,\n !this.staysWithin(currentTarget as HTMLElement, relatedTarget as HTMLElement | null)\n );\n }\n\n /**\n * Typing puts a border back to its neutral state, the way `validation-on-blur` does for a single\n * field. What is wrong with it is said again when focus leaves it.\n *\n * @docs-private\n */\n protected onBorderInput(border: RangeBorder): void {\n this.setBorderTouched(border, false);\n }\n\n /**\n * What is said when the range as a whole has left the bounds. Said once, below the last of the two\n * ends, and only when both of them are at fault: a single end out of bounds is already pointed at by\n * the fields painted around it. Silent until the ends have been left, keeping step with that\n * painting.\n *\n * @docs-private\n */\n protected outOfBoundsMessage(): string {\n const bothOutOfBounds = borders.every((border) =>\n this.borderHalves(border).some((control) => control.touched && !!control.errors?.kbqTimeRangeOutOfBounds)\n );\n\n if (!bothOutOfBounds) return '';\n\n return this.localeConfiguration().editor.outOfBoundsError.replace('{{ value }}', this.boundsHint());\n }\n\n /**\n * Once focus leaves the manual range fields, a reversed range is silently swapped back into order -\n * except on the way to \"apply\", where the swap is left to the emitted value so that the popover does\n * not visibly reorder itself in the same gesture that closes it.\n *\n * @docs-private\n */\n protected onRangeFocusOut({ currentTarget, relatedTarget }: FocusEvent): void {\n const next = relatedTarget as HTMLElement | null;\n\n if (this.staysWithin(currentTarget as HTMLElement, next)) return;\n\n // Safari reports a `null` `relatedTarget` for a click on a button, so the footer is recognised by\n // the pointer gesture it started rather than by where focus went.\n if (this.editorBridge?.applyGestureInProgress || next?.closest('.kbq-time-range__buttons')) return;\n\n // Focus went nowhere because the whole window lost it - the user is still mid-edit.\n if (!next && !this.document.hasFocus()) return;\n\n this.swapIfReversed();\n }\n\n /**\n * Reveals both borders and sends the user to the first field at fault, reporting whether there is\n * anything to fix at all.\n */\n private revealErrors(): boolean {\n this.applyAttempted = true;\n // `applyAttempted` is read by the validators, so they have to be run again before anything is said\n // about the result.\n this.revalidateRange();\n borders.forEach((border) => this.setBorderTouched(border, true));\n\n const firstInvalid = borders\n .flatMap((border) => halves.map((half) => ({ border, half })))\n .find(({ border, half }) => this.borderControls[border][half].invalid);\n\n if (!firstInvalid) return true;\n\n // The only place the two halves of a name are put back together, and it builds a selector rather\n // than a control key: the attribute in the template is spelled the same way.\n this.elementRef.nativeElement\n .querySelector<HTMLInputElement>(`[data-time-range-field=\"${firstInvalid.border}${firstInvalid.half}\"]`)\n ?.focus();\n\n return false;\n }\n\n /** Whether a bound is a moment within its day rather than the day itself. */\n private carriesTime(date: T): boolean {\n const { dateAdapter } = this.timeRangeService;\n\n return !!(dateAdapter.getHours(date) || dateAdapter.getMinutes(date) || dateAdapter.getSeconds(date));\n }\n\n /** Whether focus is still inside `group`, counting the datepicker calendar as part of it. */\n private staysWithin(group: HTMLElement, next: HTMLElement | null): boolean {\n // The calendar is rendered in a separate overlay, so focus moving into it is still editing.\n return group.contains(next) || !!next?.closest('.kbq-datepicker__popup');\n }\n\n /** Both halves of a border are painted, or neither: the pair is what the user is judged on. */\n private setBorderTouched(border: RangeBorder, touched: boolean): void {\n this.borderHalves(border).forEach((control) => {\n if (touched) {\n control.markAsTouched();\n } else {\n control.markAsUntouched();\n }\n });\n }\n\n /** Both halves of one end, in the order they are painted. */\n private borderHalves(border: RangeBorder): FormControl<T>[] {\n return halves.map((half) => this.borderControls[border][half]);\n }\n\n /** Each half is checked against its sibling, so a change to one has to re-run the other. */\n private revalidateRange(): void {\n this.rangeControls.forEach((control) => control.updateValueAndValidity({ emitEvent: false }));\n }\n\n private swapIfReversed(): void {\n if (this.hasBorderProblem()) return;\n\n const { fromTime, fromDate, toTime, toDate } = this.form.getRawValue();\n\n if (!this.isReversed(fromDate, fromTime, toDate, toTime)) return;\n\n this.form.patchValue({ fromTime: toTime, fromDate: toDate, toTime: fromTime, toDate: fromDate });\n }\n\n /**\n * Whether anything about the borders would stop the range being saved. Deliberately blind to which\n * borders have been revealed: a swap rewrites the user's values, so it has to answer \"is this range\n * actually sound\", not \"has the user been shown the problem yet\".\n */\n private hasBorderProblem(): boolean {\n if (this.form.controls.type.value !== 'range') return false;\n\n // The validators run whether or not the user has been shown the result, so the controls already\n // hold the answer - including the pickers' own format errors.\n return this.rangeControls.some((control) => !!control.errors);\n }\n\n /**\n * What is wrong with each half of a border, whether or not the user has been shown it. A missing half\n * is flagged on its own; a bound is judged in two steps, so that the field actually at fault is the\n * one painted.\n */\n private borderErrors(border: RangeBorder): Record<BorderHalf, ValidationErrors | null> {\n const { value: date } = this.borderControls[border].Date;\n const { value: time } = this.borderControls[border].Time;\n\n if (!date && !time) {\n const error = this.applyAttempted ? { kbqTimeRangeRequired: true } : null;\n\n return { Date: error, Time: error };\n }\n\n // Only the missing half is painted, so the user is pointed at the field to fill in.\n if (!date || !time) {\n const error = { kbqTimeRangeIncomplete: true };\n\n return { Date: date ? null : error, Time: time ? null : error };\n }\n\n const outOfBounds = this.checkBorderBounds(date, time);\n\n if (!outOfBounds) return { Date: null, Time: null };\n\n const error = { kbqTimeRangeOutOfBounds: { bound: outOfBounds.bound } };\n\n // A day outside the bounds is wrong whatever time sits next to it, so both halves are painted.\n // A day on the boundary itself can only be pushed out by its time, so only the time is.\n return { Date: outOfBounds.scope === 'date' ? error : null, Time: error };\n }\n\n /** Which bound a border falls outside of, and whether its day or only its time is to blame. */\n private checkBorderBounds(date: T, time: T): { bound: 'min' | 'max'; scope: 'date' | 'time' } | null {\n const service = this.timeRangeService;\n const { dateAdapter } = service;\n const minDate = service.minDate();\n const maxDate = service.maxDate();\n\n if (minDate && dateAdapter.compareDate(date, minDate) < 0) return { bound: 'min', scope: 'date' };\n\n if (maxDate && dateAdapter.compareDate(date, maxDate) > 0) return { bound: 'max', scope: 'date' };\n\n const combined = service.combineDateAndTime(date, time);\n\n if (minDate && dateAdapter.compareDateTime(combined, minDate) < 0) return { bound: 'min', scope: 'time' };\n\n if (maxDate && dateAdapter.compareDateTime(combined, maxDate) > 0) return { bound: 'max', scope: 'time' };\n\n return null;\n }\n\n private isReversed(fromDate: T, fromTime: T, toDate: T, toTime: T): boolean {\n if (!fromDate || !fromTime || !toDate || !toTime) return false;\n\n const service = this.timeRangeService;\n\n return (\n service.dateAdapter.compareDateTime(\n service.combineDateAndTime(fromDate, fromTime),\n service.combineDateAndTime(toDate, toTime)\n ) > 0\n );\n }\n\n /**\n * A border reports only what the pickers do not: an empty half next to a filled one, a border left\n * wholly empty once \"apply\" was pressed, and a border outside the bounds. Format is the pickers' own\n * business, and so is the calendar restriction.\n */\n private borderValidator(border: RangeBorder, half: BorderHalf): ValidatorFn {\n return (): ValidationErrors | null => {\n if (this.form.controls.type.value !== 'range') return null;\n\n return this.borderErrors(border)[half];\n };\n }\n\n /** Implemented as part of ControlValueAccessor */\n setDisabledState(isDisabled: boolean): void {\n untracked(() => {\n if (isDisabled) {\n this.form.disable({ emitEvent: false });\n } else {\n this.form.enable({ emitEvent: false });\n // `enable()` reaches every control, including the from/to pair a preset type keeps disabled.\n this.syncRangeControlsDisabledState(this.form.controls.type.value);\n }\n });\n }\n\n /** The from/to pair is only editable while the `range` type is selected. */\n private syncRangeControlsDisabledState(type: KbqTimeRangeType | undefined): void {\n const isDisabled = type !== 'range';\n\n this.rangeControls.forEach((control) => {\n if (isDisabled) {\n control.disable({ emitEvent: false });\n } else {\n control.enable({ emitEvent: false });\n }\n });\n }\n\n private mapTimeRange({ type }: Partial<KbqTimeRangeTypeContext> & KbqRangeValue<T>): KbqTimeRangeRange | undefined {\n if (!type) return;\n\n const { fromTime, fromDate, toTime, toDate } = this.form.getRawValue();\n // Ordered here as well as on blur, so that pressing \"apply\" straight out of a reversed field is\n // safe. A range with something wrong in it is left exactly as typed: it cannot be saved anyway,\n // and reordering it would move the fields out from under the user while they fix it.\n const ordered =\n !this.hasBorderProblem() && this.isReversed(fromDate, fromTime, toDate, toTime)\n ? { fromTime: toTime, fromDate: toDate, toTime: fromTime, toDate: fromDate }\n : { fromTime, fromDate, toTime, toDate };\n\n return { type, ...this.timeRangeService.calculateTimeRange(type, ordered) };\n }\n\n private getFormattedOption(type: KbqTimeRangeType, localeConfig: KbqTimeRangeLocaleConfiguration): string {\n const translationType = this.timeRangeService.getTimeRangeUnitByType(type);\n\n if (translationType === 'other') return '';\n\n const range = this.timeRangeService.calculateTimeRange(type);\n\n return this.timeRangeService.dateFormatter.duration(\n this.timeRangeService.dateAdapter.deserialize(range.startDateTime!)!,\n this.timeRangeService.dateAdapter.today(),\n [translationType],\n false,\n localeConfig.durationTemplate.option\n );\n }\n\n private concatControlValidationErrors(): ValidationErrors | null {\n let result: ValidationErrors | null = null;\n\n Object.values(this.form.controls).forEach((control: AbstractControl) => {\n if (control.errors) {\n result = {\n ...result,\n ...control.errors\n };\n }\n });\n\n return result;\n }\n}\n","<form [formGroup]=\"form\">\n @let localeConfig = localeConfiguration();\n @let types = timeRangeTypesWithoutRange();\n @let bounds = boundsHint();\n\n <!-- The radiogroup holds only radios: the from/to block is its sibling rather than its child, so the\n text fields and the calendar button are not announced as part of the group. -->\n <div class=\"kbq-time-range-editor__container\">\n @if (types.length) {\n <kbq-radio-group [formControl]=\"form.controls.type\">\n <div class=\"kbq-time-range-editor__predefined\">\n @for (type of types; track type) {\n <kbq-radio-button class=\"kbq-time-range-editor__predefined-option\" [value]=\"type.type\">\n <ng-container\n *ngTemplateOutlet=\"\n optionTemplate() || defaultOptionTemplate;\n context: { $implicit: type }\n \"\n />\n </kbq-radio-button>\n }\n </div>\n\n @if (isRangeVisible()) {\n <kbq-radio-button class=\"kbq-time-range-editor__range-option\" [value]=\"'range'\">\n {{ localeConfig.editor.rangeLabel }}\n @if (bounds) {\n <kbq-hint>{{ bounds }}</kbq-hint>\n }\n </kbq-radio-button>\n }\n </kbq-radio-group>\n }\n\n @if (isRangeVisible()) {\n <div\n class=\"kbq-time-range-editor__range\"\n role=\"group\"\n [attr.aria-label]=\"localeConfig.editor.rangeLabel\"\n (focusout)=\"onRangeFocusOut($event)\"\n >\n <div\n class=\"kbq-time-range-editor__date-time\"\n (input)=\"onBorderInput('from')\"\n (focusout)=\"onBorderFocusOut('from', $event)\"\n >\n <span class=\"kbq-time-range-editor__date-time-prefix\" [id]=\"fromLabelId\">\n {{ localeConfig.editor.from }}\n </span>\n <kbq-fieldset>\n <kbq-form-field kbqFieldsetItem>\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n <input\n kbqTimepicker\n data-time-range-field=\"fromTime\"\n [attr.aria-labelledby]=\"fromLabelId\"\n [format]=\"timepickerFormat\"\n [formControl]=\"form.controls.fromTime\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n </kbq-form-field>\n\n <kbq-form-field>\n <input\n data-time-range-field=\"fromDate\"\n [attr.aria-labelledby]=\"fromLabelId\"\n [kbqDatepicker]=\"datepickerFrom\"\n [formControl]=\"form.controls.fromDate\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerFrom\" />\n <kbq-datepicker #datepickerFrom [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n </kbq-form-field>\n </kbq-fieldset>\n </div>\n\n <div\n class=\"kbq-time-range-editor__date-time\"\n (input)=\"onBorderInput('to')\"\n (focusout)=\"onBorderFocusOut('to', $event)\"\n >\n <span class=\"kbq-time-range-editor__date-time-prefix\" [id]=\"toLabelId\">\n {{ localeConfig.editor.to }}\n </span>\n <kbq-fieldset>\n <kbq-form-field kbqFieldsetItem>\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n <input\n kbqTimepicker\n data-time-range-field=\"toTime\"\n [attr.aria-labelledby]=\"toLabelId\"\n [format]=\"timepickerFormat\"\n [formControl]=\"form.controls.toTime\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n </kbq-form-field>\n\n <kbq-form-field>\n <input\n data-time-range-field=\"toDate\"\n [attr.aria-labelledby]=\"toLabelId\"\n [kbqDatepicker]=\"datepickerTo\"\n [formControl]=\"form.controls.toDate\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerTo\" />\n <kbq-datepicker #datepickerTo [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n </kbq-form-field>\n\n <!-- The range is judged as a whole, so what is wrong with it is said once, below the\n last of its two ends - in place of the caption, which spells the same bounds out. -->\n @if (outOfBoundsMessage(); as message) {\n <kbq-error>{{ message }}</kbq-error>\n } @else if (!types.length && bounds) {\n <!-- With no presets there is no option to hang the bounds off, so they go in the\n fieldset's own hint area rather than loose in the block. -->\n <kbq-hint>{{ bounds }}</kbq-hint>\n }\n </kbq-fieldset>\n </div>\n </div>\n }\n </div>\n</form>\n\n<ng-template #defaultOptionTemplate let-context>\n @let localeConfig = localeConfiguration();\n @switch (context.translationType) {\n @case ('other') {\n @switch (context.type) {\n @case ('allTime') {\n {{ localeConfig.editor.allTimeOption ?? localeConfig.editor.allTime }}\n }\n @case ('currentQuarter') {\n {{ localeConfig.editor.currentQuarterOption ?? localeConfig.editor.currentQuarter }}\n }\n @case ('currentYear') {\n {{ localeConfig.editor.currentYearOption ?? localeConfig.editor.currentYear }}\n }\n }\n }\n @default {\n {{ context.formattedValue }}\n }\n }\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n Injector,\n input,\n TemplateRef\n} from '@angular/core';\nimport { KbqTimeRangeLocaleConfiguration } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqLink, KbqLinkSuffix } from '@koobiq/components/link';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqTimeRangeCustomizableTitleContext, KbqTimeRangeRange, KbqTimeRangeTitleContext } from './types';\n\n/** @docs-private */\n@Component({\n selector: 'kbq-time-range-title',\n imports: [\n NgTemplateOutlet,\n KbqLink,\n KbqLinkSuffix,\n KbqIconModule\n ],\n template: `\n @if (titleTemplate()) {\n <ng-container *ngTemplateOutlet=\"titleTemplate()!; context: titleContext() ?? null; injector: injector\" />\n } @else {\n <a kbqLink pseudo size=\"normal\" [disabled]=\"disabled()\">\n {{ formattedDate() }}\n <i kbq-icon=\"kbq-calendar-o_16\" kbqLinkSuffix></i>\n </a>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqTimeRangeTitle {\n private readonly timeRangeService = inject(KbqTimeRangeService);\n private readonly popover = inject(KbqPopoverTrigger, { host: true });\n protected readonly injector = inject(Injector);\n\n readonly timeRange = input.required<KbqTimeRangeRange | null>();\n readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfiguration>();\n readonly titleTemplate = input<TemplateRef<any>>();\n /** Drops the built-in trigger out of the tab order. A custom `titleTemplate` owns its own state. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly context = computed<KbqTimeRangeTitleContext | undefined>(() => {\n const timeRange = this.timeRange();\n\n if (!timeRange) return undefined;\n\n return {\n ...timeRange,\n ...this.timeRangeService.getTimeRangeTypeUnits(timeRange.type)\n };\n });\n\n protected readonly titleContext = computed<KbqTimeRangeCustomizableTitleContext | undefined>(() => {\n const context = this.context();\n const formattedDate = this.formattedDate();\n\n let customizableTitleContext = { formattedDate, popover: this.popover };\n\n if (context) {\n customizableTitleContext = { ...context, ...customizableTitleContext };\n }\n\n return {\n $implicit: customizableTitleContext,\n ...customizableTitleContext\n };\n });\n\n protected readonly formattedDate = computed(() => {\n const context = this.context();\n const localeConfiguration = this.localeConfiguration();\n\n if (!context) {\n return localeConfiguration.title.placeholder;\n }\n\n const timeRangeUnit = this.timeRangeService.getTimeRangeUnitByType(context.type);\n\n if (timeRangeUnit === 'other') {\n switch (context.type) {\n case 'range': {\n return this.timeRangeService.dateFormatter.rangeLongDate(\n this.timeRangeService.dateAdapter.deserialize(context.startDateTime ?? ''),\n this.timeRangeService.dateAdapter.deserialize(context.endDateTime ?? '')\n );\n }\n case 'allTime': {\n return localeConfiguration.editor.allTime;\n }\n case 'currentQuarter': {\n return localeConfiguration.editor.currentQuarter;\n }\n case 'currentYear': {\n return localeConfiguration.editor.currentYear;\n }\n default: {\n return '';\n }\n }\n }\n\n if (!context.startDateTime) return '';\n\n return this.timeRangeService.dateFormatter.duration(\n this.timeRangeService.dateAdapter.deserialize(context.startDateTime),\n this.timeRangeService.dateAdapter.today(),\n [timeRangeUnit],\n false,\n localeConfiguration.durationTemplate.title\n );\n });\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n InjectionToken,\n input,\n OnInit,\n output,\n Provider,\n Signal,\n signal,\n TemplateRef,\n untracked,\n ViewEncapsulation,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n KbqDeepPartial,\n kbqLocaleConfigurationOverrideProvider,\n KbqLocaleOverridesDirective,\n KbqTimeRangeLocaleConfiguration,\n PopUpPlacements,\n PopUpSizes,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { fromEvent } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeEditorBridge } from './time-range-editor-bridge';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n KbqRangeValue,\n KbqTimeRangeCustomizableTitleContext,\n KbqTimeRangeOptionContext,\n KbqTimeRangeRange,\n KbqTimeRangeType\n} from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_TIME_RANGE_LOCALE_CONFIGURATION = new InjectionToken<KbqTimeRangeLocaleConfiguration>(\n 'KbqTimeRangeLocaleConfiguration',\n { factory: () => ruRULocaleData.timeRange }\n);\n\n/**\n * Utility provider for `KBQ_TIME_RANGE_LOCALE_CONFIGURATION`. Only the strings you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqTimeRangeLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqTimeRangeLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('timeRange', configuration);\n\n@Component({\n selector: 'kbq-time-range',\n imports: [\n ReactiveFormsModule,\n KbqPopoverModule,\n KbqButtonModule,\n KbqTimeRangeEditor,\n KbqTimeRangeTitle\n ],\n template: `\n @let localeConfig = localeConfiguration();\n <kbq-time-range-title\n #popover=\"kbqPopover\"\n class=\"kbq-time-range__trigger\"\n kbqPopover\n kbqPopoverClass=\"kbq-time-range__popover\"\n [kbqPopoverSize]=\"popoverSize\"\n [kbqPopoverContent]=\"timeRangePopoverContent\"\n [kbqPopoverFooter]=\"timeRangePopoverFooter\"\n [kbqPopoverPlacement]=\"popupPlacement\"\n [kbqPopoverArrow]=\"arrow()\"\n [kbqPopoverDisabled]=\"disabled()\"\n [titleTemplate]=\"titleTemplate()\"\n [timeRange]=\"titleValue()\"\n [disabled]=\"disabled()\"\n [localeConfiguration]=\"localeConfig\"\n (kbqPopoverVisibleChange)=\"onVisibleChange($event)\"\n />\n\n <ng-template #timeRangePopoverContent>\n <kbq-time-range-editor\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [formControl]=\"rangeEditorControl\"\n [localeConfiguration]=\"localeConfig\"\n [showRangeAsDefault]=\"showRangeAsDefault()\"\n [rangeValue]=\"normalizedDefaultRangeValue()\"\n [availableTimeRangeTypes]=\"availableTimeRangeTypes()\"\n [optionTemplate]=\"optionTemplate()\"\n />\n </ng-template>\n\n <ng-template #timeRangePopoverFooter>\n <!-- The grouping is purely visual: an unnamed role=group only added a boundary. -->\n <div class=\"kbq-time-range__buttons\" (mousedown)=\"onFooterPointerDown()\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"onApply(popover)\">\n {{ localeConfig.editor.apply }}\n </button>\n\n <button kbq-button (click)=\"onCancel(popover)\">{{ localeConfig.editor.cancel }}</button>\n </div>\n </ng-template>\n `,\n styleUrls: ['./time-range.scss'],\n providers: [KbqTimeRangeService, KbqTimeRangeEditorBridge],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-time-range',\n '[class.kbq-disabled]': 'disabled()'\n },\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ]\n})\nexport class KbqTimeRange<T> implements ControlValueAccessor, OnInit {\n private readonly timeRangeService = inject<KbqTimeRangeService<T>>(KbqTimeRangeService);\n private readonly editorBridge = inject(KbqTimeRangeEditorBridge);\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n /** @docs-private */\n readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /** The earliest date the calendars offer and the validation accepts. */\n readonly minDate = input<T>();\n /** The latest date the calendars offer and the validation accepts. */\n readonly maxDate = input<T>();\n /** Seeds the from/to pair of the manual range. */\n readonly defaultRangeValue = input<KbqRangeValue<T>>();\n /** The options the editor offers, in order. The first one is selected by default. */\n readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n /** Replaces the built-in trigger. */\n readonly titleTemplate = input<TemplateRef<KbqTimeRangeCustomizableTitleContext>>();\n /** Replaces the built-in rendering of an option in the editor. */\n readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n /** Whether the popover is drawn with an arrow. */\n readonly arrow = input(true, { transform: booleanAttribute });\n\n /**\n * Keeps the manual range visible even when `range` is not in {@link availableTimeRangeTypes}.\n */\n readonly showRangeAsDefault = input(true);\n /** Falls back to a default value instead of holding `null`. */\n readonly nonNullable = input(true, { transform: booleanAttribute });\n\n /** Emits the corrected value when the provided one could not be used as is. */\n readonly valueCorrected = output<KbqTimeRangeRange>();\n\n /**\n * Used to calculate time range.\n *\n * @docs-private\n */\n protected readonly normalizedDefaultRangeValue = computed(() => ({\n ...this.timeRangeService.getDefaultRangeValue(),\n ...this.defaultRangeValue()\n }));\n\n /** @docs-private */\n protected readonly titleValue: WritableSignal<KbqTimeRangeRange | null>;\n /** @docs-private */\n protected readonly rangeEditorControl: FormControl<KbqTimeRangeRange>;\n\n private readonly disabledState = signal(false);\n\n /**\n * The applied time range, or `null` when the component is nullable and holds no value.\n *\n * This is what the trigger renders, so it lags the editor until Apply.\n */\n readonly value: Signal<KbqTimeRangeRange | null> = computed(() => this.titleValue());\n\n /** Whether the control is disabled through the forms layer. */\n readonly disabled: Signal<boolean> = this.disabledState.asReadonly();\n\n /** @docs-private */\n protected readonly popoverSize = PopUpSizes.Medium;\n /** @docs-private */\n protected readonly popupPlacement = PopUpPlacements.BottomLeft;\n\n /** @docs-private */\n protected readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'timeRange',\n KBQ_TIME_RANGE_LOCALE_CONFIGURATION\n );\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.timeRangeService.bindBounds(this.minDate, this.maxDate);\n\n const defaultValue = this.timeRangeService.getTimeRangeDefaultValue(\n this.normalizedDefaultRangeValue(),\n this.availableTimeRangeTypes()\n );\n\n this.titleValue = signal(this.nonNullable() ? defaultValue : null);\n this.rangeEditorControl = new FormControl<KbqTimeRangeRange>(defaultValue, { nonNullable: true });\n\n toObservable(this.availableTimeRangeTypes)\n .pipe(takeUntilDestroyed())\n .subscribe(this.handleAvailableTypesChange);\n }\n\n ngOnInit(): void {\n // call again on init, so input signals values will be correct\n this.writeValue(this.ngControl?.value ?? null);\n }\n\n /** Implemented as part of ControlValueAccessor */\n writeValue(value: KbqTimeRangeRange | null): void {\n // Untracked, as `setDisabledState()`: a form control set from a consumer's `effect()` writes here on the\n // spot, and the inputs read on the way — and the editor's bounds, through its validators — would make the\n // effect run again.\n untracked(() => this.applyValue(value));\n }\n\n /** Body of `writeValue()`. */\n private applyValue(value: KbqTimeRangeRange | null): void {\n const nonNullable = this.nonNullable();\n\n const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n value,\n availableTimeRangeTypes,\n this.normalizedDefaultRangeValue()\n );\n\n if (this.wasCorrected(value, corrected)) {\n this.valueCorrected.emit(corrected);\n }\n\n this.titleValue.set(nonNullable || value !== null ? corrected : null);\n this.rangeEditorControl.setValue(corrected);\n }\n\n /**\n * Lets the editor tell an \"apply\" gesture from a plain focus loss before the click even lands - the\n * `focusout` it reacts to is dispatched between this `mousedown` and the `click` below.\n *\n * @docs-private\n */\n protected onFooterPointerDown(): void {\n this.editorBridge.applyGestureInProgress = true;\n\n fromEvent(this.document, 'mouseup')\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => (this.editorBridge.applyGestureInProgress = false));\n }\n\n /**\n * Whether the correction pass produced a different range than the one written.\n *\n * Comparing the outcome rather than the shape of the input keeps presets that legitimately carry\n * no `startDateTime` - `allTime` resolves to `{}` unless a consumer supplies a range - from\n * reporting a correction that never happened, and looping any host that writes the payload back.\n */\n private wasCorrected(value: KbqTimeRangeRange | null, corrected: KbqTimeRangeRange): boolean {\n if (value === null) return this.nonNullable();\n\n return (\n value.type !== corrected.type ||\n value.startDateTime !== corrected.startDateTime ||\n value.endDateTime !== corrected.endDateTime\n );\n }\n\n /**\n * Applying is always offered; an invalid editor keeps the popover open and sends the user to the\n * first field at fault instead.\n *\n * @docs-private\n */\n onApply(popover: KbqPopoverTrigger): void {\n this.editorBridge.applyGestureInProgress = false;\n\n if (!this.editorBridge.revealErrors()) return;\n\n this.titleValue.set(this.rangeEditorControl.value);\n this.onChange(this.rangeEditorControl.value);\n popover.hide();\n }\n\n /** @docs-private */\n onCancel(popover: KbqPopoverTrigger): void {\n this.editorBridge.applyGestureInProgress = false;\n popover.hide();\n }\n\n onVisibleChange(isVisible: boolean) {\n if (isVisible) return;\n\n // A pointer held on the footer when the popover went away - a release outside the window, say -\n // would otherwise leave the gesture marked as in flight, and the next focusout out of the range\n // would be read as an apply and skip the swap.\n this.editorBridge.applyGestureInProgress = false;\n\n // Closing throws the edits away, applied or not. With nothing on the trigger yet there is no value\n // to go back to, so the editor returns to its default - otherwise an abandoned edit, which may well\n // be one the editor refused to apply, would be waiting the next time it opens.\n this.rangeEditorControl.setValue(this.titleValue() ?? this.defaultEditorValue(this.availableTimeRangeTypes()));\n\n // Closing the popover is the point the user is done with the control, whether they applied\n // or cancelled - every ErrorStateMatcher in the library keys error display off `touched`.\n this.onTouch();\n }\n\n /** @docs-private */\n onChange = (_value: KbqTimeRangeRange) => {};\n /** @docs-private */\n onTouch = () => {};\n /** Implemented as part of ControlValueAccessor */\n registerOnChange(fn: (_value: KbqTimeRangeRange) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n /** What the editor opens on: the first offered type, or a plain range when none are offered. */\n private defaultEditorValue(types: KbqTimeRangeType[]): KbqTimeRangeRange {\n return this.timeRangeService.getTimeRangeDefaultValue(\n this.normalizedDefaultRangeValue(),\n types.length ? types : ['range']\n );\n }\n\n /** Implemented as part of ControlValueAccessor */\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n\n untracked(() => {\n if (isDisabled) {\n this.rangeEditorControl.disable({ emitEvent: false });\n } else {\n this.rangeEditorControl.enable({ emitEvent: false });\n }\n });\n }\n\n private handleAvailableTypesChange = (types: KbqTimeRangeType[]): void => {\n if (types.includes(this.rangeEditorControl.value.type) || this.rangeEditorControl.value.type === 'range') {\n return;\n }\n\n const timeRangeDefaultValue = this.defaultEditorValue(types);\n\n // The editor still needs something to open on, whether or not the trigger shows a value.\n this.rangeEditorControl.setValue(timeRangeDefaultValue);\n\n // A nullable trigger that has never been given a value keeps its placeholder: replacing the types\n // is not the user picking a range, and emitting here would put one into the bound control.\n if (!this.nonNullable() && this.titleValue() === null) return;\n\n this.titleValue.set(timeRangeDefaultValue);\n this.onChange(timeRangeDefaultValue);\n };\n}\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n DoCheck,\n ElementRef,\n inject,\n Signal,\n signal\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm, Validators } from '@angular/forms';\nimport { ErrorStateMatcher, KbqErrorStateTracker } from '@koobiq/components/core';\nimport { KBQ_FORM_FIELD, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { KbqTimeRange } from './time-range';\nimport { KbqTimeRangeRange } from './types';\n\n/** Directive for easy using styles of time-range placeholder publicly. */\n@Directive({\n selector: '[kbqTimeRangeTitlePlaceholder]',\n host: {\n class: 'kbq-time-range-title__placeholder'\n }\n})\nexport class KbqTimeRangeTitlePlaceholder {}\n\n/** Component simulates `KbqFormFieldControl` allowing to provide custom content inside `KbqFormField` */\n@Component({\n selector: 'kbq-time-range-title-as-control',\n template: `\n <ng-content />\n `,\n styles: `\n :host {\n display: flex;\n align-items: center;\n }\n\n :host(:focus-visible) {\n outline: none;\n }\n `,\n providers: [\n {\n provide: KbqFormFieldControl,\n useExisting: KbqTimeRangeTitleAsControl\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.tabindex]': 'disabled() ? null : 0',\n '[attr.id]': 'id()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\n class: 'kbq-time-range-title-as-form-field',\n '(focus)': 'focusedValue.set(true)',\n '(blur)': 'focusedValue.set(false)'\n }\n})\nexport class KbqTimeRangeTitleAsControl implements KbqFormFieldControl<KbqTimeRangeRange>, DoCheck {\n private readonly timeRange = inject(KbqTimeRange);\n private readonly parentFormField = inject(KBQ_FORM_FIELD, { host: true, optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly requiredValue = signal(false);\n /** @docs-private */\n protected readonly focusedValue = signal(false);\n\n /** @docs-private */\n readonly controlType = 'select';\n /** @docs-private */\n readonly isNativeLabelSupported = false;\n\n /**\n * Id of the `kbq-form-field` caption naming this control, when it has one.\n *\n * A `<label for>` does not associate with a custom element, so the relationship is expressed the\n * other way around — from the control to the label.\n *\n * @docs-private\n */\n protected readonly ariaLabelledby = computed(() => this.parentFormField?.labelId() ?? null);\n /** @docs-private */\n readonly ngControl: NgControl | null = this.timeRange.ngControl;\n\n private readonly errorStateTracker = new KbqErrorStateTracker(\n inject(ErrorStateMatcher),\n this.ngControl,\n inject(FormGroupDirective, { optional: true }),\n inject(NgForm, { optional: true })\n );\n\n /** @docs-private */\n readonly value: Signal<KbqTimeRangeRange | null> = this.timeRange.value;\n /** @docs-private */\n readonly id = signal(inject(_IdGenerator).getId('kbq-time-range-title-as-control-')).asReadonly();\n /** @docs-private */\n readonly placeholder = signal<string | undefined>(undefined).asReadonly();\n /** @docs-private */\n readonly focused = this.focusedValue.asReadonly();\n /** @docs-private */\n readonly empty = computed(() => this.timeRange.value() === null);\n /** @docs-private */\n readonly required = this.requiredValue.asReadonly();\n /** @docs-private */\n readonly disabled: Signal<boolean> = this.timeRange.disabled;\n /** @docs-private */\n readonly errorState = this.errorStateTracker.errorState;\n\n /**\n * The validators and the touched state of the bound control notify nothing a signal could follow.\n *\n * @docs-private\n */\n ngDoCheck(): void {\n this.errorStateTracker.updateErrorState();\n this.requiredValue.set(!!this.ngControl?.control?.hasValidator(Validators.required));\n }\n\n /** @docs-private */\n onContainerClick(_event: MouseEvent): void {\n this.focus();\n }\n\n /** @docs-private */\n focus(options?: FocusOptions): void {\n this.elementRef.nativeElement.focus(options);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqTimeRange } from './time-range';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeTitleAsControl, KbqTimeRangeTitlePlaceholder } from './time-range-title-as-form-field';\n\nconst COMPONENTS = [\n KbqTimeRange,\n KbqTimeRangeTitle,\n KbqTimeRangeEditor,\n KbqTimeRangeTitlePlaceholder,\n KbqTimeRangeTitleAsControl\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqTimeRangeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i4"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-time-range.mjs","sources":["../../../packages/components/time-range/constants.ts","../../../packages/components/time-range/time-range-editor-bridge.ts","../../../packages/components/time-range/time-range.service.ts","../../../packages/components/time-range/time-range-editor.ts","../../../packages/components/time-range/time-range-editor.html","../../../packages/components/time-range/time-range-title.ts","../../../packages/components/time-range/time-range.ts","../../../packages/components/time-range/time-range-title-as-form-field.ts","../../../packages/components/time-range/time-range.module.ts","../../../packages/components/time-range/koobiq-components-time-range.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqCustomTimeRangeType, KbqTimeRangeType } from './types';\n\n/** Preset of selectable time ranges, provided by DI. */\nexport const KBQ_DEFAULT_TIME_RANGE_TYPES = new InjectionToken<KbqTimeRangeType[]>('KBQ_DEFAULT_TIME_RANGE_TYPES');\n\n/** Preset of custom time ranges, provided by DI. */\nexport const KBQ_CUSTOM_TIME_RANGE_TYPES = new InjectionToken<KbqCustomTimeRangeType[]>('KBQ_CUSTOM_TIME_RANGE_TYPES');\n\n/** Time range types in range editor if nothing provided */\nexport const defaultTimeRangeTypes: KbqTimeRangeType[] = [\n 'lastHour',\n 'last24Hours',\n 'last3Days',\n 'last7Days',\n 'last14Days',\n 'currentQuarter',\n 'currentYear',\n 'allTime',\n 'range'\n];\n\n/** @internal */\nexport function createMissingDateImplError(componentName: string, provider: string): Error {\n return Error(\n `${componentName}: No provider found for ${provider}. You must import one of the existing ` +\n `modules at your application root or provide a custom implementation or use exists ones.`\n );\n}\n\n/**\n * Validates that the 'from' date-time is not greater than the 'to' date-time in a range form.\n * Returns an error if the start date-time occurs after the end date-time.\n *\n * @param timeRangeService - Service used to manipulate date-time values.\n */\nexport const rangeValidator = <T>(timeRangeService: KbqTimeRangeService<T>): ValidatorFn => {\n // TODO: a consumer cannot call this: `KbqTimeRangeService` is not exported from the entry point. Export the\n // service or take a `DateAdapter`, then add a docs example (#DS-2196).\n return (control: AbstractControl) => {\n const form = control.value;\n\n if (!form.fromTime || !form.fromDate || !form.toTime || !form.toDate) {\n return null;\n }\n\n const fromDateTime = timeRangeService.combineDateAndTime(form.fromDate, form.fromTime);\n const toDateTime = timeRangeService.combineDateAndTime(form.toDate, form.toTime);\n\n return timeRangeService.dateAdapter.compareDateTime(fromDateTime, toDateTime) > 0\n ? { fromIsGreaterThanTo: fromDateTime }\n : null;\n };\n};\n","import { Injectable } from '@angular/core';\n\n/**\n * Channel between the popover footer, which `KbqTimeRange` owns, and the editor rendered inside the\n * popover. Provided by `KbqTimeRange`, so there is exactly one instance per component.\n *\n * @docs-private\n */\n@Injectable()\nexport class KbqTimeRangeEditorBridge {\n /**\n * Raised while a pointer is held down on the footer. `focusout` on its own cannot tell \"the user is\n * pressing apply\" apart from \"the user clicked a blank spot\": Safari does not move focus onto a\n * `<button>` when it is clicked, so both arrive with a `null` `relatedTarget`.\n */\n applyGestureInProgress = false;\n\n /**\n * Registered by the editor. Reveals the errors of both borders and moves focus to the first field\n * carrying one; returns whether the editor is free of errors.\n */\n revealErrors: () => boolean = () => true;\n}\n","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { DateAdapter, DateFormatter } from '@koobiq/components/core';\nimport {\n createMissingDateImplError,\n defaultTimeRangeTypes,\n KBQ_CUSTOM_TIME_RANGE_TYPES,\n KBQ_DEFAULT_TIME_RANGE_TYPES\n} from './constants';\nimport {\n KbqCustomTimeRangeType,\n KbqRange,\n KbqRangeValue,\n KbqTimeRangeRange,\n KbqTimeRangeTranslationType,\n KbqTimeRangeType,\n KbqTimeRangeUnits\n} from './types';\n\n/** The owning component's bound inputs, read live rather than copied. @docs-private */\ninterface KbqTimeRangeBoundsSource<T> {\n min: Signal<T | null | undefined>;\n max: Signal<T | null | undefined>;\n}\n\n@Injectable()\nexport class KbqTimeRangeService<T> {\n // Optional so the constructor can name the missing provider instead of letting DI throw a bare\n // `NullInjectorError`. Neither is optional in practice - the guards below reject a missing one.\n readonly dateAdapter = inject<DateAdapter<T>>(DateAdapter, { optional: true })!;\n readonly dateFormatter = inject<DateFormatter<T>>(DateFormatter, { optional: true })!;\n\n readonly providedDefaultTimeRangeTypes =\n inject(KBQ_DEFAULT_TIME_RANGE_TYPES, { optional: true }) || defaultTimeRangeTypes;\n\n readonly customTimeRangeTypes = inject(KBQ_CUSTOM_TIME_RANGE_TYPES, { optional: true });\n\n readonly DEFAULT_RANGE_TYPE: KbqTimeRangeType = 'lastHour';\n\n private readonly boundsSource = signal<KbqTimeRangeBoundsSource<T>>({\n min: signal(null),\n max: signal(null)\n });\n\n /**\n * Bounds of the owning component, so that every default and every check reads one pair. Both are\n * exact instants rather than whole days: a `maxDate` that should admit its own day has to carry the\n * end of that day.\n */\n readonly minDate = computed(() => this.boundsSource().min() ?? null);\n /** Upper bound of the owning component, read the way `minDate` reads the lower one. */\n readonly maxDate = computed(() => this.boundsSource().max() ?? null);\n\n readonly timeRangeConfig: Record<KbqTimeRangeType, Omit<KbqCustomTimeRangeType, 'type'>> = {\n lastMinute: { units: { minutes: -1 }, translationType: 'minutes' },\n last5Minutes: { units: { minutes: -5 }, translationType: 'minutes' },\n last15Minutes: { units: { minutes: -15 }, translationType: 'minutes' },\n last30Minutes: { units: { minutes: -30 }, translationType: 'minutes' },\n\n lastHour: { units: { hours: -1 }, translationType: 'hours' },\n last24Hours: { units: { hours: -24 }, translationType: 'hours' },\n\n last3Days: { units: { days: -3 }, translationType: 'days' },\n last7Days: { units: { days: -7 }, translationType: 'days' },\n last14Days: { units: { days: -14 }, translationType: 'days' },\n last30Days: { units: { days: -30 }, translationType: 'days' },\n\n last3Months: { units: { months: -3 }, translationType: 'months' },\n last12Months: { units: { months: -12 }, translationType: 'months' },\n\n allTime: { units: {}, translationType: 'other' },\n currentQuarter: { units: {}, translationType: 'other' },\n currentYear: { units: {}, translationType: 'other' },\n range: { units: {}, translationType: 'other' }\n };\n\n constructor() {\n if (!this.dateAdapter) {\n throw createMissingDateImplError('KbqTimeRange', 'DateAdapter');\n }\n\n if (!this.dateFormatter) {\n throw createMissingDateImplError('KbqTimeRange', 'DateFormatter');\n }\n\n this.customTimeRangeTypes\n ?.filter(({ type }) => {\n return !this.timeRangeConfig[type];\n })\n .forEach((type) => this.add(type));\n }\n\n static range = (dateTimeISOString: string): KbqRange => ({\n startDateTime: dateTimeISOString\n });\n\n add({ type, ...customTimeRangeConfig }: KbqCustomTimeRangeType): void {\n this.timeRangeConfig[type] = customTimeRangeConfig;\n }\n\n /**\n * Hands the owning component's own bound inputs over, rather than a copy of their values: a signal\n * input reads as its initial value until the first change detection, so a mirror would leave every\n * default computed in a constructor clamped against no bounds at all.\n */\n bindBounds(min: Signal<T | null | undefined>, max: Signal<T | null | undefined>): void {\n this.boundsSource.set({ min, max });\n }\n\n getTimeRangeTypeUnits(type: KbqTimeRangeType): KbqTimeRangeUnits {\n return this.timeRangeConfig[type].units;\n }\n\n getTimeRangeUnitByType(type: KbqTimeRangeType): KbqTimeRangeTranslationType {\n return this.timeRangeConfig[type].translationType;\n }\n\n /**\n * \"Yesterday to today\", pulled inside {@link minDate}/{@link maxDate} when they are set - otherwise\n * the editor opens on a range it would itself report as out of bounds.\n *\n * Milliseconds are dropped from \"today\" *before* clamping, so a clamped end lands exactly on its\n * bound rather than a fraction of a second below it.\n */\n getDefaultRangeValue(): Required<KbqRangeValue<T>> {\n const today = this.omitMilliseconds(this.dateAdapter.today());\n // `from` is derived from the clamped `to`, so the one-day window survives bounds that lie\n // entirely in the past - clamping both ends independently would collapse it onto `maxDate`.\n const to = this.clampToBounds(today);\n const from = this.clampToBounds(this.dateAdapter.addCalendarUnits(to, { days: -1 }));\n // Bounds lying entirely in the future leave no room below `to`, and both ends land on `minDate`.\n // The window is opened upwards instead, which is the same day in the other direction.\n const end =\n this.dateAdapter.compareDateTime(from, to) === 0\n ? this.clampToBounds(this.dateAdapter.addCalendarUnits(from, { days: 1 }))\n : to;\n\n return { fromTime: from, fromDate: from, toTime: end, toDate: end };\n }\n\n getTimeRangeDefaultValue(\n rangeValue: KbqRangeValue<T>,\n availableTimeRangeTypes: KbqTimeRangeType[] = []\n ): KbqTimeRangeRange {\n const defaultType =\n availableTimeRangeTypes[0] ?? this.providedDefaultTimeRangeTypes[0] ?? this.DEFAULT_RANGE_TYPE;\n\n return {\n ...this.calculateTimeRange(defaultType, rangeValue || this.getDefaultRangeValue()),\n type: defaultType\n };\n }\n\n calculateTimeRange(type?: KbqTimeRangeType, rangeValue?: KbqRangeValue<T>): KbqRange {\n if (!type) {\n return {};\n }\n\n if (type === 'range') {\n const checkedRangeValue = rangeValue || this.getDefaultRangeValue();\n\n return {\n startDateTime:\n checkedRangeValue.fromDate && checkedRangeValue.fromTime\n ? this.dateAdapter.toIso8601(\n this.combineDateAndTime(checkedRangeValue.fromDate, checkedRangeValue.fromTime)\n )\n : '',\n endDateTime:\n checkedRangeValue.toDate && checkedRangeValue.toTime\n ? this.dateAdapter.toIso8601(\n this.combineDateAndTime(checkedRangeValue.toDate, checkedRangeValue.toTime)\n )\n : ''\n };\n }\n\n switch (this.getTimeRangeUnitByType(type)) {\n case 'other': {\n switch (type) {\n case 'currentQuarter':\n return KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'quarter'))\n );\n case 'currentYear':\n return KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'year'))\n );\n case 'allTime':\n default: {\n return this.timeRangeConfig[type].range ?? {};\n }\n }\n }\n default: {\n return this.lastUnitsRange(this.getTimeRangeTypeUnits(type));\n }\n }\n }\n\n combineDateAndTime(date: T, time: T): T {\n return this.dateAdapter!.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n this.dateAdapter.getHours(time),\n this.dateAdapter.getMinutes(time),\n this.dateAdapter.getSeconds(time),\n this.dateAdapter.getMilliseconds(time)\n );\n }\n\n lastUnitsRange = (unitsInfo: KbqTimeRangeUnits): KbqRange =>\n KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.addCalendarUnits(this.dateAdapter.today(), unitsInfo))\n );\n\n checkAndCorrectTimeRangeValue(\n value: KbqTimeRangeRange | null | undefined,\n availableTimeRangeTypes: KbqTimeRangeType[],\n rangeValue: KbqRangeValue<T>\n ): KbqTimeRangeRange {\n let result =\n value && (!availableTimeRangeTypes.length || availableTimeRangeTypes.includes(value.type))\n ? value\n : this.getTimeRangeDefaultValue(rangeValue, availableTimeRangeTypes);\n\n if (!result.startDateTime || (result.type === 'range' && (!result.startDateTime || !result.endDateTime))) {\n result = {\n ...this.calculateTimeRange(result.type, rangeValue),\n type: result.type\n };\n }\n\n return result;\n }\n\n /** Which bound, if any, an instant falls outside of. */\n private checkBounds(dateTime: T): 'min' | 'max' | null {\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n if (minDate && this.dateAdapter.compareDateTime(dateTime, minDate) < 0) return 'min';\n\n if (maxDate && this.dateAdapter.compareDateTime(dateTime, maxDate) > 0) return 'max';\n\n return null;\n }\n\n /**\n * `DateAdapter.clampDate` compares whole days only, while a border is rejected by its time as well -\n * a value clamped to the day would still land outside the bounds.\n */\n private clampToBounds(date: T): T {\n switch (this.checkBounds(date)) {\n case 'min':\n return this.minDate()!;\n case 'max':\n return this.maxDate()!;\n default:\n return date;\n }\n }\n\n omitMilliseconds(date: T): T {\n return this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n this.dateAdapter.getHours(date),\n this.dateAdapter.getMinutes(date),\n this.dateAdapter.getSeconds(date),\n 0\n );\n }\n}\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnInit,\n TemplateRef,\n untracked,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn\n} from '@angular/forms';\nimport { ErrorStateMatcher, KbqTimeRangeLocaleConfiguration } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqError, KbqFieldset, KbqFieldsetItem, KbqHint } from '@koobiq/components/form-field';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqRadioModule } from '@koobiq/components/radio';\nimport { KbqTimepickerModule, TimeFormats } from '@koobiq/components/timepicker';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { KbqTimeRangeEditorBridge } from './time-range-editor-bridge';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n KbqRangeValue,\n KbqTimeRangeOptionContext,\n KbqTimeRangeRange,\n KbqTimeRangeType,\n KbqTimeRangeTypeContext\n} from './types';\n\ninterface FormValue<T> {\n type: FormControl<KbqTimeRangeType>;\n fromTime: FormControl<T>;\n fromDate: FormControl<T>;\n toTime: FormControl<T>;\n toDate: FormControl<T>;\n}\n\n/** One end of the range. Its date and its time are checked together, and revealed together. */\ntype RangeBorder = 'from' | 'to';\n\ntype BorderHalf = 'Date' | 'Time';\n\nconst borders: RangeBorder[] = ['from', 'to'];\nconst halves: BorderHalf[] = ['Time', 'Date'];\n\n/**\n * Errors are reported only once the user has left the border they belong to, and go quiet again as soon\n * as typing resumes. The validators themselves always run, so that `validate()` stays honest about\n * whether the range could be saved - only the painting waits.\n */\nclass RangeErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null): boolean {\n return !!control?.invalid && !!control.touched;\n }\n}\n\nlet nextUniqueId = 0;\n\n/** @docs-private */\n@Component({\n selector: 'kbq-time-range-editor',\n imports: [\n NgTemplateOutlet,\n ReactiveFormsModule,\n KbqError,\n KbqFieldset,\n KbqFieldsetItem,\n KbqHint,\n KbqDatepickerModule,\n KbqTimepickerModule,\n KbqRadioModule,\n KbqIcon\n ],\n templateUrl: './time-range-editor.html',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: KbqTimeRangeEditor\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: KbqTimeRangeEditor\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-time-range__editor',\n // The editor is a composite control: no single field's blur means the user is done with it,\n // so touched is driven by focus leaving the editor as a whole.\n '(focusout)': 'onEditorFocusOut($event)'\n }\n})\nexport class KbqTimeRangeEditor<T> implements ControlValueAccessor, Validator, OnInit {\n private readonly timeRangeService = inject<KbqTimeRangeService<T>>(KbqTimeRangeService);\n private readonly editorBridge = inject(KbqTimeRangeEditorBridge, { optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n\n /** The maximum selectable date. */\n readonly maxDate = input<T | null>(null);\n /** The minimum selectable date. */\n readonly minDate = input<T | null>(null);\n /** Preset of selectable ranges */\n readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n /** Provided value of selected range */\n readonly rangeValue = input<Required<KbqRangeValue<T>>>(this.timeRangeService.getDefaultRangeValue());\n readonly showRangeAsDefault = input.required<boolean>();\n readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfiguration>();\n /** Customizable option output */\n readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n\n /** @docs-private */\n protected readonly isRangeVisible = computed(\n () => this.showRangeAsDefault() || this.availableTimeRangeTypes().includes('range')\n );\n\n /** @docs-private */\n protected readonly timeRangeTypesWithoutRange = computed<KbqTimeRangeOptionContext[]>(() => {\n const localeConfig = this.localeConfiguration();\n\n return this.availableTimeRangeTypes()\n .filter((type) => type !== 'range')\n .map((type) => ({\n type,\n translationType: this.timeRangeService.getTimeRangeUnitByType(type),\n units: this.timeRangeService.getTimeRangeTypeUnits(type),\n formattedValue: this.getFormattedOption(type, localeConfig)\n }));\n });\n\n /**\n * Caption under the \"range\" option, spelling out the bounds the border has to stay within. Read from\n * the service rather than from this component's own inputs, so that it can never disagree with what\n * the border validators go on to enforce.\n *\n * @docs-private\n */\n protected readonly boundsHint = computed(() => {\n const { dateFormatter } = this.timeRangeService;\n const minDate = this.timeRangeService.minDate();\n const maxDate = this.timeRangeService.maxDate();\n\n if (!minDate && !maxDate) return '';\n\n // The time half earns a place in the caption only once a bound actually carries one.\n return [minDate, maxDate].some((bound) => bound && this.carriesTime(bound))\n ? dateFormatter.rangeShortDateTime(minDate, maxDate ?? undefined)\n : dateFormatter.rangeShortDate(minDate, maxDate ?? undefined);\n });\n\n /** @docs-private */\n protected readonly form: FormGroup<FormValue<T>>;\n\n /**\n * The same four controls as `form`, indexed as two ends each with a date and a time. The form itself\n * has to stay flat, because its value is the `KbqRangeValue` the service and the bound control speak\n * in - this is the single place the two shapes are tied together, and `Record` over both dimensions is\n * what keeps it exhaustive.\n */\n private readonly borderControls: Record<RangeBorder, Record<BorderHalf, FormControl<T>>>;\n /** The same four, flat, for the checks that treat the range as one thing. */\n private readonly rangeControls: FormControl<T>[];\n\n /** @docs-private */\n protected readonly timepickerFormat = TimeFormats.HHmmss;\n /** @docs-private */\n protected readonly rangeStateMatcher = new RangeErrorStateMatcher();\n\n /** Raised by the first \"apply\", after which a border left wholly empty counts as an error too. */\n private applyAttempted = false;\n\n /**\n * Ids of the `from`/`to` prefixes, so both fields of a pair take the prefix as part of their\n * accessible name. `aria-label` on the prefix itself is inert - a bare `<span>` has no role that\n * supports naming.\n *\n * @docs-private\n */\n protected readonly fromLabelId = `kbq-time-range-editor-from-${nextUniqueId}`;\n /** @docs-private */\n protected readonly toLabelId = `kbq-time-range-editor-to-${nextUniqueId++}`;\n\n constructor() {\n const defaultRangeValue = this.rangeValue();\n\n this.form = new FormGroup({\n type: new FormControl<KbqTimeRangeType>(this.timeRangeService.DEFAULT_RANGE_TYPE, {\n nonNullable: true\n }),\n fromTime: new FormControl<T>(defaultRangeValue.fromTime, { nonNullable: true }),\n fromDate: new FormControl<T>(defaultRangeValue.fromDate, { nonNullable: true }),\n toTime: new FormControl<T>(defaultRangeValue.toTime, { nonNullable: true }),\n toDate: new FormControl<T>(defaultRangeValue.toDate, { nonNullable: true })\n });\n\n const { fromTime, fromDate, toTime, toDate } = this.form.controls;\n\n this.borderControls = {\n from: { Time: fromTime, Date: fromDate },\n to: { Time: toTime, Date: toDate }\n };\n this.rangeControls = borders.flatMap((border) => this.borderHalves(border));\n\n borders.forEach((border) =>\n halves.forEach((half) =>\n this.borderControls[border][half].addValidators(this.borderValidator(border, half))\n )\n );\n\n if (this.editorBridge) this.editorBridge.revealErrors = () => this.revealErrors();\n\n this.form.valueChanges\n .pipe(\n map((formValue) => formValue.type),\n distinctUntilChanged(),\n takeUntilDestroyed()\n )\n .subscribe((type) => this.syncRangeControlsDisabledState(type));\n\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((formValue) => {\n // Each half is checked against its sibling, so editing one has to re-run the other. Silent,\n // or this would re-enter through `valueChanges`.\n this.revalidateRange();\n\n const range = this.mapTimeRange(formValue);\n\n if (range) this.onChange(range);\n });\n }\n\n ngOnInit(): void {\n const defaultRangeValue = this.rangeValue();\n const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n this.form.setValue({\n type: (availableTimeRangeTypes.length && availableTimeRangeTypes[0]) || 'range',\n fromTime: defaultRangeValue.fromTime,\n fromDate: defaultRangeValue.fromDate,\n toTime: defaultRangeValue.toTime,\n toDate: defaultRangeValue.toDate\n });\n }\n\n /** @docs-private */\n validate(): ValidationErrors | null {\n return this.concatControlValidationErrors();\n }\n\n /** Implemented as part of ControlValueAccessor */\n writeValue(value?: KbqTimeRangeRange): void {\n // Untracked, as `setDisabledState()`: a form control set from a consumer's `effect()` writes here on the\n // spot, and the inputs and bounds read on the way, by the validators too, would make the effect run again.\n untracked(() => this.applyValue(value));\n }\n\n /** Body of `writeValue()`. */\n private applyValue(value?: KbqTimeRangeRange): void {\n if (!value) return;\n\n const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n value,\n this.availableTimeRangeTypes(),\n this.form.value\n );\n\n this.form.controls.type.setValue(corrected.type);\n\n if (corrected.type === 'range' && corrected.startDateTime && corrected.endDateTime) {\n const { dateAdapter } = this.timeRangeService;\n // An unparseable end leaves its halves empty, which the border validators then report.\n const from = dateAdapter.deserialize(corrected.startDateTime)!;\n const to = dateAdapter.deserialize(corrected.endDateTime)!;\n\n this.form.patchValue({\n fromTime: from,\n fromDate: from,\n toTime: to,\n toDate: to\n });\n }\n }\n\n /** @docs-private */\n onChange = (_value: KbqTimeRangeRange) => {};\n /** @docs-private */\n onTouch = () => {};\n /** Implemented as part of ControlValueAccessor */\n registerOnChange(fn: (value: KbqTimeRangeRange) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n /**\n * The editor counts as left only once focus is out of it entirely. Moving between its own fields -\n * the two halves of a border, or from a border to the radio that drives it - is still editing, and\n * a `focusout` fires for each of those moves.\n *\n * @docs-private\n */\n protected onEditorFocusOut({ currentTarget, relatedTarget }: FocusEvent): void {\n if (this.staysWithin(currentTarget as HTMLElement, relatedTarget as HTMLElement | null)) return;\n\n this.onTouch();\n }\n\n /**\n * Leaving one border reports what is wrong with it. Angular marks a control touched on its own blur,\n * which is a finer grain than the spec asks for - so moving between a border's own date and time\n * takes the touch back off, and the pair is judged only once focus is out of both.\n *\n * @docs-private\n */\n protected onBorderFocusOut(border: RangeBorder, { currentTarget, relatedTarget }: FocusEvent): void {\n this.setBorderTouched(\n border,\n !this.staysWithin(currentTarget as HTMLElement, relatedTarget as HTMLElement | null)\n );\n }\n\n /**\n * Typing puts a border back to its neutral state, the way `validation-on-blur` does for a single\n * field. What is wrong with it is said again when focus leaves it.\n *\n * @docs-private\n */\n protected onBorderInput(border: RangeBorder): void {\n this.setBorderTouched(border, false);\n }\n\n /**\n * What is said when the range as a whole has left the bounds. Said once, below the last of the two\n * ends, and only when both of them are at fault: a single end out of bounds is already pointed at by\n * the fields painted around it. Silent until the ends have been left, keeping step with that\n * painting.\n *\n * @docs-private\n */\n protected outOfBoundsMessage(): string {\n const bothOutOfBounds = borders.every((border) =>\n this.borderHalves(border).some((control) => control.touched && !!control.errors?.kbqTimeRangeOutOfBounds)\n );\n\n if (!bothOutOfBounds) return '';\n\n return this.localeConfiguration().editor.outOfBoundsError.replace('{{ value }}', this.boundsHint());\n }\n\n /**\n * Once focus leaves the manual range fields, a reversed range is silently swapped back into order -\n * except on the way to \"apply\", where the swap is left to the emitted value so that the popover does\n * not visibly reorder itself in the same gesture that closes it.\n *\n * @docs-private\n */\n protected onRangeFocusOut({ currentTarget, relatedTarget }: FocusEvent): void {\n const next = relatedTarget as HTMLElement | null;\n\n if (this.staysWithin(currentTarget as HTMLElement, next)) return;\n\n // Safari reports a `null` `relatedTarget` for a click on a button, so the footer is recognised by\n // the pointer gesture it started rather than by where focus went.\n if (this.editorBridge?.applyGestureInProgress || next?.closest('.kbq-time-range__buttons')) return;\n\n // Focus went nowhere because the whole window lost it - the user is still mid-edit.\n if (!next && !this.document.hasFocus()) return;\n\n this.swapIfReversed();\n }\n\n /**\n * Reveals both borders and sends the user to the first field at fault, reporting whether there is\n * anything to fix at all.\n */\n private revealErrors(): boolean {\n this.applyAttempted = true;\n // `applyAttempted` is read by the validators, so they have to be run again before anything is said\n // about the result.\n this.revalidateRange();\n borders.forEach((border) => this.setBorderTouched(border, true));\n\n const firstInvalid = borders\n .flatMap((border) => halves.map((half) => ({ border, half })))\n .find(({ border, half }) => this.borderControls[border][half].invalid);\n\n if (!firstInvalid) return true;\n\n // The only place the two halves of a name are put back together, and it builds a selector rather\n // than a control key: the attribute in the template is spelled the same way.\n this.elementRef.nativeElement\n .querySelector<HTMLInputElement>(`[data-time-range-field=\"${firstInvalid.border}${firstInvalid.half}\"]`)\n ?.focus();\n\n return false;\n }\n\n /** Whether a bound is a moment within its day rather than the day itself. */\n private carriesTime(date: T): boolean {\n const { dateAdapter } = this.timeRangeService;\n\n return !!(dateAdapter.getHours(date) || dateAdapter.getMinutes(date) || dateAdapter.getSeconds(date));\n }\n\n /** Whether focus is still inside `group`, counting the datepicker calendar as part of it. */\n private staysWithin(group: HTMLElement, next: HTMLElement | null): boolean {\n // The calendar is rendered in a separate overlay, so focus moving into it is still editing.\n return group.contains(next) || !!next?.closest('.kbq-datepicker__popup');\n }\n\n /** Both halves of a border are painted, or neither: the pair is what the user is judged on. */\n private setBorderTouched(border: RangeBorder, touched: boolean): void {\n this.borderHalves(border).forEach((control) => {\n if (touched) {\n control.markAsTouched();\n } else {\n control.markAsUntouched();\n }\n });\n }\n\n /** Both halves of one end, in the order they are painted. */\n private borderHalves(border: RangeBorder): FormControl<T>[] {\n return halves.map((half) => this.borderControls[border][half]);\n }\n\n /** Each half is checked against its sibling, so a change to one has to re-run the other. */\n private revalidateRange(): void {\n this.rangeControls.forEach((control) => control.updateValueAndValidity({ emitEvent: false }));\n }\n\n private swapIfReversed(): void {\n if (this.hasBorderProblem()) return;\n\n const { fromTime, fromDate, toTime, toDate } = this.form.getRawValue();\n\n if (!this.isReversed(fromDate, fromTime, toDate, toTime)) return;\n\n this.form.patchValue({ fromTime: toTime, fromDate: toDate, toTime: fromTime, toDate: fromDate });\n }\n\n /**\n * Whether anything about the borders would stop the range being saved. Deliberately blind to which\n * borders have been revealed: a swap rewrites the user's values, so it has to answer \"is this range\n * actually sound\", not \"has the user been shown the problem yet\".\n */\n private hasBorderProblem(): boolean {\n if (this.form.controls.type.value !== 'range') return false;\n\n // The validators run whether or not the user has been shown the result, so the controls already\n // hold the answer - including the pickers' own format errors.\n return this.rangeControls.some((control) => !!control.errors);\n }\n\n /**\n * What is wrong with each half of a border, whether or not the user has been shown it. A missing half\n * is flagged on its own; a bound is judged in two steps, so that the field actually at fault is the\n * one painted.\n */\n private borderErrors(border: RangeBorder): Record<BorderHalf, ValidationErrors | null> {\n const { value: date } = this.borderControls[border].Date;\n const { value: time } = this.borderControls[border].Time;\n\n if (!date && !time) {\n const error = this.applyAttempted ? { kbqTimeRangeRequired: true } : null;\n\n return { Date: error, Time: error };\n }\n\n // Only the missing half is painted, so the user is pointed at the field to fill in.\n if (!date || !time) {\n const error = { kbqTimeRangeIncomplete: true };\n\n return { Date: date ? null : error, Time: time ? null : error };\n }\n\n const outOfBounds = this.checkBorderBounds(date, time);\n\n if (!outOfBounds) return { Date: null, Time: null };\n\n const error = { kbqTimeRangeOutOfBounds: { bound: outOfBounds.bound } };\n\n // A day outside the bounds is wrong whatever time sits next to it, so both halves are painted.\n // A day on the boundary itself can only be pushed out by its time, so only the time is.\n return { Date: outOfBounds.scope === 'date' ? error : null, Time: error };\n }\n\n /** Which bound a border falls outside of, and whether its day or only its time is to blame. */\n private checkBorderBounds(date: T, time: T): { bound: 'min' | 'max'; scope: 'date' | 'time' } | null {\n const service = this.timeRangeService;\n const { dateAdapter } = service;\n const minDate = service.minDate();\n const maxDate = service.maxDate();\n\n if (minDate && dateAdapter.compareDate(date, minDate) < 0) return { bound: 'min', scope: 'date' };\n\n if (maxDate && dateAdapter.compareDate(date, maxDate) > 0) return { bound: 'max', scope: 'date' };\n\n const combined = service.combineDateAndTime(date, time);\n\n if (minDate && dateAdapter.compareDateTime(combined, minDate) < 0) return { bound: 'min', scope: 'time' };\n\n if (maxDate && dateAdapter.compareDateTime(combined, maxDate) > 0) return { bound: 'max', scope: 'time' };\n\n return null;\n }\n\n private isReversed(fromDate: T, fromTime: T, toDate: T, toTime: T): boolean {\n if (!fromDate || !fromTime || !toDate || !toTime) return false;\n\n const service = this.timeRangeService;\n\n return (\n service.dateAdapter.compareDateTime(\n service.combineDateAndTime(fromDate, fromTime),\n service.combineDateAndTime(toDate, toTime)\n ) > 0\n );\n }\n\n /**\n * A border reports only what the pickers do not: an empty half next to a filled one, a border left\n * wholly empty once \"apply\" was pressed, and a border outside the bounds. Format is the pickers' own\n * business, and so is the calendar restriction.\n */\n private borderValidator(border: RangeBorder, half: BorderHalf): ValidatorFn {\n return (): ValidationErrors | null => {\n if (this.form.controls.type.value !== 'range') return null;\n\n return this.borderErrors(border)[half];\n };\n }\n\n /** Implemented as part of ControlValueAccessor */\n setDisabledState(isDisabled: boolean): void {\n untracked(() => {\n if (isDisabled) {\n this.form.disable({ emitEvent: false });\n } else {\n this.form.enable({ emitEvent: false });\n // `enable()` reaches every control, including the from/to pair a preset type keeps disabled.\n this.syncRangeControlsDisabledState(this.form.controls.type.value);\n }\n });\n }\n\n /** The from/to pair is only editable while the `range` type is selected. */\n private syncRangeControlsDisabledState(type: KbqTimeRangeType | undefined): void {\n const isDisabled = type !== 'range';\n\n this.rangeControls.forEach((control) => {\n if (isDisabled) {\n control.disable({ emitEvent: false });\n } else {\n control.enable({ emitEvent: false });\n }\n });\n }\n\n private mapTimeRange({ type }: Partial<KbqTimeRangeTypeContext> & KbqRangeValue<T>): KbqTimeRangeRange | undefined {\n if (!type) return;\n\n const { fromTime, fromDate, toTime, toDate } = this.form.getRawValue();\n // Ordered here as well as on blur, so that pressing \"apply\" straight out of a reversed field is\n // safe. A range with something wrong in it is left exactly as typed: it cannot be saved anyway,\n // and reordering it would move the fields out from under the user while they fix it.\n const ordered =\n !this.hasBorderProblem() && this.isReversed(fromDate, fromTime, toDate, toTime)\n ? { fromTime: toTime, fromDate: toDate, toTime: fromTime, toDate: fromDate }\n : { fromTime, fromDate, toTime, toDate };\n\n return { type, ...this.timeRangeService.calculateTimeRange(type, ordered) };\n }\n\n private getFormattedOption(type: KbqTimeRangeType, localeConfig: KbqTimeRangeLocaleConfiguration): string {\n const translationType = this.timeRangeService.getTimeRangeUnitByType(type);\n\n if (translationType === 'other') return '';\n\n const range = this.timeRangeService.calculateTimeRange(type);\n\n return this.timeRangeService.dateFormatter.duration(\n this.timeRangeService.dateAdapter.deserialize(range.startDateTime!)!,\n this.timeRangeService.dateAdapter.today(),\n [translationType],\n false,\n localeConfig.durationTemplate.option\n );\n }\n\n private concatControlValidationErrors(): ValidationErrors | null {\n let result: ValidationErrors | null = null;\n\n Object.values(this.form.controls).forEach((control: AbstractControl) => {\n if (control.errors) {\n result = {\n ...result,\n ...control.errors\n };\n }\n });\n\n return result;\n }\n}\n","<form [formGroup]=\"form\">\n @let localeConfig = localeConfiguration();\n @let types = timeRangeTypesWithoutRange();\n @let bounds = boundsHint();\n\n <!-- The radiogroup holds only radios: the from/to block is its sibling rather than its child, so the\n text fields and the calendar button are not announced as part of the group. -->\n <div class=\"kbq-time-range-editor__container\">\n @if (types.length) {\n <kbq-radio-group [formControl]=\"form.controls.type\">\n <div class=\"kbq-time-range-editor__predefined\">\n @for (type of types; track type) {\n <kbq-radio-button class=\"kbq-time-range-editor__predefined-option\" [value]=\"type.type\">\n <ng-container\n *ngTemplateOutlet=\"\n optionTemplate() || defaultOptionTemplate;\n context: { $implicit: type }\n \"\n />\n </kbq-radio-button>\n }\n </div>\n\n @if (isRangeVisible()) {\n <kbq-radio-button class=\"kbq-time-range-editor__range-option\" [value]=\"'range'\">\n {{ localeConfig.editor.rangeLabel }}\n @if (bounds) {\n <kbq-hint>{{ bounds }}</kbq-hint>\n }\n </kbq-radio-button>\n }\n </kbq-radio-group>\n }\n\n @if (isRangeVisible()) {\n <div\n class=\"kbq-time-range-editor__range\"\n role=\"group\"\n [attr.aria-label]=\"localeConfig.editor.rangeLabel\"\n (focusout)=\"onRangeFocusOut($event)\"\n >\n <div\n class=\"kbq-time-range-editor__date-time\"\n (input)=\"onBorderInput('from')\"\n (focusout)=\"onBorderFocusOut('from', $event)\"\n >\n <span class=\"kbq-time-range-editor__date-time-prefix\" [id]=\"fromLabelId\">\n {{ localeConfig.editor.from }}\n </span>\n <kbq-fieldset>\n <kbq-form-field kbqFieldsetItem>\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n <input\n kbqTimepicker\n data-time-range-field=\"fromTime\"\n [attr.aria-labelledby]=\"fromLabelId\"\n [format]=\"timepickerFormat\"\n [formControl]=\"form.controls.fromTime\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n </kbq-form-field>\n\n <kbq-form-field>\n <input\n data-time-range-field=\"fromDate\"\n [attr.aria-labelledby]=\"fromLabelId\"\n [kbqDatepicker]=\"datepickerFrom\"\n [formControl]=\"form.controls.fromDate\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerFrom\" />\n <kbq-datepicker #datepickerFrom [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n </kbq-form-field>\n </kbq-fieldset>\n </div>\n\n <div\n class=\"kbq-time-range-editor__date-time\"\n (input)=\"onBorderInput('to')\"\n (focusout)=\"onBorderFocusOut('to', $event)\"\n >\n <span class=\"kbq-time-range-editor__date-time-prefix\" [id]=\"toLabelId\">\n {{ localeConfig.editor.to }}\n </span>\n <kbq-fieldset>\n <kbq-form-field kbqFieldsetItem>\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n <input\n kbqTimepicker\n data-time-range-field=\"toTime\"\n [attr.aria-labelledby]=\"toLabelId\"\n [format]=\"timepickerFormat\"\n [formControl]=\"form.controls.toTime\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n </kbq-form-field>\n\n <kbq-form-field>\n <input\n data-time-range-field=\"toDate\"\n [attr.aria-labelledby]=\"toLabelId\"\n [kbqDatepicker]=\"datepickerTo\"\n [formControl]=\"form.controls.toDate\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerTo\" />\n <kbq-datepicker #datepickerTo [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n </kbq-form-field>\n\n <!-- The range is judged as a whole, so what is wrong with it is said once, below the\n last of its two ends - in place of the caption, which spells the same bounds out. -->\n @if (outOfBoundsMessage(); as message) {\n <kbq-error>{{ message }}</kbq-error>\n } @else if (!types.length && bounds) {\n <!-- With no presets there is no option to hang the bounds off, so they go in the\n fieldset's own hint area rather than loose in the block. -->\n <kbq-hint>{{ bounds }}</kbq-hint>\n }\n </kbq-fieldset>\n </div>\n </div>\n }\n </div>\n</form>\n\n<ng-template #defaultOptionTemplate let-context>\n @let localeConfig = localeConfiguration();\n @switch (context.translationType) {\n @case ('other') {\n @switch (context.type) {\n @case ('allTime') {\n {{ localeConfig.editor.allTimeOption ?? localeConfig.editor.allTime }}\n }\n @case ('currentQuarter') {\n {{ localeConfig.editor.currentQuarterOption ?? localeConfig.editor.currentQuarter }}\n }\n @case ('currentYear') {\n {{ localeConfig.editor.currentYearOption ?? localeConfig.editor.currentYear }}\n }\n }\n }\n @default {\n {{ context.formattedValue }}\n }\n }\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n Injector,\n input,\n TemplateRef\n} from '@angular/core';\nimport { KbqTimeRangeLocaleConfiguration } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqLink, KbqLinkSuffix } from '@koobiq/components/link';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqTimeRangeCustomizableTitleContext, KbqTimeRangeRange, KbqTimeRangeTitleContext } from './types';\n\n/** @docs-private */\n@Component({\n selector: 'kbq-time-range-title',\n imports: [\n NgTemplateOutlet,\n KbqLink,\n KbqLinkSuffix,\n KbqIconModule\n ],\n template: `\n @if (titleTemplate()) {\n <ng-container *ngTemplateOutlet=\"titleTemplate()!; context: titleContext() ?? null; injector: injector\" />\n } @else {\n <a kbqLink pseudo size=\"normal\" [disabled]=\"disabled()\">\n {{ formattedDate() }}\n <i kbq-icon=\"kbq-calendar-o_16\" kbqLinkSuffix></i>\n </a>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqTimeRangeTitle {\n private readonly timeRangeService = inject(KbqTimeRangeService);\n private readonly popover = inject(KbqPopoverTrigger, { host: true });\n protected readonly injector = inject(Injector);\n\n readonly timeRange = input.required<KbqTimeRangeRange | null>();\n readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfiguration>();\n readonly titleTemplate = input<TemplateRef<any>>();\n /** Drops the built-in trigger out of the tab order. A custom `titleTemplate` owns its own state. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly context = computed<KbqTimeRangeTitleContext | undefined>(() => {\n const timeRange = this.timeRange();\n\n if (!timeRange) return undefined;\n\n return {\n ...timeRange,\n ...this.timeRangeService.getTimeRangeTypeUnits(timeRange.type)\n };\n });\n\n protected readonly titleContext = computed<KbqTimeRangeCustomizableTitleContext | undefined>(() => {\n const context = this.context();\n const formattedDate = this.formattedDate();\n\n let customizableTitleContext = { formattedDate, popover: this.popover };\n\n if (context) {\n customizableTitleContext = { ...context, ...customizableTitleContext };\n }\n\n return {\n $implicit: customizableTitleContext,\n ...customizableTitleContext\n };\n });\n\n protected readonly formattedDate = computed(() => {\n const context = this.context();\n const localeConfiguration = this.localeConfiguration();\n\n if (!context) {\n return localeConfiguration.title.placeholder;\n }\n\n const timeRangeUnit = this.timeRangeService.getTimeRangeUnitByType(context.type);\n\n if (timeRangeUnit === 'other') {\n switch (context.type) {\n case 'range': {\n return this.timeRangeService.dateFormatter.rangeLongDate(\n this.timeRangeService.dateAdapter.deserialize(context.startDateTime ?? ''),\n this.timeRangeService.dateAdapter.deserialize(context.endDateTime ?? '')\n );\n }\n case 'allTime': {\n return localeConfiguration.editor.allTime;\n }\n case 'currentQuarter': {\n return localeConfiguration.editor.currentQuarter;\n }\n case 'currentYear': {\n return localeConfiguration.editor.currentYear;\n }\n default: {\n return '';\n }\n }\n }\n\n if (!context.startDateTime) return '';\n\n return this.timeRangeService.dateFormatter.duration(\n this.timeRangeService.dateAdapter.deserialize(context.startDateTime),\n this.timeRangeService.dateAdapter.today(),\n [timeRangeUnit],\n false,\n localeConfiguration.durationTemplate.title\n );\n });\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n InjectionToken,\n input,\n OnInit,\n output,\n Provider,\n Signal,\n signal,\n TemplateRef,\n untracked,\n ViewEncapsulation,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n KbqDeepPartial,\n kbqLocaleConfigurationOverrideProvider,\n KbqLocaleOverridesDirective,\n KbqTimeRangeLocaleConfiguration,\n PopUpPlacements,\n PopUpSizes,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { fromEvent } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeEditorBridge } from './time-range-editor-bridge';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n KbqRangeValue,\n KbqTimeRangeCustomizableTitleContext,\n KbqTimeRangeOptionContext,\n KbqTimeRangeRange,\n KbqTimeRangeType\n} from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_TIME_RANGE_LOCALE_CONFIGURATION = new InjectionToken<KbqTimeRangeLocaleConfiguration>(\n 'KbqTimeRangeLocaleConfiguration',\n { factory: () => ruRULocaleData.timeRange }\n);\n\n/**\n * Utility provider for `KBQ_TIME_RANGE_LOCALE_CONFIGURATION`. Only the strings you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqTimeRangeLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqTimeRangeLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('timeRange', configuration);\n\n@Component({\n selector: 'kbq-time-range',\n imports: [\n ReactiveFormsModule,\n KbqPopoverModule,\n KbqButtonModule,\n KbqTimeRangeEditor,\n KbqTimeRangeTitle\n ],\n template: `\n @let localeConfig = localeConfiguration();\n <kbq-time-range-title\n #popover=\"kbqPopover\"\n class=\"kbq-time-range__trigger\"\n kbqPopover\n kbqPopoverClass=\"kbq-time-range__popover\"\n [kbqPopoverSize]=\"popoverSize\"\n [kbqPopoverContent]=\"timeRangePopoverContent\"\n [kbqPopoverFooter]=\"timeRangePopoverFooter\"\n [kbqPopoverPlacement]=\"popupPlacement\"\n [kbqPopoverArrow]=\"arrow()\"\n [kbqPopoverDisabled]=\"disabled()\"\n [titleTemplate]=\"titleTemplate()\"\n [timeRange]=\"titleValue()\"\n [disabled]=\"disabled()\"\n [localeConfiguration]=\"localeConfig\"\n (kbqPopoverVisibleChange)=\"onVisibleChange($event)\"\n />\n\n <ng-template #timeRangePopoverContent>\n <kbq-time-range-editor\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [formControl]=\"rangeEditorControl\"\n [localeConfiguration]=\"localeConfig\"\n [showRangeAsDefault]=\"showRangeAsDefault()\"\n [rangeValue]=\"normalizedDefaultRangeValue()\"\n [availableTimeRangeTypes]=\"availableTimeRangeTypes()\"\n [optionTemplate]=\"optionTemplate()\"\n />\n </ng-template>\n\n <ng-template #timeRangePopoverFooter>\n <!-- The grouping is purely visual: an unnamed role=group only added a boundary. -->\n <div class=\"kbq-time-range__buttons\" (mousedown)=\"onFooterPointerDown()\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"onApply(popover)\">\n {{ localeConfig.editor.apply }}\n </button>\n\n <button kbq-button (click)=\"onCancel(popover)\">{{ localeConfig.editor.cancel }}</button>\n </div>\n </ng-template>\n `,\n styleUrls: ['./time-range.scss'],\n providers: [KbqTimeRangeService, KbqTimeRangeEditorBridge],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-time-range',\n '[class.kbq-disabled]': 'disabled()'\n },\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ]\n})\nexport class KbqTimeRange<T> implements ControlValueAccessor, OnInit {\n private readonly timeRangeService = inject<KbqTimeRangeService<T>>(KbqTimeRangeService);\n private readonly editorBridge = inject(KbqTimeRangeEditorBridge);\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n /** @docs-private */\n readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /** The earliest date the calendars offer and the validation accepts. */\n readonly minDate = input<T>();\n /** The latest date the calendars offer and the validation accepts. */\n readonly maxDate = input<T>();\n /** Seeds the from/to pair of the manual range. */\n readonly defaultRangeValue = input<KbqRangeValue<T>>();\n /** The options the editor offers, in order. The first one is selected by default. */\n readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n /** Replaces the built-in trigger. */\n readonly titleTemplate = input<TemplateRef<KbqTimeRangeCustomizableTitleContext>>();\n /** Replaces the built-in rendering of an option in the editor. */\n readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n /** Whether the popover is drawn with an arrow. */\n readonly arrow = input(true, { transform: booleanAttribute });\n\n /**\n * Keeps the manual range visible even when `range` is not in {@link availableTimeRangeTypes}.\n */\n readonly showRangeAsDefault = input(true);\n /** Falls back to a default value instead of holding `null`. */\n readonly nonNullable = input(true, { transform: booleanAttribute });\n\n /** Emits the corrected value when the provided one could not be used as is. */\n readonly valueCorrected = output<KbqTimeRangeRange>();\n\n /**\n * Used to calculate time range.\n *\n * @docs-private\n */\n protected readonly normalizedDefaultRangeValue = computed(() => ({\n ...this.timeRangeService.getDefaultRangeValue(),\n ...this.defaultRangeValue()\n }));\n\n /** @docs-private */\n protected readonly titleValue: WritableSignal<KbqTimeRangeRange | null>;\n /** @docs-private */\n protected readonly rangeEditorControl: FormControl<KbqTimeRangeRange>;\n\n private readonly disabledState = signal(false);\n\n /**\n * The applied time range, or `null` when the component is nullable and holds no value.\n *\n * This is what the trigger renders, so it lags the editor until Apply.\n */\n readonly value: Signal<KbqTimeRangeRange | null> = computed(() => this.titleValue());\n\n /** Whether the control is disabled through the forms layer. */\n readonly disabled: Signal<boolean> = this.disabledState.asReadonly();\n\n /** @docs-private */\n protected readonly popoverSize = PopUpSizes.Medium;\n /** @docs-private */\n protected readonly popupPlacement = PopUpPlacements.BottomLeft;\n\n /** @docs-private */\n protected readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'timeRange',\n KBQ_TIME_RANGE_LOCALE_CONFIGURATION\n );\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.timeRangeService.bindBounds(this.minDate, this.maxDate);\n\n const defaultValue = this.timeRangeService.getTimeRangeDefaultValue(\n this.normalizedDefaultRangeValue(),\n this.availableTimeRangeTypes()\n );\n\n this.titleValue = signal(this.nonNullable() ? defaultValue : null);\n this.rangeEditorControl = new FormControl<KbqTimeRangeRange>(defaultValue, { nonNullable: true });\n\n toObservable(this.availableTimeRangeTypes)\n .pipe(takeUntilDestroyed())\n .subscribe(this.handleAvailableTypesChange);\n }\n\n ngOnInit(): void {\n // call again on init, so input signals values will be correct\n this.writeValue(this.ngControl?.value ?? null);\n }\n\n /** Implemented as part of ControlValueAccessor */\n writeValue(value: KbqTimeRangeRange | null): void {\n // Untracked, as `setDisabledState()`: a form control set from a consumer's `effect()` writes here on the\n // spot, and the inputs read on the way — and the editor's bounds, through its validators — would make the\n // effect run again.\n untracked(() => this.applyValue(value));\n }\n\n /** Body of `writeValue()`. */\n private applyValue(value: KbqTimeRangeRange | null): void {\n const nonNullable = this.nonNullable();\n\n const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n value,\n availableTimeRangeTypes,\n this.normalizedDefaultRangeValue()\n );\n\n if (this.wasCorrected(value, corrected)) {\n this.valueCorrected.emit(corrected);\n }\n\n this.titleValue.set(nonNullable || value !== null ? corrected : null);\n this.rangeEditorControl.setValue(corrected);\n }\n\n /**\n * Lets the editor tell an \"apply\" gesture from a plain focus loss before the click even lands - the\n * `focusout` it reacts to is dispatched between this `mousedown` and the `click` below.\n *\n * @docs-private\n */\n protected onFooterPointerDown(): void {\n this.editorBridge.applyGestureInProgress = true;\n\n fromEvent(this.document, 'mouseup')\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => (this.editorBridge.applyGestureInProgress = false));\n }\n\n /**\n * Whether the correction pass produced a different range than the one written.\n *\n * Comparing the outcome rather than the shape of the input keeps presets that legitimately carry\n * no `startDateTime` - `allTime` resolves to `{}` unless a consumer supplies a range - from\n * reporting a correction that never happened, and looping any host that writes the payload back.\n */\n private wasCorrected(value: KbqTimeRangeRange | null, corrected: KbqTimeRangeRange): boolean {\n if (value === null) return this.nonNullable();\n\n return (\n value.type !== corrected.type ||\n value.startDateTime !== corrected.startDateTime ||\n value.endDateTime !== corrected.endDateTime\n );\n }\n\n /**\n * Applying is always offered; an invalid editor keeps the popover open and sends the user to the\n * first field at fault instead.\n *\n * @docs-private\n */\n onApply(popover: KbqPopoverTrigger): void {\n this.editorBridge.applyGestureInProgress = false;\n\n if (!this.editorBridge.revealErrors()) return;\n\n this.titleValue.set(this.rangeEditorControl.value);\n this.onChange(this.rangeEditorControl.value);\n popover.hide();\n }\n\n /** @docs-private */\n onCancel(popover: KbqPopoverTrigger): void {\n this.editorBridge.applyGestureInProgress = false;\n popover.hide();\n }\n\n onVisibleChange(isVisible: boolean) {\n if (isVisible) return;\n\n // A pointer held on the footer when the popover went away - a release outside the window, say -\n // would otherwise leave the gesture marked as in flight, and the next focusout out of the range\n // would be read as an apply and skip the swap.\n this.editorBridge.applyGestureInProgress = false;\n\n // Closing throws the edits away, applied or not. With nothing on the trigger yet there is no value\n // to go back to, so the editor returns to its default - otherwise an abandoned edit, which may well\n // be one the editor refused to apply, would be waiting the next time it opens.\n this.rangeEditorControl.setValue(this.titleValue() ?? this.defaultEditorValue(this.availableTimeRangeTypes()));\n\n // Closing the popover is the point the user is done with the control, whether they applied\n // or cancelled - every ErrorStateMatcher in the library keys error display off `touched`.\n this.onTouch();\n }\n\n /** @docs-private */\n onChange = (_value: KbqTimeRangeRange) => {};\n /** @docs-private */\n onTouch = () => {};\n /** Implemented as part of ControlValueAccessor */\n registerOnChange(fn: (_value: KbqTimeRangeRange) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n /** What the editor opens on: the first offered type, or a plain range when none are offered. */\n private defaultEditorValue(types: KbqTimeRangeType[]): KbqTimeRangeRange {\n return this.timeRangeService.getTimeRangeDefaultValue(\n this.normalizedDefaultRangeValue(),\n types.length ? types : ['range']\n );\n }\n\n /** Implemented as part of ControlValueAccessor */\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n\n untracked(() => {\n if (isDisabled) {\n this.rangeEditorControl.disable({ emitEvent: false });\n } else {\n this.rangeEditorControl.enable({ emitEvent: false });\n }\n });\n }\n\n private handleAvailableTypesChange = (types: KbqTimeRangeType[]): void => {\n if (types.includes(this.rangeEditorControl.value.type) || this.rangeEditorControl.value.type === 'range') {\n return;\n }\n\n const timeRangeDefaultValue = this.defaultEditorValue(types);\n\n // The editor still needs something to open on, whether or not the trigger shows a value.\n this.rangeEditorControl.setValue(timeRangeDefaultValue);\n\n // A nullable trigger that has never been given a value keeps its placeholder: replacing the types\n // is not the user picking a range, and emitting here would put one into the bound control.\n if (!this.nonNullable() && this.titleValue() === null) return;\n\n this.titleValue.set(timeRangeDefaultValue);\n this.onChange(timeRangeDefaultValue);\n };\n}\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n DoCheck,\n ElementRef,\n inject,\n Signal,\n signal\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm, Validators } from '@angular/forms';\nimport { ErrorStateMatcher, KbqErrorStateTracker } from '@koobiq/components/core';\nimport { KBQ_FORM_FIELD, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { KbqTimeRange } from './time-range';\nimport { KbqTimeRangeRange } from './types';\n\n/** Directive for easy using styles of time-range placeholder publicly. */\n@Directive({\n selector: '[kbqTimeRangeTitlePlaceholder]',\n host: {\n class: 'kbq-time-range-title__placeholder'\n }\n})\nexport class KbqTimeRangeTitlePlaceholder {}\n\n/** Component simulates `KbqFormFieldControl` allowing to provide custom content inside `KbqFormField` */\n@Component({\n selector: 'kbq-time-range-title-as-control',\n template: `\n <ng-content />\n `,\n styles: `\n :host {\n display: flex;\n align-items: center;\n }\n\n :host(:focus-visible) {\n outline: none;\n }\n `,\n providers: [\n {\n provide: KbqFormFieldControl,\n useExisting: KbqTimeRangeTitleAsControl\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.tabindex]': 'disabled() ? null : 0',\n '[attr.id]': 'id()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\n class: 'kbq-time-range-title-as-form-field',\n '(focus)': 'focusedValue.set(true)',\n '(blur)': 'focusedValue.set(false)'\n }\n})\nexport class KbqTimeRangeTitleAsControl implements KbqFormFieldControl<KbqTimeRangeRange>, DoCheck {\n private readonly timeRange = inject(KbqTimeRange);\n private readonly parentFormField = inject(KBQ_FORM_FIELD, { host: true, optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly requiredValue = signal(false);\n /** @docs-private */\n protected readonly focusedValue = signal(false);\n\n /** @docs-private */\n readonly controlType = 'select';\n /** @docs-private */\n readonly isNativeLabelSupported = false;\n\n /**\n * Id of the `kbq-form-field` caption naming this control, when it has one.\n *\n * A `<label for>` does not associate with a custom element, so the relationship is expressed the\n * other way around — from the control to the label.\n *\n * @docs-private\n */\n protected readonly ariaLabelledby = computed(() => this.parentFormField?.labelId() ?? null);\n /** @docs-private */\n readonly ngControl: NgControl | null = this.timeRange.ngControl;\n\n private readonly errorStateTracker = new KbqErrorStateTracker(\n inject(ErrorStateMatcher),\n this.ngControl,\n inject(FormGroupDirective, { optional: true }),\n inject(NgForm, { optional: true })\n );\n\n /** @docs-private */\n readonly value: Signal<KbqTimeRangeRange | null> = this.timeRange.value;\n /** @docs-private */\n readonly id = signal(inject(_IdGenerator).getId('kbq-time-range-title-as-control-')).asReadonly();\n /** @docs-private */\n readonly placeholder = signal<string | undefined>(undefined).asReadonly();\n /** @docs-private */\n readonly focused = this.focusedValue.asReadonly();\n /** @docs-private */\n readonly empty = computed(() => this.timeRange.value() === null);\n /** @docs-private */\n readonly required = this.requiredValue.asReadonly();\n /** @docs-private */\n readonly disabled: Signal<boolean> = this.timeRange.disabled;\n /** @docs-private */\n readonly errorState = this.errorStateTracker.errorState;\n\n /**\n * The validators and the touched state of the bound control notify nothing a signal could follow.\n *\n * @docs-private\n */\n ngDoCheck(): void {\n this.errorStateTracker.updateErrorState();\n this.requiredValue.set(!!this.ngControl?.control?.hasValidator(Validators.required));\n }\n\n /** @docs-private */\n onContainerClick(_event: MouseEvent): void {\n this.focus();\n }\n\n /** @docs-private */\n focus(options?: FocusOptions): void {\n this.elementRef.nativeElement.focus(options);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqTimeRange } from './time-range';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeTitleAsControl, KbqTimeRangeTitlePlaceholder } from './time-range-title-as-form-field';\n\nconst COMPONENTS = [\n KbqTimeRange,\n KbqTimeRangeTitle,\n KbqTimeRangeEditor,\n KbqTimeRangeTitlePlaceholder,\n KbqTimeRangeTitleAsControl\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqTimeRangeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i4"],"mappings":"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"}