@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
@@ -19,6 +19,10 @@
19
19
  //
20
20
  // .filled-in is a no-op: the selected state is always the filled box.
21
21
 
22
+ @mixin _ring($color, $state) {
23
+ @include state-layer-ring(var(--md-comp-checkbox-state-layer-size), var(--md-comp-checkbox-container-size), $color, $state);
24
+ }
25
+
22
26
  $_cb-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M4 9.5 7.5 13 14 5.5'/%3E%3C/svg%3E");
23
27
  $_cb-dash: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' d='M4.5 9h9'/%3E%3C/svg%3E");
24
28
 
@@ -82,32 +86,17 @@ label:has(> [type="checkbox"]):not(.switch) > [type="checkbox"],
82
86
  }
83
87
 
84
88
  &:hover {
85
- @include state-layer-ring(
86
- var(--md-comp-checkbox-state-layer-size),
87
- var(--md-comp-checkbox-container-size),
88
- var(--md-sys-color-on-surface),
89
- "hover"
90
- );
89
+ @include _ring(var(--md-sys-color-on-surface), "hover");
91
90
  }
92
91
 
93
92
  &:checked:hover,
94
93
  &:indeterminate:hover {
95
- @include state-layer-ring(
96
- var(--md-comp-checkbox-state-layer-size),
97
- var(--md-comp-checkbox-container-size),
98
- var(--md-sys-color-primary),
99
- "hover"
100
- );
94
+ @include _ring(var(--md-sys-color-primary), "hover");
101
95
  }
102
96
 
103
97
  &:focus-visible,
104
98
  &.tabbed:focus {
105
- @include state-layer-ring(
106
- var(--md-comp-checkbox-state-layer-size),
107
- var(--md-comp-checkbox-container-size),
108
- var(--md-sys-color-primary),
109
- "focus"
110
- );
99
+ @include _ring(var(--md-sys-color-primary), "focus");
111
100
  outline: none;
112
101
  }
113
102
 
@@ -126,12 +115,7 @@ label:has(> [type="checkbox"]):not(.switch) > [type="checkbox"],
126
115
 
127
116
  &.invalid:hover,
128
117
  &[aria-invalid="true"]:hover {
129
- @include state-layer-ring(
130
- var(--md-comp-checkbox-state-layer-size),
131
- var(--md-comp-checkbox-container-size),
132
- var(--md-sys-color-error),
133
- "hover"
134
- );
118
+ @include _ring(var(--md-sys-color-error), "hover");
135
119
  }
136
120
 
137
121
  &:disabled {
@@ -208,20 +192,28 @@ label:has(> [type="checkbox"]:disabled):not(.switch),
208
192
 
209
193
  // Legacy / Select / Autocomplete: input + span draws the same
210
194
  // 18dp anatomy. Exclude .switch — that file paints the track on a span.
211
- $_cb-span: "*:not(.switch) > [type='checkbox'] + span:not(.lever, .supporting-text, .character-counter, .file-path)";
195
+ // $state is appended to the checkbox, e.g. ":checked" or ".invalid".
196
+ @function _cb-span($state: "") {
197
+ @return "*:not(.switch) > [type='checkbox']#{$state} + span:not(.lever, .supporting-text, .character-counter, .file-path)";
198
+ }
212
199
 
213
- #{$_cb-span} {
200
+ // inline-block, not inline-flex: a flex span turns each text run and link
201
+ // inside it into its own item, which drops the spaces around a link and
202
+ // splits "I agree to the <a>Terms</a>" into columns. The block padding
203
+ // centers one line in the 48px target, as align-items did.
204
+ #{_cb-span()} {
214
205
  position: relative;
215
- display: inline-flex;
216
- align-items: center;
206
+ display: inline-block;
207
+ box-sizing: border-box;
217
208
  min-height: 48px;
209
+ padding-block: calc((48px - 1lh) / 2);
218
210
  padding-left: 30px;
219
211
  cursor: pointer;
220
212
  user-select: none;
221
213
  }
222
214
 
223
- #{$_cb-span}::before,
224
- #{$_cb-span}::after {
215
+ #{_cb-span()}::before,
216
+ #{_cb-span()}::after {
225
217
  content: "";
226
218
  position: absolute;
227
219
  left: 0;
@@ -233,93 +225,78 @@ $_cb-span: "*:not(.switch) > [type='checkbox'] + span:not(.lever, .supporting-te
233
225
  border-radius: 2px;
234
226
  }
235
227
 
236
- #{$_cb-span}::before {
228
+ #{_cb-span()}::before {
237
229
  border: 2px solid var(--md-sys-color-on-surface-variant);
238
230
  background-color: transparent;
239
231
  transition: border-color .2s ease, background-color .2s ease, box-shadow .2s ease;
240
232
  }
241
233
 
242
- #{$_cb-span}::after {
234
+ #{_cb-span()}::after {
243
235
  background-color: var(--md-sys-color-on-primary);
244
236
  -webkit-mask: #{$_cb-check} center / contain no-repeat;
245
237
  mask: #{$_cb-check} center / contain no-repeat;
246
238
  opacity: 0;
247
239
  }
248
240
 
249
- *:not(.switch) > [type="checkbox"]:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
241
+ #{_cb-span(":is(:checked, :indeterminate)")}::before {
250
242
  border-color: var(--md-sys-color-primary);
251
243
  background-color: var(--md-sys-color-primary);
252
244
  }
253
245
 
254
- *:not(.switch) > [type="checkbox"]:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::after {
246
+ #{_cb-span(":is(:checked, :indeterminate)")}::after {
255
247
  opacity: 1;
256
248
  }
257
249
 
258
- *:not(.switch) > [type="checkbox"]:indeterminate + span:not(.lever, .supporting-text, .character-counter, .file-path)::after {
250
+ #{_cb-span(":indeterminate")}::after {
259
251
  -webkit-mask-image: #{$_cb-dash};
260
252
  mask-image: #{$_cb-dash};
261
253
  }
262
254
 
263
- *:not(.switch) > [type="checkbox"]:hover + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
264
- @include state-layer-ring(
265
- var(--md-comp-checkbox-state-layer-size),
266
- var(--md-comp-checkbox-container-size),
267
- var(--md-sys-color-on-surface),
268
- "hover"
269
- );
255
+ #{_cb-span(":hover")}::before {
256
+ @include _ring(var(--md-sys-color-on-surface), "hover");
270
257
  }
271
258
 
272
- *:not(.switch) > [type="checkbox"]:is(:checked, :indeterminate):hover + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
273
- @include state-layer-ring(
274
- var(--md-comp-checkbox-state-layer-size),
275
- var(--md-comp-checkbox-container-size),
276
- var(--md-sys-color-primary),
277
- "hover"
278
- );
259
+ #{_cb-span(":is(:checked, :indeterminate):hover")}::before {
260
+ @include _ring(var(--md-sys-color-primary), "hover");
279
261
  }
280
262
 
281
- *:not(.switch) > [type="checkbox"]:focus-visible + span:not(.lever, .supporting-text, .character-counter, .file-path)::before,
282
- *:not(.switch) > [type="checkbox"].tabbed:focus + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
283
- @include state-layer-ring(
284
- var(--md-comp-checkbox-state-layer-size),
285
- var(--md-comp-checkbox-container-size),
286
- var(--md-sys-color-primary),
287
- "focus"
288
- );
263
+ #{_cb-span(":focus-visible")}::before,
264
+ #{_cb-span(".tabbed:focus")}::before {
265
+ @include _ring(var(--md-sys-color-primary), "focus");
289
266
  }
290
267
 
291
- *:not(.switch) > [type="checkbox"].invalid + span:not(.lever, .supporting-text, .character-counter, .file-path)::before,
292
- *:not(.switch) > [type="checkbox"][aria-invalid="true"] + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
268
+ #{_cb-span(".invalid")}::before,
269
+ #{_cb-span("[aria-invalid='true']")}::before {
293
270
  border-color: var(--md-sys-color-error);
294
271
  }
295
272
 
296
- *:not(.switch) > [type="checkbox"].invalid:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::before,
297
- *:not(.switch) > [type="checkbox"][aria-invalid="true"]:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
273
+ #{_cb-span(".invalid:is(:checked, :indeterminate)")}::before,
274
+ #{_cb-span("[aria-invalid='true']:is(:checked, :indeterminate)")}::before {
298
275
  border-color: var(--md-sys-color-error);
299
276
  background-color: var(--md-sys-color-error);
300
277
  }
301
278
 
302
- *:not(.switch) > [type="checkbox"].invalid:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::after,
303
- *:not(.switch) > [type="checkbox"][aria-invalid="true"]:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::after {
279
+ #{_cb-span(".invalid:is(:checked, :indeterminate)")}::after,
280
+ #{_cb-span("[aria-invalid='true']:is(:checked, :indeterminate)")}::after {
304
281
  background-color: var(--md-sys-color-on-error);
305
282
  }
306
283
 
307
- *:not(.switch) > [type="checkbox"]:disabled + span:not(.lever, .supporting-text, .character-counter, .file-path) {
284
+ #{_cb-span(":disabled")} {
308
285
  color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
309
286
  cursor: default;
310
287
  }
311
288
 
312
- *:not(.switch) > [type="checkbox"]:disabled + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
289
+ #{_cb-span(":disabled")}::before {
313
290
  border-color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
314
291
  background-color: transparent;
315
292
  box-shadow: none;
316
293
  }
317
294
 
318
- *:not(.switch) > [type="checkbox"]:disabled:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::before {
295
+ #{_cb-span(":disabled:is(:checked, :indeterminate)")}::before {
319
296
  border-color: transparent;
320
297
  background-color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
321
298
  }
322
299
 
323
- *:not(.switch) > [type="checkbox"]:disabled:is(:checked, :indeterminate) + span:not(.lever, .supporting-text, .character-counter, .file-path)::after {
300
+ #{_cb-span(":disabled:is(:checked, :indeterminate)")}::after {
324
301
  background-color: var(--md-sys-color-surface);
325
302
  }
@@ -31,13 +31,13 @@ fieldset {
31
31
  min-inline-size: 0;
32
32
  margin: 0;
33
33
  padding: 16px;
34
+ border: var(--md-comp-fieldset-outline-width) solid var(--md-comp-fieldset-outline-color);
35
+ border-radius: var(--md-comp-fieldset-container-shape);
36
+ background-color: var(--md-comp-fieldset-container-color);
34
37
 
35
38
  & + & {
36
39
  margin-block-start: 24px;
37
40
  }
38
- border: var(--md-comp-fieldset-outline-width) solid var(--md-comp-fieldset-outline-color);
39
- border-radius: var(--md-comp-fieldset-container-shape);
40
- background-color: var(--md-comp-fieldset-container-color);
41
41
 
42
42
  > legend {
43
43
  float: none;
@@ -6,7 +6,6 @@
6
6
  // the selected filename instead of consuming the entire field.
7
7
  grid-template-columns: fit-content(50%) minmax(0, 1fr);
8
8
  gap: 10px;
9
- //position: relative;
10
9
 
11
10
  .file-path-wrapper {
12
11
  overflow: hidden;
@@ -16,6 +16,10 @@
16
16
  //
17
17
  // .with-gap is a no-op: the selected state is always the ring + inner.
18
18
 
19
+ @mixin _ring($color, $state) {
20
+ @include state-layer-ring(var(--md-comp-radio-button-state-layer-size), var(--md-comp-radio-button-icon-size), $color, $state);
21
+ }
22
+
19
23
  label:has(> [type="radio"]),
20
24
  .radio {
21
25
  --md-comp-radio-button-icon-size: 20px;
@@ -75,31 +79,16 @@ label:has(> [type="radio"]) > [type="radio"],
75
79
  }
76
80
 
77
81
  &:hover {
78
- @include state-layer-ring(
79
- var(--md-comp-radio-button-state-layer-size),
80
- var(--md-comp-radio-button-icon-size),
81
- var(--md-sys-color-on-surface),
82
- "hover"
83
- );
82
+ @include _ring(var(--md-sys-color-on-surface), "hover");
84
83
  }
85
84
 
86
85
  &:checked:hover {
87
- @include state-layer-ring(
88
- var(--md-comp-radio-button-state-layer-size),
89
- var(--md-comp-radio-button-icon-size),
90
- var(--md-sys-color-primary),
91
- "hover"
92
- );
86
+ @include _ring(var(--md-sys-color-primary), "hover");
93
87
  }
94
88
 
95
89
  &:focus-visible,
96
90
  &.tabbed:focus {
97
- @include state-layer-ring(
98
- var(--md-comp-radio-button-state-layer-size),
99
- var(--md-comp-radio-button-icon-size),
100
- var(--md-sys-color-primary),
101
- "focus"
102
- );
91
+ @include _ring(var(--md-sys-color-primary), "focus");
103
92
  outline: none;
104
93
  }
105
94
 
@@ -180,31 +169,16 @@ label:has(> [type="radio"]:disabled),
180
169
  }
181
170
 
182
171
  [type="radio"]:hover + span::before {
183
- @include state-layer-ring(
184
- var(--md-comp-radio-button-state-layer-size),
185
- var(--md-comp-radio-button-icon-size),
186
- var(--md-sys-color-on-surface),
187
- "hover"
188
- );
172
+ @include _ring(var(--md-sys-color-on-surface), "hover");
189
173
  }
190
174
 
191
175
  [type="radio"]:checked:hover + span::before {
192
- @include state-layer-ring(
193
- var(--md-comp-radio-button-state-layer-size),
194
- var(--md-comp-radio-button-icon-size),
195
- var(--md-sys-color-primary),
196
- "hover"
197
- );
176
+ @include _ring(var(--md-sys-color-primary), "hover");
198
177
  }
199
178
 
200
179
  [type="radio"]:focus-visible + span::before,
201
180
  [type="radio"].tabbed:focus + span::before {
202
- @include state-layer-ring(
203
- var(--md-comp-radio-button-state-layer-size),
204
- var(--md-comp-radio-button-icon-size),
205
- var(--md-sys-color-primary),
206
- "focus"
207
- );
181
+ @include _ring(var(--md-sys-color-primary), "focus");
208
182
  }
209
183
 
210
184
  [type="radio"]:disabled + span {
@@ -81,9 +81,6 @@ select.browser-default {
81
81
 
82
82
  > input.menu-trigger {
83
83
  border-radius: inherit;
84
- }
85
-
86
- > input.menu-trigger {
87
84
  padding-inline-end: 52px;
88
85
  }
89
86