@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
@@ -19,6 +19,10 @@
19
19
  //
20
20
  // .filled-in is a no-op: the selected state is always the filled box.
21
21
 
22
+ @mixin _ring($color, $state) {
23
+ @include state-layer-ring(var(--md-comp-checkbox-state-layer-size), var(--md-comp-checkbox-container-size), $color, $state);
24
+ }
25
+
22
26
  $_cb-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M4 9.5 7.5 13 14 5.5'/%3E%3C/svg%3E");
23
27
  $_cb-dash: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' d='M4.5 9h9'/%3E%3C/svg%3E");
24
28
 
@@ -29,16 +33,8 @@ label:has(> [type="checkbox"]):not(.switch),
29
33
  --md-comp-checkbox-state-layer-size: 40px;
30
34
 
31
35
  position: relative;
32
- display: flex;
33
- align-items: center;
34
- gap: 12px;
35
- min-height: 48px;
36
- margin: 0;
37
- cursor: pointer;
38
- user-select: none;
39
36
  -webkit-tap-highlight-color: transparent;
40
- color: var(--md-sys-color-on-surface);
41
- @include typescale("body-large");
37
+ @include selection-control-label;
42
38
  }
43
39
 
44
40
  // A row of checkboxes is a group of controls, not navigation - see rule 4 in
@@ -73,7 +69,7 @@ label:has(> [type="checkbox"]):not(.switch) > [type="checkbox"],
73
69
  border-radius: var(--md-comp-checkbox-container-shape);
74
70
  background-color: transparent;
75
71
  cursor: pointer;
76
- transition: border-color .2s ease, background-color .2s ease, box-shadow .2s ease;
72
+ transition: border-color var(--md-sys-motion-duration-short4) ease, background-color var(--md-sys-motion-duration-short4) ease, box-shadow var(--md-sys-motion-duration-short4) ease;
77
73
 
78
74
  &:checked,
79
75
  &:indeterminate {
@@ -82,32 +78,16 @@ label:has(> [type="checkbox"]):not(.switch) > [type="checkbox"],
82
78
  }
83
79
 
84
80
  &:hover {
85
- @include state-layer-ring(
86
- var(--md-comp-checkbox-state-layer-size),
87
- var(--md-comp-checkbox-container-size),
88
- var(--md-sys-color-on-surface),
89
- "hover"
90
- );
81
+ @include _ring(var(--md-sys-color-on-surface), "hover");
91
82
  }
92
83
 
93
84
  &:checked:hover,
94
85
  &:indeterminate:hover {
95
- @include state-layer-ring(
96
- var(--md-comp-checkbox-state-layer-size),
97
- var(--md-comp-checkbox-container-size),
98
- var(--md-sys-color-primary),
99
- "hover"
100
- );
86
+ @include _ring(var(--md-sys-color-primary), "hover");
101
87
  }
102
88
 
103
- &:focus-visible,
104
- &.tabbed:focus {
105
- @include state-layer-ring(
106
- var(--md-comp-checkbox-state-layer-size),
107
- var(--md-comp-checkbox-container-size),
108
- var(--md-sys-color-primary),
109
- "focus"
110
- );
89
+ &:focus-visible {
90
+ @include _ring(var(--md-sys-color-primary), "focus");
111
91
  outline: none;
112
92
  }
113
93
 
@@ -126,12 +106,7 @@ label:has(> [type="checkbox"]):not(.switch) > [type="checkbox"],
126
106
 
127
107
  &.invalid:hover,
128
108
  &[aria-invalid="true"]:hover {
129
- @include state-layer-ring(
130
- var(--md-comp-checkbox-state-layer-size),
131
- var(--md-comp-checkbox-container-size),
132
- var(--md-sys-color-error),
133
- "hover"
134
- );
109
+ @include _ring(var(--md-sys-color-error), "hover");
135
110
  }
136
111
 
137
112
  &:disabled {
@@ -168,14 +143,14 @@ label:has(> [type="checkbox"]):not(.switch):not(:has(> [type="checkbox"] + span)
168
143
  &::before {
169
144
  content: "";
170
145
  position: absolute;
171
- left: 0;
146
+ // A label that pads its box in, such as a list row, moves the mark with it.
147
+ inset-inline-start: var(--checkbox-mark-inset, 0);
172
148
  top: 50%;
173
149
  width: var(--md-comp-checkbox-container-size);
174
150
  height: var(--md-comp-checkbox-container-size);
175
151
  margin-top: calc(var(--md-comp-checkbox-container-size) / -2);
176
152
  pointer-events: none;
177
153
  background-color: var(--md-sys-color-on-primary);
178
- -webkit-mask: #{$_cb-check} center / contain no-repeat;
179
154
  mask: #{$_cb-check} center / contain no-repeat;
180
155
  opacity: 0;
181
156
  }
@@ -186,7 +161,6 @@ label:has(> [type="checkbox"]):not(.switch):not(:has(> [type="checkbox"] + span)
186
161
  }
187
162
 
188
163
  &:has(> [type="checkbox"]:indeterminate)::before {
189
- -webkit-mask-image: #{$_cb-dash};
190
164
  mask-image: #{$_cb-dash};
191
165
  }
192
166
 
@@ -207,29 +181,32 @@ label:has(> [type="checkbox"]:disabled):not(.switch),
207
181
  }
208
182
 
209
183
  // Legacy / Select / Autocomplete: input + span draws the same
210
- // 18dp anatomy. Exclude .switch — that file paints the track on a span.
211
- $_cb-span: "*:not(.switch) > [type='checkbox'] + span:not(.lever, .supporting-text, .character-counter, .file-path)";
184
+ // 18dp anatomy. Exclude .switch, which paints its own track.
185
+ // $state is appended to the checkbox, e.g. ":checked" or ".invalid".
186
+ @function _cb-span($state: "") {
187
+ @return "*:not(.switch) > [type='checkbox']#{$state} + span:not(.supporting-text, .character-counter, .file-path)";
188
+ }
212
189
 
213
190
  // inline-block, not inline-flex: a flex span turns each text run and link
214
191
  // inside it into its own item, which drops the spaces around a link and
215
192
  // splits "I agree to the <a>Terms</a>" into columns. The block padding
216
193
  // centers one line in the 48px target, as align-items did.
217
- #{$_cb-span} {
194
+ #{_cb-span()} {
218
195
  position: relative;
219
196
  display: inline-block;
220
197
  box-sizing: border-box;
221
198
  min-height: 48px;
222
199
  padding-block: calc((48px - 1lh) / 2);
223
- padding-left: 30px;
200
+ padding-inline-start: 30px;
224
201
  cursor: pointer;
225
202
  user-select: none;
226
203
  }
227
204
 
228
- #{$_cb-span}::before,
229
- #{$_cb-span}::after {
205
+ #{_cb-span()}::before,
206
+ #{_cb-span()}::after {
230
207
  content: "";
231
208
  position: absolute;
232
- left: 0;
209
+ inset-inline-start: 0;
233
210
  top: 50%;
234
211
  box-sizing: border-box;
235
212
  width: 18px;
@@ -238,93 +215,170 @@ $_cb-span: "*:not(.switch) > [type='checkbox'] + span:not(.lever, .supporting-te
238
215
  border-radius: 2px;
239
216
  }
240
217
 
241
- #{$_cb-span}::before {
218
+ #{_cb-span()}::before {
242
219
  border: 2px solid var(--md-sys-color-on-surface-variant);
243
220
  background-color: transparent;
244
- transition: border-color .2s ease, background-color .2s ease, box-shadow .2s ease;
221
+ transition: border-color var(--md-sys-motion-duration-short4) ease, background-color var(--md-sys-motion-duration-short4) ease, box-shadow var(--md-sys-motion-duration-short4) ease;
245
222
  }
246
223
 
247
- #{$_cb-span}::after {
224
+ #{_cb-span()}::after {
248
225
  background-color: var(--md-sys-color-on-primary);
249
- -webkit-mask: #{$_cb-check} center / contain no-repeat;
250
226
  mask: #{$_cb-check} center / contain no-repeat;
251
227
  opacity: 0;
252
228
  }
253
229
 
254
- *:not(.switch) > [type="checkbox"]:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
230
+ #{_cb-span(":is(:checked, :indeterminate)")}::before {
255
231
  border-color: var(--md-sys-color-primary);
256
232
  background-color: var(--md-sys-color-primary);
257
233
  }
258
234
 
259
- *:not(.switch) > [type="checkbox"]:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::after {
235
+ #{_cb-span(":is(:checked, :indeterminate)")}::after {
260
236
  opacity: 1;
261
237
  }
262
238
 
263
- *:not(.switch) > [type="checkbox"]:indeterminate + span:not(.lever, .supporting-text, .character-counter, .file-path)::after {
264
- -webkit-mask-image: #{$_cb-dash};
239
+ #{_cb-span(":indeterminate")}::after {
265
240
  mask-image: #{$_cb-dash};
266
241
  }
267
242
 
268
- *:not(.switch) > [type="checkbox"]:hover + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
269
- @include state-layer-ring(
270
- var(--md-comp-checkbox-state-layer-size),
271
- var(--md-comp-checkbox-container-size),
272
- var(--md-sys-color-on-surface),
273
- "hover"
274
- );
243
+ #{_cb-span(":hover")}::before {
244
+ @include _ring(var(--md-sys-color-on-surface), "hover");
275
245
  }
276
246
 
277
- *:not(.switch) > [type="checkbox"]:is(:checked, :indeterminate):hover + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
278
- @include state-layer-ring(
279
- var(--md-comp-checkbox-state-layer-size),
280
- var(--md-comp-checkbox-container-size),
281
- var(--md-sys-color-primary),
282
- "hover"
283
- );
247
+ #{_cb-span(":is(:checked, :indeterminate):hover")}::before {
248
+ @include _ring(var(--md-sys-color-primary), "hover");
284
249
  }
285
250
 
286
- *:not(.switch) > [type="checkbox"]:focus-visible + span:not(.lever, .supporting-text, .character-counter, .file-path)::before,
287
- *:not(.switch) > [type="checkbox"].tabbed:focus + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
288
- @include state-layer-ring(
289
- var(--md-comp-checkbox-state-layer-size),
290
- var(--md-comp-checkbox-container-size),
291
- var(--md-sys-color-primary),
292
- "focus"
293
- );
251
+ #{_cb-span(":focus-visible")}::before {
252
+ @include _ring(var(--md-sys-color-primary), "focus");
294
253
  }
295
254
 
296
- *:not(.switch) > [type="checkbox"].invalid + span:not(.lever, .supporting-text, .character-counter, .file-path)::before,
297
- *:not(.switch) > [type="checkbox"][aria-invalid="true"] + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
255
+ #{_cb-span(".invalid")}::before,
256
+ #{_cb-span("[aria-invalid='true']")}::before {
298
257
  border-color: var(--md-sys-color-error);
299
258
  }
300
259
 
301
- *:not(.switch) > [type="checkbox"].invalid:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::before,
302
- *:not(.switch) > [type="checkbox"][aria-invalid="true"]:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
260
+ #{_cb-span(".invalid:is(:checked, :indeterminate)")}::before,
261
+ #{_cb-span("[aria-invalid='true']:is(:checked, :indeterminate)")}::before {
303
262
  border-color: var(--md-sys-color-error);
304
263
  background-color: var(--md-sys-color-error);
305
264
  }
306
265
 
307
- *:not(.switch) > [type="checkbox"].invalid:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::after,
308
- *:not(.switch) > [type="checkbox"][aria-invalid="true"]:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::after {
266
+ #{_cb-span(".invalid:is(:checked, :indeterminate)")}::after,
267
+ #{_cb-span("[aria-invalid='true']:is(:checked, :indeterminate)")}::after {
309
268
  background-color: var(--md-sys-color-on-error);
310
269
  }
311
270
 
312
- *:not(.switch) > [type="checkbox"]:disabled + span:not(.lever, .supporting-text, .character-counter, .file-path) {
271
+ #{_cb-span(":disabled")} {
313
272
  color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
314
273
  cursor: default;
315
274
  }
316
275
 
317
- *:not(.switch) > [type="checkbox"]:disabled + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
276
+ #{_cb-span(":disabled")}::before {
318
277
  border-color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
319
278
  background-color: transparent;
320
279
  box-shadow: none;
321
280
  }
322
281
 
323
- *:not(.switch) > [type="checkbox"]:disabled:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
282
+ #{_cb-span(":disabled:is(:checked, :indeterminate)")}::before {
324
283
  border-color: transparent;
325
284
  background-color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
326
285
  }
327
286
 
328
- *:not(.switch) > [type="checkbox"]:disabled:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::after {
287
+ #{_cb-span(":disabled:is(:checked, :indeterminate)")}::after {
329
288
  background-color: var(--md-sys-color-surface);
330
289
  }
290
+
291
+ // Forced colors paint the box and the masked check as Canvas, so checked and
292
+ // unchecked look the same, and the focus ring is a box-shadow they drop. Draw
293
+ // the state in system colors and give focus a real outline.
294
+ @media (forced-colors: active) {
295
+ label:has(> [type="checkbox"]):not(.switch) > [type="checkbox"],
296
+ .checkbox > [type="checkbox"] {
297
+ &:focus-visible {
298
+ outline: 2px solid CanvasText;
299
+ outline-offset: 2px;
300
+ }
301
+
302
+ &:is(:checked, :indeterminate) {
303
+ forced-color-adjust: none;
304
+ border-color: Highlight;
305
+ background-color: Highlight;
306
+ }
307
+
308
+ &:disabled {
309
+ border-color: GrayText;
310
+ }
311
+
312
+ &:disabled:is(:checked, :indeterminate) {
313
+ background-color: GrayText;
314
+ }
315
+
316
+ // Forced colors have no error color, so an invalid box takes a dashed
317
+ // edge instead. A checked one keeps the Highlight fill - the error fill
318
+ // above is more specific than the :checked rule here and would pass the
319
+ // author's red through - inside a CanvasText edge, clipped so Canvas
320
+ // shows between the dashes. A disabled one stays GrayText.
321
+ &:is(.invalid, [aria-invalid="true"]) {
322
+ border-style: dashed;
323
+ }
324
+
325
+ &:is(.invalid, [aria-invalid="true"]):is(:checked, :indeterminate):not(:disabled) {
326
+ border-color: CanvasText;
327
+ background-color: Highlight;
328
+ background-clip: padding-box;
329
+ }
330
+ }
331
+
332
+ // Forced colors repaint the dimmed label as CanvasText, like an enabled one.
333
+ label:has(> [type="checkbox"]:disabled):not(.switch),
334
+ .checkbox:has([type="checkbox"]:disabled) {
335
+ color: GrayText;
336
+ }
337
+
338
+ label:has(> [type="checkbox"]):not(.switch):not(:has(> [type="checkbox"] + span)),
339
+ .checkbox:not(:has(> [type="checkbox"] + span)) {
340
+ &::before {
341
+ forced-color-adjust: none;
342
+ background-color: HighlightText;
343
+ }
344
+ }
345
+
346
+ #{_cb-span(":is(:checked, :indeterminate)")}::before {
347
+ forced-color-adjust: none;
348
+ border-color: Highlight;
349
+ background-color: Highlight;
350
+ }
351
+
352
+ #{_cb-span()}::after {
353
+ forced-color-adjust: none;
354
+ background-color: HighlightText;
355
+ }
356
+
357
+ #{_cb-span(":focus-visible")}::before {
358
+ outline: 2px solid CanvasText;
359
+ outline-offset: 2px;
360
+ }
361
+
362
+ #{_cb-span(":is(.invalid, [aria-invalid='true'])")}::before {
363
+ border-style: dashed;
364
+ }
365
+
366
+ // The error mark color is more specific than the HighlightText rules
367
+ // above, so an invalid box restates them with the same selector.
368
+ label:has(> [type="checkbox"]):not(.switch):not(:has(> [type="checkbox"] + span)),
369
+ .checkbox:not(:has(> [type="checkbox"] + span)) {
370
+ &:has(> [type="checkbox"]:is(.invalid, [aria-invalid="true"]):is(:checked, :indeterminate):not(:disabled))::before {
371
+ background-color: HighlightText;
372
+ }
373
+ }
374
+
375
+ #{_cb-span(":is(.invalid, [aria-invalid='true']):is(:checked, :indeterminate):not(:disabled)")}::after {
376
+ background-color: HighlightText;
377
+ }
378
+
379
+ #{_cb-span(":is(.invalid, [aria-invalid='true']):is(:checked, :indeterminate):not(:disabled)")}::before {
380
+ border-color: CanvasText;
381
+ background-color: Highlight;
382
+ background-clip: padding-box;
383
+ }
384
+ }
@@ -0,0 +1,135 @@
1
+ @use "../../abstracts" as *;
2
+
3
+ // Color picker. A .color-picker holding an <input type="color"> works as the
4
+ // native swatch without JavaScript. ColorPicker adds a saturation and
5
+ // brightness area, a hue slider and a hex field around that input, which
6
+ // stays the form value and the preview.
7
+ //
8
+ // <div class="color-picker" role="group" aria-label="Accent">
9
+ // <input type="color" name="accent" value="#6750a4" aria-label="Accent">
10
+ // </div>
11
+ //
12
+ // The hue slider is the framework's range input, so it keeps the M3 handle
13
+ // and states; only its track becomes the hue gradient. The area and the hue
14
+ // track are the color itself, so they keep their colors under forced colors
15
+ // and do not mirror in RTL.
16
+ //
17
+ // Tokens:
18
+ // --md-comp-color-picker-width 280px
19
+ // --md-comp-color-picker-area-height 160px
20
+ // --md-comp-color-picker-area-shape corner.medium
21
+ // --md-comp-color-picker-thumb-size 24px
22
+ // --md-comp-color-picker-field-shape corner.extra-small
23
+
24
+ $_hue-gradient: linear-gradient(
25
+ to right,
26
+ hsl(0 100% 50%), hsl(60 100% 50%), hsl(120 100% 50%), hsl(180 100% 50%),
27
+ hsl(240 100% 50%), hsl(300 100% 50%), hsl(360 100% 50%)
28
+ );
29
+
30
+ .color-picker {
31
+ --md-comp-color-picker-width: 280px;
32
+ --md-comp-color-picker-area-height: 160px;
33
+ --md-comp-color-picker-area-shape: var(--md-sys-shape-corner-medium);
34
+ --md-comp-color-picker-thumb-size: 24px;
35
+ --md-comp-color-picker-field-shape: var(--md-sys-shape-corner-extra-small);
36
+
37
+ display: inline-grid;
38
+ grid-template-columns: auto minmax(0, 1fr);
39
+ align-items: center;
40
+ gap: 8px 12px;
41
+ inline-size: min(100%, var(--md-comp-color-picker-width));
42
+
43
+ > .color-picker-area,
44
+ > .color-picker-hue {
45
+ grid-column: 1 / -1;
46
+ }
47
+
48
+ > .color-picker-hue {
49
+ --md-comp-slider-handle-color: var(--md-sys-color-on-surface);
50
+ direction: ltr;
51
+ margin: 0;
52
+ forced-color-adjust: none;
53
+ }
54
+ }
55
+
56
+ .color-picker-area {
57
+ position: relative;
58
+ block-size: var(--md-comp-color-picker-area-height);
59
+ border-radius: var(--md-comp-color-picker-area-shape);
60
+ background:
61
+ linear-gradient(to top, #000, transparent),
62
+ linear-gradient(to right, #fff, transparent),
63
+ hsl(var(--_color-picker-hue, 0) 100% 50%);
64
+ cursor: crosshair;
65
+ touch-action: none;
66
+ forced-color-adjust: none;
67
+ }
68
+
69
+ // White ring plus a dark edge, so the thumb shows on every color.
70
+ .color-picker-thumb {
71
+ position: absolute;
72
+ top: calc(var(--_color-picker-y, 0) * 100%);
73
+ left: calc(var(--_color-picker-x, 0) * 100%);
74
+ box-sizing: border-box;
75
+ inline-size: var(--md-comp-color-picker-thumb-size);
76
+ block-size: var(--md-comp-color-picker-thumb-size);
77
+ border: 3px solid #fff;
78
+ border-radius: var(--md-sys-shape-corner-full);
79
+ background-color: var(--_color-picker-color, transparent);
80
+ box-shadow: 0 0 0 1px rgb(0 0 0 / 0.5), inset 0 0 0 1px rgb(0 0 0 / 0.3);
81
+ translate: -50% -50%;
82
+ @include focus-visible;
83
+ }
84
+
85
+ // One rule per engine: a browser drops a whole rule with a pseudo-element it
86
+ // does not know.
87
+ @each $track in ("::-webkit-slider-runnable-track", "::-moz-range-track") {
88
+ .color-picker > .color-picker-hue#{$track} {
89
+ background: $_hue-gradient;
90
+ }
91
+ }
92
+
93
+ .color-picker-hex {
94
+ box-sizing: border-box;
95
+ min-inline-size: 0;
96
+ block-size: 40px;
97
+ margin: 0;
98
+ padding-inline: 12px;
99
+ border: 1px solid var(--md-sys-color-outline);
100
+ border-radius: var(--md-comp-color-picker-field-shape);
101
+ background: transparent;
102
+ color: var(--md-sys-color-on-surface);
103
+ font-family: $font-stack;
104
+ @include typescale("body-large");
105
+
106
+ &:focus {
107
+ outline: 2px solid var(--md-sys-color-primary);
108
+ outline-offset: -2px;
109
+ }
110
+
111
+ &:disabled {
112
+ opacity: 0.38;
113
+ }
114
+ }
115
+
116
+ .color-picker:has(> input[type="color"]:disabled) > .color-picker-area {
117
+ cursor: default;
118
+ opacity: 0.38;
119
+ }
120
+
121
+ @media (forced-colors: active) {
122
+ .color-picker-thumb {
123
+ border-color: Canvas;
124
+ box-shadow: 0 0 0 2px CanvasText;
125
+ }
126
+
127
+ .color-picker-hex {
128
+ border-color: CanvasText;
129
+ }
130
+
131
+ // The area keeps its colors, and its dark edge meets a dark Canvas.
132
+ .color-picker-area {
133
+ outline: 1px solid CanvasText;
134
+ }
135
+ }
@@ -0,0 +1,85 @@
1
+ @use "../../abstracts" as *;
2
+
3
+ // Color swatches: pick one color from a preset palette. Each swatch is a
4
+ // native radio drawn as a round chip of its color, so the group has one Tab
5
+ // stop, arrow keys and a checked state with no script. A native color input
6
+ // at the end of the group offers a custom value. CSS only.
7
+ //
8
+ // <fieldset class="color-swatches">
9
+ // <legend>Accent</legend>
10
+ // <label><span class="visually-hidden">Purple</span><input type="radio"
11
+ // name="accent" value="#6750a4" style="--md-comp-color-swatch-color: #6750a4" checked></label>
12
+ // <label><span class="visually-hidden">Custom accent</span><input type="color" value="#ff8800"></label>
13
+ // </fieldset>
14
+ //
15
+ // The same anatomy as Rating: the name is visually hidden text in the label,
16
+ // before the input. Loaded after radio-buttons, so these rules match the
17
+ // radio rules' weight and win on order.
18
+ //
19
+ // Tokens:
20
+ // --md-comp-color-swatch-color the swatch's color, per input transparent
21
+ // --md-comp-color-swatches-size swatch diameter 40px
22
+ // --md-comp-color-swatches-outline-color edge of every swatch outline
23
+ // --md-comp-color-swatches-selected-color ring around the checked one on-surface
24
+
25
+ fieldset.color-swatches {
26
+ --md-comp-color-swatch-color: transparent;
27
+ --md-comp-color-swatches-size: 40px;
28
+ --md-comp-color-swatches-outline-color: var(--md-sys-color-outline);
29
+ --md-comp-color-swatches-selected-color: var(--md-sys-color-on-surface);
30
+
31
+ @include choice-fieldset(var(--md-sys-shape-corner-full), '[type="radio"]');
32
+
33
+ > label > [type="color"] {
34
+ padding: 0;
35
+ }
36
+
37
+ > label > [type="radio"] {
38
+ flex: none;
39
+ width: var(--md-comp-color-swatches-size);
40
+ height: var(--md-comp-color-swatches-size);
41
+ border: 1px solid var(--md-comp-color-swatches-outline-color);
42
+ border-radius: var(--md-sys-shape-corner-full);
43
+ background-color: var(--md-comp-color-swatch-color);
44
+ background-image: none;
45
+ box-shadow: none;
46
+ outline: 0;
47
+ // The color is the content, so forced colors must not repaint it.
48
+ forced-color-adjust: none;
49
+
50
+ // The base radio draws its dot and state ring in these states, some at a
51
+ // higher weight; the swatch has neither.
52
+ &:hover,
53
+ &:focus-visible,
54
+ &:disabled,
55
+ &:checked:hover,
56
+ &:disabled:checked {
57
+ border-color: var(--md-comp-color-swatches-outline-color);
58
+ background-image: none;
59
+ box-shadow: none;
60
+ }
61
+
62
+ // A gap in the surface color, then a ring: the shape marks the choice,
63
+ // so it does not depend on telling two colors apart.
64
+ &:checked,
65
+ &:checked:hover {
66
+ border-color: var(--md-comp-color-swatches-outline-color);
67
+ background-image: none;
68
+ box-shadow:
69
+ 0 0 0 2px var(--md-sys-color-surface),
70
+ 0 0 0 4px var(--md-comp-color-swatches-selected-color);
71
+ }
72
+ }
73
+
74
+ @media (forced-colors: active) {
75
+ > label > [type="radio"] {
76
+ border-color: CanvasText;
77
+ }
78
+
79
+ > label > [type="radio"]:checked {
80
+ box-shadow: none;
81
+ outline: 3px solid Highlight;
82
+ outline-offset: 2px;
83
+ }
84
+ }
85
+ }
@@ -16,7 +16,7 @@
16
16
  // --md-comp-drop-zone-dragover-color on-primary-container
17
17
 
18
18
  .drop-zone {
19
- --md-comp-drop-zone-shape: 16px;
19
+ --md-comp-drop-zone-shape: var(--md-sys-shape-corner-large);
20
20
  --md-comp-drop-zone-outline-color: var(--md-sys-color-outline);
21
21
  --md-comp-drop-zone-dragover-container-color: var(--md-sys-color-primary-container);
22
22
  --md-comp-drop-zone-dragover-color: var(--md-sys-color-on-primary-container);
@@ -36,12 +36,12 @@
36
36
  text-align: center;
37
37
  color: var(--md-sys-color-on-surface-variant);
38
38
  cursor: pointer;
39
- transition: background-color 0.2s ease-out, border-color 0.2s ease-out;
39
+ transition: background-color var(--md-sys-motion-duration-short4) ease-out, border-color var(--md-sys-motion-duration-short4) ease-out;
40
40
  @include typescale("body-large");
41
41
 
42
42
  > #{$icon} {
43
43
  margin-block-end: 8px;
44
- font-size: 32px;
44
+ font-size: rem(32px);
45
45
  color: var(--md-sys-color-primary);
46
46
  }
47
47
 
@@ -61,11 +61,7 @@
61
61
  }
62
62
 
63
63
  &:hover {
64
- background-color: color-mix(
65
- in oklab,
66
- var(--md-sys-color-on-surface) state-opacity("hover"),
67
- transparent
68
- );
64
+ background-color: state-layer(var(--md-sys-color-on-surface), "hover");
69
65
  }
70
66
 
71
67
  &:has(> input:focus-visible) {
@@ -86,6 +82,16 @@
86
82
  color: var(--md-comp-drop-zone-dragover-color);
87
83
  }
88
84
 
85
+ > label:has(> input:is([data-validate-types], [data-max-size], [data-max-files])[aria-invalid="true"]) {
86
+ border-color: var(--md-sys-color-error);
87
+ }
88
+
89
+ &:has(> label > input:is([data-validate-types], [data-max-size], [data-max-files])) > .supporting-text[data-error] {
90
+ margin: 8px 16px 0;
91
+ color: var(--md-sys-color-error);
92
+ @include typescale("body-small");
93
+ }
94
+
89
95
  > .drop-zone-files {
90
96
  display: flex;
91
97
  flex-direction: column;
@@ -99,7 +105,7 @@
99
105
  justify-content: space-between;
100
106
  gap: 16px;
101
107
  padding: 8px 16px;
102
- border-radius: 8px;
108
+ border-radius: var(--md-sys-shape-corner-small);
103
109
  background-color: var(--md-sys-color-surface-container);
104
110
  color: var(--md-sys-color-on-surface);
105
111
  @include typescale("body-medium");