@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
@@ -4,11 +4,16 @@
4
4
  // navigation bar.
5
5
  //
6
6
  // Anatomy is the HTML: a nav.navigation-rail. The first
7
- // button:not(.button) is the menu toggle. A .button child is the
8
- // optional FAB. Other <a>/<button> are destinations (leading <i>,
7
+ // button:not(.button) is the menu toggle, unless it opens a side
8
+ // panel. A .button child is the optional FAB. Other <a>/<button> are destinations (leading icon,
9
9
  // remaining text is the label, optional .badge). A heading is a
10
10
  // section header (expanded only). aria-current / .active is selected.
11
11
  //
12
+ // Side panel: a destination <button popovertarget> followed by its
13
+ // .navigation-rail-panel [popover]. The panel docks beside the rail at full
14
+ // height and holds links, headings and <details> groups. The browser owns
15
+ // click, light dismiss, Escape and the expanded state; JS opens it on hover.
16
+ //
12
17
  // .expanded widens the rail (icon+label on one row, extended FAB).
13
18
  // Below `small`, .expanded is modal (scrim). .modal forces that
14
19
  // overlay at every breakpoint. JS toggles .expanded from the menu
@@ -21,6 +26,7 @@
21
26
  // --md-comp-nav-rail-indicator-width 56px
22
27
  // --md-comp-nav-rail-indicator-height 32px / 56px expanded
23
28
  // --md-comp-nav-rail-fab-size 56px
29
+ // --md-comp-nav-rail-panel-width 256px
24
30
  //
25
31
  // Nest descendants inside this block.
26
32
 
@@ -29,15 +35,42 @@
29
35
  --md-comp-nav-rail-expanded-width: 280px;
30
36
  }
31
37
 
38
+ // Expanded rail as an overlay with a scrim.
39
+ @mixin _modal-rail {
40
+ position: fixed;
41
+ inset-block: 0;
42
+ inset-inline: 0 auto;
43
+ z-index: var(--expressive-z-modal-rail);
44
+ @include z-depth("1");
45
+
46
+ // A blurred rail would become the containing block of the fixed scrim
47
+ // below and clip it to the rail, so a modal rail stays solid.
48
+ background-color: var(--md-sys-color-surface-container);
49
+ backdrop-filter: none;
50
+
51
+ &::before {
52
+ content: "";
53
+ position: fixed;
54
+ inset: 0;
55
+ background-color: var(--md-comp-scrim-color);
56
+ z-index: -1;
57
+ }
58
+ }
59
+
32
60
  .navigation-rail {
33
61
  --md-comp-nav-rail-icon-size: 24px;
34
62
  --md-comp-nav-rail-indicator-width: 56px;
35
63
  --md-comp-nav-rail-indicator-height: 32px;
36
- --md-comp-nav-rail-indicator-shape: 16px;
64
+ --md-comp-nav-rail-indicator-shape: var(--md-sys-shape-corner-large);
37
65
  --md-comp-nav-rail-fab-size: 56px;
38
66
  --md-comp-nav-rail-active-indicator-color: var(--md-sys-color-secondary-container);
39
67
  --md-comp-nav-rail-active-color: var(--md-sys-color-on-secondary-container);
40
- --md-comp-nav-rail-duration: 250ms;
68
+ --md-comp-nav-rail-duration: var(--md-sys-motion-duration-medium1);
69
+ // Expanding and collapsing resize the rail, so they run on the default
70
+ // spatial spring and follow the motion="expressive" switch. The rail grows
71
+ // from its docked edge, so an overshoot only widens it for a moment.
72
+ --md-comp-nav-rail-motion: var(--md-sys-motion-spring-default-spatial);
73
+ --md-comp-nav-rail-motion-duration: var(--md-sys-motion-spring-default-spatial-duration);
41
74
 
42
75
  box-sizing: border-box;
43
76
  display: flex;
@@ -54,13 +87,13 @@
54
87
  overscroll-behavior: contain;
55
88
  background-color: var(--md-sys-color-surface-container);
56
89
  color: var(--md-sys-color-on-surface);
57
- transition: width var(--md-comp-nav-rail-duration) ease,
58
- min-width var(--md-comp-nav-rail-duration) ease,
59
- padding var(--md-comp-nav-rail-duration) ease;
90
+ transition: width var(--md-comp-nav-rail-motion-duration) var(--md-comp-nav-rail-motion),
91
+ min-width var(--md-comp-nav-rail-motion-duration) var(--md-comp-nav-rail-motion),
92
+ padding var(--md-comp-nav-rail-motion-duration) var(--md-comp-nav-rail-motion);
60
93
  @include glass(var(--md-sys-color-surface-container));
61
94
 
62
95
  // Menu toggle.
63
- > button:not(.button, .icon-button):first-child {
96
+ > button:not(.button, .icon-button, [popovertarget]):first-child {
64
97
  display: flex;
65
98
  flex: 0 0 auto;
66
99
  align-items: center;
@@ -84,12 +117,14 @@
84
117
  }
85
118
 
86
119
  &:hover {
87
- background-color: color-mix(in oklab, var(--md-sys-color-on-surface) state-opacity("hover"), transparent);
120
+ background-color: state-layer(var(--md-sys-color-on-surface), "hover");
88
121
  }
89
122
  }
90
123
 
91
124
  // Optional FAB. Collapsed: icon-only 56dp. Expanded: extended.
92
125
  > :is(a, button).button {
126
+ --md-comp-filled-button-icon-size: 24px;
127
+
93
128
  display: inline-flex;
94
129
  flex: 0 0 auto;
95
130
  align-items: center;
@@ -101,23 +136,19 @@
101
136
  margin: 4px 0 16px;
102
137
  padding: 0;
103
138
  overflow: hidden;
104
- border-radius: 16px;
139
+ border-radius: var(--md-sys-shape-corner-large);
105
140
  color: var(--md-sys-color-on-primary-container);
106
141
  background-color: var(--md-sys-color-primary-container);
107
142
  text-decoration: none;
108
143
 
109
144
  > :not(#{$icon}) {
110
- position: absolute;
111
- width: 1px;
112
- height: 1px;
113
- overflow: hidden;
114
- clip-path: inset(50%);
145
+ @include visually-hidden;
115
146
  }
116
147
  }
117
148
 
118
149
  // Destinations.
119
150
  > a:not(.button, .icon-button),
120
- > button:not(.button, .icon-button):not(:first-child) {
151
+ > button:not(.button, .icon-button):is(:not(:first-child), [popovertarget]) {
121
152
  position: relative;
122
153
  display: flex;
123
154
  flex: 0 0 auto;
@@ -127,6 +158,8 @@
127
158
  gap: 4px;
128
159
  box-sizing: border-box;
129
160
  width: 100%;
161
+ // A <button> destination would keep the default button's 40px height.
162
+ height: auto;
130
163
  margin: 0;
131
164
  padding: 6px 0;
132
165
  border: 0;
@@ -139,48 +172,9 @@
139
172
  @include typescale("label-medium");
140
173
  @include focus-visible;
141
174
 
142
- > #{$icon} {
143
- display: flex;
144
- flex-shrink: 0;
145
- align-items: center;
146
- justify-content: center;
147
- box-sizing: border-box;
148
- width: var(--md-comp-nav-rail-indicator-width);
149
- height: var(--md-comp-nav-rail-indicator-height);
150
- border-radius: var(--md-comp-nav-rail-indicator-shape);
151
- font-size: var(--md-comp-nav-rail-icon-size);
152
- color: inherit;
153
- transition: background-color var(--md-comp-nav-rail-duration) ease;
154
- }
155
-
156
- &:hover:not(.active, [aria-current]) > #{$icon} {
157
- background-color: color-mix(in oklab, var(--md-sys-color-on-surface) state-opacity("hover"), transparent);
158
- }
159
-
160
- &.active,
161
- &[aria-current] {
162
- color: var(--md-sys-color-on-surface);
163
-
164
- > #{$icon} {
165
- background-color: var(--md-comp-nav-rail-active-indicator-color);
166
- color: var(--md-comp-nav-rail-active-color);
167
- --md-icon-fill: 1;
168
- }
169
- }
170
-
171
175
  // Sibling badge (icon + label + .badge). Child-of-icon is handled
172
- // in _badges.scss. Sit on the upper trailing corner of the 24dp glyph.
173
- > .badge {
174
- position: absolute;
175
- z-index: 1;
176
- top: calc(6px + (var(--md-comp-nav-rail-indicator-height) - 24px) / 2);
177
- inset-inline-start: calc(50% + 12px);
178
- transform: translate(-50%, -50%);
179
-
180
- &:dir(rtl) {
181
- transform: translate(50%, -50%);
182
- }
183
- }
176
+ // in _badges.scss.
177
+ @include nav-destination("nav-rail", 6px, background-color var(--md-comp-nav-rail-duration) ease);
184
178
  }
185
179
 
186
180
  > :is(h1, h2, h3, h4, h5, h6) {
@@ -195,14 +189,14 @@
195
189
 
196
190
  &.expanded {
197
191
  --md-comp-nav-rail-indicator-height: 56px;
198
- --md-comp-nav-rail-indicator-shape: 28px;
192
+ --md-comp-nav-rail-indicator-shape: var(--md-sys-shape-corner-extra-large);
199
193
 
200
194
  align-items: stretch;
201
195
  width: clamp(220px, var(--md-comp-nav-rail-expanded-width), 360px);
202
196
  min-width: 220px;
203
197
  padding-inline: 16px;
204
198
 
205
- > button:not(.button, .icon-button):first-child {
199
+ > button:not(.button, .icon-button, [popovertarget]):first-child {
206
200
  justify-content: flex-start;
207
201
  width: auto;
208
202
  padding-inline: 16px;
@@ -219,6 +213,7 @@
219
213
  position: static;
220
214
  width: auto;
221
215
  height: auto;
216
+ margin: 0;
222
217
  overflow: visible;
223
218
  clip-path: none;
224
219
  @include typescale("label-large");
@@ -226,7 +221,7 @@
226
221
  }
227
222
 
228
223
  > a:not(.button, .icon-button),
229
- > button:not(.button, .icon-button):not(:first-child) {
224
+ > button:not(.button, .icon-button):is(:not(:first-child), [popovertarget]) {
230
225
  flex-direction: row;
231
226
  justify-content: flex-start;
232
227
  gap: 12px;
@@ -235,91 +230,146 @@
235
230
  border-radius: var(--md-comp-nav-rail-indicator-shape);
236
231
  text-align: start;
237
232
 
238
- > #{$icon} {
239
- width: var(--md-comp-nav-rail-icon-size);
240
- height: var(--md-comp-nav-rail-icon-size);
241
- border-radius: 0;
242
- }
243
-
244
- &:hover:not(.active, [aria-current]) {
245
- background-color: color-mix(in oklab, var(--md-sys-color-on-surface) state-opacity("hover"), transparent);
246
-
247
- > #{$icon} {
248
- background-color: transparent;
249
- }
250
- }
251
-
252
- &.active,
253
- &[aria-current] {
254
- background-color: var(--md-comp-nav-rail-active-indicator-color);
255
- color: var(--md-comp-nav-rail-active-color);
256
-
257
- > #{$icon} {
258
- background-color: transparent;
259
- color: inherit;
260
- }
261
- }
233
+ @include nav-destination-row("nav-rail");
262
234
 
263
235
  > .badge {
264
236
  top: calc((var(--md-comp-nav-rail-indicator-height) - 24px) / 2);
265
- left: auto;
266
237
  inset-inline-start: calc(16px + 24px);
267
- transform: translate(-50%, -50%);
268
-
269
- &:dir(rtl) {
270
- transform: translate(50%, -50%);
271
- }
272
238
  }
273
239
  }
274
240
 
275
241
  > :is(h1, h2, h3, h4, h5, h6) {
276
242
  display: block;
277
243
  }
244
+
245
+ > .navigation-rail-panel {
246
+ --_nav-rail-panel-offset: 16px;
247
+ }
278
248
  }
279
249
 
280
250
  &.expanded.modal {
281
- position: fixed;
282
- inset: 0 auto 0 0;
283
- z-index: 998;
284
- @include z-depth("1");
251
+ @include _modal-rail;
252
+ }
285
253
 
286
- // A blurred rail would become the containing block of the fixed scrim
287
- // below and clip it to the rail, so a modal rail stays solid.
288
- background-color: var(--md-sys-color-surface-container);
289
- backdrop-filter: none;
254
+ @include bp-down("medium") {
255
+ &.expanded:not(.modal) {
256
+ @include _modal-rail;
257
+ }
258
+ }
259
+ }
290
260
 
291
- &::before {
292
- content: "";
293
- position: fixed;
294
- inset: 0;
295
- background-color: var(--md-comp-scrim-color);
296
- z-index: -1;
261
+ // A destination whose panel is open keeps its hover state layer.
262
+ .navigation-rail:not(.expanded) > button:has(+ .navigation-rail-panel:popover-open):not(.active, [aria-current]) > #{$icon},
263
+ .navigation-rail.expanded > button:has(+ .navigation-rail-panel:popover-open):not(.active, [aria-current]) {
264
+ background-color: state-layer(var(--md-sys-color-on-surface), "hover");
265
+ }
266
+
267
+ // Docks against the trigger's inline end; the offset clears the rail's
268
+ // inline padding so the panel meets the rail's edge. The position area is
269
+ // the space after the trigger, so 100% is what is left of the window.
270
+ .navigation-rail-panel {
271
+ --_nav-rail-panel-offset: 8px;
272
+
273
+ box-sizing: border-box;
274
+ inline-size: var(--md-comp-nav-rail-panel-width, 256px);
275
+ max-inline-size: calc(100% - var(--_nav-rail-panel-offset));
276
+ block-size: auto;
277
+ inset: auto;
278
+ margin: 0;
279
+ margin-inline-start: var(--_nav-rail-panel-offset);
280
+ overflow: auto;
281
+ overscroll-behavior: contain;
282
+ border: 0;
283
+ border-start-end-radius: var(--md-sys-shape-corner-large);
284
+ border-end-end-radius: var(--md-sys-shape-corner-large);
285
+ background-color: var(--md-sys-color-surface-container);
286
+ color: var(--md-sys-color-on-surface-variant);
287
+ @include z-depth("1");
288
+
289
+ position-area: span-all inline-end;
290
+ align-self: stretch;
291
+
292
+ // Here, not on the base rule, so the global [popover] reset in _menu.scss,
293
+ // which loads later, cannot clear it.
294
+ &:popover-open {
295
+ display: flex;
296
+ flex-direction: column;
297
+ padding: 12px;
298
+ }
299
+
300
+ :is(a, summary) {
301
+ display: flex;
302
+ flex: none;
303
+ align-items: center;
304
+ gap: 12px;
305
+ box-sizing: border-box;
306
+ min-block-size: 48px;
307
+ padding: 0 16px;
308
+ border-radius: 24px;
309
+ color: inherit;
310
+ text-decoration: none;
311
+ cursor: pointer;
312
+ @include typescale("label-large");
313
+ @include focus-visible;
314
+
315
+ &:hover:not([aria-current]) {
316
+ background-color: state-layer(var(--md-sys-color-on-surface), "hover");
317
+ }
318
+
319
+ &[aria-current] {
320
+ background-color: var(--md-comp-nav-rail-active-indicator-color);
321
+ color: var(--md-comp-nav-rail-active-color);
322
+ @include forced-colors-selected;
297
323
  }
298
324
  }
299
325
 
300
- @include bp-down("medium") {
301
- &.expanded:not(.modal) {
302
- position: fixed;
303
- inset: 0 auto 0 0;
304
- z-index: 998;
305
- @include z-depth("1");
306
-
307
- background-color: var(--md-sys-color-surface-container);
308
- backdrop-filter: none;
309
-
310
- &::before {
311
- content: "";
312
- position: fixed;
313
- inset: 0;
314
- background-color: var(--md-comp-scrim-color);
315
- z-index: -1;
316
- }
326
+ summary {
327
+ list-style: none;
328
+
329
+ &::-webkit-details-marker {
330
+ display: none;
331
+ }
332
+
333
+ &::after {
334
+ content: "";
335
+ flex: none;
336
+ inline-size: 18px;
337
+ block-size: 18px;
338
+ margin-inline-start: auto;
339
+ background-color: currentColor;
340
+ mask: $caret-down center / 18px no-repeat;
341
+ transition: transform var(--md-sys-motion-duration-short3) ease-out;
317
342
  }
318
343
  }
344
+
345
+ details[open] > summary::after {
346
+ transform: rotate(180deg);
347
+ }
348
+
349
+ details > a {
350
+ padding-inline-start: 28px;
351
+ }
352
+
353
+ > :is(h1, h2, h3, h4, h5, h6) {
354
+ margin: 0;
355
+ padding: 16px 16px 8px;
356
+ @include typescale("title-small");
357
+ }
358
+
359
+ @media (forced-colors: active) {
360
+ border: 1px solid CanvasText;
361
+ }
319
362
  }
320
363
 
321
364
  @media (prefers-reduced-motion: reduce) {
365
+ .navigation-rail-panel summary::after,
322
366
  .navigation-rail {
323
367
  transition: none;
324
368
  }
325
369
  }
370
+
371
+ // Navigation does nothing on paper. Important so a size or state rule that sets
372
+ // `display` cannot bring it back; see base/_print.scss for the page itself.
373
+ @media print {
374
+ .navigation-rail { display: none !important; }
375
+ }
@@ -0,0 +1,192 @@
1
+ @use "../abstracts" as *;
2
+
3
+ // Organization chart. A reporting line drawn top down: a <ul class="org-chart">
4
+ // of nested lists, one <li> per person. A person with reports holds a
5
+ // <details open>: its <summary class="org-chart-node"> is the card and its
6
+ // nested <ul> the reports, so the browser collapses a team. A person without
7
+ // reports holds a <div class="org-chart-node">, or an <a> to a profile.
8
+ //
9
+ // A node stacks an optional .org-chart-role band, an .avatar and an
10
+ // .org-chart-name. The nested lists carry the hierarchy to assistive
11
+ // technology; the connector lines are drawn with pseudo-elements and say
12
+ // nothing. Like .tree it is disclosures and links, not role="tree".
13
+ //
14
+ // Siblings sit side by side, so a wide chart scrolls sideways inside the
15
+ // root list instead of the page. Right-to-left pages mirror the order.
16
+ //
17
+ // Tokens:
18
+ // --md-comp-org-chart-line-color outline-variant
19
+ // --md-comp-org-chart-line-length 24px; each vertical connector
20
+ // --md-comp-org-chart-gap 16px; between siblings
21
+ // --md-comp-org-chart-node-container-color surface-container-high
22
+ // --md-comp-org-chart-node-shape 12px
23
+ // --md-comp-org-chart-role-container-color primary-container
24
+ // --md-comp-org-chart-role-color on-primary-container
25
+
26
+ .org-chart {
27
+ --md-comp-org-chart-line-color: var(--md-sys-color-outline-variant);
28
+ --md-comp-org-chart-line-length: 24px;
29
+ --md-comp-org-chart-gap: 16px;
30
+ --md-comp-org-chart-node-container-color: var(--md-sys-color-surface-container-high);
31
+ --md-comp-org-chart-node-shape: var(--md-sys-shape-corner-medium);
32
+ --md-comp-org-chart-role-container-color: var(--md-sys-color-primary-container);
33
+ --md-comp-org-chart-role-color: var(--md-sys-color-on-primary-container);
34
+ --_line: 1px solid var(--md-comp-org-chart-line-color);
35
+
36
+ display: flex;
37
+ // `safe` keeps an overflowing chart's start edge reachable by scrolling.
38
+ justify-content: safe center;
39
+ margin: $element-top-margin 0 $element-bottom-margin;
40
+ padding: 0 0 8px;
41
+ overflow-x: auto;
42
+ list-style: none;
43
+
44
+ ul {
45
+ position: relative;
46
+ display: flex;
47
+ justify-content: center;
48
+ margin: 0;
49
+ padding: var(--md-comp-org-chart-line-length) 0 0;
50
+ list-style: none;
51
+
52
+ // The drop from the manager down to the bar over the reports.
53
+ &::before {
54
+ content: "";
55
+ position: absolute;
56
+ inset-block-start: 0;
57
+ inset-inline-start: 50%;
58
+ block-size: var(--md-comp-org-chart-line-length);
59
+ border-inline-start: var(--_line);
60
+ }
61
+ }
62
+
63
+ li {
64
+ position: relative;
65
+ display: flex;
66
+ flex: none;
67
+ flex-direction: column;
68
+ align-items: center;
69
+ margin: 0;
70
+ padding-inline: calc(var(--md-comp-org-chart-gap) / 2);
71
+ }
72
+
73
+ // Each report draws half the bar on either side of its centre and a drop
74
+ // from the bar to its card. The outer halves of the first and last
75
+ // report are left off, so the bar spans exactly from end card to end card.
76
+ ul > li {
77
+ padding-block-start: var(--md-comp-org-chart-line-length);
78
+
79
+ &::before,
80
+ &::after {
81
+ content: "";
82
+ position: absolute;
83
+ inset-block-start: 0;
84
+ inline-size: 50%;
85
+ block-size: var(--md-comp-org-chart-line-length);
86
+ border-block-start: var(--_line);
87
+ }
88
+
89
+ &::before {
90
+ inset-inline-end: 50%;
91
+ }
92
+
93
+ &::after {
94
+ inset-inline-start: 50%;
95
+ border-inline-start: var(--_line);
96
+ }
97
+
98
+ &:first-child::before,
99
+ &:last-child::after {
100
+ border-block-start: 0;
101
+ }
102
+ }
103
+ }
104
+
105
+ .org-chart-node {
106
+ box-sizing: border-box;
107
+ display: flex;
108
+ flex-direction: column;
109
+ align-items: center;
110
+ gap: 8px;
111
+ inline-size: fit-content;
112
+ min-inline-size: rem(128px);
113
+ max-inline-size: rem(192px);
114
+ margin-inline: auto;
115
+ padding: 16px;
116
+ border-radius: var(--md-comp-org-chart-node-shape);
117
+ overflow: hidden;
118
+ background-color: var(--md-comp-org-chart-node-container-color);
119
+ color: var(--md-sys-color-on-surface);
120
+ text-align: center;
121
+ text-decoration: none;
122
+ overflow-wrap: anywhere;
123
+ @include typescale("body-medium");
124
+
125
+ &:is(a, summary) {
126
+ cursor: pointer;
127
+ @include focus-visible;
128
+
129
+ &:hover {
130
+ background-image: linear-gradient(
131
+ state-layer(var(--md-sys-color-on-surface), "hover") 0 0
132
+ );
133
+ }
134
+ }
135
+
136
+ // A summary would otherwise show its own triangle; the card draws a
137
+ // caret under the name that turns over once the team is open.
138
+ &:is(summary) {
139
+ list-style: none;
140
+ user-select: none;
141
+
142
+ &::-webkit-details-marker {
143
+ display: none;
144
+ }
145
+
146
+ &::after {
147
+ content: "";
148
+ flex: none;
149
+ inline-size: rem(24px);
150
+ block-size: rem(24px);
151
+ margin-block: -8px;
152
+ background-color: currentColor;
153
+ mask: $caret-down center / 100% no-repeat;
154
+ transition: rotate var(--md-sys-motion-duration-short3) ease-out;
155
+
156
+ @media (prefers-reduced-motion: reduce) {
157
+ transition: none;
158
+ }
159
+
160
+ @include forced-colors-fill;
161
+ }
162
+ }
163
+
164
+ [open] > &::after {
165
+ rotate: 180deg;
166
+ }
167
+ }
168
+
169
+ // A band across the top of the card, so it must come first in the node.
170
+ .org-chart-role {
171
+ align-self: stretch;
172
+ margin: -16px -16px 0;
173
+ padding: 8px 16px;
174
+ background-color: var(--md-comp-org-chart-role-container-color);
175
+ color: var(--md-comp-org-chart-role-color);
176
+ @include typescale("label-large");
177
+ }
178
+
179
+ .org-chart-name {
180
+ @include typescale("title-small");
181
+ }
182
+
183
+ // Forced colors drop the fills, so a border keeps each card and the band.
184
+ @media (forced-colors: active) {
185
+ .org-chart-node {
186
+ border: 1px solid CanvasText;
187
+ }
188
+
189
+ .org-chart-role {
190
+ border-block-end: 1px solid CanvasText;
191
+ }
192
+ }
@@ -17,7 +17,10 @@
17
17
  // Unfilled by default (dashed hairline). .filled uses surface-container.
18
18
  // There is no JavaScript.
19
19
 
20
- footer:not(:has(> .navigation-bar:only-child)) {
20
+ // Any footer except one wrapping a lone navigation bar.
21
+ $_footer: "footer:not(:has(> .navigation-bar:only-child))";
22
+
23
+ #{$_footer} {
21
24
  --md-comp-footer-padding-block: 3rem;
22
25
  --md-comp-footer-padding-inline: 1rem;
23
26
  --md-comp-footer-gap: 2rem;
@@ -54,16 +57,16 @@ footer:not(:has(> .navigation-bar:only-child)) {
54
57
  }
55
58
  }
56
59
 
57
- footer:not(:has(> nav:only-child)).filled,
58
- footer:not(:has(> nav:only-child)).surface {
60
+ #{$_footer}.filled,
61
+ #{$_footer}.surface {
59
62
  background-color: var(--md-sys-color-surface-container);
60
63
  border-top: 1px solid var(--md-sys-color-outline-variant);
61
64
  }
62
65
 
63
66
  // Columns: direct <nav> children. A wrapping .container is the grid
64
67
  // when the author uses one. Legacy .row still spans the full measure.
65
- footer:not(:has(> nav:only-child)) > .container,
66
- footer:not(:has(> nav:only-child)):not(:has(> .container)) {
68
+ #{$_footer} > .container,
69
+ #{$_footer}:not(:has(> .container)) {
67
70
  display: grid;
68
71
  gap: var(--md-comp-footer-gap);
69
72
  grid-template-columns: 1fr;
@@ -85,14 +88,14 @@ footer:not(:has(> nav:only-child)):not(:has(> .container)) {
85
88
  }
86
89
  }
87
90
 
88
- footer:not(:has(> nav:only-child)) > .container > .row,
89
- footer:not(:has(> nav:only-child)) > .row {
91
+ #{$_footer} > .container > .row,
92
+ #{$_footer} > .row {
90
93
  grid-column: 1 / -1;
91
94
  }
92
95
 
93
96
  // A column with no links is a <section>, not a <nav> - see rule 4. Both are
94
97
  // columns to look at.
95
- footer:not(:has(> nav:only-child)) :is(nav, section) {
98
+ #{$_footer} :is(nav, section) {
96
99
  display: flex;
97
100
  flex-direction: column;
98
101
  align-items: flex-start;
@@ -100,8 +103,8 @@ footer:not(:has(> nav:only-child)) :is(nav, section) {
100
103
  min-width: 0;
101
104
  }
102
105
 
103
- footer:not(:has(> nav:only-child)) nav > a:not(.button, .icon-button, .circle, .extra),
104
- footer:not(:has(> nav:only-child)) ul a:not(.button, .icon-button, .circle, .extra) {
106
+ #{$_footer} nav > a:not(.button, .icon-button, .circle, .extra),
107
+ #{$_footer} ul a:not(.button, .icon-button, .circle, .extra) {
105
108
  display: inline-flex;
106
109
  align-items: center;
107
110
  box-sizing: border-box;
@@ -112,15 +115,15 @@ footer:not(:has(> nav:only-child)) ul a:not(.button, .icon-button, .circle, .ext
112
115
  @include typescale("label-large");
113
116
 
114
117
  &:hover {
115
- background-color: color-mix(in oklab, var(--md-sys-color-on-surface) state-opacity("hover"), transparent);
118
+ background-color: state-layer(var(--md-sys-color-on-surface), "hover");
116
119
  }
117
120
  }
118
121
 
119
122
  // The legal bar. `.container` is a supported columns wrapper - the rule above
120
123
  // already accounts for it - so the bar has to be found through it too, or a
121
124
  // footer written the documented way gets an unstyled copyright row.
122
- footer:not(:has(> nav:only-child)) > small:last-child,
123
- footer:not(:has(> nav:only-child)) > .container > small:last-child {
125
+ #{$_footer} > small:last-child,
126
+ #{$_footer} > .container > small:last-child {
124
127
  display: flex;
125
128
  flex-wrap: wrap;
126
129
  align-items: center;