@expressivecss/expressive 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (602) hide show
  1. package/CHANGELOG.md +1502 -1
  2. package/README.md +9 -8
  3. package/dist/css/expressive.css +19247 -11923
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/fonts/LICENSE-noto-sans-arabic +93 -0
  8. package/dist/fonts/LICENSE-noto-sans-hebrew +93 -0
  9. package/dist/fonts/LICENSE-noto-sans-thai +93 -0
  10. package/dist/fonts/material-symbols-outlined.woff2 +0 -0
  11. package/dist/fonts/material-symbols-rounded.woff2 +0 -0
  12. package/dist/fonts/material-symbols-sharp.woff2 +0 -0
  13. package/dist/fonts/noto-sans-arabic-arabic-400.woff2 +0 -0
  14. package/dist/fonts/noto-sans-arabic-arabic-500.woff2 +0 -0
  15. package/dist/fonts/noto-sans-arabic-arabic-700.woff2 +0 -0
  16. package/dist/fonts/noto-sans-cyrillic-400.woff2 +0 -0
  17. package/dist/fonts/noto-sans-cyrillic-500.woff2 +0 -0
  18. package/dist/fonts/noto-sans-cyrillic-700.woff2 +0 -0
  19. package/dist/fonts/noto-sans-cyrillic-ext-400.woff2 +0 -0
  20. package/dist/fonts/noto-sans-cyrillic-ext-500.woff2 +0 -0
  21. package/dist/fonts/noto-sans-cyrillic-ext-700.woff2 +0 -0
  22. package/dist/fonts/noto-sans-devanagari-400.woff2 +0 -0
  23. package/dist/fonts/noto-sans-devanagari-500.woff2 +0 -0
  24. package/dist/fonts/noto-sans-devanagari-700.woff2 +0 -0
  25. package/dist/fonts/noto-sans-greek-400.woff2 +0 -0
  26. package/dist/fonts/noto-sans-greek-500.woff2 +0 -0
  27. package/dist/fonts/noto-sans-greek-700.woff2 +0 -0
  28. package/dist/fonts/noto-sans-greek-ext-400.woff2 +0 -0
  29. package/dist/fonts/noto-sans-greek-ext-500.woff2 +0 -0
  30. package/dist/fonts/noto-sans-greek-ext-700.woff2 +0 -0
  31. package/dist/fonts/noto-sans-hebrew-hebrew-400.woff2 +0 -0
  32. package/dist/fonts/noto-sans-hebrew-hebrew-500.woff2 +0 -0
  33. package/dist/fonts/noto-sans-hebrew-hebrew-700.woff2 +0 -0
  34. package/dist/fonts/noto-sans-latin-700.woff2 +0 -0
  35. package/dist/fonts/noto-sans-latin-ext-400.woff2 +0 -0
  36. package/dist/fonts/noto-sans-latin-ext-500.woff2 +0 -0
  37. package/dist/fonts/noto-sans-latin-ext-700.woff2 +0 -0
  38. package/dist/fonts/noto-sans-thai-thai-400.woff2 +0 -0
  39. package/dist/fonts/noto-sans-thai-thai-500.woff2 +0 -0
  40. package/dist/fonts/noto-sans-thai-thai-700.woff2 +0 -0
  41. package/dist/fonts/noto-sans-vietnamese-400.woff2 +0 -0
  42. package/dist/fonts/noto-sans-vietnamese-500.woff2 +0 -0
  43. package/dist/fonts/noto-sans-vietnamese-700.woff2 +0 -0
  44. package/dist/fonts/roboto-cyrillic-400.woff2 +0 -0
  45. package/dist/fonts/roboto-cyrillic-500.woff2 +0 -0
  46. package/dist/fonts/roboto-cyrillic-700.woff2 +0 -0
  47. package/dist/fonts/roboto-cyrillic-ext-400.woff2 +0 -0
  48. package/dist/fonts/roboto-cyrillic-ext-500.woff2 +0 -0
  49. package/dist/fonts/roboto-cyrillic-ext-700.woff2 +0 -0
  50. package/dist/fonts/roboto-greek-400.woff2 +0 -0
  51. package/dist/fonts/roboto-greek-500.woff2 +0 -0
  52. package/dist/fonts/roboto-greek-700.woff2 +0 -0
  53. package/dist/fonts/roboto-greek-ext-400.woff2 +0 -0
  54. package/dist/fonts/roboto-greek-ext-500.woff2 +0 -0
  55. package/dist/fonts/roboto-greek-ext-700.woff2 +0 -0
  56. package/dist/fonts/roboto-latin-700.woff2 +0 -0
  57. package/dist/fonts/roboto-latin-ext-400.woff2 +0 -0
  58. package/dist/fonts/roboto-latin-ext-500.woff2 +0 -0
  59. package/dist/fonts/roboto-latin-ext-700.woff2 +0 -0
  60. package/dist/fonts/roboto-vietnamese-400.woff2 +0 -0
  61. package/dist/fonts/roboto-vietnamese-500.woff2 +0 -0
  62. package/dist/fonts/roboto-vietnamese-700.woff2 +0 -0
  63. package/dist/js/chunks/chunk-2CS6TITK.mjs +219 -0
  64. package/dist/js/chunks/chunk-2CS6TITK.mjs.map +7 -0
  65. package/dist/js/chunks/chunk-2RLBDFH4.mjs +108 -0
  66. package/dist/js/chunks/chunk-2RLBDFH4.mjs.map +7 -0
  67. package/dist/js/chunks/chunk-3L3QIYLC.mjs +85 -0
  68. package/dist/js/chunks/chunk-3L3QIYLC.mjs.map +7 -0
  69. package/dist/js/chunks/chunk-4EWGD4V2.mjs +75 -0
  70. package/dist/js/chunks/chunk-4EWGD4V2.mjs.map +7 -0
  71. package/dist/js/chunks/chunk-4IKVPCSU.mjs +7 -0
  72. package/dist/js/chunks/chunk-4IKVPCSU.mjs.map +7 -0
  73. package/dist/js/chunks/chunk-4PIXLDNJ.mjs +127 -0
  74. package/dist/js/chunks/chunk-4PIXLDNJ.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-KVJAVDBC.mjs → chunk-4QUCNFSD.mjs} +64 -113
  76. package/dist/js/chunks/chunk-4QUCNFSD.mjs.map +7 -0
  77. package/dist/js/chunks/{chunk-UETTGDLI.mjs → chunk-4TRZ2AER.mjs} +35 -41
  78. package/dist/js/chunks/chunk-4TRZ2AER.mjs.map +7 -0
  79. package/dist/js/chunks/{chunk-C6CHEWYP.mjs → chunk-5KIHWJI2.mjs} +40 -26
  80. package/dist/js/chunks/chunk-5KIHWJI2.mjs.map +7 -0
  81. package/dist/js/chunks/{chunk-L27Q6ZMI.mjs → chunk-67ZPPKXS.mjs} +20 -33
  82. package/dist/js/chunks/chunk-67ZPPKXS.mjs.map +7 -0
  83. package/dist/js/chunks/{chunk-XAEAEHIX.mjs → chunk-6FSEUFVW.mjs} +39 -26
  84. package/dist/js/chunks/chunk-6FSEUFVW.mjs.map +7 -0
  85. package/dist/js/chunks/chunk-752ADW4M.mjs +225 -0
  86. package/dist/js/chunks/chunk-752ADW4M.mjs.map +7 -0
  87. package/dist/js/chunks/{chunk-CK2XCICY.mjs → chunk-75E5EDJF.mjs} +3 -11
  88. package/dist/js/chunks/chunk-75E5EDJF.mjs.map +7 -0
  89. package/dist/js/chunks/{chunk-KHXZ2A4K.mjs → chunk-7NLUI3RR.mjs} +139 -66
  90. package/dist/js/chunks/chunk-7NLUI3RR.mjs.map +7 -0
  91. package/dist/js/chunks/chunk-7W7TV6NY.mjs +108 -0
  92. package/dist/js/chunks/chunk-7W7TV6NY.mjs.map +7 -0
  93. package/dist/js/chunks/chunk-7YQBHTK3.mjs +225 -0
  94. package/dist/js/chunks/chunk-7YQBHTK3.mjs.map +7 -0
  95. package/dist/js/chunks/chunk-7YZ5CN3V.mjs +33 -0
  96. package/dist/js/chunks/chunk-7YZ5CN3V.mjs.map +7 -0
  97. package/dist/js/chunks/chunk-AI73GJKG.mjs +28 -0
  98. package/dist/js/chunks/chunk-AI73GJKG.mjs.map +7 -0
  99. package/dist/js/chunks/{chunk-LQWUDNHZ.mjs → chunk-ANKFWNWT.mjs} +21 -45
  100. package/dist/js/chunks/chunk-ANKFWNWT.mjs.map +7 -0
  101. package/dist/js/chunks/{chunk-5CEAOLUA.mjs → chunk-B7DQFHA5.mjs} +30 -47
  102. package/dist/js/chunks/chunk-B7DQFHA5.mjs.map +7 -0
  103. package/dist/js/chunks/chunk-BIGU5RCJ.mjs +153 -0
  104. package/dist/js/chunks/chunk-BIGU5RCJ.mjs.map +7 -0
  105. package/dist/js/chunks/{chunk-VGNYF6FB.mjs → chunk-BPF3I2MN.mjs} +109 -24
  106. package/dist/js/chunks/chunk-BPF3I2MN.mjs.map +7 -0
  107. package/dist/js/chunks/chunk-CMGXGYUC.mjs +74 -0
  108. package/dist/js/chunks/chunk-CMGXGYUC.mjs.map +7 -0
  109. package/dist/js/chunks/{chunk-NUHMOAOY.mjs → chunk-CSYWKEK3.mjs} +310 -196
  110. package/dist/js/chunks/chunk-CSYWKEK3.mjs.map +7 -0
  111. package/dist/js/chunks/chunk-CZSQHXEV.mjs +227 -0
  112. package/dist/js/chunks/chunk-CZSQHXEV.mjs.map +7 -0
  113. package/dist/js/chunks/chunk-DZYVU75J.mjs +121 -0
  114. package/dist/js/chunks/chunk-DZYVU75J.mjs.map +7 -0
  115. package/dist/js/chunks/{chunk-74MXKKLN.mjs → chunk-EC26RU2D.mjs} +11 -29
  116. package/dist/js/chunks/chunk-EC26RU2D.mjs.map +7 -0
  117. package/dist/js/chunks/{chunk-WDK4T63U.mjs → chunk-EVCVFEV3.mjs} +235 -146
  118. package/dist/js/chunks/chunk-EVCVFEV3.mjs.map +7 -0
  119. package/dist/js/chunks/chunk-FCNF4GRJ.mjs +445 -0
  120. package/dist/js/chunks/chunk-FCNF4GRJ.mjs.map +7 -0
  121. package/dist/js/chunks/chunk-GCWWEZKO.mjs +342 -0
  122. package/dist/js/chunks/chunk-GCWWEZKO.mjs.map +7 -0
  123. package/dist/js/chunks/chunk-GNRSYMVH.mjs +1 -0
  124. package/dist/js/chunks/chunk-GVZQH2H5.mjs +54 -0
  125. package/dist/js/chunks/chunk-GVZQH2H5.mjs.map +7 -0
  126. package/dist/js/chunks/chunk-GWZ76SR4.mjs +435 -0
  127. package/dist/js/chunks/chunk-GWZ76SR4.mjs.map +7 -0
  128. package/dist/js/chunks/{chunk-PDG64UHF.mjs → chunk-ILDRRG7T.mjs} +21 -23
  129. package/dist/js/chunks/chunk-ILDRRG7T.mjs.map +7 -0
  130. package/dist/js/chunks/chunk-INLZWHLY.mjs +80 -0
  131. package/dist/js/chunks/chunk-INLZWHLY.mjs.map +7 -0
  132. package/dist/js/chunks/chunk-JUKBBN6P.mjs +175 -0
  133. package/dist/js/chunks/chunk-JUKBBN6P.mjs.map +7 -0
  134. package/dist/js/chunks/chunk-KYIEG4U3.mjs +730 -0
  135. package/dist/js/chunks/chunk-KYIEG4U3.mjs.map +7 -0
  136. package/dist/js/chunks/{chunk-BGZLF6JZ.mjs → chunk-KZPSAXIU.mjs} +142 -32
  137. package/dist/js/chunks/chunk-KZPSAXIU.mjs.map +7 -0
  138. package/dist/js/chunks/chunk-LDXCC2L3.mjs +438 -0
  139. package/dist/js/chunks/chunk-LDXCC2L3.mjs.map +7 -0
  140. package/dist/js/chunks/chunk-NAC72P7R.mjs +137 -0
  141. package/dist/js/chunks/chunk-NAC72P7R.mjs.map +7 -0
  142. package/dist/js/chunks/chunk-NBJAUGPP.mjs +244 -0
  143. package/dist/js/chunks/chunk-NBJAUGPP.mjs.map +7 -0
  144. package/dist/js/chunks/chunk-NNHVANQA.mjs +113 -0
  145. package/dist/js/chunks/chunk-NNHVANQA.mjs.map +7 -0
  146. package/dist/js/chunks/chunk-NVQ5EHCU.mjs +376 -0
  147. package/dist/js/chunks/chunk-NVQ5EHCU.mjs.map +7 -0
  148. package/dist/js/chunks/{chunk-DXGRXYYL.mjs → chunk-OP43LLIC.mjs} +28 -45
  149. package/dist/js/chunks/chunk-OP43LLIC.mjs.map +7 -0
  150. package/dist/js/chunks/chunk-OUCHKSAW.mjs +63 -0
  151. package/dist/js/chunks/chunk-OUCHKSAW.mjs.map +7 -0
  152. package/dist/js/chunks/{chunk-TSZYSW7F.mjs → chunk-OYNUDOHR.mjs} +19 -47
  153. package/dist/js/chunks/chunk-OYNUDOHR.mjs.map +7 -0
  154. package/dist/js/chunks/{chunk-UAZSDUVP.mjs → chunk-P6DRQ6KS.mjs} +36 -30
  155. package/dist/js/chunks/chunk-P6DRQ6KS.mjs.map +7 -0
  156. package/dist/js/chunks/chunk-PA7NU5AK.mjs +99 -0
  157. package/dist/js/chunks/chunk-PA7NU5AK.mjs.map +7 -0
  158. package/dist/js/chunks/chunk-QACZ6TUP.mjs +224 -0
  159. package/dist/js/chunks/chunk-QACZ6TUP.mjs.map +7 -0
  160. package/dist/js/chunks/{chunk-GJL6GCIU.mjs → chunk-QXKWVHBD.mjs} +265 -161
  161. package/dist/js/chunks/chunk-QXKWVHBD.mjs.map +7 -0
  162. package/dist/js/chunks/{chunk-X4ISMKE2.mjs → chunk-ROH2HDB4.mjs} +7 -6
  163. package/dist/js/chunks/chunk-ROH2HDB4.mjs.map +7 -0
  164. package/dist/js/chunks/chunk-S23RJ3XY.mjs +86 -0
  165. package/dist/js/chunks/chunk-S23RJ3XY.mjs.map +7 -0
  166. package/dist/js/chunks/{chunk-SMY7GJSS.mjs → chunk-SPPHF7YZ.mjs} +36 -29
  167. package/dist/js/chunks/chunk-SPPHF7YZ.mjs.map +7 -0
  168. package/dist/js/chunks/chunk-T3BNSRP3.mjs +152 -0
  169. package/dist/js/chunks/chunk-T3BNSRP3.mjs.map +7 -0
  170. package/dist/js/chunks/chunk-TFABTUAZ.mjs +108 -0
  171. package/dist/js/chunks/chunk-TFABTUAZ.mjs.map +7 -0
  172. package/dist/js/chunks/chunk-U4B3VHFS.mjs +507 -0
  173. package/dist/js/chunks/chunk-U4B3VHFS.mjs.map +7 -0
  174. package/dist/js/chunks/chunk-UGJHCHXG.mjs +341 -0
  175. package/dist/js/chunks/chunk-UGJHCHXG.mjs.map +7 -0
  176. package/dist/js/chunks/chunk-VFV75DHF.mjs +70 -0
  177. package/dist/js/chunks/chunk-VFV75DHF.mjs.map +7 -0
  178. package/dist/js/chunks/{chunk-ZX6M7SWO.mjs → chunk-VGY4M57S.mjs} +266 -120
  179. package/dist/js/chunks/chunk-VGY4M57S.mjs.map +7 -0
  180. package/dist/js/chunks/chunk-VH4BMAZS.mjs +167 -0
  181. package/dist/js/chunks/chunk-VH4BMAZS.mjs.map +7 -0
  182. package/dist/js/chunks/chunk-VJVQIXHC.mjs +123 -0
  183. package/dist/js/chunks/chunk-VJVQIXHC.mjs.map +7 -0
  184. package/dist/js/chunks/{chunk-SFI2U4YW.mjs → chunk-VMY55K2X.mjs} +76 -109
  185. package/dist/js/chunks/chunk-VMY55K2X.mjs.map +7 -0
  186. package/dist/js/chunks/{chunk-KUFHW3DS.mjs → chunk-VR3L2WN5.mjs} +11 -17
  187. package/dist/js/chunks/chunk-VR3L2WN5.mjs.map +7 -0
  188. package/dist/js/chunks/chunk-W6FAL3TI.mjs +38 -0
  189. package/dist/js/chunks/chunk-W6FAL3TI.mjs.map +7 -0
  190. package/dist/js/chunks/chunk-WU7XJ4RR.mjs +450 -0
  191. package/dist/js/chunks/chunk-WU7XJ4RR.mjs.map +7 -0
  192. package/dist/js/chunks/chunk-X7SDA2J5.mjs +116 -0
  193. package/dist/js/chunks/chunk-X7SDA2J5.mjs.map +7 -0
  194. package/dist/js/chunks/chunk-Y6H2X7ZC.mjs +209 -0
  195. package/dist/js/chunks/chunk-Y6H2X7ZC.mjs.map +7 -0
  196. package/dist/js/chunks/chunk-Y6TLRA3U.mjs +129 -0
  197. package/dist/js/chunks/chunk-Y6TLRA3U.mjs.map +7 -0
  198. package/dist/js/chunks/chunk-Z4GICXR2.mjs +190 -0
  199. package/dist/js/chunks/chunk-Z4GICXR2.mjs.map +7 -0
  200. package/dist/js/chunks/chunk-Z4OARDZ7.mjs +442 -0
  201. package/dist/js/chunks/chunk-Z4OARDZ7.mjs.map +7 -0
  202. package/dist/js/chunks/{chunk-FM5CZOUB.mjs → chunk-ZJNLAGY5.mjs} +19 -30
  203. package/dist/js/chunks/chunk-ZJNLAGY5.mjs.map +7 -0
  204. package/dist/js/chunks/chunk-ZKWUWBUB.mjs +81 -0
  205. package/dist/js/chunks/chunk-ZKWUWBUB.mjs.map +7 -0
  206. package/dist/js/chunks/chunk-ZM3XBHWV.mjs +746 -0
  207. package/dist/js/chunks/chunk-ZM3XBHWV.mjs.map +7 -0
  208. package/dist/js/chunks/chunk-ZO6ZLHFF.mjs +48 -0
  209. package/dist/js/chunks/chunk-ZO6ZLHFF.mjs.map +7 -0
  210. package/dist/js/chunks/chunk-ZVLOUDIJ.mjs +251 -0
  211. package/dist/js/chunks/chunk-ZVLOUDIJ.mjs.map +7 -0
  212. package/dist/js/expressive.cjs +10613 -4327
  213. package/dist/js/expressive.cjs.map +4 -4
  214. package/dist/js/expressive.js +10613 -4327
  215. package/dist/js/expressive.js.map +4 -4
  216. package/dist/js/expressive.min.js +23 -22
  217. package/dist/js/expressive.min.js.map +4 -4
  218. package/dist/js/expressive.mjs +182 -71
  219. package/dist/js/expressive.mjs.map +2 -2
  220. package/dist/js/internal/behaviors/bottomSheets.mjs +4 -3
  221. package/dist/js/internal/behaviors/copy.mjs +9 -0
  222. package/dist/js/internal/behaviors/copy.mjs.map +7 -0
  223. package/dist/js/internal/behaviors/dataTables.mjs +10 -0
  224. package/dist/js/internal/behaviors/dataTables.mjs.map +7 -0
  225. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  226. package/dist/js/internal/behaviors/forms.mjs +2 -2
  227. package/dist/js/internal/behaviors/imageCompare.mjs +8 -0
  228. package/dist/js/internal/behaviors/imageCompare.mjs.map +7 -0
  229. package/dist/js/internal/behaviors/lists.mjs +8 -0
  230. package/dist/js/internal/behaviors/lists.mjs.map +7 -0
  231. package/dist/js/internal/behaviors/paneResize.mjs +8 -0
  232. package/dist/js/internal/behaviors/paneResize.mjs.map +7 -0
  233. package/dist/js/internal/behaviors/sheetDrag.mjs +7 -2
  234. package/dist/js/internal/behaviors/sideSheets.mjs +4 -3
  235. package/dist/js/internal/behaviors/sortable.mjs +8 -0
  236. package/dist/js/internal/behaviors/sortable.mjs.map +7 -0
  237. package/dist/js/internal/behaviors/theme.mjs +8 -0
  238. package/dist/js/internal/behaviors/theme.mjs.map +7 -0
  239. package/dist/js/internal/behaviors/tour.mjs +8 -0
  240. package/dist/js/internal/behaviors/tour.mjs.map +7 -0
  241. package/dist/js/internal/behaviors/transferList.mjs +8 -0
  242. package/dist/js/internal/behaviors/transferList.mjs.map +7 -0
  243. package/dist/js/internal/components/appBar.mjs +3 -2
  244. package/dist/js/internal/components/autocomplete.mjs +4 -4
  245. package/dist/js/internal/components/backToTop.mjs +9 -0
  246. package/dist/js/internal/components/backToTop.mjs.map +7 -0
  247. package/dist/js/internal/components/barChart.mjs +5 -4
  248. package/dist/js/internal/components/buttonGroup.mjs +3 -2
  249. package/dist/js/internal/components/buttons.mjs +3 -3
  250. package/dist/js/internal/components/cards.mjs +3 -3
  251. package/dist/js/internal/components/carousel.mjs +3 -3
  252. package/dist/js/internal/components/cascader.mjs +10 -0
  253. package/dist/js/internal/components/cascader.mjs.map +7 -0
  254. package/dist/js/internal/components/characterCounter.mjs +3 -2
  255. package/dist/js/internal/components/chips.mjs +6 -5
  256. package/dist/js/internal/components/colorPicker.mjs +9 -0
  257. package/dist/js/internal/components/colorPicker.mjs.map +7 -0
  258. package/dist/js/internal/components/columnChart.mjs +4 -3
  259. package/dist/js/internal/components/commandPalette.mjs +3 -3
  260. package/dist/js/internal/components/confetti.mjs +3 -2
  261. package/dist/js/internal/components/currencyInput.mjs +9 -0
  262. package/dist/js/internal/components/currencyInput.mjs.map +7 -0
  263. package/dist/js/internal/components/datepicker.mjs +11 -8
  264. package/dist/js/internal/components/expandingCard.mjs +3 -3
  265. package/dist/js/internal/components/funnelChart.mjs +10 -0
  266. package/dist/js/internal/components/funnelChart.mjs.map +7 -0
  267. package/dist/js/internal/components/heatmapChart.mjs +4 -3
  268. package/dist/js/internal/components/hoverCard.mjs +9 -0
  269. package/dist/js/internal/components/hoverCard.mjs.map +7 -0
  270. package/dist/js/internal/components/index.mjs +131 -66
  271. package/dist/js/internal/components/inputMask.mjs +9 -0
  272. package/dist/js/internal/components/inputMask.mjs.map +7 -0
  273. package/dist/js/internal/components/keypad.mjs +3 -3
  274. package/dist/js/internal/components/lightbox.mjs +3 -3
  275. package/dist/js/internal/components/lineChart.mjs +25 -4
  276. package/dist/js/internal/components/loadingOverlay.mjs +9 -0
  277. package/dist/js/internal/components/loadingOverlay.mjs.map +7 -0
  278. package/dist/js/internal/components/mapView.mjs +3 -3
  279. package/dist/js/internal/components/menu.mjs +3 -3
  280. package/dist/js/internal/components/menubar.mjs +10 -0
  281. package/dist/js/internal/components/menubar.mjs.map +7 -0
  282. package/dist/js/internal/components/messageScroller.mjs +3 -3
  283. package/dist/js/internal/components/mixedChart.mjs +5 -4
  284. package/dist/js/internal/components/navigationRail.mjs +3 -2
  285. package/dist/js/internal/components/particles.mjs +3 -2
  286. package/dist/js/internal/components/pieChart.mjs +4 -3
  287. package/dist/js/internal/components/pullToRefresh.mjs +9 -0
  288. package/dist/js/internal/components/pullToRefresh.mjs.map +7 -0
  289. package/dist/js/internal/components/questionnaire.mjs +3 -3
  290. package/dist/js/internal/components/radarChart.mjs +4 -3
  291. package/dist/js/internal/components/radialChart.mjs +4 -3
  292. package/dist/js/internal/components/registry.mjs +59 -41
  293. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  294. package/dist/js/internal/components/sankeyChart.mjs +10 -0
  295. package/dist/js/internal/components/sankeyChart.mjs.map +7 -0
  296. package/dist/js/internal/components/scatterChart.mjs +10 -0
  297. package/dist/js/internal/components/scatterChart.mjs.map +7 -0
  298. package/dist/js/internal/components/scrollspy.mjs +3 -2
  299. package/dist/js/internal/components/select.mjs +4 -4
  300. package/dist/js/internal/components/showMore.mjs +9 -0
  301. package/dist/js/internal/components/showMore.mjs.map +7 -0
  302. package/dist/js/internal/components/slider.mjs +3 -3
  303. package/dist/js/internal/components/snackbar.mjs +2 -2
  304. package/dist/js/internal/components/swipeActions.mjs +9 -0
  305. package/dist/js/internal/components/swipeActions.mjs.map +7 -0
  306. package/dist/js/internal/components/tabs.mjs +3 -4
  307. package/dist/js/internal/components/timepicker.mjs +5 -4
  308. package/dist/js/internal/components/tooltip.mjs +3 -3
  309. package/dist/js/internal/components/treeSelect.mjs +13 -0
  310. package/dist/js/internal/components/treeSelect.mjs.map +7 -0
  311. package/dist/js/internal/components/treemapChart.mjs +10 -0
  312. package/dist/js/internal/components/treemapChart.mjs.map +7 -0
  313. package/dist/js/internal/core/component.mjs +2 -1
  314. package/dist/js/internal/core/formControl.mjs +12 -0
  315. package/dist/js/internal/core/formControl.mjs.map +7 -0
  316. package/dist/js/internal/core/spring.mjs +11 -0
  317. package/dist/js/internal/core/spring.mjs.map +7 -0
  318. package/dist/js/internal/core/utils.mjs +11 -3
  319. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  320. package/dist/js/internal/plugins/modalDisplayPlugin.mjs +13 -0
  321. package/dist/js/internal/plugins/modalDisplayPlugin.mjs.map +7 -0
  322. package/dist/js/modular.mjs +173 -71
  323. package/dist/types/behaviors/bottomSheets.d.ts +19 -3
  324. package/dist/types/behaviors/copy.d.ts +18 -0
  325. package/dist/types/behaviors/dataTables.d.ts +129 -0
  326. package/dist/types/behaviors/dialogs.d.ts +27 -1
  327. package/dist/types/behaviors/forms.d.ts +68 -2
  328. package/dist/types/behaviors/imageCompare.d.ts +12 -0
  329. package/dist/types/behaviors/lists.d.ts +12 -0
  330. package/dist/types/behaviors/paneResize.d.ts +29 -0
  331. package/dist/types/behaviors/sheetDrag.d.ts +18 -0
  332. package/dist/types/behaviors/sideSheets.d.ts +1 -1
  333. package/dist/types/behaviors/sortable.d.ts +28 -0
  334. package/dist/types/behaviors/theme.d.ts +22 -0
  335. package/dist/types/behaviors/tour.d.ts +36 -0
  336. package/dist/types/behaviors/transferList.d.ts +51 -0
  337. package/dist/types/components/appBar.d.ts +5 -6
  338. package/dist/types/components/autocomplete.d.ts +91 -17
  339. package/dist/types/components/backToTop.d.ts +36 -0
  340. package/dist/types/components/barChart.d.ts +3 -6
  341. package/dist/types/components/buttonGroup.d.ts +2 -4
  342. package/dist/types/components/buttons.d.ts +5 -5
  343. package/dist/types/components/cards.d.ts +3 -16
  344. package/dist/types/components/carousel.d.ts +9 -15
  345. package/dist/types/components/cascader.d.ts +130 -0
  346. package/dist/types/components/characterCounter.d.ts +2 -15
  347. package/dist/types/components/chips.d.ts +65 -19
  348. package/dist/types/components/colorPicker.d.ts +42 -0
  349. package/dist/types/components/columnChart.d.ts +23 -10
  350. package/dist/types/components/commandPalette.d.ts +11 -16
  351. package/dist/types/components/confetti.d.ts +2 -4
  352. package/dist/types/components/currencyInput.d.ts +59 -0
  353. package/dist/types/components/datepicker.d.ts +56 -32
  354. package/dist/types/components/expandingCard.d.ts +4 -6
  355. package/dist/types/components/funnelChart.d.ts +38 -0
  356. package/dist/types/components/heatmapChart.d.ts +39 -8
  357. package/dist/types/components/hoverCard.d.ts +58 -0
  358. package/dist/types/components/index.d.ts +16 -1
  359. package/dist/types/components/inputMask.d.ts +30 -0
  360. package/dist/types/components/keypad.d.ts +38 -6
  361. package/dist/types/components/lightbox.d.ts +14 -20
  362. package/dist/types/components/lineChart.d.ts +172 -10
  363. package/dist/types/components/loadingOverlay.d.ts +42 -0
  364. package/dist/types/components/mapView.d.ts +26 -17
  365. package/dist/types/components/menu.d.ts +60 -22
  366. package/dist/types/components/menubar.d.ts +37 -0
  367. package/dist/types/components/messageScroller.d.ts +2 -14
  368. package/dist/types/components/mixedChart.d.ts +15 -6
  369. package/dist/types/components/navigationRail.d.ts +16 -5
  370. package/dist/types/components/particles.d.ts +8 -4
  371. package/dist/types/components/pieChart.d.ts +32 -7
  372. package/dist/types/components/pullToRefresh.d.ts +80 -0
  373. package/dist/types/components/questionnaire.d.ts +58 -16
  374. package/dist/types/components/radarChart.d.ts +10 -6
  375. package/dist/types/components/radialChart.d.ts +58 -7
  376. package/dist/types/components/registry.d.ts +73 -3
  377. package/dist/types/components/richTextEditor.d.ts +6 -14
  378. package/dist/types/components/sankeyChart.d.ts +72 -0
  379. package/dist/types/components/scatterChart.d.ts +102 -0
  380. package/dist/types/components/scrollspy.d.ts +3 -5
  381. package/dist/types/components/select.d.ts +43 -30
  382. package/dist/types/components/showMore.d.ts +51 -0
  383. package/dist/types/components/slider.d.ts +3 -15
  384. package/dist/types/components/snackbar.d.ts +61 -0
  385. package/dist/types/components/swipeActions.d.ts +81 -0
  386. package/dist/types/components/tabs.d.ts +89 -27
  387. package/dist/types/components/timepicker.d.ts +113 -21
  388. package/dist/types/components/tooltip.d.ts +56 -20
  389. package/dist/types/components/treeSelect.d.ts +106 -0
  390. package/dist/types/components/treemapChart.d.ts +56 -0
  391. package/dist/types/core/component.d.ts +43 -25
  392. package/dist/types/core/formControl.d.ts +21 -0
  393. package/dist/types/core/spring.d.ts +20 -0
  394. package/dist/types/core/utils.d.ts +85 -72
  395. package/dist/types/modular.d.ts +33 -1
  396. package/dist/types/plugins/dockedDisplayPlugin.d.ts +10 -8
  397. package/dist/types/plugins/modalDisplayPlugin.d.ts +32 -0
  398. package/package.json +10 -8
  399. package/src/sass/README.md +27 -18
  400. package/src/sass/abstracts/_elevation.scss +13 -7
  401. package/src/sass/abstracts/_index.scss +1 -0
  402. package/src/sass/abstracts/_mixins.scss +422 -36
  403. package/src/sass/abstracts/_spring.scss +63 -0
  404. package/src/sass/abstracts/_variables.scss +39 -21
  405. package/src/sass/base/_fonts.scss +61 -48
  406. package/src/sass/base/_global.scss +104 -24
  407. package/src/sass/base/_index.scss +2 -0
  408. package/src/sass/base/_normalize.scss +59 -114
  409. package/src/sass/base/_print.scss +21 -0
  410. package/src/sass/base/_prose.scss +68 -0
  411. package/src/sass/base/_typography.scss +9 -5
  412. package/src/sass/components/_accordion.scss +9 -16
  413. package/src/sass/components/_alert.scss +102 -0
  414. package/src/sass/components/_aura.scss +8 -3
  415. package/src/sass/components/_avatar.scss +3 -3
  416. package/src/sass/components/_back-to-top.scss +38 -0
  417. package/src/sass/components/_badges.scss +6 -5
  418. package/src/sass/components/_bar-chart.scss +41 -19
  419. package/src/sass/components/_bottom-sheet.scss +44 -16
  420. package/src/sass/components/_breadcrumb.scss +8 -1
  421. package/src/sass/components/_button-groups.scss +15 -25
  422. package/src/sass/components/_buttons.scss +156 -63
  423. package/src/sass/components/_calendar.scss +246 -0
  424. package/src/sass/components/_cards.scss +36 -44
  425. package/src/sass/components/_carousel.scss +27 -103
  426. package/src/sass/components/_cascader.scss +142 -0
  427. package/src/sass/components/_chips.scss +36 -46
  428. package/src/sass/components/_column-chart.scss +19 -12
  429. package/src/sass/components/_command-palette.scss +4 -7
  430. package/src/sass/components/_confetti.scss +0 -2
  431. package/src/sass/components/_countdown.scss +1 -1
  432. package/src/sass/components/_data-table.scss +162 -25
  433. package/src/sass/components/_datepicker.scss +54 -40
  434. package/src/sass/components/_description-list.scss +85 -0
  435. package/src/sass/components/_dialog.scss +42 -41
  436. package/src/sass/components/_docked-display.scss +1 -3
  437. package/src/sass/components/_drag-handle.scss +16 -20
  438. package/src/sass/components/_expanding-card.scss +20 -9
  439. package/src/sass/components/_fab-menu.scss +44 -32
  440. package/src/sass/components/_funnel-chart.scss +124 -0
  441. package/src/sass/components/_heatmap-chart.scss +111 -22
  442. package/src/sass/components/_icon-buttons.scss +7 -7
  443. package/src/sass/components/_icons-material-design.scss +2 -2
  444. package/src/sass/components/_image-compare.scss +108 -0
  445. package/src/sass/components/_index.scss +20 -0
  446. package/src/sass/components/_keypad.scss +39 -19
  447. package/src/sass/components/_kpi.scss +6 -11
  448. package/src/sass/components/_lightbox.scss +24 -13
  449. package/src/sass/components/_line-chart.scss +16 -2
  450. package/src/sass/components/_list.scss +59 -14
  451. package/src/sass/components/_loading-indicator.scss +1 -0
  452. package/src/sass/components/_loading-overlay.scss +105 -0
  453. package/src/sass/components/_map.scss +33 -11
  454. package/src/sass/components/_marquee.scss +3 -2
  455. package/src/sass/components/_mega-menu.scss +137 -0
  456. package/src/sass/components/_menu.scss +143 -123
  457. package/src/sass/components/_menubar.scss +59 -0
  458. package/src/sass/components/_message-scroller.scss +2 -2
  459. package/src/sass/components/_message.scss +3 -3
  460. package/src/sass/components/_mixed-chart.scss +37 -9
  461. package/src/sass/components/_modal-display.scss +21 -0
  462. package/src/sass/components/_navbar.scss +34 -20
  463. package/src/sass/components/_navigation-bar.scss +15 -77
  464. package/src/sass/components/_navigation-rail.scss +151 -92
  465. package/src/sass/components/_org-chart.scss +192 -0
  466. package/src/sass/components/_page-footer.scss +1 -1
  467. package/src/sass/components/_pagination.scss +6 -13
  468. package/src/sass/components/_panes.scss +32 -26
  469. package/src/sass/components/_particles.scss +0 -2
  470. package/src/sass/components/_pie-chart.scss +91 -11
  471. package/src/sass/components/_popover.scss +18 -5
  472. package/src/sass/components/_progress.scss +152 -31
  473. package/src/sass/components/_pull-to-refresh.scss +90 -0
  474. package/src/sass/components/_questionnaire.scss +74 -3
  475. package/src/sass/components/_radar-chart.scss +38 -10
  476. package/src/sass/components/_radial-chart.scss +113 -5
  477. package/src/sass/components/_rich-text-editor.scss +2 -2
  478. package/src/sass/components/_sankey-chart.scss +114 -0
  479. package/src/sass/components/_scatter-chart.scss +153 -0
  480. package/src/sass/components/_scrim.scss +0 -2
  481. package/src/sass/components/_scrollspy.scss +0 -2
  482. package/src/sass/components/_search.scss +26 -22
  483. package/src/sass/components/_show-more.scss +8 -0
  484. package/src/sass/components/_side-sheet.scss +23 -37
  485. package/src/sass/components/_skeleton.scss +2 -4
  486. package/src/sass/components/_snackbar.scss +27 -21
  487. package/src/sass/components/_split-button.scss +5 -5
  488. package/src/sass/components/_stat.scss +3 -8
  489. package/src/sass/components/_stepper.scss +1 -1
  490. package/src/sass/components/_swipe-actions.scss +71 -0
  491. package/src/sass/components/_tabs.scss +51 -32
  492. package/src/sass/components/_timeline.scss +12 -12
  493. package/src/sass/components/_timepicker.scss +109 -78
  494. package/src/sass/components/_toolbar.scss +35 -43
  495. package/src/sass/components/_tooltip.scss +21 -12
  496. package/src/sass/components/_tour.scss +89 -0
  497. package/src/sass/components/_transfer-list.scss +73 -0
  498. package/src/sass/components/_transitions.scss +4 -4
  499. package/src/sass/components/_tree.scss +3 -16
  500. package/src/sass/components/_treemap-chart.scss +122 -0
  501. package/src/sass/components/forms/_checkboxes.scss +106 -24
  502. package/src/sass/components/forms/_color-picker.scss +135 -0
  503. package/src/sass/components/forms/_color-swatches.scss +85 -0
  504. package/src/sass/components/forms/_drop-zone.scss +15 -9
  505. package/src/sass/components/forms/_fieldset.scss +7 -7
  506. package/src/sass/components/forms/_file-input.scss +6 -8
  507. package/src/sass/components/forms/_index.scss +3 -1
  508. package/src/sass/components/forms/_input-fields.scss +254 -90
  509. package/src/sass/components/forms/_radio-buttons.scss +33 -94
  510. package/src/sass/components/forms/_rating.scss +2 -32
  511. package/src/sass/components/forms/_select.scss +199 -20
  512. package/src/sass/components/forms/_slider.scss +91 -94
  513. package/src/sass/components/forms/_switches.scss +53 -164
  514. package/src/sass/custom.scss +10 -1
  515. package/src/sass/expressive.scss +3 -63
  516. package/src/sass/tokens/_contrast.scss +94 -0
  517. package/src/sass/tokens/_elevation.scss +16 -0
  518. package/src/sass/tokens/_index.scss +5 -0
  519. package/src/sass/tokens/_motion.scss +109 -0
  520. package/src/sass/tokens/_reference.scss +72 -141
  521. package/src/sass/tokens/_shape.scss +38 -0
  522. package/src/sass/tokens/_stacking.scss +27 -0
  523. package/src/sass/tokens/_state.scss +0 -2
  524. package/src/sass/tokens/_theme.scss +10 -1
  525. package/src/sass/tokens/_vibrant.scss +2 -5
  526. package/src/sass/utilities/_defer-render.scss +17 -0
  527. package/src/sass/utilities/_helpers.scss +183 -26
  528. package/src/sass/utilities/_index.scss +1 -0
  529. package/src/sass/utilities/_scroll-area.scss +0 -2
  530. package/src/sass/utilities/_spacing.scss +52 -34
  531. package/src/sass/utilities/_typescale.scss +8 -1
  532. package/src/sass/utilities/_visibility.scss +47 -76
  533. package/src/sass/utilities/_z-depth.scss +7 -4
  534. package/dist/js/chunks/chunk-33QVDDGR.mjs +0 -270
  535. package/dist/js/chunks/chunk-33QVDDGR.mjs.map +0 -7
  536. package/dist/js/chunks/chunk-45FER6RI.mjs +0 -59
  537. package/dist/js/chunks/chunk-45FER6RI.mjs.map +0 -7
  538. package/dist/js/chunks/chunk-5CEAOLUA.mjs.map +0 -7
  539. package/dist/js/chunks/chunk-6VATUZC6.mjs +0 -295
  540. package/dist/js/chunks/chunk-6VATUZC6.mjs.map +0 -7
  541. package/dist/js/chunks/chunk-74MXKKLN.mjs.map +0 -7
  542. package/dist/js/chunks/chunk-AIURVCG6.mjs +0 -55
  543. package/dist/js/chunks/chunk-AIURVCG6.mjs.map +0 -7
  544. package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +0 -7
  545. package/dist/js/chunks/chunk-C6CHEWYP.mjs.map +0 -7
  546. package/dist/js/chunks/chunk-CK2XCICY.mjs.map +0 -7
  547. package/dist/js/chunks/chunk-CXXM2L4F.mjs +0 -344
  548. package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +0 -7
  549. package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +0 -7
  550. package/dist/js/chunks/chunk-FM5CZOUB.mjs.map +0 -7
  551. package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +0 -7
  552. package/dist/js/chunks/chunk-K3HZMFMD.mjs +0 -135
  553. package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +0 -7
  554. package/dist/js/chunks/chunk-KHXZ2A4K.mjs.map +0 -7
  555. package/dist/js/chunks/chunk-KQACNQ22.mjs +0 -7
  556. package/dist/js/chunks/chunk-KQACNQ22.mjs.map +0 -7
  557. package/dist/js/chunks/chunk-KUFHW3DS.mjs.map +0 -7
  558. package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +0 -7
  559. package/dist/js/chunks/chunk-L27Q6ZMI.mjs.map +0 -7
  560. package/dist/js/chunks/chunk-LQWUDNHZ.mjs.map +0 -7
  561. package/dist/js/chunks/chunk-M372EDXD.mjs +0 -322
  562. package/dist/js/chunks/chunk-M372EDXD.mjs.map +0 -7
  563. package/dist/js/chunks/chunk-M3MURWMB.mjs +0 -82
  564. package/dist/js/chunks/chunk-M3MURWMB.mjs.map +0 -7
  565. package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +0 -7
  566. package/dist/js/chunks/chunk-OWG3LMUL.mjs +0 -169
  567. package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +0 -7
  568. package/dist/js/chunks/chunk-PD6HYHAE.mjs +0 -48
  569. package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +0 -7
  570. package/dist/js/chunks/chunk-PDG64UHF.mjs.map +0 -7
  571. package/dist/js/chunks/chunk-PO3AXVR3.mjs +0 -546
  572. package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +0 -7
  573. package/dist/js/chunks/chunk-QYGK36OG.mjs +0 -181
  574. package/dist/js/chunks/chunk-QYGK36OG.mjs.map +0 -7
  575. package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +0 -7
  576. package/dist/js/chunks/chunk-SMY7GJSS.mjs.map +0 -7
  577. package/dist/js/chunks/chunk-TCCA2HDG.mjs +0 -414
  578. package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +0 -7
  579. package/dist/js/chunks/chunk-TSZYSW7F.mjs.map +0 -7
  580. package/dist/js/chunks/chunk-UAZSDUVP.mjs.map +0 -7
  581. package/dist/js/chunks/chunk-UBRZZWRA.mjs +0 -127
  582. package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +0 -7
  583. package/dist/js/chunks/chunk-UCOE7ZDL.mjs +0 -287
  584. package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +0 -7
  585. package/dist/js/chunks/chunk-UETTGDLI.mjs.map +0 -7
  586. package/dist/js/chunks/chunk-UNCRDLP6.mjs +0 -136
  587. package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +0 -7
  588. package/dist/js/chunks/chunk-VGNYF6FB.mjs.map +0 -7
  589. package/dist/js/chunks/chunk-VGPGBNGL.mjs +0 -68
  590. package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +0 -7
  591. package/dist/js/chunks/chunk-VKAUVTQY.mjs +0 -1
  592. package/dist/js/chunks/chunk-VM4FTS7L.mjs +0 -48
  593. package/dist/js/chunks/chunk-VM4FTS7L.mjs.map +0 -7
  594. package/dist/js/chunks/chunk-WDK4T63U.mjs.map +0 -7
  595. package/dist/js/chunks/chunk-WOCCTVUF.mjs +0 -185
  596. package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +0 -7
  597. package/dist/js/chunks/chunk-WQYN5L4E.mjs +0 -107
  598. package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +0 -7
  599. package/dist/js/chunks/chunk-X4ISMKE2.mjs.map +0 -7
  600. package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +0 -7
  601. package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +0 -7
  602. /package/dist/js/chunks/{chunk-VKAUVTQY.mjs.map → chunk-GNRSYMVH.mjs.map} +0 -0
@@ -1,17 +1,94 @@
1
1
  import {
2
- DockedDisplayPlugin
3
- } from "./chunk-M3MURWMB.mjs";
2
+ ModalDisplayPlugin,
3
+ createDisplayPlugin,
4
+ hideModal
5
+ } from "./chunk-OUCHKSAW.mjs";
4
6
  import {
5
7
  FormSelect
6
- } from "./chunk-WDK4T63U.mjs";
7
- import {
8
- Utils
9
- } from "./chunk-M372EDXD.mjs";
8
+ } from "./chunk-EVCVFEV3.mjs";
10
9
  import {
11
10
  Component
12
- } from "./chunk-PD6HYHAE.mjs";
11
+ } from "./chunk-CMGXGYUC.mjs";
12
+ import {
13
+ Utils,
14
+ pickerFooter
15
+ } from "./chunk-ZVLOUDIJ.mjs";
13
16
 
14
17
  // src/ts/components/datepicker.ts
18
+ var MONTHS = Array.from({ length: 12 }, (_, month) => new Date(Date.UTC(2023, month, 1)));
19
+ var WEEKDAYS = Array.from({ length: 7 }, (_, day) => new Date(Date.UTC(2023, 0, 1 + day)));
20
+ function localeDates(locale) {
21
+ const names = (dates, options) => {
22
+ const format = new Intl.DateTimeFormat(locale, { ...options, calendar: "gregory", timeZone: "UTC" });
23
+ return dates.map((date) => format.format(date));
24
+ };
25
+ const intl = new Intl.Locale(locale);
26
+ const week = intl.getWeekInfo?.() ?? intl.weekInfo;
27
+ return {
28
+ week: week ? { firstDay: week.firstDay % 7 } : {},
29
+ i18n: {
30
+ months: names(MONTHS, { month: "long" }),
31
+ monthsShort: names(MONTHS, { month: "short" }),
32
+ weekdays: names(WEEKDAYS, { weekday: "long" }),
33
+ weekdaysShort: names(WEEKDAYS, { weekday: "short" }),
34
+ weekdaysAbbrev: names(WEEKDAYS, { weekday: "narrow" })
35
+ }
36
+ };
37
+ }
38
+ var escapeRegExp = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
39
+ var NUMBER = "(\\d{1,2})";
40
+ var named = (names, key) => [
41
+ `(${names.map(escapeRegExp).join("|")})`,
42
+ (parts, text) => key && (parts[key] = names.findIndex((name) => name.toLowerCase() === text.toLowerCase()))
43
+ ];
44
+ var READERS = {
45
+ d: () => [NUMBER, (parts, text) => parts.day = +text],
46
+ dd: () => [NUMBER, (parts, text) => parts.day = +text],
47
+ ddd: (i18n) => named(i18n.weekdaysShort),
48
+ dddd: (i18n) => named(i18n.weekdays),
49
+ m: () => [NUMBER, (parts, text) => parts.month = +text - 1],
50
+ mm: () => [NUMBER, (parts, text) => parts.month = +text - 1],
51
+ mmm: (i18n) => named(i18n.monthsShort, "month"),
52
+ mmmm: (i18n) => named(i18n.months, "month"),
53
+ // As Date.parse reads them: 00 to 49 in this century, 50 to 99 in the last.
54
+ yy: () => ["(\\d{2})", (parts, text) => parts.year = +text + (+text < 50 ? 2e3 : 1900)],
55
+ yyyy: () => ["(\\d{4})", (parts, text) => parts.year = +text]
56
+ };
57
+ var pad = (n) => String(n).padStart(2, "0");
58
+ var FORMATS = {
59
+ d: (date) => date.getDate(),
60
+ dd: (date) => pad(date.getDate()),
61
+ ddd: (date, i18n) => i18n.weekdaysShort[date.getDay()],
62
+ dddd: (date, i18n) => i18n.weekdays[date.getDay()],
63
+ m: (date) => date.getMonth() + 1,
64
+ mm: (date) => pad(date.getMonth() + 1),
65
+ mmm: (date, i18n) => i18n.monthsShort[date.getMonth()],
66
+ mmmm: (date, i18n) => i18n.months[date.getMonth()],
67
+ yy: (date) => String(date.getFullYear()).slice(2),
68
+ yyyy: (date) => date.getFullYear()
69
+ };
70
+ function readDate(value, format, i18n) {
71
+ const readers = [];
72
+ const pattern = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g).map((token) => {
73
+ const reader = READERS[token]?.(i18n);
74
+ if (reader) readers.push(reader);
75
+ return reader ? reader[0] : escapeRegExp(token);
76
+ });
77
+ const match = new RegExp(`^\\s*${pattern.join("")}\\s*$`, "iu").exec(value);
78
+ if (!match) return null;
79
+ const parts = {};
80
+ readers.forEach(([, set], i) => set(parts, match[i + 1]));
81
+ const date = new Date(2e3, 0, 1);
82
+ date.setFullYear(parts.year, parts.month, parts.day);
83
+ const same = [date.getFullYear(), date.getMonth(), date.getDate()].join() === [parts.year, parts.month, parts.day].join();
84
+ return same ? date : null;
85
+ }
86
+ function withLocale(el, options = {}) {
87
+ const locale = Utils.locale(el);
88
+ if (!locale) return options;
89
+ const { week, i18n } = localeDates(locale);
90
+ return { ...week, ...options, i18n: { ...i18n, ...options.i18n } };
91
+ }
15
92
  var _defaults = {
16
93
  // the default output format for the input field value
17
94
  format: "mmm dd, yyyy",
@@ -46,8 +123,6 @@ var _defaults = {
46
123
  maxYear: 9999,
47
124
  minMonth: void 0,
48
125
  maxMonth: void 0,
49
- startRange: null,
50
- endRange: null,
51
126
  isRTL: false,
52
127
  yearRangeReverse: false,
53
128
  // Render the month after year in the calendar title
@@ -67,8 +142,8 @@ var _defaults = {
67
142
  cancel: "Cancel",
68
143
  clear: "Clear",
69
144
  done: "Ok",
70
- previousMonth: "\u2039",
71
- nextMonth: "\u203A",
145
+ previousMonth: "Previous month",
146
+ nextMonth: "Next month",
72
147
  months: [
73
148
  "January",
74
149
  "February",
@@ -114,12 +189,15 @@ var _defaults = {
114
189
  };
115
190
  var _Datepicker = class _Datepicker extends Component {
116
191
  constructor(el, options) {
117
- super(el, options, _Datepicker);
192
+ options = withLocale(el, options);
193
+ super(el, options);
118
194
  this.multiple = false;
119
195
  /** What setInputValue last wrote, so reading it back does not depend on the parser. */
120
196
  this._writtenInputs = /* @__PURE__ */ new WeakMap();
121
- /** Rows renderRow has already checked, so renderBody does not parse them again. */
122
- this._checkedRows = /* @__PURE__ */ new Set();
197
+ this._form = null;
198
+ this._resetDates = /* @__PURE__ */ new WeakMap();
199
+ // Counts selections, so a callback that selects again silences the stale event.
200
+ this._selection = 0;
123
201
  /** Nesting depth of {@link _batchDraws}; > 0 means draws are being collected. */
124
202
  this._drawDepth = 0;
125
203
  /** Whether a draw was requested while batching. */
@@ -136,11 +214,11 @@ var _Datepicker = class _Datepicker extends Component {
136
214
  this.draw();
137
215
  this.gotoDate(e.target === this.el ? this.date : this.endDate);
138
216
  });
139
- if (this.displayPlugin) this.displayPlugin.show();
217
+ this._showDisplay();
140
218
  if (this.options.onInputInteraction) this.options.onInputInteraction.call(this);
141
219
  };
142
- this._handleInputKeydown = (e) => {
143
- if (e.key === Utils.keys.ENTER) {
220
+ this._handleInputKeydown = Utils.ignoringComposition((e) => {
221
+ if (e.key === "Enter") {
144
222
  e.preventDefault();
145
223
  this._batchDraws(() => {
146
224
  this.setDateFromInput(e.target);
@@ -151,7 +229,7 @@ var _Datepicker = class _Datepicker extends Component {
151
229
  this._syncCalendarFocus(true);
152
230
  if (this.options.onInputInteraction) this.options.onInputInteraction.call(this);
153
231
  }
154
- };
232
+ });
155
233
  this._handleCalendarFocus = (event) => {
156
234
  const button = event.target;
157
235
  if (!button.matches(".datepicker-day-button")) return;
@@ -160,7 +238,7 @@ var _Datepicker = class _Datepicker extends Component {
160
238
  };
161
239
  this._handleCalendarKeydown = (event) => {
162
240
  const button = event.target;
163
- if (!button.matches(".datepicker-day-button") || event.altKey || event.ctrlKey || event.metaKey) return;
241
+ if (!button.matches(".datepicker-day-button") || !Utils.plainKey(event)) return;
164
242
  const date = this._dayDate(button);
165
243
  const weekday = (date.getDay() - this.options.firstDay + 7) % 7;
166
244
  const offsets = {
@@ -216,7 +294,7 @@ var _Datepicker = class _Datepicker extends Component {
216
294
  };
217
295
  this._handleDateRangeCalendarClick = (date) => {
218
296
  if (this.endDate == null || !_Datepicker._compareDates(date, this.endDate)) {
219
- if (_Datepicker._isDate(this.date) && _Datepicker._comparePastDate(date, this.date)) {
297
+ if (_Datepicker._isDate(this.date) && date < this.date) {
220
298
  return;
221
299
  }
222
300
  this.setDate(date, false, _Datepicker._isDate(this.date));
@@ -241,6 +319,18 @@ var _Datepicker = class _Datepicker extends Component {
241
319
  this._handleYearChange = (e) => {
242
320
  this.gotoYear(e.target.value);
243
321
  };
322
+ // A reset restores the inputs' values after its event, without a change
323
+ // event. Drop the inputs added for extra dates and read the selection back
324
+ // from what the reset left.
325
+ this._handleFormReset = (e) => {
326
+ clearTimeout(this._resetTimer);
327
+ this._resetTimer = setTimeout(() => {
328
+ if (e.defaultPrevented) return;
329
+ if (this.options.isMultipleSelection) this._readBackMultiple();
330
+ else this._readBackSingle();
331
+ this.draw();
332
+ });
333
+ };
244
334
  this._handleInputChange = (e) => {
245
335
  if (e["detail"]?.firedBy === this) return;
246
336
  this.setDateFromInput(e.target);
@@ -250,21 +340,17 @@ var _Datepicker = class _Datepicker extends Component {
250
340
  };
251
341
  this._confirm = () => {
252
342
  this._finishSelection();
253
- if (typeof this.options.onConfirm === "function") this.options.onConfirm.call(this);
343
+ hideModal(this.displayPlugin);
344
+ this._notify("confirm", this.options.onConfirm, { args: [] });
254
345
  };
255
346
  this._cancel = () => {
256
- if (typeof this.options.onCancel === "function") this.options.onCancel.call(this);
347
+ hideModal(this.displayPlugin);
348
+ this._notify("cancel", this.options.onCancel, { args: [] });
257
349
  };
258
- this.el["Expressive_Datepicker"] = this;
259
- this.options = {
260
- ..._Datepicker.defaults,
261
- ...options
262
- };
263
- if (!!options && options.hasOwnProperty("i18n") && typeof options.i18n === "object") {
264
- this.options.i18n = { ..._Datepicker.defaults.i18n, ...options.i18n };
265
- }
266
- if (this.options.minDate) this.options.minDate.setHours(0, 0, 0, 0);
267
- if (this.options.maxDate) this.options.maxDate.setHours(0, 0, 0, 0);
350
+ if (this.options.displayPlugin === "modal") Object.assign(this.options, { openByDefault: true, autoSubmit: false });
351
+ const { minDate, maxDate } = this.options;
352
+ if (minDate) this.options.minDate = new Date(new Date(minDate.getTime()).setHours(0, 0, 0, 0));
353
+ if (maxDate) this.options.maxDate = new Date(new Date(maxDate.getTime()).setHours(0, 0, 0, 0));
268
354
  this.id = Utils.guid();
269
355
  if (this.options.isMultipleSelection) {
270
356
  this.multiple = true;
@@ -274,7 +360,8 @@ var _Datepicker = class _Datepicker extends Component {
274
360
  this._setupVariables();
275
361
  this._insertHTMLIntoDOM();
276
362
  this._setupEventHandlers();
277
- if (!this.options.defaultDate) {
363
+ const fromValue = !this.options.defaultDate;
364
+ if (fromValue) {
278
365
  this.options.defaultDate = this._parseInput(this.el.value);
279
366
  }
280
367
  const defDate = this.options.defaultDate;
@@ -282,6 +369,8 @@ var _Datepicker = class _Datepicker extends Component {
282
369
  if (this.options.setDefaultDate) {
283
370
  this.setDate(defDate, true);
284
371
  this.setInputValue(this.el, defDate);
372
+ } else if (fromValue && this._isSelectableDay(defDate)) {
373
+ this.setDate(defDate, true);
285
374
  } else {
286
375
  this.gotoDate(defDate);
287
376
  }
@@ -298,21 +387,19 @@ var _Datepicker = class _Datepicker extends Component {
298
387
  }
299
388
  }
300
389
  }
301
- if (this.options.displayPlugin === "docked") {
302
- this.displayPlugin = DockedDisplayPlugin.init(this.el, this.containerEl, this.options.displayPluginOptions);
303
- }
390
+ this.displayPlugin = createDisplayPlugin(this.options.displayPlugin, this.el, this.containerEl, this.options.displayPluginOptions, this._cancel);
391
+ if (this.endDateEl) this.displayPlugin?.triggers.push(this.endDateEl);
392
+ for (const input of [this.el, this.endDateEl]) this._rememberResetDate(input);
393
+ }
394
+ // Only a default the picker wrote needs this: any other default text parses
395
+ // at reset exactly as it did here.
396
+ _rememberResetDate(input) {
397
+ const written = input && this._writtenInputs.get(input);
398
+ if (written && written.value === input.defaultValue) this._resetDates.set(input, written);
304
399
  }
305
400
  static get defaults() {
306
401
  return _defaults;
307
402
  }
308
- /**
309
- * Initializes instances of Datepicker.
310
- * @param els HTML elements.
311
- * @param options Component options.
312
- */
313
- static init(els, options = {}) {
314
- return super.init(els, options, _Datepicker);
315
- }
316
403
  /**
317
404
  * Escape a value for interpolation into the calendar markup.
318
405
  *
@@ -328,65 +415,56 @@ var _Datepicker = class _Datepicker extends Component {
328
415
  static _isDate(obj) {
329
416
  return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
330
417
  }
418
+ /**
419
+ * A value read without a custom parser: in the picker's own string format
420
+ * with its names, or else as an ISO date or by the browser.
421
+ */
422
+ _readDefault(value, el) {
423
+ const { format, i18n } = this.options;
424
+ const read = typeof format === "string" && el.type !== "date" ? readDate(value, format, i18n) : null;
425
+ return read ?? _Datepicker._parseDate(value);
426
+ }
331
427
  static _parseDate(value) {
332
428
  value = value.trim();
333
429
  if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) return new Date(Date.parse(value));
334
430
  const date = /* @__PURE__ */ new Date(value + "T00:00:00");
335
431
  return date.getDate() === Number(value.slice(-2)) ? date : /* @__PURE__ */ new Date(NaN);
336
432
  }
337
- _parseInput(value) {
338
- if (!value.trim() || !this.options.parse) return _Datepicker._parseDate(value);
433
+ _parseInput(value, el = this.el) {
434
+ if (!value.trim() || !this.options.parse) return this._readDefault(value, el);
339
435
  return this.options.parse(
340
436
  value,
341
437
  typeof this.options.format === "string" ? this.options.format : ""
342
438
  );
343
439
  }
344
- static _isWeekend(date) {
345
- const day = date.getDay();
346
- return day === 0 || day === 6;
347
- }
348
440
  /**
349
441
  * @deprecated as this function has no effect without any return statement or global parameter setter.
350
442
  */
351
443
  static _setToStartOfDay(date) {
352
444
  if (_Datepicker._isDate(date)) date.setHours(0, 0, 0, 0);
353
445
  }
354
- static _getDaysInMonth(year, month) {
355
- return [31, _Datepicker._isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
356
- }
357
- static _isLeapYear(year) {
358
- return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
359
- }
360
446
  static _compareDates(a, b) {
361
447
  return a.getTime() === b.getTime();
362
448
  }
363
- static _compareWithinRange(day, date, dateEnd) {
364
- return day.getTime() > date.getTime() && day.getTime() < dateEnd.getTime();
365
- }
366
- static _comparePastDate(a, b) {
367
- return a.getTime() < b.getTime();
368
- }
369
- static getInstance(el) {
370
- return el["Expressive_Datepicker"];
371
- }
372
449
  destroy() {
373
- this._removeEventHandlers();
450
+ this._events.abort();
451
+ clearTimeout(this._resetTimer);
374
452
  this.dateEls?.slice(1).forEach((input) => this._removeDateInput(input));
375
453
  if (!this.options.dateRangeEndEl && this.endDateEl) this._removeDateInput(this.endDateEl);
376
454
  this.displayPlugin?.destroy();
377
455
  this.containerEl.remove();
378
456
  this.destroySelects();
379
- this.el["Expressive_Datepicker"] = void 0;
457
+ this._removeDateOverlay();
458
+ super.destroy();
459
+ }
460
+ // CSS paints data-date over a native date input's own text.
461
+ _removeDateOverlay() {
462
+ this.el.classList.remove("datepicker-date-input");
463
+ for (const input of [this.el, this.endDateEl]) if (input?.type === "date") input.removeAttribute("data-date");
380
464
  }
381
465
  destroySelects() {
382
- const oldYearSelect = this.calendarEl.querySelector(".orig-select-year");
383
- if (oldYearSelect) {
384
- FormSelect.getInstance(oldYearSelect).destroy();
385
- }
386
- const oldMonthSelect = this.calendarEl.querySelector(".orig-select-month");
387
- if (oldMonthSelect) {
388
- FormSelect.getInstance(oldMonthSelect).destroy();
389
- }
466
+ this._formSelect(".orig-select-year")?.destroy();
467
+ this._formSelect(".orig-select-month")?.destroy();
390
468
  }
391
469
  _insertHTMLIntoDOM() {
392
470
  if (this.el.type == "date") {
@@ -407,10 +485,7 @@ var _Datepicker = class _Datepicker extends Component {
407
485
  }
408
486
  }
409
487
  }
410
- Utils.createButton(this.footer, this.options.i18n.clear, ["datepicker-clear"], this.options.showClearBtn, this._handleClearClick);
411
- if (!this.options.autoSubmit) {
412
- Utils.createConfirmationContainer(this.footer, this.options.i18n.done, this.options.i18n.cancel, this._confirm, this._cancel);
413
- }
488
+ pickerFooter(this.footer, this.options, "datepicker-clear", this._handleClearClick, this._confirm, this._cancel);
414
489
  if (this.options.container) {
415
490
  const optEl = this.options.container;
416
491
  this.options.container = optEl instanceof HTMLElement ? optEl : document.querySelector(optEl);
@@ -444,30 +519,40 @@ var _Datepicker = class _Datepicker extends Component {
444
519
  */
445
520
  formatDate(date, format) {
446
521
  const formatArray = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);
447
- return formatArray.map((label) => this.formats[label] ? this.formats[label](date) : label).join("");
522
+ return formatArray.map((label) => FORMATS[label] ? FORMATS[label](date, this.options.i18n) : label).join("");
448
523
  }
449
524
  /**
450
525
  * Sets date from input field.
451
526
  */
452
527
  setDateFromInput(el) {
453
- if (el.type === "date") this.setDataDate(el, _Datepicker._parseDate(el.value));
528
+ this._syncDataDate(el);
454
529
  if ((this.options.isDateRange || !this.options.isMultipleSelection) && !el.value.trim()) {
455
530
  this.setSingleDate(null, el === this.endDateEl);
456
531
  this.draw();
457
532
  return;
458
533
  }
459
- const written = !this.options.parse && this._writtenInputs.get(el);
460
- const parsedDate = written && written.value === el.value ? written.date : this._parseInput(el.value);
534
+ const parsedDate = this._dateInInput(el);
461
535
  if (!_Datepicker._isDate(parsedDate)) return;
462
536
  const date = new Date(parsedDate.getTime());
463
537
  _Datepicker._setToStartOfDay(date);
464
538
  const isEndDate = el === this.endDateEl;
465
- if (this.options.isDateRange && (isEndDate ? this.date && date < this.date : this.endDate && date > this.endDate)) {
466
- this.setInputValue(el, isEndDate ? this.endDate : this.date);
539
+ const outOfOrder = this.options.isDateRange && (isEndDate ? this.date && date < this.date : this.endDate && date > this.endDate);
540
+ if (outOfOrder || this._isDisabledDay(date)) {
541
+ this.setInputValue(el, this._selectedDateFor(el));
467
542
  return;
468
543
  }
544
+ this._selectTypedMultiDate(el, date);
469
545
  this.setDate(date, false, isEndDate, true);
470
546
  }
547
+ // setDate does not toggle a typed date into a multiple selection, so it goes
548
+ // in here, in place of the date its input showed. Re-reading an input on
549
+ // click leaves the selection as it was.
550
+ _selectTypedMultiDate(el, date) {
551
+ if (!this.options.isMultipleSelection) return;
552
+ const shown = this._selectedDateFor(el);
553
+ this.dates = this.dates.filter((day) => day !== shown && day.getTime() !== date.getTime());
554
+ this.setMultiDate(date);
555
+ }
471
556
  /**
472
557
  * Set a date on the datepicker.
473
558
  * @param date Date to set on the datepicker.
@@ -481,12 +566,12 @@ var _Datepicker = class _Datepicker extends Component {
481
566
  return;
482
567
  }
483
568
  _Datepicker._setToStartOfDay(selectedDate);
569
+ const selection = ++this._selection;
484
570
  if (!this.options.isMultipleSelection) this.setSingleDate(selectedDate, isEndDate);
485
571
  else if (!fromUserInput) this.setMultiDate(selectedDate);
486
572
  this.gotoDate(selectedDate);
487
- if (!preventOnSelect && typeof this.options.onSelect === "function") {
488
- this.options.onSelect.call(this, selectedDate);
489
- }
573
+ if (preventOnSelect) return;
574
+ this._notify("select", this.options.onSelect, { args: [selectedDate], detail: { date: selectedDate }, current: () => selection === this._selection });
490
575
  }
491
576
  validateDate(date) {
492
577
  if (!date) {
@@ -507,6 +592,38 @@ var _Datepicker = class _Datepicker extends Component {
507
592
  }
508
593
  return new Date(date.getTime());
509
594
  }
595
+ /**
596
+ * The date an input holds. Without a custom parser, Date.parse reads
597
+ * "05/10/2026" from a dd/mm/yyyy format as 10 May, so reuse the date behind
598
+ * a value the picker wrote, or behind the value the input resets to.
599
+ */
600
+ _dateInInput(el) {
601
+ const known = !this.options.parse && [this._writtenInputs.get(el), this._resetDates.get(el)].find((entry) => entry?.value === el.value);
602
+ return known ? known.date : this._parseInput(el.value, el);
603
+ }
604
+ /** The selected date an input shows: its place in `dates` for a multiple selection. */
605
+ _selectedDateFor(el) {
606
+ if (this.options.isMultipleSelection) return this.dates[this.dateEls.indexOf(el)] ?? null;
607
+ return el === this.endDateEl ? this.endDate : this.date;
608
+ }
609
+ /** `_isDisabledDay` for a date that may carry a time of day. */
610
+ _isSelectableDay(date) {
611
+ const day = new Date(date.getTime());
612
+ _Datepicker._setToStartOfDay(day);
613
+ return !this._isDisabledDay(day);
614
+ }
615
+ /** Whether the calendar shows `day` as disabled: outside the bounds, or refused by an option. */
616
+ _isDisabledDay(day) {
617
+ return this._isOutOfBounds(day) || this._isRefusedDay(day);
618
+ }
619
+ _isOutOfBounds(day) {
620
+ const { minDate, maxDate } = this.options;
621
+ return minDate && day < minDate || maxDate && day > maxDate;
622
+ }
623
+ _isRefusedDay(day) {
624
+ const { disableWeekends, disableDayFn } = this.options;
625
+ return disableWeekends && [0, 6].includes(day.getDay()) || !!disableDayFn?.(day);
626
+ }
510
627
  /**
511
628
  * Set a single date on the datepicker.
512
629
  * @param date Date to set on the datepicker.
@@ -530,7 +647,7 @@ var _Datepicker = class _Datepicker extends Component {
530
647
  } else {
531
648
  this.dates.splice(index, 1);
532
649
  }
533
- this.dates.sort((a, b) => a.getTime() < b.getTime() ? -1 : 0);
650
+ this.dates.sort((a, b) => a.getTime() - b.getTime());
534
651
  }
535
652
  /**
536
653
  * Sets the data-date attribute on the date input field
@@ -645,7 +762,7 @@ var _Datepicker = class _Datepicker extends Component {
645
762
  this.adjustCalendars();
646
763
  }
647
764
  render(year, month, randId) {
648
- const now = /* @__PURE__ */ new Date(), days = _Datepicker._getDaysInMonth(year, month), data = [];
765
+ const now = /* @__PURE__ */ new Date(), days = new Date(year, month + 1, 0).getDate(), data = [];
649
766
  let before = new Date(year, month, 1).getDay(), row = [];
650
767
  _Datepicker._setToStartOfDay(now);
651
768
  if (this.options.firstDay > 0) {
@@ -654,10 +771,10 @@ var _Datepicker = class _Datepicker extends Component {
654
771
  before += 7;
655
772
  }
656
773
  }
657
- const previousMonth = month === 0 ? 11 : month - 1, nextMonth = month === 11 ? 0 : month + 1, yearOfPreviousMonth = month === 0 ? year - 1 : year, yearOfNextMonth = month === 11 ? year + 1 : year, daysInPreviousMonth = _Datepicker._getDaysInMonth(yearOfPreviousMonth, previousMonth);
774
+ const previousMonth = month === 0 ? 11 : month - 1, nextMonth = month === 11 ? 0 : month + 1, yearOfPreviousMonth = month === 0 ? year - 1 : year, yearOfNextMonth = month === 11 ? year + 1 : year, daysInPreviousMonth = new Date(year, month, 0).getDate();
658
775
  const cells = Math.ceil((days + before) / 7) * 7;
659
776
  for (let i = 0, r = 0; i < cells; i++) {
660
- const day = new Date(year, month, 1 + (i - before)), isToday = _Datepicker._compareDates(day, now), hasEvent = this.options.events.indexOf(day.toDateString()) !== -1, isEmpty = i < before || i >= days + before, isStartRange = this.options.startRange && _Datepicker._compareDates(this.options.startRange, day), isEndRange = this.options.endRange && _Datepicker._compareDates(this.options.endRange, day), isInRange = this.options.startRange && this.options.endRange && this.options.startRange < day && day < this.options.endRange, isDisabled = this.options.minDate && day < this.options.minDate || this.options.maxDate && day > this.options.maxDate || this.options.disableWeekends && _Datepicker._isWeekend(day) || this.options.disableDayFn && this.options.disableDayFn(day), isDateRangeStart = this.options.isDateRange && this.date && this.endDate && _Datepicker._compareDates(this.date, day), isDateRangeEnd = this.options.isDateRange && this.endDate && _Datepicker._compareDates(this.endDate, day), isDateRange = this.options.isDateRange && _Datepicker._isDate(this.date) && _Datepicker._isDate(this.endDate) && _Datepicker._compareWithinRange(day, this.date, this.endDate);
777
+ const day = new Date(year, month, 1 + (i - before)), isToday = _Datepicker._compareDates(day, now), hasEvent = this.options.events.indexOf(day.toDateString()) !== -1, isEmpty = i < before || i >= days + before, isDisabled = this._isDisabledDay(day), isDateRangeStart = this.options.isDateRange && this.date && this.endDate && _Datepicker._compareDates(this.date, day), isDateRangeEnd = this.options.isDateRange && this.endDate && _Datepicker._compareDates(this.endDate, day), isDateRange = this.options.isDateRange && [this.date, this.endDate].every(_Datepicker._isDate) && day > this.date && day < this.endDate;
661
778
  let dayNumber = 1 + (i - before), monthNumber = month, yearNumber = year;
662
779
  let isSelected = false;
663
780
  if (_Datepicker._isDate(this.date)) {
@@ -689,9 +806,6 @@ var _Datepicker = class _Datepicker extends Component {
689
806
  isToday,
690
807
  isDisabled,
691
808
  isEmpty,
692
- isStartRange,
693
- isEndRange,
694
- isInRange,
695
809
  showDaysInNextAndPreviousMonths: this.options.showDaysInNextAndPreviousMonths,
696
810
  isDateRangeStart,
697
811
  isDateRangeEnd,
@@ -712,9 +826,6 @@ var _Datepicker = class _Datepicker extends Component {
712
826
  isToday: "is-today",
713
827
  isSelected: "is-selected",
714
828
  hasEvent: "has-event",
715
- isInRange: "is-inrange",
716
- isStartRange: "is-startrange",
717
- isEndRange: "is-endrange",
718
829
  isDateRangeStart: "is-daterange-start",
719
830
  isDateRangeEnd: "is-daterange-end",
720
831
  isDateRange: "is-daterange"
@@ -740,7 +851,6 @@ var _Datepicker = class _Datepicker extends Component {
740
851
  /** Assemble calendar cells; reject unsupported elements and attributes. */
741
852
  renderRow(days, isRTL, isRowSelected) {
742
853
  const row = '<tr class="datepicker-row' + (isRowSelected ? " is-selected" : "") + '">' + _Datepicker._calendarMarkup((isRTL ? days.reverse() : days).join(""), "tr") + "</tr>";
743
- this._checkedRows.add(row);
744
854
  return row;
745
855
  }
746
856
  /** Assemble calendar rows; reject unsupported elements and attributes. */
@@ -761,7 +871,6 @@ var _Datepicker = class _Datepicker extends Component {
761
871
  renderBody(rows) {
762
872
  const html = rows.join("");
763
873
  const safeHtml = _Datepicker._calendarMarkup(html, "tbody");
764
- this._checkedRows.clear();
765
874
  return "<tbody>" + safeHtml + "</tbody>";
766
875
  }
767
876
  static _calendarMarkup(html, parent) {
@@ -857,7 +966,7 @@ var _Datepicker = class _Datepicker extends Component {
857
966
  if (opts.yearRangeReverse) arr.reverse();
858
967
  const yearHtml = `<select class="datepicker-select orig-select-year" tabindex="-1">${arr.join("")}</select>`;
859
968
  const leftArrow = '<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"/><path d="M0-.5h24v24H0z" fill="none"/></svg>';
860
- html += `<button class="month-prev${prev ? "" : " is-disabled"}" type="button">${leftArrow}</button>`;
969
+ html += `<button class="month-prev${prev ? "" : " is-disabled"}" type="button" aria-label="${_Datepicker._escape(opts.i18n.previousMonth)}">${leftArrow}</button>`;
861
970
  html += '<div class="selects-container">';
862
971
  if (opts.showMonthAfterYear) {
863
972
  html += yearHtml + monthHtml;
@@ -866,7 +975,7 @@ var _Datepicker = class _Datepicker extends Component {
866
975
  }
867
976
  html += "</div>";
868
977
  const rightArrow = '<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"/><path d="M0-.25h24v24H0z" fill="none"/></svg>';
869
- html += `<button class="month-next${next ? "" : " is-disabled"}" type="button">${rightArrow}</button>`;
978
+ html += `<button class="month-next${next ? "" : " is-disabled"}" type="button" aria-label="${_Datepicker._escape(opts.i18n.nextMonth)}">${rightArrow}</button>`;
870
979
  return html += "</div>";
871
980
  }
872
981
  /**
@@ -906,6 +1015,7 @@ var _Datepicker = class _Datepicker extends Component {
906
1015
  const active = this.calendarEl.getRootNode().activeElement;
907
1016
  const restoreDayFocus = active?.matches(".datepicker-day-button") && this.calendarEl.contains(active);
908
1017
  const restoreArrow = this.calendarEl.contains(active) && active?.matches(".month-prev, .month-next") ? active.classList.contains("month-prev") ? ".month-prev" : ".month-next" : null;
1018
+ const restoreSelect = this._selectFocusRestorer(active);
909
1019
  const year = this.calendars[0].year;
910
1020
  const month = this.calendars[0].month;
911
1021
  this._renderDateDisplay(this.date, this.endDate);
@@ -920,10 +1030,27 @@ var _Datepicker = class _Datepicker extends Component {
920
1030
  this._renderCalendarTable(year, month);
921
1031
  this._syncCalendarFocus(!!restoreDayFocus);
922
1032
  if (restoreArrow) this.calendarEl.querySelector(restoreArrow)?.focus();
1033
+ restoreSelect();
923
1034
  if (typeof this.options.onDraw === "function") {
924
1035
  this.options.onDraw.call(this);
925
1036
  }
926
1037
  }
1038
+ _formSelect(selector) {
1039
+ const el = this.calendarEl.querySelector(selector);
1040
+ return el ? FormSelect.getInstance(el) : void 0;
1041
+ }
1042
+ /**
1043
+ * Picking a year rebuilds both selects under the focus, which is on the old
1044
+ * input or in its menu. The returned callback, run after the redraw, gives
1045
+ * focus to the matching new input if the old one went with the rebuild.
1046
+ */
1047
+ _selectFocusRestorer(active) {
1048
+ const holdsFocus = (select) => !!select && (select.input === active || !!select.menuEl?.contains(active));
1049
+ const selector = [".orig-select-year", ".orig-select-month"].find((s) => holdsFocus(this._formSelect(s)));
1050
+ return () => {
1051
+ if (selector && !active.isConnected) this._formSelect(selector)?.input.focus();
1052
+ };
1053
+ }
927
1054
  /** Tear down the two FormSelects and render the controls from scratch. */
928
1055
  _rebuildControls(year, month) {
929
1056
  this.destroySelects();
@@ -965,78 +1092,38 @@ var _Datepicker = class _Datepicker extends Component {
965
1092
  _setupEventHandlers() {
966
1093
  this._addInputEventHandlers(this.el);
967
1094
  if (this.endDateEl) this._addInputEventHandlers(this.endDateEl);
968
- this.calendarEl.addEventListener("click", this._handleCalendarClick);
969
- this.calendarEl.addEventListener("keydown", this._handleCalendarKeydown);
970
- this.calendarEl.addEventListener("focusin", this._handleCalendarFocus);
1095
+ this._form = this.el.form;
1096
+ const { signal } = this._events;
1097
+ this._form?.addEventListener("reset", this._handleFormReset, { signal });
1098
+ this.calendarEl.addEventListener("click", this._handleCalendarClick, { signal });
1099
+ this.calendarEl.addEventListener("keydown", this._handleCalendarKeydown, { signal });
1100
+ this.calendarEl.addEventListener("focusin", this._handleCalendarFocus, { signal });
971
1101
  }
972
1102
  _setupVariables() {
973
1103
  const template = document.createElement("template");
974
1104
  template.innerHTML = _Datepicker._template.trim();
975
1105
  this.containerEl = template.content.firstChild;
976
1106
  this.calendarEl = this.containerEl.querySelector(".datepicker-calendar");
977
- this.yearTextEl = this.containerEl.querySelector(".year-text");
978
1107
  this.dateTextEl = this.containerEl.querySelector(".date-text");
979
1108
  this.footer = this.containerEl.querySelector(".datepicker-footer");
980
- this.formats = {
981
- d: (date) => {
982
- return date.getDate();
983
- },
984
- dd: (date) => {
985
- const d = date.getDate();
986
- return (d < 10 ? "0" : "") + d;
987
- },
988
- ddd: (date) => {
989
- return this.options.i18n.weekdaysShort[date.getDay()];
990
- },
991
- dddd: (date) => {
992
- return this.options.i18n.weekdays[date.getDay()];
993
- },
994
- m: (date) => {
995
- return date.getMonth() + 1;
996
- },
997
- mm: (date) => {
998
- const m = date.getMonth() + 1;
999
- return (m < 10 ? "0" : "") + m;
1000
- },
1001
- mmm: (date) => {
1002
- return this.options.i18n.monthsShort[date.getMonth()];
1003
- },
1004
- mmmm: (date) => {
1005
- return this.options.i18n.months[date.getMonth()];
1006
- },
1007
- yy: (date) => {
1008
- return ("" + date.getFullYear()).slice(2);
1009
- },
1010
- yyyy: (date) => {
1011
- return date.getFullYear();
1012
- }
1013
- };
1014
- }
1015
- _removeEventHandlers() {
1016
- for (const input of this.dateEls ?? [this.el]) this._removeInputEventHandlers(input);
1017
- this.calendarEl.removeEventListener("click", this._handleCalendarClick);
1018
- this.calendarEl.removeEventListener("keydown", this._handleCalendarKeydown);
1019
- this.calendarEl.removeEventListener("focusin", this._handleCalendarFocus);
1020
- if (this.options.isDateRange && this.endDateEl) {
1021
- this._removeInputEventHandlers(this.endDateEl);
1022
- }
1023
1109
  }
1110
+ /** A date input's listeners. An input the picker removes keeps them, but no event reaches it then. */
1024
1111
  _addInputEventHandlers(input) {
1025
- input.addEventListener("click", this._handleInputClick);
1026
- input.addEventListener("keydown", this._handleInputKeydown);
1027
- input.addEventListener("change", this._handleInputChange);
1028
- }
1029
- _removeInputEventHandlers(input) {
1030
- input.removeEventListener("click", this._handleInputClick);
1031
- input.removeEventListener("keydown", this._handleInputKeydown);
1032
- input.removeEventListener("change", this._handleInputChange);
1112
+ const { signal } = this._events;
1113
+ input.addEventListener("click", this._handleInputClick, { signal });
1114
+ input.addEventListener("keydown", this._handleInputKeydown, { signal });
1115
+ input.addEventListener("change", this._handleInputChange, { signal });
1033
1116
  }
1034
1117
  _removeDateInput(input) {
1035
1118
  const focused = input.getRootNode().activeElement === input;
1036
- this._removeInputEventHandlers(input);
1037
1119
  input.remove();
1038
1120
  if (focused && document.activeElement === document.body) this.el.focus();
1039
1121
  }
1122
+ /** Shows a docked or modal calendar. A modal takes focus from the input, so the selected day gets it. */
1123
+ _showDisplay() {
1124
+ this.displayPlugin?.show();
1125
+ if (this.displayPlugin instanceof ModalDisplayPlugin) this._syncCalendarFocus(true);
1126
+ }
1040
1127
  _dayDate(button) {
1041
1128
  const date = /* @__PURE__ */ new Date(0);
1042
1129
  date.setFullYear(Number(button.dataset.year), Number(button.dataset.month), Number(button.dataset.day));
@@ -1046,7 +1133,7 @@ var _Datepicker = class _Datepicker extends Component {
1046
1133
  _syncCalendarFocus(restore = false) {
1047
1134
  const buttons = [...this.calendarEl.querySelectorAll(".datepicker-day-button")];
1048
1135
  const current = buttons.filter((button) => !button.parentElement.classList.contains("is-selection-disabled"));
1049
- const preferred = this._focusedDate || this.date || /* @__PURE__ */ new Date();
1136
+ const preferred = this._focusedDate || this.date || new Date((/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0));
1050
1137
  const target = current.find((button) => _Datepicker._compareDates(this._dayDate(button), preferred)) || current.find((button) => button.parentElement.classList.contains("is-selected")) || current.find((button) => !button.parentElement.classList.contains("is-disabled")) || current[0];
1051
1138
  for (const button of buttons) {
1052
1139
  button.tabIndex = button === target ? 0 : -1;
@@ -1071,6 +1158,22 @@ var _Datepicker = class _Datepicker extends Component {
1071
1158
  this.adjustCalendars();
1072
1159
  }
1073
1160
  }
1161
+ _readBackMultiple() {
1162
+ for (const input of this.dateEls.splice(1)) this._removeDateInput(input);
1163
+ this.dates = [];
1164
+ this._syncDataDate(this.el);
1165
+ const date = this._dateInInput(this.el);
1166
+ if (_Datepicker._isDate(date) && this._isSelectableDay(date)) this.setDate(date, true);
1167
+ }
1168
+ /** A native date input's overlay text follows its value, including an empty one. */
1169
+ _syncDataDate(el) {
1170
+ if (el.type === "date") this.setDataDate(el, _Datepicker._parseDate(el.value));
1171
+ }
1172
+ _readBackSingle() {
1173
+ this.setSingleDate(null, false);
1174
+ this.setSingleDate(null, true);
1175
+ for (const input of [this.el, this.endDateEl]) if (input) this.setDateFromInput(input);
1176
+ }
1074
1177
  renderDayName(opts, day, abbr = false) {
1075
1178
  day += opts.firstDay;
1076
1179
  while (day >= 7) {
@@ -1087,10 +1190,10 @@ var _Datepicker = class _Datepicker extends Component {
1087
1190
  return dateInput;
1088
1191
  }
1089
1192
  };
1193
+ _Datepicker.key = "Expressive_Datepicker";
1090
1194
  _Datepicker._template = `
1091
1195
  <div class="datepicker-container">
1092
1196
  <div class="datepicker-date-display">
1093
- <span class="year-text"></span>
1094
1197
  <span class="date-text"></span>
1095
1198
  </div>
1096
1199
  <div class="datepicker-calendar-container">
@@ -1101,6 +1204,7 @@ _Datepicker._template = `
1101
1204
  var Datepicker = _Datepicker;
1102
1205
 
1103
1206
  export {
1207
+ readDate,
1104
1208
  Datepicker
1105
1209
  };
1106
- //# sourceMappingURL=chunk-GJL6GCIU.mjs.map
1210
+ //# sourceMappingURL=chunk-QXKWVHBD.mjs.map