@expressivecss/expressive 0.15.0 → 0.17.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 (609) hide show
  1. package/CHANGELOG.md +1807 -1
  2. package/README.md +9 -8
  3. package/dist/css/expressive.css +19176 -11958
  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-26VUH75M.mjs +102 -0
  64. package/dist/js/chunks/chunk-26VUH75M.mjs.map +7 -0
  65. package/dist/js/chunks/chunk-2LFCOGC3.mjs +233 -0
  66. package/dist/js/chunks/chunk-2LFCOGC3.mjs.map +7 -0
  67. package/dist/js/chunks/{chunk-DXGRXYYL.mjs → chunk-36GELQGX.mjs} +29 -46
  68. package/dist/js/chunks/chunk-36GELQGX.mjs.map +7 -0
  69. package/dist/js/chunks/{chunk-74MXKKLN.mjs → chunk-3FKWIRHW.mjs} +15 -29
  70. package/dist/js/chunks/chunk-3FKWIRHW.mjs.map +7 -0
  71. package/dist/js/chunks/chunk-3KF65KGL.mjs +209 -0
  72. package/dist/js/chunks/chunk-3KF65KGL.mjs.map +7 -0
  73. package/dist/js/chunks/{chunk-KVJAVDBC.mjs → chunk-3KLZRQZI.mjs} +88 -116
  74. package/dist/js/chunks/chunk-3KLZRQZI.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-CK2XCICY.mjs → chunk-3XORNED5.mjs} +3 -11
  76. package/dist/js/chunks/chunk-3XORNED5.mjs.map +7 -0
  77. package/dist/js/chunks/chunk-4WBGAQN3.mjs +113 -0
  78. package/dist/js/chunks/chunk-4WBGAQN3.mjs.map +7 -0
  79. package/dist/js/chunks/{chunk-FM5CZOUB.mjs → chunk-5F4URJHL.mjs} +19 -30
  80. package/dist/js/chunks/chunk-5F4URJHL.mjs.map +7 -0
  81. package/dist/js/chunks/chunk-67UNY7RH.mjs +299 -0
  82. package/dist/js/chunks/chunk-67UNY7RH.mjs.map +7 -0
  83. package/dist/js/chunks/chunk-7CXNATJS.mjs +97 -0
  84. package/dist/js/chunks/chunk-7CXNATJS.mjs.map +7 -0
  85. package/dist/js/chunks/{chunk-UETTGDLI.mjs → chunk-7X44MKEQ.mjs} +43 -48
  86. package/dist/js/chunks/chunk-7X44MKEQ.mjs.map +7 -0
  87. package/dist/js/chunks/chunk-7ZAMOMGY.mjs +440 -0
  88. package/dist/js/chunks/chunk-7ZAMOMGY.mjs.map +7 -0
  89. package/dist/js/chunks/chunk-AEG6LOAJ.mjs +54 -0
  90. package/dist/js/chunks/chunk-AEG6LOAJ.mjs.map +7 -0
  91. package/dist/js/chunks/chunk-AQNFCJJ5.mjs +135 -0
  92. package/dist/js/chunks/chunk-AQNFCJJ5.mjs.map +7 -0
  93. package/dist/js/chunks/chunk-B55LWKBM.mjs +75 -0
  94. package/dist/js/chunks/chunk-B55LWKBM.mjs.map +7 -0
  95. package/dist/js/chunks/chunk-BB5VXYXT.mjs +28 -0
  96. package/dist/js/chunks/chunk-BB5VXYXT.mjs.map +7 -0
  97. package/dist/js/chunks/chunk-BDATLH3H.mjs +108 -0
  98. package/dist/js/chunks/chunk-BDATLH3H.mjs.map +7 -0
  99. package/dist/js/chunks/chunk-CWMQOT4O.mjs +232 -0
  100. package/dist/js/chunks/chunk-CWMQOT4O.mjs.map +7 -0
  101. package/dist/js/chunks/chunk-CY2CTOVM.mjs +81 -0
  102. package/dist/js/chunks/chunk-CY2CTOVM.mjs.map +7 -0
  103. package/dist/js/chunks/{chunk-NUHMOAOY.mjs → chunk-DWA5UYLJ.mjs} +363 -218
  104. package/dist/js/chunks/chunk-DWA5UYLJ.mjs.map +7 -0
  105. package/dist/js/chunks/chunk-EB2V4OKL.mjs +79 -0
  106. package/dist/js/chunks/chunk-EB2V4OKL.mjs.map +7 -0
  107. package/dist/js/chunks/chunk-EWO662ZC.mjs +188 -0
  108. package/dist/js/chunks/chunk-EWO662ZC.mjs.map +7 -0
  109. package/dist/js/chunks/{chunk-ZX6M7SWO.mjs → chunk-F7LAKFMX.mjs} +320 -141
  110. package/dist/js/chunks/chunk-F7LAKFMX.mjs.map +7 -0
  111. package/dist/js/chunks/{chunk-L27Q6ZMI.mjs → chunk-FNIIH2LU.mjs} +20 -33
  112. package/dist/js/chunks/chunk-FNIIH2LU.mjs.map +7 -0
  113. package/dist/js/chunks/chunk-GE3YMFS6.mjs +15 -0
  114. package/dist/js/chunks/chunk-GE3YMFS6.mjs.map +7 -0
  115. package/dist/js/chunks/chunk-GFWYMWYN.mjs +125 -0
  116. package/dist/js/chunks/chunk-GFWYMWYN.mjs.map +7 -0
  117. package/dist/js/chunks/chunk-GNRSYMVH.mjs +1 -0
  118. package/dist/js/chunks/chunk-H5ISU45X.mjs +87 -0
  119. package/dist/js/chunks/chunk-H5ISU45X.mjs.map +7 -0
  120. package/dist/js/chunks/{chunk-GJL6GCIU.mjs → chunk-H6YIKFAQ.mjs} +311 -186
  121. package/dist/js/chunks/chunk-H6YIKFAQ.mjs.map +7 -0
  122. package/dist/js/chunks/{chunk-BGZLF6JZ.mjs → chunk-HEH7E3KO.mjs} +155 -35
  123. package/dist/js/chunks/chunk-HEH7E3KO.mjs.map +7 -0
  124. package/dist/js/chunks/chunk-HQRLBTNM.mjs +152 -0
  125. package/dist/js/chunks/chunk-HQRLBTNM.mjs.map +7 -0
  126. package/dist/js/chunks/chunk-I2F7MLUU.mjs +137 -0
  127. package/dist/js/chunks/chunk-I2F7MLUU.mjs.map +7 -0
  128. package/dist/js/chunks/chunk-IQOTGGHX.mjs +797 -0
  129. package/dist/js/chunks/chunk-IQOTGGHX.mjs.map +7 -0
  130. package/dist/js/chunks/chunk-JH3YWKA6.mjs +225 -0
  131. package/dist/js/chunks/chunk-JH3YWKA6.mjs.map +7 -0
  132. package/dist/js/chunks/chunk-JOLJAYIJ.mjs +7 -0
  133. package/dist/js/chunks/chunk-JOLJAYIJ.mjs.map +7 -0
  134. package/dist/js/chunks/{chunk-VGNYF6FB.mjs → chunk-KOTGMCMI.mjs} +116 -24
  135. package/dist/js/chunks/chunk-KOTGMCMI.mjs.map +7 -0
  136. package/dist/js/chunks/{chunk-LQWUDNHZ.mjs → chunk-LC4O5LFS.mjs} +21 -45
  137. package/dist/js/chunks/chunk-LC4O5LFS.mjs.map +7 -0
  138. package/dist/js/chunks/chunk-LEF33SCP.mjs +127 -0
  139. package/dist/js/chunks/chunk-LEF33SCP.mjs.map +7 -0
  140. package/dist/js/chunks/{chunk-PDG64UHF.mjs → chunk-LFORZRPH.mjs} +21 -23
  141. package/dist/js/chunks/chunk-LFORZRPH.mjs.map +7 -0
  142. package/dist/js/chunks/chunk-LWLNV5EC.mjs +451 -0
  143. package/dist/js/chunks/chunk-LWLNV5EC.mjs.map +7 -0
  144. package/dist/js/chunks/chunk-LXRHUQAX.mjs +491 -0
  145. package/dist/js/chunks/chunk-LXRHUQAX.mjs.map +7 -0
  146. package/dist/js/chunks/{chunk-SFI2U4YW.mjs → chunk-MA2SZZFB.mjs} +82 -111
  147. package/dist/js/chunks/chunk-MA2SZZFB.mjs.map +7 -0
  148. package/dist/js/chunks/chunk-MDBZAMIV.mjs +121 -0
  149. package/dist/js/chunks/chunk-MDBZAMIV.mjs.map +7 -0
  150. package/dist/js/chunks/chunk-NODZ5VAD.mjs +75 -0
  151. package/dist/js/chunks/chunk-NODZ5VAD.mjs.map +7 -0
  152. package/dist/js/chunks/chunk-O2WJB6TH.mjs +365 -0
  153. package/dist/js/chunks/chunk-O2WJB6TH.mjs.map +7 -0
  154. package/dist/js/chunks/chunk-PCABY5BN.mjs +35 -0
  155. package/dist/js/chunks/chunk-PCABY5BN.mjs.map +7 -0
  156. package/dist/js/chunks/chunk-PWKYVMND.mjs +120 -0
  157. package/dist/js/chunks/chunk-PWKYVMND.mjs.map +7 -0
  158. package/dist/js/chunks/{chunk-SMY7GJSS.mjs → chunk-QHZZT7YO.mjs} +66 -38
  159. package/dist/js/chunks/chunk-QHZZT7YO.mjs.map +7 -0
  160. package/dist/js/chunks/chunk-QND56EW2.mjs +439 -0
  161. package/dist/js/chunks/chunk-QND56EW2.mjs.map +7 -0
  162. package/dist/js/chunks/chunk-QNODAANY.mjs +376 -0
  163. package/dist/js/chunks/chunk-QNODAANY.mjs.map +7 -0
  164. package/dist/js/chunks/{chunk-KHXZ2A4K.mjs → chunk-QRO5FV3I.mjs} +156 -73
  165. package/dist/js/chunks/chunk-QRO5FV3I.mjs.map +7 -0
  166. package/dist/js/chunks/chunk-R7A7JRC5.mjs +440 -0
  167. package/dist/js/chunks/chunk-R7A7JRC5.mjs.map +7 -0
  168. package/dist/js/chunks/chunk-RKG2CBFE.mjs +74 -0
  169. package/dist/js/chunks/chunk-RKG2CBFE.mjs.map +7 -0
  170. package/dist/js/chunks/{chunk-XAEAEHIX.mjs → chunk-RSNS5OYS.mjs} +38 -25
  171. package/dist/js/chunks/chunk-RSNS5OYS.mjs.map +7 -0
  172. package/dist/js/chunks/{chunk-X4ISMKE2.mjs → chunk-RUDYMEJ3.mjs} +7 -6
  173. package/dist/js/chunks/chunk-RUDYMEJ3.mjs.map +7 -0
  174. package/dist/js/chunks/chunk-STJR62SU.mjs +161 -0
  175. package/dist/js/chunks/chunk-STJR62SU.mjs.map +7 -0
  176. package/dist/js/chunks/chunk-SUSD4UTN.mjs +220 -0
  177. package/dist/js/chunks/chunk-SUSD4UTN.mjs.map +7 -0
  178. package/dist/js/chunks/{chunk-5CEAOLUA.mjs → chunk-SYBOA5HC.mjs} +26 -48
  179. package/dist/js/chunks/chunk-SYBOA5HC.mjs.map +7 -0
  180. package/dist/js/chunks/chunk-T4MOBP3J.mjs +108 -0
  181. package/dist/js/chunks/chunk-T4MOBP3J.mjs.map +7 -0
  182. package/dist/js/chunks/chunk-TM7HPGTV.mjs +342 -0
  183. package/dist/js/chunks/chunk-TM7HPGTV.mjs.map +7 -0
  184. package/dist/js/chunks/{chunk-C6CHEWYP.mjs → chunk-TMQDZSDC.mjs} +71 -35
  185. package/dist/js/chunks/chunk-TMQDZSDC.mjs.map +7 -0
  186. package/dist/js/chunks/chunk-TVSX5YA2.mjs +48 -0
  187. package/dist/js/chunks/chunk-TVSX5YA2.mjs.map +7 -0
  188. package/dist/js/chunks/chunk-UHO5CV6K.mjs +80 -0
  189. package/dist/js/chunks/chunk-UHO5CV6K.mjs.map +7 -0
  190. package/dist/js/chunks/chunk-UKCNELUN.mjs +223 -0
  191. package/dist/js/chunks/chunk-UKCNELUN.mjs.map +7 -0
  192. package/dist/js/chunks/chunk-UKQK5GWR.mjs +167 -0
  193. package/dist/js/chunks/chunk-UKQK5GWR.mjs.map +7 -0
  194. package/dist/js/chunks/{chunk-TSZYSW7F.mjs → chunk-UTSLYQ65.mjs} +21 -48
  195. package/dist/js/chunks/chunk-UTSLYQ65.mjs.map +7 -0
  196. package/dist/js/chunks/chunk-VS5OJBOD.mjs +108 -0
  197. package/dist/js/chunks/chunk-VS5OJBOD.mjs.map +7 -0
  198. package/dist/js/chunks/chunk-VZMROW5A.mjs +759 -0
  199. package/dist/js/chunks/chunk-VZMROW5A.mjs.map +7 -0
  200. package/dist/js/chunks/chunk-W6FAL3TI.mjs +38 -0
  201. package/dist/js/chunks/chunk-W6FAL3TI.mjs.map +7 -0
  202. package/dist/js/chunks/chunk-XB6Y7P5W.mjs +69 -0
  203. package/dist/js/chunks/chunk-XB6Y7P5W.mjs.map +7 -0
  204. package/dist/js/chunks/chunk-XDAMOMVD.mjs +226 -0
  205. package/dist/js/chunks/chunk-XDAMOMVD.mjs.map +7 -0
  206. package/dist/js/chunks/{chunk-WDK4T63U.mjs → chunk-XJPMW5SP.mjs} +247 -172
  207. package/dist/js/chunks/chunk-XJPMW5SP.mjs.map +7 -0
  208. package/dist/js/chunks/{chunk-KUFHW3DS.mjs → chunk-YKANQILZ.mjs} +16 -21
  209. package/dist/js/chunks/chunk-YKANQILZ.mjs.map +7 -0
  210. package/dist/js/chunks/chunk-YLZOJLDI.mjs +175 -0
  211. package/dist/js/chunks/chunk-YLZOJLDI.mjs.map +7 -0
  212. package/dist/js/chunks/chunk-ZK7YY322.mjs +514 -0
  213. package/dist/js/chunks/chunk-ZK7YY322.mjs.map +7 -0
  214. package/dist/js/expressive.cjs +10266 -3628
  215. package/dist/js/expressive.cjs.map +4 -4
  216. package/dist/js/expressive.js +10266 -3628
  217. package/dist/js/expressive.js.map +4 -4
  218. package/dist/js/expressive.min.js +23 -22
  219. package/dist/js/expressive.min.js.map +4 -4
  220. package/dist/js/expressive.mjs +181 -69
  221. package/dist/js/expressive.mjs.map +2 -2
  222. package/dist/js/internal/behaviors/bottomSheets.mjs +4 -3
  223. package/dist/js/internal/behaviors/copy.mjs +9 -0
  224. package/dist/js/internal/behaviors/copy.mjs.map +7 -0
  225. package/dist/js/internal/behaviors/dataTables.mjs +8 -0
  226. package/dist/js/internal/behaviors/dataTables.mjs.map +7 -0
  227. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  228. package/dist/js/internal/behaviors/forms.mjs +2 -2
  229. package/dist/js/internal/behaviors/imageCompare.mjs +8 -0
  230. package/dist/js/internal/behaviors/imageCompare.mjs.map +7 -0
  231. package/dist/js/internal/behaviors/lists.mjs +8 -0
  232. package/dist/js/internal/behaviors/lists.mjs.map +7 -0
  233. package/dist/js/internal/behaviors/paneResize.mjs +8 -0
  234. package/dist/js/internal/behaviors/paneResize.mjs.map +7 -0
  235. package/dist/js/internal/behaviors/sheetDrag.mjs +7 -2
  236. package/dist/js/internal/behaviors/sideSheets.mjs +4 -3
  237. package/dist/js/internal/behaviors/sortable.mjs +8 -0
  238. package/dist/js/internal/behaviors/sortable.mjs.map +7 -0
  239. package/dist/js/internal/behaviors/theme.mjs +8 -0
  240. package/dist/js/internal/behaviors/theme.mjs.map +7 -0
  241. package/dist/js/internal/behaviors/tour.mjs +8 -0
  242. package/dist/js/internal/behaviors/tour.mjs.map +7 -0
  243. package/dist/js/internal/behaviors/transferList.mjs +8 -0
  244. package/dist/js/internal/behaviors/transferList.mjs.map +7 -0
  245. package/dist/js/internal/components/appBar.mjs +3 -2
  246. package/dist/js/internal/components/autocomplete.mjs +5 -4
  247. package/dist/js/internal/components/backToTop.mjs +9 -0
  248. package/dist/js/internal/components/backToTop.mjs.map +7 -0
  249. package/dist/js/internal/components/barChart.mjs +5 -4
  250. package/dist/js/internal/components/buttonGroup.mjs +3 -2
  251. package/dist/js/internal/components/buttons.mjs +3 -3
  252. package/dist/js/internal/components/cards.mjs +3 -3
  253. package/dist/js/internal/components/carousel.mjs +3 -3
  254. package/dist/js/internal/components/cascader.mjs +10 -0
  255. package/dist/js/internal/components/cascader.mjs.map +7 -0
  256. package/dist/js/internal/components/characterCounter.mjs +3 -2
  257. package/dist/js/internal/components/chips.mjs +7 -5
  258. package/dist/js/internal/components/colorPicker.mjs +9 -0
  259. package/dist/js/internal/components/colorPicker.mjs.map +7 -0
  260. package/dist/js/internal/components/columnChart.mjs +4 -3
  261. package/dist/js/internal/components/commandPalette.mjs +3 -3
  262. package/dist/js/internal/components/confetti.mjs +3 -2
  263. package/dist/js/internal/components/currencyInput.mjs +9 -0
  264. package/dist/js/internal/components/currencyInput.mjs.map +7 -0
  265. package/dist/js/internal/components/datepicker.mjs +12 -8
  266. package/dist/js/internal/components/expandingCard.mjs +3 -3
  267. package/dist/js/internal/components/funnelChart.mjs +10 -0
  268. package/dist/js/internal/components/funnelChart.mjs.map +7 -0
  269. package/dist/js/internal/components/heatmapChart.mjs +4 -3
  270. package/dist/js/internal/components/hoverCard.mjs +9 -0
  271. package/dist/js/internal/components/hoverCard.mjs.map +7 -0
  272. package/dist/js/internal/components/index.mjs +131 -65
  273. package/dist/js/internal/components/inputMask.mjs +9 -0
  274. package/dist/js/internal/components/inputMask.mjs.map +7 -0
  275. package/dist/js/internal/components/keypad.mjs +3 -3
  276. package/dist/js/internal/components/lightbox.mjs +3 -3
  277. package/dist/js/internal/components/lineChart.mjs +41 -4
  278. package/dist/js/internal/components/loadingOverlay.mjs +9 -0
  279. package/dist/js/internal/components/loadingOverlay.mjs.map +7 -0
  280. package/dist/js/internal/components/mapView.mjs +3 -3
  281. package/dist/js/internal/components/menu.mjs +3 -3
  282. package/dist/js/internal/components/menubar.mjs +10 -0
  283. package/dist/js/internal/components/menubar.mjs.map +7 -0
  284. package/dist/js/internal/components/messageScroller.mjs +3 -3
  285. package/dist/js/internal/components/mixedChart.mjs +5 -4
  286. package/dist/js/internal/components/navigationRail.mjs +3 -2
  287. package/dist/js/internal/components/particles.mjs +3 -2
  288. package/dist/js/internal/components/pieChart.mjs +4 -3
  289. package/dist/js/internal/components/pullToRefresh.mjs +9 -0
  290. package/dist/js/internal/components/pullToRefresh.mjs.map +7 -0
  291. package/dist/js/internal/components/questionnaire.mjs +3 -3
  292. package/dist/js/internal/components/radarChart.mjs +4 -3
  293. package/dist/js/internal/components/radialChart.mjs +4 -3
  294. package/dist/js/internal/components/registry.mjs +60 -41
  295. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  296. package/dist/js/internal/components/sankeyChart.mjs +10 -0
  297. package/dist/js/internal/components/sankeyChart.mjs.map +7 -0
  298. package/dist/js/internal/components/scatterChart.mjs +10 -0
  299. package/dist/js/internal/components/scatterChart.mjs.map +7 -0
  300. package/dist/js/internal/components/scrollspy.mjs +3 -2
  301. package/dist/js/internal/components/select.mjs +5 -4
  302. package/dist/js/internal/components/showMore.mjs +9 -0
  303. package/dist/js/internal/components/showMore.mjs.map +7 -0
  304. package/dist/js/internal/components/slider.mjs +3 -3
  305. package/dist/js/internal/components/snackbar.mjs +2 -2
  306. package/dist/js/internal/components/swipeActions.mjs +9 -0
  307. package/dist/js/internal/components/swipeActions.mjs.map +7 -0
  308. package/dist/js/internal/components/tabs.mjs +3 -4
  309. package/dist/js/internal/components/timepicker.mjs +5 -4
  310. package/dist/js/internal/components/tooltip.mjs +3 -3
  311. package/dist/js/internal/components/treeSelect.mjs +14 -0
  312. package/dist/js/internal/components/treeSelect.mjs.map +7 -0
  313. package/dist/js/internal/components/treemapChart.mjs +10 -0
  314. package/dist/js/internal/components/treemapChart.mjs.map +7 -0
  315. package/dist/js/internal/core/component.mjs +6 -3
  316. package/dist/js/internal/core/formControl.mjs +12 -0
  317. package/dist/js/internal/core/formControl.mjs.map +7 -0
  318. package/dist/js/internal/core/imageURL.mjs +7 -0
  319. package/dist/js/internal/core/imageURL.mjs.map +7 -0
  320. package/dist/js/internal/core/spring.mjs +11 -0
  321. package/dist/js/internal/core/spring.mjs.map +7 -0
  322. package/dist/js/internal/core/utils.mjs +21 -3
  323. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  324. package/dist/js/internal/plugins/modalDisplayPlugin.mjs +13 -0
  325. package/dist/js/internal/plugins/modalDisplayPlugin.mjs.map +7 -0
  326. package/dist/js/modular.mjs +172 -69
  327. package/dist/types/behaviors/bottomSheets.d.ts +23 -5
  328. package/dist/types/behaviors/copy.d.ts +18 -0
  329. package/dist/types/behaviors/dataTables.d.ts +125 -0
  330. package/dist/types/behaviors/dialogs.d.ts +27 -1
  331. package/dist/types/behaviors/forms.d.ts +70 -4
  332. package/dist/types/behaviors/imageCompare.d.ts +13 -0
  333. package/dist/types/behaviors/lists.d.ts +12 -0
  334. package/dist/types/behaviors/paneResize.d.ts +29 -0
  335. package/dist/types/behaviors/sheetDrag.d.ts +18 -0
  336. package/dist/types/behaviors/sideSheets.d.ts +1 -1
  337. package/dist/types/behaviors/sortable.d.ts +28 -0
  338. package/dist/types/behaviors/theme.d.ts +22 -0
  339. package/dist/types/behaviors/tour.d.ts +36 -0
  340. package/dist/types/behaviors/transferList.d.ts +53 -0
  341. package/dist/types/components/appBar.d.ts +5 -6
  342. package/dist/types/components/autocomplete.d.ts +105 -20
  343. package/dist/types/components/backToTop.d.ts +36 -0
  344. package/dist/types/components/barChart.d.ts +3 -6
  345. package/dist/types/components/buttonGroup.d.ts +2 -4
  346. package/dist/types/components/buttons.d.ts +5 -5
  347. package/dist/types/components/cards.d.ts +3 -16
  348. package/dist/types/components/carousel.d.ts +16 -15
  349. package/dist/types/components/cascader.d.ts +130 -0
  350. package/dist/types/components/characterCounter.d.ts +2 -15
  351. package/dist/types/components/chips.d.ts +80 -19
  352. package/dist/types/components/colorPicker.d.ts +56 -0
  353. package/dist/types/components/columnChart.d.ts +23 -10
  354. package/dist/types/components/commandPalette.d.ts +11 -16
  355. package/dist/types/components/confetti.d.ts +2 -4
  356. package/dist/types/components/currencyInput.d.ts +60 -0
  357. package/dist/types/components/datepicker.d.ts +107 -56
  358. package/dist/types/components/expandingCard.d.ts +4 -6
  359. package/dist/types/components/funnelChart.d.ts +35 -0
  360. package/dist/types/components/heatmapChart.d.ts +42 -8
  361. package/dist/types/components/hoverCard.d.ts +59 -0
  362. package/dist/types/components/index.d.ts +16 -1
  363. package/dist/types/components/inputMask.d.ts +28 -0
  364. package/dist/types/components/keypad.d.ts +38 -6
  365. package/dist/types/components/lightbox.d.ts +14 -20
  366. package/dist/types/components/lineChart.d.ts +212 -12
  367. package/dist/types/components/loadingOverlay.d.ts +42 -0
  368. package/dist/types/components/mapView.d.ts +138 -27
  369. package/dist/types/components/menu.d.ts +74 -22
  370. package/dist/types/components/menubar.d.ts +37 -0
  371. package/dist/types/components/messageScroller.d.ts +2 -14
  372. package/dist/types/components/mixedChart.d.ts +15 -6
  373. package/dist/types/components/navigationRail.d.ts +16 -5
  374. package/dist/types/components/particles.d.ts +22 -5
  375. package/dist/types/components/pieChart.d.ts +33 -9
  376. package/dist/types/components/pullToRefresh.d.ts +80 -0
  377. package/dist/types/components/questionnaire.d.ts +58 -16
  378. package/dist/types/components/radarChart.d.ts +10 -6
  379. package/dist/types/components/radialChart.d.ts +58 -7
  380. package/dist/types/components/registry.d.ts +73 -3
  381. package/dist/types/components/richTextEditor.d.ts +45 -22
  382. package/dist/types/components/sankeyChart.d.ts +72 -0
  383. package/dist/types/components/scatterChart.d.ts +102 -0
  384. package/dist/types/components/scrollspy.d.ts +3 -5
  385. package/dist/types/components/select.d.ts +44 -33
  386. package/dist/types/components/showMore.d.ts +53 -0
  387. package/dist/types/components/slider.d.ts +2 -15
  388. package/dist/types/components/snackbar.d.ts +68 -1
  389. package/dist/types/components/swipeActions.d.ts +81 -0
  390. package/dist/types/components/tabs.d.ts +92 -30
  391. package/dist/types/components/timepicker.d.ts +128 -27
  392. package/dist/types/components/tooltip.d.ts +57 -21
  393. package/dist/types/components/treeSelect.d.ts +106 -0
  394. package/dist/types/components/treemapChart.d.ts +56 -0
  395. package/dist/types/core/component.d.ts +49 -25
  396. package/dist/types/core/formControl.d.ts +21 -0
  397. package/dist/types/core/imageURL.d.ts +2 -0
  398. package/dist/types/core/spring.d.ts +20 -0
  399. package/dist/types/core/utils.d.ts +123 -72
  400. package/dist/types/modular.d.ts +33 -1
  401. package/dist/types/plugins/dockedDisplayPlugin.d.ts +10 -8
  402. package/dist/types/plugins/modalDisplayPlugin.d.ts +39 -0
  403. package/package.json +17 -13
  404. package/src/sass/README.md +27 -18
  405. package/src/sass/abstracts/_elevation.scss +13 -7
  406. package/src/sass/abstracts/_index.scss +1 -0
  407. package/src/sass/abstracts/_mixins.scss +864 -78
  408. package/src/sass/abstracts/_spring.scss +63 -0
  409. package/src/sass/abstracts/_variables.scss +64 -21
  410. package/src/sass/base/_fonts.scss +61 -48
  411. package/src/sass/base/_global.scss +104 -24
  412. package/src/sass/base/_index.scss +2 -0
  413. package/src/sass/base/_normalize.scss +59 -114
  414. package/src/sass/base/_print.scss +21 -0
  415. package/src/sass/base/_prose.scss +68 -0
  416. package/src/sass/base/_typography.scss +9 -5
  417. package/src/sass/components/_accordion.scss +10 -19
  418. package/src/sass/components/_alert.scss +102 -0
  419. package/src/sass/components/_aura.scss +9 -3
  420. package/src/sass/components/_avatar.scss +3 -3
  421. package/src/sass/components/_back-to-top.scss +38 -0
  422. package/src/sass/components/_badges.scss +6 -5
  423. package/src/sass/components/_bar-chart.scss +31 -90
  424. package/src/sass/components/_bottom-sheet.scss +51 -16
  425. package/src/sass/components/_breadcrumb.scss +8 -7
  426. package/src/sass/components/_button-groups.scss +30 -63
  427. package/src/sass/components/_buttons.scss +137 -94
  428. package/src/sass/components/_calendar.scss +244 -0
  429. package/src/sass/components/_cards.scss +36 -44
  430. package/src/sass/components/_carousel.scss +37 -113
  431. package/src/sass/components/_cascader.scss +131 -0
  432. package/src/sass/components/_chips.scss +36 -46
  433. package/src/sass/components/_column-chart.scss +15 -26
  434. package/src/sass/components/_command-palette.scss +4 -7
  435. package/src/sass/components/_confetti.scss +1 -4
  436. package/src/sass/components/_countdown.scss +1 -1
  437. package/src/sass/components/_data-table.scss +172 -25
  438. package/src/sass/components/_datepicker.scss +54 -40
  439. package/src/sass/components/_description-list.scss +85 -0
  440. package/src/sass/components/_dialog.scss +48 -55
  441. package/src/sass/components/_docked-display.scss +1 -3
  442. package/src/sass/components/_drag-handle.scss +16 -20
  443. package/src/sass/components/_expanding-card.scss +21 -14
  444. package/src/sass/components/_fab-menu.scss +43 -39
  445. package/src/sass/components/_funnel-chart.scss +63 -0
  446. package/src/sass/components/_heatmap-chart.scss +114 -29
  447. package/src/sass/components/_icon-buttons.scss +8 -11
  448. package/src/sass/components/_icons-material-design.scss +2 -2
  449. package/src/sass/components/_image-compare.scss +108 -0
  450. package/src/sass/components/_index.scss +20 -0
  451. package/src/sass/components/_keypad.scss +39 -19
  452. package/src/sass/components/_kpi.scss +6 -11
  453. package/src/sass/components/_lightbox.scss +24 -13
  454. package/src/sass/components/_line-chart.scss +9 -63
  455. package/src/sass/components/_list.scss +59 -14
  456. package/src/sass/components/_loading-indicator.scss +1 -0
  457. package/src/sass/components/_loading-overlay.scss +105 -0
  458. package/src/sass/components/_map.scss +37 -11
  459. package/src/sass/components/_marquee.scss +4 -3
  460. package/src/sass/components/_mega-menu.scss +128 -0
  461. package/src/sass/components/_menu.scss +146 -127
  462. package/src/sass/components/_menubar.scss +47 -0
  463. package/src/sass/components/_message-scroller.scss +2 -2
  464. package/src/sass/components/_message.scss +3 -3
  465. package/src/sass/components/_mixed-chart.scss +27 -35
  466. package/src/sass/components/_modal-display.scss +21 -0
  467. package/src/sass/components/_navbar.scss +45 -36
  468. package/src/sass/components/_navigation-bar.scss +12 -77
  469. package/src/sass/components/_navigation-rail.scss +161 -92
  470. package/src/sass/components/_org-chart.scss +192 -0
  471. package/src/sass/components/_page-footer.scss +2 -4
  472. package/src/sass/components/_pagination.scss +9 -27
  473. package/src/sass/components/_panes.scss +35 -42
  474. package/src/sass/components/_particles.scss +1 -4
  475. package/src/sass/components/_pie-chart.scss +86 -68
  476. package/src/sass/components/_popover.scss +18 -5
  477. package/src/sass/components/_progress.scss +183 -44
  478. package/src/sass/components/_pull-to-refresh.scss +90 -0
  479. package/src/sass/components/_questionnaire.scss +74 -3
  480. package/src/sass/components/_radar-chart.scss +40 -42
  481. package/src/sass/components/_radial-chart.scss +108 -46
  482. package/src/sass/components/_rich-text-editor.scss +2 -2
  483. package/src/sass/components/_sankey-chart.scss +91 -0
  484. package/src/sass/components/_scatter-chart.scss +144 -0
  485. package/src/sass/components/_scrim.scss +0 -2
  486. package/src/sass/components/_scrollspy.scss +0 -2
  487. package/src/sass/components/_search.scss +27 -26
  488. package/src/sass/components/_show-more.scss +8 -0
  489. package/src/sass/components/_side-sheet.scss +32 -51
  490. package/src/sass/components/_skeleton.scss +26 -19
  491. package/src/sass/components/_snackbar.scss +25 -21
  492. package/src/sass/components/_split-button.scss +5 -5
  493. package/src/sass/components/_stat.scss +3 -8
  494. package/src/sass/components/_stepper.scss +1 -1
  495. package/src/sass/components/_swipe-actions.scss +71 -0
  496. package/src/sass/components/_table_of_contents.scss +1 -3
  497. package/src/sass/components/_tabs.scss +49 -46
  498. package/src/sass/components/_timeline.scss +12 -12
  499. package/src/sass/components/_timepicker.scss +111 -79
  500. package/src/sass/components/_toolbar.scss +36 -47
  501. package/src/sass/components/_tooltip.scss +25 -12
  502. package/src/sass/components/_tour.scss +89 -0
  503. package/src/sass/components/_transfer-list.scss +73 -0
  504. package/src/sass/components/_transitions.scss +4 -4
  505. package/src/sass/components/_tree.scss +7 -32
  506. package/src/sass/components/_treemap-chart.scss +98 -0
  507. package/src/sass/components/forms/_checkboxes.scss +107 -44
  508. package/src/sass/components/forms/_color-picker.scss +135 -0
  509. package/src/sass/components/forms/_color-swatches.scss +85 -0
  510. package/src/sass/components/forms/_drop-zone.scss +16 -13
  511. package/src/sass/components/forms/_fieldset.scss +4 -7
  512. package/src/sass/components/forms/_file-input.scss +12 -8
  513. package/src/sass/components/forms/_index.scss +3 -1
  514. package/src/sass/components/forms/_input-fields.scss +271 -90
  515. package/src/sass/components/forms/_radio-buttons.scss +34 -117
  516. package/src/sass/components/forms/_rating.scss +2 -32
  517. package/src/sass/components/forms/_select.scss +198 -20
  518. package/src/sass/components/forms/_slider.scss +92 -98
  519. package/src/sass/components/forms/_switches.scss +62 -180
  520. package/src/sass/custom.scss +10 -1
  521. package/src/sass/expressive.scss +3 -63
  522. package/src/sass/tokens/_contrast.scss +94 -0
  523. package/src/sass/tokens/_elevation.scss +16 -0
  524. package/src/sass/tokens/_index.scss +5 -0
  525. package/src/sass/tokens/_motion.scss +109 -0
  526. package/src/sass/tokens/_reference.scss +72 -141
  527. package/src/sass/tokens/_shape.scss +38 -0
  528. package/src/sass/tokens/_stacking.scss +27 -0
  529. package/src/sass/tokens/_state.scss +0 -2
  530. package/src/sass/tokens/_theme.scss +10 -1
  531. package/src/sass/tokens/_vibrant.scss +2 -5
  532. package/src/sass/utilities/_defer-render.scss +17 -0
  533. package/src/sass/utilities/_helpers.scss +184 -27
  534. package/src/sass/utilities/_index.scss +1 -0
  535. package/src/sass/utilities/_scroll-area.scss +0 -2
  536. package/src/sass/utilities/_spacing.scss +52 -34
  537. package/src/sass/utilities/_typescale.scss +8 -1
  538. package/src/sass/utilities/_visibility.scss +46 -77
  539. package/src/sass/utilities/_z-depth.scss +7 -4
  540. package/dist/js/chunks/chunk-33QVDDGR.mjs +0 -270
  541. package/dist/js/chunks/chunk-33QVDDGR.mjs.map +0 -7
  542. package/dist/js/chunks/chunk-45FER6RI.mjs +0 -59
  543. package/dist/js/chunks/chunk-45FER6RI.mjs.map +0 -7
  544. package/dist/js/chunks/chunk-5CEAOLUA.mjs.map +0 -7
  545. package/dist/js/chunks/chunk-6VATUZC6.mjs +0 -295
  546. package/dist/js/chunks/chunk-6VATUZC6.mjs.map +0 -7
  547. package/dist/js/chunks/chunk-74MXKKLN.mjs.map +0 -7
  548. package/dist/js/chunks/chunk-AIURVCG6.mjs +0 -55
  549. package/dist/js/chunks/chunk-AIURVCG6.mjs.map +0 -7
  550. package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +0 -7
  551. package/dist/js/chunks/chunk-C6CHEWYP.mjs.map +0 -7
  552. package/dist/js/chunks/chunk-CK2XCICY.mjs.map +0 -7
  553. package/dist/js/chunks/chunk-CXXM2L4F.mjs +0 -344
  554. package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +0 -7
  555. package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +0 -7
  556. package/dist/js/chunks/chunk-FM5CZOUB.mjs.map +0 -7
  557. package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +0 -7
  558. package/dist/js/chunks/chunk-K3HZMFMD.mjs +0 -135
  559. package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +0 -7
  560. package/dist/js/chunks/chunk-KHXZ2A4K.mjs.map +0 -7
  561. package/dist/js/chunks/chunk-KQACNQ22.mjs +0 -7
  562. package/dist/js/chunks/chunk-KQACNQ22.mjs.map +0 -7
  563. package/dist/js/chunks/chunk-KUFHW3DS.mjs.map +0 -7
  564. package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +0 -7
  565. package/dist/js/chunks/chunk-L27Q6ZMI.mjs.map +0 -7
  566. package/dist/js/chunks/chunk-LQWUDNHZ.mjs.map +0 -7
  567. package/dist/js/chunks/chunk-M372EDXD.mjs +0 -322
  568. package/dist/js/chunks/chunk-M372EDXD.mjs.map +0 -7
  569. package/dist/js/chunks/chunk-M3MURWMB.mjs +0 -82
  570. package/dist/js/chunks/chunk-M3MURWMB.mjs.map +0 -7
  571. package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +0 -7
  572. package/dist/js/chunks/chunk-OWG3LMUL.mjs +0 -169
  573. package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +0 -7
  574. package/dist/js/chunks/chunk-PD6HYHAE.mjs +0 -48
  575. package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +0 -7
  576. package/dist/js/chunks/chunk-PDG64UHF.mjs.map +0 -7
  577. package/dist/js/chunks/chunk-PO3AXVR3.mjs +0 -546
  578. package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +0 -7
  579. package/dist/js/chunks/chunk-QYGK36OG.mjs +0 -181
  580. package/dist/js/chunks/chunk-QYGK36OG.mjs.map +0 -7
  581. package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +0 -7
  582. package/dist/js/chunks/chunk-SMY7GJSS.mjs.map +0 -7
  583. package/dist/js/chunks/chunk-TCCA2HDG.mjs +0 -414
  584. package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +0 -7
  585. package/dist/js/chunks/chunk-TSZYSW7F.mjs.map +0 -7
  586. package/dist/js/chunks/chunk-UAZSDUVP.mjs +0 -90
  587. package/dist/js/chunks/chunk-UAZSDUVP.mjs.map +0 -7
  588. package/dist/js/chunks/chunk-UBRZZWRA.mjs +0 -127
  589. package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +0 -7
  590. package/dist/js/chunks/chunk-UCOE7ZDL.mjs +0 -287
  591. package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +0 -7
  592. package/dist/js/chunks/chunk-UETTGDLI.mjs.map +0 -7
  593. package/dist/js/chunks/chunk-UNCRDLP6.mjs +0 -136
  594. package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +0 -7
  595. package/dist/js/chunks/chunk-VGNYF6FB.mjs.map +0 -7
  596. package/dist/js/chunks/chunk-VGPGBNGL.mjs +0 -68
  597. package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +0 -7
  598. package/dist/js/chunks/chunk-VKAUVTQY.mjs +0 -1
  599. package/dist/js/chunks/chunk-VM4FTS7L.mjs +0 -48
  600. package/dist/js/chunks/chunk-VM4FTS7L.mjs.map +0 -7
  601. package/dist/js/chunks/chunk-WDK4T63U.mjs.map +0 -7
  602. package/dist/js/chunks/chunk-WOCCTVUF.mjs +0 -185
  603. package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +0 -7
  604. package/dist/js/chunks/chunk-WQYN5L4E.mjs +0 -107
  605. package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +0 -7
  606. package/dist/js/chunks/chunk-X4ISMKE2.mjs.map +0 -7
  607. package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +0 -7
  608. package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +0 -7
  609. /package/dist/js/chunks/{chunk-VKAUVTQY.mjs.map → chunk-GNRSYMVH.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/components/select.ts"],
4
+ "sourcesContent": ["import { imageURL } from '../core/imageURL';\nimport { Utils, afterFormReset, restoreAttribute } from '../core/utils';\nimport { Menu, MenuOptions } from './menu';\nimport { Component, BaseOptions } from '../core/component';\n\nexport interface FormSelectOptions extends BaseOptions {\n /**\n * Classes to be added to the select wrapper element.\n * @default \"\"\n */\n classes: string;\n /**\n * Pass options object to select menu initialization.\n * @default {}\n */\n menuOptions: Partial<MenuOptions>;\n /** Show a separate popup search field for supported select modes. */\n searchable: boolean;\n i18n: Partial<{ searchLabel: string; noResults: string }>;\n}\n\nconst _defaults: FormSelectOptions = {\n classes: '',\n menuOptions: {},\n searchable: false,\n i18n: { searchLabel: 'Search options', noResults: 'No results' }\n};\n\ntype ValueStruct = {\n el: HTMLOptionElement;\n optionEl: HTMLElement;\n};\n\nexport class FormSelect extends Component<FormSelectOptions> {\n declare el: HTMLSelectElement;\n /** If this is a multiple select. */\n isMultiple: boolean;\n /**\n * Label associated with the current select element.\n * Is \"null\", if not detected.\n */\n labelEl: HTMLLabelElement;\n /** The generated menu element. */\n menuEl: HTMLElement;\n /** Text input that shows current selected option. */\n input: HTMLInputElement;\n /** Instance of the menu plugin for this select. */\n menu: Menu;\n /** The field wrapper around the native select. */\n wrapper: HTMLDivElement;\n selectOptions: (HTMLOptionElement | HTMLOptGroupElement)[];\n protected _values: ValueStruct[];\n private _createdWrapper: boolean;\n private _originalLabels = new Map<HTMLLabelElement, { for: string | null; id: string | null }>();\n private _labelPlaceholder: Comment;\n private _validationMessage: HTMLElement | null = null;\n private _bindReset: () => void = () => {};\n nativeTabIndex: number;\n private _searchable: boolean;\n protected _searchInput: HTMLInputElement;\n private _searchResults: HTMLElement;\n private _searchStatus: HTMLElement;\n\n constructor(el: HTMLSelectElement, options: Partial<FormSelectOptions>) {\n super(el, options);\n // A browser-default select stays native, with no instance on it, and a\n // tree select belongs to TreeSelect, which a page's FormSelect.init() on\n // every select must not wrap a second time.\n if (this.el.classList.contains('browser-default') || (new.target === FormSelect && this.el.matches('[data-tree]'))) {\n Reflect.set(this.el, new.target.key, undefined);\n return;\n }\n\n this.isMultiple = this.el.multiple;\n this._searchable = this._canSearch();\n this.nativeTabIndex = this.el.tabIndex;\n this.el.tabIndex = -1;\n this._values = [];\n this._createdWrapper = false;\n this._setupMenu();\n this._setupEventHandlers();\n }\n\n static get defaults(): FormSelectOptions {\n return _defaults;\n }\n\n static key = 'Expressive_FormSelect';\n\n protected _canSearch() {\n return this.constructor === FormSelect && this.options.searchable;\n }\n\n destroy() {\n this._events.abort();\n // A skipped select built nothing and holds no instance key. The control\n // may belong to a TreeSelect, or to a later instance, so leave it alone.\n if (!this.menuEl) return;\n this._clearValidationError();\n // The Menu holds itself in the static Menu._menus registry\n // until its own destroy() runs, so dropping the elements is not enough -\n // every rebuilt select used to leave an instance behind for good.\n this.menu?.destroy();\n this._removeMenu();\n this.el.tabIndex = this.nativeTabIndex;\n super.destroy();\n }\n\n /**\n * Re-read the native `<select>` and update the generated menu to match.\n *\n * Assigning `select.value` from script fires no `change` event, so nothing\n * else syncs the visible input text or the `.selected` state on the virtual\n * options. Adding or removing `<option>`s also requires this \u2014 the menu is\n * rebuilt from the native list, the field and Menu instance stay put.\n */\n refresh() {\n if (!this.menuEl) return;\n this._bindReset();\n const root = this.menuEl.getRootNode() as Document | ShadowRoot;\n const focused = this._values.find(value => value.optionEl.contains(root.activeElement))?.el;\n this.input.disabled = this.el.matches(':disabled');\n this.wrapper.classList.toggle('disabled', this.input.disabled);\n if (this.input.disabled) this.menu?.close();\n else if (!this.menu) this._initMenu();\n this.input.removeAttribute('aria-activedescendant');\n this._rebuildOptions();\n this._handleSelectChange();\n if (this.menu) this.menu.focusedIndex = -1;\n if (this.menu?.isOpen) {\n this.menu.recalculateDimensions();\n this._restoreOptionFocus(focused);\n }\n }\n\n private _restoreOptionFocus(option: HTMLOptionElement) {\n if (!option) return;\n const rows = this._values.filter(({ el, optionEl }) => el === option && optionEl.tabIndex === 0).map(({ optionEl }) => optionEl);\n (rows[0] || this._searchInput || this.input).focus();\n }\n\n _setupEventHandlers() {\n const { signal } = this._events;\n this._setupOptionHandlers();\n this.el.addEventListener('change', this._handleSelectChange, { signal });\n this.el.addEventListener('invalid', this._handleInvalid, { signal });\n this.el.addEventListener('focus', this._handleNativeFocus, { signal });\n this.input.addEventListener('click', this._handleInputClick, { signal });\n this.menuEl.addEventListener('focusin', this._handleOptionFocus, { signal });\n this._bindReset = afterFormReset(this.el, this._handleReset, signal);\n }\n\n // A rebuild replaces the rows, and no event reaches the old ones.\n protected _setupOptionHandlers() {\n const { signal } = this._events;\n this.menuEl.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.addEventListener('click', this._handleOptionClick, { signal });\n el.addEventListener('keydown', this._handleOptionKeydown, { signal });\n });\n }\n\n _handleSelectChange = () => {\n this._setValueToInput();\n this._setSelectedStates();\n this._syncValidationError();\n };\n\n private _handleInvalid = (e: Event) => {\n if (e.defaultPrevented) return;\n if (!this._validationMessage) {\n this._validationMessage = document.createElement('small');\n this._validationMessage.id = this.input.id + '-error';\n this._validationMessage.className = 'supporting-text';\n this._validationMessage.style.color = 'var(--md-sys-color-error)';\n this.wrapper.append(this._validationMessage);\n this.input.setAttribute('aria-describedby',\n [this.input.getAttribute('aria-describedby'), this._validationMessage.id].filter(Boolean).join(' '));\n }\n this.input.ariaInvalid = 'true';\n this._syncValidationError();\n };\n\n // Native reporting chooses the control; static checks never focus. Wait until\n // reporting finishes so Firefox dismisses its native popup when focus moves.\n private _handleNativeFocus = () => queueMicrotask(() => {\n // The instance's own class: a TreeSelect sits under its own key.\n if ((this.constructor as typeof FormSelect).getInstance(this.el) === this && this.el.matches(':focus')) this.input.focus();\n });\n\n private _syncValidationError() {\n if (!this._validationMessage) return;\n if (this.el.willValidate && !this.el.validity.valid) {\n this._validationMessage.textContent = this.el.validationMessage;\n } else this._clearValidationError();\n }\n\n private _clearValidationError() {\n if (!this._validationMessage) return;\n const descriptions = this.input.getAttribute('aria-describedby')?.split(/\\s+/)\n .filter(id => id !== this._validationMessage.id).join(' ');\n if (descriptions) this.input.setAttribute('aria-describedby', descriptions);\n else this.input.removeAttribute('aria-describedby');\n this.input.ariaInvalid = this.el.ariaInvalid;\n this._validationMessage.remove();\n this._validationMessage = null;\n }\n\n private _handleReset = () => {\n this._resetSearch();\n this._handleSelectChange();\n this._clearValidationError();\n };\n\n _handleOptionKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') this._handleOptionClick(e);\n };\n\n _handleOptionClick = (e: MouseEvent | KeyboardEvent) => {\n // Canceling a click on the multi-select checkbox itself reverts the box\n // after _setSelectedStates has set it, leaving it out of step with the option.\n if (!(e.target as Element).matches('input[type=\"checkbox\"]')) e.preventDefault();\n const virtualOption = (e.target as HTMLLIElement).closest('li');\n this._selectOptionElement(virtualOption);\n e.stopPropagation();\n };\n\n private _handleOptionFocus = (e: FocusEvent) => {\n if (this._searchInput) return;\n const target = e.target;\n if (!(target instanceof Element)) return;\n const li = target.closest('li[role=\"option\"]');\n if (li) this.input.setAttribute('aria-activedescendant', li.id);\n };\n\n _selectOptionElement(virtualOption: HTMLElement) {\n if (virtualOption.hidden) return;\n if (this.el.matches(':disabled')) return;\n if (\n !virtualOption.classList.contains('disabled') &&\n !virtualOption.classList.contains('optgroup')\n ) {\n const value = this._values.find((value) => value.optionEl === virtualOption);\n if (!value || value.el.matches(':disabled')) return;\n const previousSelectedValues = JSON.stringify(this.getSelectedValues());\n // Selecting one option of a single select deselects the others.\n value.el.selected = !this.isMultiple || !value.el.selected;\n this._handleSelectChange();\n if (JSON.stringify(this.getSelectedValues()) !== previousSelectedValues)\n this.el.dispatchEvent(\n new Event('change', { bubbles: true, cancelable: true, composed: true })\n );\n // Only a real selection closes; a disabled option is inert.\n if (!this.isMultiple) this._closeSingleSelect();\n }\n }\n\n _handleInputClick = () => {\n if (this.menu && this.menu.isOpen) {\n this._setValueToInput();\n this._setSelectedStates();\n }\n };\n\n private _closeSingleSelect() {\n this.menu?.close();\n if (this._searchInput) this.input.focus();\n }\n\n _setupMenu() {\n // The DOM already knows which labels belong to this control. Building a\n // selector out of the id instead meant an id with any CSS-special\n // character either threw or matched something else entirely.\n this.labelEl = this.el.labels?.[0] ?? null;\n Array.from(this.el.labels ?? []).forEach(label => {\n this._originalLabels.set(label, { for: label.getAttribute('for'), id: label.getAttribute('id') });\n });\n if (this.labelEl && !this.el.closest('label')) {\n this._labelPlaceholder = document.createComment('');\n this.labelEl.before(this._labelPlaceholder);\n }\n\n this._setupWrapper();\n this._hideNativeSelect();\n if (this.el.matches(':disabled')) this.wrapper.classList.add('disabled');\n\n this.menuEl = document.createElement(this._searchable ? 'div' : 'menu');\n // Disabled controls skip Menu initialization but must keep their popup hidden.\n this.menuEl.popover = 'manual';\n this.menuEl.id = `select-options-${Utils.guid()}`;\n this.menuEl.setAttribute('role', 'listbox');\n this.menuEl.ariaMultiSelectable = this.isMultiple.toString();\n if (this.isMultiple) this.menuEl.classList.add('multiple-select-menu');\n this._buildOptions();\n this.wrapper.append(this.menuEl);\n\n this._buildInput();\n if (this._searchable) this._buildSearch();\n this._buildCaret();\n this._initMenu();\n this._setSelectedStates();\n if (this._labelPlaceholder) this.input.after(this.labelEl);\n }\n\n private _setupWrapper() {\n const parent = this.el.parentElement;\n const reuse =\n parent &&\n parent.matches('.field') &&\n !parent.querySelector(':scope > .hide-select') &&\n !parent.querySelector(':scope > input, :scope > textarea');\n if (reuse) {\n this.wrapper = parent as HTMLDivElement;\n this._createdWrapper = false;\n } else {\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('field');\n this._createdWrapper = true;\n this.el.before(this.wrapper);\n }\n if (this.options.classes.length > 0) {\n this.wrapper.classList.add(...this.options.classes.split(' ').filter(Boolean));\n }\n }\n\n private _hideNativeSelect() {\n const hiddenDiv = document.createElement('div');\n hiddenDiv.classList.add('hide-select');\n hiddenDiv.ariaHidden = 'true';\n this.el.before(hiddenDiv);\n hiddenDiv.appendChild(this.el);\n if (this._createdWrapper) this.wrapper.append(hiddenDiv);\n }\n\n private _buildInput() {\n this.input = document.createElement('input');\n this.input.id = 'select-input-' + Utils.guid();\n // FormSelect owns this Menu. A later AutoInit must not replace it before\n // FormSelect can destroy its own instance during reinitialization.\n this.input.classList.add('menu-trigger', 'no-autoinit');\n this.input.type = 'text';\n this.input.readOnly = true;\n this.input.setAttribute('data-target', this.menuEl.id);\n this.input.ariaReadOnly = 'true';\n this.input.ariaRequired = this.el.hasAttribute('required').toString();\n this.input.disabled = this.el.matches(':disabled');\n this.input.setAttribute('tabindex', this.nativeTabIndex.toString());\n\n const attrs = this.el.attributes;\n for (let i = 0; i < attrs.length; ++i) {\n const attr = attrs[i];\n if (attr.name.startsWith('aria-')) this.input.setAttribute(attr.name, attr.value);\n }\n\n this.input.setAttribute('role', 'combobox');\n this.input.setAttribute('aria-haspopup', 'listbox');\n this.input.ariaExpanded = 'false';\n this.input.setAttribute('aria-controls', this.menuEl.id);\n this.input.placeholder = ' ';\n\n this._originalLabels.forEach((_, label) => { label.htmlFor = this.input.id; });\n // Moving the first label can change DOM order. Preserve the original naming\n // order without overriding an author's explicit accessible name.\n if (this._labelPlaceholder && this._originalLabels.size > 1 && !this.input.getAttribute('aria-label') && !this.input.getAttribute('aria-labelledby')) {\n this.input.setAttribute('aria-labelledby', Array.from(this._originalLabels.keys(), (label, index) => {\n if (!label.id) label.id = `${this.input.id}-label-${index}`;\n return label.id;\n }).join(' '));\n }\n\n this.wrapper.prepend(this.input);\n this._setValueToInput();\n }\n\n private _buildCaret() {\n const caret = document.createElement('span');\n caret.classList.add('caret');\n caret.setAttribute('aria-hidden', 'true');\n this.wrapper.prepend(caret);\n }\n\n private _buildSearch() {\n this.menuEl.classList.add('select-search-popup');\n this.menuEl.setAttribute('role', 'dialog');\n this.menuEl.removeAttribute('aria-multiselectable');\n this.menuEl.classList.remove('multiple-select-menu');\n this.input.setAttribute('aria-haspopup', 'dialog');\n this._searchResults = this._searchList();\n this._searchInput = document.createElement('input');\n this._searchInput.type = 'search';\n this._searchInput.placeholder = this.options.i18n.searchLabel;\n this._searchInput.setAttribute('aria-label', this.options.i18n.searchLabel);\n this._searchStatus = document.createElement('div');\n this._searchStatus.setAttribute('role', 'status');\n this.menuEl.append(this._searchInput, this._searchStatus, this._searchResults);\n this._searchInput.addEventListener('input', this._filterOptions, { signal: this._events.signal });\n this.menuEl.addEventListener('keydown', this._handleSearchKeydown, { signal: this._events.signal, capture: true });\n this._nameSearch();\n this._filterOptions();\n }\n\n protected _searchList(): HTMLElement {\n const list = document.createElement('menu');\n list.id = this.menuEl.id + '-list';\n list.setAttribute('role', 'listbox');\n list.ariaMultiSelectable = this.isMultiple.toString();\n list.classList.toggle('multiple-select-menu', this.isMultiple);\n list.append(...this.menuEl.childNodes);\n return list;\n }\n\n private _nameSearch() {\n const labels = Array.from(this._originalLabels.keys(), (label, index) => {\n if (!label.id) label.id = this.input.id + '-label-' + index;\n return label.id;\n }).join(' ');\n const attribute = this.input.hasAttribute('aria-labelledby') ? 'aria-labelledby' : 'aria-label';\n const name = this.input.getAttribute(attribute);\n [this.menuEl, this._searchResults].forEach(el => el.setAttribute(name ? attribute : 'aria-labelledby', name || labels));\n }\n\n private _filterOptions = () => {\n const query = this._searchInput.value.trim().toLowerCase();\n this._filterSearch(query);\n this._searchStatus.textContent = this._values.some(({ optionEl }) => !optionEl.hidden) ? '' : this.options.i18n.noResults;\n this.input.removeAttribute('aria-activedescendant');\n this.menu?.recalculateDimensions();\n };\n\n protected _filterSearch(query: string) {\n this._values.forEach(({ el, optionEl }) => {\n optionEl.hidden = !el.textContent.trim().toLowerCase().includes(query);\n optionEl.tabIndex = optionEl.hidden || el.matches(':disabled') ? -1 : 0;\n });\n this._filterGroups();\n }\n\n private _filterGroups() {\n const visible = new Set(this._values.filter(({ optionEl }) => !optionEl.hidden).map(({ optionEl }) => optionEl.id));\n for (const group of this._searchResults.querySelectorAll<HTMLElement>(':scope > li.optgroup')) {\n group.hidden = !group.getAttribute('aria-owns').split(' ').some(id => visible.has(id));\n }\n }\n\n protected _searchRows() {\n return this._values.map(({ optionEl }) => optionEl).filter(row => row.tabIndex !== -1);\n }\n\n private _handleSearchKeydown = (e: KeyboardEvent) => {\n e.stopPropagation();\n if (!Utils.plainKey(e) || Utils.isComposing(e)) return;\n if (this._searchDismissKey(e)) return;\n this._searchNavigate(e);\n };\n\n private _searchDismissKey(e: KeyboardEvent) {\n if (e.key === 'Tab') {\n this._searchTab(e);\n return true;\n }\n if (e.key !== 'Escape') return false;\n e.preventDefault();\n this._closeSingleSelect();\n return true;\n }\n\n private _searchTab(e: KeyboardEvent) {\n if (e.shiftKey) {\n e.preventDefault();\n this._searchBackwardTab(e);\n return;\n }\n const first = this._searchRows()[0];\n if (e.target === this._searchInput && first) {\n e.preventDefault();\n first.focus();\n return;\n }\n // Let the browser advance from the trigger, including across shadow roots.\n this._closeSingleSelect();\n }\n\n private _searchBackwardTab(e: KeyboardEvent) {\n if (e.target === this._searchInput) this._closeSingleSelect();\n else this._searchInput.focus();\n }\n\n protected _searchNavigate(e: KeyboardEvent) {\n if (e.target === this._searchInput) {\n this._searchInputKey(e);\n return;\n }\n this._searchRowKey(e);\n }\n\n private _searchInputKey(e: KeyboardEvent) {\n if (e.key === 'Enter') e.preventDefault();\n if (!['ArrowDown', 'ArrowUp'].includes(e.key)) return;\n e.preventDefault();\n const rows = this._searchRows();\n this._focusSearchRow(rows[e.key === 'ArrowUp' ? rows.length - 1 : 0]);\n }\n\n private _focusSearchRow(row: HTMLElement) {\n if (row) row.focus();\n }\n\n private _searchRowKey(e: KeyboardEvent) {\n if (['Enter', ' '].includes(e.key)) {\n e.preventDefault();\n this._selectOptionElement(e.target as HTMLElement);\n return;\n }\n const target = Utils.focusTarget([this._searchInput, ...this._searchRows()], e, { ArrowDown: 1, ArrowUp: -1 });\n if (!target) return;\n e.preventDefault();\n if (e.key === 'Home') this._searchRows()[0]?.focus();\n else target.focus();\n }\n\n private _clearSearch() {\n if (!this._searchInput) return;\n this._searchInput.value = '';\n this._filterOptions();\n }\n\n private _resetSearch() {\n if (!this._searchInput) return;\n this.menu?.close();\n this._clearSearch();\n }\n\n private _bindSearchClose(options: Partial<MenuOptions>) {\n const onCloseStart = options.onCloseStart;\n options.onCloseStart = () => {\n this._clearSearch();\n return onCloseStart?.call(this.menu, this.el);\n };\n }\n\n private _initMenu() {\n if (this.el.matches(':disabled')) return;\n const menuOptions = { ...this.options.menuOptions };\n if (this._searchInput) this._bindSearchClose(menuOptions);\n menuOptions.coverTrigger = false;\n const userOnOpenEnd = menuOptions.onOpenEnd;\n const userOnCloseEnd = menuOptions.onCloseEnd;\n menuOptions.onOpenEnd = () => {\n this._focusMenu();\n this.input.ariaExpanded = 'true';\n if (typeof userOnOpenEnd === 'function')\n userOnOpenEnd.call(this.menu, this.el);\n };\n menuOptions.onCloseEnd = () => {\n this.input.ariaExpanded = 'false';\n this.input.removeAttribute('aria-activedescendant');\n if (typeof userOnCloseEnd === 'function')\n userOnCloseEnd.call(this.menu, this.el);\n };\n menuOptions.closeOnClick = false;\n this.menu = Menu.init(this.input, menuOptions);\n }\n\n private _focusMenu() {\n if (!this._searchInput) return this._focusSelected();\n // Opening can finish after the user has already reached a result.\n if (this.menu.options.autoFocus && !Utils.focusIsIn(this.menuEl)) this._searchInput.focus();\n }\n\n /** Moves focus to the selected row of the opened menu, centred when it scrolls. */\n protected _focusSelected() {\n const selectedOption = this.menuEl.querySelector('.selected');\n if (!selectedOption) return;\n this.menu.focusedIndex = [...selectedOption.parentNode.children].indexOf(selectedOption);\n this.menu._focusFocusedItem();\n if (this.menu.isScrollable) {\n let scrollOffset =\n selectedOption.getBoundingClientRect().top -\n this.menuEl.getBoundingClientRect().top;\n scrollOffset -= this.menuEl.clientHeight / 2;\n this.menuEl.scrollTop = scrollOffset;\n }\n if (selectedOption.id) this.input.setAttribute('aria-activedescendant', selectedOption.id);\n }\n\n protected _nativeOptions(): (HTMLOptGroupElement | HTMLOptionElement)[] {\n return <(HTMLOptGroupElement | HTMLOptionElement)[]>(\n Array.from(this.el.children).filter((el) => ['OPTION', 'OPTGROUP'].includes(el.tagName))\n );\n }\n\n private get _optionList() {\n return this._searchResults ?? this.menuEl;\n }\n\n protected _buildOptions() {\n this.selectOptions = this._nativeOptions();\n this._values = [];\n this.selectOptions.forEach((realOption) => {\n if (realOption.tagName === 'OPTION') {\n const virtualOption = this._createAndAppendOptionWithIcon(\n realOption,\n this.isMultiple ? 'multiple' : undefined\n );\n this._values.push({ el: realOption as HTMLOptionElement, optionEl: virtualOption });\n } else if (realOption.tagName === 'OPTGROUP') {\n const groupId = 'opt-group-' + Utils.guid();\n const groupParent = document.createElement('li');\n groupParent.classList.add('optgroup');\n groupParent.tabIndex = -1;\n groupParent.setAttribute('role', 'group');\n groupParent.setAttribute('aria-labelledby', groupId);\n // Built as nodes, not markup: the optgroup's label attribute is\n // author content that may come from a server, and interpolating it\n // into innerHTML let it close the span and inject an element.\n const groupLabel = document.createElement('span');\n groupLabel.id = groupId;\n groupLabel.setAttribute('role', 'presentation');\n groupLabel.textContent = realOption.getAttribute('label') ?? '';\n groupParent.replaceChildren(groupLabel);\n this._optionList.append(groupParent);\n\n const groupChildren: string[] = [];\n const selectOptions = <HTMLOptionElement[]>(\n Array.from(realOption.children).filter((el) => el.tagName === 'OPTION')\n );\n selectOptions.forEach((child) => {\n const virtualOption = this._createAndAppendOptionWithIcon(child, 'optgroup-option');\n groupChildren.push(virtualOption.id);\n this._values.push({ el: child, optionEl: virtualOption });\n });\n groupParent.setAttribute('aria-owns', groupChildren.join(' '));\n }\n });\n }\n\n private _rebuildOptions() {\n this._optionList.replaceChildren();\n this._buildOptions();\n this._setupOptionHandlers();\n this.menu?._makeMenuFocusable();\n if (this._searchInput) this._filterOptions();\n }\n\n _removeMenu() {\n this.wrapper?.querySelector(':scope > .caret')?.remove();\n this.input?.remove();\n this.menuEl?.remove();\n const hide = this.el.parentElement;\n if (hide?.classList.contains('hide-select')) hide.replaceWith(this.el);\n this._originalLabels.forEach((original, label) => {\n for (const name of ['for', 'id'] as const) restoreAttribute(label, name, original[name]);\n });\n this._labelPlaceholder?.replaceWith(this.labelEl);\n if (!this.wrapper) return;\n if (this._createdWrapper) {\n this.wrapper.replaceWith(this.el);\n } else {\n this.wrapper.classList.remove('disabled');\n if (this.options.classes.length > 0) {\n this.wrapper.classList.remove(...this.options.classes.split(' ').filter(Boolean));\n }\n }\n }\n\n _createAndAppendOptionWithIcon(\n realOption: HTMLOptionElement | HTMLOptGroupElement,\n type: string\n ) {\n const li = document.createElement('li');\n li.id = 'select-option-' + Utils.guid();\n li.setAttribute('role', 'option');\n li.tabIndex = 0;\n const disabled = this.el.matches(':disabled') || realOption.matches(':disabled');\n if (disabled) {\n li.classList.add('disabled');\n li.ariaDisabled = 'true';\n li.tabIndex = -1;\n }\n if (type === 'optgroup-option') li.classList.add(type);\n\n // Text / Checkbox. An <option>'s content model is text, so its markup is\n // its text - copying it as nodes rather than through innerHTML keeps it\n // that way instead of handing it back to the parser.\n const optionText = realOption.textContent;\n const span = document.createElement('span');\n if (this.isMultiple && !disabled) {\n const label = document.createElement('label');\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.tabIndex = -1;\n const labelText = document.createElement('span');\n labelText.textContent = optionText;\n label.append(checkbox, labelText);\n span.appendChild(label);\n } else {\n span.textContent = optionText;\n }\n li.appendChild(span);\n\n const iconUrl = realOption.getAttribute('data-icon');\n const imageUrl = imageURL(iconUrl, this.el.ownerDocument.baseURI);\n // filter(Boolean): a doubled or trailing space yields an empty string,\n // and classList.add('') throws.\n const classes = realOption.getAttribute('class')?.split(' ').filter(Boolean);\n if (imageUrl) {\n const img = document.createElement('img');\n if (classes?.length) img.classList.add(...classes);\n img.src = imageUrl;\n img.ariaHidden = 'true';\n li.prepend(img);\n }\n this._optionList.append(li);\n return li;\n }\n\n _setValueToInput() {\n this.input.value = Array.from(this.el.selectedOptions, (option) => option.textContent.trim()).join(', ');\n }\n\n /** Shows each option's selection on its row and checkbox. */\n _setSelectedStates() {\n this._values.forEach(({ el, optionEl }) => {\n optionEl.classList.toggle('selected', el.selected);\n optionEl.ariaSelected = String(el.selected);\n const checkbox = optionEl.querySelector<HTMLInputElement>('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = el.selected;\n });\n }\n\n getSelectedValues() {\n return Array.from(this.el.selectedOptions, (option) => option.value);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["value"]
7
+ }
@@ -1,6 +1,7 @@
1
1
  import {
2
- Component
3
- } from "./chunk-PD6HYHAE.mjs";
2
+ Component,
3
+ defined
4
+ } from "./chunk-EB2V4OKL.mjs";
4
5
 
5
6
  // src/ts/components/confetti.ts
6
7
  var _defaults = {
@@ -23,38 +24,30 @@ var FALLBACK_COLORS = ["#26ccff", "#a25afd", "#ff5e7e", "#88ff5a", "#fcff42", "#
23
24
  var RAD = Math.PI / 180;
24
25
  var scenes = /* @__PURE__ */ new Map();
25
26
  var overlay = null;
26
- var Confetti = class _Confetti extends Component {
27
+ var _Confetti = class _Confetti extends Component {
27
28
  constructor(el, options) {
28
- super(el, options, _Confetti);
29
+ super(el, options);
29
30
  this._onClick = () => {
30
31
  this.fire();
31
32
  };
32
- this.el["Expressive_Confetti"] = this;
33
- this.options = { ..._Confetti.defaults, ...options };
34
- if (!(el instanceof HTMLCanvasElement)) el.addEventListener("click", this._onClick);
33
+ if (!(el instanceof HTMLCanvasElement)) el.addEventListener("click", this._onClick, { signal: this._events.signal });
35
34
  else if (!this.options.manualStart) this.fire();
36
35
  }
37
36
  static get defaults() {
38
37
  return _defaults;
39
38
  }
40
- static init(els, options = {}) {
41
- return super.init(els, options, _Confetti);
42
- }
43
- static getInstance(el) {
44
- return el["Expressive_Confetti"];
45
- }
46
39
  /**
47
40
  * Bursts over the whole viewport. Resolves when the last piece is gone.
48
41
  */
49
42
  static fire(options = {}) {
50
- return burst(viewportCanvas, document.body, { ..._Confetti.defaults, ...options });
43
+ return burst(viewportCanvas, document.body, { ..._Confetti.defaults, ...defined(options) });
51
44
  }
52
45
  /**
53
46
  * Bursts on this canvas, or from this element's center over the viewport.
54
47
  * Resolves when the last piece is gone.
55
48
  */
56
49
  fire(options = {}) {
57
- const merged = { ...this.options, ...options };
50
+ const merged = { ...this.options, ...defined(options) };
58
51
  if (this.el instanceof HTMLCanvasElement) {
59
52
  const canvas = this.el;
60
53
  return burst(() => canvas, canvas.parentElement ?? document.body, merged);
@@ -64,13 +57,14 @@ var Confetti = class _Confetti extends Component {
64
57
  return burst(viewportCanvas, this.el.parentElement ?? document.body, merged);
65
58
  }
66
59
  destroy() {
67
- this.el.removeEventListener("click", this._onClick);
68
60
  if (this.el instanceof HTMLCanvasElement) stop(this.el);
69
- this.el["Expressive_Confetti"] = void 0;
61
+ super.destroy();
70
62
  }
71
63
  };
64
+ _Confetti.key = "Expressive_Confetti";
65
+ var Confetti = _Confetti;
72
66
  function burst(getCanvas, themed, o) {
73
- if (typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches) return Promise.resolve();
67
+ if (matchMedia("(prefers-reduced-motion: reduce)").matches) return Promise.resolve();
74
68
  const canvas = getCanvas();
75
69
  let scene = scenes.get(canvas);
76
70
  if (!scene) {
@@ -148,7 +142,7 @@ function stop(canvas) {
148
142
  scene.ctx.clearRect(0, 0, canvas.width, canvas.height);
149
143
  if (scene.overlay) {
150
144
  canvas.remove();
151
- overlay = null;
145
+ if (overlay === canvas) overlay = null;
152
146
  }
153
147
  for (const resolve of scene.done) resolve();
154
148
  }
@@ -183,10 +177,11 @@ function viewportCanvas() {
183
177
  height: "100%",
184
178
  margin: "0",
185
179
  padding: "0",
180
+ // The fallback keeps the order where the sheet, and so the token, is absent.
186
181
  border: "0",
187
182
  background: "transparent",
188
183
  pointerEvents: "none",
189
- zIndex: "10001"
184
+ zIndex: "var(--expressive-z-confetti, 10001)"
190
185
  });
191
186
  document.body.append(overlay);
192
187
  if (typeof overlay.showPopover === "function") {
@@ -211,4 +206,4 @@ function themeColors(themed) {
211
206
  export {
212
207
  Confetti
213
208
  };
214
- //# sourceMappingURL=chunk-KUFHW3DS.mjs.map
209
+ //# sourceMappingURL=chunk-YKANQILZ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/components/confetti.ts"],
4
+ "sourcesContent": ["import { Component, BaseOptions, defined } from '../core/component';\n\nexport type ConfettiShape = 'square' | 'circle' | 'star';\n\nexport interface ConfettiOptions extends BaseOptions {\n /**\n * Pieces per burst.\n * @default 50\n */\n particleCount: number;\n /**\n * Launch direction in degrees. 90 is straight up, 0 is right.\n * @default 90\n */\n angle: number;\n /**\n * How far the pieces fan out from the angle, in degrees.\n * @default 45\n */\n spread: number;\n /**\n * Launch speed in pixels per frame.\n * @default 45\n */\n startVelocity: number;\n /**\n * Share of its speed a piece keeps each frame.\n * @default 0.9\n */\n decay: number;\n /**\n * Pull toward the bottom. 0 floats, 1 is normal.\n * @default 1\n */\n gravity: number;\n /**\n * Sideways push per frame. Negative drifts left.\n * @default 0\n */\n drift: number;\n /**\n * Frames a piece lives while it fades out.\n * @default 200\n */\n ticks: number;\n /**\n * Launch point as fractions of the canvas, 0 to 1. A missing side is\n * 0.5. A trigger element ignores it and launches from its own center.\n * @default { x: 0.5, y: 0.5 }\n */\n origin: { x?: number; y?: number };\n /**\n * CSS colors. Empty uses the theme's primary, secondary and tertiary\n * colors and their containers.\n * @default []\n */\n colors: string[];\n /**\n * @default ['square', 'circle']\n */\n shapes: ConfettiShape[];\n /**\n * Piece size multiplier.\n * @default 1\n */\n scalar: number;\n /**\n * On a canvas, wait for `fire()` instead of bursting once at init.\n * @default false\n */\n manualStart: boolean;\n}\n\nconst _defaults: ConfettiOptions = {\n particleCount: 50,\n angle: 90,\n spread: 45,\n startVelocity: 45,\n decay: 0.9,\n gravity: 1,\n drift: 0,\n ticks: 200,\n origin: { x: 0.5, y: 0.5 },\n colors: [],\n shapes: ['square', 'circle'],\n scalar: 1,\n manualStart: false\n};\n\nconst THEME_COLORS = ['primary', 'secondary', 'tertiary', 'primary-container', 'secondary-container', 'tertiary-container'];\n// Used when the page has no theme tokens.\nconst FALLBACK_COLORS = ['#26ccff', '#a25afd', '#ff5e7e', '#88ff5a', '#fcff42', '#ffa62d', '#ff36ff'];\nconst RAD = Math.PI / 180;\n\ninterface Piece {\n x: number;\n y: number;\n velocity: number;\n angle: number;\n wobble: number;\n wobbleSpeed: number;\n tilt: number;\n tick: number;\n color: string;\n shape: ConfettiShape;\n options: ConfettiOptions;\n}\n\ninterface Scene {\n ctx: CanvasRenderingContext2D;\n pieces: Piece[];\n frame: number;\n last: number;\n done: (() => void)[];\n overlay: boolean;\n}\n\nconst scenes = new Map<HTMLCanvasElement, Scene>();\nlet overlay: HTMLCanvasElement | null = null;\n\n/**\n * Confetti. Bursts of theme-colored pieces drawn on a canvas.\n *\n * - `Confetti.fire(options)` bursts over the whole viewport.\n * - Any other `.confetti` element bursts from its center when clicked.\n * - A `<canvas class=\"confetti\">` bursts inside its own box, once at init\n * unless `manualStart`, and again on each `fire()`.\n *\n * The viewport canvas is a manual popover, so it draws above an open modal\n * dialog, and it ignores the pointer. Nothing is drawn when the reader\n * prefers reduced motion.\n */\nexport class Confetti extends Component<ConfettiOptions> {\n private _onClick = () => { this.fire(); };\n\n constructor(el: HTMLElement, options: Partial<ConfettiOptions>) {\n super(el, options);\n if (!(el instanceof HTMLCanvasElement)) el.addEventListener('click', this._onClick, { signal: this._events.signal });\n else if (!this.options.manualStart) this.fire();\n }\n\n static get defaults(): ConfettiOptions {\n return _defaults;\n }\n\n static key = 'Expressive_Confetti';\n\n /**\n * Bursts over the whole viewport. Resolves when the last piece is gone.\n */\n static fire(options: Partial<ConfettiOptions> = {}): Promise<void> {\n // An option set to undefined keeps its default, as it does at init.\n return burst(viewportCanvas, document.body, { ...Confetti.defaults, ...defined(options) });\n }\n\n /**\n * Bursts on this canvas, or from this element's center over the viewport.\n * Resolves when the last piece is gone.\n */\n fire(options: Partial<ConfettiOptions> = {}): Promise<void> {\n const merged = { ...this.options, ...defined(options) };\n if (this.el instanceof HTMLCanvasElement) {\n const canvas = this.el;\n return burst(() => canvas, canvas.parentElement ?? document.body, merged);\n }\n const r = this.el.getBoundingClientRect();\n merged.origin = { x: (r.left + r.width / 2) / innerWidth, y: (r.top + r.height / 2) / innerHeight };\n return burst(viewportCanvas, this.el.parentElement ?? document.body, merged);\n }\n\n destroy() {\n if (this.el instanceof HTMLCanvasElement) stop(this.el);\n super.destroy();\n }\n}\n\n// `themed` is where the theme colors are read, so a scoped theme applies.\nfunction burst(getCanvas: () => HTMLCanvasElement, themed: Element, o: ConfettiOptions): Promise<void> {\n if (matchMedia('(prefers-reduced-motion: reduce)').matches) return Promise.resolve();\n const canvas = getCanvas();\n let scene = scenes.get(canvas);\n if (!scene) {\n const ctx = canvas.getContext('2d');\n if (!ctx) return Promise.resolve();\n scene = { ctx, pieces: [], frame: 0, last: 0, done: [], overlay: canvas === overlay };\n scenes.set(canvas, scene);\n }\n const { width, height } = fit(canvas);\n const colors = o.colors.length ? o.colors : themeColors(themed);\n const x = (o.origin.x ?? 0.5) * width;\n const y = (o.origin.y ?? 0.5) * height;\n for (let i = 0; i < o.particleCount; i++) {\n scene.pieces.push({\n x, y,\n velocity: o.startVelocity * (0.5 + Math.random()),\n angle: -o.angle * RAD + (0.5 - Math.random()) * o.spread * RAD,\n wobble: Math.random() * 10,\n wobbleSpeed: 0.05 + Math.random() * 0.05,\n tilt: (0.25 + Math.random() / 2) * Math.PI,\n tick: 0,\n color: colors[i % colors.length],\n shape: o.shapes[Math.floor(Math.random() * o.shapes.length)] ?? 'square',\n options: o\n });\n }\n const s = scene;\n if (!s.frame) s.frame = requestAnimationFrame((now) => { s.last = now; draw(canvas, s, now); });\n return new Promise((resolve) => s.done.push(resolve));\n}\n\nfunction draw(canvas: HTMLCanvasElement, scene: Scene, now: number) {\n // Frames are counted at 60 per second whatever the display rate.\n const step = Math.min((now - scene.last) / (1000 / 60), 4);\n scene.last = now;\n const { width, height } = fit(canvas);\n const { ctx } = scene;\n const dpr = canvas.width / (width || 1);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n scene.pieces = scene.pieces.filter((p) => {\n const o = p.options;\n p.x += (Math.cos(p.angle) * p.velocity + o.drift) * step;\n p.y += (Math.sin(p.angle) * p.velocity + o.gravity * 3) * step;\n p.velocity *= o.decay ** step;\n p.wobble += p.wobbleSpeed * step;\n p.tilt += 0.1 * step;\n p.tick += step;\n if (p.tick >= o.ticks) return false;\n const size = 8 * o.scalar;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.translate(p.x + 10 * o.scalar * Math.cos(p.wobble), p.y + 10 * o.scalar * Math.sin(p.wobble));\n ctx.rotate(p.tilt);\n ctx.scale(1, Math.cos(p.wobble));\n ctx.globalAlpha = 1 - p.tick / o.ticks;\n ctx.fillStyle = p.color;\n ctx.beginPath();\n if (p.shape === 'circle') ctx.arc(0, 0, size / 2, 0, 2 * Math.PI);\n else if (p.shape === 'star') star(ctx, size * 0.75);\n else ctx.rect(-size / 2, -size / 2, size, size);\n ctx.fill();\n return true;\n });\n if (scene.pieces.length) scene.frame = requestAnimationFrame((t) => draw(canvas, scene, t));\n else stop(canvas);\n}\n\nfunction stop(canvas: HTMLCanvasElement) {\n const scene = scenes.get(canvas);\n if (!scene) return;\n cancelAnimationFrame(scene.frame);\n scenes.delete(canvas);\n scene.ctx.setTransform(1, 0, 0, 1, 0, 0);\n scene.ctx.clearRect(0, 0, canvas.width, canvas.height);\n if (scene.overlay) {\n canvas.remove();\n // A newer overlay may have replaced one the page removed.\n if (overlay === canvas) overlay = null;\n }\n for (const resolve of scene.done) resolve();\n}\n\nfunction star(ctx: CanvasRenderingContext2D, r: number) {\n for (let i = 0; i < 10; i++) {\n const a = (i * Math.PI) / 5 - Math.PI / 2;\n const d = i % 2 ? r / 2 : r;\n ctx.lineTo(Math.cos(a) * d, Math.sin(a) * d);\n }\n ctx.closePath();\n}\n\n// Matches the canvas's pixel buffer to its box and the screen's pixel ratio.\nfunction fit(canvas: HTMLCanvasElement) {\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const w = Math.round(width * devicePixelRatio);\n const h = Math.round(height * devicePixelRatio);\n if (canvas.width !== w || canvas.height !== h) {\n canvas.width = w;\n canvas.height = h;\n }\n return { width, height };\n}\n\nfunction viewportCanvas(): HTMLCanvasElement {\n if (overlay?.isConnected) return overlay;\n overlay = document.createElement('canvas');\n overlay.className = 'confetti-overlay';\n overlay.setAttribute('aria-hidden', 'true');\n // Inline, so the overlay works even where the stylesheet does not reach.\n Object.assign(overlay.style, {\n position: 'fixed', inset: '0', width: '100%', height: '100%', margin: '0', padding: '0',\n // The fallback keeps the order where the sheet, and so the token, is absent.\n border: '0', background: 'transparent', pointerEvents: 'none', zIndex: 'var(--expressive-z-confetti, 10001)'\n });\n document.body.append(overlay);\n if (typeof overlay.showPopover === 'function') {\n overlay.popover = 'manual';\n overlay.showPopover();\n }\n return overlay;\n}\n\n// Resolves each theme color token through `color`, so light-dark() and\n// relative colors reach the canvas as plain colors.\nfunction themeColors(themed: Element): string[] {\n const probe = document.createElement('span');\n probe.hidden = true;\n themed.append(probe);\n const style = getComputedStyle(probe);\n const colors = THEME_COLORS.filter((role) => style.getPropertyValue(`--md-sys-color-${role}`).trim()).map((role) => {\n probe.style.color = `var(--md-sys-color-${role})`;\n return getComputedStyle(probe).color;\n });\n probe.remove();\n return colors.length ? colors : FALLBACK_COLORS;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,175 @@
1
+ import {
2
+ animatePath,
3
+ springPath,
4
+ springToken
5
+ } from "./chunk-W6FAL3TI.mjs";
6
+ import {
7
+ Utils
8
+ } from "./chunk-67UNY7RH.mjs";
9
+
10
+ // src/ts/behaviors/sheetDrag.ts
11
+ var REDUCED = "(prefers-reduced-motion: reduce)";
12
+ var DISMISS_DISTANCE = 96;
13
+ var DISMISS_VELOCITY = 0.5;
14
+ var FLICK_TIMEOUT = 100;
15
+ var DRAG_SLOP = 4;
16
+ var flickVelocity = (held) => Date.now() - held.lastT < FLICK_TIMEOUT ? held.velocity : 0;
17
+ var dismisses = (held, velocity) => held.shift * held.direction > DISMISS_DISTANCE || velocity * held.direction > DISMISS_VELOCITY;
18
+ var springs = /* @__PURE__ */ new WeakMap();
19
+ function catchSpring(dialog, axis) {
20
+ const end = springs.get(dialog);
21
+ if (!end) return 0;
22
+ const [x, y = "0"] = getComputedStyle(dialog).translate.split(" ");
23
+ end(false);
24
+ return parseFloat(axis === "x" ? x : y) || 0;
25
+ }
26
+ var installed = /* @__PURE__ */ new Set();
27
+ function installSheetDrag(config) {
28
+ if (installed.has(config.selector)) return;
29
+ installed.add(config.selector);
30
+ const coord = (event) => config.axis === "x" ? event.clientX : event.clientY;
31
+ let observer;
32
+ let drag = null;
33
+ const sheetFor = (event) => {
34
+ const dialog = Utils.closestInPath(event, config.selector);
35
+ return dialog instanceof HTMLDialogElement ? dialog : null;
36
+ };
37
+ const reset = (dialog) => {
38
+ dialog.style.transition = "";
39
+ dialog.style.setProperty(config.property, "0px");
40
+ };
41
+ const onDown = (event) => {
42
+ if (!event.isPrimary) return;
43
+ if (event.pointerType === "mouse" && event.button !== 0) return;
44
+ onCancel();
45
+ config.onPress?.();
46
+ const dialog = sheetFor(event);
47
+ if (!dialog?.open || !config.inHandle(event, dialog)) return;
48
+ dialog.style.transition = "none";
49
+ const at = coord(event);
50
+ const caught = catchSpring(dialog, config.axis);
51
+ dialog.style.setProperty(config.property, `${caught}px`);
52
+ drag = {
53
+ dialog,
54
+ pointerId: event.pointerId,
55
+ direction: config.direction(dialog),
56
+ start: at - caught,
57
+ last: at,
58
+ lastT: Date.now(),
59
+ velocity: 0,
60
+ shift: caught
61
+ };
62
+ const watch = { childList: true, subtree: true, attributes: true, attributeFilter: ["open"], attributeOldValue: true };
63
+ const root = dialog.getRootNode();
64
+ observer.observe(document, watch);
65
+ if (root !== document) observer.observe(root, watch);
66
+ };
67
+ const onMove = (event) => {
68
+ if (!drag || drag.pointerId !== event.pointerId) return;
69
+ if (!drag.dialog.open || !drag.dialog.isConnected) {
70
+ onCancel();
71
+ return;
72
+ }
73
+ const at = coord(event);
74
+ const delta = at - drag.start;
75
+ drag.shift = drag.direction === 1 ? Math.max(0, delta) : Math.min(0, delta);
76
+ if (at !== drag.last) {
77
+ const now = Date.now();
78
+ drag.velocity = (at - drag.last) / Math.max(1, now - drag.lastT);
79
+ drag.last = at;
80
+ drag.lastT = now;
81
+ }
82
+ drag.dialog.style.setProperty(config.property, `${drag.shift}px`);
83
+ };
84
+ const onUp = (event) => {
85
+ const held = drag;
86
+ if (!held || held.pointerId !== event.pointerId) return;
87
+ if (!held.dialog.open || !held.dialog.isConnected) {
88
+ onCancel();
89
+ return;
90
+ }
91
+ onMove(event);
92
+ drag = null;
93
+ observer.disconnect();
94
+ letGo(held);
95
+ };
96
+ const letGo = (held) => {
97
+ const spring = springFor(held);
98
+ held.dialog.style.transition = "";
99
+ clearShift(held, !settle(held) && held.dialog.open ? spring : null);
100
+ };
101
+ const clearShift = (held, spring) => {
102
+ if (spring) held.dialog.style.transition = "none";
103
+ held.dialog.style.setProperty(config.property, "0px");
104
+ if (spring) springBack(held, spring);
105
+ };
106
+ const springFor = (held) => {
107
+ if (!held.shift || matchMedia(REDUCED).matches || !onSpring(held.dialog)) return null;
108
+ return springToken(held.dialog, "default-spatial");
109
+ };
110
+ const onSpring = (dialog) => {
111
+ const style = getComputedStyle(dialog);
112
+ const read = (name) => style.getPropertyValue(name).trim();
113
+ const spring = "--md-sys-motion-spring-default-spatial";
114
+ return read(config.motion) === read(spring) && read(`${config.motion}-duration`) === read(`${spring}-duration`);
115
+ };
116
+ const springBack = (held, spring) => {
117
+ const dialog = held.dialog;
118
+ const write = config.axis === "x" ? (value) => `${value}px 0` : (value) => `0 ${value}px`;
119
+ const running = animatePath(dialog, "translate", springPath(held.shift, 0, flickVelocity(held), spring), write);
120
+ const reduced = matchMedia(REDUCED);
121
+ const closing = new MutationObserver(() => dialog.open || end(true));
122
+ const end = (restore) => {
123
+ springs.delete(dialog);
124
+ closing.disconnect();
125
+ reduced.removeEventListener("change", stop);
126
+ running.onfinish = null;
127
+ running.cancel();
128
+ if (restore) dialog.style.transition = "";
129
+ };
130
+ const stop = () => end(true);
131
+ springs.set(dialog, end);
132
+ running.onfinish = stop;
133
+ reduced.addEventListener("change", stop);
134
+ closing.observe(dialog, { attributes: true, attributeFilter: ["open"] });
135
+ };
136
+ const onRelease = config.onRelease ?? (() => {
137
+ });
138
+ const release = config.release ?? (() => false);
139
+ const settle = (held) => {
140
+ const velocity = flickVelocity(held);
141
+ const delta = held.last - held.start;
142
+ const dragged = Math.abs(delta) > DRAG_SLOP;
143
+ onRelease(dragged);
144
+ const handled = !dragged || release(held.dialog, delta, velocity);
145
+ if (!handled && dismisses(held, velocity)) held.dialog.close();
146
+ return handled;
147
+ };
148
+ const onCancel = (event) => {
149
+ if (event && drag?.pointerId !== event.pointerId) return;
150
+ observer.disconnect();
151
+ onRelease(false);
152
+ const held = drag;
153
+ drag = null;
154
+ if (held) reset(held.dialog);
155
+ };
156
+ Utils.onDocumentReady(() => {
157
+ observer = new MutationObserver((records) => {
158
+ const dialog = drag?.dialog;
159
+ if (dialog && (!dialog.open || !dialog.isConnected || records.some(
160
+ (record) => record.type === "attributes" && record.target === dialog && record.oldValue === null || [...record.removedNodes].some((node) => node.contains(dialog))
161
+ ))) onCancel();
162
+ });
163
+ document.addEventListener("pointerdown", onDown, { passive: true });
164
+ document.addEventListener("pointermove", onMove, { passive: true });
165
+ document.addEventListener("pointerup", onUp, { passive: true });
166
+ document.addEventListener("pointercancel", onCancel, { passive: true });
167
+ });
168
+ }
169
+
170
+ export {
171
+ DISMISS_DISTANCE,
172
+ DISMISS_VELOCITY,
173
+ installSheetDrag
174
+ };
175
+ //# sourceMappingURL=chunk-YLZOJLDI.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/behaviors/sheetDrag.ts"],
4
+ "sourcesContent": ["import { Utils } from '../core/utils';\nimport { Spring, animatePath, springPath, springToken } from '../core/spring';\n\n/**\n * Drag-to-dismiss, shared by the bottom sheet and the side sheet.\n *\n * The two were the same state machine written twice on different axes - same\n * dismissal distance, same flick velocity, same transition suppression, same\n * pointer bookkeeping - so a fix to one could land without reaching the other.\n * What actually differs between them is stated as configuration below.\n *\n * Light-dismiss on the scrim is not here; it stays with `Dialogs`.\n */\nexport interface SheetDragConfig {\n /** Which dialogs this drag applies to. */\n selector: string;\n /** The axis the sheet travels on. */\n axis: 'x' | 'y';\n /** The custom property carrying the live drag offset. */\n property: string;\n /**\n * The sheet's motion easing token; `-duration` names its duration. While\n * both are the default spatial spring's, a snap-back solves that spring\n * at run time; an override keeps the CSS transition it asks for.\n */\n motion: string;\n /**\n * `1` when the sheet dismisses toward increasing coordinates (downward, or\n * rightward for an end-docked side sheet), `-1` when it dismisses toward\n * decreasing ones. A function rather than a constant because a side sheet's\n * direction depends on which edge each individual sheet is docked to.\n */\n direction: (dialog: HTMLDialogElement) => 1 | -1;\n /** Whether a press at this point landed on the sheet's drag handle. */\n inHandle: (event: PointerEvent, dialog: HTMLDialogElement) => boolean;\n /**\n * Called on primary `pointerdown`, after clearing the previous drag. The\n * bottom sheet clears its dragged flag here so a sequence abandoned without\n * a `pointerup` cannot leave the flag set and swallow the next tap.\n */\n onPress?: () => void;\n /** Called when a drag ends, with whether the pointer actually moved. */\n onRelease?: (dragged: boolean) => void;\n /**\n * Called when a drag that moved ends on an open sheet, before it can\n * dismiss, with how far the pointer travelled along the axis (either way,\n * unlike the dismissing shift) and its flick velocity. Returns whether the\n * drag did something else, such as resizing the sheet, so it does not also\n * dismiss it.\n */\n release?: (dialog: HTMLDialogElement, delta: number, velocity: number) => boolean;\n}\n\nconst REDUCED = '(prefers-reduced-motion: reduce)';\n\n/** Past this the sheet dismisses rather than snapping back, in pixels. */\nexport const DISMISS_DISTANCE = 96;\n/** Past this a flick dismisses whatever the distance, in pixels per millisecond. */\nexport const DISMISS_VELOCITY = 0.5;\n/** Ignore a flick after the pointer has rested for this many milliseconds. */\nconst FLICK_TIMEOUT = 100;\n/** Past this the pointer was dragging, not tapping. Hand jitter, in pixels. */\nconst DRAG_SLOP = 4;\n\n/** One drag in flight. */\ninterface Drag {\n dialog: HTMLDialogElement;\n pointerId: number;\n direction: 1 | -1;\n start: number;\n last: number;\n lastT: number;\n velocity: number;\n shift: number;\n}\n\n/** The pointer's velocity at release, or 0 once it has rested past the flick window. */\nconst flickVelocity = (held: Drag) => (Date.now() - held.lastT < FLICK_TIMEOUT ? held.velocity : 0);\n\n/** Whether the drag went past the dismissal distance, or flicked, toward the sheet's edge. */\nconst dismisses = (held: Drag, velocity: number) =>\n held.shift * held.direction > DISMISS_DISTANCE || velocity * held.direction > DISMISS_VELOCITY;\n\n/**\n * Each sheet's snap-back spring while it runs, as the function that ends\n * it, restoring the CSS transition or, for a drag that caught it, not.\n */\nconst springs = new WeakMap<HTMLDialogElement, (restore: boolean) => void>();\n\n/**\n * Stops a sheet's snap-back where it is and returns how far off its edge\n * that is, so a drag carries on from there instead of jumping.\n */\nfunction catchSpring(dialog: HTMLDialogElement, axis: 'x' | 'y') {\n const end = springs.get(dialog);\n if (!end) return 0;\n const [x, y = '0'] = getComputedStyle(dialog).translate.split(' ');\n end(false);\n return parseFloat(axis === 'x' ? x : y) || 0;\n}\n\n/** Selectors whose drag is already installed, so a second `Init()` is a no-op. */\nconst installed = new Set<string>();\n\n/**\n * Register one sheet kind's drag handlers on the document. Called once per kind\n * at import time; there is nothing to tear down.\n */\nexport function installSheetDrag(config: SheetDragConfig): void {\n if (installed.has(config.selector)) return;\n installed.add(config.selector);\n const coord = (event: PointerEvent) => (config.axis === 'x' ? event.clientX : event.clientY);\n let observer: MutationObserver;\n\n let drag: Drag | null = null;\n\n const sheetFor = (event: Event): HTMLDialogElement | null => {\n const dialog = Utils.closestInPath(event, config.selector);\n return dialog instanceof HTMLDialogElement ? dialog : null;\n };\n\n const reset = (dialog: HTMLDialogElement) => {\n dialog.style.transition = '';\n dialog.style.setProperty(config.property, '0px');\n };\n\n const onDown = (event: PointerEvent) => {\n // A press that is not the primary pointer is ignored without disturbing a\n // drag already in flight - a second finger must not abort the first one.\n // A press that lands off the sheet or off its handle does clear it.\n if (!event.isPrimary) return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n onCancel();\n config.onPress?.();\n const dialog = sheetFor(event);\n if (!dialog?.open || !config.inHandle(event, dialog)) return;\n dialog.style.transition = 'none';\n const at = coord(event);\n // A sheet caught mid-spring carries on from where it is.\n const caught = catchSpring(dialog, config.axis);\n dialog.style.setProperty(config.property, `${caught}px`);\n drag = {\n dialog,\n pointerId: event.pointerId,\n direction: config.direction(dialog),\n start: at - caught,\n last: at,\n lastT: Date.now(),\n velocity: 0,\n shift: caught\n };\n // The document cannot see inside a shadow root, so a sheet there is\n // watched in its own root too; host removal still shows up in the document.\n const watch = { childList: true, subtree: true, attributes: true, attributeFilter: ['open'], attributeOldValue: true };\n const root = dialog.getRootNode();\n observer.observe(document, watch);\n if (root !== document) observer.observe(root, watch);\n };\n\n const onMove = (event: PointerEvent) => {\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (!drag.dialog.open || !drag.dialog.isConnected) {\n onCancel();\n return;\n }\n const at = coord(event);\n const delta = at - drag.start;\n // Only movement toward dismissal counts; dragging the other way is a no-op\n // rather than a sheet that lifts off its edge.\n drag.shift = drag.direction === 1 ? Math.max(0, delta) : Math.min(0, delta);\n if (at !== drag.last) {\n const now = Date.now();\n drag.velocity = (at - drag.last) / Math.max(1, now - drag.lastT);\n drag.last = at;\n drag.lastT = now;\n }\n drag.dialog.style.setProperty(config.property, `${drag.shift}px`);\n };\n\n const onUp = (event: PointerEvent) => {\n const held = drag;\n if (!held || held.pointerId !== event.pointerId) return;\n if (!held.dialog.open || !held.dialog.isConnected) {\n onCancel();\n return;\n }\n onMove(event);\n drag = null;\n observer.disconnect();\n letGo(held);\n };\n\n /**\n * A finished drag resizes or dismisses the sheet, or else it springs back.\n * Not `reset()`, though it looks like it: the two halves belong on either\n * side of close(). The transition has to be back before the sheet closes,\n * so the dismissal animates; the shift has to clear after, or a snap-back\n * would jump to zero before the transition could carry it there.\n */\n const letGo = (held: Drag) => {\n const spring = springFor(held);\n held.dialog.style.transition = '';\n clearShift(held, !settle(held) && held.dialog.open ? spring : null);\n };\n\n /**\n * Clears the drag's shift, springing back on `spring` when there is one.\n * A running CSS transition would outrank the spring, so it waits until\n * the spring ends. It goes off before the shift changes: switched off\n * after, WebKit has already started it.\n */\n const clearShift = (held: Drag, spring: Spring | null) => {\n if (spring) held.dialog.style.transition = 'none';\n held.dialog.style.setProperty(config.property, '0px');\n if (spring) springBack(held, spring);\n };\n\n /**\n * The spring a released sheet snaps back on, or null for the CSS snap:\n * no shift, reduced motion, or motion tokens the page overrode.\n */\n const springFor = (held: Drag) => {\n if (!held.shift || matchMedia(REDUCED).matches || !onSpring(held.dialog)) return null;\n return springToken(held.dialog, 'default-spatial');\n };\n\n /** Whether the sheet's motion tokens are still the default spatial spring's. */\n const onSpring = (dialog: HTMLDialogElement) => {\n const style = getComputedStyle(dialog);\n const read = (name: string) => style.getPropertyValue(name).trim();\n const spring = '--md-sys-motion-spring-default-spatial';\n return read(config.motion) === read(spring) && read(`${config.motion}-duration`) === read(`${spring}-duration`);\n };\n\n /**\n * The snap-back: a spring solved from where the sheet is and the\n * finger's speed, instead of the CSS spring that starts from rest.\n */\n const springBack = (held: Drag, spring: Spring) => {\n const dialog = held.dialog;\n const write = config.axis === 'x' ? (value: number) => `${value}px 0` : (value: number) => `0 ${value}px`;\n const running = animatePath(dialog, 'translate', springPath(held.shift, 0, flickVelocity(held), spring), write);\n // It ends when it settles, and early when the sheet closes or the reader\n // asks for reduced motion, so neither inherits a stale spring or a\n // transition left off.\n const reduced = matchMedia(REDUCED);\n const closing = new MutationObserver(() => dialog.open || end(true));\n const end = (restore: boolean) => {\n springs.delete(dialog);\n closing.disconnect();\n reduced.removeEventListener('change', stop);\n running.onfinish = null;\n running.cancel();\n if (restore) dialog.style.transition = '';\n };\n const stop = () => end(true);\n springs.set(dialog, end);\n running.onfinish = stop;\n reduced.addEventListener('change', stop);\n closing.observe(dialog, { attributes: true, attributeFilter: ['open'] });\n };\n\n const onRelease = config.onRelease ?? (() => {});\n const release = config.release ?? (() => false);\n\n /**\n * A drag that moved resizes the sheet, if the sheet handles that, or else\n * dismisses it past the distance or a flick. Returns whether the release\n * did something other than let the sheet snap back.\n */\n const settle = (held: Drag) => {\n const velocity = flickVelocity(held);\n const delta = held.last - held.start;\n // Movement either way is a drag, so the click that ends it is not a tap.\n const dragged = Math.abs(delta) > DRAG_SLOP;\n onRelease(dragged);\n const handled = !dragged || release(held.dialog, delta, velocity);\n if (!handled && dismisses(held, velocity)) held.dialog.close();\n return handled;\n };\n\n const onCancel = (event?: PointerEvent) => {\n if (event && drag?.pointerId !== event.pointerId) return;\n observer.disconnect();\n onRelease(false);\n const held = drag;\n drag = null;\n if (held) reset(held.dialog);\n };\n\n Utils.onDocumentReady(() => {\n observer = new MutationObserver(records => {\n const dialog = drag?.dialog;\n if (dialog && (!dialog.open || !dialog.isConnected || records.some(record =>\n (record.type === 'attributes' && record.target === dialog && record.oldValue === null) ||\n [...record.removedNodes].some(node => node.contains(dialog))\n ))) onCancel();\n });\n document.addEventListener('pointerdown', onDown, { passive: true });\n document.addEventListener('pointermove', onMove, { passive: true });\n document.addEventListener('pointerup', onUp, { passive: true });\n document.addEventListener('pointercancel', onCancel, { passive: true });\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }