@expressivecss/expressive 0.14.1 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (603) hide show
  1. package/CHANGELOG.md +1589 -1
  2. package/README.md +9 -8
  3. package/dist/css/expressive.css +19304 -12021
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/fonts/LICENSE-noto-sans-arabic +93 -0
  8. package/dist/fonts/LICENSE-noto-sans-hebrew +93 -0
  9. package/dist/fonts/LICENSE-noto-sans-thai +93 -0
  10. package/dist/fonts/material-symbols-outlined.woff2 +0 -0
  11. package/dist/fonts/material-symbols-rounded.woff2 +0 -0
  12. package/dist/fonts/material-symbols-sharp.woff2 +0 -0
  13. package/dist/fonts/noto-sans-arabic-arabic-400.woff2 +0 -0
  14. package/dist/fonts/noto-sans-arabic-arabic-500.woff2 +0 -0
  15. package/dist/fonts/noto-sans-arabic-arabic-700.woff2 +0 -0
  16. package/dist/fonts/noto-sans-cyrillic-400.woff2 +0 -0
  17. package/dist/fonts/noto-sans-cyrillic-500.woff2 +0 -0
  18. package/dist/fonts/noto-sans-cyrillic-700.woff2 +0 -0
  19. package/dist/fonts/noto-sans-cyrillic-ext-400.woff2 +0 -0
  20. package/dist/fonts/noto-sans-cyrillic-ext-500.woff2 +0 -0
  21. package/dist/fonts/noto-sans-cyrillic-ext-700.woff2 +0 -0
  22. package/dist/fonts/noto-sans-devanagari-400.woff2 +0 -0
  23. package/dist/fonts/noto-sans-devanagari-500.woff2 +0 -0
  24. package/dist/fonts/noto-sans-devanagari-700.woff2 +0 -0
  25. package/dist/fonts/noto-sans-greek-400.woff2 +0 -0
  26. package/dist/fonts/noto-sans-greek-500.woff2 +0 -0
  27. package/dist/fonts/noto-sans-greek-700.woff2 +0 -0
  28. package/dist/fonts/noto-sans-greek-ext-400.woff2 +0 -0
  29. package/dist/fonts/noto-sans-greek-ext-500.woff2 +0 -0
  30. package/dist/fonts/noto-sans-greek-ext-700.woff2 +0 -0
  31. package/dist/fonts/noto-sans-hebrew-hebrew-400.woff2 +0 -0
  32. package/dist/fonts/noto-sans-hebrew-hebrew-500.woff2 +0 -0
  33. package/dist/fonts/noto-sans-hebrew-hebrew-700.woff2 +0 -0
  34. package/dist/fonts/noto-sans-latin-700.woff2 +0 -0
  35. package/dist/fonts/noto-sans-latin-ext-400.woff2 +0 -0
  36. package/dist/fonts/noto-sans-latin-ext-500.woff2 +0 -0
  37. package/dist/fonts/noto-sans-latin-ext-700.woff2 +0 -0
  38. package/dist/fonts/noto-sans-thai-thai-400.woff2 +0 -0
  39. package/dist/fonts/noto-sans-thai-thai-500.woff2 +0 -0
  40. package/dist/fonts/noto-sans-thai-thai-700.woff2 +0 -0
  41. package/dist/fonts/noto-sans-vietnamese-400.woff2 +0 -0
  42. package/dist/fonts/noto-sans-vietnamese-500.woff2 +0 -0
  43. package/dist/fonts/noto-sans-vietnamese-700.woff2 +0 -0
  44. package/dist/fonts/roboto-cyrillic-400.woff2 +0 -0
  45. package/dist/fonts/roboto-cyrillic-500.woff2 +0 -0
  46. package/dist/fonts/roboto-cyrillic-700.woff2 +0 -0
  47. package/dist/fonts/roboto-cyrillic-ext-400.woff2 +0 -0
  48. package/dist/fonts/roboto-cyrillic-ext-500.woff2 +0 -0
  49. package/dist/fonts/roboto-cyrillic-ext-700.woff2 +0 -0
  50. package/dist/fonts/roboto-greek-400.woff2 +0 -0
  51. package/dist/fonts/roboto-greek-500.woff2 +0 -0
  52. package/dist/fonts/roboto-greek-700.woff2 +0 -0
  53. package/dist/fonts/roboto-greek-ext-400.woff2 +0 -0
  54. package/dist/fonts/roboto-greek-ext-500.woff2 +0 -0
  55. package/dist/fonts/roboto-greek-ext-700.woff2 +0 -0
  56. package/dist/fonts/roboto-latin-700.woff2 +0 -0
  57. package/dist/fonts/roboto-latin-ext-400.woff2 +0 -0
  58. package/dist/fonts/roboto-latin-ext-500.woff2 +0 -0
  59. package/dist/fonts/roboto-latin-ext-700.woff2 +0 -0
  60. package/dist/fonts/roboto-vietnamese-400.woff2 +0 -0
  61. package/dist/fonts/roboto-vietnamese-500.woff2 +0 -0
  62. package/dist/fonts/roboto-vietnamese-700.woff2 +0 -0
  63. package/dist/js/chunks/chunk-2CS6TITK.mjs +219 -0
  64. package/dist/js/chunks/chunk-2CS6TITK.mjs.map +7 -0
  65. package/dist/js/chunks/chunk-2RLBDFH4.mjs +108 -0
  66. package/dist/js/chunks/chunk-2RLBDFH4.mjs.map +7 -0
  67. package/dist/js/chunks/chunk-3L3QIYLC.mjs +85 -0
  68. package/dist/js/chunks/chunk-3L3QIYLC.mjs.map +7 -0
  69. package/dist/js/chunks/chunk-4EWGD4V2.mjs +75 -0
  70. package/dist/js/chunks/chunk-4EWGD4V2.mjs.map +7 -0
  71. package/dist/js/chunks/chunk-4IKVPCSU.mjs +7 -0
  72. package/dist/js/chunks/chunk-4IKVPCSU.mjs.map +7 -0
  73. package/dist/js/chunks/chunk-4PIXLDNJ.mjs +127 -0
  74. package/dist/js/chunks/chunk-4PIXLDNJ.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-A7ALMYUR.mjs → chunk-4QUCNFSD.mjs} +68 -125
  76. package/dist/js/chunks/chunk-4QUCNFSD.mjs.map +7 -0
  77. package/dist/js/chunks/{chunk-4TKTLGEM.mjs → chunk-4TRZ2AER.mjs} +35 -41
  78. package/dist/js/chunks/chunk-4TRZ2AER.mjs.map +7 -0
  79. package/dist/js/chunks/{chunk-BG6ZRB5H.mjs → chunk-5KIHWJI2.mjs} +40 -26
  80. package/dist/js/chunks/chunk-5KIHWJI2.mjs.map +7 -0
  81. package/dist/js/chunks/{chunk-YDCS5S3J.mjs → chunk-67ZPPKXS.mjs} +20 -33
  82. package/dist/js/chunks/chunk-67ZPPKXS.mjs.map +7 -0
  83. package/dist/js/chunks/{chunk-3DHK5CZU.mjs → chunk-6FSEUFVW.mjs} +40 -29
  84. package/dist/js/chunks/chunk-6FSEUFVW.mjs.map +7 -0
  85. package/dist/js/chunks/chunk-752ADW4M.mjs +225 -0
  86. package/dist/js/chunks/chunk-752ADW4M.mjs.map +7 -0
  87. package/dist/js/chunks/{chunk-GVGT6MIU.mjs → chunk-75E5EDJF.mjs} +3 -11
  88. package/dist/js/chunks/chunk-75E5EDJF.mjs.map +7 -0
  89. package/dist/js/chunks/{chunk-TBM3FT7G.mjs → chunk-7NLUI3RR.mjs} +148 -78
  90. package/dist/js/chunks/chunk-7NLUI3RR.mjs.map +7 -0
  91. package/dist/js/chunks/chunk-7W7TV6NY.mjs +108 -0
  92. package/dist/js/chunks/chunk-7W7TV6NY.mjs.map +7 -0
  93. package/dist/js/chunks/chunk-7YQBHTK3.mjs +225 -0
  94. package/dist/js/chunks/chunk-7YQBHTK3.mjs.map +7 -0
  95. package/dist/js/chunks/chunk-7YZ5CN3V.mjs +33 -0
  96. package/dist/js/chunks/chunk-7YZ5CN3V.mjs.map +7 -0
  97. package/dist/js/chunks/chunk-AI73GJKG.mjs +28 -0
  98. package/dist/js/chunks/chunk-AI73GJKG.mjs.map +7 -0
  99. package/dist/js/chunks/{chunk-NS2UMNZV.mjs → chunk-ANKFWNWT.mjs} +21 -45
  100. package/dist/js/chunks/chunk-ANKFWNWT.mjs.map +7 -0
  101. package/dist/js/chunks/{chunk-GIW4K4SE.mjs → chunk-B7DQFHA5.mjs} +37 -53
  102. package/dist/js/chunks/chunk-B7DQFHA5.mjs.map +7 -0
  103. package/dist/js/chunks/chunk-BIGU5RCJ.mjs +153 -0
  104. package/dist/js/chunks/chunk-BIGU5RCJ.mjs.map +7 -0
  105. package/dist/js/chunks/{chunk-GUB3TNO2.mjs → chunk-BPF3I2MN.mjs} +109 -27
  106. package/dist/js/chunks/chunk-BPF3I2MN.mjs.map +7 -0
  107. package/dist/js/chunks/chunk-CMGXGYUC.mjs +74 -0
  108. package/dist/js/chunks/chunk-CMGXGYUC.mjs.map +7 -0
  109. package/dist/js/chunks/{chunk-JIDMQGK6.mjs → chunk-CSYWKEK3.mjs} +322 -223
  110. package/dist/js/chunks/chunk-CSYWKEK3.mjs.map +7 -0
  111. package/dist/js/chunks/chunk-CZSQHXEV.mjs +227 -0
  112. package/dist/js/chunks/chunk-CZSQHXEV.mjs.map +7 -0
  113. package/dist/js/chunks/chunk-DZYVU75J.mjs +121 -0
  114. package/dist/js/chunks/chunk-DZYVU75J.mjs.map +7 -0
  115. package/dist/js/chunks/{chunk-QDAL4IYN.mjs → chunk-EC26RU2D.mjs} +11 -29
  116. package/dist/js/chunks/chunk-EC26RU2D.mjs.map +7 -0
  117. package/dist/js/chunks/{chunk-3GVFZ4XO.mjs → chunk-EVCVFEV3.mjs} +238 -152
  118. package/dist/js/chunks/chunk-EVCVFEV3.mjs.map +7 -0
  119. package/dist/js/chunks/chunk-FCNF4GRJ.mjs +445 -0
  120. package/dist/js/chunks/chunk-FCNF4GRJ.mjs.map +7 -0
  121. package/dist/js/chunks/chunk-GCWWEZKO.mjs +342 -0
  122. package/dist/js/chunks/chunk-GCWWEZKO.mjs.map +7 -0
  123. package/dist/js/chunks/chunk-GNRSYMVH.mjs +1 -0
  124. package/dist/js/chunks/chunk-GVZQH2H5.mjs +54 -0
  125. package/dist/js/chunks/chunk-GVZQH2H5.mjs.map +7 -0
  126. package/dist/js/chunks/chunk-GWZ76SR4.mjs +435 -0
  127. package/dist/js/chunks/chunk-GWZ76SR4.mjs.map +7 -0
  128. package/dist/js/chunks/{chunk-ZAS25YFD.mjs → chunk-ILDRRG7T.mjs} +21 -23
  129. package/dist/js/chunks/chunk-ILDRRG7T.mjs.map +7 -0
  130. package/dist/js/chunks/chunk-INLZWHLY.mjs +80 -0
  131. package/dist/js/chunks/chunk-INLZWHLY.mjs.map +7 -0
  132. package/dist/js/chunks/chunk-JUKBBN6P.mjs +175 -0
  133. package/dist/js/chunks/chunk-JUKBBN6P.mjs.map +7 -0
  134. package/dist/js/chunks/chunk-KYIEG4U3.mjs +730 -0
  135. package/dist/js/chunks/chunk-KYIEG4U3.mjs.map +7 -0
  136. package/dist/js/chunks/{chunk-KHV6DZXX.mjs → chunk-KZPSAXIU.mjs} +156 -46
  137. package/dist/js/chunks/chunk-KZPSAXIU.mjs.map +7 -0
  138. package/dist/js/chunks/chunk-LDXCC2L3.mjs +438 -0
  139. package/dist/js/chunks/chunk-LDXCC2L3.mjs.map +7 -0
  140. package/dist/js/chunks/chunk-NAC72P7R.mjs +137 -0
  141. package/dist/js/chunks/chunk-NAC72P7R.mjs.map +7 -0
  142. package/dist/js/chunks/chunk-NBJAUGPP.mjs +244 -0
  143. package/dist/js/chunks/chunk-NBJAUGPP.mjs.map +7 -0
  144. package/dist/js/chunks/chunk-NNHVANQA.mjs +113 -0
  145. package/dist/js/chunks/chunk-NNHVANQA.mjs.map +7 -0
  146. package/dist/js/chunks/chunk-NVQ5EHCU.mjs +376 -0
  147. package/dist/js/chunks/chunk-NVQ5EHCU.mjs.map +7 -0
  148. package/dist/js/chunks/{chunk-Z2NRKI7R.mjs → chunk-OP43LLIC.mjs} +44 -73
  149. package/dist/js/chunks/chunk-OP43LLIC.mjs.map +7 -0
  150. package/dist/js/chunks/chunk-OUCHKSAW.mjs +63 -0
  151. package/dist/js/chunks/chunk-OUCHKSAW.mjs.map +7 -0
  152. package/dist/js/chunks/{chunk-PM655FXL.mjs → chunk-OYNUDOHR.mjs} +20 -48
  153. package/dist/js/chunks/chunk-OYNUDOHR.mjs.map +7 -0
  154. package/dist/js/chunks/{chunk-UEZUJQ66.mjs → chunk-P6DRQ6KS.mjs} +36 -31
  155. package/dist/js/chunks/chunk-P6DRQ6KS.mjs.map +7 -0
  156. package/dist/js/chunks/chunk-PA7NU5AK.mjs +99 -0
  157. package/dist/js/chunks/chunk-PA7NU5AK.mjs.map +7 -0
  158. package/dist/js/chunks/chunk-QACZ6TUP.mjs +224 -0
  159. package/dist/js/chunks/chunk-QACZ6TUP.mjs.map +7 -0
  160. package/dist/js/chunks/{chunk-5HQSGDZ5.mjs → chunk-QXKWVHBD.mjs} +286 -203
  161. package/dist/js/chunks/chunk-QXKWVHBD.mjs.map +7 -0
  162. package/dist/js/chunks/{chunk-DAIU5SLG.mjs → chunk-ROH2HDB4.mjs} +7 -6
  163. package/dist/js/chunks/chunk-ROH2HDB4.mjs.map +7 -0
  164. package/dist/js/chunks/chunk-S23RJ3XY.mjs +86 -0
  165. package/dist/js/chunks/chunk-S23RJ3XY.mjs.map +7 -0
  166. package/dist/js/chunks/{chunk-FS7XY3HT.mjs → chunk-SPPHF7YZ.mjs} +36 -29
  167. package/dist/js/chunks/chunk-SPPHF7YZ.mjs.map +7 -0
  168. package/dist/js/chunks/chunk-T3BNSRP3.mjs +152 -0
  169. package/dist/js/chunks/chunk-T3BNSRP3.mjs.map +7 -0
  170. package/dist/js/chunks/chunk-TFABTUAZ.mjs +108 -0
  171. package/dist/js/chunks/chunk-TFABTUAZ.mjs.map +7 -0
  172. package/dist/js/chunks/chunk-U4B3VHFS.mjs +507 -0
  173. package/dist/js/chunks/chunk-U4B3VHFS.mjs.map +7 -0
  174. package/dist/js/chunks/chunk-UGJHCHXG.mjs +341 -0
  175. package/dist/js/chunks/chunk-UGJHCHXG.mjs.map +7 -0
  176. package/dist/js/chunks/chunk-VFV75DHF.mjs +70 -0
  177. package/dist/js/chunks/chunk-VFV75DHF.mjs.map +7 -0
  178. package/dist/js/chunks/{chunk-4HZMB7LI.mjs → chunk-VGY4M57S.mjs} +281 -135
  179. package/dist/js/chunks/chunk-VGY4M57S.mjs.map +7 -0
  180. package/dist/js/chunks/chunk-VH4BMAZS.mjs +167 -0
  181. package/dist/js/chunks/chunk-VH4BMAZS.mjs.map +7 -0
  182. package/dist/js/chunks/chunk-VJVQIXHC.mjs +123 -0
  183. package/dist/js/chunks/chunk-VJVQIXHC.mjs.map +7 -0
  184. package/dist/js/chunks/{chunk-S3XDFGSZ.mjs → chunk-VMY55K2X.mjs} +92 -141
  185. package/dist/js/chunks/chunk-VMY55K2X.mjs.map +7 -0
  186. package/dist/js/chunks/{chunk-UEXCIMJZ.mjs → chunk-VR3L2WN5.mjs} +11 -17
  187. package/dist/js/chunks/chunk-VR3L2WN5.mjs.map +7 -0
  188. package/dist/js/chunks/chunk-W6FAL3TI.mjs +38 -0
  189. package/dist/js/chunks/chunk-W6FAL3TI.mjs.map +7 -0
  190. package/dist/js/chunks/chunk-WU7XJ4RR.mjs +450 -0
  191. package/dist/js/chunks/chunk-WU7XJ4RR.mjs.map +7 -0
  192. package/dist/js/chunks/chunk-X7SDA2J5.mjs +116 -0
  193. package/dist/js/chunks/chunk-X7SDA2J5.mjs.map +7 -0
  194. package/dist/js/chunks/chunk-Y6H2X7ZC.mjs +209 -0
  195. package/dist/js/chunks/chunk-Y6H2X7ZC.mjs.map +7 -0
  196. package/dist/js/chunks/chunk-Y6TLRA3U.mjs +129 -0
  197. package/dist/js/chunks/chunk-Y6TLRA3U.mjs.map +7 -0
  198. package/dist/js/chunks/chunk-Z4GICXR2.mjs +190 -0
  199. package/dist/js/chunks/chunk-Z4GICXR2.mjs.map +7 -0
  200. package/dist/js/chunks/chunk-Z4OARDZ7.mjs +442 -0
  201. package/dist/js/chunks/chunk-Z4OARDZ7.mjs.map +7 -0
  202. package/dist/js/chunks/{chunk-MZ6Z24BX.mjs → chunk-ZJNLAGY5.mjs} +19 -34
  203. package/dist/js/chunks/chunk-ZJNLAGY5.mjs.map +7 -0
  204. package/dist/js/chunks/chunk-ZKWUWBUB.mjs +81 -0
  205. package/dist/js/chunks/chunk-ZKWUWBUB.mjs.map +7 -0
  206. package/dist/js/chunks/chunk-ZM3XBHWV.mjs +746 -0
  207. package/dist/js/chunks/chunk-ZM3XBHWV.mjs.map +7 -0
  208. package/dist/js/chunks/chunk-ZO6ZLHFF.mjs +48 -0
  209. package/dist/js/chunks/chunk-ZO6ZLHFF.mjs.map +7 -0
  210. package/dist/js/chunks/chunk-ZVLOUDIJ.mjs +251 -0
  211. package/dist/js/chunks/chunk-ZVLOUDIJ.mjs.map +7 -0
  212. package/dist/js/expressive.cjs +10333 -4070
  213. package/dist/js/expressive.cjs.map +4 -4
  214. package/dist/js/expressive.js +10333 -4070
  215. package/dist/js/expressive.js.map +4 -4
  216. package/dist/js/expressive.min.js +23 -25
  217. package/dist/js/expressive.min.js.map +4 -4
  218. package/dist/js/expressive.mjs +184 -69
  219. package/dist/js/expressive.mjs.map +2 -2
  220. package/dist/js/internal/behaviors/bottomSheets.mjs +4 -3
  221. package/dist/js/internal/behaviors/copy.mjs +9 -0
  222. package/dist/js/internal/behaviors/copy.mjs.map +7 -0
  223. package/dist/js/internal/behaviors/dataTables.mjs +10 -0
  224. package/dist/js/internal/behaviors/dataTables.mjs.map +7 -0
  225. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  226. package/dist/js/internal/behaviors/forms.mjs +2 -2
  227. package/dist/js/internal/behaviors/imageCompare.mjs +8 -0
  228. package/dist/js/internal/behaviors/imageCompare.mjs.map +7 -0
  229. package/dist/js/internal/behaviors/lists.mjs +8 -0
  230. package/dist/js/internal/behaviors/lists.mjs.map +7 -0
  231. package/dist/js/internal/behaviors/paneResize.mjs +8 -0
  232. package/dist/js/internal/behaviors/paneResize.mjs.map +7 -0
  233. package/dist/js/internal/behaviors/sheetDrag.mjs +7 -2
  234. package/dist/js/internal/behaviors/sideSheets.mjs +4 -3
  235. package/dist/js/internal/behaviors/sortable.mjs +8 -0
  236. package/dist/js/internal/behaviors/sortable.mjs.map +7 -0
  237. package/dist/js/internal/behaviors/theme.mjs +8 -0
  238. package/dist/js/internal/behaviors/theme.mjs.map +7 -0
  239. package/dist/js/internal/behaviors/tour.mjs +8 -0
  240. package/dist/js/internal/behaviors/tour.mjs.map +7 -0
  241. package/dist/js/internal/behaviors/transferList.mjs +8 -0
  242. package/dist/js/internal/behaviors/transferList.mjs.map +7 -0
  243. package/dist/js/internal/components/appBar.mjs +3 -2
  244. package/dist/js/internal/components/autocomplete.mjs +4 -4
  245. package/dist/js/internal/components/backToTop.mjs +9 -0
  246. package/dist/js/internal/components/backToTop.mjs.map +7 -0
  247. package/dist/js/internal/components/barChart.mjs +5 -4
  248. package/dist/js/internal/components/buttonGroup.mjs +3 -2
  249. package/dist/js/internal/components/buttons.mjs +3 -3
  250. package/dist/js/internal/components/cards.mjs +3 -3
  251. package/dist/js/internal/components/carousel.mjs +3 -3
  252. package/dist/js/internal/components/cascader.mjs +10 -0
  253. package/dist/js/internal/components/cascader.mjs.map +7 -0
  254. package/dist/js/internal/components/characterCounter.mjs +3 -2
  255. package/dist/js/internal/components/chips.mjs +6 -5
  256. package/dist/js/internal/components/colorPicker.mjs +9 -0
  257. package/dist/js/internal/components/colorPicker.mjs.map +7 -0
  258. package/dist/js/internal/components/columnChart.mjs +4 -3
  259. package/dist/js/internal/components/commandPalette.mjs +3 -3
  260. package/dist/js/internal/components/confetti.mjs +3 -2
  261. package/dist/js/internal/components/currencyInput.mjs +9 -0
  262. package/dist/js/internal/components/currencyInput.mjs.map +7 -0
  263. package/dist/js/internal/components/datepicker.mjs +11 -8
  264. package/dist/js/internal/components/expandingCard.mjs +3 -3
  265. package/dist/js/internal/components/funnelChart.mjs +10 -0
  266. package/dist/js/internal/components/funnelChart.mjs.map +7 -0
  267. package/dist/js/internal/components/heatmapChart.mjs +4 -3
  268. package/dist/js/internal/components/hoverCard.mjs +9 -0
  269. package/dist/js/internal/components/hoverCard.mjs.map +7 -0
  270. package/dist/js/internal/components/index.mjs +133 -64
  271. package/dist/js/internal/components/inputMask.mjs +9 -0
  272. package/dist/js/internal/components/inputMask.mjs.map +7 -0
  273. package/dist/js/internal/components/keypad.mjs +9 -0
  274. package/dist/js/internal/components/keypad.mjs.map +7 -0
  275. package/dist/js/internal/components/lightbox.mjs +3 -3
  276. package/dist/js/internal/components/lineChart.mjs +29 -4
  277. package/dist/js/internal/components/loadingOverlay.mjs +9 -0
  278. package/dist/js/internal/components/loadingOverlay.mjs.map +7 -0
  279. package/dist/js/internal/components/mapView.mjs +3 -3
  280. package/dist/js/internal/components/menu.mjs +3 -3
  281. package/dist/js/internal/components/menubar.mjs +10 -0
  282. package/dist/js/internal/components/menubar.mjs.map +7 -0
  283. package/dist/js/internal/components/messageScroller.mjs +3 -3
  284. package/dist/js/internal/components/mixedChart.mjs +5 -4
  285. package/dist/js/internal/components/navigationRail.mjs +3 -2
  286. package/dist/js/internal/components/particles.mjs +3 -2
  287. package/dist/js/internal/components/pieChart.mjs +4 -3
  288. package/dist/js/internal/components/pullToRefresh.mjs +9 -0
  289. package/dist/js/internal/components/pullToRefresh.mjs.map +7 -0
  290. package/dist/js/internal/components/questionnaire.mjs +3 -3
  291. package/dist/js/internal/components/radarChart.mjs +4 -3
  292. package/dist/js/internal/components/radialChart.mjs +4 -3
  293. package/dist/js/internal/components/registry.mjs +59 -40
  294. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  295. package/dist/js/internal/components/sankeyChart.mjs +10 -0
  296. package/dist/js/internal/components/sankeyChart.mjs.map +7 -0
  297. package/dist/js/internal/components/scatterChart.mjs +10 -0
  298. package/dist/js/internal/components/scatterChart.mjs.map +7 -0
  299. package/dist/js/internal/components/scrollspy.mjs +3 -2
  300. package/dist/js/internal/components/select.mjs +4 -4
  301. package/dist/js/internal/components/showMore.mjs +9 -0
  302. package/dist/js/internal/components/showMore.mjs.map +7 -0
  303. package/dist/js/internal/components/slider.mjs +3 -3
  304. package/dist/js/internal/components/snackbar.mjs +2 -2
  305. package/dist/js/internal/components/swipeActions.mjs +9 -0
  306. package/dist/js/internal/components/swipeActions.mjs.map +7 -0
  307. package/dist/js/internal/components/tabs.mjs +3 -4
  308. package/dist/js/internal/components/timepicker.mjs +5 -4
  309. package/dist/js/internal/components/tooltip.mjs +3 -3
  310. package/dist/js/internal/components/treeSelect.mjs +13 -0
  311. package/dist/js/internal/components/treeSelect.mjs.map +7 -0
  312. package/dist/js/internal/components/treemapChart.mjs +10 -0
  313. package/dist/js/internal/components/treemapChart.mjs.map +7 -0
  314. package/dist/js/internal/core/component.mjs +2 -1
  315. package/dist/js/internal/core/formControl.mjs +12 -0
  316. package/dist/js/internal/core/formControl.mjs.map +7 -0
  317. package/dist/js/internal/core/spring.mjs +11 -0
  318. package/dist/js/internal/core/spring.mjs.map +7 -0
  319. package/dist/js/internal/core/utils.mjs +11 -3
  320. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  321. package/dist/js/internal/plugins/modalDisplayPlugin.mjs +13 -0
  322. package/dist/js/internal/plugins/modalDisplayPlugin.mjs.map +7 -0
  323. package/dist/js/modular.mjs +175 -69
  324. package/dist/types/behaviors/bottomSheets.d.ts +19 -3
  325. package/dist/types/behaviors/copy.d.ts +18 -0
  326. package/dist/types/behaviors/dataTables.d.ts +129 -0
  327. package/dist/types/behaviors/dialogs.d.ts +27 -1
  328. package/dist/types/behaviors/forms.d.ts +68 -2
  329. package/dist/types/behaviors/imageCompare.d.ts +12 -0
  330. package/dist/types/behaviors/lists.d.ts +12 -0
  331. package/dist/types/behaviors/paneResize.d.ts +29 -0
  332. package/dist/types/behaviors/sheetDrag.d.ts +18 -0
  333. package/dist/types/behaviors/sideSheets.d.ts +1 -1
  334. package/dist/types/behaviors/sortable.d.ts +28 -0
  335. package/dist/types/behaviors/theme.d.ts +22 -0
  336. package/dist/types/behaviors/tour.d.ts +36 -0
  337. package/dist/types/behaviors/transferList.d.ts +51 -0
  338. package/dist/types/components/appBar.d.ts +5 -6
  339. package/dist/types/components/autocomplete.d.ts +92 -17
  340. package/dist/types/components/backToTop.d.ts +36 -0
  341. package/dist/types/components/barChart.d.ts +3 -6
  342. package/dist/types/components/buttonGroup.d.ts +2 -4
  343. package/dist/types/components/buttons.d.ts +5 -5
  344. package/dist/types/components/cards.d.ts +3 -16
  345. package/dist/types/components/carousel.d.ts +9 -15
  346. package/dist/types/components/cascader.d.ts +130 -0
  347. package/dist/types/components/characterCounter.d.ts +2 -15
  348. package/dist/types/components/chips.d.ts +65 -19
  349. package/dist/types/components/colorPicker.d.ts +42 -0
  350. package/dist/types/components/columnChart.d.ts +23 -10
  351. package/dist/types/components/commandPalette.d.ts +11 -16
  352. package/dist/types/components/confetti.d.ts +2 -4
  353. package/dist/types/components/currencyInput.d.ts +59 -0
  354. package/dist/types/components/datepicker.d.ts +59 -36
  355. package/dist/types/components/expandingCard.d.ts +6 -6
  356. package/dist/types/components/funnelChart.d.ts +38 -0
  357. package/dist/types/components/heatmapChart.d.ts +39 -8
  358. package/dist/types/components/hoverCard.d.ts +58 -0
  359. package/dist/types/components/index.d.ts +17 -1
  360. package/dist/types/components/inputMask.d.ts +30 -0
  361. package/dist/types/components/keypad.d.ts +66 -0
  362. package/dist/types/components/lightbox.d.ts +17 -25
  363. package/dist/types/components/lineChart.d.ts +176 -10
  364. package/dist/types/components/loadingOverlay.d.ts +42 -0
  365. package/dist/types/components/mapView.d.ts +26 -17
  366. package/dist/types/components/menu.d.ts +61 -22
  367. package/dist/types/components/menubar.d.ts +37 -0
  368. package/dist/types/components/messageScroller.d.ts +2 -14
  369. package/dist/types/components/mixedChart.d.ts +15 -6
  370. package/dist/types/components/navigationRail.d.ts +16 -5
  371. package/dist/types/components/particles.d.ts +8 -4
  372. package/dist/types/components/pieChart.d.ts +32 -7
  373. package/dist/types/components/pullToRefresh.d.ts +80 -0
  374. package/dist/types/components/questionnaire.d.ts +58 -16
  375. package/dist/types/components/radarChart.d.ts +10 -6
  376. package/dist/types/components/radialChart.d.ts +58 -8
  377. package/dist/types/components/registry.d.ts +77 -3
  378. package/dist/types/components/richTextEditor.d.ts +6 -14
  379. package/dist/types/components/sankeyChart.d.ts +72 -0
  380. package/dist/types/components/scatterChart.d.ts +102 -0
  381. package/dist/types/components/scrollspy.d.ts +3 -5
  382. package/dist/types/components/select.d.ts +43 -30
  383. package/dist/types/components/showMore.d.ts +51 -0
  384. package/dist/types/components/slider.d.ts +5 -15
  385. package/dist/types/components/snackbar.d.ts +62 -0
  386. package/dist/types/components/swipeActions.d.ts +81 -0
  387. package/dist/types/components/tabs.d.ts +93 -27
  388. package/dist/types/components/timepicker.d.ts +114 -20
  389. package/dist/types/components/tooltip.d.ts +56 -20
  390. package/dist/types/components/treeSelect.d.ts +106 -0
  391. package/dist/types/components/treemapChart.d.ts +56 -0
  392. package/dist/types/core/component.d.ts +43 -25
  393. package/dist/types/core/formControl.d.ts +21 -0
  394. package/dist/types/core/spring.d.ts +20 -0
  395. package/dist/types/core/utils.d.ts +85 -72
  396. package/dist/types/modular.d.ts +33 -1
  397. package/dist/types/plugins/dockedDisplayPlugin.d.ts +10 -7
  398. package/dist/types/plugins/modalDisplayPlugin.d.ts +32 -0
  399. package/package.json +10 -8
  400. package/src/sass/README.md +27 -18
  401. package/src/sass/abstracts/_breakpoints.scss +0 -1
  402. package/src/sass/abstracts/_elevation.scss +13 -7
  403. package/src/sass/abstracts/_index.scss +1 -0
  404. package/src/sass/abstracts/_mixins.scss +438 -92
  405. package/src/sass/abstracts/_spring.scss +63 -0
  406. package/src/sass/abstracts/_variables.scss +43 -15
  407. package/src/sass/base/_fonts.scss +61 -48
  408. package/src/sass/base/_global.scss +105 -34
  409. package/src/sass/base/_index.scss +3 -1
  410. package/src/sass/base/_normalize.scss +59 -114
  411. package/src/sass/base/_print.scss +21 -0
  412. package/src/sass/base/_prose.scss +68 -0
  413. package/src/sass/base/_typography.scss +9 -5
  414. package/src/sass/components/_accordion.scss +9 -16
  415. package/src/sass/components/_alert.scss +102 -0
  416. package/src/sass/components/_aura.scss +8 -3
  417. package/src/sass/components/_avatar.scss +3 -3
  418. package/src/sass/components/_back-to-top.scss +38 -0
  419. package/src/sass/components/_badges.scss +7 -13
  420. package/src/sass/components/_bar-chart.scss +41 -19
  421. package/src/sass/components/_bottom-sheet.scss +44 -16
  422. package/src/sass/components/_breadcrumb.scss +8 -1
  423. package/src/sass/components/_button-groups.scss +44 -89
  424. package/src/sass/components/_buttons.scss +156 -63
  425. package/src/sass/components/_calendar.scss +246 -0
  426. package/src/sass/components/_cards.scss +41 -68
  427. package/src/sass/components/_carousel.scss +43 -158
  428. package/src/sass/components/_cascader.scss +142 -0
  429. package/src/sass/components/_chips.scss +36 -52
  430. package/src/sass/components/_column-chart.scss +19 -12
  431. package/src/sass/components/_command-palette.scss +4 -7
  432. package/src/sass/components/_confetti.scss +0 -2
  433. package/src/sass/components/_countdown.scss +1 -1
  434. package/src/sass/components/_data-table.scss +162 -27
  435. package/src/sass/components/_datepicker.scss +57 -62
  436. package/src/sass/components/_description-list.scss +85 -0
  437. package/src/sass/components/_dialog.scss +42 -44
  438. package/src/sass/components/_docked-display.scss +1 -3
  439. package/src/sass/components/_drag-handle.scss +16 -20
  440. package/src/sass/components/_expanding-card.scss +20 -9
  441. package/src/sass/components/_fab-menu.scss +44 -32
  442. package/src/sass/components/_funnel-chart.scss +124 -0
  443. package/src/sass/components/_heatmap-chart.scss +113 -24
  444. package/src/sass/components/_icon-buttons.scss +7 -8
  445. package/src/sass/components/_icons-material-design.scss +2 -2
  446. package/src/sass/components/_image-compare.scss +108 -0
  447. package/src/sass/components/_index.scss +21 -0
  448. package/src/sass/components/_keypad.scss +182 -0
  449. package/src/sass/components/_kpi.scss +6 -11
  450. package/src/sass/components/_lightbox.scss +26 -20
  451. package/src/sass/components/_line-chart.scss +16 -2
  452. package/src/sass/components/_list.scss +59 -14
  453. package/src/sass/components/_loading-indicator.scss +1 -0
  454. package/src/sass/components/_loading-overlay.scss +105 -0
  455. package/src/sass/components/_map.scss +35 -13
  456. package/src/sass/components/_marquee.scss +3 -2
  457. package/src/sass/components/_mega-menu.scss +137 -0
  458. package/src/sass/components/_menu.scss +159 -182
  459. package/src/sass/components/_menubar.scss +59 -0
  460. package/src/sass/components/_message-scroller.scss +2 -2
  461. package/src/sass/components/_message.scss +3 -3
  462. package/src/sass/components/_mixed-chart.scss +37 -9
  463. package/src/sass/components/_modal-display.scss +21 -0
  464. package/src/sass/components/_navbar.scss +43 -65
  465. package/src/sass/components/_navigation-bar.scss +15 -77
  466. package/src/sass/components/_navigation-rail.scss +171 -121
  467. package/src/sass/components/_org-chart.scss +192 -0
  468. package/src/sass/components/_page-footer.scss +16 -13
  469. package/src/sass/components/_pagination.scss +6 -13
  470. package/src/sass/components/_panes.scss +33 -31
  471. package/src/sass/components/_particles.scss +0 -2
  472. package/src/sass/components/_pie-chart.scss +91 -11
  473. package/src/sass/components/_popover.scss +18 -5
  474. package/src/sass/components/_progress.scss +158 -35
  475. package/src/sass/components/_pull-to-refresh.scss +90 -0
  476. package/src/sass/components/_questionnaire.scss +74 -3
  477. package/src/sass/components/_radar-chart.scss +38 -10
  478. package/src/sass/components/_radial-chart.scss +113 -5
  479. package/src/sass/components/_rich-text-editor.scss +2 -2
  480. package/src/sass/components/_sankey-chart.scss +114 -0
  481. package/src/sass/components/_scatter-chart.scss +153 -0
  482. package/src/sass/components/_scrim.scss +0 -2
  483. package/src/sass/components/_scrollspy.scss +0 -2
  484. package/src/sass/components/_search.scss +26 -22
  485. package/src/sass/components/_show-more.scss +8 -0
  486. package/src/sass/components/_side-sheet.scss +23 -40
  487. package/src/sass/components/_skeleton.scss +2 -4
  488. package/src/sass/components/_snackbar.scss +27 -21
  489. package/src/sass/components/_split-button.scss +5 -5
  490. package/src/sass/components/_stat.scss +3 -8
  491. package/src/sass/components/_stepper.scss +1 -5
  492. package/src/sass/components/_swipe-actions.scss +71 -0
  493. package/src/sass/components/_tabs.scss +51 -32
  494. package/src/sass/components/_timeline.scss +12 -12
  495. package/src/sass/components/_timepicker.scss +111 -112
  496. package/src/sass/components/_toolbar.scss +35 -47
  497. package/src/sass/components/_tooltip.scss +21 -12
  498. package/src/sass/components/_tour.scss +89 -0
  499. package/src/sass/components/_transfer-list.scss +73 -0
  500. package/src/sass/components/_transitions.scss +4 -4
  501. package/src/sass/components/_tree.scss +3 -16
  502. package/src/sass/components/_treemap-chart.scss +122 -0
  503. package/src/sass/components/forms/_checkboxes.scss +140 -86
  504. package/src/sass/components/forms/_color-picker.scss +135 -0
  505. package/src/sass/components/forms/_color-swatches.scss +85 -0
  506. package/src/sass/components/forms/_drop-zone.scss +15 -9
  507. package/src/sass/components/forms/_fieldset.scss +10 -10
  508. package/src/sass/components/forms/_file-input.scss +6 -9
  509. package/src/sass/components/forms/_index.scss +3 -1
  510. package/src/sass/components/forms/_input-fields.scss +254 -90
  511. package/src/sass/components/forms/_radio-buttons.scss +40 -127
  512. package/src/sass/components/forms/_rating.scss +2 -32
  513. package/src/sass/components/forms/_select.scss +199 -23
  514. package/src/sass/components/forms/_slider.scss +140 -330
  515. package/src/sass/components/forms/_switches.scss +53 -164
  516. package/src/sass/custom.scss +10 -1
  517. package/src/sass/expressive.scss +3 -63
  518. package/src/sass/tokens/_contrast.scss +94 -0
  519. package/src/sass/tokens/_elevation.scss +16 -0
  520. package/src/sass/tokens/_index.scss +5 -0
  521. package/src/sass/tokens/_motion.scss +109 -0
  522. package/src/sass/tokens/_reference.scss +72 -141
  523. package/src/sass/tokens/_shape.scss +38 -0
  524. package/src/sass/tokens/_stacking.scss +27 -0
  525. package/src/sass/tokens/_state.scss +2 -4
  526. package/src/sass/tokens/_theme.scss +11 -2
  527. package/src/sass/tokens/_vibrant.scss +2 -5
  528. package/src/sass/utilities/_colors.scss +6 -1
  529. package/src/sass/utilities/_defer-render.scss +17 -0
  530. package/src/sass/utilities/_helpers.scss +183 -26
  531. package/src/sass/utilities/_index.scss +2 -1
  532. package/src/sass/utilities/_scroll-area.scss +0 -2
  533. package/src/sass/utilities/_spacing.scss +52 -34
  534. package/src/sass/utilities/_typescale.scss +8 -1
  535. package/src/sass/utilities/_visibility.scss +47 -76
  536. package/src/sass/utilities/_z-depth.scss +7 -4
  537. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +0 -7
  538. package/dist/js/chunks/chunk-3GVFZ4XO.mjs.map +0 -7
  539. package/dist/js/chunks/chunk-4HZMB7LI.mjs.map +0 -7
  540. package/dist/js/chunks/chunk-4KMNFIFZ.mjs +0 -270
  541. package/dist/js/chunks/chunk-4KMNFIFZ.mjs.map +0 -7
  542. package/dist/js/chunks/chunk-4TKTLGEM.mjs.map +0 -7
  543. package/dist/js/chunks/chunk-5BKHWHYY.mjs +0 -292
  544. package/dist/js/chunks/chunk-5BKHWHYY.mjs.map +0 -7
  545. package/dist/js/chunks/chunk-5HQSGDZ5.mjs.map +0 -7
  546. package/dist/js/chunks/chunk-6N2XAEFK.mjs +0 -125
  547. package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
  548. package/dist/js/chunks/chunk-A7ALMYUR.mjs.map +0 -7
  549. package/dist/js/chunks/chunk-BG6ZRB5H.mjs.map +0 -7
  550. package/dist/js/chunks/chunk-CUQPB25U.mjs +0 -55
  551. package/dist/js/chunks/chunk-CUQPB25U.mjs.map +0 -7
  552. package/dist/js/chunks/chunk-DAIU5SLG.mjs.map +0 -7
  553. package/dist/js/chunks/chunk-FS7XY3HT.mjs.map +0 -7
  554. package/dist/js/chunks/chunk-GIW4K4SE.mjs.map +0 -7
  555. package/dist/js/chunks/chunk-GUB3TNO2.mjs.map +0 -7
  556. package/dist/js/chunks/chunk-GVGT6MIU.mjs.map +0 -7
  557. package/dist/js/chunks/chunk-GZKEFWPM.mjs +0 -181
  558. package/dist/js/chunks/chunk-GZKEFWPM.mjs.map +0 -7
  559. package/dist/js/chunks/chunk-HKT2S7VM.mjs +0 -48
  560. package/dist/js/chunks/chunk-HKT2S7VM.mjs.map +0 -7
  561. package/dist/js/chunks/chunk-ILP3PDTL.mjs +0 -187
  562. package/dist/js/chunks/chunk-ILP3PDTL.mjs.map +0 -7
  563. package/dist/js/chunks/chunk-JIDMQGK6.mjs.map +0 -7
  564. package/dist/js/chunks/chunk-KBNN3QDH.mjs +0 -7
  565. package/dist/js/chunks/chunk-KBNN3QDH.mjs.map +0 -7
  566. package/dist/js/chunks/chunk-KHV6DZXX.mjs.map +0 -7
  567. package/dist/js/chunks/chunk-KY6U46SM.mjs +0 -345
  568. package/dist/js/chunks/chunk-KY6U46SM.mjs.map +0 -7
  569. package/dist/js/chunks/chunk-LRZMJZ3T.mjs +0 -291
  570. package/dist/js/chunks/chunk-LRZMJZ3T.mjs.map +0 -7
  571. package/dist/js/chunks/chunk-LTWPGFBR.mjs +0 -59
  572. package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
  573. package/dist/js/chunks/chunk-MNPROCZF.mjs +0 -328
  574. package/dist/js/chunks/chunk-MNPROCZF.mjs.map +0 -7
  575. package/dist/js/chunks/chunk-MZ6Z24BX.mjs.map +0 -7
  576. package/dist/js/chunks/chunk-NS2UMNZV.mjs.map +0 -7
  577. package/dist/js/chunks/chunk-O5XPWXIQ.mjs +0 -406
  578. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
  579. package/dist/js/chunks/chunk-PM655FXL.mjs.map +0 -7
  580. package/dist/js/chunks/chunk-QDAL4IYN.mjs.map +0 -7
  581. package/dist/js/chunks/chunk-QERLECVU.mjs +0 -572
  582. package/dist/js/chunks/chunk-QERLECVU.mjs.map +0 -7
  583. package/dist/js/chunks/chunk-QJABDLSD.mjs +0 -112
  584. package/dist/js/chunks/chunk-QJABDLSD.mjs.map +0 -7
  585. package/dist/js/chunks/chunk-RHRQKTTX.mjs +0 -139
  586. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
  587. package/dist/js/chunks/chunk-S3XDFGSZ.mjs.map +0 -7
  588. package/dist/js/chunks/chunk-SPETGK25.mjs +0 -59
  589. package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
  590. package/dist/js/chunks/chunk-TBM3FT7G.mjs.map +0 -7
  591. package/dist/js/chunks/chunk-UEXCIMJZ.mjs.map +0 -7
  592. package/dist/js/chunks/chunk-UEZUJQ66.mjs.map +0 -7
  593. package/dist/js/chunks/chunk-VGZSAFTX.mjs +0 -173
  594. package/dist/js/chunks/chunk-VGZSAFTX.mjs.map +0 -7
  595. package/dist/js/chunks/chunk-X7OCHZVF.mjs +0 -76
  596. package/dist/js/chunks/chunk-X7OCHZVF.mjs.map +0 -7
  597. package/dist/js/chunks/chunk-YDCS5S3J.mjs.map +0 -7
  598. package/dist/js/chunks/chunk-YMSXJON6.mjs +0 -79
  599. package/dist/js/chunks/chunk-YMSXJON6.mjs.map +0 -7
  600. package/dist/js/chunks/chunk-Z2NRKI7R.mjs.map +0 -7
  601. package/dist/js/chunks/chunk-ZAS25YFD.mjs.map +0 -7
  602. package/dist/js/chunks/chunk-ZKZKNSLC.mjs +0 -1
  603. /package/dist/js/chunks/{chunk-ZKZKNSLC.mjs.map → chunk-GNRSYMVH.mjs.map} +0 -0
@@ -6,6 +6,16 @@
6
6
 
7
7
  $_state-layers: ("hover", "focus", "pressed", "dragged");
8
8
 
9
+ /// A dp size as rem, for a box that holds text or an icon.
10
+ ///
11
+ /// Type is set in rem, so raising the browser's default font size or zooming
12
+ /// text only grows the text. A px box around it stays put, and the text spills
13
+ /// out of it or is cut. A rem box grows with its text, and it renders exactly
14
+ /// as before at the default 16px. Borders, gaps and insets stay px.
15
+ @function rem($px) {
16
+ @return math.div($px, 16px) * 1rem;
17
+ }
18
+
9
19
  /// A state layer opacity, as the percentage `color-mix()` wants.
10
20
  ///
11
21
  /// The tokens hold numbers (0.08), because an overlay uses one as `opacity`
@@ -23,12 +33,17 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
23
33
  @return calc(var(--md-sys-state-#{$state}-state-layer-opacity) * 100%);
24
34
  }
25
35
 
36
+ /// `$color` at the `$state` layer's opacity, mixed over `$base`.
37
+ @function state-layer($color, $state, $base: transparent) {
38
+ @return color-mix(in oklab, $color state-opacity($state), $base);
39
+ }
40
+
26
41
 
27
42
  // Common-button geometry. M3 Expressive's default size is small: 40dp,
28
43
  // label-large, corner.full, 16dp inset, 8dp icon gap. The size axis moves
29
44
  // those tokens; the style mixins only change color and elevation.
30
45
  @mixin btn(
31
- $height: var(--md-comp-filled-button-container-height, 40px),
46
+ $height: var(--md-comp-filled-button-container-height, #{rem(40px)}),
32
47
  $border-radius: var(--md-comp-filled-button-container-shape, 9999px),
33
48
  $padding-left: var(--md-comp-filled-button-leading-space, 16px),
34
49
  $padding-right: var(--md-comp-filled-button-trailing-space, 16px),
@@ -56,58 +71,40 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
56
71
  user-select: none;
57
72
  appearance: none;
58
73
  -webkit-tap-highlight-color: transparent;
59
- transition: background-color .2s ease-out, box-shadow .2s ease-out;
74
+ transition: background-color var(--md-sys-motion-duration-short4) ease-out, box-shadow var(--md-sys-motion-duration-short4) ease-out;
60
75
  }
61
76
 
62
77
  // State layers mix the on-color into the container in oklab; the opacities come
63
78
  // from md.sys.state via `state-opacity()`. Filled and tonal have no elevation.
64
79
 
65
- @mixin btn-filled {
66
- color: var(--md-comp-filled-button-label-text-color, var(--md-sys-color-on-primary));
67
- background-color: var(--md-comp-filled-button-container-color, var(--md-sys-color-primary));
68
-
80
+ // Shared by every style. Elevated also moves z-depth on hover and press.
81
+ @mixin _btn-states($on, $base, $hover-depth: null, $press-depth: null) {
69
82
  &:hover {
70
- background-color: color-mix(
71
- in oklab,
72
- var(--md-sys-color-on-primary) state-opacity("hover"),
73
- var(--md-sys-color-primary)
74
- );
83
+ @if $hover-depth { @include z-depth($hover-depth); }
84
+ background-color: state-layer($on, "hover", $base);
75
85
  }
76
86
 
77
87
  &:active,
78
88
  &:focus {
79
- background-color: color-mix(
80
- in oklab,
81
- var(--md-sys-color-on-primary) state-opacity("focus"),
82
- var(--md-sys-color-primary)
83
- );
89
+ @if $press-depth { @include z-depth($press-depth); }
90
+ background-color: state-layer($on, "focus", $base);
84
91
  }
85
92
 
86
93
  @include focus-visible();
87
94
  }
88
95
 
96
+ @mixin btn-filled {
97
+ color: var(--md-comp-filled-button-label-text-color, var(--md-sys-color-on-primary));
98
+ background-color: var(--md-comp-filled-button-container-color, var(--md-sys-color-primary));
99
+
100
+ @include _btn-states(var(--md-sys-color-on-primary), var(--md-sys-color-primary));
101
+ }
102
+
89
103
  @mixin btn-tonal {
90
104
  color: var(--md-sys-color-on-secondary-container);
91
105
  background-color: var(--md-sys-color-secondary-container);
92
106
 
93
- &:hover {
94
- background-color: color-mix(
95
- in oklab,
96
- var(--md-sys-color-on-secondary-container) state-opacity("hover"),
97
- var(--md-sys-color-secondary-container)
98
- );
99
- }
100
-
101
- &:active,
102
- &:focus {
103
- background-color: color-mix(
104
- in oklab,
105
- var(--md-sys-color-on-secondary-container) state-opacity("focus"),
106
- var(--md-sys-color-secondary-container)
107
- );
108
- }
109
-
110
- @include focus-visible();
107
+ @include _btn-states(var(--md-sys-color-on-secondary-container), var(--md-sys-color-secondary-container));
111
108
  }
112
109
 
113
110
  @mixin btn-elevated {
@@ -115,18 +112,7 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
115
112
  background-color: var(--md-sys-color-surface-container-low);
116
113
  @include z-depth("1");
117
114
 
118
- &:hover {
119
- @include z-depth("2");
120
- background-color: color-mix(in oklab, var(--md-sys-color-primary) state-opacity("hover"), var(--md-sys-color-surface-container-low));
121
- }
122
-
123
- &:active,
124
- &:focus {
125
- @include z-depth("1");
126
- background-color: color-mix(in oklab, var(--md-sys-color-primary) state-opacity("focus"), var(--md-sys-color-surface-container-low));
127
- }
128
-
129
- @include focus-visible();
115
+ @include _btn-states(var(--md-sys-color-primary), var(--md-sys-color-surface-container-low), "2", "1");
130
116
  }
131
117
 
132
118
  @mixin btn-outlined {
@@ -138,16 +124,7 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
138
124
  // height right.
139
125
  border: var(--md-comp-filled-button-outline-width, 1px) solid var(--md-sys-color-outline);
140
126
 
141
- &:hover {
142
- background-color: color-mix(in oklab, var(--md-sys-color-primary) state-opacity("hover"), transparent);
143
- }
144
-
145
- &:active,
146
- &:focus {
147
- background-color: color-mix(in oklab, var(--md-sys-color-primary) state-opacity("focus"), transparent);
148
- }
149
-
150
- @include focus-visible();
127
+ @include _btn-states(var(--md-sys-color-primary), transparent);
151
128
  }
152
129
 
153
130
  @mixin btn-flat {
@@ -156,16 +133,7 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
156
133
  background-color: transparent;
157
134
  border-color: transparent;
158
135
 
159
- &:hover {
160
- background-color: color-mix(in oklab, var(--md-sys-color-primary) state-opacity("hover"), transparent);
161
- }
162
-
163
- &:active,
164
- &:focus {
165
- background-color: color-mix(in oklab, var(--md-sys-color-primary) state-opacity("focus"), transparent);
166
- }
167
-
168
- @include focus-visible();
136
+ @include _btn-states(var(--md-sys-color-primary), transparent);
169
137
  }
170
138
 
171
139
  @mixin btn-disabled {
@@ -174,7 +142,6 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
174
142
  background-color: color-mix(in oklab, var(--md-sys-color-on-surface) 12%, transparent);
175
143
  border-color: transparent;
176
144
  pointer-events: none;
177
- box-shadow: none;
178
145
  cursor: default;
179
146
  }
180
147
 
@@ -187,9 +154,6 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
187
154
  // `$important` is for the `.visually-hidden` utility, which has to beat a
188
155
  // consumer's own `position` or `padding` the way `.hide` beats their
189
156
  // `display`. Component rules leave it off.
190
- //
191
- // _navigation-rail.scss carries its own copy, which predates the mixin and
192
- // omits the margin and white-space; fold it in when it is next touched.
193
157
  @mixin visually-hidden($important: false) {
194
158
  $flag: null;
195
159
  @if $important { $flag: !important; }
@@ -220,29 +184,238 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
220
184
  }
221
185
  }
222
186
 
187
+ // The 18dp up arrow on a pseudo-element: Stat and KPI change lines, data
188
+ // table sort buttons. Rotate it 180deg for down.
189
+ @mixin trend-arrow {
190
+ content: "";
191
+ flex: none;
192
+ width: 18px;
193
+ height: 18px;
194
+ background-color: currentColor;
195
+ mask: $trend-arrow center / 18px no-repeat;
196
+ }
197
+
198
+ // A 48dp icon action in a dialog, pane or side sheet header bar.
199
+ @mixin header-icon-action {
200
+ flex: 0 0 48px;
201
+ box-sizing: border-box;
202
+ width: 48px;
203
+ height: 48px;
204
+ min-width: 48px;
205
+ padding: 0;
206
+ border: none;
207
+ border-radius: 50%;
208
+ background-color: transparent;
209
+ color: var(--md-sys-color-on-surface-variant);
210
+ box-shadow: none;
211
+
212
+ > #{$icon} {
213
+ font-size: rem(24px);
214
+ width: rem(24px);
215
+ height: rem(24px);
216
+ line-height: rem(24px);
217
+ }
218
+
219
+ &:hover {
220
+ background-color: state-layer(var(--md-sys-color-on-surface), "hover");
221
+ }
222
+
223
+ @include focus-visible;
224
+ }
225
+
226
+ // Forced colors repaint every background as Canvas and drop box-shadow, so a
227
+ // state shown only by a fill or a ring disappears. forced-colors-selected marks
228
+ // a selected item with a Highlight outline. forced-colors-fill keeps a drawn
229
+ // shape (an indicator bar, a dot, a glyph drawn as a mask) by opting it out
230
+ // and painting it with a system color.
231
+ @mixin forced-colors-selected {
232
+ @media (forced-colors: active) {
233
+ outline: 2px solid Highlight;
234
+ outline-offset: -2px;
235
+ }
236
+ }
237
+
238
+ // A tree branch's chevron, drawn as the row's ::before: it points to the end
239
+ // edge while closed. The row turns it with `transform: none` once the branch
240
+ // opens, and with rotate(90deg) under :dir(rtl). .tree and the tree select
241
+ // share it.
242
+ $_tree-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 15.4 6 9.4 7.4 8l4.6 4.6L16.6 8 18 9.4z'/%3E%3C/svg%3E");
243
+
244
+ @mixin tree-chevron {
245
+ content: "";
246
+ flex: none;
247
+ width: 20px;
248
+ height: 20px;
249
+ background-color: currentColor;
250
+ mask: $_tree-chevron center / 20px no-repeat;
251
+ transform: rotate(-90deg);
252
+ transition: transform var(--md-sys-motion-duration-short3) ease-out;
253
+ }
254
+
255
+ @mixin forced-colors-fill($color: CanvasText) {
256
+ @media (forced-colors: active) {
257
+ forced-color-adjust: none;
258
+ background-color: $color;
259
+ }
260
+ }
261
+
262
+ // A fieldset of round, labeled choices (color swatches, rating): no fieldset
263
+ // chrome, a body-medium legend, and labels whose 4px of padding makes the
264
+ // 48px target. $control is the input the label's focus and disabled states
265
+ // follow.
266
+ @mixin choice-fieldset($radius, $control) {
267
+ display: flex;
268
+ flex-wrap: wrap;
269
+ align-items: center;
270
+ margin: 0;
271
+ padding: 0;
272
+ border: 0;
273
+
274
+ > legend {
275
+ margin-block-end: 4px;
276
+ padding: 0;
277
+ color: var(--md-sys-color-on-surface-variant);
278
+ @include typescale("body-medium");
279
+ }
280
+
281
+ > label {
282
+ display: inline-flex;
283
+ gap: 0;
284
+ min-height: 0;
285
+ padding: 4px;
286
+ border-radius: $radius;
287
+ cursor: pointer;
288
+
289
+ &:has(> #{$control}:focus-visible) {
290
+ @include focus-ring;
291
+ }
292
+
293
+ &:has(> #{$control}:disabled) {
294
+ opacity: 0.38;
295
+ cursor: default;
296
+ }
297
+ }
298
+ }
299
+
300
+ // A navigation bar or rail destination stacked over its label: the indicator
301
+ // behind the icon, its hover layer, the active state, and a sibling badge on
302
+ // the upper trailing corner of the 24dp glyph. $prefix names the component
303
+ // tokens (nav-bar, nav-rail); $inset is the destination's top padding. Rules
304
+ // passed as content land between the active state and the badge.
305
+ @mixin nav-destination($prefix, $inset, $transition) {
306
+ > #{$icon} {
307
+ display: flex;
308
+ flex-shrink: 0;
309
+ align-items: center;
310
+ justify-content: center;
311
+ box-sizing: border-box;
312
+ width: var(--md-comp-#{$prefix}-indicator-width);
313
+ height: var(--md-comp-#{$prefix}-indicator-height);
314
+ border-radius: var(--md-comp-#{$prefix}-indicator-shape);
315
+ font-size: var(--md-comp-#{$prefix}-icon-size);
316
+ color: inherit;
317
+ transition: $transition;
318
+ }
319
+
320
+ &:hover:not(.active, [aria-current]) > #{$icon} {
321
+ background-color: state-layer(var(--md-sys-color-on-surface), "hover");
322
+ }
323
+
324
+ &.active,
325
+ &[aria-current] {
326
+ color: var(--md-sys-color-on-surface);
327
+
328
+ > #{$icon} {
329
+ background-color: var(--md-comp-#{$prefix}-active-indicator-color);
330
+ color: var(--md-comp-#{$prefix}-active-color);
331
+ --md-icon-fill: 1;
332
+ @include forced-colors-selected;
333
+ }
334
+ }
335
+
336
+ @content;
337
+
338
+ > .badge {
339
+ position: absolute;
340
+ z-index: 1;
341
+ top: calc(#{$inset} + (var(--md-comp-#{$prefix}-indicator-height) - 24px) / 2);
342
+ inset-inline-start: calc(50% + 12px);
343
+ transform: translate(-50%, -50%);
344
+
345
+ &:dir(rtl) {
346
+ transform: translate(50%, -50%);
347
+ }
348
+ }
349
+ }
350
+
351
+ // The same destination laid out as a row (bar .horizontal, rail .expanded):
352
+ // the indicator moves from the icon to the whole destination.
353
+ @mixin nav-destination-row($prefix) {
354
+ > #{$icon} {
355
+ width: var(--md-comp-#{$prefix}-icon-size);
356
+ height: var(--md-comp-#{$prefix}-icon-size);
357
+ border-radius: 0;
358
+ }
359
+
360
+ &:hover:not(.active, [aria-current]) {
361
+ background-color: state-layer(var(--md-sys-color-on-surface), "hover");
362
+
363
+ > #{$icon} {
364
+ background-color: transparent;
365
+ }
366
+ }
367
+
368
+ &.active,
369
+ &[aria-current] {
370
+ background-color: var(--md-comp-#{$prefix}-active-indicator-color);
371
+ color: var(--md-comp-#{$prefix}-active-color);
372
+ @include forced-colors-selected;
373
+
374
+ > #{$icon} {
375
+ background-color: transparent;
376
+ color: inherit;
377
+ outline: none;
378
+ }
379
+ }
380
+ }
381
+
223
382
  // M3 type role. Every property must name a token tokens/_reference.scss
224
383
  // actually defines — a missing var() drops the whole declaration.
225
- @mixin typescale($role) {
384
+ // $emphasized takes the role's M3 Expressive emphasized weight.
385
+ @mixin typescale($role, $emphasized: false) {
226
386
  font-family: var(--md-sys-typescale-#{$role}-font-family-name);
227
387
  font-size: var(--md-sys-typescale-#{$role}-font-size);
228
- font-weight: var(--md-sys-typescale-#{$role}-font-weight);
388
+ @if $emphasized {
389
+ font-weight: var(--md-sys-typescale-emphasized-#{$role}-font-weight);
390
+ } @else {
391
+ font-weight: var(--md-sys-typescale-#{$role}-font-weight);
392
+ }
229
393
  line-height: var(--md-sys-typescale-#{$role}-line-height);
230
394
  letter-spacing: var(--md-sys-typescale-#{$role}-letter-spacing);
231
395
  }
232
396
 
397
+ // The <label> row of a radio, checkbox or switch: 48dp touch target, 12dp
398
+ // between control and text, body-large on-surface.
399
+ @mixin selection-control-label($display: flex) {
400
+ display: $display;
401
+ align-items: center;
402
+ gap: 12px;
403
+ min-height: 48px;
404
+ margin: 0;
405
+ cursor: pointer;
406
+ user-select: none;
407
+ color: var(--md-sys-color-on-surface);
408
+ @include typescale("body-large");
409
+ }
410
+
233
411
  /// The state layer some controls draw as a ring rather than an overlay.
234
412
  ///
235
413
  /// Checkboxes and radio buttons have no room for an overlay pseudo-element, so
236
414
  /// they grow a `box-shadow` from the control's edge out to the state layer
237
- /// size. `color-mix()` wants a percentage where the token is a number, hence
238
- /// the `* 100%`.
415
+ /// size.
239
416
  @mixin state-layer-ring($outer, $inner, $color, $state) {
240
- box-shadow: 0 0 0 calc((#{$outer} - #{$inner}) / 2)
241
- color-mix(
242
- in oklab,
243
- #{$color} state-opacity($state),
244
- transparent
245
- );
417
+ // Interpolated so a quoted color, such as "var(--c)", is written unquoted.
418
+ box-shadow: 0 0 0 calc((#{$outer} - #{$inner}) / 2) state-layer(#{$color}, $state);
246
419
  }
247
420
 
248
421
  /// The button size tokens for one rung of `$button-sizes`.
@@ -253,20 +426,22 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
253
426
  @mixin button-size($name) {
254
427
  $s: map.get($button-sizes, $name);
255
428
 
256
- --md-comp-filled-button-container-height: #{map.get($s, height)};
257
- --md-comp-filled-button-icon-size: #{map.get($s, icon)};
429
+ --md-comp-filled-button-container-height: #{rem(map.get($s, height))};
430
+ --md-comp-filled-button-icon-size: #{rem(map.get($s, icon))};
258
431
  --md-comp-filled-button-leading-space: #{map.get($s, space)};
259
432
  --md-comp-filled-button-trailing-space: #{map.get($s, space)};
260
433
  --md-comp-filled-button-icon-label-space: #{map.get($s, gap)};
261
434
  --md-comp-filled-button-outline-width: #{map.get($s, outline)};
435
+ --md-comp-filled-button-container-shape-square: #{map.get($s, square)};
436
+ --md-comp-filled-button-pressed-container-shape: #{map.get($s, pressed)};
262
437
  }
263
438
 
264
439
  /// The icon-button tokens for one rung of `$icon-button-sizes`.
265
440
  @mixin icon-button-size($name) {
266
441
  $s: map.get($icon-button-sizes, $name);
267
442
 
268
- --md-comp-icon-button-container-height: #{map.get($s, height)};
269
- --md-comp-icon-button-icon-size: #{map.get($s, icon)};
443
+ --md-comp-icon-button-container-height: #{rem(map.get($s, height))};
444
+ --md-comp-icon-button-icon-size: #{rem(map.get($s, icon))};
270
445
  --md-comp-icon-button-leading-space: #{map.get($s, space)};
271
446
  --md-comp-icon-button-trailing-space: #{map.get($s, space)};
272
447
  --md-comp-icon-button-narrow-space: #{map.get($s, narrow)};
@@ -346,14 +521,70 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
346
521
  }
347
522
  }
348
523
 
524
+ // The .toggle legend button is the same in every chart, so chart() writes
525
+ // it once, with the first chart in the build.
526
+ $_chart-toggle-written: false;
527
+
528
+ // With .toggle, a button shows or hides each series. It covers its legend
529
+ // item, swatch included, and a hidden series is struck through with a
530
+ // hollow swatch, so the state does not rest on color. The class keeps it
531
+ // out of the button styles, in _buttons.scss.
532
+ @mixin _chart-toggle {
533
+ .chart-toggle {
534
+ min-height: rem(48px);
535
+ padding: 0;
536
+ border: 0;
537
+ background: none;
538
+ color: inherit;
539
+ font: inherit;
540
+ cursor: pointer;
541
+
542
+ &::after {
543
+ content: "";
544
+ position: absolute;
545
+ inset: 0;
546
+ border-radius: 4px;
547
+ }
548
+
549
+ &:focus-visible {
550
+ outline: none;
551
+
552
+ &::after {
553
+ @include focus-ring();
554
+ }
555
+ }
556
+
557
+ &:hover {
558
+ color: var(--md-sys-color-on-surface);
559
+ }
560
+
561
+ &[aria-pressed="false"] {
562
+ text-decoration: line-through;
563
+ }
564
+
565
+ &[aria-disabled="true"] {
566
+ cursor: default;
567
+ }
568
+ }
569
+
570
+ li:has(> .chart-toggle[aria-pressed="false"])::before {
571
+ mask: radial-gradient(closest-side, transparent 50%, #000 calc(50% + 0.5px));
572
+ }
573
+ }
574
+
349
575
  // The parts LineChart draws for every chart type, prefixed with the
350
576
  // component's name: .#{$name}-plot, -cursor, -tooltip, -labels and -legend.
351
577
  // Defines the --md-comp-#{$name}-height, -grid-color and -color-1..4 tokens,
352
578
  // and --#{$name}-color on each [data-series]. Include it at the root of the
353
579
  // component's partial; the component adds its own marks and cursor look.
354
580
  @mixin chart($name) {
581
+ @if not $_chart-toggle-written {
582
+ $_chart-toggle-written: true !global;
583
+ @include _chart-toggle;
584
+ }
585
+
355
586
  .#{$name} {
356
- --md-comp-#{$name}-height: 240px;
587
+ --md-comp-#{$name}-height: #{rem(240px)};
357
588
  --md-comp-#{$name}-grid-color: var(--md-sys-color-outline-variant);
358
589
  --md-comp-#{$name}-color-1: var(--md-sys-color-primary);
359
590
  --md-comp-#{$name}-color-2: var(--md-sys-color-tertiary);
@@ -367,17 +598,17 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
367
598
  margin: $element-top-margin 0 $element-bottom-margin;
368
599
  color: var(--md-sys-color-on-surface);
369
600
 
370
- > figcaption {
371
- color: var(--md-sys-color-on-surface-variant);
372
- @include typescale("title-small");
373
- }
374
-
375
601
  // A table keeps its content size under visually-hidden, so anchor it
376
602
  // here rather than at some distant positioned ancestor. A fixed layout
377
603
  // holds it to the 1px wide it is given. Its rows still set its height, so
378
604
  // it hangs up from the bottom edge, where the overflow cannot scroll.
379
605
  position: relative;
380
606
 
607
+ > figcaption {
608
+ color: var(--md-sys-color-on-surface-variant);
609
+ @include typescale("title-small");
610
+ }
611
+
381
612
  &:has(> .#{$name}-plot) > table {
382
613
  @include visually-hidden;
383
614
  inset: auto auto 0 0;
@@ -418,10 +649,10 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
418
649
  display: grid;
419
650
  grid-template-columns: auto auto;
420
651
  gap: 4px 16px;
421
- min-width: 120px;
652
+ min-width: rem(120px);
422
653
  margin: 0;
423
654
  padding: 12px 16px;
424
- border-radius: 12px;
655
+ border-radius: var(--md-sys-shape-corner-medium);
425
656
  background-color: var(--md-comp-#{$name}-tooltip-color);
426
657
  color: var(--md-sys-color-on-surface-variant);
427
658
  @include typescale("body-small");
@@ -479,6 +710,28 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
479
710
  text-overflow: ellipsis;
480
711
  white-space: nowrap;
481
712
  }
713
+
714
+ // When each label is wider than its column, LineChart keeps every nth
715
+ // one. A kept label spreads over the hidden ones beside it, still
716
+ // centred on its own column; the flex box centres what overflows. The
717
+ // end labels line up with the chart's edges, so none overflows them.
718
+ &[data-thinned] > li:not([data-skip]) {
719
+ display: flex;
720
+ justify-content: center;
721
+ overflow: visible;
722
+
723
+ &:first-child {
724
+ justify-content: start;
725
+ }
726
+
727
+ &:last-child {
728
+ justify-content: end;
729
+ }
730
+ }
731
+
732
+ > li[data-skip] {
733
+ visibility: hidden;
734
+ }
482
735
  }
483
736
 
484
737
  .#{$name}-legend {
@@ -487,6 +740,7 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
487
740
  gap: 4px 16px;
488
741
 
489
742
  > li {
743
+ position: relative;
490
744
  display: flex;
491
745
  align-items: center;
492
746
  gap: 8px;
@@ -537,3 +791,95 @@ $_state-layers: ("hover", "focus", "pressed", "dragged");
537
791
  }
538
792
  }
539
793
  }
794
+
795
+ // The columns' or bars' growth, inside their container: from the zero
796
+ // line, or after update() from where each span was, which ColumnChart
797
+ // writes as --from-top and --from-bottom. !important lets these starting
798
+ // values beat the inline --top and --bottom.
799
+ @mixin chart-column-motion {
800
+ @media (prefers-reduced-motion: no-preference) {
801
+ > div > span {
802
+ transition: clip-path var(--md-sys-motion-duration-medium4) var(--md-sys-motion-easing-standard);
803
+
804
+ @starting-style {
805
+ --top: var(--from-top, var(--zero, 100%)) !important;
806
+ --bottom: var(--from-bottom, calc(100% - var(--zero, 100%))) !important;
807
+ }
808
+ }
809
+ }
810
+ }
811
+
812
+ // The value labels LineChart draws for .axis: an .#{$name}-axis list in the
813
+ // plot, behind the marks, with each label's distance down the plot in --at.
814
+ // A label sits beside the plot with a grid line across it at its value; a
815
+ // mixed chart's end scale gets a second list, .end, on the far side, whose
816
+ // labels share those lines. With $beside the plot and row labels make room
817
+ // at the inline start (and end, for .end) for
818
+ // --md-comp-#{$name}-axis-width, 48px. Without it the component places the
819
+ // labels itself.
820
+ @mixin chart-axis($name, $beside: true) {
821
+ .#{$name}.axis {
822
+ --md-comp-#{$name}-axis-width: #{rem(48px)};
823
+
824
+ > .#{$name}-plot {
825
+ background: none;
826
+ }
827
+ }
828
+
829
+ @if $beside {
830
+ // Room for the top label's upper half.
831
+ .#{$name}.axis > .#{$name}-plot {
832
+ margin-block-start: 8px;
833
+ }
834
+
835
+ .#{$name}.axis > :is(.#{$name}-plot, .#{$name}-labels) {
836
+ margin-inline-start: var(--md-comp-#{$name}-axis-width);
837
+ }
838
+
839
+ .#{$name}.axis:has(.#{$name}-axis.end) > :is(.#{$name}-plot, .#{$name}-labels) {
840
+ margin-inline-end: var(--md-comp-#{$name}-axis-width);
841
+ }
842
+ }
843
+
844
+ .#{$name}-axis {
845
+ position: absolute;
846
+ inset: 0;
847
+ margin: 0;
848
+ padding: 0;
849
+ list-style: none;
850
+ color: var(--md-sys-color-on-surface-variant);
851
+ @include typescale("body-small");
852
+ font-variant-numeric: tabular-nums;
853
+ pointer-events: none;
854
+
855
+ > li {
856
+ position: absolute;
857
+ inset-inline: 0;
858
+ top: var(--at, 0%);
859
+ border-block-start: 1px solid var(--md-comp-#{$name}-grid-color);
860
+ }
861
+
862
+ > li > span {
863
+ position: absolute;
864
+ inset-inline-end: 100%;
865
+ box-sizing: border-box;
866
+ width: var(--md-comp-#{$name}-axis-width);
867
+ padding-inline-end: 8px;
868
+ overflow: hidden;
869
+ text-align: end;
870
+ text-overflow: ellipsis;
871
+ white-space: nowrap;
872
+ translate: 0 -50%;
873
+ }
874
+
875
+ &.end > li {
876
+ border: 0;
877
+ }
878
+
879
+ &.end > li > span {
880
+ inset-inline: 100% auto;
881
+ padding-inline: 8px 0;
882
+ text-align: start;
883
+ }
884
+ }
885
+ }