@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
@@ -1,9 +1,12 @@
1
- import {
2
- Utils
3
- } from "./chunk-M372EDXD.mjs";
4
1
  import {
5
2
  Component
6
- } from "./chunk-PD6HYHAE.mjs";
3
+ } from "./chunk-EB2V4OKL.mjs";
4
+ import {
5
+ Utils,
6
+ controllerFor,
7
+ deepActiveElement,
8
+ restoreAttribute
9
+ } from "./chunk-67UNY7RH.mjs";
7
10
 
8
11
  // src/ts/components/lightbox.ts
9
12
  var _defaults = {
@@ -14,16 +17,17 @@ var _defaults = {
14
17
  onCloseStart: null,
15
18
  onCloseEnd: null
16
19
  };
17
- var _Lightbox = class _Lightbox extends Component {
20
+ var Lightbox = class extends Component {
18
21
  constructor(el, options) {
19
- super(el, options, _Lightbox);
20
- /** Ancestors forced to `overflow: visible`, with the inline value to put back. */
21
- this._changedAncestorList = [];
22
+ super(el, options);
22
23
  this._timers = /* @__PURE__ */ new Map();
23
24
  this._motion = window.matchMedia("(prefers-reduced-motion: reduce)");
24
25
  this._isOpen = false;
25
26
  this._destroyed = false;
26
27
  this._revision = 0;
28
+ // Counts opens and closes only. _revision also moves when reduced motion
29
+ // flushes a transition, which must still report its end.
30
+ this._phase = 0;
27
31
  this._handleMotionChange = () => {
28
32
  if (!this._motion.matches) return;
29
33
  const callbacks = [...this._timers.values()];
@@ -37,7 +41,7 @@ var _Lightbox = class _Lightbox extends Component {
37
41
  }
38
42
  };
39
43
  this._handleLightboxKeypress = (e) => {
40
- if (this._trigger === this.el && (e.key === Utils.keys.ENTER || e.key === " ")) {
44
+ if (this._trigger === this.el && (e.key === "Enter" || e.key === " ")) {
41
45
  e.preventDefault();
42
46
  this._handleLightboxToggle();
43
47
  }
@@ -49,36 +53,43 @@ var _Lightbox = class _Lightbox extends Component {
49
53
  this._handleWindowChange = () => {
50
54
  if (this.overlayActive) this.close();
51
55
  };
56
+ // On keydown, and taken, so a dialog around the lightbox does not close on
57
+ // the same press.
52
58
  this._handleWindowEscape = (e) => {
53
- if (e.key === Utils.keys.ESC) this.close();
59
+ if (e.key !== "Escape") return;
60
+ e.preventDefault();
61
+ this.close();
62
+ };
63
+ // The image zooms in place, not in a modal, so Tab would reach the page
64
+ // behind the overlay. Tab closes it instead, then moves focus as usual.
65
+ this._handleWindowTab = (e) => {
66
+ if (e.key === "Tab") this.close();
54
67
  };
55
68
  /**
56
69
  * Open lightbox.
57
70
  */
58
71
  this.open = () => {
59
72
  if (this._destroyed || this._isOpen) return;
73
+ this._phase++;
60
74
  const revision = this._cancel();
61
75
  if (this.overlayActive) this._reset();
62
- this._isOpen = true;
63
76
  this._updateVars();
64
77
  const originRect = this.el.getBoundingClientRect();
65
78
  const placeholderRect = this.placeholder.getBoundingClientRect();
79
+ if (!originRect.width || !originRect.height) return;
80
+ this._isOpen = true;
66
81
  this.originalWidth = originRect.width;
67
82
  this.originalHeight = originRect.height;
68
83
  this.doneAnimating = false;
69
84
  this.el.classList.add("active");
70
85
  this.overlayActive = true;
71
- if (typeof this.options.onOpenStart === "function")
72
- this.options.onOpenStart.call(this, this.el);
73
- if (revision !== this._revision) return;
86
+ if (!this._notify("open", this.options.onOpenStart, { current: () => revision === this._revision })) return;
74
87
  this.placeholder.style.width = placeholderRect.width + "px";
75
88
  this.placeholder.style.height = placeholderRect.height + "px";
76
- this.placeholder.style.position = "relative";
77
- this.placeholder.style.top = "0";
78
- this.placeholder.style.left = "0";
79
- this._makeAncestorsOverflowVisible();
80
89
  this.el.style.position = "absolute";
81
- this.el.style.zIndex = "1000";
90
+ this.el.style.inset = "auto";
91
+ this.el.style.left = placeholderRect.left + window.scrollX + "px";
92
+ this.el.style.top = placeholderRect.top + window.scrollY + "px";
82
93
  this.el.style.willChange = "left, top, width, height";
83
94
  this.attrWidth = this.el.getAttribute("width");
84
95
  this.attrHeight = this.el.getAttribute("height");
@@ -91,6 +102,7 @@ var _Lightbox = class _Lightbox extends Component {
91
102
  this.el.removeAttribute("height");
92
103
  }
93
104
  this._addOverlay();
105
+ this._showOnTop(this.el);
94
106
  if (this.caption !== "") this._addCaption();
95
107
  const widthPercent = this.originalWidth / this.windowWidth;
96
108
  const heightPercent = this.originalHeight / this.windowHeight;
@@ -103,9 +115,13 @@ var _Lightbox = class _Lightbox extends Component {
103
115
  this.newWidth = this.windowHeight * 0.9 * ratio;
104
116
  this.newHeight = this.windowHeight * 0.9;
105
117
  }
106
- window.addEventListener("scroll", this._handleWindowChange, { passive: true });
107
- window.addEventListener("resize", this._handleWindowChange, { passive: true });
108
- window.addEventListener("keyup", this._handleWindowEscape);
118
+ this._windowEvents?.abort();
119
+ this._windowEvents = controllerFor(this.el);
120
+ const { signal } = this._windowEvents;
121
+ window.addEventListener("scroll", this._handleWindowChange, { passive: true, signal });
122
+ window.addEventListener("resize", this._handleWindowChange, { passive: true, signal });
123
+ window.addEventListener("keydown", this._handleWindowEscape, { signal });
124
+ window.addEventListener("keydown", this._handleWindowTab, { signal });
109
125
  this._animateImageIn();
110
126
  };
111
127
  /**
@@ -113,24 +129,17 @@ var _Lightbox = class _Lightbox extends Component {
113
129
  */
114
130
  this.close = () => {
115
131
  if (this._destroyed || !this._isOpen) return;
132
+ this._phase++;
116
133
  const revision = this._cancel();
117
134
  this._isOpen = false;
118
135
  this.doneAnimating = false;
119
- if (typeof this.options.onCloseStart === "function")
120
- this.options.onCloseStart.call(this, this.el);
121
- if (revision !== this._revision) return;
122
- window.removeEventListener("scroll", this._handleWindowChange);
123
- window.removeEventListener("resize", this._handleWindowChange);
124
- window.removeEventListener("keyup", this._handleWindowEscape);
136
+ if (!this._notify("close", this.options.onCloseStart, { current: () => revision === this._revision })) return;
137
+ this._windowEvents?.abort();
138
+ this._restoreFocus();
125
139
  if (this._overlay) this._fadeOut(this._overlay);
126
140
  if (this._photoCaption) this._fadeOut(this._photoCaption);
127
141
  this._animateImageOut();
128
142
  };
129
- this.el["Expressive_Lightbox"] = this;
130
- this.options = {
131
- ..._Lightbox.defaults,
132
- ...options
133
- };
134
143
  this.overlayActive = false;
135
144
  this.doneAnimating = true;
136
145
  this.placeholder = document.createElement("div");
@@ -149,53 +158,34 @@ var _Lightbox = class _Lightbox extends Component {
149
158
  static get defaults() {
150
159
  return _defaults;
151
160
  }
152
- /**
153
- * Initializes instances of Lightbox.
154
- * @param els HTML elements.
155
- * @param options Component options.
156
- */
157
- static init(els, options = {}) {
158
- return super.init(els, options, _Lightbox);
159
- }
160
- static getInstance(el) {
161
- return el["Expressive_Lightbox"];
162
- }
163
161
  destroy() {
164
162
  if (this._destroyed) return;
165
163
  this._destroyed = true;
166
- const root = this.el.getRootNode();
167
- const focused = root.activeElement === this.el;
168
- this._removeEventHandlers();
164
+ const focused = this.el.getRootNode().activeElement === this.el;
169
165
  this._cancel();
170
166
  this._reset();
171
167
  this.placeholder.replaceWith(this.el);
172
- let active = document.activeElement;
173
- while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
174
- if (focused && (active === document.body || active === root.host)) this._trigger.focus();
175
- if (this._tabindex === null) this.el.removeAttribute("tabindex");
176
- else this.el.setAttribute("tabindex", this._tabindex);
177
- this.el["Expressive_Lightbox"] = void 0;
168
+ if (focused) this._restoreFocus();
169
+ restoreAttribute(this.el, "tabindex", this._tabindex);
170
+ super.destroy();
171
+ }
172
+ // Back to the trigger when focus fell to the body (or the shadow host), as
173
+ // a click on the overlay, which cannot take focus, leaves it.
174
+ _restoreFocus() {
175
+ const root = this.el.getRootNode();
176
+ const active = deepActiveElement(document);
177
+ if ([document.body, root.host].includes(active)) this._trigger.focus({ preventScroll: true });
178
178
  }
179
179
  _reset() {
180
- window.removeEventListener("scroll", this._handleWindowChange);
181
- window.removeEventListener("resize", this._handleWindowChange);
182
- window.removeEventListener("keyup", this._handleWindowEscape);
180
+ this._windowEvents?.abort();
183
181
  this._overlay?.remove();
184
182
  this._photoCaption?.remove();
185
- for (const ancestor of this._changedAncestorList) {
186
- const saved = _Lightbox._overflow.get(ancestor);
187
- if (--saved.count === 0) {
188
- ancestor.style.setProperty("overflow", saved.value, saved.priority);
189
- _Lightbox._overflow.delete(ancestor);
190
- }
191
- }
192
- this._changedAncestorList = [];
183
+ this.el.removeAttribute("popover");
193
184
  if (this.attrWidth != null) this.el.setAttribute("width", this.attrWidth);
194
185
  if (this.attrHeight != null) this.el.setAttribute("height", this.attrHeight);
195
186
  this.el.classList.remove("active");
196
187
  this.placeholder.removeAttribute("style");
197
- if (this.originInlineStyles === null) this.el.removeAttribute("style");
198
- else this.el.setAttribute("style", this.originInlineStyles);
188
+ restoreAttribute(this.el, "style", this.originInlineStyles);
199
189
  this.overlayActive = false;
200
190
  this._isOpen = false;
201
191
  this.doneAnimating = true;
@@ -217,37 +207,23 @@ var _Lightbox = class _Lightbox extends Component {
217
207
  this._timers.set(timer, callback);
218
208
  }
219
209
  _setupEventHandlers() {
220
- this._motion.addEventListener("change", this._handleMotionChange);
221
- this._trigger.addEventListener("click", this._handleLightboxToggle);
222
- this.el.addEventListener("keydown", this._handleLightboxKeypress);
223
- }
224
- _removeEventHandlers() {
225
- this._motion.removeEventListener("change", this._handleMotionChange);
226
- this._trigger.removeEventListener("click", this._handleLightboxToggle);
227
- this.el.removeEventListener("keydown", this._handleLightboxKeypress);
210
+ const { signal } = this._events;
211
+ this._motion.addEventListener("change", this._handleMotionChange, { signal });
212
+ this._trigger.addEventListener("click", this._handleLightboxToggle, { signal });
213
+ this.el.addEventListener("keydown", this._handleLightboxKeypress, { signal });
228
214
  }
229
- _makeAncestorsOverflowVisible() {
230
- this._changedAncestorList = [];
231
- let ancestor = this.placeholder.parentNode;
232
- while (ancestor != null && ancestor !== document) {
233
- const curr = ancestor;
234
- if (curr.style && (curr.style.overflow !== "visible" || _Lightbox._overflow.has(curr))) {
235
- const saved = _Lightbox._overflow.get(curr) ?? { count: 0, value: curr.style.overflow, priority: curr.style.getPropertyPriority("overflow") };
236
- saved.count++;
237
- _Lightbox._overflow.set(curr, saved);
238
- this._changedAncestorList.push(curr);
239
- curr.style.overflow = "visible";
240
- }
241
- ancestor = ancestor.parentNode ?? ancestor.host;
242
- }
215
+ /**
216
+ * Shows `el` as a manual popover, so it is in the top layer: no ancestor
217
+ * clips or covers it, and it stacks above what was shown before it.
218
+ */
219
+ _showOnTop(el) {
220
+ el.setAttribute("popover", "manual");
221
+ el.showPopover();
243
222
  }
244
- _offset(el) {
245
- const box = el.getBoundingClientRect();
246
- const docElem = document.documentElement;
247
- return {
248
- top: box.top + window.scrollY - docElem.clientTop,
249
- left: box.left + window.scrollX - docElem.clientLeft
250
- };
223
+ /** The placeholder's document position, where the image rests. */
224
+ _restingPlace() {
225
+ const box = this.placeholder.getBoundingClientRect();
226
+ return { left: box.left + window.scrollX + "px", top: box.top + window.scrollY + "px" };
251
227
  }
252
228
  _updateVars() {
253
229
  this.windowWidth = window.innerWidth;
@@ -256,6 +232,7 @@ var _Lightbox = class _Lightbox extends Component {
256
232
  }
257
233
  // Image
258
234
  _animateImageIn() {
235
+ const phase = this._phase;
259
236
  this.el.style.maxHeight = this.newHeight.toString() + "px";
260
237
  this.el.style.maxWidth = this.newWidth.toString() + "px";
261
238
  const duration = this._motion.matches ? 0 : this.options.inDuration;
@@ -263,7 +240,6 @@ var _Lightbox = class _Lightbox extends Component {
263
240
  this.el.style.height = this.originalHeight + "px";
264
241
  this.el.style.width = this.originalWidth + "px";
265
242
  this._schedule(() => {
266
- const placeholderOffset = this._offset(this.placeholder);
267
243
  this.el.style.transition = `height ${duration}ms ease,
268
244
  width ${duration}ms ease,
269
245
  left ${duration}ms ease,
@@ -271,15 +247,16 @@ var _Lightbox = class _Lightbox extends Component {
271
247
  `;
272
248
  this.el.style.height = this.newHeight + "px";
273
249
  this.el.style.width = this.newWidth + "px";
274
- this.el.style.left = Utils.getDocumentScrollLeft() + this.windowWidth / 2 - placeholderOffset.left - this.newWidth / 2 + "px";
275
- this.el.style.top = Utils.getDocumentScrollTop() + this.windowHeight / 2 - placeholderOffset.top - this.newHeight / 2 + "px";
250
+ this.el.style.left = window.scrollX + (this.windowWidth - this.newWidth) / 2 + "px";
251
+ this.el.style.top = window.scrollY + (this.windowHeight - this.newHeight) / 2 + "px";
276
252
  }, 1);
277
253
  this._schedule(() => {
278
254
  this.doneAnimating = true;
279
- if (typeof this.options.onOpenEnd === "function") this.options.onOpenEnd.call(this, this.el);
255
+ this._notify("opened", this.options.onOpenEnd, { current: () => phase === this._phase });
280
256
  }, duration);
281
257
  }
282
258
  _animateImageOut() {
259
+ const phase = this._phase;
283
260
  const duration = this._motion.matches ? 0 : this.options.outDuration;
284
261
  this.el.style.transition = `height ${duration}ms ease,
285
262
  width ${duration}ms ease,
@@ -288,12 +265,10 @@ var _Lightbox = class _Lightbox extends Component {
288
265
  `;
289
266
  this.el.style.height = this.originalHeight + "px";
290
267
  this.el.style.width = this.originalWidth + "px";
291
- this.el.style.left = "0";
292
- this.el.style.top = "0";
268
+ Object.assign(this.el.style, this._restingPlace());
293
269
  this._schedule(() => {
294
270
  this._reset();
295
- if (typeof this.options.onCloseEnd === "function")
296
- this.options.onCloseEnd.call(this, this.el);
271
+ this._notify("closed", this.options.onCloseEnd, { current: () => phase === this._phase });
297
272
  }, duration);
298
273
  }
299
274
  // Caption
@@ -303,6 +278,7 @@ var _Lightbox = class _Lightbox extends Component {
303
278
  this._photoCaption.innerText = this.caption;
304
279
  Utils.portalRoot(this.el).append(this._photoCaption);
305
280
  this._photoCaption.style.display = "inline";
281
+ this._showOnTop(this._photoCaption);
306
282
  this._fadeIn(this._photoCaption);
307
283
  }
308
284
  // Overlay
@@ -318,11 +294,7 @@ var _Lightbox = class _Lightbox extends Component {
318
294
  { once: true }
319
295
  );
320
296
  this.el.before(this._overlay);
321
- const overlayOffset = this._overlay.getBoundingClientRect();
322
- this._overlay.style.width = this.windowWidth + "px";
323
- this._overlay.style.height = this.windowHeight + "px";
324
- this._overlay.style.left = -1 * overlayOffset.left + "px";
325
- this._overlay.style.top = -1 * overlayOffset.top + "px";
297
+ this._showOnTop(this._overlay);
326
298
  this._fadeIn(this._overlay);
327
299
  }
328
300
  _fadeIn(el) {
@@ -340,10 +312,9 @@ var _Lightbox = class _Lightbox extends Component {
340
312
  el.style.opacity = "0";
341
313
  }
342
314
  };
343
- _Lightbox._overflow = /* @__PURE__ */ new WeakMap();
344
- var Lightbox = _Lightbox;
315
+ Lightbox.key = "Expressive_Lightbox";
345
316
 
346
317
  export {
347
318
  Lightbox
348
319
  };
349
- //# sourceMappingURL=chunk-SFI2U4YW.mjs.map
320
+ //# sourceMappingURL=chunk-MA2SZZFB.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/components/lightbox.ts"],
4
+ "sourcesContent": ["import { Utils, controllerFor, deepActiveElement, restoreAttribute } from '../core/utils';\nimport { BaseOptions, Component } from '../core/component';\n\nexport interface LightboxOptions extends BaseOptions {\n /**\n * Transition in duration in milliseconds.\n * @default 275\n */\n inDuration: number;\n /**\n * Transition out duration in milliseconds.\n * @default 200\n */\n outDuration: number;\n /**\n * Callback function called before lightbox is opened.\n * @default null\n */\n onOpenStart: (el: Element) => void;\n /**\n * Callback function called after lightbox is opened.\n * @default null\n */\n onOpenEnd: (el: Element) => void;\n /**\n * Callback function called before lightbox is closed.\n * @default null\n */\n onCloseStart: (el: Element) => void;\n /**\n * Callback function called after lightbox is closed.\n * @default null\n */\n onCloseEnd: (el: Element) => void;\n}\n\nconst _defaults: LightboxOptions = {\n inDuration: 275,\n outDuration: 200,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null\n};\n\nexport class Lightbox extends Component<LightboxOptions> {\n /** If the lightbox overlay is showing. */\n overlayActive: boolean;\n /** If the lightbox is no longer being animated. */\n doneAnimating: boolean;\n /** Caption, if specified. */\n caption: string;\n /** Original width of image. */\n originalWidth: number;\n /** Original height of image. */\n originalHeight: number;\n private originInlineStyles: string;\n private placeholder: HTMLElement;\n private newHeight: number;\n private newWidth: number;\n private windowWidth: number;\n private windowHeight: number;\n private attrWidth: string;\n private attrHeight: string;\n private _overlay: HTMLElement;\n private _photoCaption: HTMLElement;\n private _trigger: HTMLElement;\n private _tabindex: string | null;\n private _timers = new Map<ReturnType<typeof setTimeout>, () => void>();\n private _motion = window.matchMedia('(prefers-reduced-motion: reduce)');\n private _isOpen = false;\n private _destroyed = false;\n /** Removes the listeners that close an open lightbox. */\n private _windowEvents: AbortController | undefined;\n private _revision = 0;\n // Counts opens and closes only. _revision also moves when reduced motion\n // flushes a transition, which must still report its end.\n private _phase = 0;\n\n constructor(el: HTMLElement, options: Partial<LightboxOptions>) {\n super(el, options);\n\n this.overlayActive = false;\n this.doneAnimating = true;\n this.placeholder = document.createElement('div');\n this.placeholder.classList.add('material-placeholder');\n this.originalWidth = 0;\n this.originalHeight = 0;\n this.originInlineStyles = this.el.getAttribute('style');\n this.caption = this.el.getAttribute('data-caption') || '';\n this._tabindex = this.el.getAttribute('tabindex');\n this._trigger = this.el.closest('button') ?? this.el;\n this.el.tabIndex = this._trigger === this.el ? 0 : -1;\n // Wrap\n this.el.before(this.placeholder);\n this.placeholder.append(this.el);\n this._setupEventHandlers();\n }\n\n static get defaults(): LightboxOptions {\n return _defaults;\n }\n\n static key = 'Expressive_Lightbox';\n\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n const focused = (this.el.getRootNode() as Document | ShadowRoot).activeElement === this.el;\n this._cancel();\n this._reset();\n this.placeholder.replaceWith(this.el);\n if (focused) this._restoreFocus();\n restoreAttribute(this.el, 'tabindex', this._tabindex);\n super.destroy();\n }\n\n // Back to the trigger when focus fell to the body (or the shadow host), as\n // a click on the overlay, which cannot take focus, leaves it.\n private _restoreFocus() {\n const root = this.el.getRootNode() as Document | ShadowRoot;\n const active = deepActiveElement(document);\n if ([document.body, (root as ShadowRoot).host].includes(active)) this._trigger.focus({ preventScroll: true });\n }\n\n private _reset() {\n this._windowEvents?.abort();\n // Removing a popover, or its attribute, takes it out of the top layer.\n this._overlay?.remove();\n this._photoCaption?.remove();\n this.el.removeAttribute('popover');\n if (this.attrWidth != null) this.el.setAttribute('width', this.attrWidth);\n if (this.attrHeight != null) this.el.setAttribute('height', this.attrHeight);\n this.el.classList.remove('active');\n this.placeholder.removeAttribute('style');\n restoreAttribute(this.el, 'style', this.originInlineStyles);\n this.overlayActive = false;\n this._isOpen = false;\n this.doneAnimating = true;\n }\n\n private _cancel() {\n for (const timer of this._timers.keys()) clearTimeout(timer);\n this._timers.clear();\n return ++this._revision;\n }\n\n private _schedule(callback: () => void, delay: number) {\n if (this._motion.matches) { callback(); return; }\n const timer = setTimeout(() => { this._timers.delete(timer); callback(); }, delay);\n this._timers.set(timer, callback);\n }\n\n private _handleMotionChange = () => {\n if (!this._motion.matches) return;\n const callbacks = [...this._timers.values()];\n const revision = this._cancel();\n for (const callback of callbacks) {\n if (revision !== this._revision) break;\n callback();\n }\n if (this.overlayActive) {\n for (const el of [this.el, this._overlay, this._photoCaption]) if (el) el.style.transition = 'none';\n }\n };\n\n private _setupEventHandlers() {\n const { signal } = this._events;\n this._motion.addEventListener('change', this._handleMotionChange, { signal });\n this._trigger.addEventListener('click', this._handleLightboxToggle, { signal });\n this.el.addEventListener('keydown', this._handleLightboxKeypress, { signal });\n }\n\n private _handleLightboxKeypress = (e: KeyboardEvent) => {\n if (this._trigger === this.el && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n this._handleLightboxToggle();\n }\n };\n\n private _handleLightboxToggle = () => {\n // If already modal, return to original\n if (this._isOpen) this.close();\n else this.open();\n };\n\n private _handleWindowChange = () => {\n if (this.overlayActive) this.close();\n };\n\n // On keydown, and taken, so a dialog around the lightbox does not close on\n // the same press.\n private _handleWindowEscape = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n e.preventDefault();\n this.close();\n };\n\n // The image zooms in place, not in a modal, so Tab would reach the page\n // behind the overlay. Tab closes it instead, then moves focus as usual.\n private _handleWindowTab = (e: KeyboardEvent) => {\n if (e.key === 'Tab') this.close();\n };\n\n /**\n * Shows `el` as a manual popover, so it is in the top layer: no ancestor\n * clips or covers it, and it stacks above what was shown before it.\n */\n private _showOnTop(el: HTMLElement) {\n el.setAttribute('popover', 'manual');\n el.showPopover();\n }\n\n /** The placeholder's document position, where the image rests. */\n private _restingPlace() {\n const box = this.placeholder.getBoundingClientRect();\n return { left: box.left + window.scrollX + 'px', top: box.top + window.scrollY + 'px' };\n }\n\n private _updateVars(): void {\n this.windowWidth = window.innerWidth;\n this.windowHeight = window.innerHeight;\n this.caption = this.el.getAttribute('data-caption') || '';\n }\n\n // Image\n private _animateImageIn(): void {\n const phase = this._phase;\n this.el.style.maxHeight = this.newHeight.toString() + 'px';\n this.el.style.maxWidth = this.newWidth.toString() + 'px';\n const duration = this._motion.matches ? 0 : this.options.inDuration;\n // from\n this.el.style.transition = 'none';\n this.el.style.height = this.originalHeight + 'px';\n this.el.style.width = this.originalWidth + 'px';\n this._schedule(() => {\n // easeOutQuad\n this.el.style.transition = `height ${duration}ms ease,\n width ${duration}ms ease,\n left ${duration}ms ease,\n top ${duration}ms ease\n `;\n // to\n this.el.style.height = this.newHeight + 'px';\n this.el.style.width = this.newWidth + 'px';\n this.el.style.left = window.scrollX + (this.windowWidth - this.newWidth) / 2 + 'px';\n this.el.style.top = window.scrollY + (this.windowHeight - this.newHeight) / 2 + 'px';\n }, 1);\n\n this._schedule(() => {\n this.doneAnimating = true;\n this._notify('opened', this.options.onOpenEnd, { current: () => phase === this._phase });\n }, duration);\n\n }\n private _animateImageOut(): void {\n const phase = this._phase;\n const duration = this._motion.matches ? 0 : this.options.outDuration;\n // easeOutQuad\n this.el.style.transition = `height ${duration}ms ease,\n width ${duration}ms ease,\n left ${duration}ms ease,\n top ${duration}ms ease\n `;\n // to\n this.el.style.height = this.originalHeight + 'px'; // was originalWidth\n this.el.style.width = this.originalWidth + 'px';\n Object.assign(this.el.style, this._restingPlace());\n this._schedule(() => {\n this._reset();\n // onCloseEnd callback\n this._notify('closed', this.options.onCloseEnd, { current: () => phase === this._phase });\n }, duration);\n }\n\n // Caption\n private _addCaption(): void {\n this._photoCaption = document.createElement('div');\n this._photoCaption.classList.add('lightbox-caption');\n this._photoCaption.innerText = this.caption;\n Utils.portalRoot(this.el).append(this._photoCaption);\n this._photoCaption.style.display = 'inline';\n this._showOnTop(this._photoCaption);\n this._fadeIn(this._photoCaption);\n }\n\n // Overlay\n private _addOverlay(): void {\n this._overlay = document.createElement('div');\n this._overlay.id = 'lightbox-overlay';\n this._overlay.addEventListener(\n 'click',\n (event) => {\n event.stopPropagation();\n this.close();\n },\n { once: true }\n );\n\n this.el.before(this._overlay);\n this._showOnTop(this._overlay);\n this._fadeIn(this._overlay);\n }\n\n private _fadeIn(el: HTMLElement): void {\n el.style.transition = 'none';\n el.style.opacity = '0';\n const duration = this._motion.matches ? 0 : this.options.inDuration;\n this._schedule(() => {\n el.style.transition = `opacity ${duration}ms ease`;\n el.style.opacity = '1';\n }, 1);\n }\n\n private _fadeOut(el: HTMLElement): void {\n const duration = this._motion.matches ? 0 : this.options.outDuration;\n el.style.transition = `opacity ${duration}ms ease`;\n el.style.opacity = '0';\n }\n\n /**\n * Open lightbox.\n */\n open = () => {\n if (this._destroyed || this._isOpen) return;\n this._phase++;\n const revision = this._cancel();\n if (this.overlayActive) this._reset();\n this._updateVars();\n // Both rects are read up front: measuring the placeholder after writing\n // its width forced a second layout for the height.\n const originRect = this.el.getBoundingClientRect();\n const placeholderRect = this.placeholder.getBoundingClientRect();\n // An image not yet loaded, or hidden, has no size to zoom from; the\n // ratios below would be 0 / 0.\n if (!originRect.width || !originRect.height) return;\n this._isOpen = true;\n this.originalWidth = originRect.width;\n this.originalHeight = originRect.height;\n // Set states\n this.doneAnimating = false;\n this.el.classList.add('active');\n this.overlayActive = true;\n // onOpenStart callback\n if (!this._notify('open', this.options.onOpenStart, { current: () => revision === this._revision })) return;\n // Set positioning for placeholder\n this.placeholder.style.width = placeholderRect.width + 'px';\n this.placeholder.style.height = placeholderRect.height + 'px';\n // In the top layer the image is positioned in the document, starting\n // where the placeholder holds its place.\n this.el.style.position = 'absolute';\n this.el.style.inset = 'auto';\n this.el.style.left = placeholderRect.left + window.scrollX + 'px';\n this.el.style.top = placeholderRect.top + window.scrollY + 'px';\n this.el.style.willChange = 'left, top, width, height';\n // Change from width or height attribute to css\n this.attrWidth = this.el.getAttribute('width');\n this.attrHeight = this.el.getAttribute('height');\n if (this.attrWidth) {\n this.el.style.width = this.attrWidth + 'px';\n this.el.removeAttribute('width');\n }\n if (this.attrHeight) {\n this.el.style.height = this.attrHeight + 'px'; // was width, from the height attribute\n this.el.removeAttribute('height');\n }\n // The overlay, the image and the caption go into the top layer in that\n // order, so each stacks above the one before.\n this._addOverlay();\n this._showOnTop(this.el);\n if (this.caption !== '') this._addCaption();\n // Resize Image\n const widthPercent = this.originalWidth / this.windowWidth;\n const heightPercent = this.originalHeight / this.windowHeight;\n if (widthPercent > heightPercent) {\n // Width first\n const ratio = this.originalHeight / this.originalWidth;\n this.newWidth = this.windowWidth * 0.9;\n this.newHeight = this.windowWidth * 0.9 * ratio;\n } else {\n // Height first\n const ratio = this.originalWidth / this.originalHeight;\n this.newWidth = this.windowHeight * 0.9 * ratio;\n this.newHeight = this.windowHeight * 0.9;\n }\n // Handle Exit triggers\n this._windowEvents?.abort();\n this._windowEvents = controllerFor(this.el);\n const { signal } = this._windowEvents;\n window.addEventListener('scroll', this._handleWindowChange, { passive: true, signal });\n window.addEventListener('resize', this._handleWindowChange, { passive: true, signal });\n window.addEventListener('keydown', this._handleWindowEscape, { signal });\n window.addEventListener('keydown', this._handleWindowTab, { signal });\n this._animateImageIn();\n };\n\n /**\n * Close lightbox.\n */\n close = () => {\n if (this._destroyed || !this._isOpen) return;\n this._phase++;\n const revision = this._cancel();\n this._isOpen = false;\n this.doneAnimating = false;\n // onCloseStart callback\n if (!this._notify('close', this.options.onCloseStart, { current: () => revision === this._revision })) return;\n // disable exit handlers\n this._windowEvents?.abort();\n this._restoreFocus();\n if (this._overlay) this._fadeOut(this._overlay);\n if (this._photoCaption) this._fadeOut(this._photoCaption);\n this._animateImageOut();\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,121 @@
1
+ import {
2
+ Component
3
+ } from "./chunk-EB2V4OKL.mjs";
4
+ import {
5
+ afterFormReset
6
+ } from "./chunk-67UNY7RH.mjs";
7
+
8
+ // src/ts/components/inputMask.ts
9
+ var _defaults = Object.freeze({});
10
+ var SLOTS = { "0": /[0-9]/, a: /\p{L}/u, "*": /[0-9\p{L}]/u };
11
+ var DELETES = { deleteContentBackward: -1, deleteContentForward: 1 };
12
+ var deleteStep = (e) => e.isComposing || !e.cancelable ? void 0 : DELETES[e.inputType];
13
+ var parse = (mask) => (mask.match(/\\[^]|[^]/gu) ?? []).map((part) => SLOTS[part] ? { accepts: SLOTS[part] } : { literal: part.slice(-1) });
14
+ function landing(tokens, t, ch) {
15
+ if (tokens[t]?.literal === ch) return t;
16
+ const slot = tokens.findIndex((token, i) => i >= t && "accepts" in token);
17
+ return slot < 0 ? tokens.length : slot;
18
+ }
19
+ function place(tokens, t, ch, chars) {
20
+ const at = landing(tokens, t, ch);
21
+ const token = tokens[at];
22
+ if (!token) return t;
23
+ if ("literal" in token) return at + 1;
24
+ if (!token.accepts.test(ch)) return t;
25
+ chars.push(ch);
26
+ return at + 1;
27
+ }
28
+ function read(tokens, value, caret) {
29
+ const chars = [];
30
+ let t = 0;
31
+ let at = 0;
32
+ let before = 0;
33
+ for (const typed of value) {
34
+ for (const ch of typed.normalize("NFKC")) t = place(tokens, t, ch, chars);
35
+ at += typed.length;
36
+ if (at <= caret) before = chars.length;
37
+ }
38
+ return { chars, before };
39
+ }
40
+ function write(tokens, chars) {
41
+ let text = "";
42
+ let pending = "";
43
+ const ends = [];
44
+ for (const token of tokens) {
45
+ if (ends.length === chars.length) break;
46
+ if ("literal" in token) pending += token.literal;
47
+ else {
48
+ text += pending + chars[ends.length];
49
+ pending = "";
50
+ ends.push(text.length);
51
+ }
52
+ }
53
+ return { text, ends };
54
+ }
55
+ var InputMask = class extends Component {
56
+ constructor(el, options) {
57
+ super(el, options);
58
+ this._onInput = (e) => {
59
+ if (!e.isComposing) this._format();
60
+ };
61
+ /**
62
+ * Backspace after a literal, or Delete before one, would remove the
63
+ * literal, which the mask then writes back. It removes the slot character
64
+ * across the literal instead.
65
+ */
66
+ this._onBeforeInput = (e) => {
67
+ const step = deleteStep(e);
68
+ const index = step && this.el.selectionStart === this.el.selectionEnd ? this._acrossLiteral(step) : -1;
69
+ if (index < 0) return;
70
+ e.preventDefault();
71
+ this._remove(index, e.inputType);
72
+ };
73
+ this._format = () => {
74
+ const caret = this._rewrite();
75
+ if (caret !== null && this.el.ownerDocument.activeElement === this.el) this.el.setSelectionRange(caret, caret);
76
+ };
77
+ this._tokens = parse(el.dataset.mask ?? "");
78
+ if (!this._tokens.some((token) => "accepts" in token)) return;
79
+ const signal = this._events.signal;
80
+ el.addEventListener("input", this._onInput, { capture: true, signal });
81
+ el.addEventListener("compositionend", this._format, { signal });
82
+ el.addEventListener("beforeinput", this._onBeforeInput, { signal });
83
+ afterFormReset(el, () => this._rewrite(), signal);
84
+ this._rewrite();
85
+ }
86
+ static get defaults() {
87
+ return _defaults;
88
+ }
89
+ /** The index among the slot characters to delete when the character `step` from the caret is a literal, or -1. */
90
+ _acrossLiteral(step) {
91
+ const { selectionStart: caret, value } = this.el;
92
+ const here = read(this._tokens, value, caret);
93
+ const index = here.before + Math.min(step, 0);
94
+ return read(this._tokens, value, caret + step).before === here.before && index in here.chars ? index : -1;
95
+ }
96
+ /** Removes slot character `index`, puts the caret where it was, and reports the edit as typing would. */
97
+ _remove(index, inputType) {
98
+ const { chars } = read(this._tokens, this.el.value, 0);
99
+ chars.splice(index, 1);
100
+ const { text, ends } = write(this._tokens, chars);
101
+ this.el.value = text;
102
+ const caret = ends[index - 1] ?? 0;
103
+ this.el.setSelectionRange(caret, caret);
104
+ this.el.dispatchEvent(new InputEvent("input", { bubbles: true, composed: true, inputType }));
105
+ }
106
+ /** Rewrites the value to the mask. Returns where the caret goes, or null when the value already fit. */
107
+ _rewrite() {
108
+ const el = this.el;
109
+ const { chars, before } = read(this._tokens, el.value, el.selectionEnd ?? el.value.length);
110
+ const { text, ends } = write(this._tokens, chars);
111
+ if (text === el.value) return null;
112
+ el.value = text;
113
+ return ends[before - 1] ?? 0;
114
+ }
115
+ };
116
+ InputMask.key = "Expressive_InputMask";
117
+
118
+ export {
119
+ InputMask
120
+ };
121
+ //# sourceMappingURL=chunk-MDBZAMIV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/components/inputMask.ts"],
4
+ "sourcesContent": ["import { Component, BaseOptions } from '../core/component';\nimport { afterFormReset } from '../core/utils';\n\nconst _defaults = Object.freeze({});\n\n/** A mask position: a slot that takes the characters `accepts` matches, or a literal the mask writes itself. */\ntype Token = { accepts: RegExp } | { literal: string };\n\n/** What each slot character in a mask accepts. */\nconst SLOTS: Record<string, RegExp> = { '0': /[0-9]/, a: /\\p{L}/u, '*': /[0-9\\p{L}]/u };\n\n/** Which way a one-character delete from a collapsed caret goes. */\nconst DELETES: Record<string, number> = { deleteContentBackward: -1, deleteContentForward: 1 };\n/** How a delete moves, unless it is the IME's or cannot be taken over. */\nconst deleteStep = (e: InputEvent) => (e.isComposing || !e.cancelable ? undefined : DELETES[e.inputType]);\n\n/** Splits a mask into tokens. A backslash makes the character after it a literal. */\nconst parse = (mask: string): Token[] =>\n (mask.match(/\\\\[^]|[^]/gu) ?? []).map((part) => (SLOTS[part] ? { accepts: SLOTS[part] } : { literal: part.slice(-1) }));\n\n/**\n * The token `ch` lands on from token `t`: the literal at `t` when `ch` is that\n * literal, otherwise the next slot. Only the literal at `t` counts, so a\n * digit is not taken for a literal further on, such as the 1 in `+1 (000)`.\n */\nfunction landing(tokens: Token[], t: number, ch: string) {\n if ((tokens[t] as { literal?: string })?.literal === ch) return t;\n const slot = tokens.findIndex((token, i) => i >= t && 'accepts' in token);\n return slot < 0 ? tokens.length : slot;\n}\n\n/** Feeds `ch` to the mask at token `t`, keeping it in `chars` if a slot takes it. Returns the next token. */\nfunction place(tokens: Token[], t: number, ch: string, chars: string[]) {\n const at = landing(tokens, t, ch);\n const token = tokens[at];\n if (!token) return t;\n if ('literal' in token) return at + 1;\n if (!token.accepts.test(ch)) return t;\n chars.push(ch);\n return at + 1;\n}\n\n/**\n * The slot characters in `value`, in order, and how many of them come before\n * `caret`. Characters are normalized first, so full-width digits from an IME\n * fill digit slots. A character that neither fits a slot nor matches the next\n * literal is dropped, and so is any past the last slot.\n */\nfunction read(tokens: Token[], value: string, caret: number) {\n const chars: string[] = [];\n let t = 0;\n let at = 0;\n let before = 0;\n for (const typed of value) {\n for (const ch of typed.normalize('NFKC')) t = place(tokens, t, ch, chars);\n at += typed.length;\n if (at <= caret) before = chars.length;\n }\n return { chars, before };\n}\n\n/**\n * Writes `chars` into the mask's slots, with the literals that come before\n * each filled slot and none after the last. Returns the text and the index\n * just after each slot character.\n */\nfunction write(tokens: Token[], chars: string[]) {\n let text = '';\n let pending = '';\n const ends: number[] = [];\n for (const token of tokens) {\n if (ends.length === chars.length) break;\n if ('literal' in token) pending += token.literal;\n else {\n text += pending + chars[ends.length];\n pending = '';\n ends.push(text.length);\n }\n }\n return { text, ends };\n}\n\n/**\n * Input mask. Formats a text field's value to the pattern in its `data-mask`\n * attribute as people type, paste or compose: `0` takes a digit, `a` a\n * letter, `*` either, and every other character is a literal the mask writes\n * itself. The form submits the value as the field shows it.\n */\nexport class InputMask extends Component<BaseOptions> {\n declare el: HTMLInputElement;\n static key = 'Expressive_InputMask';\n private _tokens: Token[];\n\n constructor(el: HTMLInputElement, options: Partial<BaseOptions>) {\n super(el, options);\n this._tokens = parse(el.dataset.mask ?? '');\n // A mask with no slot would format every value to nothing, erasing a\n // saved value, so the component leaves such a field alone.\n if (!this._tokens.some((token) => 'accepts' in token)) return;\n const signal = this._events.signal;\n // Capture, which runs before the field's own bubble listeners, so the\n // page's input listeners read the formatted value.\n el.addEventListener('input', this._onInput, { capture: true, signal });\n // An IME writes as it composes; the mask waits until it is done. Engines\n // fire the last input before or after compositionend, and formatting\n // twice changes nothing.\n el.addEventListener('compositionend', this._format, { signal });\n el.addEventListener('beforeinput', this._onBeforeInput, { signal });\n // The mask formats the value a reset restores, in a shadow root too.\n afterFormReset(el, () => this._rewrite(), signal);\n this._rewrite();\n }\n\n static get defaults(): BaseOptions {\n return _defaults;\n }\n\n private _onInput = (e: InputEvent) => {\n if (!e.isComposing) this._format();\n };\n\n /**\n * Backspace after a literal, or Delete before one, would remove the\n * literal, which the mask then writes back. It removes the slot character\n * across the literal instead.\n */\n private _onBeforeInput = (e: InputEvent) => {\n const step = deleteStep(e);\n const index = step && this.el.selectionStart === this.el.selectionEnd ? this._acrossLiteral(step) : -1;\n if (index < 0) return;\n e.preventDefault();\n this._remove(index, e.inputType);\n };\n\n /** The index among the slot characters to delete when the character `step` from the caret is a literal, or -1. */\n private _acrossLiteral(step: number) {\n const { selectionStart: caret, value } = this.el;\n const here = read(this._tokens, value, caret);\n const index = here.before + Math.min(step, 0);\n // Stepping over a literal passes no slot character.\n return read(this._tokens, value, caret + step).before === here.before && index in here.chars ? index : -1;\n }\n\n /** Removes slot character `index`, puts the caret where it was, and reports the edit as typing would. */\n private _remove(index: number, inputType: string) {\n const { chars } = read(this._tokens, this.el.value, 0);\n chars.splice(index, 1);\n const { text, ends } = write(this._tokens, chars);\n this.el.value = text;\n const caret = ends[index - 1] ?? 0;\n this.el.setSelectionRange(caret, caret);\n this.el.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true, inputType }));\n }\n\n private _format = () => {\n const caret = this._rewrite();\n if (caret !== null && this.el.ownerDocument.activeElement === this.el) this.el.setSelectionRange(caret, caret);\n };\n\n /** Rewrites the value to the mask. Returns where the caret goes, or null when the value already fit. */\n private _rewrite() {\n const el = this.el;\n const { chars, before } = read(this._tokens, el.value, el.selectionEnd ?? el.value.length);\n const { text, ends } = write(this._tokens, chars);\n if (text === el.value) return null;\n el.value = text;\n return ends[before - 1] ?? 0;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,75 @@
1
+ import {
2
+ Component
3
+ } from "./chunk-EB2V4OKL.mjs";
4
+
5
+ // src/ts/components/loadingOverlay.ts
6
+ var _defaults = {
7
+ i18n: {
8
+ loading: "Loading",
9
+ loaded: "Loaded"
10
+ }
11
+ };
12
+ var focusLost = (doc) => !doc.activeElement || doc.activeElement === doc.body;
13
+ var LoadingOverlay = class extends Component {
14
+ constructor(el, options) {
15
+ super(el, options);
16
+ this._busy = false;
17
+ /** The region's own `inert`, put back when it clears. */
18
+ this._wasInert = false;
19
+ /** The element inside the region that had focus when it became busy. */
20
+ this._focus = null;
21
+ this._status = el.ownerDocument.createElement("span");
22
+ this._status.className = "loading-overlay-status";
23
+ this._status.setAttribute("role", "status");
24
+ el.after(this._status);
25
+ this._observer = new MutationObserver(() => this._sync());
26
+ this._observer.observe(el, { attributeFilter: ["aria-busy"] });
27
+ this._sync();
28
+ if (this._busy) {
29
+ this._status.textContent = "";
30
+ requestAnimationFrame(() => this._announceStart());
31
+ }
32
+ }
33
+ static get defaults() {
34
+ return _defaults;
35
+ }
36
+ destroy() {
37
+ this._observer.disconnect();
38
+ if (this._busy) this.el.inert = this._wasInert;
39
+ this._status.remove();
40
+ super.destroy();
41
+ }
42
+ /** Follows `aria-busy`. Other values than "true" clear, as ARIA treats them. */
43
+ _sync() {
44
+ const busy = this.el.getAttribute("aria-busy") === "true";
45
+ if (busy === this._busy) return;
46
+ this._busy = busy;
47
+ if (busy) this._start();
48
+ else this._clear();
49
+ }
50
+ _start() {
51
+ const active = this.el.getRootNode().activeElement;
52
+ this._focus = active instanceof HTMLElement && this.el.contains(active) ? active : null;
53
+ this._wasInert = this.el.inert;
54
+ this.el.inert = true;
55
+ this._focus?.blur();
56
+ this._status.textContent = this.options.i18n.loading;
57
+ }
58
+ _clear() {
59
+ this.el.inert = this._wasInert;
60
+ this._status.textContent = this.options.i18n.loaded;
61
+ const focus = this._focus;
62
+ this._focus = null;
63
+ if (focus?.isConnected && focusLost(this.el.ownerDocument)) focus.focus();
64
+ }
65
+ /** The deferred first announcement, unless the region cleared or the instance went first. */
66
+ _announceStart() {
67
+ if (this._busy && this._status.isConnected) this._status.textContent = this.options.i18n.loading;
68
+ }
69
+ };
70
+ LoadingOverlay.key = "Expressive_LoadingOverlay";
71
+
72
+ export {
73
+ LoadingOverlay
74
+ };
75
+ //# sourceMappingURL=chunk-NODZ5VAD.mjs.map