@expressivecss/expressive 0.16.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 (384) hide show
  1. package/CHANGELOG.md +306 -1
  2. package/README.md +1 -1
  3. package/dist/css/expressive.css +540 -646
  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/js/chunks/{chunk-PA7NU5AK.mjs → chunk-26VUH75M.mjs} +6 -3
  8. package/dist/js/chunks/chunk-26VUH75M.mjs.map +7 -0
  9. package/dist/js/chunks/{chunk-NBJAUGPP.mjs → chunk-2LFCOGC3.mjs} +12 -23
  10. package/dist/js/chunks/chunk-2LFCOGC3.mjs.map +7 -0
  11. package/dist/js/chunks/{chunk-OP43LLIC.mjs → chunk-36GELQGX.mjs} +4 -4
  12. package/dist/js/chunks/{chunk-OP43LLIC.mjs.map → chunk-36GELQGX.mjs.map} +2 -2
  13. package/dist/js/chunks/{chunk-EC26RU2D.mjs → chunk-3FKWIRHW.mjs} +6 -2
  14. package/dist/js/chunks/chunk-3FKWIRHW.mjs.map +7 -0
  15. package/dist/js/chunks/{chunk-Y6H2X7ZC.mjs → chunk-3KF65KGL.mjs} +3 -3
  16. package/dist/js/chunks/{chunk-4QUCNFSD.mjs → chunk-3KLZRQZI.mjs} +31 -10
  17. package/dist/js/chunks/chunk-3KLZRQZI.mjs.map +7 -0
  18. package/dist/js/chunks/{chunk-75E5EDJF.mjs → chunk-3XORNED5.mjs} +2 -2
  19. package/dist/js/chunks/{chunk-NNHVANQA.mjs → chunk-4WBGAQN3.mjs} +3 -3
  20. package/dist/js/chunks/{chunk-ZJNLAGY5.mjs → chunk-5F4URJHL.mjs} +2 -2
  21. package/dist/js/chunks/{chunk-ZVLOUDIJ.mjs → chunk-67UNY7RH.mjs} +50 -2
  22. package/dist/js/chunks/chunk-67UNY7RH.mjs.map +7 -0
  23. package/dist/js/chunks/{chunk-P6DRQ6KS.mjs → chunk-7CXNATJS.mjs} +6 -5
  24. package/dist/js/chunks/chunk-7CXNATJS.mjs.map +7 -0
  25. package/dist/js/chunks/{chunk-4TRZ2AER.mjs → chunk-7X44MKEQ.mjs} +15 -14
  26. package/dist/js/chunks/chunk-7X44MKEQ.mjs.map +7 -0
  27. package/dist/js/chunks/{chunk-GWZ76SR4.mjs → chunk-7ZAMOMGY.mjs} +12 -7
  28. package/dist/js/chunks/chunk-7ZAMOMGY.mjs.map +7 -0
  29. package/dist/js/chunks/{chunk-GVZQH2H5.mjs → chunk-AEG6LOAJ.mjs} +2 -2
  30. package/dist/js/chunks/{chunk-Y6TLRA3U.mjs → chunk-AQNFCJJ5.mjs} +27 -21
  31. package/dist/js/chunks/chunk-AQNFCJJ5.mjs.map +7 -0
  32. package/dist/js/chunks/{chunk-OUCHKSAW.mjs → chunk-B55LWKBM.mjs} +16 -4
  33. package/dist/js/chunks/chunk-B55LWKBM.mjs.map +7 -0
  34. package/dist/js/chunks/{chunk-AI73GJKG.mjs → chunk-BB5VXYXT.mjs} +2 -2
  35. package/dist/js/chunks/{chunk-2RLBDFH4.mjs → chunk-BDATLH3H.mjs} +4 -4
  36. package/dist/js/chunks/{chunk-2CS6TITK.mjs → chunk-CWMQOT4O.mjs} +23 -10
  37. package/dist/js/chunks/chunk-CWMQOT4O.mjs.map +7 -0
  38. package/dist/js/chunks/{chunk-ZKWUWBUB.mjs → chunk-CY2CTOVM.mjs} +2 -2
  39. package/dist/js/chunks/{chunk-CSYWKEK3.mjs → chunk-DWA5UYLJ.mjs} +58 -27
  40. package/dist/js/chunks/chunk-DWA5UYLJ.mjs.map +7 -0
  41. package/dist/js/chunks/{chunk-CMGXGYUC.mjs → chunk-EB2V4OKL.mjs} +14 -9
  42. package/dist/js/chunks/chunk-EB2V4OKL.mjs.map +7 -0
  43. package/dist/js/chunks/{chunk-Z4GICXR2.mjs → chunk-EWO662ZC.mjs} +5 -7
  44. package/dist/js/chunks/chunk-EWO662ZC.mjs.map +7 -0
  45. package/dist/js/chunks/{chunk-VGY4M57S.mjs → chunk-F7LAKFMX.mjs} +67 -34
  46. package/dist/js/chunks/chunk-F7LAKFMX.mjs.map +7 -0
  47. package/dist/js/chunks/{chunk-67ZPPKXS.mjs → chunk-FNIIH2LU.mjs} +3 -3
  48. package/dist/js/chunks/chunk-GE3YMFS6.mjs +15 -0
  49. package/dist/js/chunks/chunk-GE3YMFS6.mjs.map +7 -0
  50. package/dist/js/chunks/{chunk-DZYVU75J.mjs → chunk-GFWYMWYN.mjs} +18 -14
  51. package/dist/js/chunks/chunk-GFWYMWYN.mjs.map +7 -0
  52. package/dist/js/chunks/{chunk-3L3QIYLC.mjs → chunk-H5ISU45X.mjs} +8 -6
  53. package/dist/js/chunks/chunk-H5ISU45X.mjs.map +7 -0
  54. package/dist/js/chunks/{chunk-QXKWVHBD.mjs → chunk-H6YIKFAQ.mjs} +67 -46
  55. package/dist/js/chunks/chunk-H6YIKFAQ.mjs.map +7 -0
  56. package/dist/js/chunks/{chunk-KZPSAXIU.mjs → chunk-HEH7E3KO.mjs} +22 -12
  57. package/dist/js/chunks/chunk-HEH7E3KO.mjs.map +7 -0
  58. package/dist/js/chunks/{chunk-T3BNSRP3.mjs → chunk-HQRLBTNM.mjs} +3 -3
  59. package/dist/js/chunks/{chunk-NAC72P7R.mjs → chunk-I2F7MLUU.mjs} +2 -2
  60. package/dist/js/chunks/{chunk-ZM3XBHWV.mjs → chunk-IQOTGGHX.mjs} +86 -35
  61. package/dist/js/chunks/chunk-IQOTGGHX.mjs.map +7 -0
  62. package/dist/js/chunks/{chunk-QACZ6TUP.mjs → chunk-JH3YWKA6.mjs} +5 -4
  63. package/dist/js/chunks/chunk-JH3YWKA6.mjs.map +7 -0
  64. package/dist/js/chunks/chunk-JOLJAYIJ.mjs +7 -0
  65. package/dist/js/chunks/{chunk-4IKVPCSU.mjs.map → chunk-JOLJAYIJ.mjs.map} +1 -1
  66. package/dist/js/chunks/{chunk-BPF3I2MN.mjs → chunk-KOTGMCMI.mjs} +9 -2
  67. package/dist/js/chunks/chunk-KOTGMCMI.mjs.map +7 -0
  68. package/dist/js/chunks/{chunk-ANKFWNWT.mjs → chunk-LC4O5LFS.mjs} +3 -3
  69. package/dist/js/chunks/{chunk-4PIXLDNJ.mjs → chunk-LEF33SCP.mjs} +2 -2
  70. package/dist/js/chunks/{chunk-ILDRRG7T.mjs → chunk-LFORZRPH.mjs} +3 -3
  71. package/dist/js/chunks/{chunk-Z4OARDZ7.mjs → chunk-LWLNV5EC.mjs} +26 -17
  72. package/dist/js/chunks/chunk-LWLNV5EC.mjs.map +7 -0
  73. package/dist/js/chunks/{chunk-WU7XJ4RR.mjs → chunk-LXRHUQAX.mjs} +66 -25
  74. package/dist/js/chunks/chunk-LXRHUQAX.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-VMY55K2X.mjs → chunk-MA2SZZFB.mjs} +11 -7
  76. package/dist/js/chunks/chunk-MA2SZZFB.mjs.map +7 -0
  77. package/dist/js/chunks/{chunk-VJVQIXHC.mjs → chunk-MDBZAMIV.mjs} +8 -10
  78. package/dist/js/chunks/chunk-MDBZAMIV.mjs.map +7 -0
  79. package/dist/js/chunks/{chunk-4EWGD4V2.mjs → chunk-NODZ5VAD.mjs} +2 -2
  80. package/dist/js/chunks/{chunk-UGJHCHXG.mjs → chunk-O2WJB6TH.mjs} +79 -55
  81. package/dist/js/chunks/chunk-O2WJB6TH.mjs.map +7 -0
  82. package/dist/js/chunks/{chunk-7YZ5CN3V.mjs → chunk-PCABY5BN.mjs} +5 -3
  83. package/dist/js/chunks/chunk-PCABY5BN.mjs.map +7 -0
  84. package/dist/js/chunks/{chunk-X7SDA2J5.mjs → chunk-PWKYVMND.mjs} +9 -5
  85. package/dist/js/chunks/{chunk-X7SDA2J5.mjs.map → chunk-PWKYVMND.mjs.map} +2 -2
  86. package/dist/js/chunks/{chunk-SPPHF7YZ.mjs → chunk-QHZZT7YO.mjs} +35 -14
  87. package/dist/js/chunks/chunk-QHZZT7YO.mjs.map +7 -0
  88. package/dist/js/chunks/{chunk-LDXCC2L3.mjs → chunk-QND56EW2.mjs} +5 -4
  89. package/dist/js/chunks/chunk-QND56EW2.mjs.map +7 -0
  90. package/dist/js/chunks/{chunk-NVQ5EHCU.mjs → chunk-QNODAANY.mjs} +4 -4
  91. package/dist/js/chunks/{chunk-7NLUI3RR.mjs → chunk-QRO5FV3I.mjs} +23 -13
  92. package/dist/js/chunks/chunk-QRO5FV3I.mjs.map +7 -0
  93. package/dist/js/chunks/{chunk-FCNF4GRJ.mjs → chunk-R7A7JRC5.mjs} +6 -11
  94. package/dist/js/chunks/chunk-R7A7JRC5.mjs.map +7 -0
  95. package/dist/js/chunks/{chunk-S23RJ3XY.mjs → chunk-RKG2CBFE.mjs} +4 -16
  96. package/dist/js/chunks/chunk-RKG2CBFE.mjs.map +7 -0
  97. package/dist/js/chunks/{chunk-6FSEUFVW.mjs → chunk-RSNS5OYS.mjs} +6 -6
  98. package/dist/js/chunks/chunk-RSNS5OYS.mjs.map +7 -0
  99. package/dist/js/chunks/{chunk-ROH2HDB4.mjs → chunk-RUDYMEJ3.mjs} +2 -2
  100. package/dist/js/chunks/{chunk-BIGU5RCJ.mjs → chunk-STJR62SU.mjs} +13 -5
  101. package/dist/js/chunks/chunk-STJR62SU.mjs.map +7 -0
  102. package/dist/js/chunks/{chunk-752ADW4M.mjs → chunk-SUSD4UTN.mjs} +27 -32
  103. package/dist/js/chunks/chunk-SUSD4UTN.mjs.map +7 -0
  104. package/dist/js/chunks/{chunk-B7DQFHA5.mjs → chunk-SYBOA5HC.mjs} +7 -12
  105. package/dist/js/chunks/chunk-SYBOA5HC.mjs.map +7 -0
  106. package/dist/js/chunks/{chunk-TFABTUAZ.mjs → chunk-T4MOBP3J.mjs} +2 -2
  107. package/dist/js/chunks/{chunk-GCWWEZKO.mjs → chunk-TM7HPGTV.mjs} +3 -3
  108. package/dist/js/chunks/{chunk-5KIHWJI2.mjs → chunk-TMQDZSDC.mjs} +34 -12
  109. package/dist/js/chunks/chunk-TMQDZSDC.mjs.map +7 -0
  110. package/dist/js/chunks/{chunk-ZO6ZLHFF.mjs → chunk-TVSX5YA2.mjs} +3 -3
  111. package/dist/js/chunks/{chunk-INLZWHLY.mjs → chunk-UHO5CV6K.mjs} +2 -2
  112. package/dist/js/chunks/{chunk-INLZWHLY.mjs.map → chunk-UHO5CV6K.mjs.map} +2 -2
  113. package/dist/js/chunks/{chunk-7YQBHTK3.mjs → chunk-UKCNELUN.mjs} +6 -8
  114. package/dist/js/chunks/chunk-UKCNELUN.mjs.map +7 -0
  115. package/dist/js/chunks/{chunk-VH4BMAZS.mjs → chunk-UKQK5GWR.mjs} +13 -13
  116. package/dist/js/chunks/chunk-UKQK5GWR.mjs.map +7 -0
  117. package/dist/js/chunks/{chunk-OYNUDOHR.mjs → chunk-UTSLYQ65.mjs} +7 -6
  118. package/dist/js/chunks/{chunk-OYNUDOHR.mjs.map → chunk-UTSLYQ65.mjs.map} +2 -2
  119. package/dist/js/chunks/{chunk-7W7TV6NY.mjs → chunk-VS5OJBOD.mjs} +2 -2
  120. package/dist/js/chunks/{chunk-7W7TV6NY.mjs.map → chunk-VS5OJBOD.mjs.map} +2 -2
  121. package/dist/js/chunks/{chunk-KYIEG4U3.mjs → chunk-VZMROW5A.mjs} +43 -14
  122. package/dist/js/chunks/chunk-VZMROW5A.mjs.map +7 -0
  123. package/dist/js/chunks/{chunk-VFV75DHF.mjs → chunk-XB6Y7P5W.mjs} +11 -12
  124. package/dist/js/chunks/chunk-XB6Y7P5W.mjs.map +7 -0
  125. package/dist/js/chunks/{chunk-CZSQHXEV.mjs → chunk-XDAMOMVD.mjs} +20 -21
  126. package/dist/js/chunks/chunk-XDAMOMVD.mjs.map +7 -0
  127. package/dist/js/chunks/{chunk-EVCVFEV3.mjs → chunk-XJPMW5SP.mjs} +21 -35
  128. package/dist/js/chunks/chunk-XJPMW5SP.mjs.map +7 -0
  129. package/dist/js/chunks/{chunk-VR3L2WN5.mjs → chunk-YKANQILZ.mjs} +7 -6
  130. package/dist/js/chunks/chunk-YKANQILZ.mjs.map +7 -0
  131. package/dist/js/chunks/{chunk-JUKBBN6P.mjs → chunk-YLZOJLDI.mjs} +2 -2
  132. package/dist/js/chunks/{chunk-U4B3VHFS.mjs → chunk-ZK7YY322.mjs} +28 -21
  133. package/dist/js/chunks/chunk-ZK7YY322.mjs.map +7 -0
  134. package/dist/js/expressive.cjs +2739 -2387
  135. package/dist/js/expressive.cjs.map +4 -4
  136. package/dist/js/expressive.js +2739 -2387
  137. package/dist/js/expressive.js.map +4 -4
  138. package/dist/js/expressive.min.js +7 -7
  139. package/dist/js/expressive.min.js.map +4 -4
  140. package/dist/js/expressive.mjs +76 -75
  141. package/dist/js/expressive.mjs.map +1 -1
  142. package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
  143. package/dist/js/internal/behaviors/copy.mjs +3 -3
  144. package/dist/js/internal/behaviors/dataTables.mjs +2 -4
  145. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  146. package/dist/js/internal/behaviors/forms.mjs +2 -2
  147. package/dist/js/internal/behaviors/imageCompare.mjs +2 -2
  148. package/dist/js/internal/behaviors/lists.mjs +2 -2
  149. package/dist/js/internal/behaviors/paneResize.mjs +2 -2
  150. package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
  151. package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
  152. package/dist/js/internal/behaviors/sortable.mjs +2 -2
  153. package/dist/js/internal/behaviors/theme.mjs +2 -2
  154. package/dist/js/internal/behaviors/tour.mjs +2 -2
  155. package/dist/js/internal/behaviors/transferList.mjs +2 -2
  156. package/dist/js/internal/components/appBar.mjs +3 -3
  157. package/dist/js/internal/components/autocomplete.mjs +5 -4
  158. package/dist/js/internal/components/backToTop.mjs +3 -3
  159. package/dist/js/internal/components/barChart.mjs +5 -5
  160. package/dist/js/internal/components/buttonGroup.mjs +3 -3
  161. package/dist/js/internal/components/buttons.mjs +3 -3
  162. package/dist/js/internal/components/cards.mjs +3 -3
  163. package/dist/js/internal/components/carousel.mjs +3 -3
  164. package/dist/js/internal/components/cascader.mjs +4 -4
  165. package/dist/js/internal/components/characterCounter.mjs +3 -3
  166. package/dist/js/internal/components/chips.mjs +7 -6
  167. package/dist/js/internal/components/colorPicker.mjs +3 -3
  168. package/dist/js/internal/components/columnChart.mjs +4 -4
  169. package/dist/js/internal/components/commandPalette.mjs +3 -3
  170. package/dist/js/internal/components/confetti.mjs +3 -3
  171. package/dist/js/internal/components/currencyInput.mjs +3 -3
  172. package/dist/js/internal/components/datepicker.mjs +8 -7
  173. package/dist/js/internal/components/expandingCard.mjs +3 -3
  174. package/dist/js/internal/components/funnelChart.mjs +4 -4
  175. package/dist/js/internal/components/heatmapChart.mjs +4 -4
  176. package/dist/js/internal/components/hoverCard.mjs +3 -3
  177. package/dist/js/internal/components/index.mjs +60 -59
  178. package/dist/js/internal/components/inputMask.mjs +3 -3
  179. package/dist/js/internal/components/keypad.mjs +3 -3
  180. package/dist/js/internal/components/lightbox.mjs +3 -3
  181. package/dist/js/internal/components/lineChart.mjs +23 -7
  182. package/dist/js/internal/components/loadingOverlay.mjs +3 -3
  183. package/dist/js/internal/components/mapView.mjs +3 -3
  184. package/dist/js/internal/components/menu.mjs +3 -3
  185. package/dist/js/internal/components/menubar.mjs +4 -4
  186. package/dist/js/internal/components/messageScroller.mjs +3 -3
  187. package/dist/js/internal/components/mixedChart.mjs +5 -5
  188. package/dist/js/internal/components/navigationRail.mjs +3 -3
  189. package/dist/js/internal/components/particles.mjs +3 -3
  190. package/dist/js/internal/components/pieChart.mjs +4 -4
  191. package/dist/js/internal/components/pullToRefresh.mjs +3 -3
  192. package/dist/js/internal/components/questionnaire.mjs +3 -3
  193. package/dist/js/internal/components/radarChart.mjs +4 -4
  194. package/dist/js/internal/components/radialChart.mjs +4 -4
  195. package/dist/js/internal/components/registry.mjs +59 -58
  196. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  197. package/dist/js/internal/components/sankeyChart.mjs +4 -4
  198. package/dist/js/internal/components/scatterChart.mjs +4 -4
  199. package/dist/js/internal/components/scrollspy.mjs +3 -3
  200. package/dist/js/internal/components/select.mjs +5 -4
  201. package/dist/js/internal/components/showMore.mjs +3 -3
  202. package/dist/js/internal/components/slider.mjs +3 -3
  203. package/dist/js/internal/components/snackbar.mjs +2 -2
  204. package/dist/js/internal/components/swipeActions.mjs +3 -3
  205. package/dist/js/internal/components/tabs.mjs +3 -3
  206. package/dist/js/internal/components/timepicker.mjs +5 -5
  207. package/dist/js/internal/components/tooltip.mjs +3 -3
  208. package/dist/js/internal/components/treeSelect.mjs +6 -5
  209. package/dist/js/internal/components/treemapChart.mjs +4 -4
  210. package/dist/js/internal/core/component.mjs +6 -4
  211. package/dist/js/internal/core/formControl.mjs +2 -2
  212. package/dist/js/internal/core/imageURL.mjs +7 -0
  213. package/dist/js/internal/core/imageURL.mjs.map +7 -0
  214. package/dist/js/internal/core/utils.mjs +11 -1
  215. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  216. package/dist/js/internal/plugins/modalDisplayPlugin.mjs +3 -3
  217. package/dist/js/modular.mjs +76 -75
  218. package/dist/types/behaviors/bottomSheets.d.ts +5 -3
  219. package/dist/types/behaviors/dataTables.d.ts +2 -6
  220. package/dist/types/behaviors/forms.d.ts +7 -7
  221. package/dist/types/behaviors/imageCompare.d.ts +2 -1
  222. package/dist/types/behaviors/transferList.d.ts +2 -0
  223. package/dist/types/components/autocomplete.d.ts +14 -3
  224. package/dist/types/components/carousel.d.ts +7 -0
  225. package/dist/types/components/chips.d.ts +15 -0
  226. package/dist/types/components/colorPicker.d.ts +14 -0
  227. package/dist/types/components/currencyInput.d.ts +5 -4
  228. package/dist/types/components/datepicker.d.ts +54 -27
  229. package/dist/types/components/funnelChart.d.ts +1 -4
  230. package/dist/types/components/heatmapChart.d.ts +3 -0
  231. package/dist/types/components/hoverCard.d.ts +1 -0
  232. package/dist/types/components/inputMask.d.ts +0 -2
  233. package/dist/types/components/lineChart.d.ts +43 -5
  234. package/dist/types/components/mapView.d.ts +113 -11
  235. package/dist/types/components/menu.d.ts +14 -0
  236. package/dist/types/components/particles.d.ts +14 -1
  237. package/dist/types/components/pieChart.d.ts +1 -2
  238. package/dist/types/components/richTextEditor.d.ts +40 -9
  239. package/dist/types/components/select.d.ts +1 -3
  240. package/dist/types/components/showMore.d.ts +2 -0
  241. package/dist/types/components/slider.d.ts +0 -1
  242. package/dist/types/components/snackbar.d.ts +7 -1
  243. package/dist/types/components/tabs.d.ts +3 -3
  244. package/dist/types/components/timepicker.d.ts +15 -6
  245. package/dist/types/components/tooltip.d.ts +1 -1
  246. package/dist/types/components/treemapChart.d.ts +2 -2
  247. package/dist/types/core/component.d.ts +9 -3
  248. package/dist/types/core/imageURL.d.ts +2 -0
  249. package/dist/types/core/utils.d.ts +39 -1
  250. package/dist/types/modular.d.ts +1 -1
  251. package/dist/types/plugins/modalDisplayPlugin.d.ts +8 -1
  252. package/package.json +8 -6
  253. package/src/sass/abstracts/_mixins.scss +459 -59
  254. package/src/sass/abstracts/_variables.scss +25 -0
  255. package/src/sass/components/_accordion.scss +1 -3
  256. package/src/sass/components/_aura.scss +1 -0
  257. package/src/sass/components/_back-to-top.scss +3 -3
  258. package/src/sass/components/_bar-chart.scss +2 -83
  259. package/src/sass/components/_bottom-sheet.scss +7 -0
  260. package/src/sass/components/_breadcrumb.scss +1 -7
  261. package/src/sass/components/_button-groups.scss +15 -38
  262. package/src/sass/components/_buttons.scss +24 -74
  263. package/src/sass/components/_calendar.scss +1 -3
  264. package/src/sass/components/_carousel.scss +10 -10
  265. package/src/sass/components/_cascader.scss +3 -14
  266. package/src/sass/components/_column-chart.scss +1 -19
  267. package/src/sass/components/_confetti.scss +3 -4
  268. package/src/sass/components/_data-table.scss +10 -0
  269. package/src/sass/components/_dialog.scss +10 -18
  270. package/src/sass/components/_expanding-card.scss +1 -5
  271. package/src/sass/components/_fab-menu.scss +4 -12
  272. package/src/sass/components/_funnel-chart.scss +1 -62
  273. package/src/sass/components/_heatmap-chart.scss +2 -6
  274. package/src/sass/components/_icon-buttons.scss +1 -4
  275. package/src/sass/components/_line-chart.scss +2 -70
  276. package/src/sass/components/_map.scss +4 -0
  277. package/src/sass/components/_marquee.scss +3 -3
  278. package/src/sass/components/_mega-menu.scss +8 -17
  279. package/src/sass/components/_menu.scss +10 -11
  280. package/src/sass/components/_menubar.scss +1 -13
  281. package/src/sass/components/_mixed-chart.scss +1 -37
  282. package/src/sass/components/_navbar.scss +11 -16
  283. package/src/sass/components/_navigation-bar.scss +2 -5
  284. package/src/sass/components/_navigation-rail.scss +25 -15
  285. package/src/sass/components/_page-footer.scss +1 -3
  286. package/src/sass/components/_pagination.scss +3 -14
  287. package/src/sass/components/_panes.scss +3 -16
  288. package/src/sass/components/_particles.scss +3 -4
  289. package/src/sass/components/_pie-chart.scss +8 -70
  290. package/src/sass/components/_progress.scss +31 -13
  291. package/src/sass/components/_radar-chart.scss +2 -32
  292. package/src/sass/components/_radial-chart.scss +2 -48
  293. package/src/sass/components/_sankey-chart.scss +5 -28
  294. package/src/sass/components/_scatter-chart.scss +2 -11
  295. package/src/sass/components/_search.scss +1 -4
  296. package/src/sass/components/_side-sheet.scss +9 -14
  297. package/src/sass/components/_skeleton.scss +24 -15
  298. package/src/sass/components/_snackbar.scss +11 -13
  299. package/src/sass/components/_table_of_contents.scss +1 -3
  300. package/src/sass/components/_tabs.scss +4 -20
  301. package/src/sass/components/_timepicker.scss +2 -1
  302. package/src/sass/components/_toolbar.scss +1 -4
  303. package/src/sass/components/_tooltip.scss +9 -5
  304. package/src/sass/components/_tree.scss +5 -17
  305. package/src/sass/components/_treemap-chart.scss +2 -26
  306. package/src/sass/components/forms/_checkboxes.scss +2 -21
  307. package/src/sass/components/forms/_drop-zone.scss +1 -4
  308. package/src/sass/components/forms/_fieldset.scss +1 -4
  309. package/src/sass/components/forms/_file-input.scss +6 -0
  310. package/src/sass/components/forms/_input-fields.scss +21 -4
  311. package/src/sass/components/forms/_radio-buttons.scss +2 -24
  312. package/src/sass/components/forms/_select.scss +6 -7
  313. package/src/sass/components/forms/_slider.scss +1 -4
  314. package/src/sass/components/forms/_switches.scss +14 -21
  315. package/src/sass/utilities/_helpers.scss +1 -1
  316. package/src/sass/utilities/_visibility.scss +1 -3
  317. package/dist/js/chunks/chunk-2CS6TITK.mjs.map +0 -7
  318. package/dist/js/chunks/chunk-3L3QIYLC.mjs.map +0 -7
  319. package/dist/js/chunks/chunk-4IKVPCSU.mjs +0 -7
  320. package/dist/js/chunks/chunk-4QUCNFSD.mjs.map +0 -7
  321. package/dist/js/chunks/chunk-4TRZ2AER.mjs.map +0 -7
  322. package/dist/js/chunks/chunk-5KIHWJI2.mjs.map +0 -7
  323. package/dist/js/chunks/chunk-6FSEUFVW.mjs.map +0 -7
  324. package/dist/js/chunks/chunk-752ADW4M.mjs.map +0 -7
  325. package/dist/js/chunks/chunk-7NLUI3RR.mjs.map +0 -7
  326. package/dist/js/chunks/chunk-7YQBHTK3.mjs.map +0 -7
  327. package/dist/js/chunks/chunk-7YZ5CN3V.mjs.map +0 -7
  328. package/dist/js/chunks/chunk-B7DQFHA5.mjs.map +0 -7
  329. package/dist/js/chunks/chunk-BIGU5RCJ.mjs.map +0 -7
  330. package/dist/js/chunks/chunk-BPF3I2MN.mjs.map +0 -7
  331. package/dist/js/chunks/chunk-CMGXGYUC.mjs.map +0 -7
  332. package/dist/js/chunks/chunk-CSYWKEK3.mjs.map +0 -7
  333. package/dist/js/chunks/chunk-CZSQHXEV.mjs.map +0 -7
  334. package/dist/js/chunks/chunk-DZYVU75J.mjs.map +0 -7
  335. package/dist/js/chunks/chunk-EC26RU2D.mjs.map +0 -7
  336. package/dist/js/chunks/chunk-EVCVFEV3.mjs.map +0 -7
  337. package/dist/js/chunks/chunk-FCNF4GRJ.mjs.map +0 -7
  338. package/dist/js/chunks/chunk-GWZ76SR4.mjs.map +0 -7
  339. package/dist/js/chunks/chunk-KYIEG4U3.mjs.map +0 -7
  340. package/dist/js/chunks/chunk-KZPSAXIU.mjs.map +0 -7
  341. package/dist/js/chunks/chunk-LDXCC2L3.mjs.map +0 -7
  342. package/dist/js/chunks/chunk-NBJAUGPP.mjs.map +0 -7
  343. package/dist/js/chunks/chunk-OUCHKSAW.mjs.map +0 -7
  344. package/dist/js/chunks/chunk-P6DRQ6KS.mjs.map +0 -7
  345. package/dist/js/chunks/chunk-PA7NU5AK.mjs.map +0 -7
  346. package/dist/js/chunks/chunk-QACZ6TUP.mjs.map +0 -7
  347. package/dist/js/chunks/chunk-QXKWVHBD.mjs.map +0 -7
  348. package/dist/js/chunks/chunk-S23RJ3XY.mjs.map +0 -7
  349. package/dist/js/chunks/chunk-SPPHF7YZ.mjs.map +0 -7
  350. package/dist/js/chunks/chunk-U4B3VHFS.mjs.map +0 -7
  351. package/dist/js/chunks/chunk-UGJHCHXG.mjs.map +0 -7
  352. package/dist/js/chunks/chunk-VFV75DHF.mjs.map +0 -7
  353. package/dist/js/chunks/chunk-VGY4M57S.mjs.map +0 -7
  354. package/dist/js/chunks/chunk-VH4BMAZS.mjs.map +0 -7
  355. package/dist/js/chunks/chunk-VJVQIXHC.mjs.map +0 -7
  356. package/dist/js/chunks/chunk-VMY55K2X.mjs.map +0 -7
  357. package/dist/js/chunks/chunk-VR3L2WN5.mjs.map +0 -7
  358. package/dist/js/chunks/chunk-WU7XJ4RR.mjs.map +0 -7
  359. package/dist/js/chunks/chunk-Y6TLRA3U.mjs.map +0 -7
  360. package/dist/js/chunks/chunk-Z4GICXR2.mjs.map +0 -7
  361. package/dist/js/chunks/chunk-Z4OARDZ7.mjs.map +0 -7
  362. package/dist/js/chunks/chunk-ZM3XBHWV.mjs.map +0 -7
  363. package/dist/js/chunks/chunk-ZVLOUDIJ.mjs.map +0 -7
  364. /package/dist/js/chunks/{chunk-Y6H2X7ZC.mjs.map → chunk-3KF65KGL.mjs.map} +0 -0
  365. /package/dist/js/chunks/{chunk-75E5EDJF.mjs.map → chunk-3XORNED5.mjs.map} +0 -0
  366. /package/dist/js/chunks/{chunk-NNHVANQA.mjs.map → chunk-4WBGAQN3.mjs.map} +0 -0
  367. /package/dist/js/chunks/{chunk-ZJNLAGY5.mjs.map → chunk-5F4URJHL.mjs.map} +0 -0
  368. /package/dist/js/chunks/{chunk-GVZQH2H5.mjs.map → chunk-AEG6LOAJ.mjs.map} +0 -0
  369. /package/dist/js/chunks/{chunk-AI73GJKG.mjs.map → chunk-BB5VXYXT.mjs.map} +0 -0
  370. /package/dist/js/chunks/{chunk-2RLBDFH4.mjs.map → chunk-BDATLH3H.mjs.map} +0 -0
  371. /package/dist/js/chunks/{chunk-ZKWUWBUB.mjs.map → chunk-CY2CTOVM.mjs.map} +0 -0
  372. /package/dist/js/chunks/{chunk-67ZPPKXS.mjs.map → chunk-FNIIH2LU.mjs.map} +0 -0
  373. /package/dist/js/chunks/{chunk-T3BNSRP3.mjs.map → chunk-HQRLBTNM.mjs.map} +0 -0
  374. /package/dist/js/chunks/{chunk-NAC72P7R.mjs.map → chunk-I2F7MLUU.mjs.map} +0 -0
  375. /package/dist/js/chunks/{chunk-ANKFWNWT.mjs.map → chunk-LC4O5LFS.mjs.map} +0 -0
  376. /package/dist/js/chunks/{chunk-4PIXLDNJ.mjs.map → chunk-LEF33SCP.mjs.map} +0 -0
  377. /package/dist/js/chunks/{chunk-ILDRRG7T.mjs.map → chunk-LFORZRPH.mjs.map} +0 -0
  378. /package/dist/js/chunks/{chunk-4EWGD4V2.mjs.map → chunk-NODZ5VAD.mjs.map} +0 -0
  379. /package/dist/js/chunks/{chunk-NVQ5EHCU.mjs.map → chunk-QNODAANY.mjs.map} +0 -0
  380. /package/dist/js/chunks/{chunk-ROH2HDB4.mjs.map → chunk-RUDYMEJ3.mjs.map} +0 -0
  381. /package/dist/js/chunks/{chunk-TFABTUAZ.mjs.map → chunk-T4MOBP3J.mjs.map} +0 -0
  382. /package/dist/js/chunks/{chunk-GCWWEZKO.mjs.map → chunk-TM7HPGTV.mjs.map} +0 -0
  383. /package/dist/js/chunks/{chunk-ZO6ZLHFF.mjs.map → chunk-TVSX5YA2.mjs.map} +0 -0
  384. /package/dist/js/chunks/{chunk-JUKBBN6P.mjs.map → chunk-YLZOJLDI.mjs.map} +0 -0
@@ -101,6 +101,13 @@ $_bar: ".snackbar";
101
101
  cursor: default;
102
102
  @include glass(var(--md-comp-snackbar-container-color));
103
103
 
104
+ // Forced colors paint the fill as Canvas and drop the shadow, so the
105
+ // surface would blend into the page without an edge.
106
+ @media (forced-colors: active) {
107
+ outline: 1px solid CanvasText;
108
+ outline-offset: -1px;
109
+ }
110
+
104
111
  @include bp-up("medium") {
105
112
  width: max-content;
106
113
  min-width: min(344px, 100%);
@@ -124,10 +131,7 @@ $_bar: ".snackbar";
124
131
  // Optional leading icon. M3 snackbars have no leading icon.
125
132
  > #{$icon}:first-child {
126
133
  flex: 0 0 auto;
127
- font-size: rem(24px);
128
- width: rem(24px);
129
- height: rem(24px);
130
- line-height: rem(24px);
134
+ @include icon-size(rem(24px));
131
135
  color: var(--md-comp-snackbar-icon-color);
132
136
  }
133
137
 
@@ -193,10 +197,7 @@ $_bar: ".snackbar";
193
197
  box-shadow: none;
194
198
 
195
199
  > #{$icon} {
196
- font-size: rem(24px);
197
- width: rem(24px);
198
- height: rem(24px);
199
- line-height: rem(24px);
200
+ @include icon-size(rem(24px));
200
201
  }
201
202
 
202
203
  &:hover {
@@ -265,8 +266,5 @@ $_bar: ".snackbar";
265
266
  }
266
267
  }
267
268
 
268
- // Transient messages are not part of the page. Important so a size or state rule that sets
269
- // `display` cannot bring it back; see base/_print.scss for the page itself.
270
- @media print {
271
- #snackbar-container { display: none !important; }
272
- }
269
+ // Transient messages are not part of the page.
270
+ #snackbar-container { @include print-hidden; }
@@ -15,9 +15,7 @@
15
15
  --md-comp-toc-indicator: 2px;
16
16
  --md-comp-toc-item-height: 48px;
17
17
 
18
- list-style: none;
19
- margin: 0;
20
- padding: 0;
18
+ @include list-reset;
21
19
 
22
20
  &.fixed {
23
21
  position: fixed;
@@ -41,9 +41,7 @@ $_tab: "> a";
41
41
  display: flex;
42
42
  position: relative;
43
43
  width: 100%;
44
- margin: 0;
45
- padding: 0;
46
- list-style: none;
44
+ @include list-reset;
47
45
  overflow-x: auto;
48
46
  overflow-y: hidden;
49
47
  white-space: nowrap;
@@ -51,10 +49,6 @@ $_tab: "> a";
51
49
  border-block-end: 1px solid var(--md-sys-color-outline-variant);
52
50
  scrollbar-width: none;
53
51
 
54
- &::-webkit-scrollbar {
55
- display: none;
56
- }
57
-
58
52
  #{$_tab} {
59
53
  box-sizing: border-box;
60
54
  position: relative;
@@ -80,10 +74,7 @@ $_tab: "> a";
80
74
 
81
75
  > #{$icon} {
82
76
  flex: 0 0 auto;
83
- font-size: var(--md-comp-primary-tab-icon-size);
84
- width: var(--md-comp-primary-tab-icon-size);
85
- height: var(--md-comp-primary-tab-icon-size);
86
- line-height: var(--md-comp-primary-tab-icon-size);
77
+ @include icon-size(var(--md-comp-primary-tab-icon-size));
87
78
  color: inherit;
88
79
  }
89
80
 
@@ -102,8 +93,7 @@ $_tab: "> a";
102
93
  // The tint alone is faint and vanishes under forced colors. Inset, so the
103
94
  // scrolling tab row does not clip it.
104
95
  &:focus-visible {
105
- @include focus-ring;
106
- outline-offset: -3px;
96
+ @include focus-ring(-3px);
107
97
  }
108
98
 
109
99
  &.active {
@@ -162,9 +152,7 @@ $_tab: "> a";
162
152
  background-color: var(--md-comp-primary-tab-active-indicator-color);
163
153
  border-radius: var(--md-comp-primary-tab-active-indicator-shape);
164
154
  pointer-events: none;
165
- list-style: none;
166
- padding: 0;
167
- margin: 0;
155
+ @include list-reset;
168
156
  @include forced-colors-fill(Highlight);
169
157
  }
170
158
  }
@@ -229,10 +217,6 @@ $_tab: "> a";
229
217
  scroll-snap-type: x mandatory;
230
218
  scrollbar-width: none;
231
219
 
232
- &::-webkit-scrollbar {
233
- display: none;
234
- }
235
-
236
220
  > * {
237
221
  flex: 0 0 100%;
238
222
  box-sizing: border-box;
@@ -292,8 +292,9 @@ input[type=text].timepicker-input-seconds {
292
292
  border: 1px solid var(--md-sys-color-outline);
293
293
  }
294
294
 
295
+ // The buttons share one edge: the start of PM, which is its right in RTL.
295
296
  .timepicker-container .pm-btn {
296
- border-left: 0;
297
+ border-inline-start: 0;
297
298
  }
298
299
 
299
300
  .timepicker-plate {
@@ -115,10 +115,7 @@ $_vibrant: "#{$_toolbar}.vibrant";
115
115
 
116
116
  > #{$icon} {
117
117
  flex: 0 0 auto;
118
- font-size: var(--md-comp-toolbar-icon-size);
119
- width: var(--md-comp-toolbar-icon-size);
120
- height: var(--md-comp-toolbar-icon-size);
121
- line-height: var(--md-comp-toolbar-icon-size);
118
+ @include icon-size(var(--md-comp-toolbar-icon-size));
122
119
  }
123
120
 
124
121
  // The state layer is the content color in both color sets, which is
@@ -43,6 +43,13 @@
43
43
  pointer-events: auto;
44
44
  z-index: var(--expressive-z-tooltip);
45
45
  @include glass(var(--md-comp-plain-tooltip-container-color));
46
+
47
+ // Forced colors paint the fill as Canvas and drop the shadow, so the
48
+ // surface would blend into the page without an edge.
49
+ @media (forced-colors: active) {
50
+ outline: 1px solid CanvasText;
51
+ outline-offset: -1px;
52
+ }
46
53
  }
47
54
 
48
55
  // CSS-only: a child of the activator. Default sits above (M3 preferred).
@@ -183,8 +190,5 @@ body > .tooltip,
183
190
  min-width: 0;
184
191
  }
185
192
 
186
- // Transient messages are not part of the page. Important so a size or state rule that sets
187
- // `display` cannot bring it back; see base/_print.scss for the page itself.
188
- @media print {
189
- .tooltip { display: none !important; }
190
- }
193
+ // Transient messages are not part of the page.
194
+ .tooltip { @include print-hidden; }
@@ -29,12 +29,10 @@
29
29
  // Each level hangs a guide line from the centre of its parent's chevron
30
30
  // (12px inset + half the 20px chevron) and indents past it.
31
31
  ul {
32
- margin: 0;
32
+ @include list-reset;
33
33
  margin-inline-start: 22px;
34
- padding: 0;
35
34
  padding-inline-start: 6px;
36
35
  border-inline-start: 1px solid var(--md-comp-tree-guide-color);
37
- list-style: none;
38
36
  }
39
37
 
40
38
  li {
@@ -69,10 +67,7 @@
69
67
  li > details > summary {
70
68
  cursor: pointer;
71
69
  @include focus-visible;
72
-
73
- &:hover {
74
- background-color: state-layer(var(--md-sys-color-on-surface), "hover");
75
- }
70
+ @include text-action;
76
71
  }
77
72
 
78
73
  li > details > summary {
@@ -86,6 +81,7 @@
86
81
  // Points to the end edge while closed and down once open.
87
82
  &::before {
88
83
  @include tree-chevron;
84
+ @include forced-colors-fill;
89
85
  }
90
86
 
91
87
  &:dir(rtl)::before {
@@ -112,15 +108,7 @@
112
108
  }
113
109
  }
114
110
 
115
- @media (forced-colors: active) {
116
- li > details > summary::before {
117
- forced-color-adjust: none;
118
- background-color: CanvasText;
119
- }
120
-
121
- [aria-current]:not([aria-current="false"]) {
122
- outline: 2px solid Highlight;
123
- outline-offset: -2px;
124
- }
111
+ [aria-current]:not([aria-current="false"]) {
112
+ @include forced-colors-selected;
125
113
  }
126
114
  }
@@ -23,32 +23,10 @@
23
23
  // on-secondary, surface, surface,
24
24
  // surface; the text in each
25
25
 
26
- @include chart("treemap-chart");
26
+ @include chart("treemap-chart", $colors: 6, $on-colors: true, $grid: false);
27
27
 
28
28
  .treemap-chart {
29
29
  --md-comp-treemap-chart-gap: 4px;
30
- // As in the pie chart: the container roles mixed 45% with on-surface pass
31
- // 3:1 on the surface (WCAG 1.4.11), and surface text on them passes too.
32
- --md-comp-treemap-chart-color-5: color-mix(in oklab, var(--md-sys-color-primary-container) 45%, var(--md-sys-color-on-surface));
33
- --md-comp-treemap-chart-color-6: color-mix(in oklab, var(--md-sys-color-tertiary-container) 45%, var(--md-sys-color-on-surface));
34
- --md-comp-treemap-chart-on-color-1: var(--md-sys-color-on-primary);
35
- --md-comp-treemap-chart-on-color-2: var(--md-sys-color-on-tertiary);
36
- --md-comp-treemap-chart-on-color-3: var(--md-sys-color-on-secondary);
37
- --md-comp-treemap-chart-on-color-4: var(--md-sys-color-surface);
38
- --md-comp-treemap-chart-on-color-5: var(--md-sys-color-surface);
39
- --md-comp-treemap-chart-on-color-6: var(--md-sys-color-surface);
40
- }
41
-
42
- @for $i from 1 through 6 {
43
- .treemap-chart [data-series="#{$i}"] {
44
- --treemap-chart-color: var(--md-comp-treemap-chart-color-#{$i});
45
- --treemap-chart-on-color: var(--md-comp-treemap-chart-on-color-#{$i});
46
- }
47
- }
48
-
49
- .treemap-chart-plot {
50
- border: 0;
51
- background: none;
52
30
  }
53
31
 
54
32
  .treemap-chart-boxes {
@@ -84,10 +62,8 @@
84
62
 
85
63
  > span {
86
64
  position: relative;
87
- overflow: hidden;
65
+ @include ellipsis;
88
66
  margin-inline: calc(var(--treemap-chart-inset) + 8px);
89
- text-overflow: ellipsis;
90
- white-space: nowrap;
91
67
  }
92
68
 
93
69
  > span:first-child {
@@ -58,14 +58,7 @@ label:has(> [type="checkbox"]):not(.switch),
58
58
  // do not write :has(:not(:has(+ span))).
59
59
  label:has(> [type="checkbox"]):not(.switch) > [type="checkbox"],
60
60
  .checkbox > [type="checkbox"] {
61
- appearance: none;
62
- flex: 0 0 var(--md-comp-checkbox-container-size);
63
- box-sizing: border-box;
64
- width: var(--md-comp-checkbox-container-size);
65
- height: var(--md-comp-checkbox-container-size);
66
- margin: 0;
67
- padding: 0;
68
- border: 2px solid var(--md-sys-color-on-surface-variant);
61
+ @include selection-control(var(--md-comp-checkbox-container-size), var(--md-comp-checkbox-container-size), var(--md-sys-color-on-surface-variant));
69
62
  border-radius: var(--md-comp-checkbox-container-shape);
70
63
  background-color: transparent;
71
64
  cursor: pointer;
@@ -77,19 +70,7 @@ label:has(> [type="checkbox"]):not(.switch) > [type="checkbox"],
77
70
  background-color: var(--md-sys-color-primary);
78
71
  }
79
72
 
80
- &:hover {
81
- @include _ring(var(--md-sys-color-on-surface), "hover");
82
- }
83
-
84
- &:checked:hover,
85
- &:indeterminate:hover {
86
- @include _ring(var(--md-sys-color-primary), "hover");
87
- }
88
-
89
- &:focus-visible {
90
- @include _ring(var(--md-sys-color-primary), "focus");
91
- outline: none;
92
- }
73
+ @include selection-control-states(var(--md-comp-checkbox-state-layer-size), var(--md-comp-checkbox-container-size), (":checked", ":indeterminate"));
93
74
 
94
75
  &.invalid,
95
76
  &[aria-invalid="true"] {
@@ -50,10 +50,7 @@
50
50
  }
51
51
 
52
52
  > input[type="file"] {
53
- position: absolute;
54
- inset: 0;
55
- width: 100%;
56
- height: 100%;
53
+ @include fill-parent;
57
54
  margin: 0;
58
55
  padding: 0;
59
56
  opacity: 0;
@@ -51,10 +51,7 @@ fieldset {
51
51
  @include typescale("title-small");
52
52
 
53
53
  > #{$icon} {
54
- font-size: rem(18px);
55
- width: rem(18px);
56
- height: rem(18px);
57
- line-height: rem(18px);
54
+ @include icon-size(rem(18px));
58
55
  margin-inline-end: 8px;
59
56
  vertical-align: -3px;
60
57
  color: var(--md-sys-color-on-surface-variant);
@@ -27,6 +27,12 @@
27
27
  align-self: start;
28
28
  min-height: 3rem;
29
29
  min-width: 0;
30
+
31
+ // The focused control is the invisible file input inside, so the
32
+ // trigger shows its ring.
33
+ &:has(> input[type="file"]:focus-visible) {
34
+ @include focus-ring;
35
+ }
30
36
  }
31
37
 
32
38
  span {
@@ -213,10 +213,7 @@ $_floated: '&:focus + label, &:not([placeholder=" "]) + label, &:not(:placeholde
213
213
  top: rem(16px);
214
214
  display: flex;
215
215
  align-items: center;
216
- font-size: rem(24px);
217
- width: rem(24px);
218
- height: rem(24px);
219
- line-height: rem(24px);
216
+ @include icon-size(rem(24px));
220
217
  color: var(--md-sys-color-on-surface-variant);
221
218
  user-select: none;
222
219
  }
@@ -587,12 +584,32 @@ input.otp:not(.browser-default) {
587
584
  opacity: 0.38;
588
585
  }
589
586
 
587
+ // Forced colors drop gradients, which are the cells and the focus ring, so
588
+ // the code keeps them in system colors: a CanvasText line under each cell,
589
+ // Highlight while focused and GrayText when disabled.
590
590
  @media (forced-colors: active) {
591
+ --md-comp-otp-cell-color: Canvas;
591
592
  --md-comp-otp-indicator-color: CanvasText;
592
593
 
594
+ forced-color-adjust: none;
595
+ color: CanvasText;
596
+ caret-color: CanvasText;
597
+ background-color: Canvas;
598
+
599
+ &::placeholder {
600
+ color: GrayText;
601
+ }
602
+
593
603
  &:focus {
594
604
  --md-comp-otp-indicator-color: Highlight;
595
605
  }
606
+
607
+ &:disabled {
608
+ --md-comp-otp-indicator-color: GrayText;
609
+
610
+ color: GrayText;
611
+ opacity: 1;
612
+ }
596
613
  }
597
614
  }
598
615
 
@@ -16,10 +16,6 @@
16
16
  //
17
17
  // .with-gap is a no-op: the selected state is always the ring + inner.
18
18
 
19
- @mixin _ring($color, $state) {
20
- @include state-layer-ring(var(--md-comp-radio-button-state-layer-size), var(--md-comp-radio-button-icon-size), $color, $state);
21
- }
22
-
23
19
  label:has(> [type="radio"]),
24
20
  .radio {
25
21
  --md-comp-radio-button-icon-size: 20px;
@@ -46,14 +42,7 @@ label:has(> [type="radio"]),
46
42
  // Paint the radio on the input.
47
43
  label:has(> [type="radio"]) > [type="radio"],
48
44
  .radio > [type="radio"] {
49
- appearance: none;
50
- flex: 0 0 var(--md-comp-radio-button-icon-size);
51
- box-sizing: border-box;
52
- width: var(--md-comp-radio-button-icon-size);
53
- height: var(--md-comp-radio-button-icon-size);
54
- margin: 0;
55
- padding: 0;
56
- border: 2px solid var(--md-sys-color-on-surface-variant);
45
+ @include selection-control(var(--md-comp-radio-button-icon-size), var(--md-comp-radio-button-icon-size), var(--md-sys-color-on-surface-variant));
57
46
  border-radius: 50%;
58
47
  background-color: transparent;
59
48
  cursor: pointer;
@@ -68,18 +57,7 @@ label:has(> [type="radio"]) > [type="radio"],
68
57
  );
69
58
  }
70
59
 
71
- &:hover {
72
- @include _ring(var(--md-sys-color-on-surface), "hover");
73
- }
74
-
75
- &:checked:hover {
76
- @include _ring(var(--md-sys-color-primary), "hover");
77
- }
78
-
79
- &:focus-visible {
80
- @include _ring(var(--md-sys-color-primary), "focus");
81
- outline: none;
82
- }
60
+ @include selection-control-states(var(--md-comp-radio-button-state-layer-size), var(--md-comp-radio-button-icon-size));
83
61
 
84
62
  &:disabled {
85
63
  border-color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
@@ -319,17 +319,13 @@ menu[role="listbox"] li.optgroup-option {
319
319
  // with the chevron .tree uses, a leaf lines its text up after it, and each
320
320
  // level hangs a guide line from its parent's chevron, as in .tree.
321
321
  ul[role="tree"] {
322
- margin: 0;
323
- padding: 0;
324
- list-style: none;
322
+ @include list-reset;
325
323
 
326
324
  ul[role="group"] {
327
- margin: 0;
325
+ @include list-reset;
328
326
  margin-inline-start: calc(var(--md-comp-menu-item-leading-space) + 10px);
329
- padding: 0;
330
327
  padding-inline-start: 4px;
331
328
  border-inline-start: 1px solid var(--md-sys-color-outline-variant);
332
- list-style: none;
333
329
  }
334
330
 
335
331
  li[role="treeitem"] {
@@ -358,10 +354,13 @@ ul[role="tree"] {
358
354
  background-color: state-layer(var(--md-comp-menu-item-label-text-color), "hover");
359
355
  }
360
356
 
357
+ // The focus layer alone is too faint to find, so the row takes the
358
+ // shared ring too, inset because the tree scrolls and would clip it.
361
359
  &:focus-visible > span {
362
360
  background-color: state-layer(var(--md-comp-menu-item-label-text-color), "focus");
361
+ @include focus-ring(-3px);
363
362
 
364
- // Forced colors drop the focus fill, and the row has no outline of its own.
363
+ // Forced colors drop the focus fill and the ring's color.
365
364
  @media (forced-colors: active) {
366
365
  outline: 2px solid CanvasText;
367
366
  outline-offset: -2px;
@@ -130,10 +130,7 @@ input[type="range"]:dir(rtl) {
130
130
  left: var(--md-comp-slider-stop-inset);
131
131
  top: 50%;
132
132
  translate: 0 -50%;
133
- font-size: var(--md-comp-slider-icon-size);
134
- width: var(--md-comp-slider-icon-size);
135
- height: var(--md-comp-slider-icon-size);
136
- line-height: 1;
133
+ @include icon-size(var(--md-comp-slider-icon-size), 1);
137
134
  color: var(--md-sys-color-on-primary);
138
135
  pointer-events: none;
139
136
  }
@@ -31,15 +31,11 @@
31
31
 
32
32
  // Paint the switch on the checkbox. The class goes on the <label> that wraps
33
33
  // it; a checkbox nested deeper is an ordinary checkbox.
34
+ // The selected handle's distance from the start edge of the padding box.
35
+ $_on: calc(var(--md-comp-switch-track-width) - 4px - 2px - var(--md-comp-switch-handle-selected));
36
+
34
37
  .switch > [type="checkbox"] {
35
- appearance: none;
36
- flex: 0 0 var(--md-comp-switch-track-width);
37
- box-sizing: border-box;
38
- width: var(--md-comp-switch-track-width);
39
- height: var(--md-comp-switch-track-height);
40
- margin: 0;
41
- padding: 0;
42
- border: 2px solid var(--md-sys-color-outline);
38
+ @include selection-control(var(--md-comp-switch-track-width), var(--md-comp-switch-track-height), var(--md-sys-color-outline));
43
39
  border-radius: var(--md-sys-shape-corner-large);
44
40
  background-color: var(--md-sys-color-surface-container-highest);
45
41
  // Size the image to the handle. A 100% gradient keeps the circle in
@@ -76,24 +72,21 @@
76
72
  );
77
73
  background-size: var(--md-comp-switch-handle-selected) var(--md-comp-switch-handle-selected);
78
74
  // padding-box is track minus the 2px border on each side; 2px inset.
79
- background-position: calc(
80
- var(--md-comp-switch-track-width) - 4px - 2px - var(--md-comp-switch-handle-selected)
81
- )
82
- 50%;
75
+ background-position: $_on 50%;
83
76
  }
84
77
 
85
- &:hover {
86
- box-shadow: 0 0 0 8px state-layer(var(--md-sys-color-on-surface), "hover");
87
- }
78
+ // Off is at the start edge and on at the end, so RTL measures from the
79
+ // right. The same edge in both states keeps the slide animating.
80
+ &:dir(rtl) {
81
+ background-position: right 6px center;
88
82
 
89
- &:checked:hover {
90
- box-shadow: 0 0 0 8px state-layer(var(--md-sys-color-primary), "hover");
83
+ &:checked {
84
+ background-position: right $_on center;
85
+ }
91
86
  }
92
87
 
93
- &:focus-visible {
94
- box-shadow: 0 0 0 8px state-layer(var(--md-sys-color-primary), "focus");
95
- outline: none;
96
- }
88
+ // A fixed 8px ring around the default 32px track, for a 48dp target.
89
+ @include selection-control-states(48px, 32px);
97
90
 
98
91
  &:disabled {
99
92
  opacity: 0.38;
@@ -190,7 +190,7 @@ $_layout: (
190
190
  .text-wrap { white-space: normal; }
191
191
  .text-balance { text-wrap-style: balance; }
192
192
  .text-pretty { text-wrap-style: pretty; }
193
- .truncate { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
193
+ .truncate { display: block; @include ellipsis; }
194
194
 
195
195
  // Pointer input. Clicks pass through a .pointer-events-none overlay to what
196
196
  // lies beneath, and a .pointer-events-auto child takes them back. Neither
@@ -15,9 +15,7 @@
15
15
 
16
16
  // Print. .hide-on-print drops a screen-only control from paper; .print-only
17
17
  // is the reverse, for a printed footer or a QR code beside a link.
18
- .hide-on-print {
19
- @media print { display: none !important; }
20
- }
18
+ .hide-on-print { @include print-hidden; }
21
19
 
22
20
  .print-only {
23
21
  @media screen { display: none !important; }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/ts/components/colorPicker.ts"],
4
- "sourcesContent": ["import { Component, BaseOptions } from '../core/component';\nimport { Utils, controllerFor } from '../core/utils';\n\nexport interface ColorPickerOptions extends BaseOptions {\n /**\n * Called with the new `#rrggbb` value when a change is committed: the end\n * of a drag, a key press, a hue release or a typed hex value.\n * @default null\n */\n onChange: ((value: string) => void) | null;\n}\n\nconst _defaults: ColorPickerOptions = {\n onChange: null\n};\n\n/** Hue in degrees, saturation and value from 0 to 1. */\ninterface Hsv { h: number; s: number; v: number }\n\nconst clamp = (n: number) => Math.min(1, Math.max(0, n));\n\n// Hue in degrees of an RGB color with channels from 0 to 1.\nfunction hueOf(r: number, g: number, b: number): number {\n const max = Math.max(r, g, b);\n const range = max - Math.min(r, g, b);\n if (!range) return 0;\n const sector = max === r ? (g - b) / range : max === g ? (b - r) / range + 2 : (r - g) / range + 4;\n return (sector * 60 + 360) % 360;\n}\n\nfunction toHsv(hex: string): Hsv | null {\n const match = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());\n if (!match) return null;\n const digits = match[1].length === 3 ? [...match[1]].map((c) => c + c).join('') : match[1];\n const [r, g, b] = [0, 2, 4].map((i) => parseInt(digits.slice(i, i + 2), 16) / 255);\n const max = Math.max(r, g, b);\n return { h: hueOf(r, g, b), s: max ? (max - Math.min(r, g, b)) / max : 0, v: max };\n}\n\nfunction toHex({ h, s, v }: Hsv): string {\n const channel = (n: number) => {\n const k = (n + h / 60) % 6;\n return v - v * s * Math.max(0, Math.min(k, 4 - k, 1));\n };\n return '#' + [5, 3, 1].map((n) => Math.round(channel(n) * 255).toString(16).padStart(2, '0')).join('');\n}\n\n// Area keys as [saturation, brightness] steps of 1%; Shift takes ten of them.\n// Home and End overshoot so the clamp lands on the ends of saturation.\nconst KEY_STEPS: Record<string, [number, number]> = {\n ArrowRight: [1, 0],\n ArrowLeft: [-1, 0],\n ArrowUp: [0, 1],\n ArrowDown: [0, -1],\n PageUp: [0, 10],\n PageDown: [0, -10],\n Home: [-100, 0],\n End: [100, 0]\n};\n\n/**\n * Color picker. Enhances a `.color-picker` holding an `<input type=\"color\">`\n * with a saturation and brightness area, a hue slider and a hex field. The\n * native input stays the form value and the preview, so the browser's own\n * picker still opens from it, and it fires `input` and `change` as it would\n * if the person had used that picker.\n */\nexport class ColorPicker extends Component<ColorPickerOptions> {\n /** The native color input that holds the value. */\n input: HTMLInputElement | null;\n private _hsv: Hsv = { h: 0, s: 0, v: 0 };\n private _area: HTMLDivElement | null = null;\n private _thumb: HTMLDivElement | null = null;\n private _hue: HTMLInputElement | null = null;\n private _hex: HTMLInputElement | null = null;\n // Set while the picker writes the native input, so its own events are not\n // read back as an outside change.\n private _writing = false;\n\n constructor(el: HTMLElement, options: Partial<ColorPickerOptions>) {\n super(el, options);\n this.input = el.querySelector<HTMLInputElement>(':scope > input[type=\"color\"]');\n if (!this.input) return;\n this._hsv = toHsv(this.input.value) ?? this._hsv;\n this._build();\n this.input.addEventListener('input', this._onNativeInput, { signal: this._events.signal });\n this._render();\n }\n\n static get defaults(): ColorPickerOptions {\n return _defaults;\n }\n\n static key = 'Expressive_ColorPicker';\n\n destroy() {\n for (const part of [this._area, this._hue, this._hex]) part?.remove();\n this._area = this._thumb = this._hue = this._hex = null;\n this.el.style.removeProperty('--_color-picker-hue');\n super.destroy();\n }\n\n /** The current color as `#rrggbb`. Setting it fires no events, as with a native input. */\n get value(): string {\n return this.input?.value ?? '';\n }\n\n set value(hex: string) {\n const hsv = toHsv(hex);\n if (!hsv || !this.input) return;\n this._hsv = hsv;\n this._writing = true;\n this.input.value = toHex(hsv);\n this._writing = false;\n this._render();\n }\n\n private _build() {\n const disabled = this.input!.disabled;\n\n const area = document.createElement('div');\n area.className = 'color-picker-area';\n const thumb = document.createElement('div');\n thumb.className = 'color-picker-thumb';\n thumb.setAttribute('role', 'slider');\n thumb.setAttribute('aria-label', 'Saturation and brightness');\n thumb.setAttribute('aria-valuemin', '0');\n thumb.setAttribute('aria-valuemax', '100');\n thumb.tabIndex = disabled ? -1 : 0;\n if (disabled) thumb.setAttribute('aria-disabled', 'true');\n area.append(thumb);\n\n const hue = document.createElement('input');\n hue.type = 'range';\n hue.className = 'color-picker-hue';\n hue.min = '0';\n hue.max = '359';\n hue.setAttribute('aria-label', 'Hue');\n hue.disabled = disabled;\n\n const hex = document.createElement('input');\n hex.type = 'text';\n hex.className = 'color-picker-hex';\n hex.setAttribute('aria-label', 'Hex color');\n hex.autocomplete = 'off';\n hex.spellcheck = false;\n hex.maxLength = 7;\n hex.disabled = disabled;\n\n // Area and hue before the native input, the hex field after it.\n this.input!.before(area, hue);\n this.input!.after(hex);\n this._area = area;\n this._thumb = thumb;\n this._hue = hue;\n this._hex = hex;\n\n area.addEventListener('pointerdown', this._onPointerDown);\n thumb.addEventListener('keydown', this._onKeyDown);\n hue.addEventListener('input', () => this._set({ ...this._hsv, h: Number(hue.value) }, false));\n hue.addEventListener('change', () => this._commit());\n hex.addEventListener('change', this._onHex);\n hex.addEventListener('keydown', (e) => {\n // Enter in a text field would submit the form; take it as \"apply\".\n if (e.key === 'Enter' && !Utils.isComposing(e)) {\n e.preventDefault();\n this._onHex();\n }\n });\n }\n\n private _render() {\n const { h, s, v } = this._hsv;\n const hex = toHex(this._hsv);\n const thumb = this._thumb!;\n this.el.style.setProperty('--_color-picker-hue', String(Math.round(h)));\n thumb.style.setProperty('--_color-picker-x', String(s));\n thumb.style.setProperty('--_color-picker-y', String(1 - v));\n thumb.style.setProperty('--_color-picker-color', hex);\n thumb.setAttribute('aria-valuenow', String(Math.round(s * 100)));\n thumb.setAttribute('aria-valuetext', `Saturation ${Math.round(s * 100)}%, brightness ${Math.round(v * 100)}%`);\n this._hue!.value = String(Math.round(h));\n // The hex field only commits on change, so rewriting it never fights typing.\n this._hex!.value = hex;\n }\n\n // Store the color, write it to the native input and fire `input`; with\n // `commit`, also fire `change` and onChange.\n // Only reached from the built controls, which a disabled input disables.\n private _set(hsv: Hsv, commit = true) {\n const input = this.input!;\n this._hsv = hsv;\n const hex = toHex(hsv);\n const changed = input.value !== hex;\n this._writing = true;\n input.value = hex;\n if (changed) input.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n this._writing = false;\n this._render();\n if (commit) this._commit();\n }\n\n private _commit() {\n if (!this.input) return;\n this._writing = true;\n this.input.dispatchEvent(new Event('change', { bubbles: true }));\n this._writing = false;\n this.options.onChange?.(this.input.value);\n }\n\n // The person used the browser's own picker on the native input.\n private _onNativeInput = () => {\n if (this._writing || !this.input) return;\n const hsv = toHsv(this.input.value);\n if (!hsv) return;\n this._hsv = hsv;\n this._render();\n };\n\n private _onHex = () => {\n const hsv = toHsv(this._hex!.value);\n if (hsv && toHex(hsv) !== this.input!.value) this._set(hsv);\n // An invalid entry goes back to the current color.\n this._hex!.value = toHex(this._hsv);\n };\n\n private _fromPoint(e: PointerEvent, commit: boolean) {\n const box = this._area!.getBoundingClientRect();\n const s = clamp((e.clientX - box.left) / box.width);\n const v = 1 - clamp((e.clientY - box.top) / box.height);\n this._set({ ...this._hsv, s, v }, commit);\n }\n\n private _onPointerDown = (e: PointerEvent) => {\n if (e.button || this.input!.disabled) return;\n const area = this._area!;\n e.preventDefault();\n this._thumb!.focus();\n area.setPointerCapture(e.pointerId);\n this._fromPoint(e, false);\n const move = (ev: PointerEvent) => this._fromPoint(ev, false);\n const drag = controllerFor(area);\n const up = (ev: PointerEvent) => {\n drag.abort();\n this._fromPoint(ev, true);\n };\n const { signal } = drag;\n area.addEventListener('pointermove', move, { signal });\n area.addEventListener('pointerup', up, { signal });\n area.addEventListener('pointercancel', up, { signal });\n };\n\n // Left and right change saturation, up and down brightness; see KEY_STEPS.\n private _onKeyDown = (e: KeyboardEvent) => {\n const steps = KEY_STEPS[e.key];\n if (!steps || this.input!.disabled) return;\n e.preventDefault();\n const unit = e.shiftKey ? 0.1 : 0.01;\n const { s, v } = this._hsv;\n this._set({ ...this._hsv, s: clamp(s + steps[0] * unit), v: clamp(v + steps[1] * unit) });\n };\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/ts/behaviors/bottomSheets.ts"],
4
- "sourcesContent": ["import { DISMISS_DISTANCE, DISMISS_VELOCITY, installSheetDrag } from './sheetDrag';\nimport { Utils } from '../core/utils';\n\nconst SHEET_SELECTOR = 'dialog.bottom-sheet';\n/** Past this a drag up expands an .expandable sheet, in pixels; a drag down uses the dismissal distance. */\nconst RESIZE_DISTANCE = 48;\n\n/** Whether a drag went past `distance`, or flicked, down (1) or up (-1). */\nconst toward = (sign: 1 | -1, distance: number, delta: number, velocity: number) =>\n delta * sign > distance || velocity * sign > DISMISS_VELOCITY;\n\n/**\n * Drag-to-dismiss for `dialog.bottom-sheet`, and two heights for\n * `.expandable` sheets.\n *\n * The handle is the top 48dp of the sheet, or an explicit `.drag-handle`. A downward drag past 96dp, or a\n * flick, closes. Anything else snaps back. Content below the handle scrolls\n * normally. Light-dismiss on the scrim stays with {@link Dialogs}.\n *\n * The drag itself is {@link installSheetDrag}, shared with the side sheet. What\n * is here is what is not shared: a handle written as a `<button>` also closes\n * the sheet when it is *activated*, which is what makes it reachable without a\n * pointer - dragging is a pointer gesture, so a control labelled \"Dismiss\" that\n * only answers a drag promises an action a keyboard user cannot perform. A\n * handle written as any other element is decoration and does nothing here -\n * Escape still closes the sheet either way, natively.\n *\n * An `.expandable` sheet opens partly expanded. A drag up, or a flick up,\n * expands it to its full height with `.expanded`; from there a drag down\n * collapses it, and a drag down from the partial height dismisses as usual.\n * Its handle button switches between the two heights instead of closing,\n * and carries `aria-expanded`. Closing the sheet puts it back to partial.\n */\nexport class BottomSheets {\n /**\n * Whether the last pointer sequence moved. A drag ends with a `click` on the\n * element it started on, so without this the tail of a drag that snapped back\n * would dismiss the sheet the drag had just declined to dismiss.\n */\n private static _dragged = false;\n\n static Init() {\n installSheetDrag({\n selector: SHEET_SELECTOR,\n axis: 'y',\n property: '--md-comp-bottom-sheet-shift',\n motion: '--md-comp-bottom-sheet-motion',\n direction: () => 1,\n inHandle: (event, dialog) => {\n if (Utils.closestInPath(event, '.drag-handle')) return true;\n const rect = dialog.getBoundingClientRect();\n return event.clientY >= rect.top && event.clientY <= rect.top + 48;\n },\n onPress: () => {\n BottomSheets._dragged = false;\n },\n onRelease: (dragged) => {\n BottomSheets._dragged = dragged;\n },\n release: (dialog, delta, velocity) => BottomSheets._resize(dialog, delta, velocity)\n });\n Utils.onDocumentReady(() => {\n document.addEventListener('click', BottomSheets._onClick);\n // close does not bubble, so it is caught on its way down.\n document.addEventListener('close', BottomSheets._onClose, true);\n });\n }\n\n /**\n * For an .expandable sheet, a drag up expands it and a drag down from\n * expanded collapses it. Returns whether the drag resized the sheet.\n */\n static _resize(dialog: HTMLDialogElement, delta: number, velocity: number): boolean {\n if (!dialog.classList.contains('expandable')) return false;\n const expanded = dialog.classList.contains('expanded');\n const next = expanded ? !toward(1, DISMISS_DISTANCE, delta, velocity) : toward(-1, RESIZE_DISTANCE, delta, velocity);\n if (next === expanded) return false;\n BottomSheets.setExpanded(dialog, next);\n return true;\n }\n\n /** Sets an .expandable sheet to its full height or back to partial, and tells its handle. */\n static setExpanded(dialog: HTMLDialogElement, expanded: boolean) {\n dialog.classList.toggle('expanded', expanded);\n dialog.querySelector(':scope > button.drag-handle')?.setAttribute('aria-expanded', String(expanded));\n }\n\n private static _onClose(event: Event) {\n const dialog = event.target as Element;\n if (dialog.matches?.(`${SHEET_SELECTOR}.expandable`)) BottomSheets.setExpanded(dialog as HTMLDialogElement, false);\n }\n\n static _onClick(event: MouseEvent) {\n const handle = Utils.closestInPath(event, '.drag-handle');\n // Only a <button> is a control. A decorative <span> in the same slot is\n // exactly what it looks like, and clicking it does nothing.\n if (!(handle instanceof HTMLButtonElement)) return;\n // `detail` is 0 when the click came from Enter or Space and >= 1 when a\n // pointer produced it, so the keyboard path is decided without consulting\n // pointer state at all - a stale drag can never swallow a key press.\n if (event.detail !== 0 && BottomSheets._dragged) return;\n const dialog = handle.closest(SHEET_SELECTOR);\n if (dialog instanceof HTMLDialogElement && dialog.open) BottomSheets._activate(dialog);\n }\n\n /** The handle button switches an .expandable sheet's height, and closes any other. */\n private static _activate(dialog: HTMLDialogElement) {\n if (dialog.classList.contains('expandable')) BottomSheets.setExpanded(dialog, !dialog.classList.contains('expanded'));\n else dialog.close();\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;AAGA,IAAM,iBAAiB;AAEvB,IAAM,kBAAkB;AAGxB,IAAM,SAAS,CAAC,MAAc,UAAkB,OAAe,aAC7D,QAAQ,OAAO,YAAY,WAAW,OAAO;AAwBxC,IAAM,gBAAN,MAAM,cAAa;AAAA,EAQxB,OAAO,OAAO;AACZ,qBAAiB;AAAA,MACf,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW,MAAM;AAAA,MACjB,UAAU,CAAC,OAAO,WAAW;AAC3B,YAAI,MAAM,cAAc,OAAO,cAAc,EAAG,QAAO;AACvD,cAAM,OAAO,OAAO,sBAAsB;AAC1C,eAAO,MAAM,WAAW,KAAK,OAAO,MAAM,WAAW,KAAK,MAAM;AAAA,MAClE;AAAA,MACA,SAAS,MAAM;AACb,sBAAa,WAAW;AAAA,MAC1B;AAAA,MACA,WAAW,CAAC,YAAY;AACtB,sBAAa,WAAW;AAAA,MAC1B;AAAA,MACA,SAAS,CAAC,QAAQ,OAAO,aAAa,cAAa,QAAQ,QAAQ,OAAO,QAAQ;AAAA,IACpF,CAAC;AACD,UAAM,gBAAgB,MAAM;AAC1B,eAAS,iBAAiB,SAAS,cAAa,QAAQ;AAExD,eAAS,iBAAiB,SAAS,cAAa,UAAU,IAAI;AAAA,IAChE,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,QAAQ,QAA2B,OAAe,UAA2B;AAClF,QAAI,CAAC,OAAO,UAAU,SAAS,YAAY,EAAG,QAAO;AACrD,UAAM,WAAW,OAAO,UAAU,SAAS,UAAU;AACrD,UAAM,OAAO,WAAW,CAAC,OAAO,GAAG,kBAAkB,OAAO,QAAQ,IAAI,OAAO,IAAI,iBAAiB,OAAO,QAAQ;AACnH,QAAI,SAAS,SAAU,QAAO;AAC9B,kBAAa,YAAY,QAAQ,IAAI;AACrC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,YAAY,QAA2B,UAAmB;AAC/D,WAAO,UAAU,OAAO,YAAY,QAAQ;AAC5C,WAAO,cAAc,6BAA6B,GAAG,aAAa,iBAAiB,OAAO,QAAQ,CAAC;AAAA,EACrG;AAAA,EAEA,OAAe,SAAS,OAAc;AACpC,UAAM,SAAS,MAAM;AACrB,QAAI,OAAO,UAAU,GAAG,cAAc,aAAa,EAAG,eAAa,YAAY,QAA6B,KAAK;AAAA,EACnH;AAAA,EAEA,OAAO,SAAS,OAAmB;AACjC,UAAM,SAAS,MAAM,cAAc,OAAO,cAAc;AAGxD,QAAI,EAAE,kBAAkB,mBAAoB;AAI5C,QAAI,MAAM,WAAW,KAAK,cAAa,SAAU;AACjD,UAAM,SAAS,OAAO,QAAQ,cAAc;AAC5C,QAAI,kBAAkB,qBAAqB,OAAO,KAAM,eAAa,UAAU,MAAM;AAAA,EACvF;AAAA;AAAA,EAGA,OAAe,UAAU,QAA2B;AAClD,QAAI,OAAO,UAAU,SAAS,YAAY,EAAG,eAAa,YAAY,QAAQ,CAAC,OAAO,UAAU,SAAS,UAAU,CAAC;AAAA,QAC/G,QAAO,MAAM;AAAA,EACpB;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AA7Ea,cAMI,WAAW;AANrB,IAAM,eAAN;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- // src/ts/modular.ts
2
- var version = "0.16.0";
3
-
4
- export {
5
- version
6
- };
7
- //# sourceMappingURL=chunk-4IKVPCSU.mjs.map