@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
@@ -12,7 +12,7 @@
12
12
  // container used around related form content, and the outlined text-field
13
13
  // shape so a group of fields matches the fields:
14
14
  // container transparent, 4dp corners, 1dp outline-variant
15
- // filled surface-variant, no outline
15
+ // filled surface-container-highest, no outline
16
16
  // legend title-small / on-surface
17
17
  // supporting body-small / on-surface-variant
18
18
  // padding 16dp, 16dp between children
@@ -22,7 +22,7 @@
22
22
 
23
23
  fieldset {
24
24
  --md-comp-fieldset-container-color: transparent;
25
- --md-comp-fieldset-container-shape: 4px;
25
+ --md-comp-fieldset-container-shape: var(--md-sys-shape-corner-extra-small);
26
26
  --md-comp-fieldset-outline-color: var(--md-sys-color-outline-variant);
27
27
  --md-comp-fieldset-outline-width: 1px;
28
28
  --md-comp-fieldset-legend-color: var(--md-sys-color-on-surface);
@@ -31,13 +31,13 @@ fieldset {
31
31
  min-inline-size: 0;
32
32
  margin: 0;
33
33
  padding: 16px;
34
+ border: var(--md-comp-fieldset-outline-width) solid var(--md-comp-fieldset-outline-color);
35
+ border-radius: var(--md-comp-fieldset-container-shape);
36
+ background-color: var(--md-comp-fieldset-container-color);
34
37
 
35
38
  & + & {
36
39
  margin-block-start: 24px;
37
40
  }
38
- border: var(--md-comp-fieldset-outline-width) solid var(--md-comp-fieldset-outline-color);
39
- border-radius: var(--md-comp-fieldset-container-shape);
40
- background-color: var(--md-comp-fieldset-container-color);
41
41
 
42
42
  > legend {
43
43
  float: none;
@@ -51,10 +51,10 @@ fieldset {
51
51
  @include typescale("title-small");
52
52
 
53
53
  > #{$icon} {
54
- font-size: 18px;
55
- width: 18px;
56
- height: 18px;
57
- line-height: 18px;
54
+ font-size: rem(18px);
55
+ width: rem(18px);
56
+ height: rem(18px);
57
+ line-height: rem(18px);
58
58
  margin-inline-end: 8px;
59
59
  vertical-align: -3px;
60
60
  color: var(--md-sys-color-on-surface-variant);
@@ -97,7 +97,7 @@ fieldset.border {
97
97
  }
98
98
 
99
99
  fieldset.rounded {
100
- --md-comp-fieldset-container-shape: 12px;
100
+ --md-comp-fieldset-container-shape: var(--md-sys-shape-corner-medium);
101
101
  }
102
102
 
103
103
  // Plain groups radios or checkboxes inside a surface that already frames them,
@@ -6,7 +6,6 @@
6
6
  // the selected filename instead of consuming the entire field.
7
7
  grid-template-columns: fit-content(50%) minmax(0, 1fr);
8
8
  gap: 10px;
9
- //position: relative;
10
9
 
11
10
  .file-path-wrapper {
12
11
  overflow: hidden;
@@ -14,12 +13,10 @@
14
13
 
15
14
  input.file-path { width: 100%; }
16
15
 
17
- // The trigger. `label.button` is the documented form - it wraps the file
18
- // input, which is how clicking it opens the picker with no script. <button>
19
- // and .btn are the older markup and still work.
20
- > label.button,
21
- > button,
22
- > .btn {
16
+ // The trigger. `label.button` wraps the file input, which is how clicking
17
+ // it opens the picker with no script. A <button> cannot hold the input:
18
+ // one control inside another is invalid HTML.
19
+ > label.button {
23
20
  display: block;
24
21
  align-content: center;
25
22
  overflow-wrap: break-word;
@@ -39,7 +36,7 @@
39
36
  // Scoped to the trigger, not to .file-field. `inset: 0` against the field
40
37
  // stretched the invisible input across the whole row, so clicking the path
41
38
  // display - or any empty space - opened the file picker.
42
- :is(label.button, button, .btn) input[type=file] {
39
+ label.button input[type=file] {
43
40
  position: absolute;
44
41
  inset: 0;
45
42
  cursor: pointer;
@@ -47,7 +44,7 @@
47
44
  margin: 0;
48
45
  padding: 0;
49
46
  opacity: 0;
50
- font-size: 20px;
47
+ font-size: rem(20px);
51
48
 
52
49
  // Needed to override the UA-rendered button. `::file-selector-button` is
53
50
  // the standardised name for the old ::-webkit-file-upload-button.
@@ -8,9 +8,11 @@
8
8
  @forward 'drop-zone';
9
9
  @forward 'slider';
10
10
  @forward 'fieldset';
11
+ @forward 'color-swatches';
12
+ @forward 'color-picker';
11
13
 
12
14
  label {
13
- font-size: .8rem;
15
+ font-size: 0.8rem;
14
16
  color: var(--md-sys-color-on-surface-variant);
15
17
  }
16
18
 
@@ -3,15 +3,14 @@
3
3
  // Text fields.
4
4
  //
5
5
  // Anatomy is the HTML. .field is the container. The <label> after the
6
- // control is the floating label. A leading <i> (or .prefix) is the
7
- // leading icon; .suffix (or a second / trailing <i>) is the trailing
8
- // icon. Icons come before the control in the documented markup, so
6
+ // control is the floating label. A .prefix icon is the leading icon and a
7
+ // .suffix icon the trailing one. Icons come before the control in the documented markup, so
9
8
  // trailing cannot be selected with :last-child — that left .suffix
10
9
  // in flow above the well. <small> is supporting text. .outlined is
11
10
  // the outlined variant; the default is filled.
12
11
  //
13
12
  // Tokens follow https://m3.material.io/components/text-fields/specs
14
- // filled surface-variant well, 1rem corners, 1dp/2dp bottom indicator
13
+ // filled surface-container-highest well, 1rem corners, 1dp/2dp bottom indicator
15
14
  // outlined 1dp/2dp outline, 1rem corners
16
15
  // height 56dp
17
16
  // label body-large rest, body-small floated
@@ -25,20 +24,21 @@
25
24
  color: var(--md-sys-color-on-surface-variant);
26
25
  }
27
26
 
28
- $_text-inputs: "input:not([type]):not(.browser-default), input[type=text]:not(.browser-default), input[type=password]:not(.browser-default), input[type=email]:not(.browser-default), input[type=url]:not(.browser-default), input[type=time]:not(.browser-default), input[type=date]:not(.browser-default), input[type=datetime]:not(.browser-default), input[type=datetime-local]:not(.browser-default), input[type=month]:not(.browser-default), input[type=tel]:not(.browser-default), input[type=number]:not(.browser-default), input[type=search]:not(.browser-default), textarea.expressive-textarea";
29
-
30
- #{$_text-inputs} {
27
+ // :is() takes its most specific argument, (0,1,0) for each one here, so every
28
+ // input keeps the (0,2,1) a per-type :not(.browser-default) list gave it.
29
+ input:is(:not([type]), [type=text], [type=password], [type=email], [type=url], [type=time], [type=date], [type=datetime], [type=datetime-local], [type=month], [type=tel], [type=number], [type=search]):not(.browser-default),
30
+ textarea.expressive-textarea {
31
31
  outline: none;
32
32
  color: var(--md-sys-color-on-surface);
33
33
  width: 100%;
34
- height: 56px;
34
+ height: rem(56px);
35
35
  background-color: transparent;
36
36
  @include typescale("body-large");
37
37
  }
38
38
 
39
39
  // A .field is full of spans that are not the floating label: supporting text,
40
- // the character counter, the file path, the select caret, and - since field
41
- // icons stopped being <i> - the leading and trailing icons. Every rule that
40
+ // the character counter, the file path, the select caret, and the leading and
41
+ // trailing icons. Every rule that
42
42
  // styles "the label, or the span standing in for it" has to exclude all of
43
43
  // them, and there are five such rules. They were five hand-copied lists that
44
44
  // had already drifted (.file-path was in two of them), and adding .prefix /
@@ -47,31 +47,55 @@ $_text-inputs: "input:not([type]):not(.browser-default), input[type=text]:not(.b
47
47
  // pointer-events: none.
48
48
  $_not-label: ".supporting-text, .character-counter, .file-path, .caret, .prefix, .suffix, .chip";
49
49
 
50
+ // The label, or the span standing in for it, floats while the control is
51
+ // focused or holds a value. Nested under the control, so & is the control.
52
+ $_floated: '&:focus + label, &:not([placeholder=" "]) + label, &:not(:placeholder-shown) + label, &:focus + span:not(#{$_not-label}), &:not([placeholder=" "]) + span:not(#{$_not-label}), &:not(:placeholder-shown) + span:not(#{$_not-label})';
53
+
50
54
  .field {
51
55
  --md-comp-filled-text-field-container-color: var(--md-sys-color-surface-container-highest);
52
56
  --md-comp-filled-text-field-container-shape: 1rem;
53
57
  --md-comp-filled-text-field-caret-color: var(--md-sys-color-primary);
54
58
  --input-color: var(--md-comp-filled-text-field-caret-color);
55
59
 
60
+ // Start and end clearance of the field's own input, label and icons, in
61
+ // physical terms keyed to the field's dir through :dir(). An input can carry
62
+ // its own dir ("auto" for mixed-language text, "ltr" for an email address on
63
+ // an RTL page), and logical properties would follow that, or a CSS-only
64
+ // `direction`, instead. A page that sets only `direction` renders as LTR.
65
+ --_field-start: 16px;
66
+ --_field-end: 16px;
67
+ // Clearance for a 24dp icon at a 12dp inset with 16dp after it: 52px at
68
+ // the default size. The icon is rem, so the clearance grows with it.
69
+ --_field-icon-clearance: calc(28px + #{rem(24px)});
70
+ // A small icon button, 8dp either side of its rem icon: 40px by default.
71
+ --_field-icon-button: calc(16px + #{rem(24px)});
72
+ --_field-left: var(--_field-start);
73
+ --_field-right: var(--_field-end);
74
+
75
+ &:dir(rtl) {
76
+ --_field-left: var(--_field-end);
77
+ --_field-right: var(--_field-start);
78
+ }
79
+
56
80
  position: relative;
57
81
  clear: both;
58
82
 
59
83
  // Checkboxes / radios inside a field (multi-select menu) are not text
60
84
  // fields — do not give them the 56dp well.
61
- input:not([type="range"], [type="checkbox"], [type="radio"], [type="file"]),
85
+ input:not([type="range"], [type="checkbox"], [type="radio"], [type="file"], [type="color"]),
62
86
  textarea {
63
87
  box-sizing: border-box;
64
- padding: 20px 16px 8px;
88
+ padding: rem(20px) 16px rem(8px);
65
89
  border: none;
66
90
  border-radius: var(--md-comp-filled-text-field-container-shape);
67
91
  border-bottom: 1px solid var(--md-sys-color-on-surface-variant);
68
92
  background-color: var(--md-comp-filled-text-field-container-color);
69
93
  caret-color: var(--input-color);
70
94
 
71
- &:focus:not([readonly]) {
95
+ &:focus {
72
96
  border-bottom-width: 2px;
73
97
  border-bottom-color: var(--input-color);
74
- padding-bottom: 7px;
98
+ padding-bottom: calc(#{rem(8px)} - 1px);
75
99
  }
76
100
 
77
101
  &:disabled,
@@ -81,19 +105,14 @@ $_not-label: ".supporting-text, .character-counter, .file-path, .caret, .prefix,
81
105
  background-color: color-mix(in oklab, var(--md-sys-color-on-surface) 4%, transparent);
82
106
  }
83
107
 
84
- &:focus:not([readonly]) + label,
85
- &:focus:not([readonly]) + span:not(#{$_not-label}) {
108
+ &:focus + label,
109
+ &:focus + span:not(#{$_not-label}) {
86
110
  color: var(--input-color);
87
111
  }
88
112
 
89
- &:focus:not([readonly]) + label,
90
- &:not([placeholder=" "]) + label,
91
- &:not(:placeholder-shown) + label,
92
- &:focus:not([readonly]) + span:not(#{$_not-label}),
93
- &:not([placeholder=" "]) + span:not(#{$_not-label}),
94
- &:not(:placeholder-shown) + span:not(#{$_not-label}) {
113
+ #{$_floated} {
95
114
  transform: scale(calc(12 / 16));
96
- top: 8px;
115
+ top: rem(8px);
97
116
  }
98
117
 
99
118
  &:disabled + label,
@@ -133,6 +152,15 @@ $_not-label: ".supporting-text, .character-counter, .file-path, .caret, .prefix,
133
152
  user-select: none;
134
153
  }
135
154
 
155
+ // After the base rule, which ties it on specificity. Only the field's own
156
+ // control: an input nested deeper keeps 16px. Longhands, so a bad custom
157
+ // property costs one side rather than all four.
158
+ > :is(input:not([type="range"], [type="checkbox"], [type="radio"], [type="file"], [type="color"]), textarea) {
159
+ padding-left: var(--_field-left);
160
+ padding-right: var(--_field-right);
161
+ }
162
+
163
+
136
164
  // :not(.button, .icon-button) - the file input's trigger is a <label> and is
137
165
  // a button, not this field's floating label.
138
166
  > label:not(.button, .icon-button),
@@ -140,13 +168,24 @@ $_not-label: ".supporting-text, .character-counter, .file-path, .caret, .prefix,
140
168
  color: var(--md-sys-color-on-surface-variant);
141
169
  user-select: none;
142
170
  position: absolute;
143
- left: 16px;
144
- top: 16px;
171
+ left: var(--_field-start);
172
+ top: rem(16px);
145
173
  cursor: text;
146
174
  transform-origin: top left;
147
175
  pointer-events: none;
148
176
  @include typescale("body-large");
149
- transition: left 0.2s ease-out, top 0.2s ease-out, transform 0.2s ease-out, color 0.2s ease-out;
177
+ // left and right: the logical inset moves on `right` in a right-to-left field.
178
+ transition: left var(--md-sys-motion-duration-short4) ease-out, right var(--md-sys-motion-duration-short4) ease-out, top var(--md-sys-motion-duration-short4) ease-out, transform var(--md-sys-motion-duration-short4) ease-out, color var(--md-sys-motion-duration-short4) ease-out;
179
+
180
+ &:dir(rtl) {
181
+ left: auto;
182
+ right: var(--_field-start);
183
+ transform-origin: top right;
184
+ }
185
+
186
+ @media (prefers-reduced-motion: reduce) {
187
+ transition: none;
188
+ }
150
189
  }
151
190
 
152
191
  > small,
@@ -159,114 +198,134 @@ $_not-label: ".supporting-text, .character-counter, .file-path, .caret, .prefix,
159
198
  }
160
199
 
161
200
  > .character-counter {
162
- float: right;
163
201
  margin-top: 4px;
164
202
  padding: 0 16px;
165
203
  color: var(--md-sys-color-on-surface-variant);
166
204
  @include typescale("body-small");
167
205
  }
168
206
 
169
- // Shared icon box. Position is set on the leading / trailing rules;
170
- // a lone <i> matches several of the :is() items and must not pick
171
- // a side here.
172
- //
173
- // The `i` rules are the legacy path and still work. They cannot be widened
174
- // to the canonical <span class="material-symbols"> form, because they lean
175
- // on :first-of-type / :last-of-type - which count elements of the same
176
- // *type*, and a field is full of other spans (.supporting-text, .caret,
177
- // .character-counter, .file-path). So the documented markup names the side
178
- // explicitly with .prefix / .suffix, and those rules key on nothing else.
179
- > i:is(.prefix, .suffix, :first-of-type, :last-of-type, :last-child),
207
+ // Shared icon box. Position is set on the leading / trailing rules. The
208
+ // side is named with .prefix / .suffix rather than taken from position:
209
+ // :first-of-type counts elements of the same *type*, and a field is full
210
+ // of other spans (.supporting-text, .caret, .character-counter, .file-path).
180
211
  > :is(.prefix, .suffix):not(.icon-button) {
181
212
  position: absolute;
182
- top: 16px;
213
+ top: rem(16px);
183
214
  display: flex;
184
215
  align-items: center;
185
- font-size: 24px;
186
- width: 24px;
187
- height: 24px;
188
- line-height: 24px;
216
+ font-size: rem(24px);
217
+ width: rem(24px);
218
+ height: rem(24px);
219
+ line-height: rem(24px);
189
220
  color: var(--md-sys-color-on-surface-variant);
190
221
  user-select: none;
191
222
  }
192
223
 
193
- > i:first-of-type:not(.suffix):not(:last-child),
194
- > i.prefix,
224
+ // Physical sides, swapped by :dir(). The icon font sets direction: ltr on
225
+ // the icon itself, and Chromium maps an icon's own inset-inline-* through
226
+ // that, so a logical inset would stay on the left in a right-to-left page.
195
227
  > .prefix {
196
228
  left: 12px;
197
229
  pointer-events: none;
230
+
231
+ &:dir(rtl) {
232
+ left: auto;
233
+ right: 12px;
234
+ }
198
235
  }
199
236
 
200
- > i.suffix,
201
- > i:last-of-type:not(:first-of-type),
202
- > i:last-child:not(:first-child):not(.prefix),
203
237
  > .suffix:not(.icon-button) {
204
238
  right: 12px;
205
239
  // Both icons inherited this from the floating-label rule until they were
206
240
  // excluded from it. .prefix restates it below; .suffix has to as well, or
207
241
  // the trailing icon swallows the click that should focus the input.
208
242
  pointer-events: none;
243
+
244
+ &:dir(rtl) {
245
+ right: auto;
246
+ left: 12px;
247
+ }
209
248
  }
210
249
 
211
250
  // A trailing icon button is a control, so it keeps its 40dp target and its
212
251
  // clicks. It centres on the same point as a 24dp trailing icon.
213
252
  > .icon-button.suffix {
214
253
  position: absolute;
215
- top: 8px;
254
+ top: rem(8px);
216
255
  right: 4px;
217
256
  z-index: 1;
218
- }
219
257
 
220
- &:has(> i:first-of-type:not(.suffix):not(:last-child), > i.prefix, > .prefix) {
221
- > :is(input, textarea) {
222
- padding-left: 52px;
258
+ &:dir(rtl) {
259
+ right: auto;
260
+ left: 4px;
223
261
  }
262
+ }
263
+
264
+ // Number stepper: data-step="down" sits one button in from the end, before
265
+ // data-step="up". The Forms behavior does the stepping.
266
+ > .icon-button.suffix[data-step="down"] {
267
+ right: calc(8px + var(--_field-icon-button));
224
268
 
225
- // The exclusion list is what stops this indenting things that are not the
226
- // floating label. .prefix / .suffix joined it when field icons stopped
227
- // being <i> and became spans - without them the leading icon was pushed
228
- // to 52px, i.e. indented past its own padding.
229
- > :is(
230
- label,
231
- span:not(#{$_not-label})
232
- ) {
233
- left: 52px;
269
+ &:dir(rtl) {
270
+ right: auto;
271
+ left: calc(8px + var(--_field-icon-button));
234
272
  }
235
273
  }
236
274
 
237
- &:has(> i.suffix, > i:last-of-type:not(:first-of-type), > i:last-child:not(:first-child):not(.prefix), > .suffix) {
238
- > :is(input, textarea) {
239
- padding-right: 52px;
275
+ // The browser's spin buttons go when the field draws its own.
276
+ &:has(> [data-step]) > input[type="number"] {
277
+ appearance: textfield;
278
+
279
+ &::-webkit-inner-spin-button,
280
+ &::-webkit-outer-spin-button {
281
+ appearance: none;
282
+ margin: 0;
240
283
  }
241
284
  }
242
285
 
286
+ // The label reads --_field-start too, so it indents with the input.
287
+ &:has(> .prefix) {
288
+ --_field-start: var(--_field-icon-clearance);
289
+ }
290
+
291
+ &:has(> .suffix) {
292
+ --_field-end: var(--_field-icon-clearance);
293
+ }
294
+
295
+ // Two buttons, 4dp from the end and 4dp apart, then 8dp before the text.
296
+ &:has(> [data-step]) {
297
+ --_field-end: calc(16px + 2 * var(--_field-icon-button));
298
+ }
299
+
243
300
  &.outlined {
244
301
  > input,
245
302
  > textarea {
246
- padding-top: 8px;
247
- padding-bottom: 8px;
303
+ padding-top: rem(8px);
304
+ padding-bottom: rem(8px);
248
305
  background-color: transparent;
249
306
  border: 1px solid var(--md-sys-color-outline);
250
307
  border-radius: var(--md-comp-filled-text-field-container-shape);
251
308
 
252
- &:focus:not([readonly]) {
309
+ &:focus {
253
310
  border-width: 2px;
254
311
  border-color: var(--input-color);
255
- padding-top: 7px;
256
- padding-bottom: 7px;
312
+ padding-top: calc(#{rem(8px)} - 1px);
313
+ padding-bottom: calc(#{rem(8px)} - 1px);
257
314
  }
258
315
 
259
- &:focus:not([readonly]) + label,
260
- &:not([placeholder=" "]) + label,
261
- &:not(:placeholder-shown) + label,
262
- &:focus:not([readonly]) + span:not(#{$_not-label}),
263
- &:not([placeholder=" "]) + span:not(#{$_not-label}),
264
- &:not(:placeholder-shown) + span:not(#{$_not-label}) {
265
- top: -8px;
316
+ #{$_floated} {
317
+ top: rem(-8px);
266
318
  left: 16px;
267
319
  margin-left: -4px;
268
320
  padding: 0 4px;
269
- background-color: var(--md-sys-color-background);
321
+ background-color: var(--md-sys-color-surface);
322
+
323
+ &:dir(rtl) {
324
+ left: auto;
325
+ right: 16px;
326
+ margin-left: 0;
327
+ margin-right: -4px;
328
+ }
270
329
  }
271
330
 
272
331
  &:disabled,
@@ -281,6 +340,16 @@ $_not-label: ".supporting-text, .character-counter, .file-path, .caret, .prefix,
281
340
  box-shadow: none;
282
341
  }
283
342
  }
343
+
344
+ // A textarea's text starts at the top instead of centering, so pad its
345
+ // first line to the input's 28px midline: border + padding + half of 24px.
346
+ > textarea.expressive-textarea {
347
+ padding-block: calc(#{rem(16px)} - 1px);
348
+
349
+ &:focus {
350
+ padding-block: calc(#{rem(16px)} - 2px);
351
+ }
352
+ }
284
353
  }
285
354
  }
286
355
 
@@ -294,12 +363,14 @@ textarea {
294
363
  background-color: transparent;
295
364
 
296
365
  &.expressive-textarea {
297
- padding-top: 24px !important;
298
- padding-bottom: 8px !important;
299
- line-height: 24px;
366
+ // No !important: source order beats `.field textarea`, and the outlined
367
+ // and :focus rules outrank this one, as they must.
368
+ padding-top: rem(24px);
369
+ padding-bottom: rem(8px);
370
+ line-height: rem(24px);
300
371
  overflow-y: hidden;
301
372
  resize: none;
302
- min-height: 56px;
373
+ min-height: rem(56px);
303
374
  box-sizing: border-box;
304
375
  }
305
376
  }
@@ -317,6 +388,45 @@ textarea {
317
388
  margin: 5px 15px;
318
389
  }
319
390
  }
391
+
392
+ // Not an option: role="none" keeps Menu's hover layer off it. The text sits
393
+ // in the <li> itself, since Menu gives a bare span a pointer cursor.
394
+ > li.autocomplete-no-results {
395
+ display: flex;
396
+ align-items: center;
397
+ min-height: var(--md-comp-menu-item-container-height);
398
+ padding-inline: var(--md-comp-menu-item-leading-space)
399
+ var(--md-comp-menu-item-trailing-space);
400
+ color: var(--md-comp-menu-supporting-text-color);
401
+ cursor: default;
402
+ @include typescale("label-large");
403
+ }
404
+
405
+ // Menu lets a press on a disabled row fall through to the list, which takes
406
+ // focus from the field. The row takes the press so Autocomplete can cancel it.
407
+ > li[role="option"][aria-disabled="true"] {
408
+ pointer-events: auto;
409
+ cursor: default;
410
+ }
411
+
412
+ // FormSelect's listbox rule makes a group's wrapper flex, which would
413
+ // shrink the group to its widest row.
414
+ > li[role="none"] > ul[role="group"] {
415
+ flex: 1 1 auto;
416
+ }
417
+
418
+ // Menu's .label heading reaches direct rows only. The heading takes the
419
+ // press, as a disabled row does, so Autocomplete can cancel it.
420
+ > li > ul[role="group"] > li.autocomplete-group-label {
421
+ display: flex;
422
+ align-items: center;
423
+ min-height: rem(32px);
424
+ padding: 0 8px;
425
+ pointer-events: auto;
426
+ cursor: default;
427
+ color: var(--md-comp-menu-supporting-text-color);
428
+ @include typescale("label-large");
429
+ }
320
430
  }
321
431
 
322
432
  // Datepicker paints its formatted date over the native value with ::after.
@@ -328,17 +438,17 @@ textarea {
328
438
  // icons, which come before it. Raise them inside the field's own stacking
329
439
  // context, so they do not also rise over the docked search view or a
330
440
  // sticky header. A docked calendar in the field has to escape it.
331
- .field:has(> :is(.datepicker-date-input, .date-picker-date-input)) {
441
+ .field:has(> .datepicker-date-input) {
332
442
  &:not(:has(> .display-docked)) {
333
443
  isolation: isolate;
334
444
  }
335
445
 
336
- > :is(i, .prefix, .suffix) {
446
+ > :is(.prefix, .suffix) {
337
447
  z-index: 1;
338
448
  }
339
449
  }
340
450
 
341
- :is(.datepicker-date-input, .date-picker-date-input) {
451
+ .datepicker-date-input {
342
452
  position: relative;
343
453
  text-indent: -9999px;
344
454
 
@@ -351,11 +461,14 @@ textarea {
351
461
  text-indent: 0;
352
462
  }
353
463
 
354
- &:focus-visible {
464
+ // A focused date input edits its native fields, so show them. WebKit 27
465
+ // stopped matching :focus-visible on a date input, even after Tab, and
466
+ // Chromium already matches it on every focus, mouse included.
467
+ &:focus {
355
468
  text-indent: 0;
356
469
  }
357
470
 
358
- &:focus-visible:after {
471
+ &:focus:after {
359
472
  text-indent: -9999px;
360
473
  }
361
474
  }
@@ -397,8 +510,8 @@ textarea {
397
510
  // above, which would otherwise win on width, height and letter-spacing.
398
511
  input.otp:not(.browser-default) {
399
512
  --md-comp-otp-length: 6;
400
- --md-comp-otp-cell-width: 48px;
401
- --md-comp-otp-cell-height: 56px;
513
+ --md-comp-otp-cell-width: #{rem(48px)};
514
+ --md-comp-otp-cell-height: #{rem(56px)};
402
515
  --md-comp-otp-gap: 8px;
403
516
  --md-comp-otp-cell-color: var(--md-sys-color-surface-container-highest);
404
517
  --md-comp-otp-indicator-color: var(--md-sys-color-on-surface-variant);
@@ -425,7 +538,7 @@ input.otp:not(.browser-default) {
425
538
  // Digits read left to right in every script.
426
539
  direction: ltr;
427
540
  font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace;
428
- font-size: 24px;
541
+ font-size: rem(24px);
429
542
  font-variant-numeric: tabular-nums;
430
543
  letter-spacing: calc(var(--md-comp-otp-pitch) - 1ch);
431
544
  color: var(--md-sys-color-on-surface);
@@ -482,3 +595,54 @@ input.otp:not(.browser-default) {
482
595
  }
483
596
  }
484
597
  }
598
+
599
+ // Color input. The native picker stays; the control is drawn as a 40px round
600
+ // swatch of the chosen color with an outline, a 48px target and the shared
601
+ // focus ring. Each engine's swatch is a private pseudo-element in its own rule.
602
+ input[type="color"] {
603
+ --md-comp-color-input-size: #{rem(40px)};
604
+ --md-comp-color-input-outline-color: var(--md-sys-color-outline);
605
+
606
+ box-sizing: content-box;
607
+ inline-size: var(--md-comp-color-input-size);
608
+ block-size: var(--md-comp-color-input-size);
609
+ margin: 0;
610
+ padding: 4px;
611
+ border: 0;
612
+ border-radius: 50%;
613
+ background: transparent;
614
+ cursor: pointer;
615
+ vertical-align: middle;
616
+ appearance: none;
617
+ @include focus-visible;
618
+
619
+ &::-webkit-color-swatch-wrapper {
620
+ padding: 0;
621
+ }
622
+
623
+ &::-webkit-color-swatch {
624
+ border: 1px solid var(--md-comp-color-input-outline-color);
625
+ border-radius: 50%;
626
+ }
627
+
628
+ &::-moz-color-swatch {
629
+ border: 1px solid var(--md-comp-color-input-outline-color);
630
+ border-radius: 50%;
631
+ }
632
+
633
+ &:disabled {
634
+ cursor: default;
635
+ opacity: 0.38;
636
+ }
637
+ }
638
+
639
+ // CharacterCounter appends the counter to the input's parent, which need not
640
+ // be a .field, so this is not nested. Physical and swapped by :dir() like the
641
+ // field's icons, so a page that sets only CSS `direction` keeps it on the right.
642
+ .character-counter {
643
+ float: right;
644
+
645
+ &:dir(rtl) {
646
+ float: left;
647
+ }
648
+ }