@ukic/canary-web-components 3.0.0-canary.32 → 3.0.0-canary.33

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 (307) hide show
  1. package/dist/cjs/core.cjs.js +1 -1
  2. package/dist/cjs/{helpers-6f4b406b.js → helpers-f81fed28.js} +37 -1
  3. package/dist/cjs/helpers-f81fed28.js.map +1 -0
  4. package/dist/cjs/ic-calendar_2.cjs.entry.js +2 -2
  5. package/dist/cjs/ic-calendar_2.cjs.entry.js.map +1 -1
  6. package/dist/cjs/ic-card-horizontal.cjs.entry.js +1 -1
  7. package/dist/cjs/ic-checkbox_3.cjs.entry.js +11 -7
  8. package/dist/cjs/ic-checkbox_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/ic-data-table-title-bar.cjs.entry.js +1 -1
  10. package/dist/cjs/ic-data-table.cjs.entry.js +11 -8
  11. package/dist/cjs/ic-data-table.cjs.entry.js.map +1 -1
  12. package/dist/cjs/ic-date-picker.cjs.entry.js +1 -1
  13. package/dist/cjs/ic-pagination_4.cjs.entry.js +8 -4
  14. package/dist/cjs/ic-pagination_4.cjs.entry.js.map +1 -1
  15. package/dist/cjs/ic-table-of-contents.cjs.entry.js +1 -1
  16. package/dist/cjs/ic-time-input.cjs.entry.js +401 -99
  17. package/dist/cjs/ic-time-input.cjs.entry.js.map +1 -1
  18. package/dist/cjs/ic-time-selector.cjs.entry.js +842 -0
  19. package/dist/cjs/ic-time-selector.cjs.entry.js.map +1 -0
  20. package/dist/cjs/{ic-toggle-button.cjs.entry.js → ic-toggle-button_2.cjs.entry.js} +274 -1
  21. package/dist/cjs/ic-toggle-button_2.cjs.entry.js.map +1 -0
  22. package/dist/cjs/ic-tree-item.cjs.entry.js +3 -3
  23. package/dist/cjs/ic-tree-view.cjs.entry.js +4 -4
  24. package/dist/cjs/index-d337cd8a.js +8 -8
  25. package/dist/cjs/loader.cjs.js +1 -1
  26. package/dist/collection/collection-manifest.json +1 -0
  27. package/dist/collection/components/ic-calendar/ic-calendar.css +8 -6
  28. package/dist/collection/components/ic-calendar/ic-calendar.stories.js +13 -0
  29. package/dist/collection/components/ic-calendar/ic-calendar.stories.js.map +1 -1
  30. package/dist/collection/components/ic-data-table/ic-data-table.js +10 -7
  31. package/dist/collection/components/ic-data-table/ic-data-table.js.map +1 -1
  32. package/dist/collection/components/ic-pagination-bar/ic-pagination-bar.js +30 -6
  33. package/dist/collection/components/ic-pagination-bar/ic-pagination-bar.js.map +1 -1
  34. package/dist/collection/components/ic-time-input/ic-time-input.css +21 -3
  35. package/dist/collection/components/ic-time-input/ic-time-input.js +434 -106
  36. package/dist/collection/components/ic-time-input/ic-time-input.js.map +1 -1
  37. package/dist/collection/components/ic-time-input/ic-time-input.stories.js +58 -9
  38. package/dist/collection/components/ic-time-input/ic-time-input.stories.js.map +1 -1
  39. package/dist/collection/components/ic-time-input/test/helpers/ic-time-input.js +2 -0
  40. package/dist/collection/components/ic-time-input/test/helpers/ic-time-input.js.map +1 -1
  41. package/dist/collection/components/ic-time-selector/ic-time-selector.css +293 -0
  42. package/dist/collection/components/ic-time-selector/ic-time-selector.js +1075 -0
  43. package/dist/collection/components/ic-time-selector/ic-time-selector.js.map +1 -0
  44. package/dist/collection/components/ic-time-selector/ic-time-selector.stories.js +166 -0
  45. package/dist/collection/components/ic-time-selector/ic-time-selector.stories.js.map +1 -0
  46. package/dist/collection/components/ic-time-selector/ic-time-selector.types.js +2 -0
  47. package/dist/collection/components/ic-time-selector/ic-time-selector.types.js.map +1 -0
  48. package/dist/collection/components/ic-tree-item/ic-tree-item.js +2 -2
  49. package/dist/collection/components/ic-tree-view/ic-tree-view.js +3 -3
  50. package/dist/collection/utils/helpers.js +35 -0
  51. package/dist/collection/utils/helpers.js.map +1 -1
  52. package/dist/collection/utils/types.js.map +1 -1
  53. package/dist/components/helpers2.js +36 -1
  54. package/dist/components/helpers2.js.map +1 -1
  55. package/dist/components/ic-calendar2.js +1 -1
  56. package/dist/components/ic-calendar2.js.map +1 -1
  57. package/dist/components/ic-data-table.js +10 -7
  58. package/dist/components/ic-data-table.js.map +1 -1
  59. package/dist/components/ic-pagination-bar2.js +11 -6
  60. package/dist/components/ic-pagination-bar2.js.map +1 -1
  61. package/dist/components/ic-pagination2.js +9 -4
  62. package/dist/components/ic-pagination2.js.map +1 -1
  63. package/dist/components/ic-time-input.js +431 -112
  64. package/dist/components/ic-time-input.js.map +1 -1
  65. package/dist/components/ic-time-selector.d.ts +11 -0
  66. package/dist/components/ic-time-selector.js +898 -0
  67. package/dist/components/ic-time-selector.js.map +1 -0
  68. package/dist/components/ic-toggle-button-group.js +1 -299
  69. package/dist/components/ic-toggle-button-group.js.map +1 -1
  70. package/dist/{esm/ic-toggle-button-group.entry.js → components/ic-toggle-button-group2.js} +70 -13
  71. package/dist/components/ic-toggle-button-group2.js.map +1 -0
  72. package/dist/components/ic-toggle-button.js +1 -228
  73. package/dist/components/ic-toggle-button.js.map +1 -1
  74. package/dist/{esm/ic-toggle-button.entry.js → components/ic-toggle-button2.js} +65 -10
  75. package/dist/components/ic-toggle-button2.js.map +1 -0
  76. package/dist/components/ic-tree-item.js +2 -2
  77. package/dist/components/ic-tree-view.js +4 -4
  78. package/dist/core/core.css +28 -6
  79. package/dist/core/core.esm.js +1 -1
  80. package/dist/core/core.esm.js.map +1 -1
  81. package/dist/core/{p-b80b08ae.entry.js → p-08f24329.entry.js} +2 -2
  82. package/dist/core/{p-615d474e.entry.js → p-14b8bf37.entry.js} +2 -2
  83. package/dist/core/{p-81f12581.entry.js → p-169ad948.entry.js} +2 -2
  84. package/dist/core/{p-847cbb16.entry.js → p-1d166343.entry.js} +2 -2
  85. package/dist/core/{p-b4bfaf8f.entry.js → p-201b41c7.entry.js} +2 -2
  86. package/dist/core/{p-24bac55f.entry.js → p-33509a89.entry.js} +2 -2
  87. package/dist/core/{p-e1920777.entry.js → p-3389625c.entry.js} +2 -2
  88. package/dist/core/{p-5a1cfb3c.entry.js → p-344752cb.entry.js} +2 -2
  89. package/dist/core/{p-6c238418.entry.js → p-348d7080.entry.js} +2 -2
  90. package/dist/core/{p-3ef2e98d.entry.js → p-39cdf5db.entry.js} +2 -2
  91. package/dist/core/{p-fd20470e.entry.js → p-496b314f.entry.js} +2 -2
  92. package/dist/core/{p-bd9a76d8.entry.js → p-508b6da3.entry.js} +2 -2
  93. package/dist/core/p-551a0fc1.entry.js +2 -0
  94. package/dist/core/p-551a0fc1.entry.js.map +1 -0
  95. package/dist/core/{p-f5cea10d.entry.js → p-5e6687a8.entry.js} +2 -2
  96. package/dist/core/{p-72171192.entry.js → p-60f4fe3a.entry.js} +2 -2
  97. package/dist/core/p-61c92598.entry.js +2 -0
  98. package/dist/core/p-61c92598.entry.js.map +1 -0
  99. package/dist/core/{p-e00e67ff.entry.js → p-6323da7a.entry.js} +2 -2
  100. package/dist/core/p-691dd972.entry.js +2 -0
  101. package/dist/core/p-691dd972.entry.js.map +1 -0
  102. package/dist/core/{p-c6c87e58.entry.js → p-6dfe0922.entry.js} +2 -2
  103. package/dist/core/p-71cc5909.entry.js +2 -0
  104. package/dist/core/p-71cc5909.entry.js.map +1 -0
  105. package/dist/core/{p-fd7f3b58.entry.js → p-770e92cd.entry.js} +2 -2
  106. package/dist/core/{p-7cf6b428.entry.js → p-79ead0e7.entry.js} +2 -2
  107. package/dist/core/{p-285892ef.entry.js → p-7b4b45cf.entry.js} +2 -2
  108. package/dist/core/{p-afedcfdb.entry.js → p-7efdbab8.entry.js} +2 -2
  109. package/dist/core/{p-96177a74.entry.js → p-802a4bd3.entry.js} +2 -2
  110. package/dist/core/p-829b34f9.js +2 -0
  111. package/dist/core/p-829b34f9.js.map +1 -0
  112. package/dist/core/{p-9a9605c3.entry.js → p-879c180d.entry.js} +2 -2
  113. package/dist/core/{p-3891ce53.entry.js → p-8830011c.entry.js} +2 -2
  114. package/dist/core/{p-444cd8d3.entry.js → p-8ab37b4d.entry.js} +2 -2
  115. package/dist/core/{p-c87cc0d1.entry.js → p-939025af.entry.js} +2 -2
  116. package/dist/core/{p-4992e9ac.entry.js → p-939b168a.entry.js} +2 -2
  117. package/dist/core/{p-5a4344cb.entry.js → p-9dea5764.entry.js} +2 -2
  118. package/dist/core/{p-af821831.entry.js → p-a88e61b2.entry.js} +2 -2
  119. package/dist/core/p-a88e61b2.entry.js.map +1 -0
  120. package/dist/core/{p-90611726.entry.js → p-a8a92e54.entry.js} +2 -2
  121. package/dist/core/{p-31f3fb15.entry.js → p-a94a7b71.entry.js} +2 -2
  122. package/dist/core/p-ad551a0c.entry.js +2 -0
  123. package/dist/core/p-ad551a0c.entry.js.map +1 -0
  124. package/dist/core/{p-ba75ed34.entry.js → p-b434bd7c.entry.js} +2 -2
  125. package/dist/core/{p-2188b483.entry.js → p-c0a7eed7.entry.js} +2 -2
  126. package/dist/core/{p-2bd2f38b.entry.js → p-c0b227d2.entry.js} +2 -2
  127. package/dist/core/{p-2646a629.entry.js → p-c32f043e.entry.js} +2 -2
  128. package/dist/core/{p-7a0f62c2.entry.js → p-c4b2774d.entry.js} +2 -2
  129. package/dist/core/{p-775b8dba.entry.js → p-c9525aac.entry.js} +2 -2
  130. package/dist/core/{p-7026afad.entry.js → p-ca05573a.entry.js} +2 -2
  131. package/dist/core/{p-8c580d88.entry.js → p-d0607a70.entry.js} +2 -2
  132. package/dist/core/{p-15c05eb8.entry.js → p-d528d856.entry.js} +2 -2
  133. package/dist/core/{p-0043b019.entry.js → p-da1c2883.entry.js} +2 -2
  134. package/dist/core/{p-ffc1cea6.entry.js → p-e2e556ec.entry.js} +2 -2
  135. package/dist/core/{p-e4ef4263.js → p-e519f607.js} +2 -2
  136. package/dist/core/{p-3f0bce15.entry.js → p-e5c6d01a.entry.js} +2 -2
  137. package/dist/core/{p-04a9f82f.entry.js → p-e8db8772.entry.js} +2 -2
  138. package/dist/core/{p-e4b82731.entry.js → p-ea04103e.entry.js} +2 -2
  139. package/dist/core/{p-9a95f428.entry.js → p-eaeb473e.entry.js} +2 -2
  140. package/dist/core/{p-8e592393.entry.js → p-ecc7fd71.entry.js} +2 -2
  141. package/dist/core/{p-6cfba272.entry.js → p-efe260f0.entry.js} +2 -2
  142. package/dist/core/{p-b6d6b26e.entry.js → p-f1b57f91.entry.js} +2 -2
  143. package/dist/core/{p-e4551a38.entry.js → p-f5dc04f7.entry.js} +2 -2
  144. package/dist/core/{p-25280383.entry.js → p-fb07921b.entry.js} +2 -2
  145. package/dist/core/p-fb07921b.entry.js.map +1 -0
  146. package/dist/core/{p-1900c7c7.entry.js → p-fd08156a.entry.js} +2 -2
  147. package/dist/core/{p-3594922d.entry.js → p-fe5b51bb.entry.js} +2 -2
  148. package/dist/core/{p-ef5b6622.entry.js → p-ff618439.entry.js} +2 -2
  149. package/dist/esm/core.js +1 -1
  150. package/dist/esm/{helpers-5419eb6c.js → helpers-063369f4.js} +2 -2
  151. package/dist/esm/{helpers-5419eb6c.js.map → helpers-063369f4.js.map} +1 -1
  152. package/dist/esm/{helpers-9f228880.js → helpers-a08b3f32.js} +37 -2
  153. package/dist/esm/helpers-a08b3f32.js.map +1 -0
  154. package/dist/esm/ic-accordion-group.entry.js +1 -1
  155. package/dist/esm/ic-accordion.entry.js +1 -1
  156. package/dist/esm/ic-action-chip.entry.js +1 -1
  157. package/dist/esm/ic-alert.entry.js +1 -1
  158. package/dist/esm/ic-back-to-top.entry.js +1 -1
  159. package/dist/esm/ic-badge.entry.js +1 -1
  160. package/dist/esm/ic-breadcrumb-group.entry.js +1 -1
  161. package/dist/esm/ic-breadcrumb.entry.js +1 -1
  162. package/dist/esm/ic-button_3.entry.js +1 -1
  163. package/dist/esm/ic-calendar_2.entry.js +2 -2
  164. package/dist/esm/ic-calendar_2.entry.js.map +1 -1
  165. package/dist/esm/ic-card-horizontal.entry.js +1 -1
  166. package/dist/esm/ic-card-vertical.entry.js +1 -1
  167. package/dist/esm/ic-checkbox-group.entry.js +1 -1
  168. package/dist/esm/ic-checkbox_3.entry.js +12 -8
  169. package/dist/esm/ic-checkbox_3.entry.js.map +1 -1
  170. package/dist/esm/ic-chip.entry.js +1 -1
  171. package/dist/esm/ic-data-row.entry.js +1 -1
  172. package/dist/esm/ic-data-table-title-bar.entry.js +1 -1
  173. package/dist/esm/ic-data-table.entry.js +11 -8
  174. package/dist/esm/ic-data-table.entry.js.map +1 -1
  175. package/dist/esm/ic-date-picker.entry.js +1 -1
  176. package/dist/esm/ic-dialog.entry.js +1 -1
  177. package/dist/esm/ic-divider.entry.js +1 -1
  178. package/dist/esm/ic-footer-link-group.entry.js +1 -1
  179. package/dist/esm/ic-footer-link.entry.js +1 -1
  180. package/dist/esm/ic-footer.entry.js +1 -1
  181. package/dist/esm/ic-hero.entry.js +1 -1
  182. package/dist/esm/ic-horizontal-scroll.entry.js +1 -1
  183. package/dist/esm/ic-input-component-container_4.entry.js +1 -1
  184. package/dist/esm/ic-link.entry.js +1 -1
  185. package/dist/esm/ic-menu-group.entry.js +1 -1
  186. package/dist/esm/ic-menu-item.entry.js +1 -1
  187. package/dist/esm/ic-menu.entry.js +1 -1
  188. package/dist/esm/ic-navigation-button.entry.js +1 -1
  189. package/dist/esm/ic-navigation-group.entry.js +1 -1
  190. package/dist/esm/ic-navigation-item.entry.js +1 -1
  191. package/dist/esm/ic-navigation-menu.entry.js +1 -1
  192. package/dist/esm/ic-page-header.entry.js +1 -1
  193. package/dist/esm/ic-pagination_4.entry.js +9 -5
  194. package/dist/esm/ic-pagination_4.entry.js.map +1 -1
  195. package/dist/esm/ic-popover-menu.entry.js +1 -1
  196. package/dist/esm/ic-radio-group.entry.js +1 -1
  197. package/dist/esm/ic-radio-option.entry.js +1 -1
  198. package/dist/esm/ic-search-bar.entry.js +1 -1
  199. package/dist/esm/ic-side-navigation.entry.js +1 -1
  200. package/dist/esm/ic-status-tag.entry.js +1 -1
  201. package/dist/esm/ic-step.entry.js +1 -1
  202. package/dist/esm/ic-stepper.entry.js +1 -1
  203. package/dist/esm/ic-switch.entry.js +1 -1
  204. package/dist/esm/ic-tab-group.entry.js +1 -1
  205. package/dist/esm/ic-tab.entry.js +1 -1
  206. package/dist/esm/ic-table-of-contents.entry.js +1 -1
  207. package/dist/esm/ic-theme.entry.js +1 -1
  208. package/dist/esm/ic-time-input.entry.js +401 -99
  209. package/dist/esm/ic-time-input.entry.js.map +1 -1
  210. package/dist/esm/ic-time-selector.entry.js +838 -0
  211. package/dist/esm/ic-time-selector.entry.js.map +1 -0
  212. package/dist/esm/ic-toast.entry.js +1 -1
  213. package/dist/esm/ic-toggle-button_2.entry.js +449 -0
  214. package/dist/esm/ic-toggle-button_2.entry.js.map +1 -0
  215. package/dist/esm/ic-top-navigation.entry.js +1 -1
  216. package/dist/esm/ic-tree-item.entry.js +3 -3
  217. package/dist/esm/ic-tree-view.entry.js +4 -4
  218. package/dist/esm/ic-typography.entry.js +1 -1
  219. package/dist/esm/index-a7a720e7.js +8 -8
  220. package/dist/esm/loader.js +1 -1
  221. package/dist/types/components/ic-calendar/ic-calendar.stories.d.ts +20 -14
  222. package/dist/types/components/ic-pagination-bar/ic-pagination-bar.d.ts +4 -0
  223. package/dist/types/components/ic-time-input/ic-time-input.d.ts +26 -6
  224. package/dist/types/components/ic-time-input/ic-time-input.stories.d.ts +31 -7
  225. package/dist/types/components/ic-time-input/test/helpers/ic-time-input.d.ts +1 -0
  226. package/dist/types/components/ic-time-selector/ic-time-selector.d.ts +88 -0
  227. package/dist/types/components/ic-time-selector/ic-time-selector.stories.d.ts +99 -0
  228. package/dist/types/components/ic-time-selector/ic-time-selector.types.d.ts +1 -0
  229. package/dist/types/components.d.ts +147 -11
  230. package/dist/types/utils/helpers.d.ts +14 -0
  231. package/dist/types/utils/types.d.ts +2 -1
  232. package/hydrate/index.js +1356 -131
  233. package/hydrate/index.mjs +1356 -131
  234. package/package.json +30 -30
  235. package/dist/cjs/helpers-6f4b406b.js.map +0 -1
  236. package/dist/cjs/ic-toggle-button-group.cjs.entry.js +0 -267
  237. package/dist/cjs/ic-toggle-button-group.cjs.entry.js.map +0 -1
  238. package/dist/cjs/ic-toggle-button.cjs.entry.js.map +0 -1
  239. package/dist/core/p-25280383.entry.js.map +0 -1
  240. package/dist/core/p-2c86ce4b.entry.js +0 -2
  241. package/dist/core/p-2c86ce4b.entry.js.map +0 -1
  242. package/dist/core/p-5b32aaf3.entry.js +0 -2
  243. package/dist/core/p-5b32aaf3.entry.js.map +0 -1
  244. package/dist/core/p-80111272.entry.js +0 -2
  245. package/dist/core/p-80111272.entry.js.map +0 -1
  246. package/dist/core/p-9044539c.entry.js +0 -2
  247. package/dist/core/p-9044539c.entry.js.map +0 -1
  248. package/dist/core/p-af821831.entry.js.map +0 -1
  249. package/dist/core/p-c3eddb99.entry.js +0 -2
  250. package/dist/core/p-c3eddb99.entry.js.map +0 -1
  251. package/dist/core/p-f48ce5f6.js +0 -2
  252. package/dist/core/p-f48ce5f6.js.map +0 -1
  253. package/dist/esm/helpers-9f228880.js.map +0 -1
  254. package/dist/esm/ic-toggle-button-group.entry.js.map +0 -1
  255. package/dist/esm/ic-toggle-button.entry.js.map +0 -1
  256. /package/dist/core/{p-b80b08ae.entry.js.map → p-08f24329.entry.js.map} +0 -0
  257. /package/dist/core/{p-615d474e.entry.js.map → p-14b8bf37.entry.js.map} +0 -0
  258. /package/dist/core/{p-81f12581.entry.js.map → p-169ad948.entry.js.map} +0 -0
  259. /package/dist/core/{p-847cbb16.entry.js.map → p-1d166343.entry.js.map} +0 -0
  260. /package/dist/core/{p-b4bfaf8f.entry.js.map → p-201b41c7.entry.js.map} +0 -0
  261. /package/dist/core/{p-24bac55f.entry.js.map → p-33509a89.entry.js.map} +0 -0
  262. /package/dist/core/{p-e1920777.entry.js.map → p-3389625c.entry.js.map} +0 -0
  263. /package/dist/core/{p-5a1cfb3c.entry.js.map → p-344752cb.entry.js.map} +0 -0
  264. /package/dist/core/{p-6c238418.entry.js.map → p-348d7080.entry.js.map} +0 -0
  265. /package/dist/core/{p-3ef2e98d.entry.js.map → p-39cdf5db.entry.js.map} +0 -0
  266. /package/dist/core/{p-fd20470e.entry.js.map → p-496b314f.entry.js.map} +0 -0
  267. /package/dist/core/{p-bd9a76d8.entry.js.map → p-508b6da3.entry.js.map} +0 -0
  268. /package/dist/core/{p-f5cea10d.entry.js.map → p-5e6687a8.entry.js.map} +0 -0
  269. /package/dist/core/{p-72171192.entry.js.map → p-60f4fe3a.entry.js.map} +0 -0
  270. /package/dist/core/{p-e00e67ff.entry.js.map → p-6323da7a.entry.js.map} +0 -0
  271. /package/dist/core/{p-c6c87e58.entry.js.map → p-6dfe0922.entry.js.map} +0 -0
  272. /package/dist/core/{p-fd7f3b58.entry.js.map → p-770e92cd.entry.js.map} +0 -0
  273. /package/dist/core/{p-7cf6b428.entry.js.map → p-79ead0e7.entry.js.map} +0 -0
  274. /package/dist/core/{p-285892ef.entry.js.map → p-7b4b45cf.entry.js.map} +0 -0
  275. /package/dist/core/{p-afedcfdb.entry.js.map → p-7efdbab8.entry.js.map} +0 -0
  276. /package/dist/core/{p-96177a74.entry.js.map → p-802a4bd3.entry.js.map} +0 -0
  277. /package/dist/core/{p-9a9605c3.entry.js.map → p-879c180d.entry.js.map} +0 -0
  278. /package/dist/core/{p-3891ce53.entry.js.map → p-8830011c.entry.js.map} +0 -0
  279. /package/dist/core/{p-444cd8d3.entry.js.map → p-8ab37b4d.entry.js.map} +0 -0
  280. /package/dist/core/{p-c87cc0d1.entry.js.map → p-939025af.entry.js.map} +0 -0
  281. /package/dist/core/{p-4992e9ac.entry.js.map → p-939b168a.entry.js.map} +0 -0
  282. /package/dist/core/{p-5a4344cb.entry.js.map → p-9dea5764.entry.js.map} +0 -0
  283. /package/dist/core/{p-90611726.entry.js.map → p-a8a92e54.entry.js.map} +0 -0
  284. /package/dist/core/{p-31f3fb15.entry.js.map → p-a94a7b71.entry.js.map} +0 -0
  285. /package/dist/core/{p-ba75ed34.entry.js.map → p-b434bd7c.entry.js.map} +0 -0
  286. /package/dist/core/{p-2188b483.entry.js.map → p-c0a7eed7.entry.js.map} +0 -0
  287. /package/dist/core/{p-2bd2f38b.entry.js.map → p-c0b227d2.entry.js.map} +0 -0
  288. /package/dist/core/{p-2646a629.entry.js.map → p-c32f043e.entry.js.map} +0 -0
  289. /package/dist/core/{p-7a0f62c2.entry.js.map → p-c4b2774d.entry.js.map} +0 -0
  290. /package/dist/core/{p-775b8dba.entry.js.map → p-c9525aac.entry.js.map} +0 -0
  291. /package/dist/core/{p-7026afad.entry.js.map → p-ca05573a.entry.js.map} +0 -0
  292. /package/dist/core/{p-8c580d88.entry.js.map → p-d0607a70.entry.js.map} +0 -0
  293. /package/dist/core/{p-15c05eb8.entry.js.map → p-d528d856.entry.js.map} +0 -0
  294. /package/dist/core/{p-0043b019.entry.js.map → p-da1c2883.entry.js.map} +0 -0
  295. /package/dist/core/{p-ffc1cea6.entry.js.map → p-e2e556ec.entry.js.map} +0 -0
  296. /package/dist/core/{p-e4ef4263.js.map → p-e519f607.js.map} +0 -0
  297. /package/dist/core/{p-3f0bce15.entry.js.map → p-e5c6d01a.entry.js.map} +0 -0
  298. /package/dist/core/{p-04a9f82f.entry.js.map → p-e8db8772.entry.js.map} +0 -0
  299. /package/dist/core/{p-e4b82731.entry.js.map → p-ea04103e.entry.js.map} +0 -0
  300. /package/dist/core/{p-9a95f428.entry.js.map → p-eaeb473e.entry.js.map} +0 -0
  301. /package/dist/core/{p-8e592393.entry.js.map → p-ecc7fd71.entry.js.map} +0 -0
  302. /package/dist/core/{p-6cfba272.entry.js.map → p-efe260f0.entry.js.map} +0 -0
  303. /package/dist/core/{p-b6d6b26e.entry.js.map → p-f1b57f91.entry.js.map} +0 -0
  304. /package/dist/core/{p-e4551a38.entry.js.map → p-f5dc04f7.entry.js.map} +0 -0
  305. /package/dist/core/{p-1900c7c7.entry.js.map → p-fd08156a.entry.js.map} +0 -0
  306. /package/dist/core/{p-3594922d.entry.js.map → p-fe5b51bb.entry.js.map} +0 -0
  307. /package/dist/core/{p-ef5b6622.entry.js.map → p-ff618439.entry.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DayButton","focussed","today","day","monthInView","onFocusDay","onBlurDay","onSelectDay","selected","focussedDayRef","inRange","showDaysOutsideMonth","disableDay","handleDayClick","handleDayFocus","handleDayBlur","dayNames","stringEnumToArray","IcDayNames","months","IcDateInputMonths","outsideRange","outsideMonth","getMonth","disabled","h","class","hidden","tabIndex","undefined","getDay","getDate","getFullYear","onClick","onBlur","onFocus","ref","el","variant","italic","MonthPicker","size","focussedMonth","onSelectMonth","onKeyDown","focussedMonthRef","minDate","maxDate","yearInView","handleMonthClick","ev","button","target","Number","getAttribute","monthNames","cols","i","length","push","slice","role","map","month","monthIdx","key","mon","index","correctedIndex","current","dateInRange","Date","getMonthStart","getMonthEnd","YearPicker","decadeView","focussedYear","onSelectYear","onFocusYear","onBlurYear","focussedYearRef","handleYearClick","handleYearFocus","handleYearBlur","navButtonMouseDownHandler","preventDefault","rows","thisDecade","renderYearButton","yr","yearIdx","idx","isPrevDecade","isNextDecade","isCurrent","isFocussed","id","flip","yearInRange","onMouseDown","slot","width","height","fill","xmlns","viewBox","d","years","icCalendarCss","IcCalendarStyle0","FOCUS_TIMER","Calendar","constructor","hostRef","this","daysOfWeek","dayButtonFocussed","dayPickerKeyboardNav","dialogDescription","focusDay","liveRegionEl","monthInViewUpdateHandled","parentIsDatePicker","yearButtonFocussed","clearButtonClicked","currMonthView","currYearPickerView","focussedDate","monthPickerVisible","orderedDaysOfWeek","selectedDate","yearPickerVisible","dateFormat","disableDays","disableFuture","disablePast","max","min","openAtDate","showClearButton","showTodayButton","startOfWeek","IcWeekDays","Monday","theme","value","isValidDateValue","isNaN","getTime","iso8601Regex","test","parse","a","b","c","split","some","year","date","isPresent","prop","setOpenAtDate","openAt","createDate","selectedDay","includes","_a","setSelectedDate","setFocussedDate","updateMonthInView","dialogDesc","getMonthInViewText","setTimeout","focusFocussedDay","setFocussedDayEl","element","focussedDayEl","setFocussedMonthEl","focussedMonthEl","setFocussedYearEl","focussedYearEl","setFocussedYear","newYear","focus","prevYear","newDecade","Math","floor","oldDecade","setDecadeView","setAriaLiveRegionText","getDecadeInViewText","setFocus","clampDate","emit","dateMatches","icChange","setDateChangeEventDetail","UTCDate","UTC","convertToDoubleDigits","toString","dateObject","utcValue","text","innerText","goToPreviousMonth","moveMonths","goToNextMonth","goToPreviousYear","isPrevYearAllowed","moveYears","goToNextYear","isNextYearAllowed","moveDays","numDays","setDate","numMonths","newMonth","setMonth","newDate","numYears","setFullYear","updateFocussedMonth","adjust","updateFocussedYear","focusYear","getNextDayToFocus","currDay","forward","level","move","nextDay","focusFirstElement","monthButtonEl","focusLastElement","clearButtonEl","todayButtonEl","monthButtonClickHandler","setMonthSelectedLiveRegionText","icCalendarMonthSelect","yearButtonClickHandler","setYearSelectedLiveRegionText","icCalendarYearSelect","todayButtonClickHandler","clearButtonClickHandler","monthYearNavClickHandler","handleCalendarClick","event","clearDialogDescription","stopImmediatePropagation","handleCalendarKeyDown","handled","shiftKey","calendarTabHandler","monthPickerKeyDownHandler","yearPickerKeyDownHandler","decadeStart","decadeEnd","monthButtonKeyDownHandler","yearButtonKeyDownHandler","todayButtonKeyDownHandler","clearButtonKeyDownHandler","isCurrentMonth","_b","yearButtonEl","start","currYear","decadeArr","isYearAllowed","getMonthView","getWeekStart","end","addSixWeeks","days","focussedDay","handleCalendarMouseDown","tagName","handleSelectDay","icCalendarDaySelect","handleSelectMonth","handleSelectYear","yrPos","indexOf","monthName","onDayButtonFocusHandler","onDayButtonBlurHandler","onYearButtonFocusHandler","onYearButtonBlurHandler","renderMonthYearNavButton","buttonSize","disableTooltip","innerHTML","chevron","replace","previousMonthButton","yearMatch","nextMonthButton","previousYearButton","nextYearButton","watchDisabledHandler","removeDisabledFalse","watchDisableFutureHandler","watchMaxHandler","watchDisablePastHandler","watchMinHandler","watchStartOfWeekHandler","concat","valueChanged","newValue","oldValue","propName","watchFocussedDateHandler","previous","watchMonthInViewHandler","watchYearInViewHandler","watchYearPickerVisibleHandler","watchMonthPickerVisibleHandler","watchFocussedDayEl","componentWillLoad","root","getRootNode","ShadowRoot","host","IcShortDayNames","render","monthButtonText","yearButtonText","dialogLabel","monthLabel","yearLabel","minDay","yesterday","weeks","Host","Object","assign","calendar","dayName","header","charAt","scope","week","weekIdx","toISOString","icDateInputCss","IcDateInputStyle0","inputIds","DateInput","DEFAULT_DATE_FORMAT","ARIA_INVALID","ARIA_LABEL","ARIA_LABELLED_BY","EVENT_OBJECT_STRING","FIT_TO_VALUE","initialValue","INPUT_EVENT_OBJECT_STRING","inputsInOrder","isAfterMax","isBeforeMin","preventInputsUpdating","isDisabledDate","isValidDay","isValidMonth","isValidDate","isZuluTime","KEYBOARD_EVENT_OBJECT_STRING","MAX_DAY","MAX_MONTH","previousSelectedDate","externalSetDate","clearInput","calendarIsOpen","calendarFocused","clearButtonFocused","removeLabelledBy","emitDatePartChange","disableDaysMessage","disableFutureMessage","disablePastMessage","hideHelperText","hideLabel","inputId","invalidDateMessage","name","required","showCalendarButton","validationAriaLive","validationStatus","validationText","setInputPasteValue","input","pastedValue","inputEl","classList","add","checkSingleCopiedValueIsValid","isValid","dayInputEl","monthInputEl","yearInputEl","isKeyboardOrEvent","prototype","call","setDateValidity","isEmptyString","handleInput","inputEvent","inputType","preventAutoFormatting","setInputValue","notifyScreenReader","moveToNextInput","setPreventInput","setFitToValueStyling","setValidationMessage","handleKeyDown","isInputPrevented","eventKey","toLowerCase","regex","ctrlKey","metaKey","setPasteInvalidText","handleLeftRightArrowKeyPress","handleUpDownArrowKeyPress","moveToPreviousInput","preventInput","handleFocus","select","handleBlur","autocompleteInput","notifyScreenReaderSelectedDate","selectedDateInfoEl","textContent","minValue","maxValue","handleDateChange","force","forEach","invalidDateText","setValueAndEmitChange","updateInputValues","slicePastedDate","valueLength","datePart","isPastedStringDateValid","handlePaste","clipboardData","getData","setPastedValueAndValidation","remove","isDateOrEpoch","defaultDateArray","splitStringDate","formatMinMax","formattedDate","clear","convertToDate","isSelectedDateDisabled","setAttribute","removeAttribute","setInputsInOrder","shadowRoot","querySelectorAll","setAriaLabelledBy","inputCompContainerEl","removeAriaLabelledBy","labelEl","querySelector","labelId","hasValidation","labelledBy","_c","screenReaderInfoId","getInputDescribedByText","helperText","defaultHelperText","selectedDateInfoId","assistiveHintId","isPrevented","preventDayInput","preventMonthInput","preventYearInput","getInputFromDatePart","dayInput","placeholder","onPaste","inputmode","pattern","monthInput","yearInput","maxLength","getInputsInOrder","dateParts","part","substring","getDescOfInputsOrder","description","getScreenReaderInfo","inputDescriptors","IcInformationStatus","Error","selectedString","selectionStart","selectionEnd","currentDate","isNotToday","toDateString","currentInput","findIndex","inputValue","yearNumbers","autocompletedInput","number","handleHostBlur","icBlur","handleHostFocus","activeElement","match","icFocus","handleFormReset","getAriaLabel","notifyScreenReaderArrowKeys","liveRegion","ariaLabel","announcement","notifyScreenReaderInput","monthValue","setAriaInvalid","validDay","validMonth","validDate","disabledDate","handleClear","handleCalendarOpen","calendarButtonEl","displayTooltip","calendarButtonClicked","_f","_e","_d","emitIcChange","handleCalendarFocus","handleCalendarBlur","handleClearFocus","handleClearBlur","relatedTarget","watchInputHandler","watchRequiredHandler","asteriskSpan","document","createElement","appendChild","disconnectedCallback","removeFormResetListener","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","label","addEventListener","componentWillUpdate","componentDidRender","setCalendarFocus","setDisableDays","triggerIcChange","nextParsedValue","extractDateFromZuluDateTime","pasteZuluDateTime","dateValue","isNumeric","displayPastedValidation","previousInvalidDateTest","isPasteValidationDisplayed","hasCustomValidation","assistiveHint","renderHiddenInput","for","Clear","divider","status","message","ariaLiveMode"],"sources":["src/components/ic-calendar/ic-day-button.tsx","src/components/ic-calendar/ic-month-picker.tsx","src/components/ic-calendar/ic-year-picker.tsx","src/components/ic-calendar/ic-calendar.css?tag=ic-calendar&encapsulation=shadow","src/components/ic-calendar/ic-calendar.tsx","src/components/ic-date-input/ic-date-input.css?tag=ic-date-input&encapsulation=shadow","src/components/ic-date-input/ic-date-input.tsx"],"sourcesContent":["import { h, FunctionalComponent } from \"@stencil/core\";\nimport { stringEnumToArray } from \"../../utils/helpers\";\nimport { IcDayNames, IcDateInputMonths } from \"../../utils/types\";\n\nexport type DayButtonProps = {\n focussed: boolean;\n today: boolean;\n day: Date;\n monthInView: number;\n onFocusDay: () => void;\n onBlurDay: () => void;\n onSelectDay: (day: Date) => void;\n selected: boolean;\n focussedDayRef?: (element: HTMLButtonElement) => void;\n inRange: boolean;\n showDaysOutsideMonth?: boolean;\n disableDay?: boolean;\n};\n\nexport const DayButton: FunctionalComponent<DayButtonProps> = ({\n focussed,\n today,\n day,\n monthInView,\n onFocusDay,\n onBlurDay,\n onSelectDay,\n selected,\n focussedDayRef,\n inRange,\n showDaysOutsideMonth,\n disableDay,\n}) => {\n const handleDayClick = (): void => {\n onSelectDay(day);\n };\n\n const handleDayFocus = (): void => {\n onFocusDay();\n };\n\n const handleDayBlur = (): void => {\n onBlurDay();\n };\n\n const dayNames = stringEnumToArray(IcDayNames);\n const months = stringEnumToArray(IcDateInputMonths);\n const outsideRange = !inRange || disableDay;\n const outsideMonth = monthInView !== day.getMonth();\n const disabled = outsideRange || (outsideMonth && !showDaysOutsideMonth);\n\n return (\n <div class=\"day-button-container\">\n <button\n class={{\n \"day-button\": true,\n \"outside-month\": outsideMonth,\n \"outside-range\": !!outsideRange,\n hidden: outsideMonth && !showDaysOutsideMonth,\n disabled: disabled,\n today: today,\n selected: selected,\n focussed: focussed,\n }}\n tabIndex={focussed ? 0 : -1}\n aria-hidden={outsideMonth ? \"true\" : \"false\"}\n aria-disabled={disabled ? \"true\" : \"false\"}\n aria-current={today ? \"date\" : undefined}\n aria-label={\n disabled || outsideMonth || outsideRange\n ? undefined\n : `Choose ${dayNames[day.getDay()]}, ${day.getDate()} ${\n months[day.getMonth()]\n } ${day.getFullYear()}`\n }\n disabled={disabled}\n onClick={handleDayClick}\n onBlur={handleDayBlur}\n onFocus={handleDayFocus}\n ref={(el) => {\n if (focussed && el && focussedDayRef) {\n focussedDayRef(el);\n }\n }}\n >\n {(!outsideMonth || (outsideMonth && showDaysOutsideMonth)) && (\n <ic-typography variant=\"subtitle-small\" italic={outsideMonth}>\n {day.getDate()}\n </ic-typography>\n )}\n </button>\n </div>\n );\n};\n","import { h, FunctionalComponent } from \"@stencil/core\";\nimport {\n dateInRange,\n getMonthStart,\n getMonthEnd,\n} from \"../../utils/date-helpers\";\nimport { stringEnumToArray } from \"../../utils/helpers\";\nimport { IcSizes, IcDateInputMonths } from \"../../utils/types\";\n\nexport type MonthPickerProps = {\n focussedMonth: number;\n monthInView: number;\n yearInView: number;\n onSelectMonth: (month: number) => void;\n onKeyDown: (ev: KeyboardEvent) => void;\n focussedMonthRef: (element: HTMLIcButtonElement) => void;\n minDate: Date | null;\n maxDate: Date | null;\n size?: IcSizes;\n};\n\nexport const MonthPicker: FunctionalComponent<MonthPickerProps> = ({\n size,\n focussedMonth,\n monthInView,\n onSelectMonth,\n onKeyDown,\n focussedMonthRef,\n minDate,\n maxDate,\n yearInView,\n}) => {\n const handleMonthClick = (ev: MouseEvent): void => {\n const button = ev.target as HTMLElement;\n onSelectMonth(Number(button.getAttribute(\"data-month\")));\n };\n\n const monthNames = stringEnumToArray(IcDateInputMonths);\n\n const cols = size === \"small\" ? 2 : 3;\n const months: string[][] = [];\n for (let i = 0; i < monthNames.length; i += cols) {\n months.push(monthNames.slice(i, i + cols));\n }\n\n return (\n <div\n class={{\n \"month-picker\": true,\n }}\n role=\"grid\"\n >\n {months.map((month, monthIdx) => (\n <div class=\"month-picker-row\" key={monthIdx} role=\"row\">\n {month.map((mon, index) => {\n const correctedIndex = monthIdx * cols + index;\n const current = monthInView === correctedIndex;\n const focussed = focussedMonth === correctedIndex;\n const outsideRange = !dateInRange(\n new Date(yearInView, correctedIndex, 1),\n minDate ? getMonthStart(minDate) : null,\n maxDate ? getMonthEnd(maxDate) : null\n );\n return (\n <ic-button\n role=\"gridcell\"\n class={{\n \"month-button\": true,\n selected: current,\n focussed: focussed,\n disabled: outsideRange,\n }}\n full-width\n disabled={outsideRange}\n variant={current ? \"primary\" : \"tertiary\"}\n data-month={correctedIndex}\n size={size}\n tabIndex={focussed ? 0 : -1}\n aria-current={current ? \"true\" : \"false\"}\n aria-label={current ? \"\" : `select ${mon}`}\n onClick={handleMonthClick}\n onKeyDown={onKeyDown}\n ref={(el?: HTMLIcButtonElement) => {\n if (focussed && el) {\n focussedMonthRef(el);\n }\n }}\n >\n {mon}\n </ic-button>\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n","import { h, FunctionalComponent } from \"@stencil/core\";\nimport { yearInRange } from \"../../utils/date-helpers\";\nimport { IcSizes } from \"../../utils/types\";\n\nexport type YearPickerProps = {\n decadeView: number[];\n focussedYear: number;\n yearInView: number;\n onSelectYear: (year: number) => void;\n onKeyDown: (ev: KeyboardEvent) => void;\n onFocusYear: () => void;\n onBlurYear: () => void;\n minDate: Date | null;\n maxDate: Date | null;\n focussedYearRef: (element: HTMLIcButtonElement) => void;\n size?: IcSizes;\n};\n\nexport const YearPicker: FunctionalComponent<YearPickerProps> = ({\n decadeView,\n size,\n focussedYear,\n yearInView,\n onSelectYear,\n onFocusYear,\n onBlurYear,\n onKeyDown,\n minDate,\n maxDate,\n focussedYearRef,\n}) => {\n const handleYearClick = (ev: MouseEvent): void => {\n const button = ev.target as HTMLElement;\n onSelectYear(Number(button.getAttribute(\"data-year\")));\n };\n\n const handleYearFocus = (): void => {\n onFocusYear();\n };\n\n const handleYearBlur = (): void => {\n onBlurYear();\n };\n\n const navButtonMouseDownHandler = (ev: MouseEvent): void => {\n ev.preventDefault();\n };\n\n const cols = size === \"small\" ? 2 : 3;\n const rows = size === \"small\" ? 6 : 4;\n\n const thisDecade: number[][] = [];\n for (let i = 0; i < decadeView.length; i += cols) {\n thisDecade.push(decadeView.slice(i, i + cols));\n }\n\n const renderYearButton = (yr: number, yearIdx: number, idx: number) => {\n const isPrevDecade = yearIdx === 0 && idx === 0;\n const isNextDecade = yearIdx === rows - 1 && idx === cols - 1;\n const isCurrent = yearInView === yr;\n const isFocussed = focussedYear === yr;\n\n return (\n <ic-button\n key={yr}\n role=\"gridcell\"\n id={\n isPrevDecade\n ? \"prev-decade-button\"\n : isNextDecade\n ? \"next-decade-button\"\n : undefined\n }\n class={{\n \"prev-decade\": isPrevDecade,\n \"next-decade\": isNextDecade,\n \"year-button\": true,\n selected: !isPrevDecade && !isNextDecade ? isCurrent : false,\n focussed: !isPrevDecade && !isNextDecade ? isFocussed : false,\n flip: isNextDecade,\n }}\n full-width\n disabled={!yearInRange(yr, minDate, maxDate)}\n data-year={yr}\n tabIndex={isPrevDecade || isNextDecade ? -1 : isFocussed ? 0 : -1}\n variant={\n isPrevDecade || isNextDecade\n ? \"tertiary\"\n : isCurrent\n ? \"primary\"\n : \"tertiary\"\n }\n onClick={handleYearClick}\n onMouseDown={\n isPrevDecade || isNextDecade ? navButtonMouseDownHandler : undefined\n }\n size={size}\n aria-label={\n !isPrevDecade && !isNextDecade\n ? isCurrent\n ? \"\"\n : `select ${yr}`\n : undefined\n }\n aria-current={\n !isPrevDecade && !isNextDecade\n ? isCurrent\n ? \"true\"\n : \"false\"\n : undefined\n }\n onKeyDown={!isPrevDecade && !isNextDecade ? onKeyDown : undefined}\n onFocus={!isPrevDecade && !isNextDecade ? handleYearFocus : undefined}\n onBlur={!isPrevDecade && !isNextDecade ? handleYearBlur : undefined}\n ref={\n !isPrevDecade && !isNextDecade && isFocussed\n ? (el: HTMLIcButtonElement | undefined) => el && focussedYearRef(el)\n : undefined\n }\n >\n {isPrevDecade ? `${yr - 9}s` : isNextDecade ? `${yr}s` : yr}\n {(isPrevDecade || isNextDecade) && (\n <svg\n slot={isPrevDecade ? \"left-icon\" : \"right-icon\"}\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\"\n fill=\"currentColor\"\n />\n </svg>\n )}\n </ic-button>\n );\n };\n\n return (\n <div class=\"year-picker\" role=\"grid\">\n {thisDecade.map((years, yearIdx) => (\n <div class=\"year-picker-row\" role=\"row\" key={yearIdx}>\n {years.map((yr, idx) => renderYearButton(yr, yearIdx, idx))}\n </div>\n ))}\n </div>\n );\n};\n","@import \"../../global/normalize.css\";\n\n/**\n*\n @prop --ic-z-index-calendar: z-index of calendar.\n*/\n:host(.ic-date-picker-above) .calendar-container {\n bottom: calc(var(--ic-space-xxl) - var(--ic-space-xxs));\n}\n\n:host(.ic-date-picker-calendar) .calendar-container {\n position: absolute;\n min-width: 19rem;\n max-width: 23.5rem;\n width: var(--input-width);\n margin-top: var(--ic-space-xxxs);\n animation: fade-in-calendar var(--ic-transition-duration-slow);\n box-shadow: var(--ic-calendar-elevation);\n}\n\n:host .calendar-container {\n display: flex;\n flex-direction: column;\n gap: var(--ic-space-xs);\n width: fit-content;\n border: var(--ic-border-default);\n border-color: var(--ic-calendar-border);\n border-radius: var(--ic-border-radius);\n align-items: center;\n background-color: var(--ic-calendar-bg);\n z-index: var(--ic-z-index-calendar);\n box-sizing: border-box;\n padding: var(--ic-space-xs);\n}\n\n:host(.ic-calendar-small) .calendar-container {\n min-width: 17rem;\n max-width: 21.5rem;\n}\n\n:host(.ic-calendar-large) .calendar-container {\n min-width: 21rem;\n max-width: 25.5rem;\n}\n\n:host(.ic-calendar-large) {\n --month-button-width: 6.3125rem;\n}\n\n:host(.ic-calendar-small) {\n --month-button-width: 6.25rem;\n}\n\n:host .month-year-nav-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n}\n\n:host .month-year-nav-container.hidden {\n display: none;\n}\n\n:host .month-year-nav {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex: 1 0 0;\n}\n\n:host .month-picker,\n:host .year-picker {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 17.5rem;\n column-gap: var(--ic-space-xs);\n row-gap: var(--ic-space-xxs);\n}\n\n:host(.ic-calendar-small) .month-picker,\n:host(.ic-calendar-small) .year-picker {\n width: 13.125rem;\n}\n\n:host(.ic-calendar-large) .month-picker,\n:host(.ic-calendar-large) .year-picker {\n width: 20rem;\n}\n\n:host .month-picker .month-picker-row,\n:host .year-picker .year-picker-row {\n display: inline-grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n width: 100%;\n gap: var(--ic-space-xs);\n}\n\n:host(.ic-calendar-small) .month-picker .month-picker-row,\n:host(.ic-calendar-small) .year-picker .year-picker-row {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n:host .month-picker-button,\n:host .year-picker-button {\n width: 5rem;\n\n --min-width: 5rem;\n}\n\n:host .month-button,\n:host .year-button {\n width: var(--month-button-width);\n}\n\n:host .month-button.focussed,\n:host .year-button.focussed {\n z-index: 1;\n}\n\n:host .month-button::part(button),\n:host .year-button::part(button) {\n min-width: var(--month-button-width);\n padding: var(--ic-space-xs) auto;\n}\n\n:host .prev-decade.year-button svg {\n margin-right: calc(-1 * var(--ic-space-xs));\n\n --icon-width: var(--ic-space-md);\n --icon-height: var(--ic-space-md);\n}\n\n:host(.ic-calendar-small) .prev-decade.year-button svg {\n margin-right: calc(-1 * calc(var(--ic-space-md) + var(--ic-space-1px)));\n}\n\n:host(.ic-calendar-large) .prev-decade.year-button svg {\n margin-right: calc(-1 * calc(var(--ic-space-md) + var(--ic-space-xxs)));\n}\n\n:host .prev-decade.year-button::part(button) {\n padding-left: 0;\n padding-right: var(--ic-space-lg);\n gap: var(--ic-space-xxxs);\n display: inline-grid;\n grid-template-columns: 1.5rem 1fr;\n}\n\n:host(.ic-calendar-small) .prev-decade.year-button::part(button) {\n padding-left: 0;\n padding-right: calc(var(--ic-space-lg) + var(--ic-space-xxs));\n}\n\n:host .next-decade.year-button svg {\n margin-left: calc(-1 * var(--ic-space-lg));\n\n --icon-width: var(--ic-space-md);\n --icon-height: var(--ic-space-md);\n}\n\n:host(.ic-calendar-small) .next-decade.year-button svg,\n:host(.ic-calendar-large) .next-decade.year-button svg {\n margin-left: calc(\n -1 * (var(--ic-space-lg) + var(--ic-space-xs) + var(--ic-space-1px))\n );\n}\n\n:host .next-decade.year-button::part(button) {\n padding-right: 0;\n padding-left: var(--ic-space-lg);\n gap: var(--ic-space-xxxs);\n display: inline-grid;\n grid-template-columns: 1fr 1.5rem;\n}\n\n:host(.ic-calendar-small) .next-decade.year-button::part(button),\n:host(.ic-calendar-large) .next-decade.year-button::part(button) {\n padding-left: calc(var(--ic-space-xl) - var(--ic-space-xxs));\n}\n\n:host .bottom-buttons {\n display: flex;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n animation: fade-in-buttons var(--ic-transition-duration-slow);\n}\n\n:host .bottom-buttons.no-today {\n align-items: flex-end;\n flex-direction: column;\n}\n\n:host .bottom-buttons.hidden {\n display: none;\n}\n\n:host .calendar {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 15.75rem;\n animation: fade-in-buttons var(--ic-transition-duration-slow);\n}\n\n:host(.ic-calendar-large) .calendar {\n width: 19.25rem;\n}\n\n:host(.ic-calendar-small) .calendar {\n padding-bottom: var(--ic-space-xxs);\n width: 14rem;\n}\n\n:host .hidden {\n display: none;\n}\n\n:host .weekdays-container {\n display: flex;\n align-self: stretch;\n}\n\n:host .weekdays {\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: var(--ic-space-xs);\n}\n\n:host .calendar-days-container {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n row-gap: var(--ic-space-xs);\n padding: var(--ic-space-xxs) 0;\n min-height: 16rem;\n align-content: flex-start;\n}\n\n:host(.ic-calendar-small) .calendar-days-container {\n padding: var(--ic-space-xxxs) 0;\n min-height: 14.5rem;\n}\n\n:host(.ic-calendar-large) .calendar-days-container {\n padding: var(--ic-space-xs) 0;\n min-height: 17.5rem;\n}\n\n:host .calendar-days-container tr {\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n border-spacing: 0;\n}\n\n:host .calendar-day-header {\n display: flex;\n width: 2rem;\n padding: var(--ic-space-xxs) 0;\n justify-content: center;\n align-items: center;\n color: var(--ic-typography-color, var(--ic-color-text-primary));\n\n --ic-typography-color: var(--ic-calendar-label);\n\n text-align: center;\n font: var(--ic-font-caption);\n letter-spacing: var(--ic-font-letter-spacing-0pt0025);\n}\n\n:host(.ic-calendar-large) .calendar-day-header {\n padding: var(--ic-space-xxs);\n}\n\n:host .day-button-container {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 2.25rem;\n height: 2.25rem;\n}\n\n:host(.ic-calendar-small) .day-button-container {\n width: 2rem;\n height: 2rem;\n}\n\n:host(.ic-calendar-large) .day-button-container {\n width: 2.5rem;\n height: 2.5rem;\n}\n\n:host .day-button {\n display: flex;\n position: relative;\n justify-content: center;\n align-items: center;\n border: 0;\n border-radius: 2rem;\n background-color: var(--ic-calendar-bg);\n width: 2rem;\n height: 2rem;\n cursor: pointer;\n transition: var(--ic-easing-transition-fast);\n z-index: 0;\n}\n\n:host .day-button.disabled {\n cursor: default;\n}\n\n:host(.ic-calendar-large) .day-button {\n width: 2.25rem;\n height: 2.25rem;\n}\n\n:host(.ic-calendar-small) .day-button {\n width: 1.75rem;\n height: 1.75rem;\n}\n\n:host .day-button ic-typography {\n width: 1.75rem;\n\n --ic-typography-color: var(--ic-calendar-date-label-default);\n}\n\n:host .day-button.outside-range ic-typography {\n --ic-typography-color: var(--ic-calendar-date-label-disabled);\n}\n\n:host .day-button.outside-month ic-typography {\n font-weight: var(--ic-font-weight-regular) !important;\n}\n\n:host\n .day-button.outside-month:not(.outside-range):not(.selected)\n ic-typography {\n --ic-typography-color: var(--ic-calendar-date-label-default);\n}\n\n:host .day-button:hover:not(.disabled) {\n background-color: var(--ic-calendar-date-default-bg-hover);\n}\n\n:host .day-button:active:not(.disabled) {\n background-color: var(--ic-calendar-date-default-bg-pressed);\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :host .day-button:hover:not(.disabled):not(.focussed),\n :host .day-button:active:not(.disabled):not(.focussed) {\n transition: background-color var(--ic-transition-duration-slow) ease-in-out;\n }\n}\n\n:host .day-button.selected:not(.hidden) {\n background-color: var(--ic-calendar-date-active-bg-default);\n}\n\n:host .day-button.selected ic-typography {\n --ic-typography-color: var(--ic-calendar-date-label-selected);\n}\n\n:host .day-button.selected:not(.hidden):hover {\n background-color: var(--ic-calendar-date-active-bg-hover);\n}\n\n:host .day-button.selected:not(.hidden):active {\n background-color: var(--ic-calendar-date-active-bg-pressed);\n}\n\n:host .day-button.focussed {\n z-index: 1;\n}\n\n:host .day-button:focus {\n outline: none;\n}\n\n:host .day-button.focussed:focus {\n box-shadow: var(--ic-border-focus);\n}\n\n:host .day-button.today:not(.hidden)::after {\n content: \"\";\n position: absolute;\n width: 0.875rem;\n height: 0.125rem;\n bottom: 0.4rem;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-calendar-default-underline);\n}\n\n:host(.ic-calendar-small) .day-button.today::after {\n bottom: 0.35rem;\n}\n\n:host(.ic-calendar-large) .day-button.today::after {\n width: 1rem;\n}\n\n:host .day-button.today.selected::after {\n background-color: var(--ic-calendar-selected-underline);\n}\n\n:host #select-month-hint,\n:host #select-year-hint {\n display: none;\n}\n\n.sr-only {\n position: absolute;\n left: -9999px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host .calendar-container,\n :host .calendar,\n :host .bottom-buttons {\n animation: none;\n }\n}\n\n@keyframes fade-in-buttons {\n 0% {\n opacity: 0;\n }\n\n 50% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes fade-in-calendar {\n 0% {\n display: flex;\n max-height: 0;\n }\n\n 100% {\n display: flex;\n max-height: 600px;\n }\n}\n\n@media (forced-colors: active) {\n :host .day-button.today:not(.hidden)::after {\n background-color: highlight;\n }\n\n :host .day-button.selected:not(.hidden) {\n background-color: highlight;\n }\n\n :host .day-button.focussed:focus {\n border: var(--ic-border-hc);\n }\n\n :host .month-button.selected::part(button),\n :host .year-button.selected::part(button) {\n background-color: highlight;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n h,\n Prop,\n State,\n Watch,\n Method,\n} from \"@stencil/core\";\n\nimport {\n IcDateFormat,\n IcDateInputMonths,\n IcDateValueFormat,\n IcShortDayNames,\n IcSizes,\n IcThemeMode,\n IcWeekDays,\n} from \"../../utils/types\";\n\nimport {\n addSixWeeks,\n clampDate,\n convertToDoubleDigits,\n createDate,\n dateInRange,\n dateMatches,\n getMonthStart,\n getMonthEnd,\n getWeekStart,\n yearInRange,\n} from \"../../utils/date-helpers\";\n\nimport chevron from \"../../assets/chevron-icon.svg\";\n\nimport { DayButton } from \"./ic-day-button\";\nimport { MonthPicker } from \"./ic-month-picker\";\nimport { YearPicker } from \"./ic-year-picker\";\nimport { removeDisabledFalse, stringEnumToArray } from \"../../utils/helpers\";\n\nconst FOCUS_TIMER = 100;\n\n@Component({\n tag: \"ic-calendar\",\n styleUrl: \"ic-calendar.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class Calendar {\n private clearButtonEl: HTMLIcButtonElement | undefined;\n private daysOfWeek: string[] = [];\n private dayButtonFocussed: boolean = false;\n private dayPickerKeyboardNav: boolean = false;\n private decadeStart: number;\n private decadeEnd: number;\n private dialogDescription: string = \"\";\n private focusDay: boolean = true;\n private focussedYearEl: HTMLIcButtonElement;\n private liveRegionEl?: HTMLElement = undefined;\n private monthButtonEl: HTMLIcButtonElement | undefined;\n private monthNames: string[] = [];\n private monthInViewUpdateHandled: boolean = false;\n private parentIsDatePicker: boolean = false;\n private today = new Date();\n private todayButtonEl: HTMLIcButtonElement | undefined;\n private yearButtonEl: HTMLIcButtonElement | undefined;\n private yearButtonFocussed: boolean = false;\n\n @Element() el: HTMLIcCalendarElement;\n\n @State() clearButtonClicked: boolean = false;\n @State() currMonthView: Date[] = [];\n @State() currYearPickerView: number[] = [];\n @State() decadeView: number[] = [];\n @State() focussedDate: Date | null = null;\n @State() focussedDay: number;\n @State() focussedDayEl: HTMLButtonElement;\n @State() focussedMonth: number;\n @State() focussedMonthEl: HTMLIcButtonElement;\n @State() focussedYear: number;\n @State() maxDate: Date | null = null;\n @State() minDate: Date | null = null;\n @State() monthInView: number;\n @State() monthPickerVisible: boolean = false;\n @State() orderedDaysOfWeek: string[] = [];\n @State() selectedDate: Date | null = null;\n @State() yearInView: number;\n @State() yearPickerVisible: boolean = false;\n\n /**\n * The format in which the date will be displayed.\n */\n @Prop() dateFormat: IcDateFormat = \"DD/MM/YYYY\";\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el);\n\n if (this.disabled) {\n this.setSelectedDate(null);\n this.clearButtonEl?.disabled;\n this.todayButtonEl?.disabled;\n } else {\n this.setOpenAtDate();\n }\n }\n\n /**\n * The days of the week to disable.\n */\n @Prop() disableDays?: IcWeekDays[] = [];\n\n /**\n * If `true`, dates in the future are not allowed.\n */\n @Prop() disableFuture?: boolean = false;\n\n @Watch(\"disableFuture\")\n watchDisableFutureHandler(): void {\n this.watchMaxHandler();\n }\n\n /**\n * If `true`, dates in the past are not allowed.\n */\n @Prop() disablePast?: boolean = false;\n\n @Watch(\"disablePast\")\n watchDisablePastHandler(): void {\n this.watchMinHandler();\n }\n\n /**\n * The latest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disableFuture` is set to `true`.\n */\n @Prop() max: string | Date = \"\";\n @Watch(\"max\")\n watchMaxHandler(): void {\n if (this.disableFuture) {\n this.maxDate = new Date();\n } else {\n this.maxDate = createDate(this.max, this.dateFormat);\n }\n }\n\n /**\n * The earliest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disablePast` is set to `true`.\n */\n @Prop() min: string | Date = \"\";\n @Watch(\"min\")\n watchMinHandler(): void {\n if (this.disablePast) {\n this.minDate = new Date();\n } else {\n this.minDate = createDate(this.min, this.dateFormat);\n }\n }\n\n /**\n * The date visible when the calendar opens. Used if no date is currently selected.\n * The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n */\n @Prop() openAtDate: string | Date = \"\";\n\n /**\n * If `true`, the `Clear` button on the calendar will be visible.\n */\n @Prop() showClearButton?: boolean = true;\n\n /**\n * If `true`, days outside the current month will be visible in the calendar.\n */\n @Prop() showDaysOutsideMonth?: boolean = true;\n\n /**\n * If `true`, the `Go to today` button on the calendar will be visible.\n */\n @Prop() showTodayButton?: boolean = true;\n\n /**\n * The size of the calendar to be displayed.\n */\n @Prop() size: IcSizes = \"medium\";\n\n /**\n * The first day of the week. `0` for Sunday, `1` for Monday, etc.\n * Default is Monday.\n */\n @Prop() startOfWeek: IcWeekDays = IcWeekDays.Monday;\n\n @Watch(\"startOfWeek\")\n watchStartOfWeekHandler(): void {\n this.orderedDaysOfWeek = this.daysOfWeek\n .slice(this.startOfWeek)\n .concat(this.daysOfWeek.slice(0, this.startOfWeek));\n this.updateMonthInView();\n }\n\n /**\n * Sets the calendar to the dark or light theme colors. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * The value of the calendar and the date visible when the calendar opens.\n * The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n */\n @Prop({ mutable: true, reflect: true }) value?: IcDateValueFormat = \"\";\n\n @Watch(\"value\")\n @Watch(\"openAtDate\")\n valueChanged(\n newValue: IcDateValueFormat,\n oldValue: IcDateValueFormat,\n propName?: string\n ): void {\n if (newValue !== oldValue && this.isValidDateValue(newValue)) {\n if (propName === \"value\") {\n this.value = newValue;\n }\n this.setOpenAtDate();\n }\n }\n\n @Watch(\"focussedDate\")\n watchFocussedDateHandler(current: Date, previous: Date): void {\n if (\n previous === null ||\n !(\n previous.getFullYear() === current.getFullYear() &&\n previous.getMonth() === current.getMonth()\n )\n ) {\n this.updateMonthInView();\n }\n }\n\n @Watch(\"monthInView\")\n watchMonthInViewHandler(): void {\n this.focussedMonth = this.monthInView;\n }\n\n @Watch(\"yearInView\")\n watchYearInViewHandler(): void {\n this.setFocussedYear(this.yearInView, false);\n }\n\n @Watch(\"yearPickerVisible\")\n watchYearPickerVisibleHandler(): void {\n if (!this.yearPickerVisible) {\n this.setFocussedYear(this.yearInView);\n }\n }\n\n @Watch(\"monthPickerVisible\")\n watchMonthPickerVisibleHandler(): void {\n if (!this.monthPickerVisible) {\n this.focussedMonth = this.monthInView;\n }\n }\n\n @Watch(\"focussedDayEl\")\n watchFocussedDayEl(): void {\n if (this.focusDay) {\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n }\n this.focusDay = true;\n }\n\n /**\n * Emitted when the value has changed.\n */\n @Event() icChange: EventEmitter<{\n value: Date | null;\n dateObject: {\n day: string | null;\n month: string | null;\n year: string | null;\n };\n utcValue: Date | null;\n }>;\n\n /**\n * Emitted when the clear button has been clicked.\n */\n @Event() icCalendarClearButtonClick: EventEmitter<void>;\n\n /**\n * @internal Emitted when a day is selected.\n */\n @Event() icCalendarDaySelect: EventEmitter<void>;\n\n /**\n * Emitted when a month is selected.\n */\n @Event() icCalendarMonthSelect: EventEmitter<void>;\n\n /**\n * Emitted when a year is selected.\n */\n @Event() icCalendarYearSelect: EventEmitter<void>;\n\n componentWillLoad(): void {\n const root = this.el.getRootNode();\n this.parentIsDatePicker =\n root instanceof ShadowRoot && root.host?.tagName === \"IC-DATE-PICKER\";\n this.monthNames = stringEnumToArray(IcDateInputMonths);\n this.daysOfWeek = stringEnumToArray(IcShortDayNames);\n this.watchStartOfWeekHandler();\n this.watchMaxHandler();\n this.watchMinHandler();\n this.setOpenAtDate();\n removeDisabledFalse(this.disabled, this.el);\n }\n\n /**\n * @internal Clears the dialog description used to provide more context for screen readers.\n */\n @Method()\n async clearDialogDescription(): Promise<void> {\n this.dialogDescription = \"\";\n }\n\n private isValidDateValue = (value: IcDateValueFormat): boolean => {\n if (value == null) return true;\n\n if (value instanceof Date) {\n return !isNaN(value.getTime());\n }\n\n if (typeof value !== \"string\") return false;\n\n const iso8601Regex =\n /^\\d{4}-\\d{2}-\\d{2}(?:[T\\s]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?)?$/;\n\n if (iso8601Regex.test(value)) {\n return !isNaN(Date.parse(value));\n }\n\n const [a, b, c] = value.split(\"/\").map(Number);\n if ([a, b, c].some(isNaN)) return false;\n let day: number, month: number, year: number;\n switch (this.dateFormat) {\n case \"DD/MM/YYYY\":\n [day, month, year] = [a, b, c];\n break;\n case \"MM/DD/YYYY\":\n [month, day, year] = [a, b, c];\n break;\n case \"YYYY/MM/DD\":\n [year, month, day] = [a, b, c];\n break;\n default:\n return false;\n }\n if (month < 1 || month > 12 || day < 1 || day > 31) return false;\n\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n );\n };\n\n private isPresent = (prop: IcDateValueFormat) =>\n prop !== \"\" && prop !== undefined && prop !== null;\n\n private setOpenAtDate = () => {\n let openAt: Date | null = null;\n if (this.disabled) {\n openAt = new Date();\n } else {\n if (this.clearButtonClicked) {\n openAt = this.focussedDate ? this.focussedDate : new Date();\n this.clearButtonClicked = false;\n } else {\n if (\n !this.disabled &&\n this.value != null &&\n this.isValidDateValue(this.value)\n ) {\n openAt = createDate(this.value, this.dateFormat);\n }\n\n if (!!openAt && dateInRange(openAt, this.minDate, this.maxDate)) {\n const selectedDay = openAt.getDay();\n\n if (\n !!this.disableDays &&\n this.disableDays.length > 0 &&\n typeof selectedDay == \"number\" &&\n this.disableDays.includes(selectedDay)\n ) {\n openAt = createDate(this.value ?? new Date(), this.dateFormat);\n this.setSelectedDate(null);\n } else {\n this.setSelectedDate(openAt);\n }\n } else if (this.isPresent(this.openAtDate)) {\n openAt = createDate(this.openAtDate, this.dateFormat);\n } else {\n openAt = new Date();\n }\n }\n }\n this.setFocussedDate(openAt);\n\n this.updateMonthInView();\n let dialogDesc = this.getMonthInViewText();\n if (this.selectedDate === null) {\n dialogDesc += \" No date selected.\";\n }\n dialogDesc += ` Use arrow keys to change day. Press enter or space to select a date${\n this.parentIsDatePicker ? \" or press escape to close the picker\" : \"\"\n }.`;\n\n this.dialogDescription = dialogDesc;\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n };\n\n /* Refs & setters */\n private setFocussedDayEl = (element: HTMLButtonElement) => {\n this.focussedDayEl = element;\n };\n\n private setFocussedMonthEl = (element: HTMLIcButtonElement) => {\n this.focussedMonthEl = element;\n };\n\n private setFocussedYearEl = (element: HTMLIcButtonElement) => {\n this.focussedYearEl = element;\n };\n\n private setFocussedYear = (newYear: number, focus = true): void => {\n const prevYear = this.focussedYear;\n this.focussedYear = newYear;\n if (this.yearPickerVisible) {\n const newDecade = Math.floor(newYear / 10) * 10;\n const oldDecade = Math.floor(prevYear / 10) * 10;\n if (newDecade !== oldDecade) {\n this.setDecadeView(newDecade);\n this.setAriaLiveRegionText(this.getDecadeInViewText());\n }\n if (focus) {\n setTimeout(() => {\n if (this.focussedYearEl !== null) this.focussedYearEl.setFocus();\n }, FOCUS_TIMER);\n }\n } else {\n this.setDecadeView(Math.floor(newYear / 10) * 10);\n }\n };\n\n private setFocussedDate = (d: Date): void => {\n this.focussedDate = clampDate(d, this.minDate, this.maxDate);\n };\n\n private setSelectedDate = (d: Date | null, emit = true): void => {\n if (d === null || !dateMatches(d, this.selectedDate)) {\n this.selectedDate = d;\n this.value = d;\n if (emit) {\n this.icChange.emit(this.setDateChangeEventDetail(d));\n }\n }\n };\n\n private setDateChangeEventDetail = (d: Date | null) => {\n let UTCDate = null;\n let day = null;\n let month = null;\n let year = null;\n if (d !== null) {\n UTCDate = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\n day = convertToDoubleDigits(d.getDate());\n month = convertToDoubleDigits(d.getMonth() + 1);\n year = d.getFullYear().toString();\n }\n return {\n value: d,\n dateObject: {\n day: day === \"\" ? null : day,\n month: month === \"\" ? null : month,\n year: year === \"\" ? null : year,\n },\n utcValue: UTCDate,\n };\n };\n\n private setAriaLiveRegionText = (text: string) => {\n this.liveRegionEl && (this.liveRegionEl.innerText = text);\n };\n\n /* Navigation helpers */\n private goToPreviousMonth = (focusDay = false) => {\n this.focusDay = focusDay;\n this.moveMonths(-1);\n };\n\n private goToNextMonth = (focusDay = false) => {\n this.focusDay = focusDay;\n this.moveMonths(1);\n };\n\n private goToPreviousYear = (focusDay = false) => {\n if (this.isPrevYearAllowed()) {\n this.focusDay = focusDay;\n this.moveYears(-1);\n }\n };\n\n private goToNextYear = (focusDay = false) => {\n if (this.isNextYearAllowed()) {\n this.focusDay = focusDay;\n this.moveYears(1);\n }\n };\n\n private moveDays = (numDays: number): void => {\n if (this.focussedDate) {\n const d = new Date(this.focussedDate);\n d.setDate(d.getDate() + numDays);\n this.setFocussedDate(d);\n }\n };\n\n private moveMonths = (numMonths: number): void => {\n if (this.focussedDate) {\n const newMonth = this.focussedDate.getMonth() + numMonths;\n const min = new Date(\n new Date(getMonthStart(this.focussedDate)).setMonth(newMonth)\n );\n const max = getMonthEnd(min);\n const newDate = new Date(new Date(this.focussedDate).setMonth(newMonth));\n this.setFocussedDate(clampDate(newDate, min, max));\n\n if (\n this.monthPickerVisible === false &&\n this.yearPickerVisible === false &&\n this.monthInViewUpdateHandled === false\n ) {\n this.setAriaLiveRegionText(this.getMonthInViewText());\n }\n this.monthInViewUpdateHandled = false;\n }\n };\n\n private moveYears = (numYears: number): void => {\n if (this.focussedDate) {\n const newYear = this.focussedDate.getFullYear() + numYears;\n const min = new Date(\n new Date(getMonthStart(this.focussedDate)).setFullYear(newYear)\n );\n const max = getMonthEnd(min);\n const newDate = new Date(\n new Date(this.focussedDate).setFullYear(newYear)\n );\n this.setFocussedDate(clampDate(newDate, min, max));\n\n if (\n this.monthPickerVisible === false &&\n this.yearPickerVisible === false &&\n this.monthInViewUpdateHandled === false\n ) {\n this.setAriaLiveRegionText(this.getMonthInViewText());\n }\n this.monthInViewUpdateHandled = false;\n }\n };\n\n private updateFocussedMonth = (adjust: number): void => {\n const d = new Date(this.focussedYear, this.focussedMonth, 1);\n d.setMonth(this.focussedMonth + adjust);\n const newDate = clampDate(d, this.minDate, this.maxDate);\n this.focussedMonth = newDate.getMonth();\n setTimeout(() => this.focussedMonthEl.setFocus(), FOCUS_TIMER);\n };\n\n private updateFocussedYear = (adjust: number, focusYear = true): void => {\n const d = new Date(new Date().setFullYear(this.focussedYear + adjust));\n const newDate = clampDate(d, this.minDate, this.maxDate);\n this.setFocussedYear(newDate.getFullYear(), focusYear);\n };\n\n private getNextDayToFocus = (\n currDay: Date,\n forward: boolean,\n level = 1\n ): number => {\n const move = forward ? 1 : -1;\n const nextDay = new Date(currDay);\n nextDay.setDate(nextDay.getDate() + move);\n return this.disableDays?.includes(Number(nextDay.getDay()))\n ? this.getNextDayToFocus(nextDay, forward, level + 1)\n : level;\n };\n\n /* Focus helpers */\n private focusFirstElement = () => {\n this.monthButtonEl?.setFocus();\n };\n\n private focusLastElement = () => {\n if (\n this.showClearButton &&\n this.clearButtonEl &&\n !this.clearButtonEl.disabled\n ) {\n this.clearButtonEl.setFocus();\n } else if (\n this.showTodayButton &&\n this.todayButtonEl &&\n !this.todayButtonEl.disabled\n ) {\n this.todayButtonEl.setFocus();\n } else if (this.monthPickerVisible) {\n this.focussedMonthEl.setFocus();\n } else if (this.yearPickerVisible) {\n this.focussedYearEl.setFocus();\n } else {\n this.focussedDayEl.focus();\n }\n };\n\n private focusFocussedDay = () => {\n this.focussedDayEl.focus();\n };\n\n /* Click handlers */\n private monthButtonClickHandler = () => {\n this.yearPickerVisible = false;\n this.focusDay = false;\n this.monthPickerVisible = !this.monthPickerVisible;\n if (this.monthPickerVisible) {\n this.setAriaLiveRegionText(\"Month picker view open\");\n } else {\n this.setMonthSelectedLiveRegionText();\n this.icCalendarMonthSelect.emit();\n }\n };\n\n private yearButtonClickHandler = () => {\n this.monthPickerVisible = false;\n this.focusDay = false;\n this.yearPickerVisible = !this.yearPickerVisible;\n if (this.yearPickerVisible) {\n this.setAriaLiveRegionText(\n `Year picker view open. ${this.getDecadeInViewText()}`\n );\n } else {\n this.setYearSelectedLiveRegionText();\n this.icCalendarYearSelect.emit();\n }\n };\n\n private todayButtonClickHandler = () => {\n this.yearPickerVisible = false;\n this.monthPickerVisible = false;\n this.setFocussedDate(new Date());\n this.setAriaLiveRegionText(this.getMonthInViewText());\n\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n };\n\n private clearButtonClickHandler = () => {\n this.clearButtonClicked = true;\n this.selectedDate && this.setFocussedDate(this.selectedDate);\n this.setSelectedDate(null);\n this.icChange.emit(this.setDateChangeEventDetail(this.selectedDate));\n let text = \"Selected date cleared.\";\n if (!this.monthPickerVisible && !this.yearPickerVisible) {\n text += ` ${this.getMonthInViewText()}`;\n }\n if (this.monthPickerVisible) {\n this.focussedMonthEl.setFocus();\n } else if (this.yearPickerVisible) {\n this.focussedYearEl.setFocus();\n } else {\n this.focusFocussedDay();\n }\n this.setAriaLiveRegionText(text);\n };\n\n private monthYearNavClickHandler = (ev: Event): void => {\n const target = ev.target as Element;\n switch (target.id) {\n case \"previous-month-button\":\n this.goToPreviousMonth(this.dayButtonFocussed);\n break;\n\n case \"next-month-button\":\n this.goToNextMonth(this.dayButtonFocussed);\n break;\n\n case \"previous-year-button\":\n this.goToPreviousYear(this.dayButtonFocussed);\n break;\n\n case \"next-year-button\":\n this.goToNextYear(this.dayButtonFocussed);\n break;\n }\n };\n\n private handleCalendarClick = (event: MouseEvent): void => {\n this.clearDialogDescription();\n event.stopImmediatePropagation();\n };\n\n /* Keyboard handlers */\n private handleCalendarKeyDown = (ev: KeyboardEvent): void => {\n let handled = true;\n switch (ev.key) {\n case \"ArrowDown\":\n this.dayPickerKeyboardNav = true;\n this.moveDays(7);\n break;\n\n case \"ArrowUp\":\n this.dayPickerKeyboardNav = true;\n this.moveDays(-7);\n break;\n\n case \"ArrowLeft\":\n this.dayPickerKeyboardNav = true;\n if (this.focussedDate)\n this.moveDays(-1 * this.getNextDayToFocus(this.focussedDate, false));\n break;\n\n case \"ArrowRight\":\n this.dayPickerKeyboardNav = true;\n if (this.focussedDate)\n this.moveDays(this.getNextDayToFocus(this.focussedDate, true));\n break;\n\n case \"PageUp\":\n this.dayPickerKeyboardNav = true;\n ev.shiftKey ? this.moveYears(-1) : this.moveMonths(-1);\n break;\n\n case \"PageDown\":\n this.dayPickerKeyboardNav = true;\n ev.shiftKey ? this.moveYears(1) : this.moveMonths(1);\n break;\n\n case \"Home\":\n this.dayPickerKeyboardNav = true;\n this.setFocussedDate(\n new Date(this.focussedYear, this.focussedMonth, 1)\n );\n break;\n\n case \"End\":\n this.dayPickerKeyboardNav = true;\n this.setFocussedDate(\n new Date(this.focussedYear, this.focussedMonth + 1, 0)\n );\n break;\n\n case \"Tab\":\n handled = this.calendarTabHandler(ev);\n break;\n\n default:\n handled = false;\n break;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private monthPickerKeyDownHandler = (ev: KeyboardEvent): void => {\n let handled = true;\n switch (ev.key) {\n case \"ArrowUp\":\n case \"ArrowLeft\":\n this.updateFocussedMonth(-1);\n break;\n\n case \"ArrowDown\":\n case \"ArrowRight\":\n this.updateFocussedMonth(1);\n break;\n\n case \"Home\":\n this.updateFocussedMonth(-this.focussedMonth);\n break;\n\n case \"End\":\n this.updateFocussedMonth(11 - this.focussedMonth);\n break;\n\n case \"Tab\":\n handled = this.calendarTabHandler(ev);\n break;\n\n case \"Escape\":\n ev.stopImmediatePropagation();\n this.monthPickerVisible = false;\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n break;\n\n default:\n handled = false;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private yearPickerKeyDownHandler = (ev: KeyboardEvent): void => {\n let handled = true;\n switch (ev.key) {\n case \"ArrowUp\":\n case \"ArrowLeft\":\n this.updateFocussedYear(-1);\n break;\n\n case \"ArrowDown\":\n case \"ArrowRight\":\n this.updateFocussedYear(1);\n break;\n\n case \"Home\":\n if (this.focussedYear > this.decadeStart) {\n this.updateFocussedYear(this.decadeStart - this.focussedYear);\n }\n break;\n\n case \"End\":\n if (this.focussedYear < this.decadeEnd) {\n this.updateFocussedYear(this.decadeEnd - this.focussedYear);\n }\n break;\n\n case \"PageUp\":\n this.updateFocussedYear(-10);\n break;\n\n case \"PageDown\":\n this.updateFocussedYear(10);\n break;\n\n case \"Tab\":\n handled = this.calendarTabHandler(ev);\n break;\n\n case \"Escape\":\n ev.stopImmediatePropagation();\n this.yearPickerVisible = false;\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n break;\n\n default:\n handled = false;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private monthButtonKeyDownHandler = (ev: KeyboardEvent): void => {\n let handled = false;\n switch (ev.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n handled = true;\n this.goToPreviousMonth();\n break;\n\n case \"ArrowRight\":\n case \"ArrowDown\":\n handled = true;\n this.goToNextMonth();\n break;\n\n case \"Home\":\n handled = true;\n this.focusDay = false;\n this.moveMonths(-this.monthInView);\n break;\n\n case \"End\":\n handled = true;\n this.focusDay = false;\n this.moveMonths(11 - this.monthInView);\n break;\n\n case \"Tab\":\n if (ev.shiftKey) {\n handled = true;\n this.focusLastElement();\n }\n break;\n\n case \"Escape\":\n if (this.monthPickerVisible) {\n this.monthPickerVisible = false;\n ev.stopImmediatePropagation();\n }\n break;\n\n default:\n break;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private yearButtonKeyDownHandler = (ev: KeyboardEvent): void => {\n let handled = false;\n switch (ev.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n handled = true;\n this.goToPreviousYear();\n break;\n\n case \"ArrowRight\":\n case \"ArrowDown\":\n handled = true;\n this.goToNextYear();\n break;\n\n case \"Home\":\n if (this.yearPickerVisible && this.yearInView > this.decadeStart) {\n handled = true;\n this.moveYears(this.decadeStart - this.yearInView);\n }\n break;\n\n case \"End\":\n if (this.yearPickerVisible && this.yearInView < this.decadeEnd) {\n handled = true;\n this.moveYears(this.decadeEnd - this.focussedYear);\n }\n break;\n\n case \"PageUp\":\n handled = true;\n this.focusDay = false;\n this.moveYears(-10);\n break;\n\n case \"PageDown\":\n handled = true;\n this.focusDay = false;\n this.moveYears(10);\n break;\n\n case \"Escape\":\n if (this.yearPickerVisible) {\n this.yearPickerVisible = false;\n ev.stopImmediatePropagation();\n }\n break;\n\n default:\n break;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private todayButtonKeyDownHandler = (ev: KeyboardEvent) => {\n if (\n ev.key === \"Tab\" &&\n !ev.shiftKey &&\n this.clearButtonEl?.disabled &&\n this.parentIsDatePicker\n ) {\n this.focusFirstElement();\n ev.preventDefault();\n }\n };\n\n private clearButtonKeyDownHandler = (ev: KeyboardEvent) => {\n if (ev.key === \"Tab\" && !ev.shiftKey && this.parentIsDatePicker) {\n this.focusFirstElement();\n ev.preventDefault();\n }\n };\n\n private calendarTabHandler = (ev: KeyboardEvent): boolean => {\n let handled = false;\n if (\n !ev.shiftKey &&\n (!this.showTodayButton || this.isCurrentMonth()) &&\n (!this.showClearButton || this.clearButtonEl?.disabled) &&\n this.parentIsDatePicker\n ) {\n this.focusFirstElement();\n handled = true;\n } else if (ev.shiftKey) {\n this.yearButtonEl?.setFocus();\n handled = true;\n }\n return handled;\n };\n\n /* Utility functions */\n private setMonthSelectedLiveRegionText = () => {\n this.setAriaLiveRegionText(\n `${\n this.monthNames[this.monthInView]\n } selected. ${this.getMonthInViewText()}`\n );\n };\n\n private setYearSelectedLiveRegionText = () => {\n this.setAriaLiveRegionText(\n `${this.yearInView} selected. ${this.getMonthInViewText()}`\n );\n };\n\n private setDecadeView = (start: number) => {\n let currYear = start - 1;\n const decadeArr = [];\n while (currYear <= start + 10) {\n decadeArr.push(currYear);\n currYear++;\n }\n this.decadeView = decadeArr;\n this.decadeStart = decadeArr[1];\n this.decadeEnd = decadeArr[10];\n };\n\n private getMonthInViewText = () => {\n return `${this.monthNames[this.monthInView]} ${\n this.yearInView\n } currently in view.`;\n };\n\n private getDecadeInViewText = () => {\n return `${this.decadeStart} to ${this.decadeEnd} currently in view.`;\n };\n\n private isPrevYearAllowed = (): boolean => {\n return this.isYearAllowed(this.yearInView - 1);\n };\n\n private isNextYearAllowed = (): boolean => {\n return this.isYearAllowed(this.yearInView + 1);\n };\n\n private isYearAllowed = (yr: number): boolean =>\n yearInRange(yr, this.minDate, this.maxDate);\n\n private getMonthView = (date: Date): Date[] => {\n const start = getWeekStart(getMonthStart(date), this.startOfWeek);\n const end = addSixWeeks(start);\n\n const days: Date[] = [];\n let current = start;\n\n while (!dateMatches(current, end)) {\n days.push(current);\n current = new Date(current);\n current.setDate(current.getDate() + 1);\n }\n\n days.push(current);\n\n return days;\n };\n\n private isCurrentMonth = (): boolean => {\n const d = new Date();\n return (\n d.getFullYear() === this.yearInView && d.getMonth() === this.monthInView\n );\n };\n\n private updateMonthInView = (): void => {\n if (this.focussedDate) {\n this.currMonthView = this.getMonthView(this.focussedDate);\n\n this.focussedDay = this.focussedDate.getDate();\n this.monthInView = this.focussedDate.getMonth();\n this.yearInView = this.focussedDate.getFullYear();\n\n if (this.dayPickerKeyboardNav) {\n this.monthInViewUpdateHandled = true;\n this.setAriaLiveRegionText(this.getMonthInViewText());\n this.dayPickerKeyboardNav = false;\n }\n }\n };\n\n /* Mouse handlers */\n private navButtonMouseDownHandler = (ev: MouseEvent): void => {\n ev.preventDefault();\n };\n\n private handleCalendarMouseDown = (event: MouseEvent): void => {\n const target = event.target as HTMLElement;\n if (target.tagName !== \"IC-BUTTON\") {\n event.preventDefault();\n }\n };\n\n private handleSelectDay = (day: Date): void => {\n this.setSelectedDate(day);\n this.setFocussedDate(day);\n this.icCalendarDaySelect.emit();\n };\n\n private handleSelectMonth = (month: number): void => {\n this.moveMonths(month - this.monthInView);\n setTimeout(() => {\n this.monthButtonEl?.setFocus();\n this.monthPickerVisible = false;\n this.setMonthSelectedLiveRegionText();\n this.icCalendarMonthSelect.emit();\n }, FOCUS_TIMER);\n };\n\n private handleSelectYear = (year: number): void => {\n const yrPos = this.decadeView.indexOf(year);\n if (yrPos > 0 && yrPos < this.decadeView.length - 1) {\n this.moveYears(year - this.yearInView);\n this.focusDay = false;\n const monthName = this.monthNames[this.monthInView];\n this.setAriaLiveRegionText(\n `${year} selected. ${monthName} ${year} currently in view.`\n );\n setTimeout(() => {\n this.yearButtonEl?.setFocus();\n this.yearPickerVisible = false;\n this.icCalendarYearSelect.emit();\n }, FOCUS_TIMER);\n } else {\n const moveYears = year - this.focussedYear > 0 ? 10 : -10;\n this.updateFocussedYear(moveYears, this.yearButtonFocussed);\n this.setAriaLiveRegionText(this.getDecadeInViewText());\n }\n };\n\n private onDayButtonFocusHandler = () => {\n this.dayButtonFocussed = true;\n };\n\n private onDayButtonBlurHandler = () => {\n this.dayButtonFocussed = false;\n };\n\n private onYearButtonFocusHandler = () => {\n this.yearButtonFocussed = true;\n };\n\n private onYearButtonBlurHandler = () => {\n this.yearButtonFocussed = false;\n };\n\n /* Render helpers */\n private renderMonthYearNavButton = (\n id: string,\n flip: boolean,\n disabled: boolean\n ): void => {\n const buttonSize = this.size;\n return (\n <ic-button\n id={id}\n disableTooltip={true}\n disabled={disabled}\n onClick={this.monthYearNavClickHandler}\n class={{ flip: flip }}\n variant=\"icon-tertiary\"\n innerHTML={chevron}\n size={buttonSize}\n tabIndex={-1}\n aria-label={`Go to ${id.slice(0, -7).replace(\"-\", \" \")}`}\n onMouseDown={this.navButtonMouseDownHandler}\n />\n );\n };\n\n private previousMonthButton = (): void => {\n let disabled = false;\n if (this.disabled) {\n disabled = true;\n } else {\n if (this.focussedDate !== null && this.minDate !== null) {\n const yearMatch =\n this.focussedDate.getFullYear() === this.minDate.getFullYear();\n if (yearMatch) {\n disabled = this.monthInView - 1 < this.minDate.getMonth();\n }\n }\n }\n return this.renderMonthYearNavButton(\n \"previous-month-button\",\n true,\n disabled\n );\n };\n\n private nextMonthButton = (): void => {\n let disabled = false;\n if (this.disabled) {\n disabled = true;\n } else {\n if (this.focussedDate !== null && this.maxDate !== null) {\n const yearMatch =\n this.focussedDate.getFullYear() === this.maxDate.getFullYear();\n if (yearMatch) {\n disabled = this.monthInView + 1 > this.maxDate.getMonth();\n }\n }\n }\n return this.renderMonthYearNavButton(\"next-month-button\", false, disabled);\n };\n\n private previousYearButton = (): void => {\n return this.renderMonthYearNavButton(\n \"previous-year-button\",\n true,\n this.disabled || !this.isPrevYearAllowed()\n );\n };\n\n private nextYearButton = (): void => {\n return this.renderMonthYearNavButton(\n \"next-year-button\",\n false,\n this.disabled || !this.isNextYearAllowed()\n );\n };\n\n render() {\n const {\n dialogDescription,\n monthNames,\n focussedMonth,\n focussedYear,\n monthInView,\n yearInView,\n monthPickerVisible,\n yearPickerVisible,\n decadeView,\n minDate,\n maxDate,\n orderedDaysOfWeek,\n parentIsDatePicker,\n showClearButton,\n showTodayButton,\n size,\n theme,\n } = this;\n\n let monthButtonText = \"\";\n if (monthPickerVisible) {\n monthButtonText = `Use the arrow keys to change the selected month. To return to day picker view, press Enter or Space to select a month, or press Escape.`;\n } else {\n monthButtonText = `Press Enter or Space to open month picker view or use the arrow keys to change month.`;\n }\n\n let yearButtonText = \"\";\n if (yearPickerVisible) {\n yearButtonText = `Use the arrow keys to change the selected year. To return to day picker view, press Enter or Space to select a year, or press Escape.`;\n } else {\n yearButtonText = `Press Enter or Space to open year picker view or use the arrow keys to change the selected year.`;\n }\n\n const dialogLabel = \"choose date\";\n\n const monthLabel =\n monthNames && monthNames[monthInView]\n ? monthNames[monthInView]\n : \"Open month picker\";\n const yearLabel = this.yearInView ? this.yearInView : \"Open year picker\";\n\n let minDay = minDate;\n if (minDate && this.disablePast) {\n const yesterday = new Date(minDate);\n yesterday.setDate(minDate.getDate() - 1);\n minDay = yesterday;\n }\n\n const weeks = [];\n for (let i = 0; i < this.currMonthView.length; i += 7) {\n weeks.push(this.currMonthView.slice(i, i + 7));\n }\n\n return (\n <Host\n class={{\n [`ic-calendar-${size}`]: true,\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n }}\n >\n <div>\n <span id=\"dialog-description\" class=\"sr-only\">\n {dialogDescription}\n </span>\n <div\n {...(parentIsDatePicker && {\n role: \"dialog\",\n \"aria-modal\": \"true\",\n })}\n aria-label={dialogLabel}\n aria-describedBy=\"dialog-description\"\n class={{\n \"calendar-container\": true,\n }}\n onMouseDown={this.handleCalendarMouseDown}\n onClick={this.handleCalendarClick}\n >\n <span\n ref={(el) => (this.liveRegionEl = el)}\n id=\"live-region\"\n aria-live=\"assertive\"\n class=\"sr-only\"\n ></span>\n <div\n class={{\n \"month-year-nav-container\": true,\n }}\n >\n <div class=\"month-year-nav\">\n {this.previousMonthButton()}\n <span id=\"select-month-hint\" aria-hidden=\"true\">\n {monthButtonText}\n </span>\n <ic-button\n ref={(el: HTMLIcButtonElement | undefined) =>\n (this.monthButtonEl = el)\n }\n size={size}\n class=\"month-picker-button\"\n disabled={this.disabled}\n aria-haspopup=\"menu\"\n aria-expanded={monthPickerVisible ? \"true\" : \"false\"}\n full-width=\"true\"\n variant=\"tertiary\"\n aria-label={monthLabel}\n aria-describedby=\"select-month-hint\"\n onKeyDown={this.monthButtonKeyDownHandler}\n onClick={this.monthButtonClickHandler}\n >\n {monthNames[monthInView]}\n </ic-button>\n {this.nextMonthButton()}\n </div>\n <div class=\"month-year-nav\">\n {this.previousYearButton()}\n <span id=\"select-year-hint\" aria-hidden=\"true\">\n {yearButtonText}\n </span>\n <ic-button\n ref={(el: HTMLIcButtonElement | undefined) =>\n (this.yearButtonEl = el)\n }\n size={size}\n class=\"year-picker-button\"\n disabled={this.disabled}\n aria-haspopup=\"menu\"\n aria-expanded={yearPickerVisible ? \"true\" : \"false\"}\n full-width=\"true\"\n variant=\"tertiary\"\n aria-label={yearLabel}\n aria-describedby=\"select-year-hint\"\n onKeyDown={this.yearButtonKeyDownHandler}\n onClick={this.yearButtonClickHandler}\n >\n {this.yearInView}\n </ic-button>\n {this.nextYearButton()}\n </div>\n </div>\n {!(monthPickerVisible || yearPickerVisible) && (\n <table\n role=\"grid\"\n class={{\n calendar: true,\n hidden: monthPickerVisible || yearPickerVisible,\n }}\n onKeyDown={this.handleCalendarKeyDown}\n >\n <thead class=\"weekdays-container\">\n <tr class=\"weekdays\">\n {orderedDaysOfWeek.map((dayName) => {\n const header =\n size === \"small\" ? dayName.charAt(0) : dayName;\n return (\n <th scope=\"col\" class=\"calendar-day-header\">\n {header}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody class=\"calendar-days-container\">\n {weeks.map((week, weekIdx) => (\n <tr key={weekIdx}>\n {week.map((day) => (\n <td key={day.toISOString()}>\n <DayButton\n day={day}\n disableDay={\n this.disabled ||\n this.disableDays?.includes(Number(day.getDay()))\n }\n today={dateMatches(day, this.today)}\n selected={dateMatches(day, this.selectedDate)}\n focussed={dateMatches(day, this.focussedDate)}\n inRange={dateInRange(day, minDay, maxDate)}\n monthInView={monthInView}\n onSelectDay={this.handleSelectDay}\n focussedDayRef={this.setFocussedDayEl}\n onFocusDay={this.onDayButtonFocusHandler}\n onBlurDay={this.onDayButtonBlurHandler}\n showDaysOutsideMonth={this.showDaysOutsideMonth}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n )}\n <div\n class={{\n \"month-picker-container\": true,\n hidden: !monthPickerVisible,\n }}\n >\n {monthPickerVisible && (\n <MonthPicker\n size={size}\n onSelectMonth={this.handleSelectMonth}\n monthInView={monthInView}\n focussedMonth={focussedMonth}\n onKeyDown={this.monthPickerKeyDownHandler}\n focussedMonthRef={this.setFocussedMonthEl}\n minDate={minDate}\n maxDate={maxDate}\n yearInView={yearInView}\n ></MonthPicker>\n )}\n </div>\n <div\n class={{\n \"year-picker-container\": true,\n hidden: !yearPickerVisible,\n }}\n >\n {yearPickerVisible && (\n <YearPicker\n decadeView={decadeView}\n size={size}\n focussedYear={focussedYear}\n onSelectYear={this.handleSelectYear}\n onKeyDown={this.yearPickerKeyDownHandler}\n onFocusYear={this.onYearButtonFocusHandler}\n onBlurYear={this.onYearButtonBlurHandler}\n yearInView={yearInView}\n minDate={minDate}\n maxDate={maxDate}\n focussedYearRef={this.setFocussedYearEl}\n ></YearPicker>\n )}\n </div>\n <div\n class={{\n \"bottom-buttons\": true,\n \"no-today\": !showTodayButton,\n }}\n >\n {showTodayButton && (\n <ic-button\n id=\"today-button\"\n variant=\"tertiary\"\n ref={(el: HTMLIcButtonElement | undefined) =>\n (this.todayButtonEl = el)\n }\n size={size}\n aria-label=\"Navigate to current date\"\n onClick={this.todayButtonClickHandler}\n onKeyDown={this.todayButtonKeyDownHandler}\n disabled={this.isCurrentMonth()}\n >\n Go to today\n </ic-button>\n )}\n {showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"clear selected date\"\n ref={(el: HTMLIcButtonElement | undefined) =>\n (this.clearButtonEl = el)\n }\n variant=\"tertiary\"\n size={size}\n onClick={this.clearButtonClickHandler}\n onKeyDown={this.clearButtonKeyDownHandler}\n disabled={\n this.value === \"\" ||\n this.value === null ||\n this.value === undefined\n }\n >\n Clear\n </ic-button>\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n","@import \"../../global/normalize.css\";\n\n:host {\n --ic-input-label-helpertext-padding: var(--ic-space-xs);\n --input-bg-color: var(--ic-date-input-bg);\n --ic-input-label-text-color: var(--ic-date-input-label);\n --ic-input-label-helper-text-color: var(--ic-date-input-subtitle);\n --border-color: var(--ic-date-input-border);\n --border-color-disabled: var(--ic-date-input-border-disabled);\n --border-color-hover: var(--ic-date-input-border-default-hover);\n --border-color-pressed: var(--ic-date-input-border-default-pressed);\n --border-error-color: var(--ic-date-input-border-error);\n --border-error-color-hover: var(--ic-date-input-border-error-hover);\n --border-error-color-pressed: var(--ic-date-input-border-error-pressed);\n --border-success-color: var(--ic-date-input-border-success);\n --border-success-color-hover: var(--ic-date-input-border-success-hover);\n --border-success-color-pressed: var(--ic-date-input-border-success-pressed);\n --border-warning-color: var(--ic-date-input-border-warning);\n --border-warning-color-hover: var(--ic-date-input-border-warning-hover);\n --border-warning-color-pressed: var(--ic-date-input-border-warning-pressed);\n}\n\n:host(.ic-date-input-disabled) {\n --ic-input-label-text-color: var(--ic-date-input-label-disabled);\n --ic-input-label-helper-text-color: var(--ic-date-input-subtitle-disabled);\n}\n\ninput {\n border: 0;\n height: 100%;\n padding: 0;\n outline: none;\n background: none;\n -moz-appearance: textfield;\n appearance: textfield;\n color: var(--ic-date-input-text-filled);\n caret-color: var(--ic-date-input-typing-cursor);\n}\n\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n}\n\ninput:-webkit-autofill {\n box-shadow: 0 0 0 var(--ic-space-sm) var(--ic-color-background-primary) inset;\n -webkit-text-fill-color: var(--ic-date-input-text-filled) !important;\n}\n\ninput::placeholder {\n color: var(--ic-date-input-text-placeholder);\n}\n\nic-input-component-container {\n cursor: text;\n}\n\nic-input-component-container .focus-indicator {\n padding: var(--ic-space-xxxs) var(--ic-space-xs);\n align-items: center;\n}\n\n.date-inputs {\n color: var(--ic-date-input-text-placeholder);\n}\n\n.day-input {\n width: 1.438rem;\n}\n\n.month-input {\n width: 1.813rem;\n}\n\n.year-input,\n.year-input.fit-to-value {\n width: 2.313rem;\n}\n\n.fit-to-value {\n width: 1.25rem;\n}\n\n.sr-only {\n position: absolute;\n left: -9999px;\n}\n\n.input-container {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n}\n\n.action-buttons {\n display: flex;\n align-items: center;\n}\n\n.show-calendar-button-wrapper {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.clear-button,\n.calendar-button {\n border-radius: var(--ic-border-radius);\n transition: box-shadow var(--ic-easing-transition),\n border-radius var(--ic-easing-transition);\n margin: 0;\n}\n\n.clear-button.hidden {\n display: none;\n}\n\n.clear-button:focus,\n.calendar-button:focus,\n.clear-button:active,\n.calendar-button:active {\n background-color: var(--ic-color-focus-inner) !important;\n box-shadow: inset 0 0 0 0.125rem var(--ic-color-focus-outer) !important;\n border-radius: 0.25rem;\n}\n\n.calendar-button:focus,\n.calendar-button:active {\n --ic-button-tertiary-text-active: var(--ic-atoms-input-clear-button-focus);\n --ic-button-tertiary-text-hover-active: var(\n --ic-atoms-input-clear-button-focus\n );\n --ic-button-tertiary-text-pressed-active: var(\n --ic-atoms-input-clear-button-focus\n );\n}\n\n.clear-button:focus,\n.calendar-button:focus,\n.clear-button:active *,\n.calendar-button:active * {\n fill: var(--ic-atoms-input-clear-button-focus);\n}\n\n.clear-button svg {\n color: var(--ic-date-input-clear-icon);\n}\n\n.clear-button:focus svg {\n color: var(--ic-atoms-input-clear-button-focus);\n}\n\n.divider {\n margin: 0 var(--ic-space-xxs);\n width: var(--ic-space-1px);\n background-color: var(--ic-atoms-input-divider);\n border-radius: var(--ic-space-1px);\n}\n\n.divider.small {\n height: var(--ic-space-md);\n}\n\n.divider.medium {\n height: calc(var(--ic-space-sm) + var(--ic-space-xs));\n}\n\n.divider.large {\n height: var(--ic-space-lg);\n}\n\nic-input-validation {\n --ic-input-validation-status-text-color: var(--ic-date-input-status-text);\n --ic-input-validation-error: var(--ic-date-input-icon-error);\n --ic-input-validation-warning-icon-color: var(--ic-date-input-icon-warning);\n --ic-input-validation-success-icon-color: var(--ic-date-input-icon-success);\n}\n\n@media (forced-colors: active) {\n .clear-button svg {\n color: currentcolor;\n }\n}\n","/* eslint-disable react/jsx-no-bind */\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Host,\n Method,\n Watch,\n} from \"@stencil/core\";\nimport {\n IcAriaLive,\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcSizes,\n IcDateFormat,\n IcDateInputMonths,\n IcDateValueFormat,\n IcDayNames,\n IcWeekDays,\n IcThemeMode,\n} from \"../../utils/types\";\nimport {\n convertToDoubleDigits,\n createDate,\n dateMatches,\n extractDateFromZuluDateTime,\n isDateOrEpoch,\n splitStringDate,\n} from \"../../utils/date-helpers\";\nimport {\n addFormResetListener,\n getInputDescribedByText,\n isEmptyString,\n isNumeric,\n onComponentRequiredPropUndefined,\n removeDisabledFalse,\n removeFormResetListener,\n renderHiddenInput,\n stringEnumToArray,\n} from \"../../utils/helpers\";\nimport Clear from \"../../assets/clear-icon.svg\";\nimport Calendar from \"../../assets/calendar.svg\";\n\nlet inputIds = 0;\n\n/**\n * @slot helper-text - Content is set as the helper text for the date input.\n */\n@Component({\n tag: \"ic-date-input\",\n styleUrl: \"ic-date-input.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class DateInput {\n private DEFAULT_DATE_FORMAT: IcDateFormat = \"DD/MM/YYYY\";\n private ARIA_INVALID = \"aria-invalid\";\n private ARIA_LABEL = \"aria-label\";\n private ARIA_LABELLED_BY = \"aria-labelledby\";\n private assistiveHintId: string;\n private calendarButtonEl: HTMLIcButtonElement;\n private dayInputEl?: HTMLInputElement;\n private defaultHelperText: string;\n private EVENT_OBJECT_STRING = \"[object Event]\";\n private FIT_TO_VALUE = \"fit-to-value\";\n\n private initialValue = this.value;\n private inputCompContainerEl: HTMLIcInputComponentContainerElement;\n private INPUT_EVENT_OBJECT_STRING = \"[object InputEvent]\";\n private inputsInOrder: HTMLInputElement[] = [];\n\n private isAfterMax: boolean = false;\n private isBeforeMin: boolean = false;\n private preventInputsUpdating: boolean = false;\n private isDisabledDate: boolean = false;\n private isPasteValidationDisplayed: boolean;\n private isValidDay: boolean = true;\n private isValidMonth: boolean = true;\n private isValidDate: boolean = true;\n private isZuluTime: boolean = false;\n\n private KEYBOARD_EVENT_OBJECT_STRING = \"[object KeyboardEvent]\";\n private MAX_DAY = 31;\n private MAX_MONTH = 12;\n private monthInputEl?: HTMLInputElement;\n\n private preventAutoFormatting: boolean;\n private preventDayInput: boolean;\n private preventMonthInput: boolean;\n private preventYearInput: boolean;\n\n private previousInvalidDateTest: string;\n private previousSelectedDate: Date | null = null;\n\n private selectedDate: Date | null = null;\n private selectedDateInfoEl?: HTMLSpanElement;\n private screenReaderInfoId: string;\n private selectedDateInfoId: string;\n\n private yearInputEl?: HTMLInputElement;\n\n private externalSetDate: boolean = false;\n private clearInput: boolean = false;\n\n private calendarIsOpen: boolean = false;\n\n @Element() el: HTMLIcDateInputElement;\n\n @State() invalidDateText: string;\n @State() maxDate: Date;\n @State() minDate: Date;\n @State() calendarFocused: boolean = false;\n @State() clearButtonFocused: boolean = false;\n @State() removeLabelledBy: boolean = false;\n\n @State() day: string = \"\";\n @State() month: string = \"\";\n @State() year: string = \"\";\n\n @Watch(\"day\")\n @Watch(\"month\")\n @Watch(\"year\")\n watchInputHandler(): void {\n if (\n this.emitDatePartChange &&\n !this.externalSetDate &&\n !this.clearInput &&\n !(this.day && this.month && this.year) &&\n this.selectedDate === null\n ) {\n this.emitIcChange(this.selectedDate);\n }\n }\n\n /**\n * The format in which the date will be displayed.\n */\n @Prop() dateFormat: IcDateFormat = this.DEFAULT_DATE_FORMAT;\n /**\n * If `true`, every individual input field completed will emit an icChange event.\n */\n @Prop() emitDatePartChange?: boolean = false;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled: boolean = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el);\n }\n\n /**\n * The days of the week to disable.\n */\n @Prop({ mutable: true }) disableDays: IcWeekDays[] = [];\n\n /**\n * The text to display as the validation message when `disableDays` is set and a disabled date is entered.\n */\n @Prop() disableDaysMessage: string =\n \"The date you have selected is on a day of the week that is not allowed. Please select another date.\";\n\n /**\n * If `true`, dates in the future are not allowed. A validation message will appear if a date in the future is entered.\n */\n @Prop() disableFuture?: boolean = false;\n\n @Watch(\"disableFuture\")\n watchDisableFutureHandler(): void {\n this.watchMaxHandler();\n }\n\n /**\n * The text to display as the validation message when `disableFuture` is true and a date in the future is entered.\n */\n @Prop() disableFutureMessage: string =\n \"Dates in the future are not allowed. Please select a date in the past.\";\n\n /**\n * If `true`, dates in the past are not allowed. A validation message will appear if a date in the past is entered.\n */\n @Prop() disablePast?: boolean = false;\n\n @Watch(\"disablePast\")\n watchDisablePastHandler(): void {\n this.watchMinHandler();\n }\n\n /**\n * The text to display as the validation message when `disablePast` is true and a date in the past is entered.\n */\n @Prop() disablePastMessage: string =\n \"Dates in the past are not allowed. Please select a date in the future.\";\n\n /**\n * The helper text that will be displayed for additional field guidance. This will default to the text \"Use format\" along with the `dateFormat` value.\n */\n @Prop({ mutable: true }) helperText: string | null;\n\n /**\n * If `true`, the helper text will be visually hidden, but still read out by screenreaders.\n */\n @Prop() hideHelperText: boolean = false;\n\n /**\n * If `true`, the label will be visually hidden, but will still be read out by screen readers.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * The ID for the input.\n */\n @Prop() inputId: string = `ic-date-input-${inputIds++}`;\n\n /**\n * The text to display as the validation message when an invalid date is entered.\n */\n @Prop() invalidDateMessage: string = \"Please enter a valid date.\";\n\n /**\n * The label for the date input.\n */\n @Prop() label!: string;\n\n /**\n * The latest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disableFuture` is set to `true`.\n */\n @Prop() max: string | Date = \"\";\n\n @Watch(\"max\")\n watchMaxHandler(): void {\n if (this.disableFuture) {\n this.maxDate = new Date();\n } else {\n this.maxDate = createDate(this.max, this.dateFormat);\n }\n }\n\n /**\n * The earliest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disablePast` is set to `true`.\n */\n @Prop() min: string | Date = \"\";\n\n @Watch(\"min\")\n watchMinHandler(): void {\n if (this.disablePast) {\n this.minDate = new Date();\n } else {\n this.minDate = createDate(this.min, this.dateFormat);\n }\n }\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name: string = this.inputId;\n\n /**\n * If `true`, the input will require a value.\n */\n @Prop() required: boolean = false;\n\n @Watch(\"required\")\n watchRequiredHandler(): void {\n // Prevent asterisk being read out after the label by screen reader (by applying aria-hidden)\n // Needed because label is included in 'aria-labelledby' instead of using 'aria-label'\n const labelEl = this.el.shadowRoot?.querySelector(\"label\");\n if (this.required) {\n const asteriskSpan = document.createElement(\"span\");\n asteriskSpan.setAttribute(\"id\", \"asterisk-span\");\n asteriskSpan.setAttribute(\"aria-hidden\", \"true\");\n asteriskSpan.textContent = \" *\";\n labelEl?.appendChild(asteriskSpan);\n } else {\n const asteriskSpan = this.el.shadowRoot?.querySelector(\"#asterisk-span\");\n if (asteriskSpan) {\n asteriskSpan.remove();\n }\n }\n }\n\n /**\n * @internal If `true`, a button which displays the calendar view when clicked will be displayed.\n */\n @Prop() showCalendarButton?: boolean = false;\n\n /**\n * If `true`, a button which clears the date input when clicked will be displayed.\n */\n @Prop() showClearButton?: boolean = true;\n\n /**\n * The size of the date input to be displayed.\n */\n @Prop() size: IcSizes = \"medium\";\n\n /**\n * Sets the date picker to the dark or light theme colors. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * The value of the date input. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n */\n @Prop({ mutable: true }) value?: IcDateValueFormat = \"\";\n\n /**\n * The value of the `aria-live` attribute on the validation message.\n */\n @Prop() validationAriaLive: IcAriaLive = \"polite\";\n\n /**\n * The validation status - e.g. 'error' | 'warning' | 'success'. This will override the built-in date validation.\n */\n @Prop({ mutable: true }) validationStatus: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The text to display as the validation message. This will override the built-in date validation.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * @internal Emitted when the calendar is opened.\n */\n @Event() calendarButtonClicked: EventEmitter<{ value: Date | null }>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() icBlur: EventEmitter<{ value: Date | null }>;\n\n /**\n * Emitted when the value has changed.\n */\n @Event() icChange: EventEmitter<{\n value: Date | null;\n dateObject: {\n day: string | null;\n month: string | null;\n year: string | null;\n };\n utcValue: Date | null;\n }>;\n\n /**\n * Emitted when the input gains focus.\n */\n @Event() icFocus: EventEmitter<{ value: Date | null }>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n }\n\n componentWillLoad(): void {\n this.defaultHelperText = `Use format ${this.dateFormat}`;\n\n if (isEmptyString(this.helperText))\n this.helperText = this.defaultHelperText;\n\n this.watchMinHandler();\n this.watchMaxHandler();\n\n if (this.value) {\n this.externalSetDate = true;\n this.setDate(this.value);\n }\n\n this.screenReaderInfoId = `${this.inputId}-screen-reader-info`;\n this.assistiveHintId = `${this.inputId}-assistive-hint`;\n this.selectedDateInfoId = `${this.inputId}-selected-date-info`;\n\n addFormResetListener(this.el, this.handleFormReset);\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n this.setInputsInOrder();\n\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Date Input\"\n );\n\n if (this.value) {\n this.updateInputValues(this.day, this.month, this.year);\n this.inputsInOrder.forEach((input) => {\n input.classList.add(this.FIT_TO_VALUE);\n });\n }\n\n this.setAriaInvalid(\n this.isValidDay,\n this.isValidMonth,\n this.isValidDate,\n this.isDisabledDate\n );\n\n if (this.value) {\n this.notifyScreenReaderSelectedDate();\n }\n\n this.inputsInOrder.forEach((input) => {\n input.addEventListener(\"input\", this.handleInput);\n input.addEventListener(\"focus\", this.handleFocus);\n input.addEventListener(\"blur\", this.handleBlur);\n });\n\n this.watchRequiredHandler();\n }\n\n componentWillUpdate(): void {\n if (isEmptyString(this.helperText))\n this.helperText = this.defaultHelperText;\n\n if (!this.preventInputsUpdating) this.setDate(this.value);\n\n this.setAriaInvalid(\n this.isValidDay,\n this.isValidMonth,\n this.isValidDate,\n this.isDisabledDate\n );\n this.handleDateChange(false);\n this.preventInputsUpdating = false;\n }\n\n componentDidRender(): void {\n if (this.removeLabelledBy) {\n this.removeAriaLabelledBy();\n return;\n }\n\n this.setAriaLabelledBy();\n }\n\n /**\n * Returns the value as a Date object\n * @returns Date\n */\n @Method()\n async getDate(): Promise<Date | null> {\n return this.selectedDate;\n }\n\n /**\n * @internal Sets focus on the calendar button.\n */\n @Method()\n async setCalendarFocus(): Promise<void> {\n if (this.calendarButtonEl) {\n this.calendarButtonEl.focus();\n }\n }\n\n /**\n * @internal Used to pass disabledDays from parent component.\n */\n @Method()\n async setDisableDays(days: IcWeekDays[]): Promise<void> {\n this.disableDays = days;\n }\n\n /**\n * @internal Used to enable other components to invoke an IcChange event from the input.\n */\n @Method()\n async triggerIcChange(d: Date | null): Promise<void> {\n this.externalSetDate = true;\n this.setDate(d);\n this.emitIcChange(d);\n this.externalSetDate = false;\n }\n\n private setInputPasteValue = (\n input: EventTarget | null,\n pastedValue: string\n ) => {\n if (input) {\n const inputEl = input as HTMLInputElement;\n\n inputEl.value = pastedValue;\n inputEl.classList.add(this.FIT_TO_VALUE);\n }\n };\n\n private checkSingleCopiedValueIsValid = (\n input: EventTarget | null,\n pastedValue: string\n ) => {\n let isValid = false;\n const value = Number(pastedValue);\n\n switch (input) {\n case this.dayInputEl:\n isValid = value >= 1 && value <= this.MAX_DAY;\n break;\n case this.monthInputEl:\n isValid = value >= 1 && value <= this.MAX_MONTH;\n break;\n case this.yearInputEl:\n isValid = true;\n break;\n }\n\n return isValid;\n };\n\n /**\n * Using Object.prototype.string to determine type if event from user\n * @param event - event object used to differentiate keyboard, generic or input event\n * @returns boolean\n */\n private isKeyboardOrEvent = (event: Event) => {\n return (\n Object.prototype.toString.call(event) === this.EVENT_OBJECT_STRING ||\n Object.prototype.toString.call(event) ===\n this.KEYBOARD_EVENT_OBJECT_STRING\n );\n };\n\n private setDateValidity = () => {\n if (!isEmptyString(this.day)) {\n this.isValidDay = +this.day > this.MAX_DAY ? false : true;\n } else {\n this.isValidDay = true;\n }\n\n if (!isEmptyString(this.month)) {\n this.isValidMonth = +this.month > this.MAX_MONTH ? false : true;\n } else {\n this.isValidMonth = true;\n }\n };\n\n private handleInput = (event: Event) => {\n const inputEvent = event as InputEvent;\n const input = event.target as HTMLInputElement;\n\n if (input !== this.yearInputEl) {\n // Only auto-format if input event is not a character being deleted\n // and not as user is changing value using up / down keys\n if (\n inputEvent.inputType !== \"deleteContentBackward\" &&\n !this.preventAutoFormatting\n ) {\n if (\n input.value.length === 1 &&\n ((input === this.dayInputEl && +input.value >= 4) ||\n (input === this.monthInputEl && +input.value >= 2)) &&\n +input.value <= 9\n ) {\n this.setInputValue(input);\n this.notifyScreenReader(input, event);\n this.moveToNextInput(input);\n }\n\n if (input.value.length === 2) {\n if (+input.value === 0) {\n input.value = \"01\";\n }\n this.setInputValue(input);\n this.setPreventInput(input, true);\n this.notifyScreenReader(input, event);\n this.moveToNextInput(input);\n } else {\n this.setPreventInput(input, false);\n }\n } else if (this.preventAutoFormatting) {\n /**\n * Using arrow keys prevents auto formatting so need to deal with\n * switching from arrow keys to inputting numbers\n **/\n if (input.value.length === 2 && !this.isKeyboardOrEvent(event)) {\n this.setInputValue(input);\n this.setPreventInput(input, true);\n this.moveToNextInput(input);\n } else {\n this.setInputValue(input);\n }\n }\n\n if (input.value.length !== 2) {\n this.setPreventInput(input, false);\n }\n } else {\n if (input.value.length === 4) {\n this.setInputValue(input);\n if (\n Object.prototype.toString.call(event) !== this.EVENT_OBJECT_STRING\n ) {\n this.moveToNextInput(input);\n }\n this.setPreventInput(input, true);\n } else {\n this.setPreventInput(input, false);\n }\n }\n\n // Add / remove class to make input width match size of value i.e. 2 digits' width for day / month, 4 for year\n this.setFitToValueStyling(input);\n\n if (input.value.length === 0) {\n this.setInputValue(input, true);\n this.setValidationMessage();\n }\n\n this.notifyScreenReader(input, event);\n };\n\n private handleKeyDown = (event: KeyboardEvent, isInputPrevented: boolean) => {\n const input = event.target as HTMLInputElement;\n\n const eventKey = event.key?.toLowerCase();\n // Regex required due to FF allowing all characters as values for number text field.\n const regex =\n /-?\\d*\\.?\\d+(e[-+]?\\d+)?|[/-]|arrowup|arrowdown|arrowleft|arrowright|shift|tab|backspace|delete/;\n if (\n !regex.test(eventKey) &&\n !(\n (event.ctrlKey || event.metaKey) &&\n (eventKey === \"v\" || eventKey === \"c\")\n )\n ) {\n event.preventDefault();\n }\n\n switch (eventKey) {\n case \"/\":\n case \"-\":\n case \".\":\n event.preventDefault();\n this.setPasteInvalidText();\n this.moveToNextInput(input);\n break;\n case \"arrowright\":\n case \"arrowleft\":\n event.preventDefault();\n this.handleLeftRightArrowKeyPress(input, eventKey);\n break;\n case \"arrowup\":\n case \"arrowdown\":\n this.preventAutoFormatting = true;\n this.handleUpDownArrowKeyPress(input, event);\n break;\n case \"backspace\":\n if (input.value.length === 0) {\n event.preventDefault();\n this.moveToPreviousInput(input);\n }\n break;\n default:\n break;\n }\n\n this.preventInput(event, isInputPrevented);\n this.preventInputsUpdating = true;\n };\n\n private handleFocus = (event: FocusEvent) => {\n // Highlight / select all characters in input for easy replacement\n const input = event.target as HTMLInputElement;\n\n input.select();\n };\n\n private handleBlur = (event: FocusEvent) => {\n const input = event.target;\n if (input) {\n this.setPasteInvalidText();\n this.autocompleteInput(input as HTMLInputElement);\n }\n };\n\n private handleLeftRightArrowKeyPress = (\n input: HTMLInputElement,\n key: string\n ) => {\n if (key === \"arrowright\") {\n this.moveToNextInput(input);\n } else {\n this.moveToPreviousInput(input);\n }\n\n this.setPasteInvalidText();\n };\n\n private notifyScreenReaderSelectedDate = () => {\n if (this.selectedDate && this.selectedDateInfoEl) {\n const dayNames = stringEnumToArray(IcDayNames);\n const months = stringEnumToArray(IcDateInputMonths);\n\n this.selectedDateInfoEl.textContent = `Selected date: ${\n dayNames[this.selectedDate.getDay()]\n }, ${this.selectedDate.getDate()} ${\n months[this.selectedDate.getMonth()]\n } ${this.selectedDate.getFullYear()}`;\n }\n };\n\n private handleUpDownArrowKeyPress = (\n input: HTMLInputElement,\n event: KeyboardEvent\n ) => {\n const minValue = input === this.yearInputEl ? 0 : 1;\n\n let maxValue = 9999;\n\n switch (input) {\n case this.dayInputEl:\n maxValue = this.MAX_DAY;\n break;\n case this.monthInputEl:\n maxValue = this.MAX_MONTH;\n break;\n case this.yearInputEl:\n maxValue = 9999;\n }\n\n // Make value loop round when min / max reached\n if (input?.value) {\n if (event.key === \"ArrowUp\") {\n if (+input.value === maxValue) {\n event.preventDefault();\n input.value = `0${minValue}`;\n } else {\n input.value =\n +input.value + 1 < 10\n ? `0${+input.value + 1}`\n : (+input.value + 1).toString();\n }\n this.notifyScreenReader(input, event);\n }\n\n if (event.key === \"ArrowDown\") {\n if (+input.value === minValue) {\n event.preventDefault();\n input.value = maxValue.toString();\n } else {\n input.value =\n +input.value - 1 < 10\n ? `0${+input.value - 1}`\n : (+input.value - 1).toString();\n }\n this.notifyScreenReader(input, event);\n }\n } else {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n input.value =\n input === this.yearInputEl\n ? new Date().getFullYear().toString()\n : maxValue.toString();\n this.notifyScreenReader(input, event);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n input.value =\n input === this.yearInputEl\n ? new Date().getFullYear().toString()\n : `0${minValue}`;\n this.notifyScreenReader(input, event);\n }\n }\n\n this.setInputValue(input);\n this.setFitToValueStyling(input);\n };\n\n private handleDateChange = (force: boolean) => {\n // Prevent icChange being emitted when each individual input is changed\n // This method is used within componentWillUpdate instead of using @Watch('value');\n if (force || !dateMatches(this.selectedDate, this.previousSelectedDate)) {\n if (this.value) {\n this.inputsInOrder.forEach((input) => {\n input.classList.add(this.FIT_TO_VALUE);\n });\n }\n if (this.day && this.month && this.year && this.invalidDateText === \"\") {\n this.setValueAndEmitChange(this.selectedDate);\n this.notifyScreenReaderSelectedDate();\n } else if (\n !(this.selectedDate === null && this.previousSelectedDate === null) &&\n this.selectedDateInfoEl\n ) {\n this.setValueAndEmitChange(null);\n this.selectedDateInfoEl.textContent = \"\";\n }\n this.previousSelectedDate = this.selectedDate;\n\n if (!this.preventInputsUpdating) {\n this.updateInputValues(this.day, this.month, this.year);\n }\n }\n };\n\n private slicePastedDate = (valueLength: number, datePart: string): string => {\n return datePart.length > valueLength\n ? datePart.slice(0, valueLength)\n : datePart;\n };\n\n private isPastedStringDateValid = (value: string) => {\n if (\n /\\d+-\\d+-\\d+$/.test(value) ||\n /\\d+\\/\\d+\\/\\d+/.test(value) ||\n /\\d+\\.\\d+\\.\\d+/.test(value)\n ) {\n return true;\n }\n\n if (\n /[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}(?::[0-9]{2}(?:\\.\\d+)?)?Z/.test(\n value\n )\n ) {\n this.isZuluTime = true;\n return true;\n }\n\n return false;\n };\n\n // Set value of each input to value of pasted date part\n // Allows formats separated by '-' or '/'\n private handlePaste = (event: ClipboardEvent) => {\n event.preventDefault();\n\n const pastedValue = event.clipboardData?.getData(\"Text\") || \"\";\n const isValidDate = this.isPastedStringDateValid(pastedValue);\n\n this.setPastedValueAndValidation(isValidDate, pastedValue, event);\n };\n\n private setDate = (date?: string | Date | null) => {\n if (date === null || date === \"\" || date === undefined) {\n if (this.day) this.day = \"\";\n if (this.month) this.month = \"\";\n if (this.year) this.year = \"\";\n this.inputsInOrder.forEach((input) => {\n input.classList.remove(this.FIT_TO_VALUE);\n this.setPreventInput(input, false);\n });\n this.handleDateChange(true);\n } else {\n if (isDateOrEpoch(date)) {\n let newDate;\n if (typeof date === \"string\") {\n // Checking if epoch date time\n newDate = new Date(+date);\n } else {\n newDate = date;\n }\n\n this.day = convertToDoubleDigits(newDate.getDate());\n this.month = convertToDoubleDigits(newDate.getMonth() + 1);\n this.year = newDate.getFullYear().toString();\n } else if (typeof date === \"string\") {\n const defaultDateArray = splitStringDate(date, this.dateFormat);\n this.selectedDate = new Date(\n Number(defaultDateArray[0]),\n Number(defaultDateArray[1]) - 1,\n Number(defaultDateArray[2])\n );\n this.year = defaultDateArray[0];\n this.month = defaultDateArray[1];\n this.day = defaultDateArray[2];\n this.setValueAndEmitChange(this.selectedDate);\n }\n }\n\n this.setValidationMessage();\n };\n\n private formatMinMax = (date: Date) => {\n let formattedDate;\n\n const day = convertToDoubleDigits(date.getDate());\n const month = convertToDoubleDigits(date.getMonth() + 1);\n const year = date.getFullYear();\n\n switch (this.dateFormat) {\n case this.DEFAULT_DATE_FORMAT:\n formattedDate = `${day}/${month}/${year}`;\n break;\n case \"MM/DD/YYYY\":\n formattedDate = `${month}/${day}/${year}`;\n break;\n case \"YYYY/MM/DD\":\n formattedDate = `${year}/${month}/${day}`;\n break;\n default:\n break;\n }\n return formattedDate;\n };\n private updateInputValues = (day: string, month: string, year: string) => {\n if (this.dayInputEl && this.monthInputEl && this.yearInputEl) {\n this.dayInputEl.value = day;\n this.monthInputEl.value = month;\n this.yearInputEl.value = year;\n }\n };\n\n // Set value in state based on input\n private setInputValue = (input: HTMLInputElement, clear = false) => {\n const newValue = clear ? \"\" : input.value;\n\n switch (input) {\n case this.dayInputEl:\n this.day = newValue;\n break;\n case this.monthInputEl:\n this.month = newValue;\n break;\n case this.yearInputEl:\n if (this.year !== newValue) {\n this.year = newValue;\n }\n }\n\n this.setValidationMessage();\n };\n\n private setValidationMessage = () => {\n this.setDateValidity();\n\n if (\n !isEmptyString(this.day) &&\n !isEmptyString(this.month) &&\n !isEmptyString(this.year)\n ) {\n // Check whether date actually exists\n // (used https://www.hectane.com/blog/javascript-date-validation-with-leap-year)\n this.selectedDate = this.convertToDate(this.year, this.month, this.day);\n this.isValidDate =\n !!this.selectedDate && this.selectedDate.getDate() == +this.day;\n this.isDisabledDate = this.isSelectedDateDisabled();\n\n if (!this.isValidDate || this.isDisabledDate) {\n this.inputsInOrder.forEach((input) =>\n input.setAttribute(this.ARIA_INVALID, \"true\")\n );\n } else {\n this.inputsInOrder.forEach((input) =>\n input.removeAttribute(this.ARIA_INVALID)\n );\n }\n } else {\n this.selectedDate = null;\n }\n\n if (!(this.isValidDay && this.isValidMonth && this.isValidDate)) {\n this.invalidDateText = this.invalidDateMessage;\n } else if (this.isDisabledDate && this.selectedDate !== null) {\n if (this.isBeforeMin) {\n if (this.disablePast) {\n this.invalidDateText = this.disablePastMessage;\n } else {\n this.invalidDateText = `Please enter a date after ${this.formatMinMax(\n this.minDate\n )}.`;\n }\n } else if (this.isAfterMax) {\n if (this.disableFuture) {\n this.invalidDateText = this.disableFutureMessage;\n } else {\n this.invalidDateText = `Please enter a date before ${this.formatMinMax(\n this.maxDate\n )}.`;\n }\n } else if (this.disableDays.length !== 0) {\n this.invalidDateText = this.disableDaysMessage;\n } else {\n if (this.disablePast) {\n this.invalidDateText = this.disablePastMessage;\n }\n if (this.disableFuture) {\n this.invalidDateText = this.disableFutureMessage;\n }\n }\n } else {\n this.invalidDateText = \"\";\n }\n };\n\n // Set refs to the input elements in the order they are displayed (based on the dateFormat)\n private setInputsInOrder = () => {\n this.el.shadowRoot\n ?.querySelectorAll(\"input\")\n .forEach((input) => this.inputsInOrder.push(input));\n };\n\n // Includes text usually added using aria-describedby\n // (which doesn't work on input component container)\n private setAriaLabelledBy = () => {\n if (\n this.disabled &&\n !isEmptyString(\n this.inputCompContainerEl?.getAttribute(this.ARIA_LABELLED_BY)\n )\n ) {\n this.removeAriaLabelledBy();\n return;\n }\n\n if (this.disabled) {\n return;\n }\n\n const labelEl = this.el.shadowRoot?.querySelector(\"label\");\n const labelId = `${this.inputId}-label`;\n\n if (labelEl !== null && labelEl !== undefined) {\n labelEl.id = labelId;\n }\n\n const hasValidation =\n !isEmptyString(this.validationStatus) ||\n !isEmptyString(this.invalidDateText);\n\n const labelledBy = `${labelEl?.id ?? \"\"} ${\n this.screenReaderInfoId\n } ${getInputDescribedByText(\n this.el,\n this.inputId,\n this.helperText !== \"\" && this.helperText !== this.defaultHelperText,\n hasValidation\n )} ${this.selectedDate ? this.selectedDateInfoId : \"\"} ${\n this.assistiveHintId\n }`;\n\n this.inputCompContainerEl.setAttribute(this.ARIA_LABELLED_BY, labelledBy);\n };\n\n // Sets boolean for each input, used to limit the number of characters within each field (2 for day / month, 4 for year)\n private setPreventInput = (input: HTMLInputElement, isPrevented: boolean) => {\n switch (input) {\n case this.dayInputEl:\n this.preventDayInput = isPrevented;\n break;\n case this.monthInputEl:\n this.preventMonthInput = isPrevented;\n break;\n case this.yearInputEl:\n this.preventYearInput = isPrevented;\n }\n };\n\n // Get input based on letter representing each date part (\"D\", \"M\" or \"Y\")\n // (retrieved from dateFormat)\n private getInputFromDatePart = (datePart: string) => {\n const dayInput = (\n <input\n class=\"day-input\"\n id=\"day-input\"\n ref={(el) => (this.dayInputEl = el)}\n aria-label=\"day\"\n placeholder=\"DD\"\n disabled={this.disabled}\n aria-required={`${this.required}`}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventDayInput)}\n ></input>\n );\n\n const monthInput = (\n <input\n id=\"month-input\"\n class=\"month-input\"\n ref={(el) => (this.monthInputEl = el)}\n aria-label=\"month\"\n placeholder=\"MM\"\n disabled={this.disabled}\n aria-required={`${this.required}`}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventMonthInput)}\n ></input>\n );\n\n const yearInput = (\n <input\n id=\"year-input\"\n class=\"year-input\"\n ref={(el) => (this.yearInputEl = el)}\n aria-label=\"year\"\n placeholder=\"YYYY\"\n maxLength={4}\n disabled={this.disabled}\n aria-required={`${this.required}`}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventYearInput)}\n ></input>\n );\n\n let input;\n\n switch (datePart) {\n case \"D\":\n input = dayInput;\n break;\n case \"M\":\n input = monthInput;\n break;\n case \"Y\":\n input = yearInput;\n }\n\n return input;\n };\n\n // Get input elements in order of chosen date format\n private getInputsInOrder = () => {\n const dateParts = this.dateFormat.split(\"/\");\n\n const inputsInOrder: HTMLInputElement[] = [];\n\n dateParts.forEach((part: string) => {\n inputsInOrder.push(this.getInputFromDatePart(part.substring(0, 1)));\n });\n\n return inputsInOrder;\n };\n\n // To add to the end of assistive hint to make it clearer that each date part has its own input\n // that can be changed individually\n private getDescOfInputsOrder = () => {\n let description;\n\n switch (this.dateFormat) {\n case this.DEFAULT_DATE_FORMAT:\n description = \"day, month, and year\";\n break;\n case \"MM/DD/YYYY\":\n description = \"month, day, and year\";\n break;\n case \"YYYY/MM/DD\":\n description = \"year, month, and day\";\n }\n\n return description;\n };\n\n // Add 'required' or 'invalid data' to span used in aria-labelledby\n // Many ARIA attributes aren't read out by screen reader when on the input component container\n private getScreenReaderInfo = (validationStatus: string) => {\n let inputDescriptors = \"\";\n\n if (this.required) {\n inputDescriptors += \"required\";\n }\n\n if (validationStatus === IcInformationStatus.Error) {\n inputDescriptors += \" invalid data\";\n }\n\n return inputDescriptors === \"\" ? \"\" : inputDescriptors + \", \";\n };\n\n // Prevent non-number characters being entered\n // ('e' or '.' - which are usually allowed in <input type=\"number\">)\n // And limit the number of characters within each field (2 for day / month, 4 for year)\n // (because 'maxlength' doesn't work on <input type=\"number\">)\n private preventInput = (event: KeyboardEvent, isInputPrevented: boolean) => {\n const key = event.key;\n const input = event.target as HTMLInputElement;\n let selectedString;\n\n if (input) {\n selectedString = input.value.substring(\n input.selectionStart || 0,\n input.selectionEnd || undefined\n );\n }\n\n if (\n key === \"e\" ||\n key === \".\" ||\n key === \"-\" ||\n (event.key >= \"0\" &&\n event.key <= \"9\" &&\n isInputPrevented &&\n !selectedString)\n ) {\n event.preventDefault();\n }\n };\n\n /**\n * Get whether date has been disabled using disableFuture or disablePast prop, but always allow current day\n * Consider using dateClamp and inDateRange\n * @returns `boolean`\n */\n private isSelectedDateDisabled = () => {\n if (!this.selectedDate) return false;\n\n const currentDate = new Date();\n const isNotToday =\n this.selectedDate.toDateString() !== currentDate.toDateString();\n\n this.isAfterMax =\n this.maxDate && this.selectedDate > this.maxDate && isNotToday;\n this.isBeforeMin =\n this.minDate && this.selectedDate < this.minDate && isNotToday;\n\n return (\n this.isAfterMax ||\n this.isBeforeMin ||\n this.disableDays.includes(this.selectedDate.getDay()) ||\n (((!!this.disablePast && this.selectedDate < currentDate) ||\n (!!this.disableFuture && this.selectedDate > currentDate)) &&\n isNotToday)\n );\n };\n\n private moveToNextInput = (currentInput: HTMLInputElement) => {\n this.preventAutoFormatting = false;\n\n this.inputsInOrder[\n this.inputsInOrder.findIndex((input) => input === currentInput) + 1\n ]?.focus();\n };\n\n private moveToPreviousInput = (currentInput: HTMLInputElement) => {\n this.preventAutoFormatting = false;\n\n this.inputsInOrder[\n this.inputsInOrder.findIndex((input) => input === currentInput) - 1\n ]?.focus();\n };\n\n private autocompleteInput = (input: HTMLInputElement) => {\n const inputValue = input.value;\n if (this.yearInputEl && input === this.yearInputEl) {\n // Autocomplete year as current millennium when fewer than 4 characters entered\n const yearNumbers = [\"2\", \"0\", \"0\"];\n\n let autocompletedInput = \"\";\n\n if (inputValue) {\n yearNumbers.forEach((number, index) => {\n if (inputValue.length + index <= 3) {\n autocompletedInput += number;\n }\n });\n\n this.yearInputEl.value = `${autocompletedInput}${inputValue}`;\n }\n } else if (inputValue.length === 1) {\n // Autocomplete input as 2 characters (leading zero) when only 1 character entered (for day and month)\n input.value = +inputValue === 0 ? \"01\" : `0${inputValue}`;\n }\n\n if (input.value) {\n this.setInputValue(input);\n }\n };\n\n private convertToDate = (\n year: string,\n month: string,\n day: string\n ): Date | null => {\n if (!isEmptyString(year) && !isEmptyString(month) && !isEmptyString(day)) {\n return new Date(+year, +month - 1, +day);\n } else {\n return null;\n }\n };\n\n private handleHostBlur = () => {\n this.removeLabelledBy = false;\n this.icBlur.emit({ value: this.selectedDate });\n };\n\n private handleHostFocus = () => {\n if (\n this.el.shadowRoot?.activeElement?.id.match(/(day|month|year)-input$/)\n ) {\n this.removeLabelledBy = false;\n } else {\n this.removeLabelledBy = true;\n }\n this.icFocus.emit({ value: this.selectedDate });\n };\n\n private handleFormReset = () => {\n // Get the initial value and populate day, month and year again.\n this.setDate(this.initialValue);\n this.setValidationMessage();\n this.handleDateChange(false);\n };\n\n private getAriaLabel = (input: HTMLInputElement) =>\n input.getAttribute(this.ARIA_LABEL);\n\n private notifyScreenReaderArrowKeys = (input: HTMLInputElement) => {\n const liveRegion = this.el.shadowRoot?.querySelector(\"#live-region\");\n const ariaLabel = this.getAriaLabel(input);\n\n if (liveRegion && input.value && ariaLabel) {\n let announcement = \"\";\n\n if (\n input === this.monthInputEl &&\n !!IcDateInputMonths[+input.value - 1]\n ) {\n announcement = `${input.value} - ${\n IcDateInputMonths[+input.value - 1]\n }, ${ariaLabel}`;\n }\n\n if (input === this.dayInputEl || input === this.yearInputEl) {\n announcement = `${input.value}, ${ariaLabel}`;\n }\n\n liveRegion.textContent = announcement;\n }\n };\n\n private removeAriaLabelledBy() {\n this.inputCompContainerEl.removeAttribute(this.ARIA_LABELLED_BY);\n }\n\n private setPastedValueAndValidation(\n isValidDate: boolean,\n pastedValue: string,\n event: ClipboardEvent\n ) {\n switch (true) {\n case isValidDate: {\n const nextParsedValue = this.isZuluTime\n ? extractDateFromZuluDateTime(pastedValue)\n : pastedValue;\n const dateParts = nextParsedValue.split(/-|\\/|\\./);\n this.inputsInOrder.forEach((input, index) => {\n input.classList.add(this.FIT_TO_VALUE);\n\n if (this.isZuluTime) {\n this.pasteZuluDateTime(dateParts, index);\n } else {\n let dateValue;\n\n if (input === this.dayInputEl || input === this.monthInputEl) {\n dateValue = this.slicePastedDate(2, dateParts[index]);\n } else {\n dateValue = this.slicePastedDate(4, dateParts[index]);\n }\n\n input.value = dateValue;\n\n this.setInputValue(input);\n this.autocompleteInput(input);\n }\n });\n this.isZuluTime = false;\n break;\n }\n\n case (pastedValue.length === 1 ||\n pastedValue.length === 2 ||\n pastedValue.length === 4) &&\n isNumeric(pastedValue):\n if (this.checkSingleCopiedValueIsValid(event.target, pastedValue)) {\n // Check if copied value can be pasted into input\n this.setInputPasteValue(event.target, pastedValue);\n this.setInputValue(event.target as HTMLInputElement);\n } else {\n this.displayPastedValidation(event);\n }\n break;\n\n case pastedValue.length === 3 && isNumeric(pastedValue):\n if (event.target !== this.yearInputEl) {\n this.displayPastedValidation(event);\n } else {\n this.setInputPasteValue(event.target, pastedValue);\n this.setInputValue(event.target as HTMLInputElement);\n }\n break;\n\n case pastedValue.length >= 5 && isNumeric(pastedValue):\n this.displayPastedValidation(event);\n }\n }\n\n private pasteZuluDateTime(dateParts: string[], index: number) {\n // ['YYYY', 'MM', 'DD']\n if (index === 0 && this.yearInputEl) {\n const dateValue = this.slicePastedDate(4, dateParts[index]);\n this.yearInputEl.value = dateValue;\n this.setInputValue(this.yearInputEl);\n } else if (index === 1 && this.monthInputEl) {\n // The month value is the second item in the array\n const dateValue = this.slicePastedDate(2, dateParts[index]);\n this.monthInputEl.value = dateValue;\n this.setInputValue(this.monthInputEl);\n } else if (this.dayInputEl) {\n const dateValue = this.slicePastedDate(2, dateParts[index]);\n this.dayInputEl.value = dateValue;\n this.setInputValue(this.dayInputEl);\n }\n }\n\n private displayPastedValidation(event: ClipboardEvent) {\n if (this.invalidDateText?.length > 0) {\n this.previousInvalidDateTest = this.invalidDateText;\n }\n\n this.invalidDateText = `Please paste a valid ${this.getAriaLabel(\n event.target as HTMLInputElement\n )}`;\n\n this.validationStatus = IcInformationStatus.Error;\n this.isPasteValidationDisplayed = true;\n }\n\n private setPasteInvalidText() {\n if (this.isPasteValidationDisplayed) {\n this.invalidDateText = this.previousInvalidDateTest ?? \"\";\n this.isPasteValidationDisplayed = false;\n\n // This is to prevent setDate from triggering within componentWillUpdate\n this.preventInputsUpdating = true;\n }\n }\n\n private notifyScreenReader(input: HTMLInputElement, event: Event) {\n const liveRegion = this.el.shadowRoot?.querySelector(\"#live-region\");\n\n if (liveRegion) {\n if (this.isKeyboardOrEvent(event)) {\n this.notifyScreenReaderArrowKeys(input);\n } else if (\n Object.prototype.toString.call(event) === this.INPUT_EVENT_OBJECT_STRING\n ) {\n this.notifyScreenReaderInput(input, liveRegion as HTMLElement);\n }\n }\n }\n\n private notifyScreenReaderInput = (\n input: HTMLInputElement,\n liveRegion: HTMLElement\n ) => {\n const ariaLabel = this.getAriaLabel(input);\n const value = input.value;\n\n if (ariaLabel && value) {\n let announcement = \"\";\n\n const monthValue = IcDateInputMonths[+value - 1];\n if (\n input === this.monthInputEl &&\n !!monthValue &&\n this.isValidMonth &&\n value.length === 2\n ) {\n announcement = `${value} - ${monthValue}`;\n } else if (\n (input === this.dayInputEl && this.isValidDay && value.length === 2) ||\n (input === this.yearInputEl && value.length === 4)\n ) {\n announcement = value;\n }\n\n liveRegion.textContent = `${announcement}, ${ariaLabel}`;\n }\n };\n\n private setFitToValueStyling = (input: HTMLInputElement) => {\n if (input.value) {\n input.classList.add(this.FIT_TO_VALUE);\n } else {\n input.classList.remove(this.FIT_TO_VALUE);\n }\n };\n\n private setAriaInvalid = (\n validDay: boolean,\n validMonth: boolean,\n validDate: boolean,\n disabledDate: boolean\n ) => {\n if (this.inputsInOrder.length) {\n this.inputsInOrder.forEach((input) => {\n input.removeAttribute(this.ARIA_INVALID);\n });\n\n if (!validDay) {\n this.dayInputEl?.setAttribute(this.ARIA_INVALID, \"true\");\n }\n\n if (!validMonth) {\n this.monthInputEl?.setAttribute(this.ARIA_INVALID, \"true\");\n }\n\n if (!validDate || disabledDate) {\n this.inputsInOrder.forEach((input) => {\n input.setAttribute(this.ARIA_INVALID, \"true\");\n });\n }\n }\n };\n\n private handleClear = () => {\n this.clearInput = true;\n this.inputsInOrder.forEach((input) => {\n input.classList.remove(this.FIT_TO_VALUE);\n this.setInputValue(input, true);\n this.setPreventInput(input, false);\n });\n this.clearInput = false;\n this.preventInputsUpdating = false;\n this.setValidationMessage();\n this.handleDateChange(true);\n\n this.inputsInOrder[0].focus();\n };\n\n private handleCalendarOpen = (ev: MouseEvent) => {\n ev.stopImmediatePropagation();\n this.calendarButtonEl?.shadowRoot\n ?.querySelector(\"ic-tooltip\")\n ?.displayTooltip(false);\n this.calendarButtonClicked.emit({ value: this.selectedDate });\n this.calendarButtonEl?.shadowRoot\n ?.querySelector(\"ic-tooltip\")\n ?.displayTooltip(false);\n this.preventInputsUpdating = false;\n this.calendarIsOpen = true;\n };\n\n private setValueAndEmitChange = (value: Date | null) => {\n if (!dateMatches(this.value ? new Date(this.value) : null, value)) {\n this.emitIcChange(value);\n this.value = value;\n }\n };\n\n private handleCalendarFocus = () => {\n this.calendarFocused = true;\n if (this.calendarIsOpen) {\n // focus event triggered by closing calendar dialog so inputs should update\n this.preventInputsUpdating = false;\n this.calendarIsOpen = false;\n } else {\n this.preventInputsUpdating = true;\n }\n };\n\n private handleCalendarBlur = () => {\n this.calendarFocused = false;\n this.preventInputsUpdating = true;\n };\n\n private handleClearFocus = () => {\n this.removeLabelledBy = true;\n this.preventInputsUpdating = true;\n this.clearButtonFocused = true;\n };\n\n private handleClearBlur = (ev: FocusEvent) => {\n this.clearButtonFocused = false;\n this.preventInputsUpdating = true;\n if ((ev.relatedTarget as HTMLElement)?.id.match(/(day|year)-input$/)) {\n this.removeLabelledBy = false;\n return;\n }\n\n this.removeLabelledBy = true;\n };\n\n private emitIcChange = (d: Date | null) => {\n this.selectedDate = d;\n if (\n !dateMatches(this.selectedDate, d) ||\n this.day !== null ||\n this.month !== null ||\n this.year !== null\n ) {\n let UTCDate = null;\n if (d !== null) {\n UTCDate = new Date(\n Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())\n );\n }\n this.icChange.emit({\n value: d,\n dateObject: {\n day: this.day === \"\" ? null : this.day,\n month: this.month === \"\" ? null : this.month,\n year: this.year === \"\" ? null : this.year,\n },\n utcValue: UTCDate,\n });\n }\n };\n\n render() {\n const {\n inputId,\n label,\n disabled,\n helperText,\n hideHelperText,\n hideLabel,\n showClearButton,\n showCalendarButton,\n size,\n theme,\n validationAriaLive,\n } = this;\n\n const hasCustomValidation = !isEmptyString(this.validationStatus);\n\n const validationStatus = hasCustomValidation\n ? this.validationStatus\n : !isEmptyString(this.invalidDateText)\n ? IcInformationStatus.Error\n : \"\";\n\n const assistiveHint = `Type or use the up and down arrow keys to change the values for the ${this.getDescOfInputsOrder()}.`;\n\n renderHiddenInput(\n true,\n this.el,\n this.name,\n this.convertToDate(this.year, this.month, this.day),\n this.disabled\n );\n\n return (\n <Host\n class={{\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n [`ic-date-input-disabled`]: disabled,\n }}\n onBlur={this.handleHostBlur}\n onFocus={this.handleHostFocus}\n >\n <ic-input-container disabled={disabled}>\n {!(hideLabel && hideHelperText) && (\n <ic-input-label\n for={inputId}\n label={label}\n hideLabel={hideLabel}\n helperText={!hideHelperText ? helperText : \"\"}\n disabled={disabled}\n >\n <slot name=\"helper-text\" slot=\"helper-text\"></slot>\n </ic-input-label>\n )}\n <span id={this.screenReaderInfoId} class=\"sr-only\" aria-hidden=\"true\">\n {this.getScreenReaderInfo(validationStatus)}\n {hideLabel && `${label}\\n`}\n {hideHelperText && `${helperText}\\n`}\n {`${this.defaultHelperText}.`}\n </span>\n <span id={this.assistiveHintId} class=\"sr-only\" aria-hidden=\"true\">\n {assistiveHint}\n </span>\n <span id=\"live-region\" aria-live=\"assertive\" class=\"sr-only\"></span>\n <ic-input-component-container\n id={inputId}\n ref={(el: HTMLIcInputComponentContainerElement) =>\n (this.inputCompContainerEl = el)\n }\n disabled={disabled}\n validationStatus={validationStatus}\n size={size}\n role=\"group\"\n class={{ [`ic-theme-${theme}`]: theme !== \"inherit\" }}\n >\n <div class=\"input-container\">\n <div class=\"date-inputs\">\n {this.getInputsInOrder()[0]}/{this.getInputsInOrder()[1]}/\n {this.getInputsInOrder()[2]}\n </div>\n <div class=\"action-buttons\">\n {showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear input\"\n class={{\n [\"clear-button\"]: true,\n [\"hidden\"]:\n isEmptyString(this.day) &&\n isEmptyString(this.month) &&\n isEmptyString(this.year),\n }}\n disabled={this.disabled}\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearFocus}\n onBlur={this.handleClearBlur}\n variant=\"icon-tertiary\"\n theme={this.clearButtonFocused ? \"light\" : \"dark\"}\n size={size}\n ></ic-button>\n )}\n {showCalendarButton && (\n <div class=\"show-calendar-button-wrapper\">\n <div class={{ divider: true, [size]: true }}></div>\n <ic-button\n id=\"calendar-button\"\n ref={(el: HTMLIcButtonElement) =>\n (this.calendarButtonEl = el)\n }\n aria-label=\"Display calendar\"\n aria-haspopup=\"dialog\"\n class=\"calendar-button\"\n disabled={this.disabled}\n innerHTML={Calendar}\n onClick={this.handleCalendarOpen}\n variant=\"icon-tertiary\"\n size={size}\n onFocus={this.handleCalendarFocus}\n onBlur={this.handleCalendarBlur}\n theme={this.calendarFocused ? \"light\" : \"dark\"}\n ></ic-button>\n </div>\n )}\n </div>\n </div>\n </ic-input-component-container>\n <span id={this.selectedDateInfoId} class=\"sr-only\" aria-live=\"polite\">\n <span\n ref={(el) => (this.selectedDateInfoEl = el)}\n role=\"status\"\n ></span>\n </span>\n <ic-input-validation\n status={validationStatus}\n message={\n hasCustomValidation ? this.validationText : this.invalidDateText\n }\n for={inputId}\n ariaLiveMode={validationAriaLive}\n ></ic-input-validation>\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{r as t,c as a,h as i,H as e,g as s}from"./p-8e4e97b4.js";import{K as o,N as n,i as c}from"./p-e4ef4263.js";const r=":host{display:block;position:fixed;top:0;left:0;width:100%;min-height:100% !important;background:rgb(0 0 0 / 60%);z-index:var(--ic-z-index-navigation-menu)}.popout-modal{position:absolute;inset:0}.popout-menu{position:fixed;top:0;right:0;width:16rem;bottom:0;background-color:var(--ic-top-navigation-menu-background);color:var(--ic-top-navigation-nav-item);--ic-typography-color:var(--ic-top-navigation-nav-item);box-shadow:var(--ic-elevation-overlay);overflow-y:auto;overflow-x:hidden}:host(.inline) .popout-menu{position:absolute}.menu-close-button-container{position:relative;left:11.875rem;padding:var(--ic-space-md) 0}.nav-group-first{padding-bottom:0}.menu-buttons-container{padding:var(--ic-space-sm) 0;border-bottom:var(--ic-border-width) solid var(--ic-architectural-200)}.menu-buttons-container-nav-item-above{margin-top:var(--ic-space-md);border-top:var(--ic-border-width) solid var(--ic-architectural-200)}.menu-status-version-container{display:flex;flex-wrap:wrap;gap:var(--ic-space-xs);padding:var(--ic-space-md) var(--ic-space-md) var(--ic-space-xl)}.status-version-no-buttons{border-top:var(--ic-space-1px) solid var(--ic-architectural-200)}.menu-status{background-color:var(--ic-status-tag-neutral);--ic-typography-color:var(--ic-color-text-inverted);border-radius:var(--ic-space-md);width:-moz-fit-content;width:fit-content;padding:var(--ic-space-xxs) var(--ic-space-sm)}.menu-version{border-radius:var(--ic-space-md);background-color:var(--ic-status-tag-outlined-background-neutral-contrast);--ic-typography-color:var(--ic-color-text-primary-light);padding:var(--ic-space-xxs) var(--ic-space-sm)}.menu-status-text,.menu-version-text{overflow-wrap:break-word}.navigation-landmark-text{position:absolute;width:var(--ic-space-1px);height:var(--ic-space-1px);padding:0;margin:calc(-1 * var(--ic-space-1px));overflow:hidden}";const d=r;const l="IC-NAVIGATION-GROUP";const h="IC-NAVIGATION-ITEM";const u=class{constructor(i){t(this,i);this.icNavigationMenuClose=a(this,"icNavigationMenuClose",7);this.hasButtons=false;this.hasNavigation=false;this.lastTabStop=null;this.navGroupFirst=false;this.navItemAboveButtons=false;this.status="";this.theme="inherit";this.version="";this.setLastTabStop=t=>{let a=this.navigationEls[this.navigationEls.length-1];if(a.tagName===l&&t){const t=a.children;a=t[t.length-1]}if(a.tagName===h){const t=o(a,"navigation-item");if(t!==null){a=t}}this.lastTabStop=a};this.closeMenu=()=>{this.icNavigationMenuClose.emit()};this.focusCloseButton=()=>{var t;(t=this.closeButton)===null||t===void 0?void 0:t.focus()};this.focusLastTabStop=()=>{let t;if(this.lastTabStop!==null){switch(this.lastTabStop.tagName){case"IC-NAVIGATION-BUTTON":case h:case l:t=this.lastTabStop;t.focus();break;case"A":this.lastTabStop.focus();break}}}}componentWillLoad(){this.navBarEl=document.querySelector("ic-top-navigation");this.navigationEls=n(this.el,"navigation");if(this.navigationEls){this.hasNavigation=true;const t=this.navigationEls[this.navigationEls.length-1];if(t.tagName===h){this.navItemAboveButtons=true}else if(t.tagName===l){t.addEventListener("navigationGroupExpanded",(t=>{this.setLastTabStop(t.detail.expanded)}))}const a=this.navigationEls[0];if(a.tagName===l){this.navGroupFirst=true}}const t=n(this.el,"buttons");if(t!==null){this.hasButtons=true;this.lastTabStop=t[t.length-1]}else{if(this.hasNavigation&&this.navigationEls){this.setLastTabStop(false)}}}componentDidLoad(){this.focusCloseButton()}componentWillRender(){this.hasNavigation=c(this.el,"navigation");this.hasButtons=c(this.el,"buttons")}navItemClickHandler(){this.closeMenu()}handleKeyDown(t){if(t.key==="Tab"){if(t.shiftKey){if(document.activeElement===this.navBarEl){t.preventDefault();this.focusLastTabStop()}}else if(document.activeElement===this.lastTabStop||this.lastTabStop===null){t.preventDefault();this.focusCloseButton()}}else if(t.key==="Escape"){this.closeMenu()}}render(){return i(e,{key:"3e06550714484b8a9d157e0391697e303fbf8259",class:{[`ic-theme-${this.theme}`]:this.theme!=="inherit"}},i("div",{key:"b56300f2817a5a42401570a56f5b29c90e37e336",class:"popout-modal",onClick:this.closeMenu}),i("div",{key:"081658f80afaa6d7f39971cc0f566068166b6688",class:"popout-menu",role:"dialog","aria-modal":"true","aria-label":`${this.hasNavigation?"Navigation":"App"} menu`},i("span",{key:"67841c0d0cfb29fba7e3c722436c7e87bca1842d","aria-hidden":"true",id:"navigation-landmark-text",class:"navigation-landmark-text"},"Main navigation"),i("nav",{key:"cb5aa473a04868d6af4dcd2ebc2b61ef5d785904","aria-labelledby":"navigation-landmark-text","aria-hidden":this.hasNavigation?"false":"true"},i("div",{key:"2551b868b4c932b5fcff041bdae690e748d40430",class:{["menu-close-button-container"]:true,["nav-group-first"]:this.navGroupFirst}},i("ic-button",{key:"6f2a95a7824e18fa2f83a297984a7677110e887f",ref:t=>this.closeButton=t,id:"menu-close-button",class:"menu-close-button",variant:"icon-tertiary",size:"large","aria-label":`Close ${this.hasNavigation?"navigation":"app"} menu`,onClick:this.closeMenu},i("svg",{key:"2d4918dc6b797eb6f245dd531387cbb0370eb687",width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},i("path",{key:"51a063a29957f6992294ed31dae13570dc0ecd8c",d:"M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z"})))),this.hasNavigation&&i("slot",{key:"70ef3173a42a47e1bb13042dc41c53313ee42697",name:"navigation"})),this.hasButtons&&i("div",{key:"95384803c8ab3a87492552b613cb53f95adacd52",class:{["menu-buttons-container"]:true,["menu-buttons-container-nav-item-above"]:this.navItemAboveButtons}},i("slot",{key:"9bdde63f875fe678742dff04018e562ec37eb500",name:"buttons"})),(this.status!==""||this.version!=="")&&i("div",{key:"502dd0df2ce93217d9a642e4a6b36dcd72229e70",class:{["menu-status-version-container"]:true,["status-version-no-buttons"]:!this.hasButtons}},this.status!==""&&i("div",{key:"a0b154b7307de42c92c9e26f9cd552dcc556b21d",class:"menu-status"},i("ic-typography",{key:"af91a5c0c556c8ac0faa29998e126de1ab86c0bc",variant:"label-uppercase","aria-label":"app tag",class:"menu-status-text"},this.status)),this.version!==""&&i("div",{key:"b16dec612bce0fe83c888b0a3e74d8f205710633",class:"menu-version"},i("ic-typography",{key:"74d7e31b0126f240fa7bbc410a8b71268ca027a1",variant:"label",class:"menu-version-text","aria-label":"app version"},this.version)))))}get el(){return s(this)}};u.style=d;export{u as ic_navigation_menu};
2
- //# sourceMappingURL=p-c6c87e58.entry.js.map
1
+ import{r as t,c as a,h as i,H as e,g as s}from"./p-8e4e97b4.js";import{K as o,M as n,i as c}from"./p-e519f607.js";const r=":host{display:block;position:fixed;top:0;left:0;width:100%;min-height:100% !important;background:rgb(0 0 0 / 60%);z-index:var(--ic-z-index-navigation-menu)}.popout-modal{position:absolute;inset:0}.popout-menu{position:fixed;top:0;right:0;width:16rem;bottom:0;background-color:var(--ic-top-navigation-menu-background);color:var(--ic-top-navigation-nav-item);--ic-typography-color:var(--ic-top-navigation-nav-item);box-shadow:var(--ic-elevation-overlay);overflow-y:auto;overflow-x:hidden}:host(.inline) .popout-menu{position:absolute}.menu-close-button-container{position:relative;left:11.875rem;padding:var(--ic-space-md) 0}.nav-group-first{padding-bottom:0}.menu-buttons-container{padding:var(--ic-space-sm) 0;border-bottom:var(--ic-border-width) solid var(--ic-architectural-200)}.menu-buttons-container-nav-item-above{margin-top:var(--ic-space-md);border-top:var(--ic-border-width) solid var(--ic-architectural-200)}.menu-status-version-container{display:flex;flex-wrap:wrap;gap:var(--ic-space-xs);padding:var(--ic-space-md) var(--ic-space-md) var(--ic-space-xl)}.status-version-no-buttons{border-top:var(--ic-space-1px) solid var(--ic-architectural-200)}.menu-status{background-color:var(--ic-status-tag-neutral);--ic-typography-color:var(--ic-color-text-inverted);border-radius:var(--ic-space-md);width:-moz-fit-content;width:fit-content;padding:var(--ic-space-xxs) var(--ic-space-sm)}.menu-version{border-radius:var(--ic-space-md);background-color:var(--ic-status-tag-outlined-background-neutral-contrast);--ic-typography-color:var(--ic-color-text-primary-light);padding:var(--ic-space-xxs) var(--ic-space-sm)}.menu-status-text,.menu-version-text{overflow-wrap:break-word}.navigation-landmark-text{position:absolute;width:var(--ic-space-1px);height:var(--ic-space-1px);padding:0;margin:calc(-1 * var(--ic-space-1px));overflow:hidden}";const d=r;const l="IC-NAVIGATION-GROUP";const h="IC-NAVIGATION-ITEM";const u=class{constructor(i){t(this,i);this.icNavigationMenuClose=a(this,"icNavigationMenuClose",7);this.hasButtons=false;this.hasNavigation=false;this.lastTabStop=null;this.navGroupFirst=false;this.navItemAboveButtons=false;this.status="";this.theme="inherit";this.version="";this.setLastTabStop=t=>{let a=this.navigationEls[this.navigationEls.length-1];if(a.tagName===l&&t){const t=a.children;a=t[t.length-1]}if(a.tagName===h){const t=o(a,"navigation-item");if(t!==null){a=t}}this.lastTabStop=a};this.closeMenu=()=>{this.icNavigationMenuClose.emit()};this.focusCloseButton=()=>{var t;(t=this.closeButton)===null||t===void 0?void 0:t.focus()};this.focusLastTabStop=()=>{let t;if(this.lastTabStop!==null){switch(this.lastTabStop.tagName){case"IC-NAVIGATION-BUTTON":case h:case l:t=this.lastTabStop;t.focus();break;case"A":this.lastTabStop.focus();break}}}}componentWillLoad(){this.navBarEl=document.querySelector("ic-top-navigation");this.navigationEls=n(this.el,"navigation");if(this.navigationEls){this.hasNavigation=true;const t=this.navigationEls[this.navigationEls.length-1];if(t.tagName===h){this.navItemAboveButtons=true}else if(t.tagName===l){t.addEventListener("navigationGroupExpanded",(t=>{this.setLastTabStop(t.detail.expanded)}))}const a=this.navigationEls[0];if(a.tagName===l){this.navGroupFirst=true}}const t=n(this.el,"buttons");if(t!==null){this.hasButtons=true;this.lastTabStop=t[t.length-1]}else{if(this.hasNavigation&&this.navigationEls){this.setLastTabStop(false)}}}componentDidLoad(){this.focusCloseButton()}componentWillRender(){this.hasNavigation=c(this.el,"navigation");this.hasButtons=c(this.el,"buttons")}navItemClickHandler(){this.closeMenu()}handleKeyDown(t){if(t.key==="Tab"){if(t.shiftKey){if(document.activeElement===this.navBarEl){t.preventDefault();this.focusLastTabStop()}}else if(document.activeElement===this.lastTabStop||this.lastTabStop===null){t.preventDefault();this.focusCloseButton()}}else if(t.key==="Escape"){this.closeMenu()}}render(){return i(e,{key:"3e06550714484b8a9d157e0391697e303fbf8259",class:{[`ic-theme-${this.theme}`]:this.theme!=="inherit"}},i("div",{key:"b56300f2817a5a42401570a56f5b29c90e37e336",class:"popout-modal",onClick:this.closeMenu}),i("div",{key:"081658f80afaa6d7f39971cc0f566068166b6688",class:"popout-menu",role:"dialog","aria-modal":"true","aria-label":`${this.hasNavigation?"Navigation":"App"} menu`},i("span",{key:"67841c0d0cfb29fba7e3c722436c7e87bca1842d","aria-hidden":"true",id:"navigation-landmark-text",class:"navigation-landmark-text"},"Main navigation"),i("nav",{key:"cb5aa473a04868d6af4dcd2ebc2b61ef5d785904","aria-labelledby":"navigation-landmark-text","aria-hidden":this.hasNavigation?"false":"true"},i("div",{key:"2551b868b4c932b5fcff041bdae690e748d40430",class:{["menu-close-button-container"]:true,["nav-group-first"]:this.navGroupFirst}},i("ic-button",{key:"6f2a95a7824e18fa2f83a297984a7677110e887f",ref:t=>this.closeButton=t,id:"menu-close-button",class:"menu-close-button",variant:"icon-tertiary",size:"large","aria-label":`Close ${this.hasNavigation?"navigation":"app"} menu`,onClick:this.closeMenu},i("svg",{key:"2d4918dc6b797eb6f245dd531387cbb0370eb687",width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},i("path",{key:"51a063a29957f6992294ed31dae13570dc0ecd8c",d:"M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z"})))),this.hasNavigation&&i("slot",{key:"70ef3173a42a47e1bb13042dc41c53313ee42697",name:"navigation"})),this.hasButtons&&i("div",{key:"95384803c8ab3a87492552b613cb53f95adacd52",class:{["menu-buttons-container"]:true,["menu-buttons-container-nav-item-above"]:this.navItemAboveButtons}},i("slot",{key:"9bdde63f875fe678742dff04018e562ec37eb500",name:"buttons"})),(this.status!==""||this.version!=="")&&i("div",{key:"502dd0df2ce93217d9a642e4a6b36dcd72229e70",class:{["menu-status-version-container"]:true,["status-version-no-buttons"]:!this.hasButtons}},this.status!==""&&i("div",{key:"a0b154b7307de42c92c9e26f9cd552dcc556b21d",class:"menu-status"},i("ic-typography",{key:"af91a5c0c556c8ac0faa29998e126de1ab86c0bc",variant:"label-uppercase","aria-label":"app tag",class:"menu-status-text"},this.status)),this.version!==""&&i("div",{key:"b16dec612bce0fe83c888b0a3e74d8f205710633",class:"menu-version"},i("ic-typography",{key:"74d7e31b0126f240fa7bbc410a8b71268ca027a1",variant:"label",class:"menu-version-text","aria-label":"app version"},this.version)))))}get el(){return s(this)}};u.style=d;export{u as ic_navigation_menu};
2
+ //# sourceMappingURL=p-6dfe0922.entry.js.map
@@ -0,0 +1,2 @@
1
+ import{r as e,c as t,h as i,H as s,g as c}from"./p-8e4e97b4.js";import{l}from"./p-829b34f9.js";const r=`<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n<path d="M8.79502 15.875L4.62502 11.705L3.20502 13.115L8.79502 18.705L20.795 6.70501L19.385 5.29501L8.79502 15.875Z" fill="currentColor"/>\n</svg>\n`;const o=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">\n <path d="M0 0h24v24H0z" fill="none"/>\n <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>\n <title>close icon</title>\n</svg>\n`;const n=':host(.ic-time-selector-small){--time-selector-padded-item-height:var(--ic-space-lg)}:host(.ic-time-selector-medium){--time-selector-padded-item-height:calc(\n var(--ic-space-lg) + var(--ic-space-xxs)\n )}:host(.ic-time-selector-large){--time-selector-padded-item-height:var(--ic-space-xl)}.ic-time-selector-dialog-container{background-color:var(--ic-time-picker-time-selector-bg);border:var(--ic-space-1px) solid var(--ic-time-picker-time-selector-border);border-radius:var(--ic-space-xxs);padding:var(--ic-space-xs);max-width:calc(\n 3 * var(--ic-space-xxl) + var(--ic-space-xl) + var(--ic-space-xxs)\n );width:-moz-fit-content;width:fit-content}:host(.ic-time-selector-small) .ic-time-selector-dialog-container{padding:var(--ic-space-xxs);max-width:calc(\n 3 * var(--ic-space-xxl) + var(--ic-space-lg) + var(--ic-space-xxs)\n )}:host(.ic-time-selector-large) .ic-time-selector-dialog-container{padding:var(--ic-space-md);max-width:calc(\n 3 * var(--ic-space-xxl) + var(--ic-space-xl) + var(--ic-space-xs) +\n var(--ic-space-xxs)\n )}.ic-time-selector-item{height:var(--ic-space-lg);padding:var(--ic-space-xxxs);text-align:center;cursor:pointer;scroll-snap-align:start;transition:background 0.2s, color 0.2s}:host(.ic-time-selector-small) .ic-time-selector-item{padding:0}:host(.ic-time-selector-large) .ic-time-selector-item{padding:var(--ic-space-xxs)}.ic-time-selector-item:hover:not(.disabled):not(.selected){background-color:var(--ic-time-picker-time-bg-hover)}.ic-time-selector-item:active:not(.disabled):not(.selected){background-color:var(--ic-time-picker-time-bg-pressed)}.ic-time-selector-item.selected{background-color:var(--ic-time-picker-time-bg-selected);--ic-typography-color:var(--ic-time-picker-time-text-selected);position:relative}.ic-time-selector-item.selected:hover{background-color:var(--ic-time-picker-time-active-bg-hover)}.ic-time-selector-item.selected:active{background-color:var(--ic-time-picker-time-active-bg-pressed)}.ic-time-selector-colon-selected{background-color:var(--ic-time-picker-colon-bg-selected);color:var(--ic-time-picker-colon-selected) !important}.ic-time-selector-item.selected::before,.ic-time-selector-item.selected::after,.ic-time-selector-colon-selected::before,.ic-time-selector-colon-selected::after{content:"";position:absolute;left:0;right:0;height:var(--ic-space-1px);background:var(--ic-time-picker-time-selector-bg)}.ic-time-selector-item.selected::before,.ic-time-selector-colon-selected::before{top:0}.ic-time-selector-item.selected::after,.ic-time-selector-colon-selected::after{bottom:0}.ic-time-selector-item.disabled{--ic-typography-color:var(--ic-time-picker-time-text-disabled);cursor:not-allowed}.ic-time-selector-column-wrapper{display:flex;flex-direction:column}.ic-time-selector-scroll-row{height:var(--time-selector-padded-item-height) !important;background:transparent !important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:default !important;box-sizing:border-box}:host(.ic-time-selector-small) .ic-time-selector-scroll-row-last{height:calc(var(--ic-space-1px) + var(--ic-space-xxxs)) !important}:host(.ic-time-selector-medium) .ic-time-selector-scroll-row-last,:host(.ic-time-selector-large) .ic-time-selector-scroll-row-last{height:calc(\n var(--ic-space-1px) + var(--ic-space-xxxs) + var(--ic-space-md)\n ) !important}.ic-time-selector-scroll-row:hover,.ic-time-selector-scroll-row:active{background:transparent !important}.ic-time-selector-header-row{color:var(--ic-time-picker-hh-label);--ic-typography-color:var(--ic-time-picker-hh-label) !important;background:transparent !important;text-align:center;height:var(--time-selector-padded-item-height);display:flex;align-items:center;justify-content:center}.ic-time-selector-header-border{position:absolute;left:0;right:0;top:var(--time-selector-padded-item-height);height:var(--ic-space-1px);background:var(--ic-time-picker-header-border);pointer-events:none}.ic-time-selector-colon{display:flex;align-items:center;justify-content:center;color:var(--ic-time-picker-colon-default);height:var(--time-selector-padded-item-height);margin-top:calc(3 * var(--time-selector-padded-item-height))}.ic-time-selector-columns{display:flex;flex-direction:row;border-bottom:var(--ic-space-1px) solid var(--ic-time-picker-lower-border);margin:0 var(--ic-space-xxs);position:relative;z-index:1}.ic-time-selector-highlight-lines{position:relative;width:100%}.ic-time-selector-highlight{position:absolute;left:0;right:0;width:100%;height:var(--ic-space-1px);background:var(--ic-time-picker-selection-border);pointer-events:none;z-index:1}.ic-time-selector-highlight-top{top:calc(3 * var(--time-selector-padded-item-height) - var(--ic-space-1px))}.ic-time-selector-highlight-bottom{top:calc(4 * var(--time-selector-padded-item-height))}.ic-time-selector-column{height:calc((5 * var(--ic-space-xxl)) + (3 * var(--ic-space-1px)));overflow-y:auto;width:calc(var(--ic-space-xl) + var(--ic-space-xs));position:relative;scroll-snap-type:y mandatory;scrollbar-width:none;-ms-overflow-style:none}:host(.ic-time-selector-small) .ic-time-selector-column{width:calc(var(--ic-space-xl) + var(--ic-space-xxs) + var(--ic-space-xxxs))}:host(.ic-time-selector-large) .ic-time-selector-column{width:calc(var(--ic-space-xl) + var(--ic-space-xs) + var(--ic-space-xxxs))}.ic-time-selector-column-period{margin-left:var(--ic-space-xxs)}.ic-time-selector-column::-webkit-scrollbar{display:none}.ic-time-selector-column:focus-visible,.ic-time-selector-item:focus-visible{outline:none;background-color:transparent}.ic-time-selector-column:focus{box-shadow:var(--ic-border-focus);border-radius:var(--ic-border-radius);transition:var(--ic-easing-transition-fast);z-index:3}.ic-time-selector-list{list-style:none;margin:0;padding:0}.ic-time-selector-actions{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;width:100%;margin-top:var(--ic-space-xs);margin-left:auto}.ic-time-selector-check-btn{margin-left:calc(var(--ic-space-xs) + var(--ic-space-xxxs))}.sr-only{position:absolute;left:-9999px}@media (forced-colors: active){.ic-time-selector-item.selected{background-color:highlight !important}.ic-time-selector-item.disabled{--ic-typography-color:GrayText !important}.ic-time-selector-column:focus{border:var(--ic-border-hc)}.ic-time-selector-highlight{background:Highlight !important}}';const a=n;const d=["hour","minute","second","period"];const h=".ic-time-selector-column";const u=".ic-time-selector-item";const m=class{constructor(s){e(this,s);this.icChange=t(this,"icChange",7);this.DEFAULT_TIME_FORMAT="HH:MM:SS";this.minutes=Array.from({length:60},((e,t)=>t));this.seconds=Array.from({length:60},((e,t)=>t));this.periods=["AM","PM"];this.minTime=null;this.maxTime=null;this.ariaLiveMessage="";this.disableTimes=[];this.min="";this.max="";this.size="medium";this.theme="inherit";this.timeFormat=this.DEFAULT_TIME_FORMAT;this.timePeriod="24";this.value="";this.setTimeParts=(e,t,i)=>{let s="AM";if(this.timePeriod==="12"){if(e===0){e=12;s="AM"}else if(e===12){s="PM"}else if(e>12){e=e-12;s="PM"}else{s="AM"}this.selectedHour=e;this.selectedPeriod=s}else{this.selectedHour=e}this.selectedMinute=t;this.selectedSecond=i};this.checkIfScrollIsFinished=(e,t)=>{const i=setInterval((()=>{if(e.scrollTop===t+56){e===null||e===void 0?void 0:e.focus();clearInterval(i)}}),25)};this.handleSelect=(e,t)=>{var i;const s=this.getSelectedValue(e);switch(e){case"hour":this.selectedHour=Number(t);break;case"minute":this.selectedMinute=Number(t);break;case"second":this.selectedSecond=Number(t);break;case"period":this.selectedPeriod=t;break}const c=(i=this.el.shadowRoot)===null||i===void 0?void 0:i.querySelectorAll(h);const l=d.indexOf(e);if(c&&c[l]){c[l].focus();window.requestAnimationFrame((()=>{this.scrollSelectedItem(e)}))}if(s===undefined||s===null){this.announceSelectedColumn(e)}else{this.lastAnnouncedType=e;this.lastAnnouncedValue=this.getSelectedValue(e)}};this.isTimeDisabled=(e,t,i,s)=>{var c,r,o,n;for(const s of this.disableTimes){if(typeof s==="string"||s instanceof Date){const c=l(s).parts;if(c&&c.hour===e&&c.minute===t&&c.second===i){return true}}else if(s&&typeof s==="object"&&"start"in s&&"end"in s){const c=l(s.start).parts;const r=l(s.end).parts;if(c&&r){const s=e*3600+t*60+i;const l=c.hour*3600+c.minute*60+c.second;const o=r.hour*3600+r.minute*60+r.second;if(s>=l&&s<=o){return true}}}}if(this.min){this.minTime=l(this.min).date;if(this.minTime){const l=this.minTime.getHours();const o=this.minTime.getMinutes();const n=this.minTime.getSeconds();if(s==="hour"){const t=(c=this.selectedMinute)!==null&&c!==void 0?c:o;const i=(r=this.selectedSecond)!==null&&r!==void 0?r:n;if(e<l||e===l&&t<o||e===l&&t===o&&i<n){return true}}else if(s==="minute"){if(e===l&&t<o){return true}}else if(s==="second"){if(e===l&&t===o&&i<n){return true}}else{if(e<l||e===l&&t<o||e===l&&t===o&&i<n){return true}}}}if(this.max){this.maxTime=l(this.max).date;if(this.maxTime){const c=this.maxTime.getHours();const l=this.maxTime.getMinutes();const r=this.maxTime.getSeconds();if(s==="hour"){const t=(o=this.selectedMinute)!==null&&o!==void 0?o:59;const i=(n=this.selectedSecond)!==null&&n!==void 0?n:59;if(e>c||e===c&&t>l||e===c&&t===l&&i>r){return true}}else if(s==="minute"){if(e===c&&t>l){return true}}else if(s==="second"){if(e===c&&t===l&&i>r){return true}}else{if(e>c||e===c&&t>l||e===c&&t===l&&i>r){return true}}}}return false};this.handleColumnKeyDown=(e,t)=>{var i,s,c,l,r,o,n;const a=(i=this.el.shadowRoot)===null||i===void 0?void 0:i.querySelectorAll(h);const u=d.indexOf(e);if(!a)return;const m=this.getColumnValues(e);const f=this.getSelectedValue(e);const p=a[u];if(!p)return;const v=()=>{const t=this.getHighlightedValue(e,p);if(t!==null){this.handleSelect(e,t)}else if(m.length>0){this.handleSelect(e,m[0])}};switch(t.key){case"Enter":case" ":t.preventDefault();v();return;case"ArrowRight":t.preventDefault();v();if(u<a.length-1){(s=a[u+1])===null||s===void 0?void 0:s.focus()}return;case"ArrowLeft":t.preventDefault();if(u>0)(c=a[u-1])===null||c===void 0?void 0:c.focus();return;case"Tab":if(t.shiftKey){if(u===0){return}else{t.preventDefault();(l=a[u-1])===null||l===void 0?void 0:l.focus()}}else{t.preventDefault();v();this.announceSelectedColumn(e);if(u<a.length-1){(r=a[u+1])===null||r===void 0?void 0:r.focus()}else{(n=(o=this.el.shadowRoot)===null||o===void 0?void 0:o.querySelector(".ic-time-selector-clear-btn"))===null||n===void 0?void 0:n.focus();this.updateAriaLiveMessage()}}return;case"ArrowUp":case"ArrowDown":{let i=m.findIndex((e=>e===f));if(i===-1)i=0;let s=i;const c=t.key==="ArrowUp"?-1:1;const l=m.length-1;do{s+=c}while(s>=0&&s<=l&&(()=>{var t,i,c;if(e==="hour"||e==="minute"||e==="second"){const l=e==="hour"?m[s]:(t=this.selectedHour)!==null&&t!==void 0?t:0;const r=e==="minute"?m[s]:(i=this.selectedMinute)!==null&&i!==void 0?i:0;const o=e==="second"?m[s]:(c=this.selectedSecond)!==null&&c!==void 0?c:0;return this.isTimeDisabled(l,r,o)}return false})());this.ariaLiveMessage=`Selected ${e}: ${m[s]}`;if(s>=0&&s<=l&&s!==i){this.handleSelect(e,m[s])}return}default:return}};this.renderColumn=(e,t,s)=>{const c=e==="hour"||e==="minute"||e==="second";const l=e==="period";const r=this.getHeaderLabel(e);const o=2;let n=6;if(this.size==="large"){n=5}else if(this.size==="small"){n=8}return i("div",{class:"ic-time-selector-column-wrapper"},l?i("div",{class:"ic-time-selector-header-row"}):r&&i("div",{class:"ic-time-selector-header-row"},i("ic-typography",{variant:"subtitle-small"},r)),i("div",{class:{"ic-time-selector-column":true,"ic-time-selector-column-period":l},tabIndex:0,onKeyDown:t=>this.handleColumnKeyDown(e,t)},i("ul",{class:"ic-time-selector-list",role:"listbox","aria-label":e},this.renderScrollRows(o,`${e}-top-spacer`),t.map((t=>{var l,r,o;let n=false;if(c){const i=e==="hour"?t:(l=this.selectedHour)!==null&&l!==void 0?l:0;const s=e==="minute"?t:(r=this.selectedMinute)!==null&&r!==void 0?r:0;const c=e==="second"?t:(o=this.selectedSecond)!==null&&o!==void 0?o:0;n=this.isTimeDisabled(i,s,c,e)}return i("li",{class:{"ic-time-selector-item":true,selected:t===s,disabled:n},role:"option","aria-selected":t===s?"true":"false","aria-disabled":n?"true":"false",onClick:()=>!n&&this.handleSelect(e,t),tabIndex:-1,key:`${e}-val-${t}`},i("ic-typography",{variant:"subtitle-small"},typeof t==="number"?t.toString().padStart(2,"0"):t))})),(c||l)&&this.renderScrollRows(n,`${e}-bottom-spacer`))))};this.handleClear=()=>{this.selectedHour=undefined;this.scrollSelectedItem("hour",true);this.selectedMinute=undefined;this.scrollSelectedItem("minute",true);this.selectedSecond=undefined;this.scrollSelectedItem("second",true);this.selectedPeriod=undefined;this.scrollSelectedItem("period",true);this.lastAnnouncedType=undefined;this.lastAnnouncedValue=undefined;this.icChange.emit({value:null,timeString:null,timeObject:{hour:null,minute:null,second:null,period:undefined}})};this.handleConfirmClick=()=>{const e=this.selectedHour!=null?this.selectedHour:null;const t=this.selectedMinute!=null?this.selectedMinute:null;const i=this.selectedSecond!=null?this.selectedSecond:null;const s=this.selectedPeriod;const c=e!=null?e.toString().padStart(2,"0"):null;const l=t!=null?t.toString().padStart(2,"0"):null;const r=i!=null?i.toString().padStart(2,"0"):null;let o=false;if(this.timeFormat===this.DEFAULT_TIME_FORMAT){o=e!==null&&t!==null&&i!==null}else{o=e!==null&&t!==null}let n=null;let a=null;if(o){let o=e;if(e!=null&&s&&this.timePeriod==="12"){if(s==="PM"&&e<12)o=e+12;if(s==="AM"&&e===12)o=0}n=new Date;n.setHours(o!==null&&o!==void 0?o:0);n.setMinutes(t!==null&&t!==void 0?t:0);n.setSeconds(i!==null&&i!==void 0?i:0);n.setMilliseconds(0);if(this.timeFormat==="HH:MM"){a=c+":"+l+(s?" "+s:"")}else if(this.timeFormat===this.DEFAULT_TIME_FORMAT){a=c+":"+l+":"+r+(s?" "+s:"")}this.value=n}this.icChange.emit({value:o?n:null,timeString:o?a:null,timeObject:Object.assign({hour:c,minute:l,second:r},s?{period:s}:{})})}}watchMinHandler(){this.minTime=l(this.min).date}watchMaxHandler(){this.maxTime=l(this.max).date}watchValueHandler(){this.setTime(this.value);setTimeout((()=>{this.scrollSelectedItem("hour");this.scrollSelectedItem("minute");if(this.timeFormat===this.DEFAULT_TIME_FORMAT){this.scrollSelectedItem("second")}if(this.timePeriod==="12"){this.scrollSelectedItem("period")}}),0)}componentWillLoad(){this.setTime(this.value)}componentDidLoad(){setTimeout((()=>{if(this.selectedHour!==undefined&&this.selectedHour!==null){this.scrollSelectedItem("hour")}else if(this.min){this.scrollMinTime("hour")}if(this.selectedMinute!==undefined&&this.selectedMinute!==null){this.scrollSelectedItem("minute")}else if(this.min){this.scrollMinTime("minute")}if(this.timeFormat===this.DEFAULT_TIME_FORMAT){if(this.selectedSecond!==undefined&&this.selectedSecond!==null){this.scrollSelectedItem("second")}else if(this.min){this.scrollMinTime("second")}}if(this.timePeriod==="12"){if(this.selectedPeriod!==undefined&&this.selectedPeriod!==null){this.scrollSelectedItem("period")}else if(this.min){this.scrollMinTime("period")}}this.updateAriaLiveMessage()}),0)}getHeaderLabel(e){switch(e){case"hour":return"HH";case"minute":return"MM";case"second":return"SS";default:return""}}setTime(e){if(e===null||e===undefined||e===""){this.handleClear();return}if(typeof e==="string"){const t=e.match(/^([0-9]{2}):([0-9]{2}):([0-9]{2})(?:\.[0-9]{1,3})?Z?$/);if(t){this.setTimeParts(Number(t[1]),Number(t[2]),Number(t[3]))}else{const t=e.split(":");this.setTimeParts(Number(t[0])||0,Number(t[1])||0,Number(t[2])||0)}}else{const{parts:t}=l(e);if(t){this.setTimeParts(t.hour,t.minute,t.second)}}}renderScrollRows(e,t="scroll-row"){return Array.from({length:e}).map(((s,c)=>{const l=t.endsWith("bottom-spacer")?c===e-1:false;return i("li",{class:Object.assign({"ic-time-selector-item":true,"ic-time-selector-scroll-row":true},l?{"ic-time-selector-scroll-row-last":true}:{}),"aria-hidden":"true",tabIndex:-1,key:`${t}-${c}`})}))}scrollSelectedItem(e,t){var i;const s=(i=this.el.shadowRoot)===null||i===void 0?void 0:i.querySelectorAll(h);let c=d.indexOf(e);if(e==="period"&&(s===null||s===void 0?void 0:s.length)){c=s.length-1}const l=s===null||s===void 0?void 0:s[c];if(l){const e=l.querySelectorAll(u);let i=-1;e.forEach(((e,t)=>{if(e.classList.contains("selected"))i=t}));if(t){i=0}if(i>-1){const s=l.querySelector(".ic-time-selector-scroll-row");let c=0;if(s){c=parseFloat(getComputedStyle(s).height)}const r=c*2;const o=e[i].offsetTop-r;const n=window.matchMedia("(prefers-reduced-motion: reduce)").matches;l.scrollTo({top:o,behavior:n?"instant":"smooth"});if(t){setTimeout((()=>{var e;const t=(e=this.el.shadowRoot)===null||e===void 0?void 0:e.querySelectorAll(h);if(t&&t.length>0){this.checkIfScrollIsFinished(t[0],o)}}),300)}}}}scrollMinTime(e){var t;const i=(t=this.el.shadowRoot)===null||t===void 0?void 0:t.querySelectorAll(h);const s=d.indexOf(e);const c=i===null||i===void 0?void 0:i[s];if(!c)return;const r=c.querySelectorAll(u);let o=0,n=0,a=0;if(this.minTime){o=this.minTime.getHours()+2;n=this.minTime.getMinutes()+2;a=this.minTime.getSeconds()}else if(this.min){const e=l(this.min).date;if(e){o=e.getHours();n=e.getMinutes();a=e.getSeconds()}}let m=-1;const f=this.getColumnValues(e);if(e==="hour"){m=f.findIndex((e=>e===o))}else if(e==="minute"){m=f.findIndex((e=>e===n))}else if(e==="second"){m=f.findIndex((e=>e===a))}else if(e==="period"){let e="AM";if(this.timePeriod==="12"){if(o===0){e="AM"}else if(o===12){e="PM"}else if(o>12){e="PM"}else{e="AM"}}m=f.findIndex((t=>t===e))}if(m>-1){const e=c.querySelector(".ic-time-selector-scroll-row");let t=0;if(e){t=parseFloat(getComputedStyle(e).height)}const i=t*2;const s=r[m].offsetTop-i;const l=window.matchMedia("(prefers-reduced-motion: reduce)").matches;c.scrollTo({top:s,behavior:l?"instant":"smooth"})}}announceSelectedColumn(e){const t=this.getSelectedValue(e);if(t!==null&&t!==undefined&&(e!==this.lastAnnouncedType||t!==this.lastAnnouncedValue)){this.ariaLiveMessage=`Selected ${e}: ${t}`}else{this.ariaLiveMessage=""}this.lastAnnouncedType=e;this.lastAnnouncedValue=t}getColumnValues(e){if(e==="hour")return this.timePeriod==="12"?Array.from({length:12},((e,t)=>t+1)):Array.from({length:24},((e,t)=>t));if(e==="minute")return this.minutes;if(e==="second")return this.seconds;if(e==="period")return this.periods;return[]}getSelectedValue(e){var t,i,s,c;if(e==="hour")return(t=this.selectedHour)!==null&&t!==void 0?t:null;if(e==="minute")return(i=this.selectedMinute)!==null&&i!==void 0?i:null;if(e==="second")return(s=this.selectedSecond)!==null&&s!==void 0?s:null;if(e==="period")return(c=this.selectedPeriod)!==null&&c!==void 0?c:null;return null}getHighlightedValue(e,t){var i,s,c;const l=Array.from(t.querySelectorAll(u));const r=l.filter((e=>!e.classList.contains("ic-time-selector-scroll-row")));if(r.length===0)return null;const o=(i=this.el.shadowRoot)===null||i===void 0?void 0:i.querySelector(".ic-time-selector-highlight-top");const n=(s=this.el.shadowRoot)===null||s===void 0?void 0:s.querySelector(".ic-time-selector-highlight-bottom");if(!o||!n)return null;const a=o.getBoundingClientRect();const d=n.getBoundingClientRect();const h=a.bottom;const m=d.top;for(const t of r){const i=t.getBoundingClientRect();const s=i.top+i.height/2;if(s>=h&&s<=m){const i=t.getAttribute("key");if(i){const t=i.replace(`${e}-val-`,"");if(e==="hour"||e==="minute"||e==="second"){return Number(t)}else{return t}}const s=(c=t.textContent)===null||c===void 0?void 0:c.trim();if(e==="hour"||e==="minute"||e==="second"){return s?Number(s):null}else{return s}}}return null}updateAriaLiveMessage(){const e=this.selectedHour!=null?this.selectedHour.toString().padStart(2,"0"):null;const t=this.selectedMinute!=null?this.selectedMinute.toString().padStart(2,"0"):null;const i=this.selectedSecond!=null?this.selectedSecond.toString().padStart(2,"0"):null;let s="";let c=false;if(this.timeFormat==="HH:MM"){c=e!==null&&t!==null;if(c){s=e+":"+t+(this.selectedPeriod?" "+this.selectedPeriod:"")}}else if(this.timeFormat===this.DEFAULT_TIME_FORMAT){c=e!==null&&t!==null&&i!==null;if(c){s=e+":"+t+":"+i+(this.selectedPeriod?" "+this.selectedPeriod:"")}}this.ariaLiveMessage=c&&s?`Selected time: ${s}`:""}render(){var e,t,c,l;const n=this.timePeriod==="12"?Array.from({length:12},((e,t)=>t+1)):Array.from({length:24},((e,t)=>t));const a=this.timeFormat||this.DEFAULT_TIME_FORMAT;const d=[this.renderColumn("hour",n,(e=this.selectedHour)!==null&&e!==void 0?e:null),this.renderColumn("minute",this.minutes,(t=this.selectedMinute)!==null&&t!==void 0?t:null)];if(a===this.DEFAULT_TIME_FORMAT){d.push(this.renderColumn("second",this.seconds,(c=this.selectedSecond)!==null&&c!==void 0?c:null))}let u=[];if(a===this.DEFAULT_TIME_FORMAT){u=[this.selectedHour!==undefined&&this.selectedMinute!==undefined,this.selectedMinute!==undefined&&this.selectedSecond!==undefined]}else{u=[this.selectedHour!==undefined&&this.selectedMinute!==undefined]}const m=this.el.closest("ic-time-picker")!==null;const{size:f,theme:p,timePeriod:v}=this;return i(s,{key:"0a25adbaeba34a4dcd3ef15edd5076d8ed4ad0a5",class:{[`ic-theme-${p}`]:p!=="inherit",[`ic-time-selector-${f}`]:true}},i("div",{key:"e65b452fb22c989b634fd1d8839ecf3bcb5c8a96",role:m?"dialog":undefined,"aria-modal":m?true:undefined,"aria-label":"Select time. Use arrow keys to navigate and select the options and then tab to move onto the next selection.",class:{"ic-time-selector-dialog-container":true}},i("div",{key:"178213ede67d838f70b8bd164aac6481a97b03eb",class:"ic-time-selector-highlight-lines"},i("div",{key:"c10de931f6cba5496de152f1fdfc87a118413e08",class:"ic-time-selector-header-border"}),i("div",{key:"440b09028d77256e9b0bb18cc2f24550eac5f30d",class:{"ic-time-selector-highlight":true,"ic-time-selector-highlight-top":true}}),i("div",{key:"eed615b5bbd35c5b0d0a5b3625710b00675856ab",class:"ic-time-selector-columns"},d.map(((e,t)=>[e,t<d.length-1?i("ic-typography",{class:{"ic-time-selector-colon":true,"ic-time-selector-colon-selected":u[t]},variant:"subtitle-small","aria-hidden":"true",key:`colon-${t}`},":"):null])),v!=="24"&&this.renderColumn("period",this.periods,(l=this.selectedPeriod)!==null&&l!==void 0?l:null)),i("div",{key:"8b2b12a4e907c615b7e79d9801d5840d522e775d",class:{"ic-time-selector-highlight":true,"ic-time-selector-highlight-bottom":true}})),i("div",{key:"0d3a320315b1cf0557b8d281b6e468ef517b7ff4",class:"ic-time-selector-actions"},i("ic-button",{key:"70d842672493c3a63ced6571d7e1ab6afba2abdf",variant:"icon-tertiary","aria-label":"Clear time",class:{"ic-time-selector-clear-btn":true},onClick:this.handleClear,disabled:this.selectedHour===undefined&&this.selectedMinute===undefined&&this.selectedSecond===undefined&&this.selectedPeriod===undefined,size:f,tabIndex:0,onKeyDown:e=>{var t;if(e.key==="Tab"&&e.shiftKey){e.preventDefault();const i=(t=this.el.shadowRoot)===null||t===void 0?void 0:t.querySelectorAll(h);if(i&&i.length>0){const e=i[i.length-1];e===null||e===void 0?void 0:e.focus()}}}},i("span",{key:"45c66f9552c10be9e3b466342c6e7d22fd7df90b","aria-hidden":"true",innerHTML:o})),i("ic-button",{key:"eae553c514bc635a71220b969044df8d32e457bb",variant:"icon-tertiary","aria-label":"Select time",class:"ic-time-selector-check-btn",onClick:this.handleConfirmClick,disabled:this.selectedHour===undefined&&this.selectedMinute===undefined&&this.selectedSecond===undefined&&this.selectedPeriod===undefined,size:f,tabIndex:0},i("span",{key:"f586f8d1b2659d3cf2f0f8e7365ebcd9828ebf23","aria-hidden":"true",innerHTML:r})))),i("div",{key:"27dd2db88615040635a0b61b9e785d50a488d90a",class:"sr-only","aria-live":"polite"},this.ariaLiveMessage))}get el(){return c(this)}static get watchers(){return{min:["watchMinHandler"],max:["watchMaxHandler"],value:["watchValueHandler"]}}};m.style=a;export{m as ic_time_selector};
2
+ //# sourceMappingURL=p-71cc5909.entry.js.map