@expressivecss/expressive 0.14.1 → 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 (603) hide show
  1. package/CHANGELOG.md +1589 -1
  2. package/README.md +9 -8
  3. package/dist/css/expressive.css +19304 -12021
  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-A7ALMYUR.mjs → chunk-4QUCNFSD.mjs} +68 -125
  76. package/dist/js/chunks/chunk-4QUCNFSD.mjs.map +7 -0
  77. package/dist/js/chunks/{chunk-4TKTLGEM.mjs → chunk-4TRZ2AER.mjs} +35 -41
  78. package/dist/js/chunks/chunk-4TRZ2AER.mjs.map +7 -0
  79. package/dist/js/chunks/{chunk-BG6ZRB5H.mjs → chunk-5KIHWJI2.mjs} +40 -26
  80. package/dist/js/chunks/chunk-5KIHWJI2.mjs.map +7 -0
  81. package/dist/js/chunks/{chunk-YDCS5S3J.mjs → chunk-67ZPPKXS.mjs} +20 -33
  82. package/dist/js/chunks/chunk-67ZPPKXS.mjs.map +7 -0
  83. package/dist/js/chunks/{chunk-3DHK5CZU.mjs → chunk-6FSEUFVW.mjs} +40 -29
  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-GVGT6MIU.mjs → chunk-75E5EDJF.mjs} +3 -11
  88. package/dist/js/chunks/chunk-75E5EDJF.mjs.map +7 -0
  89. package/dist/js/chunks/{chunk-TBM3FT7G.mjs → chunk-7NLUI3RR.mjs} +148 -78
  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-NS2UMNZV.mjs → chunk-ANKFWNWT.mjs} +21 -45
  100. package/dist/js/chunks/chunk-ANKFWNWT.mjs.map +7 -0
  101. package/dist/js/chunks/{chunk-GIW4K4SE.mjs → chunk-B7DQFHA5.mjs} +37 -53
  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-GUB3TNO2.mjs → chunk-BPF3I2MN.mjs} +109 -27
  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-JIDMQGK6.mjs → chunk-CSYWKEK3.mjs} +322 -223
  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-QDAL4IYN.mjs → chunk-EC26RU2D.mjs} +11 -29
  116. package/dist/js/chunks/chunk-EC26RU2D.mjs.map +7 -0
  117. package/dist/js/chunks/{chunk-3GVFZ4XO.mjs → chunk-EVCVFEV3.mjs} +238 -152
  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-ZAS25YFD.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-KHV6DZXX.mjs → chunk-KZPSAXIU.mjs} +156 -46
  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-Z2NRKI7R.mjs → chunk-OP43LLIC.mjs} +44 -73
  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-PM655FXL.mjs → chunk-OYNUDOHR.mjs} +20 -48
  153. package/dist/js/chunks/chunk-OYNUDOHR.mjs.map +7 -0
  154. package/dist/js/chunks/{chunk-UEZUJQ66.mjs → chunk-P6DRQ6KS.mjs} +36 -31
  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-5HQSGDZ5.mjs → chunk-QXKWVHBD.mjs} +286 -203
  161. package/dist/js/chunks/chunk-QXKWVHBD.mjs.map +7 -0
  162. package/dist/js/chunks/{chunk-DAIU5SLG.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-FS7XY3HT.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-4HZMB7LI.mjs → chunk-VGY4M57S.mjs} +281 -135
  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-S3XDFGSZ.mjs → chunk-VMY55K2X.mjs} +92 -141
  185. package/dist/js/chunks/chunk-VMY55K2X.mjs.map +7 -0
  186. package/dist/js/chunks/{chunk-UEXCIMJZ.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-MZ6Z24BX.mjs → chunk-ZJNLAGY5.mjs} +19 -34
  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 +10333 -4070
  213. package/dist/js/expressive.cjs.map +4 -4
  214. package/dist/js/expressive.js +10333 -4070
  215. package/dist/js/expressive.js.map +4 -4
  216. package/dist/js/expressive.min.js +23 -25
  217. package/dist/js/expressive.min.js.map +4 -4
  218. package/dist/js/expressive.mjs +184 -69
  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 +133 -64
  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 +9 -0
  274. package/dist/js/internal/components/keypad.mjs.map +7 -0
  275. package/dist/js/internal/components/lightbox.mjs +3 -3
  276. package/dist/js/internal/components/lineChart.mjs +29 -4
  277. package/dist/js/internal/components/loadingOverlay.mjs +9 -0
  278. package/dist/js/internal/components/loadingOverlay.mjs.map +7 -0
  279. package/dist/js/internal/components/mapView.mjs +3 -3
  280. package/dist/js/internal/components/menu.mjs +3 -3
  281. package/dist/js/internal/components/menubar.mjs +10 -0
  282. package/dist/js/internal/components/menubar.mjs.map +7 -0
  283. package/dist/js/internal/components/messageScroller.mjs +3 -3
  284. package/dist/js/internal/components/mixedChart.mjs +5 -4
  285. package/dist/js/internal/components/navigationRail.mjs +3 -2
  286. package/dist/js/internal/components/particles.mjs +3 -2
  287. package/dist/js/internal/components/pieChart.mjs +4 -3
  288. package/dist/js/internal/components/pullToRefresh.mjs +9 -0
  289. package/dist/js/internal/components/pullToRefresh.mjs.map +7 -0
  290. package/dist/js/internal/components/questionnaire.mjs +3 -3
  291. package/dist/js/internal/components/radarChart.mjs +4 -3
  292. package/dist/js/internal/components/radialChart.mjs +4 -3
  293. package/dist/js/internal/components/registry.mjs +59 -40
  294. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  295. package/dist/js/internal/components/sankeyChart.mjs +10 -0
  296. package/dist/js/internal/components/sankeyChart.mjs.map +7 -0
  297. package/dist/js/internal/components/scatterChart.mjs +10 -0
  298. package/dist/js/internal/components/scatterChart.mjs.map +7 -0
  299. package/dist/js/internal/components/scrollspy.mjs +3 -2
  300. package/dist/js/internal/components/select.mjs +4 -4
  301. package/dist/js/internal/components/showMore.mjs +9 -0
  302. package/dist/js/internal/components/showMore.mjs.map +7 -0
  303. package/dist/js/internal/components/slider.mjs +3 -3
  304. package/dist/js/internal/components/snackbar.mjs +2 -2
  305. package/dist/js/internal/components/swipeActions.mjs +9 -0
  306. package/dist/js/internal/components/swipeActions.mjs.map +7 -0
  307. package/dist/js/internal/components/tabs.mjs +3 -4
  308. package/dist/js/internal/components/timepicker.mjs +5 -4
  309. package/dist/js/internal/components/tooltip.mjs +3 -3
  310. package/dist/js/internal/components/treeSelect.mjs +13 -0
  311. package/dist/js/internal/components/treeSelect.mjs.map +7 -0
  312. package/dist/js/internal/components/treemapChart.mjs +10 -0
  313. package/dist/js/internal/components/treemapChart.mjs.map +7 -0
  314. package/dist/js/internal/core/component.mjs +2 -1
  315. package/dist/js/internal/core/formControl.mjs +12 -0
  316. package/dist/js/internal/core/formControl.mjs.map +7 -0
  317. package/dist/js/internal/core/spring.mjs +11 -0
  318. package/dist/js/internal/core/spring.mjs.map +7 -0
  319. package/dist/js/internal/core/utils.mjs +11 -3
  320. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  321. package/dist/js/internal/plugins/modalDisplayPlugin.mjs +13 -0
  322. package/dist/js/internal/plugins/modalDisplayPlugin.mjs.map +7 -0
  323. package/dist/js/modular.mjs +175 -69
  324. package/dist/types/behaviors/bottomSheets.d.ts +19 -3
  325. package/dist/types/behaviors/copy.d.ts +18 -0
  326. package/dist/types/behaviors/dataTables.d.ts +129 -0
  327. package/dist/types/behaviors/dialogs.d.ts +27 -1
  328. package/dist/types/behaviors/forms.d.ts +68 -2
  329. package/dist/types/behaviors/imageCompare.d.ts +12 -0
  330. package/dist/types/behaviors/lists.d.ts +12 -0
  331. package/dist/types/behaviors/paneResize.d.ts +29 -0
  332. package/dist/types/behaviors/sheetDrag.d.ts +18 -0
  333. package/dist/types/behaviors/sideSheets.d.ts +1 -1
  334. package/dist/types/behaviors/sortable.d.ts +28 -0
  335. package/dist/types/behaviors/theme.d.ts +22 -0
  336. package/dist/types/behaviors/tour.d.ts +36 -0
  337. package/dist/types/behaviors/transferList.d.ts +51 -0
  338. package/dist/types/components/appBar.d.ts +5 -6
  339. package/dist/types/components/autocomplete.d.ts +92 -17
  340. package/dist/types/components/backToTop.d.ts +36 -0
  341. package/dist/types/components/barChart.d.ts +3 -6
  342. package/dist/types/components/buttonGroup.d.ts +2 -4
  343. package/dist/types/components/buttons.d.ts +5 -5
  344. package/dist/types/components/cards.d.ts +3 -16
  345. package/dist/types/components/carousel.d.ts +9 -15
  346. package/dist/types/components/cascader.d.ts +130 -0
  347. package/dist/types/components/characterCounter.d.ts +2 -15
  348. package/dist/types/components/chips.d.ts +65 -19
  349. package/dist/types/components/colorPicker.d.ts +42 -0
  350. package/dist/types/components/columnChart.d.ts +23 -10
  351. package/dist/types/components/commandPalette.d.ts +11 -16
  352. package/dist/types/components/confetti.d.ts +2 -4
  353. package/dist/types/components/currencyInput.d.ts +59 -0
  354. package/dist/types/components/datepicker.d.ts +59 -36
  355. package/dist/types/components/expandingCard.d.ts +6 -6
  356. package/dist/types/components/funnelChart.d.ts +38 -0
  357. package/dist/types/components/heatmapChart.d.ts +39 -8
  358. package/dist/types/components/hoverCard.d.ts +58 -0
  359. package/dist/types/components/index.d.ts +17 -1
  360. package/dist/types/components/inputMask.d.ts +30 -0
  361. package/dist/types/components/keypad.d.ts +66 -0
  362. package/dist/types/components/lightbox.d.ts +17 -25
  363. package/dist/types/components/lineChart.d.ts +176 -10
  364. package/dist/types/components/loadingOverlay.d.ts +42 -0
  365. package/dist/types/components/mapView.d.ts +26 -17
  366. package/dist/types/components/menu.d.ts +61 -22
  367. package/dist/types/components/menubar.d.ts +37 -0
  368. package/dist/types/components/messageScroller.d.ts +2 -14
  369. package/dist/types/components/mixedChart.d.ts +15 -6
  370. package/dist/types/components/navigationRail.d.ts +16 -5
  371. package/dist/types/components/particles.d.ts +8 -4
  372. package/dist/types/components/pieChart.d.ts +32 -7
  373. package/dist/types/components/pullToRefresh.d.ts +80 -0
  374. package/dist/types/components/questionnaire.d.ts +58 -16
  375. package/dist/types/components/radarChart.d.ts +10 -6
  376. package/dist/types/components/radialChart.d.ts +58 -8
  377. package/dist/types/components/registry.d.ts +77 -3
  378. package/dist/types/components/richTextEditor.d.ts +6 -14
  379. package/dist/types/components/sankeyChart.d.ts +72 -0
  380. package/dist/types/components/scatterChart.d.ts +102 -0
  381. package/dist/types/components/scrollspy.d.ts +3 -5
  382. package/dist/types/components/select.d.ts +43 -30
  383. package/dist/types/components/showMore.d.ts +51 -0
  384. package/dist/types/components/slider.d.ts +5 -15
  385. package/dist/types/components/snackbar.d.ts +62 -0
  386. package/dist/types/components/swipeActions.d.ts +81 -0
  387. package/dist/types/components/tabs.d.ts +93 -27
  388. package/dist/types/components/timepicker.d.ts +114 -20
  389. package/dist/types/components/tooltip.d.ts +56 -20
  390. package/dist/types/components/treeSelect.d.ts +106 -0
  391. package/dist/types/components/treemapChart.d.ts +56 -0
  392. package/dist/types/core/component.d.ts +43 -25
  393. package/dist/types/core/formControl.d.ts +21 -0
  394. package/dist/types/core/spring.d.ts +20 -0
  395. package/dist/types/core/utils.d.ts +85 -72
  396. package/dist/types/modular.d.ts +33 -1
  397. package/dist/types/plugins/dockedDisplayPlugin.d.ts +10 -7
  398. package/dist/types/plugins/modalDisplayPlugin.d.ts +32 -0
  399. package/package.json +10 -8
  400. package/src/sass/README.md +27 -18
  401. package/src/sass/abstracts/_breakpoints.scss +0 -1
  402. package/src/sass/abstracts/_elevation.scss +13 -7
  403. package/src/sass/abstracts/_index.scss +1 -0
  404. package/src/sass/abstracts/_mixins.scss +438 -92
  405. package/src/sass/abstracts/_spring.scss +63 -0
  406. package/src/sass/abstracts/_variables.scss +43 -15
  407. package/src/sass/base/_fonts.scss +61 -48
  408. package/src/sass/base/_global.scss +105 -34
  409. package/src/sass/base/_index.scss +3 -1
  410. package/src/sass/base/_normalize.scss +59 -114
  411. package/src/sass/base/_print.scss +21 -0
  412. package/src/sass/base/_prose.scss +68 -0
  413. package/src/sass/base/_typography.scss +9 -5
  414. package/src/sass/components/_accordion.scss +9 -16
  415. package/src/sass/components/_alert.scss +102 -0
  416. package/src/sass/components/_aura.scss +8 -3
  417. package/src/sass/components/_avatar.scss +3 -3
  418. package/src/sass/components/_back-to-top.scss +38 -0
  419. package/src/sass/components/_badges.scss +7 -13
  420. package/src/sass/components/_bar-chart.scss +41 -19
  421. package/src/sass/components/_bottom-sheet.scss +44 -16
  422. package/src/sass/components/_breadcrumb.scss +8 -1
  423. package/src/sass/components/_button-groups.scss +44 -89
  424. package/src/sass/components/_buttons.scss +156 -63
  425. package/src/sass/components/_calendar.scss +246 -0
  426. package/src/sass/components/_cards.scss +41 -68
  427. package/src/sass/components/_carousel.scss +43 -158
  428. package/src/sass/components/_cascader.scss +142 -0
  429. package/src/sass/components/_chips.scss +36 -52
  430. package/src/sass/components/_column-chart.scss +19 -12
  431. package/src/sass/components/_command-palette.scss +4 -7
  432. package/src/sass/components/_confetti.scss +0 -2
  433. package/src/sass/components/_countdown.scss +1 -1
  434. package/src/sass/components/_data-table.scss +162 -27
  435. package/src/sass/components/_datepicker.scss +57 -62
  436. package/src/sass/components/_description-list.scss +85 -0
  437. package/src/sass/components/_dialog.scss +42 -44
  438. package/src/sass/components/_docked-display.scss +1 -3
  439. package/src/sass/components/_drag-handle.scss +16 -20
  440. package/src/sass/components/_expanding-card.scss +20 -9
  441. package/src/sass/components/_fab-menu.scss +44 -32
  442. package/src/sass/components/_funnel-chart.scss +124 -0
  443. package/src/sass/components/_heatmap-chart.scss +113 -24
  444. package/src/sass/components/_icon-buttons.scss +7 -8
  445. package/src/sass/components/_icons-material-design.scss +2 -2
  446. package/src/sass/components/_image-compare.scss +108 -0
  447. package/src/sass/components/_index.scss +21 -0
  448. package/src/sass/components/_keypad.scss +182 -0
  449. package/src/sass/components/_kpi.scss +6 -11
  450. package/src/sass/components/_lightbox.scss +26 -20
  451. package/src/sass/components/_line-chart.scss +16 -2
  452. package/src/sass/components/_list.scss +59 -14
  453. package/src/sass/components/_loading-indicator.scss +1 -0
  454. package/src/sass/components/_loading-overlay.scss +105 -0
  455. package/src/sass/components/_map.scss +35 -13
  456. package/src/sass/components/_marquee.scss +3 -2
  457. package/src/sass/components/_mega-menu.scss +137 -0
  458. package/src/sass/components/_menu.scss +159 -182
  459. package/src/sass/components/_menubar.scss +59 -0
  460. package/src/sass/components/_message-scroller.scss +2 -2
  461. package/src/sass/components/_message.scss +3 -3
  462. package/src/sass/components/_mixed-chart.scss +37 -9
  463. package/src/sass/components/_modal-display.scss +21 -0
  464. package/src/sass/components/_navbar.scss +43 -65
  465. package/src/sass/components/_navigation-bar.scss +15 -77
  466. package/src/sass/components/_navigation-rail.scss +171 -121
  467. package/src/sass/components/_org-chart.scss +192 -0
  468. package/src/sass/components/_page-footer.scss +16 -13
  469. package/src/sass/components/_pagination.scss +6 -13
  470. package/src/sass/components/_panes.scss +33 -31
  471. package/src/sass/components/_particles.scss +0 -2
  472. package/src/sass/components/_pie-chart.scss +91 -11
  473. package/src/sass/components/_popover.scss +18 -5
  474. package/src/sass/components/_progress.scss +158 -35
  475. package/src/sass/components/_pull-to-refresh.scss +90 -0
  476. package/src/sass/components/_questionnaire.scss +74 -3
  477. package/src/sass/components/_radar-chart.scss +38 -10
  478. package/src/sass/components/_radial-chart.scss +113 -5
  479. package/src/sass/components/_rich-text-editor.scss +2 -2
  480. package/src/sass/components/_sankey-chart.scss +114 -0
  481. package/src/sass/components/_scatter-chart.scss +153 -0
  482. package/src/sass/components/_scrim.scss +0 -2
  483. package/src/sass/components/_scrollspy.scss +0 -2
  484. package/src/sass/components/_search.scss +26 -22
  485. package/src/sass/components/_show-more.scss +8 -0
  486. package/src/sass/components/_side-sheet.scss +23 -40
  487. package/src/sass/components/_skeleton.scss +2 -4
  488. package/src/sass/components/_snackbar.scss +27 -21
  489. package/src/sass/components/_split-button.scss +5 -5
  490. package/src/sass/components/_stat.scss +3 -8
  491. package/src/sass/components/_stepper.scss +1 -5
  492. package/src/sass/components/_swipe-actions.scss +71 -0
  493. package/src/sass/components/_tabs.scss +51 -32
  494. package/src/sass/components/_timeline.scss +12 -12
  495. package/src/sass/components/_timepicker.scss +111 -112
  496. package/src/sass/components/_toolbar.scss +35 -47
  497. package/src/sass/components/_tooltip.scss +21 -12
  498. package/src/sass/components/_tour.scss +89 -0
  499. package/src/sass/components/_transfer-list.scss +73 -0
  500. package/src/sass/components/_transitions.scss +4 -4
  501. package/src/sass/components/_tree.scss +3 -16
  502. package/src/sass/components/_treemap-chart.scss +122 -0
  503. package/src/sass/components/forms/_checkboxes.scss +140 -86
  504. package/src/sass/components/forms/_color-picker.scss +135 -0
  505. package/src/sass/components/forms/_color-swatches.scss +85 -0
  506. package/src/sass/components/forms/_drop-zone.scss +15 -9
  507. package/src/sass/components/forms/_fieldset.scss +10 -10
  508. package/src/sass/components/forms/_file-input.scss +6 -9
  509. package/src/sass/components/forms/_index.scss +3 -1
  510. package/src/sass/components/forms/_input-fields.scss +254 -90
  511. package/src/sass/components/forms/_radio-buttons.scss +40 -127
  512. package/src/sass/components/forms/_rating.scss +2 -32
  513. package/src/sass/components/forms/_select.scss +199 -23
  514. package/src/sass/components/forms/_slider.scss +140 -330
  515. package/src/sass/components/forms/_switches.scss +53 -164
  516. package/src/sass/custom.scss +10 -1
  517. package/src/sass/expressive.scss +3 -63
  518. package/src/sass/tokens/_contrast.scss +94 -0
  519. package/src/sass/tokens/_elevation.scss +16 -0
  520. package/src/sass/tokens/_index.scss +5 -0
  521. package/src/sass/tokens/_motion.scss +109 -0
  522. package/src/sass/tokens/_reference.scss +72 -141
  523. package/src/sass/tokens/_shape.scss +38 -0
  524. package/src/sass/tokens/_stacking.scss +27 -0
  525. package/src/sass/tokens/_state.scss +2 -4
  526. package/src/sass/tokens/_theme.scss +11 -2
  527. package/src/sass/tokens/_vibrant.scss +2 -5
  528. package/src/sass/utilities/_colors.scss +6 -1
  529. package/src/sass/utilities/_defer-render.scss +17 -0
  530. package/src/sass/utilities/_helpers.scss +183 -26
  531. package/src/sass/utilities/_index.scss +2 -1
  532. package/src/sass/utilities/_scroll-area.scss +0 -2
  533. package/src/sass/utilities/_spacing.scss +52 -34
  534. package/src/sass/utilities/_typescale.scss +8 -1
  535. package/src/sass/utilities/_visibility.scss +47 -76
  536. package/src/sass/utilities/_z-depth.scss +7 -4
  537. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +0 -7
  538. package/dist/js/chunks/chunk-3GVFZ4XO.mjs.map +0 -7
  539. package/dist/js/chunks/chunk-4HZMB7LI.mjs.map +0 -7
  540. package/dist/js/chunks/chunk-4KMNFIFZ.mjs +0 -270
  541. package/dist/js/chunks/chunk-4KMNFIFZ.mjs.map +0 -7
  542. package/dist/js/chunks/chunk-4TKTLGEM.mjs.map +0 -7
  543. package/dist/js/chunks/chunk-5BKHWHYY.mjs +0 -292
  544. package/dist/js/chunks/chunk-5BKHWHYY.mjs.map +0 -7
  545. package/dist/js/chunks/chunk-5HQSGDZ5.mjs.map +0 -7
  546. package/dist/js/chunks/chunk-6N2XAEFK.mjs +0 -125
  547. package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
  548. package/dist/js/chunks/chunk-A7ALMYUR.mjs.map +0 -7
  549. package/dist/js/chunks/chunk-BG6ZRB5H.mjs.map +0 -7
  550. package/dist/js/chunks/chunk-CUQPB25U.mjs +0 -55
  551. package/dist/js/chunks/chunk-CUQPB25U.mjs.map +0 -7
  552. package/dist/js/chunks/chunk-DAIU5SLG.mjs.map +0 -7
  553. package/dist/js/chunks/chunk-FS7XY3HT.mjs.map +0 -7
  554. package/dist/js/chunks/chunk-GIW4K4SE.mjs.map +0 -7
  555. package/dist/js/chunks/chunk-GUB3TNO2.mjs.map +0 -7
  556. package/dist/js/chunks/chunk-GVGT6MIU.mjs.map +0 -7
  557. package/dist/js/chunks/chunk-GZKEFWPM.mjs +0 -181
  558. package/dist/js/chunks/chunk-GZKEFWPM.mjs.map +0 -7
  559. package/dist/js/chunks/chunk-HKT2S7VM.mjs +0 -48
  560. package/dist/js/chunks/chunk-HKT2S7VM.mjs.map +0 -7
  561. package/dist/js/chunks/chunk-ILP3PDTL.mjs +0 -187
  562. package/dist/js/chunks/chunk-ILP3PDTL.mjs.map +0 -7
  563. package/dist/js/chunks/chunk-JIDMQGK6.mjs.map +0 -7
  564. package/dist/js/chunks/chunk-KBNN3QDH.mjs +0 -7
  565. package/dist/js/chunks/chunk-KBNN3QDH.mjs.map +0 -7
  566. package/dist/js/chunks/chunk-KHV6DZXX.mjs.map +0 -7
  567. package/dist/js/chunks/chunk-KY6U46SM.mjs +0 -345
  568. package/dist/js/chunks/chunk-KY6U46SM.mjs.map +0 -7
  569. package/dist/js/chunks/chunk-LRZMJZ3T.mjs +0 -291
  570. package/dist/js/chunks/chunk-LRZMJZ3T.mjs.map +0 -7
  571. package/dist/js/chunks/chunk-LTWPGFBR.mjs +0 -59
  572. package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
  573. package/dist/js/chunks/chunk-MNPROCZF.mjs +0 -328
  574. package/dist/js/chunks/chunk-MNPROCZF.mjs.map +0 -7
  575. package/dist/js/chunks/chunk-MZ6Z24BX.mjs.map +0 -7
  576. package/dist/js/chunks/chunk-NS2UMNZV.mjs.map +0 -7
  577. package/dist/js/chunks/chunk-O5XPWXIQ.mjs +0 -406
  578. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
  579. package/dist/js/chunks/chunk-PM655FXL.mjs.map +0 -7
  580. package/dist/js/chunks/chunk-QDAL4IYN.mjs.map +0 -7
  581. package/dist/js/chunks/chunk-QERLECVU.mjs +0 -572
  582. package/dist/js/chunks/chunk-QERLECVU.mjs.map +0 -7
  583. package/dist/js/chunks/chunk-QJABDLSD.mjs +0 -112
  584. package/dist/js/chunks/chunk-QJABDLSD.mjs.map +0 -7
  585. package/dist/js/chunks/chunk-RHRQKTTX.mjs +0 -139
  586. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
  587. package/dist/js/chunks/chunk-S3XDFGSZ.mjs.map +0 -7
  588. package/dist/js/chunks/chunk-SPETGK25.mjs +0 -59
  589. package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
  590. package/dist/js/chunks/chunk-TBM3FT7G.mjs.map +0 -7
  591. package/dist/js/chunks/chunk-UEXCIMJZ.mjs.map +0 -7
  592. package/dist/js/chunks/chunk-UEZUJQ66.mjs.map +0 -7
  593. package/dist/js/chunks/chunk-VGZSAFTX.mjs +0 -173
  594. package/dist/js/chunks/chunk-VGZSAFTX.mjs.map +0 -7
  595. package/dist/js/chunks/chunk-X7OCHZVF.mjs +0 -76
  596. package/dist/js/chunks/chunk-X7OCHZVF.mjs.map +0 -7
  597. package/dist/js/chunks/chunk-YDCS5S3J.mjs.map +0 -7
  598. package/dist/js/chunks/chunk-YMSXJON6.mjs +0 -79
  599. package/dist/js/chunks/chunk-YMSXJON6.mjs.map +0 -7
  600. package/dist/js/chunks/chunk-Z2NRKI7R.mjs.map +0 -7
  601. package/dist/js/chunks/chunk-ZAS25YFD.mjs.map +0 -7
  602. package/dist/js/chunks/chunk-ZKZKNSLC.mjs +0 -1
  603. /package/dist/js/chunks/{chunk-ZKZKNSLC.mjs.map → chunk-GNRSYMVH.mjs.map} +0 -0
@@ -1,17 +1,94 @@
1
1
  import {
2
- DockedDisplayPlugin
3
- } from "./chunk-YMSXJON6.mjs";
2
+ ModalDisplayPlugin,
3
+ createDisplayPlugin,
4
+ hideModal
5
+ } from "./chunk-OUCHKSAW.mjs";
4
6
  import {
5
7
  FormSelect
6
- } from "./chunk-3GVFZ4XO.mjs";
7
- import {
8
- Utils
9
- } from "./chunk-MNPROCZF.mjs";
8
+ } from "./chunk-EVCVFEV3.mjs";
10
9
  import {
11
10
  Component
12
- } from "./chunk-LTWPGFBR.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,10 +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
- /** Rows renderRow has already checked, so renderBody does not parse them again. */
120
- this._checkedRows = /* @__PURE__ */ new Set();
195
+ /** What setInputValue last wrote, so reading it back does not depend on the parser. */
196
+ this._writtenInputs = /* @__PURE__ */ new WeakMap();
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;
121
201
  /** Nesting depth of {@link _batchDraws}; > 0 means draws are being collected. */
122
202
  this._drawDepth = 0;
123
203
  /** Whether a draw was requested while batching. */
@@ -134,11 +214,11 @@ var _Datepicker = class _Datepicker extends Component {
134
214
  this.draw();
135
215
  this.gotoDate(e.target === this.el ? this.date : this.endDate);
136
216
  });
137
- if (this.displayPlugin) this.displayPlugin.show();
217
+ this._showDisplay();
138
218
  if (this.options.onInputInteraction) this.options.onInputInteraction.call(this);
139
219
  };
140
- this._handleInputKeydown = (e) => {
141
- if (e.key === Utils.keys.ENTER) {
220
+ this._handleInputKeydown = Utils.ignoringComposition((e) => {
221
+ if (e.key === "Enter") {
142
222
  e.preventDefault();
143
223
  this._batchDraws(() => {
144
224
  this.setDateFromInput(e.target);
@@ -149,7 +229,7 @@ var _Datepicker = class _Datepicker extends Component {
149
229
  this._syncCalendarFocus(true);
150
230
  if (this.options.onInputInteraction) this.options.onInputInteraction.call(this);
151
231
  }
152
- };
232
+ });
153
233
  this._handleCalendarFocus = (event) => {
154
234
  const button = event.target;
155
235
  if (!button.matches(".datepicker-day-button")) return;
@@ -158,7 +238,7 @@ var _Datepicker = class _Datepicker extends Component {
158
238
  };
159
239
  this._handleCalendarKeydown = (event) => {
160
240
  const button = event.target;
161
- if (!button.matches(".datepicker-day-button") || event.altKey || event.ctrlKey || event.metaKey) return;
241
+ if (!button.matches(".datepicker-day-button") || !Utils.plainKey(event)) return;
162
242
  const date = this._dayDate(button);
163
243
  const weekday = (date.getDay() - this.options.firstDay + 7) % 7;
164
244
  const offsets = {
@@ -198,7 +278,7 @@ var _Datepicker = class _Datepicker extends Component {
198
278
  e.target.getAttribute("data-month"),
199
279
  e.target.getAttribute("data-day")
200
280
  );
201
- if (!this.multiple || this.multiple && this.options.isMultipleSelection) {
281
+ if (!this.multiple || this.options.isMultipleSelection) {
202
282
  this.setDate(selectedDate);
203
283
  }
204
284
  if (this.options.isDateRange) {
@@ -214,7 +294,7 @@ var _Datepicker = class _Datepicker extends Component {
214
294
  };
215
295
  this._handleDateRangeCalendarClick = (date) => {
216
296
  if (this.endDate == null || !_Datepicker._compareDates(date, this.endDate)) {
217
- if (_Datepicker._isDate(this.date) && _Datepicker._comparePastDate(date, this.date)) {
297
+ if (_Datepicker._isDate(this.date) && date < this.date) {
218
298
  return;
219
299
  }
220
300
  this.setDate(date, false, _Datepicker._isDate(this.date));
@@ -239,6 +319,18 @@ var _Datepicker = class _Datepicker extends Component {
239
319
  this._handleYearChange = (e) => {
240
320
  this.gotoYear(e.target.value);
241
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
+ };
242
334
  this._handleInputChange = (e) => {
243
335
  if (e["detail"]?.firedBy === this) return;
244
336
  this.setDateFromInput(e.target);
@@ -248,21 +340,17 @@ var _Datepicker = class _Datepicker extends Component {
248
340
  };
249
341
  this._confirm = () => {
250
342
  this._finishSelection();
251
- if (typeof this.options.onConfirm === "function") this.options.onConfirm.call(this);
343
+ hideModal(this.displayPlugin);
344
+ this._notify("confirm", this.options.onConfirm, { args: [] });
252
345
  };
253
346
  this._cancel = () => {
254
- if (typeof this.options.onCancel === "function") this.options.onCancel.call(this);
255
- };
256
- this.el["Expressive_Datepicker"] = this;
257
- this.options = {
258
- ..._Datepicker.defaults,
259
- ...options
347
+ hideModal(this.displayPlugin);
348
+ this._notify("cancel", this.options.onCancel, { args: [] });
260
349
  };
261
- if (!!options && options.hasOwnProperty("i18n") && typeof options.i18n === "object") {
262
- this.options.i18n = { ..._Datepicker.defaults.i18n, ...options.i18n };
263
- }
264
- if (this.options.minDate) this.options.minDate.setHours(0, 0, 0, 0);
265
- 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));
266
354
  this.id = Utils.guid();
267
355
  if (this.options.isMultipleSelection) {
268
356
  this.multiple = true;
@@ -272,7 +360,8 @@ var _Datepicker = class _Datepicker extends Component {
272
360
  this._setupVariables();
273
361
  this._insertHTMLIntoDOM();
274
362
  this._setupEventHandlers();
275
- if (!this.options.defaultDate) {
363
+ const fromValue = !this.options.defaultDate;
364
+ if (fromValue) {
276
365
  this.options.defaultDate = this._parseInput(this.el.value);
277
366
  }
278
367
  const defDate = this.options.defaultDate;
@@ -280,6 +369,8 @@ var _Datepicker = class _Datepicker extends Component {
280
369
  if (this.options.setDefaultDate) {
281
370
  this.setDate(defDate, true);
282
371
  this.setInputValue(this.el, defDate);
372
+ } else if (fromValue && this._isSelectableDay(defDate)) {
373
+ this.setDate(defDate, true);
283
374
  } else {
284
375
  this.gotoDate(defDate);
285
376
  }
@@ -296,21 +387,19 @@ var _Datepicker = class _Datepicker extends Component {
296
387
  }
297
388
  }
298
389
  }
299
- if (this.options.displayPlugin) {
300
- if (this.options.displayPlugin === "docked") this.displayPlugin = DockedDisplayPlugin.init(this.el, this.containerEl, this.options.displayPluginOptions);
301
- }
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);
302
399
  }
303
400
  static get defaults() {
304
401
  return _defaults;
305
402
  }
306
- /**
307
- * Initializes instances of Datepicker.
308
- * @param els HTML elements.
309
- * @param options Component options.
310
- */
311
- static init(els, options = {}) {
312
- return super.init(els, options, _Datepicker);
313
- }
314
403
  /**
315
404
  * Escape a value for interpolation into the calendar markup.
316
405
  *
@@ -326,65 +415,56 @@ var _Datepicker = class _Datepicker extends Component {
326
415
  static _isDate(obj) {
327
416
  return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
328
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
+ }
329
427
  static _parseDate(value) {
330
428
  value = value.trim();
331
429
  if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) return new Date(Date.parse(value));
332
430
  const date = /* @__PURE__ */ new Date(value + "T00:00:00");
333
431
  return date.getDate() === Number(value.slice(-2)) ? date : /* @__PURE__ */ new Date(NaN);
334
432
  }
335
- _parseInput(value) {
336
- 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);
337
435
  return this.options.parse(
338
436
  value,
339
437
  typeof this.options.format === "string" ? this.options.format : ""
340
438
  );
341
439
  }
342
- static _isWeekend(date) {
343
- const day = date.getDay();
344
- return day === 0 || day === 6;
345
- }
346
440
  /**
347
441
  * @deprecated as this function has no effect without any return statement or global parameter setter.
348
442
  */
349
443
  static _setToStartOfDay(date) {
350
444
  if (_Datepicker._isDate(date)) date.setHours(0, 0, 0, 0);
351
445
  }
352
- static _getDaysInMonth(year, month) {
353
- return [31, _Datepicker._isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
354
- }
355
- static _isLeapYear(year) {
356
- return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
357
- }
358
446
  static _compareDates(a, b) {
359
447
  return a.getTime() === b.getTime();
360
448
  }
361
- static _compareWithinRange(day, date, dateEnd) {
362
- return day.getTime() > date.getTime() && day.getTime() < dateEnd.getTime();
363
- }
364
- static _comparePastDate(a, b) {
365
- return a.getTime() < b.getTime();
366
- }
367
- static getInstance(el) {
368
- return el["Expressive_Datepicker"];
369
- }
370
449
  destroy() {
371
- this._removeEventHandlers();
450
+ this._events.abort();
451
+ clearTimeout(this._resetTimer);
372
452
  this.dateEls?.slice(1).forEach((input) => this._removeDateInput(input));
373
453
  if (!this.options.dateRangeEndEl && this.endDateEl) this._removeDateInput(this.endDateEl);
374
454
  this.displayPlugin?.destroy();
375
455
  this.containerEl.remove();
376
456
  this.destroySelects();
377
- 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");
378
464
  }
379
465
  destroySelects() {
380
- const oldYearSelect = this.calendarEl.querySelector(".orig-select-year");
381
- if (oldYearSelect) {
382
- FormSelect.getInstance(oldYearSelect).destroy();
383
- }
384
- const oldMonthSelect = this.calendarEl.querySelector(".orig-select-month");
385
- if (oldMonthSelect) {
386
- FormSelect.getInstance(oldMonthSelect).destroy();
387
- }
466
+ this._formSelect(".orig-select-year")?.destroy();
467
+ this._formSelect(".orig-select-month")?.destroy();
388
468
  }
389
469
  _insertHTMLIntoDOM() {
390
470
  if (this.el.type == "date") {
@@ -405,10 +485,7 @@ var _Datepicker = class _Datepicker extends Component {
405
485
  }
406
486
  }
407
487
  }
408
- Utils.createButton(this.footer, this.options.i18n.clear, ["datepicker-clear"], this.options.showClearBtn, this._handleClearClick);
409
- if (!this.options.autoSubmit) {
410
- Utils.createConfirmationContainer(this.footer, this.options.i18n.done, this.options.i18n.cancel, this._confirm, this._cancel);
411
- }
488
+ pickerFooter(this.footer, this.options, "datepicker-clear", this._handleClearClick, this._confirm, this._cancel);
412
489
  if (this.options.container) {
413
490
  const optEl = this.options.container;
414
491
  this.options.container = optEl instanceof HTMLElement ? optEl : document.querySelector(optEl);
@@ -442,29 +519,40 @@ var _Datepicker = class _Datepicker extends Component {
442
519
  */
443
520
  formatDate(date, format) {
444
521
  const formatArray = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);
445
- 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("");
446
523
  }
447
524
  /**
448
525
  * Sets date from input field.
449
526
  */
450
527
  setDateFromInput(el) {
451
- if (el.type === "date") this.setDataDate(el, _Datepicker._parseDate(el.value));
528
+ this._syncDataDate(el);
452
529
  if ((this.options.isDateRange || !this.options.isMultipleSelection) && !el.value.trim()) {
453
530
  this.setSingleDate(null, el === this.endDateEl);
454
531
  this.draw();
455
532
  return;
456
533
  }
457
- const parsedDate = this._parseInput(el.value);
534
+ const parsedDate = this._dateInInput(el);
458
535
  if (!_Datepicker._isDate(parsedDate)) return;
459
536
  const date = new Date(parsedDate.getTime());
460
537
  _Datepicker._setToStartOfDay(date);
461
538
  const isEndDate = el === this.endDateEl;
462
- if (this.options.isDateRange && (isEndDate ? this.date && date < this.date : this.endDate && date > this.endDate)) {
463
- 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));
464
542
  return;
465
543
  }
544
+ this._selectTypedMultiDate(el, date);
466
545
  this.setDate(date, false, isEndDate, true);
467
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
+ }
468
556
  /**
469
557
  * Set a date on the datepicker.
470
558
  * @param date Date to set on the datepicker.
@@ -478,12 +566,12 @@ var _Datepicker = class _Datepicker extends Component {
478
566
  return;
479
567
  }
480
568
  _Datepicker._setToStartOfDay(selectedDate);
569
+ const selection = ++this._selection;
481
570
  if (!this.options.isMultipleSelection) this.setSingleDate(selectedDate, isEndDate);
482
571
  else if (!fromUserInput) this.setMultiDate(selectedDate);
483
572
  this.gotoDate(selectedDate);
484
- if (!preventOnSelect && typeof this.options.onSelect === "function") {
485
- this.options.onSelect.call(this, selectedDate);
486
- }
573
+ if (preventOnSelect) return;
574
+ this._notify("select", this.options.onSelect, { args: [selectedDate], detail: { date: selectedDate }, current: () => selection === this._selection });
487
575
  }
488
576
  validateDate(date) {
489
577
  if (!date) {
@@ -504,6 +592,38 @@ var _Datepicker = class _Datepicker extends Component {
504
592
  }
505
593
  return new Date(date.getTime());
506
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
+ }
507
627
  /**
508
628
  * Set a single date on the datepicker.
509
629
  * @param date Date to set on the datepicker.
@@ -512,7 +632,7 @@ var _Datepicker = class _Datepicker extends Component {
512
632
  setSingleDate(date, isEndDate) {
513
633
  if (!isEndDate) {
514
634
  this.date = date;
515
- } else if (isEndDate) {
635
+ } else {
516
636
  this.endDate = date;
517
637
  }
518
638
  }
@@ -521,15 +641,13 @@ var _Datepicker = class _Datepicker extends Component {
521
641
  * @param date Date to set on the datepicker.
522
642
  */
523
643
  setMultiDate(date) {
524
- const selectedDate = this.dates?.find((item) => {
525
- return item.getTime() === date.getTime() ? item : false;
526
- });
527
- if (!selectedDate) {
644
+ const index = this.dates.findIndex((item) => item.getTime() === date.getTime());
645
+ if (index === -1) {
528
646
  this.dates.push(date);
529
647
  } else {
530
- this.dates.splice(this.dates.indexOf(selectedDate), 1);
648
+ this.dates.splice(index, 1);
531
649
  }
532
- this.dates.sort((a, b) => a.getTime() < b.getTime() ? -1 : 0);
650
+ this.dates.sort((a, b) => a.getTime() - b.getTime());
533
651
  }
534
652
  /**
535
653
  * Sets the data-date attribute on the date input field
@@ -569,6 +687,7 @@ var _Datepicker = class _Datepicker extends Component {
569
687
  } else {
570
688
  el.value = this.toString(date);
571
689
  }
690
+ this._writtenInputs.set(el, { value: el.value, date: _Datepicker._isDate(date) ? new Date(date.getTime()) : null });
572
691
  el.dispatchEvent(
573
692
  new CustomEvent("change", {
574
693
  bubbles: true,
@@ -643,7 +762,7 @@ var _Datepicker = class _Datepicker extends Component {
643
762
  this.adjustCalendars();
644
763
  }
645
764
  render(year, month, randId) {
646
- 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 = [];
647
766
  let before = new Date(year, month, 1).getDay(), row = [];
648
767
  _Datepicker._setToStartOfDay(now);
649
768
  if (this.options.firstDay > 0) {
@@ -652,15 +771,10 @@ var _Datepicker = class _Datepicker extends Component {
652
771
  before += 7;
653
772
  }
654
773
  }
655
- 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);
656
- let cells = days + before, after = cells;
657
- while (after > 7) {
658
- after -= 7;
659
- }
660
- cells += 7 - after;
661
- let isWeekSelected = false;
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();
775
+ const cells = Math.ceil((days + before) / 7) * 7;
662
776
  for (let i = 0, r = 0; i < cells; i++) {
663
- 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;
664
778
  let dayNumber = 1 + (i - before), monthNumber = month, yearNumber = year;
665
779
  let isSelected = false;
666
780
  if (_Datepicker._isDate(this.date)) {
@@ -692,9 +806,6 @@ var _Datepicker = class _Datepicker extends Component {
692
806
  isToday,
693
807
  isDisabled,
694
808
  isEmpty,
695
- isStartRange,
696
- isEndRange,
697
- isInRange,
698
809
  showDaysInNextAndPreviousMonths: this.options.showDaysInNextAndPreviousMonths,
699
810
  isDateRangeStart,
700
811
  isDateRangeEnd,
@@ -702,10 +813,9 @@ var _Datepicker = class _Datepicker extends Component {
702
813
  };
703
814
  row.push(this.renderDay(dayConfig));
704
815
  if (++r === 7) {
705
- data.push(this.renderRow(row, this.options.isRTL, isWeekSelected));
816
+ data.push(this.renderRow(row, this.options.isRTL, false));
706
817
  row = [];
707
818
  r = 0;
708
- isWeekSelected = false;
709
819
  }
710
820
  }
711
821
  return this.renderTable(this.options, data, randId);
@@ -716,13 +826,10 @@ var _Datepicker = class _Datepicker extends Component {
716
826
  isToday: "is-today",
717
827
  isSelected: "is-selected",
718
828
  hasEvent: "has-event",
719
- isInRange: "is-inrange",
720
- isStartRange: "is-startrange",
721
- isEndRange: "is-endrange",
722
829
  isDateRangeStart: "is-daterange-start",
723
830
  isDateRangeEnd: "is-daterange-end",
724
831
  isDateRange: "is-daterange"
725
- }, ariaSelected = !(["isSelected", "isDateRange"].filter((prop) => !!(opts.hasOwnProperty(prop) && opts[prop] === true)).length === 0), arr = ["datepicker-day"];
832
+ }, ariaSelected = opts.isSelected === true || opts.isDateRange === true, arr = ["datepicker-day"];
726
833
  if (opts.isEmpty) {
727
834
  if (opts.showDaysInNextAndPreviousMonths) {
728
835
  arr.push("is-outside-current-month");
@@ -744,7 +851,6 @@ var _Datepicker = class _Datepicker extends Component {
744
851
  /** Assemble calendar cells; reject unsupported elements and attributes. */
745
852
  renderRow(days, isRTL, isRowSelected) {
746
853
  const row = '<tr class="datepicker-row' + (isRowSelected ? " is-selected" : "") + '">' + _Datepicker._calendarMarkup((isRTL ? days.reverse() : days).join(""), "tr") + "</tr>";
747
- this._checkedRows.add(row);
748
854
  return row;
749
855
  }
750
856
  /** Assemble calendar rows; reject unsupported elements and attributes. */
@@ -764,13 +870,13 @@ var _Datepicker = class _Datepicker extends Component {
764
870
  /** Wrap calendar rows after validating and encoding their contents. */
765
871
  renderBody(rows) {
766
872
  const html = rows.join("");
767
- const checked = rows.every((row) => this._checkedRows.has(row));
768
- this._checkedRows.clear();
769
- return "<tbody>" + (checked ? html : _Datepicker._calendarMarkup(html, "tbody")) + "</tbody>";
873
+ const safeHtml = _Datepicker._calendarMarkup(html, "tbody");
874
+ return "<tbody>" + safeHtml + "</tbody>";
770
875
  }
771
876
  static _calendarMarkup(html, parent) {
772
877
  const template = document.createElement("template");
773
878
  template.innerHTML = html;
879
+ const childOf = { tbody: "tr", tr: "td", td: "button" };
774
880
  const attributes = {
775
881
  tr: ["class"],
776
882
  td: ["class", "data-day", "aria-selected"],
@@ -784,8 +890,8 @@ var _Datepicker = class _Datepicker extends Component {
784
890
  return _Datepicker._escape(node.textContent);
785
891
  }
786
892
  if (!(node instanceof HTMLElement)) throw new TypeError("Unsupported calendar row content");
787
- const tag = node.localName === "tr" ? "tr" : node.localName === "td" ? "td" : node.localName === "button" ? "button" : null;
788
- if (!tag || !(container === "tbody" && tag === "tr" || container === "tr" && tag === "td" || container === "td" && tag === "button")) {
893
+ const tag = childOf[container];
894
+ if (!tag || node.localName !== tag) {
789
895
  throw new TypeError("Unsupported calendar row element");
790
896
  }
791
897
  if ([...node.attributes].some((attr) => !attributes[tag].includes(attr.name))) {
@@ -860,7 +966,7 @@ var _Datepicker = class _Datepicker extends Component {
860
966
  if (opts.yearRangeReverse) arr.reverse();
861
967
  const yearHtml = `<select class="datepicker-select orig-select-year" tabindex="-1">${arr.join("")}</select>`;
862
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>';
863
- 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>`;
864
970
  html += '<div class="selects-container">';
865
971
  if (opts.showMonthAfterYear) {
866
972
  html += yearHtml + monthHtml;
@@ -869,7 +975,7 @@ var _Datepicker = class _Datepicker extends Component {
869
975
  }
870
976
  html += "</div>";
871
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>';
872
- 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>`;
873
979
  return html += "</div>";
874
980
  }
875
981
  /**
@@ -909,26 +1015,10 @@ var _Datepicker = class _Datepicker extends Component {
909
1015
  const active = this.calendarEl.getRootNode().activeElement;
910
1016
  const restoreDayFocus = active?.matches(".datepicker-day-button") && this.calendarEl.contains(active);
911
1017
  const restoreArrow = this.calendarEl.contains(active) && active?.matches(".month-prev, .month-next") ? active.classList.contains("month-prev") ? ".month-prev" : ".month-next" : null;
912
- const opts = this.options, minYear = opts.minYear, maxYear = opts.maxYear, minMonth = opts.minMonth, maxMonth = opts.maxMonth;
913
- if (this._y <= minYear) {
914
- this._y = minYear;
915
- if (!isNaN(minMonth) && this._m < minMonth) {
916
- this._m = minMonth;
917
- }
918
- }
919
- if (this._y >= maxYear) {
920
- this._y = maxYear;
921
- if (!isNaN(maxMonth) && this._m > maxMonth) {
922
- this._m = maxMonth;
923
- }
924
- }
1018
+ const restoreSelect = this._selectFocusRestorer(active);
925
1019
  const year = this.calendars[0].year;
926
1020
  const month = this.calendars[0].month;
927
- if (!this.options.isDateRange) {
928
- this._renderDateDisplay(this.date);
929
- } else {
930
- this._renderDateDisplay(this.date, this.endDate);
931
- }
1021
+ this._renderDateDisplay(this.date, this.endDate);
932
1022
  const key = this._controlsCacheKey(year);
933
1023
  if (key === this._controlsKey && this.calendarEl.querySelector(".datepicker-controls")) {
934
1024
  this._reuseControls(year, month);
@@ -940,10 +1030,27 @@ var _Datepicker = class _Datepicker extends Component {
940
1030
  this._renderCalendarTable(year, month);
941
1031
  this._syncCalendarFocus(!!restoreDayFocus);
942
1032
  if (restoreArrow) this.calendarEl.querySelector(restoreArrow)?.focus();
1033
+ restoreSelect();
943
1034
  if (typeof this.options.onDraw === "function") {
944
1035
  this.options.onDraw.call(this);
945
1036
  }
946
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
+ }
947
1054
  /** Tear down the two FormSelects and render the controls from scratch. */
948
1055
  _rebuildControls(year, month) {
949
1056
  this.destroySelects();
@@ -983,79 +1090,40 @@ var _Datepicker = class _Datepicker extends Component {
983
1090
  else this.calendarEl.insertAdjacentHTML("beforeend", html);
984
1091
  }
985
1092
  _setupEventHandlers() {
986
- this.el.addEventListener("click", this._handleInputClick);
987
- this.el.addEventListener("keydown", this._handleInputKeydown);
988
- this.el.addEventListener("change", this._handleInputChange);
989
- this.endDateEl?.addEventListener("click", this._handleInputClick);
990
- this.endDateEl?.addEventListener("keydown", this._handleInputKeydown);
991
- this.endDateEl?.addEventListener("change", this._handleInputChange);
992
- this.calendarEl.addEventListener("click", this._handleCalendarClick);
993
- this.calendarEl.addEventListener("keydown", this._handleCalendarKeydown);
994
- this.calendarEl.addEventListener("focusin", this._handleCalendarFocus);
1093
+ this._addInputEventHandlers(this.el);
1094
+ if (this.endDateEl) this._addInputEventHandlers(this.endDateEl);
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 });
995
1101
  }
996
1102
  _setupVariables() {
997
1103
  const template = document.createElement("template");
998
1104
  template.innerHTML = _Datepicker._template.trim();
999
1105
  this.containerEl = template.content.firstChild;
1000
1106
  this.calendarEl = this.containerEl.querySelector(".datepicker-calendar");
1001
- this.yearTextEl = this.containerEl.querySelector(".year-text");
1002
1107
  this.dateTextEl = this.containerEl.querySelector(".date-text");
1003
1108
  this.footer = this.containerEl.querySelector(".datepicker-footer");
1004
- this.formats = {
1005
- d: (date) => {
1006
- return date.getDate();
1007
- },
1008
- dd: (date) => {
1009
- const d = date.getDate();
1010
- return (d < 10 ? "0" : "") + d;
1011
- },
1012
- ddd: (date) => {
1013
- return this.options.i18n.weekdaysShort[date.getDay()];
1014
- },
1015
- dddd: (date) => {
1016
- return this.options.i18n.weekdays[date.getDay()];
1017
- },
1018
- m: (date) => {
1019
- return date.getMonth() + 1;
1020
- },
1021
- mm: (date) => {
1022
- const m = date.getMonth() + 1;
1023
- return (m < 10 ? "0" : "") + m;
1024
- },
1025
- mmm: (date) => {
1026
- return this.options.i18n.monthsShort[date.getMonth()];
1027
- },
1028
- mmmm: (date) => {
1029
- return this.options.i18n.months[date.getMonth()];
1030
- },
1031
- yy: (date) => {
1032
- return ("" + date.getFullYear()).slice(2);
1033
- },
1034
- yyyy: (date) => {
1035
- return date.getFullYear();
1036
- }
1037
- };
1038
- }
1039
- _removeEventHandlers() {
1040
- for (const input of this.dateEls ?? [this.el]) this._removeInputEventHandlers(input);
1041
- this.calendarEl.removeEventListener("click", this._handleCalendarClick);
1042
- this.calendarEl.removeEventListener("keydown", this._handleCalendarKeydown);
1043
- this.calendarEl.removeEventListener("focusin", this._handleCalendarFocus);
1044
- if (this.options.isDateRange && this.endDateEl) {
1045
- this._removeInputEventHandlers(this.endDateEl);
1046
- }
1047
1109
  }
1048
- _removeInputEventHandlers(input) {
1049
- input.removeEventListener("click", this._handleInputClick);
1050
- input.removeEventListener("keydown", this._handleInputKeydown);
1051
- input.removeEventListener("change", this._handleInputChange);
1110
+ /** A date input's listeners. An input the picker removes keeps them, but no event reaches it then. */
1111
+ _addInputEventHandlers(input) {
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 });
1052
1116
  }
1053
1117
  _removeDateInput(input) {
1054
1118
  const focused = input.getRootNode().activeElement === input;
1055
- this._removeInputEventHandlers(input);
1056
1119
  input.remove();
1057
1120
  if (focused && document.activeElement === document.body) this.el.focus();
1058
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
+ }
1059
1127
  _dayDate(button) {
1060
1128
  const date = /* @__PURE__ */ new Date(0);
1061
1129
  date.setFullYear(Number(button.dataset.year), Number(button.dataset.month), Number(button.dataset.day));
@@ -1065,7 +1133,7 @@ var _Datepicker = class _Datepicker extends Component {
1065
1133
  _syncCalendarFocus(restore = false) {
1066
1134
  const buttons = [...this.calendarEl.querySelectorAll(".datepicker-day-button")];
1067
1135
  const current = buttons.filter((button) => !button.parentElement.classList.contains("is-selection-disabled"));
1068
- 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));
1069
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];
1070
1138
  for (const button of buttons) {
1071
1139
  button.tabIndex = button === target ? 0 : -1;
@@ -1090,6 +1158,22 @@ var _Datepicker = class _Datepicker extends Component {
1090
1158
  this.adjustCalendars();
1091
1159
  }
1092
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
+ }
1093
1177
  renderDayName(opts, day, abbr = false) {
1094
1178
  day += opts.firstDay;
1095
1179
  while (day >= 7) {
@@ -1101,17 +1185,15 @@ var _Datepicker = class _Datepicker extends Component {
1101
1185
  const dateInput = this.el.cloneNode(true);
1102
1186
  dateInput.removeAttribute("id");
1103
1187
  dateInput.classList.add("no-autoinit");
1104
- dateInput.addEventListener("click", this._handleInputClick);
1105
- dateInput.addEventListener("keydown", this._handleInputKeydown);
1106
- dateInput.addEventListener("change", this._handleInputChange);
1188
+ this._addInputEventHandlers(dateInput);
1107
1189
  this.el.parentElement.appendChild(dateInput);
1108
1190
  return dateInput;
1109
1191
  }
1110
1192
  };
1193
+ _Datepicker.key = "Expressive_Datepicker";
1111
1194
  _Datepicker._template = `
1112
1195
  <div class="datepicker-container">
1113
1196
  <div class="datepicker-date-display">
1114
- <span class="year-text"></span>
1115
1197
  <span class="date-text"></span>
1116
1198
  </div>
1117
1199
  <div class="datepicker-calendar-container">
@@ -1122,6 +1204,7 @@ _Datepicker._template = `
1122
1204
  var Datepicker = _Datepicker;
1123
1205
 
1124
1206
  export {
1207
+ readDate,
1125
1208
  Datepicker
1126
1209
  };
1127
- //# sourceMappingURL=chunk-5HQSGDZ5.mjs.map
1210
+ //# sourceMappingURL=chunk-QXKWVHBD.mjs.map