@expressivecss/expressive 0.13.1 → 0.15.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 (257) hide show
  1. package/CHANGELOG.md +196 -1
  2. package/README.md +2 -1
  3. package/dist/css/expressive.css +432 -311
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/js/chunks/{chunk-DTKR54I6.mjs → chunk-33QVDDGR.mjs} +3 -3
  8. package/dist/js/chunks/{chunk-SPETGK25.mjs → chunk-45FER6RI.mjs} +5 -5
  9. package/dist/js/chunks/chunk-45FER6RI.mjs.map +7 -0
  10. package/dist/js/chunks/{chunk-WJXDBPXQ.mjs → chunk-5CEAOLUA.mjs} +17 -20
  11. package/dist/js/chunks/chunk-5CEAOLUA.mjs.map +7 -0
  12. package/dist/js/chunks/{chunk-CKQP6P76.mjs → chunk-6VATUZC6.mjs} +12 -7
  13. package/dist/js/chunks/chunk-6VATUZC6.mjs.map +7 -0
  14. package/dist/js/chunks/{chunk-QDAL4IYN.mjs → chunk-74MXKKLN.mjs} +2 -2
  15. package/dist/js/chunks/{chunk-QDAL4IYN.mjs.map → chunk-74MXKKLN.mjs.map} +2 -2
  16. package/dist/js/chunks/{chunk-DLWYKFEI.mjs → chunk-AIURVCG6.mjs} +3 -3
  17. package/dist/js/chunks/{chunk-NNYP33NB.mjs → chunk-BGZLF6JZ.mjs} +19 -18
  18. package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +7 -0
  19. package/dist/js/chunks/chunk-C6CHEWYP.mjs +154 -0
  20. package/dist/js/chunks/chunk-C6CHEWYP.mjs.map +7 -0
  21. package/dist/js/chunks/{chunk-GVGT6MIU.mjs → chunk-CK2XCICY.mjs} +2 -2
  22. package/dist/js/chunks/{chunk-XGHORT7J.mjs → chunk-CXXM2L4F.mjs} +8 -9
  23. package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +7 -0
  24. package/dist/js/chunks/{chunk-QVVEWBOF.mjs → chunk-DXGRXYYL.mjs} +25 -37
  25. package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +7 -0
  26. package/dist/js/chunks/{chunk-QV2JAWIZ.mjs → chunk-FM5CZOUB.mjs} +5 -8
  27. package/dist/js/chunks/{chunk-QV2JAWIZ.mjs.map → chunk-FM5CZOUB.mjs.map} +2 -2
  28. package/dist/js/chunks/{chunk-PLYXLSH3.mjs → chunk-GJL6GCIU.mjs} +46 -58
  29. package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +7 -0
  30. package/dist/js/chunks/chunk-K3HZMFMD.mjs +135 -0
  31. package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +7 -0
  32. package/dist/js/chunks/chunk-KHXZ2A4K.mjs +395 -0
  33. package/dist/js/chunks/chunk-KHXZ2A4K.mjs.map +7 -0
  34. package/dist/js/chunks/chunk-KQACNQ22.mjs +7 -0
  35. package/dist/js/chunks/{chunk-4PWAPV6F.mjs.map → chunk-KQACNQ22.mjs.map} +1 -1
  36. package/dist/js/chunks/chunk-KUFHW3DS.mjs +214 -0
  37. package/dist/js/chunks/chunk-KUFHW3DS.mjs.map +7 -0
  38. package/dist/js/chunks/{chunk-LWBQIX5J.mjs → chunk-KVJAVDBC.mjs} +46 -57
  39. package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +7 -0
  40. package/dist/js/chunks/{chunk-YDCS5S3J.mjs → chunk-L27Q6ZMI.mjs} +2 -2
  41. package/dist/js/chunks/{chunk-CCWDV5CR.mjs → chunk-LQWUDNHZ.mjs} +3 -3
  42. package/dist/js/chunks/{chunk-6OMRGML6.mjs → chunk-M372EDXD.mjs} +7 -13
  43. package/dist/js/chunks/{chunk-6OMRGML6.mjs.map → chunk-M372EDXD.mjs.map} +2 -2
  44. package/dist/js/chunks/{chunk-EC63CHXU.mjs → chunk-M3MURWMB.mjs} +20 -16
  45. package/dist/js/chunks/chunk-M3MURWMB.mjs.map +7 -0
  46. package/dist/js/chunks/{chunk-U2OTHOTI.mjs → chunk-NUHMOAOY.mjs} +19 -33
  47. package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +7 -0
  48. package/dist/js/chunks/{chunk-P3G3QHII.mjs → chunk-OWG3LMUL.mjs} +17 -14
  49. package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +7 -0
  50. package/dist/js/chunks/{chunk-LTWPGFBR.mjs → chunk-PD6HYHAE.mjs} +4 -15
  51. package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +7 -0
  52. package/dist/js/chunks/{chunk-PIJ2TAR3.mjs → chunk-PDG64UHF.mjs} +3 -3
  53. package/dist/js/chunks/{chunk-IFXVDDDH.mjs → chunk-PO3AXVR3.mjs} +38 -64
  54. package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +7 -0
  55. package/dist/js/chunks/{chunk-QKWPQK5N.mjs → chunk-QYGK36OG.mjs} +16 -14
  56. package/dist/js/chunks/chunk-QYGK36OG.mjs.map +7 -0
  57. package/dist/js/chunks/{chunk-UNEMYWEW.mjs → chunk-SFI2U4YW.mjs} +28 -44
  58. package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +7 -0
  59. package/dist/js/chunks/{chunk-VTLBW7QS.mjs → chunk-SMY7GJSS.mjs} +3 -3
  60. package/dist/js/chunks/{chunk-O5XPWXIQ.mjs → chunk-TCCA2HDG.mjs} +39 -31
  61. package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +7 -0
  62. package/dist/js/chunks/{chunk-UBLRRJ7N.mjs → chunk-TSZYSW7F.mjs} +4 -4
  63. package/dist/js/chunks/{chunk-UBLRRJ7N.mjs.map → chunk-TSZYSW7F.mjs.map} +2 -2
  64. package/dist/js/chunks/{chunk-UEZUJQ66.mjs → chunk-UAZSDUVP.mjs} +3 -4
  65. package/dist/js/chunks/{chunk-UEZUJQ66.mjs.map → chunk-UAZSDUVP.mjs.map} +2 -2
  66. package/dist/js/chunks/{chunk-6N2XAEFK.mjs → chunk-UBRZZWRA.mjs} +10 -8
  67. package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +7 -0
  68. package/dist/js/chunks/{chunk-3VOK6J7U.mjs → chunk-UCOE7ZDL.mjs} +47 -45
  69. package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +7 -0
  70. package/dist/js/chunks/{chunk-K4CJCRGE.mjs → chunk-UETTGDLI.mjs} +3 -3
  71. package/dist/js/chunks/{chunk-RHRQKTTX.mjs → chunk-UNCRDLP6.mjs} +6 -9
  72. package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +7 -0
  73. package/dist/js/chunks/{chunk-LNCCYGPC.mjs → chunk-VGNYF6FB.mjs} +8 -10
  74. package/dist/js/chunks/chunk-VGNYF6FB.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-UAEAQBRC.mjs → chunk-VGPGBNGL.mjs} +4 -12
  76. package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +7 -0
  77. package/dist/js/chunks/chunk-VKAUVTQY.mjs +1 -0
  78. package/dist/js/chunks/{chunk-HKT2S7VM.mjs → chunk-VM4FTS7L.mjs} +3 -3
  79. package/dist/js/chunks/{chunk-55IA2XUC.mjs → chunk-WDK4T63U.mjs} +8 -11
  80. package/dist/js/chunks/chunk-WDK4T63U.mjs.map +7 -0
  81. package/dist/js/chunks/{chunk-XH6BEEMY.mjs → chunk-WOCCTVUF.mjs} +51 -39
  82. package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +7 -0
  83. package/dist/js/chunks/{chunk-GZWPXXY6.mjs → chunk-WQYN5L4E.mjs} +14 -16
  84. package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +7 -0
  85. package/dist/js/chunks/{chunk-6WLSDZ4O.mjs → chunk-X4ISMKE2.mjs} +2 -2
  86. package/dist/js/chunks/{chunk-3DHK5CZU.mjs → chunk-XAEAEHIX.mjs} +6 -8
  87. package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +7 -0
  88. package/dist/js/chunks/{chunk-3CLXLPYS.mjs → chunk-ZX6M7SWO.mjs} +43 -29
  89. package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +7 -0
  90. package/dist/js/expressive.cjs +1337 -572
  91. package/dist/js/expressive.cjs.map +4 -4
  92. package/dist/js/expressive.js +1337 -572
  93. package/dist/js/expressive.js.map +4 -4
  94. package/dist/js/expressive.min.js +10 -13
  95. package/dist/js/expressive.min.js.map +4 -4
  96. package/dist/js/expressive.mjs +71 -55
  97. package/dist/js/expressive.mjs.map +1 -1
  98. package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
  99. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  100. package/dist/js/internal/behaviors/forms.mjs +2 -2
  101. package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
  102. package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
  103. package/dist/js/internal/components/appBar.mjs +2 -2
  104. package/dist/js/internal/components/autocomplete.mjs +4 -4
  105. package/dist/js/internal/components/barChart.mjs +4 -4
  106. package/dist/js/internal/components/buttonGroup.mjs +2 -2
  107. package/dist/js/internal/components/buttons.mjs +3 -3
  108. package/dist/js/internal/components/cards.mjs +3 -3
  109. package/dist/js/internal/components/carousel.mjs +3 -3
  110. package/dist/js/internal/components/characterCounter.mjs +2 -2
  111. package/dist/js/internal/components/chips.mjs +5 -5
  112. package/dist/js/internal/components/columnChart.mjs +3 -3
  113. package/dist/js/internal/components/commandPalette.mjs +3 -3
  114. package/dist/js/internal/components/confetti.mjs +8 -0
  115. package/dist/js/internal/components/confetti.mjs.map +7 -0
  116. package/dist/js/internal/components/datepicker.mjs +6 -6
  117. package/dist/js/internal/components/expandingCard.mjs +3 -3
  118. package/dist/js/internal/components/heatmapChart.mjs +3 -3
  119. package/dist/js/internal/components/index.mjs +64 -48
  120. package/dist/js/internal/components/keypad.mjs +9 -0
  121. package/dist/js/internal/components/keypad.mjs.map +7 -0
  122. package/dist/js/internal/components/lightbox.mjs +3 -3
  123. package/dist/js/internal/components/lineChart.mjs +6 -2
  124. package/dist/js/internal/components/mapView.mjs +9 -0
  125. package/dist/js/internal/components/mapView.mjs.map +7 -0
  126. package/dist/js/internal/components/menu.mjs +3 -3
  127. package/dist/js/internal/components/messageScroller.mjs +3 -3
  128. package/dist/js/internal/components/mixedChart.mjs +4 -4
  129. package/dist/js/internal/components/navigationRail.mjs +2 -2
  130. package/dist/js/internal/components/particles.mjs +8 -0
  131. package/dist/js/internal/components/particles.mjs.map +7 -0
  132. package/dist/js/internal/components/pieChart.mjs +3 -3
  133. package/dist/js/internal/components/questionnaire.mjs +3 -3
  134. package/dist/js/internal/components/radarChart.mjs +3 -3
  135. package/dist/js/internal/components/radialChart.mjs +3 -3
  136. package/dist/js/internal/components/registry.mjs +41 -37
  137. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  138. package/dist/js/internal/components/scrollspy.mjs +2 -2
  139. package/dist/js/internal/components/select.mjs +4 -4
  140. package/dist/js/internal/components/slider.mjs +3 -3
  141. package/dist/js/internal/components/snackbar.mjs +2 -2
  142. package/dist/js/internal/components/tabs.mjs +4 -4
  143. package/dist/js/internal/components/timepicker.mjs +4 -4
  144. package/dist/js/internal/components/tooltip.mjs +3 -3
  145. package/dist/js/internal/core/component.mjs +1 -1
  146. package/dist/js/internal/core/utils.mjs +1 -1
  147. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  148. package/dist/js/modular.mjs +71 -55
  149. package/dist/types/behaviors/forms.d.ts +5 -0
  150. package/dist/types/components/autocomplete.d.ts +1 -0
  151. package/dist/types/components/carousel.d.ts +2 -0
  152. package/dist/types/components/confetti.d.ts +103 -0
  153. package/dist/types/components/datepicker.d.ts +5 -4
  154. package/dist/types/components/expandingCard.d.ts +2 -0
  155. package/dist/types/components/index.d.ts +4 -0
  156. package/dist/types/components/keypad.d.ts +34 -0
  157. package/dist/types/components/lightbox.d.ts +3 -5
  158. package/dist/types/components/lineChart.d.ts +4 -0
  159. package/dist/types/components/mapView.d.ts +151 -0
  160. package/dist/types/components/menu.d.ts +1 -0
  161. package/dist/types/components/particles.d.ts +72 -0
  162. package/dist/types/components/pieChart.d.ts +3 -0
  163. package/dist/types/components/radialChart.d.ts +0 -1
  164. package/dist/types/components/registry.d.ts +12 -0
  165. package/dist/types/components/slider.d.ts +3 -1
  166. package/dist/types/components/snackbar.d.ts +3 -0
  167. package/dist/types/components/tabs.d.ts +5 -1
  168. package/dist/types/components/timepicker.d.ts +2 -0
  169. package/dist/types/modular.d.ts +1 -1
  170. package/dist/types/plugins/dockedDisplayPlugin.d.ts +4 -3
  171. package/package.json +2 -1
  172. package/src/sass/abstracts/_breakpoints.scss +0 -1
  173. package/src/sass/abstracts/_elevation.scss +1 -1
  174. package/src/sass/abstracts/_mixins.scss +20 -60
  175. package/src/sass/abstracts/_variables.scss +10 -0
  176. package/src/sass/base/_global.scss +3 -12
  177. package/src/sass/base/_index.scss +1 -1
  178. package/src/sass/components/_badges.scss +1 -8
  179. package/src/sass/components/_bar-chart.scss +1 -1
  180. package/src/sass/components/_button-groups.scss +31 -66
  181. package/src/sass/components/_buttons.scss +1 -1
  182. package/src/sass/components/_cards.scss +6 -25
  183. package/src/sass/components/_carousel.scss +16 -55
  184. package/src/sass/components/_chips.scss +0 -6
  185. package/src/sass/components/_column-chart.scss +1 -1
  186. package/src/sass/components/_confetti.scss +14 -0
  187. package/src/sass/components/_data-table.scss +1 -3
  188. package/src/sass/components/_datepicker.scss +3 -22
  189. package/src/sass/components/_dialog.scss +1 -4
  190. package/src/sass/components/_heatmap-chart.scss +2 -2
  191. package/src/sass/components/_icon-buttons.scss +0 -1
  192. package/src/sass/components/_index.scss +4 -0
  193. package/src/sass/components/_keypad.scss +162 -0
  194. package/src/sass/components/_lightbox.scss +3 -8
  195. package/src/sass/components/_map.scss +188 -0
  196. package/src/sass/components/_menu.scss +31 -74
  197. package/src/sass/components/_mixed-chart.scss +1 -1
  198. package/src/sass/components/_navbar.scss +9 -45
  199. package/src/sass/components/_navigation-rail.scss +23 -32
  200. package/src/sass/components/_page-footer.scss +15 -12
  201. package/src/sass/components/_panes.scss +2 -6
  202. package/src/sass/components/_particles.scss +14 -0
  203. package/src/sass/components/_progress.scss +6 -4
  204. package/src/sass/components/_side-sheet.scss +1 -4
  205. package/src/sass/components/_stepper.scss +0 -4
  206. package/src/sass/components/_table_of_contents.scss +3 -1
  207. package/src/sass/components/_timepicker.scss +4 -36
  208. package/src/sass/components/_toolbar.scss +0 -4
  209. package/src/sass/components/forms/_checkboxes.scss +44 -67
  210. package/src/sass/components/forms/_fieldset.scss +3 -3
  211. package/src/sass/components/forms/_file-input.scss +0 -1
  212. package/src/sass/components/forms/_radio-buttons.scss +10 -36
  213. package/src/sass/components/forms/_select.scss +0 -3
  214. package/src/sass/components/forms/_slider.scss +72 -259
  215. package/src/sass/tokens/_state.scss +2 -2
  216. package/src/sass/tokens/_theme.scss +1 -1
  217. package/src/sass/utilities/_colors.scss +6 -1
  218. package/src/sass/utilities/_index.scss +1 -1
  219. package/dist/js/chunks/chunk-3CLXLPYS.mjs.map +0 -7
  220. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +0 -7
  221. package/dist/js/chunks/chunk-3VOK6J7U.mjs.map +0 -7
  222. package/dist/js/chunks/chunk-4PWAPV6F.mjs +0 -7
  223. package/dist/js/chunks/chunk-55IA2XUC.mjs.map +0 -7
  224. package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
  225. package/dist/js/chunks/chunk-CKQP6P76.mjs.map +0 -7
  226. package/dist/js/chunks/chunk-EC63CHXU.mjs.map +0 -7
  227. package/dist/js/chunks/chunk-GZWPXXY6.mjs.map +0 -7
  228. package/dist/js/chunks/chunk-IFXVDDDH.mjs.map +0 -7
  229. package/dist/js/chunks/chunk-LNCCYGPC.mjs.map +0 -7
  230. package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
  231. package/dist/js/chunks/chunk-LWBQIX5J.mjs.map +0 -7
  232. package/dist/js/chunks/chunk-NNYP33NB.mjs.map +0 -7
  233. package/dist/js/chunks/chunk-NQLC3YMW.mjs +0 -1
  234. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
  235. package/dist/js/chunks/chunk-P3G3QHII.mjs.map +0 -7
  236. package/dist/js/chunks/chunk-PLYXLSH3.mjs.map +0 -7
  237. package/dist/js/chunks/chunk-QKWPQK5N.mjs.map +0 -7
  238. package/dist/js/chunks/chunk-QVVEWBOF.mjs.map +0 -7
  239. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
  240. package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
  241. package/dist/js/chunks/chunk-U2OTHOTI.mjs.map +0 -7
  242. package/dist/js/chunks/chunk-UAEAQBRC.mjs.map +0 -7
  243. package/dist/js/chunks/chunk-UNEMYWEW.mjs.map +0 -7
  244. package/dist/js/chunks/chunk-WJXDBPXQ.mjs.map +0 -7
  245. package/dist/js/chunks/chunk-XGHORT7J.mjs.map +0 -7
  246. package/dist/js/chunks/chunk-XH6BEEMY.mjs.map +0 -7
  247. /package/dist/js/chunks/{chunk-DTKR54I6.mjs.map → chunk-33QVDDGR.mjs.map} +0 -0
  248. /package/dist/js/chunks/{chunk-DLWYKFEI.mjs.map → chunk-AIURVCG6.mjs.map} +0 -0
  249. /package/dist/js/chunks/{chunk-GVGT6MIU.mjs.map → chunk-CK2XCICY.mjs.map} +0 -0
  250. /package/dist/js/chunks/{chunk-YDCS5S3J.mjs.map → chunk-L27Q6ZMI.mjs.map} +0 -0
  251. /package/dist/js/chunks/{chunk-CCWDV5CR.mjs.map → chunk-LQWUDNHZ.mjs.map} +0 -0
  252. /package/dist/js/chunks/{chunk-PIJ2TAR3.mjs.map → chunk-PDG64UHF.mjs.map} +0 -0
  253. /package/dist/js/chunks/{chunk-VTLBW7QS.mjs.map → chunk-SMY7GJSS.mjs.map} +0 -0
  254. /package/dist/js/chunks/{chunk-K4CJCRGE.mjs.map → chunk-UETTGDLI.mjs.map} +0 -0
  255. /package/dist/js/chunks/{chunk-NQLC3YMW.mjs.map → chunk-VKAUVTQY.mjs.map} +0 -0
  256. /package/dist/js/chunks/{chunk-HKT2S7VM.mjs.map → chunk-VM4FTS7L.mjs.map} +0 -0
  257. /package/dist/js/chunks/{chunk-6WLSDZ4O.mjs.map → chunk-X4ISMKE2.mjs.map} +0 -0
@@ -107,11 +107,7 @@ header:has(> #{$_bar}) {
107
107
  > #{$_bar} > hgroup > #{$_heading} {
108
108
  margin: 0;
109
109
  color: inherit;
110
- font-family: var(--md-sys-typescale-title-large-font-family-name);
111
- font-size: var(--md-sys-typescale-title-large-font-size);
112
- font-weight: var(--md-sys-typescale-title-large-font-weight);
113
- line-height: var(--md-sys-typescale-title-large-line-height);
114
- letter-spacing: var(--md-sys-typescale-title-large-letter-spacing);
110
+ @include typescale("title-large");
115
111
  }
116
112
 
117
113
  > #{$_bar} > hgroup {
@@ -126,11 +122,7 @@ header:has(> #{$_bar}) {
126
122
  > #{$_bar} > hgroup > p {
127
123
  margin: 0;
128
124
  color: inherit;
129
- font-family: var(--md-sys-typescale-label-medium-font-family-name);
130
- font-size: var(--md-sys-typescale-label-medium-font-size);
131
- font-weight: var(--md-sys-typescale-label-medium-font-weight);
132
- line-height: var(--md-sys-typescale-label-medium-line-height);
133
- letter-spacing: var(--md-sys-typescale-label-medium-letter-spacing);
125
+ @include typescale("label-medium");
134
126
  }
135
127
 
136
128
  // Icon-only actions — 48dp target, 24dp glyph, 4dp from the container edge.
@@ -281,11 +273,7 @@ header:has(> #{$_bar}) {
281
273
  padding: 0 12px;
282
274
  color: inherit;
283
275
  text-decoration: none;
284
- font-family: var(--md-sys-typescale-label-large-font-family-name);
285
- font-size: var(--md-sys-typescale-label-large-font-size);
286
- font-weight: var(--md-sys-typescale-label-large-font-weight);
287
- line-height: var(--md-sys-typescale-label-large-line-height);
288
- letter-spacing: var(--md-sys-typescale-label-large-letter-spacing);
276
+ @include typescale("label-large");
289
277
  @include focus-visible;
290
278
 
291
279
  &:hover:not(.active) {
@@ -378,19 +366,11 @@ header.medium:has(> #{$_bar}) > #{$_bar} {
378
366
 
379
367
  > #{$_heading},
380
368
  > hgroup > #{$_heading} {
381
- font-family: var(--md-sys-typescale-headline-medium-font-family-name);
382
- font-size: var(--md-sys-typescale-headline-medium-font-size);
383
- font-weight: var(--md-sys-typescale-headline-medium-font-weight);
384
- line-height: var(--md-sys-typescale-headline-medium-line-height);
385
- letter-spacing: var(--md-sys-typescale-headline-medium-letter-spacing);
369
+ @include typescale("headline-medium");
386
370
  }
387
371
 
388
372
  > hgroup > p {
389
- font-family: var(--md-sys-typescale-label-large-font-family-name);
390
- font-size: var(--md-sys-typescale-label-large-font-size);
391
- font-weight: var(--md-sys-typescale-label-large-font-weight);
392
- line-height: var(--md-sys-typescale-label-large-line-height);
393
- letter-spacing: var(--md-sys-typescale-label-large-letter-spacing);
373
+ @include typescale("label-large");
394
374
  }
395
375
  }
396
376
 
@@ -408,19 +388,11 @@ header.large:has(> #{$_bar}) > #{$_bar} {
408
388
 
409
389
  > #{$_heading},
410
390
  > hgroup > #{$_heading} {
411
- font-family: var(--md-sys-typescale-display-small-font-family-name);
412
- font-size: var(--md-sys-typescale-display-small-font-size);
413
- font-weight: var(--md-sys-typescale-display-small-font-weight);
414
- line-height: var(--md-sys-typescale-display-small-line-height);
415
- letter-spacing: var(--md-sys-typescale-display-small-letter-spacing);
391
+ @include typescale("display-small");
416
392
  }
417
393
 
418
394
  > hgroup > p {
419
- font-family: var(--md-sys-typescale-title-medium-font-family-name);
420
- font-size: var(--md-sys-typescale-title-medium-font-size);
421
- font-weight: var(--md-sys-typescale-title-medium-font-weight);
422
- line-height: var(--md-sys-typescale-title-medium-line-height);
423
- letter-spacing: var(--md-sys-typescale-title-medium-letter-spacing);
395
+ @include typescale("title-medium");
424
396
  }
425
397
  }
426
398
 
@@ -473,20 +445,12 @@ header.large.collapsed:has(> #{$_bar}) > #{$_bar} {
473
445
  white-space: nowrap;
474
446
  overflow: hidden;
475
447
  text-overflow: ellipsis;
476
- font-family: var(--md-sys-typescale-title-large-font-family-name);
477
- font-size: var(--md-sys-typescale-title-large-font-size);
478
- font-weight: var(--md-sys-typescale-title-large-font-weight);
479
- line-height: var(--md-sys-typescale-title-large-line-height);
480
- letter-spacing: var(--md-sys-typescale-title-large-letter-spacing);
448
+ @include typescale("title-large");
481
449
  }
482
450
 
483
451
  > hgroup > p {
484
452
  padding: 0;
485
- font-family: var(--md-sys-typescale-label-medium-font-family-name);
486
- font-size: var(--md-sys-typescale-label-medium-font-size);
487
- font-weight: var(--md-sys-typescale-label-medium-font-weight);
488
- line-height: var(--md-sys-typescale-label-medium-line-height);
489
- letter-spacing: var(--md-sys-typescale-label-medium-letter-spacing);
453
+ @include typescale("label-medium");
490
454
  }
491
455
  }
492
456
 
@@ -29,6 +29,27 @@
29
29
  --md-comp-nav-rail-expanded-width: 280px;
30
30
  }
31
31
 
32
+ // Expanded rail as an overlay with a scrim.
33
+ @mixin _modal-rail {
34
+ position: fixed;
35
+ inset: 0 auto 0 0;
36
+ z-index: 998;
37
+ @include z-depth("1");
38
+
39
+ // A blurred rail would become the containing block of the fixed scrim
40
+ // below and clip it to the rail, so a modal rail stays solid.
41
+ background-color: var(--md-sys-color-surface-container);
42
+ backdrop-filter: none;
43
+
44
+ &::before {
45
+ content: "";
46
+ position: fixed;
47
+ inset: 0;
48
+ background-color: var(--md-comp-scrim-color);
49
+ z-index: -1;
50
+ }
51
+ }
52
+
32
53
  .navigation-rail {
33
54
  --md-comp-nav-rail-icon-size: 24px;
34
55
  --md-comp-nav-rail-indicator-width: 56px;
@@ -278,42 +299,12 @@
278
299
  }
279
300
 
280
301
  &.expanded.modal {
281
- position: fixed;
282
- inset: 0 auto 0 0;
283
- z-index: 998;
284
- @include z-depth("1");
285
-
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;
290
-
291
- &::before {
292
- content: "";
293
- position: fixed;
294
- inset: 0;
295
- background-color: var(--md-comp-scrim-color);
296
- z-index: -1;
297
- }
302
+ @include _modal-rail;
298
303
  }
299
304
 
300
305
  @include bp-down("medium") {
301
306
  &.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
- }
307
+ @include _modal-rail;
317
308
  }
318
309
  }
319
310
  }
@@ -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;
@@ -119,8 +122,8 @@ footer:not(:has(> nav:only-child)) ul a:not(.button, .icon-button, .circle, .ext
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;
@@ -169,7 +169,6 @@
169
169
  @include z-depth("0");
170
170
 
171
171
  &.elevated {
172
- background-color: var(--md-sys-color-surface-container-low);
173
172
  @include z-depth("1");
174
173
  }
175
174
 
@@ -255,10 +254,7 @@
255
254
  background-color: color-mix(in oklab, var(--md-sys-color-on-surface) state-opacity("hover"), transparent);
256
255
  }
257
256
 
258
- &:focus-visible {
259
- outline: 3px solid var(--md-sys-color-secondary);
260
- outline-offset: 2px;
261
- }
257
+ @include focus-visible;
262
258
  }
263
259
  }
264
260
 
@@ -281,7 +277,7 @@
281
277
  }
282
278
 
283
279
  // Footer / Action Bar
284
- > footer:not(:has(> nav:only-child)),
280
+ > footer:not(:has(> .navigation-bar:only-child)),
285
281
  > :is(footer, .pane-footer, nav:last-child) {
286
282
  display: flex;
287
283
  flex-wrap: wrap;
@@ -0,0 +1,14 @@
1
+ @use "../abstracts" as *;
2
+
3
+ // Particles. A <canvas class="particles"> covers its nearest positioned
4
+ // ancestor and lets clicks through to what is under it. The Particles script
5
+ // paints the dots in the canvas's `color`.
6
+
7
+ canvas.particles {
8
+ position: absolute;
9
+ inset: 0;
10
+ width: 100%;
11
+ height: 100%;
12
+ color: var(--md-sys-color-on-surface);
13
+ pointer-events: none;
14
+ }
@@ -102,7 +102,9 @@ progress.progress {
102
102
  // `<span class="progress circular">` is not a <progress>, has no determinate
103
103
  // child, and so matched this too - drawing a linear fill on top of the conic
104
104
  // circular indicator.
105
- .progress:not(:is(progress)):not(.circular):not(:has(> .determinate, > .indeterminate)) {
105
+ $_bare: ".progress:not(:is(progress)):not(.circular):not(:has(> .determinate, > .indeterminate))";
106
+
107
+ #{$_bare} {
106
108
  &::after {
107
109
  content: "";
108
110
  position: absolute;
@@ -219,7 +221,7 @@ progress.progress:indeterminate {
219
221
  .progress > .determinate,
220
222
  .progress > .indeterminate::before,
221
223
  .progress > .indeterminate::after,
222
- .progress:not(:is(progress)):not(.circular):not(:has(> .determinate, > .indeterminate))::after,
224
+ #{$_bare}::after,
223
225
  progress.progress:indeterminate::before,
224
226
  progress.progress:indeterminate::after {
225
227
  background-color: CanvasText;
@@ -253,7 +255,7 @@ progress.progress:indeterminate {
253
255
  .progress::after,
254
256
  progress.progress:indeterminate::before,
255
257
  progress.progress:indeterminate::after,
256
- .progress:not(:is(progress)):not(.circular):not(:has(> .determinate, > .indeterminate)):not([style*="--md-comp-progress-value"])::after,
258
+ #{$_bare}:not([style*="--md-comp-progress-value"])::after,
257
259
  :is(.preloader, .progress.circular) {
258
260
  animation: none;
259
261
  }
@@ -262,7 +264,7 @@ progress.progress:indeterminate {
262
264
  .progress > .indeterminate::after,
263
265
  progress.progress:indeterminate::before,
264
266
  progress.progress:indeterminate::after,
265
- .progress:not(:is(progress)):not(.circular):not(:has(> .determinate, > .indeterminate)):not([style*="--md-comp-progress-value"])::after {
267
+ #{$_bare}:not([style*="--md-comp-progress-value"])::after {
266
268
  width: 40%;
267
269
  }
268
270
 
@@ -153,10 +153,7 @@ $_sheet: "dialog.side-sheet, dialog.right, dialog.right-sheet, dialog.left, dial
153
153
  background-color: color-mix(in oklab, var(--md-sys-color-on-surface) state-opacity("hover"), transparent);
154
154
  }
155
155
 
156
- &:focus-visible {
157
- outline: 3px solid var(--md-sys-color-secondary);
158
- outline-offset: 2px;
159
- }
156
+ @include focus-visible;
160
157
  }
161
158
 
162
159
  > :is(form, nav):last-child {
@@ -166,10 +166,6 @@ $_stepper-alert: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/sv
166
166
  margin-block: 4px;
167
167
  }
168
168
 
169
- &:last-child::after {
170
- content: none;
171
- }
172
-
173
169
  > .stepper-content {
174
170
  grid-column: 2;
175
171
  grid-row: 3;
@@ -7,11 +7,13 @@
7
7
  // --md-comp-toc-label-color
8
8
  // --md-comp-toc-active-color
9
9
  // --md-comp-toc-indicator
10
+ // --md-comp-toc-item-height 48px, the Material touch target
10
11
 
11
12
  .table-of-contents {
12
13
  --md-comp-toc-label-color: var(--md-sys-color-on-surface-variant);
13
14
  --md-comp-toc-active-color: var(--md-sys-color-primary);
14
15
  --md-comp-toc-indicator: 2px;
16
+ --md-comp-toc-item-height: 48px;
15
17
 
16
18
  list-style: none;
17
19
  margin: 0;
@@ -29,7 +31,7 @@
29
31
  display: inline-flex;
30
32
  align-items: center;
31
33
  box-sizing: border-box;
32
- min-height: 2rem;
34
+ min-height: var(--md-comp-toc-item-height);
33
35
  padding-inline-start: 16px;
34
36
  border-inline-start: var(--md-comp-toc-indicator) solid transparent;
35
37
  color: var(--md-comp-toc-label-color);
@@ -16,7 +16,6 @@
16
16
  :is(.timepicker-digital-display, .time-picker-digital-display) {
17
17
  width: auto;
18
18
  flex: 1 auto;
19
- // background-color: var(--md-sys-color-surface);
20
19
  padding: 2rem .67rem .67rem .67rem;
21
20
  font-weight: 300;
22
21
  }
@@ -27,7 +26,6 @@
27
26
  text-align: left;
28
27
  color: var(--md-sys-color-on-surface-variant);
29
28
  font-weight: 400;
30
- /*position: relative;*/
31
29
  user-select: none;
32
30
  padding: 1rem 1rem 1.3rem 1rem;
33
31
 
@@ -80,15 +78,8 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
80
78
  text-align: center;
81
79
  }
82
80
 
83
- /*input[type=text].text-primary {
84
- color: var(--md-sys-color-on-background);
85
- }*/
86
-
87
81
  :is(.timepicker-display-am-pm, .time-picker-display-am-pm) {
88
82
  font-size: 1.3rem;
89
- /*position: absolute;
90
- top: 1rem;
91
- right: 1rem;*/
92
83
  font-weight: 400;
93
84
  }
94
85
 
@@ -109,7 +100,6 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
109
100
  line-height: 2rem;
110
101
  vertical-align: middle;
111
102
  text-align: center;
112
- // background-color: transparent;
113
103
  border: 1px solid var(--md-sys-color-outline);
114
104
  }
115
105
 
@@ -128,7 +118,6 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
128
118
  :is(.timepicker-analog-display, .time-picker-analog-display) {
129
119
  flex: 2.5 auto;
130
120
  padding: .67rem;
131
- // background-color: var(--md-sys-color-surface);
132
121
  }
133
122
 
134
123
  :is(.timepicker-plate, .time-picker-plate) {
@@ -149,10 +138,7 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
149
138
  :is(.timepicker-canvas, .time-picker-canvas),
150
139
  :is(.timepicker-dial, .time-picker-dial) {
151
140
  position: absolute;
152
- left: 0;
153
- right: 0;
154
- top: 0;
155
- bottom: 0;
141
+ inset: 0;
156
142
  }
157
143
 
158
144
  :is(.timepicker-minutes, .time-picker-minutes) {
@@ -206,11 +192,7 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
206
192
  opacity: 0.25;
207
193
  }
208
194
 
209
- :is(.timepicker-canvas-bearing, .time-picker-canvas-bearing) {
210
- stroke: none;
211
- fill: var(--md-sys-color-primary);
212
- }
213
-
195
+ :is(.timepicker-canvas-bearing, .time-picker-canvas-bearing),
214
196
  :is(.timepicker-canvas-bg, .time-picker-canvas-bg) {
215
197
  stroke: none;
216
198
  fill: var(--md-sys-color-primary);
@@ -243,9 +225,6 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
243
225
  :is(.timepicker-container, .time-picker-container) {
244
226
  width: auto;
245
227
  max-width: 620px;
246
- }
247
-
248
- :is(.timepicker-container, .time-picker-container) {
249
228
  flex-direction: row;
250
229
  }
251
230
 
@@ -254,7 +233,6 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
254
233
  }
255
234
 
256
235
  :is(.timepicker-text-container, .time-picker-text-container) {
257
- /*top: 31%;*/
258
236
  flex-direction: column;
259
237
  margin-top: 4.8rem;
260
238
  text-align: center;
@@ -277,24 +255,14 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
277
255
  :is(.timepicker-container, .time-picker-container) .am-btn,
278
256
  :is(.timepicker-container, .time-picker-container) .pm-btn {
279
257
  flex-grow: 1;
280
- /*width: auto;*/
281
- // Same two retired variables as above; both declarations
282
- // rendered as 0. The corner rules that follow square off the inner
283
- // edges, so the outer ones are the only radius in play.
284
- padding-inline: 0;
258
+ // A retired variable that always rendered as 0. Squares all four
259
+ // corners of both buttons.
285
260
  border-radius: 0;
286
261
  border: 1px solid var(--md-sys-color-outline);
287
262
  }
288
263
 
289
- :is(.timepicker-container, .time-picker-container) .am-btn {
290
- border-top-right-radius: 0;
291
- border-bottom-right-radius: 0;
292
- }
293
-
294
264
  :is(.timepicker-container, .time-picker-container) .pm-btn {
295
265
  border-left: 0;
296
- border-bottom-left-radius: 0;
297
- border-top-left-radius: 0;
298
266
  }
299
267
 
300
268
  :is(.timepicker-plate, .time-picker-plate) {
@@ -51,10 +51,6 @@
51
51
  // (rule 4) - and not role="toolbar" either, because that is a composite role
52
52
  // promising arrow-key navigation nothing here implements (rule 2). The <nav>
53
53
  // form is the older markup and still works.
54
- //
55
- // Wrapped in :is() so it stays one compound selector: interpolating a bare
56
- // comma-separated list breaks out of its context. That mistake shipped once
57
- // already, in $_bar.
58
54
  $_toolbar: ".toolbar";
59
55
 
60
56
  // The two axes. `.max` is an alias for docked; `.filled` is the older