@expressivecss/expressive 0.11.0 → 0.13.1

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 (265) hide show
  1. package/CHANGELOG.md +392 -7
  2. package/README.md +37 -1
  3. package/dist/css/expressive.css +5440 -234
  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/material-symbols-outlined.woff2 +0 -0
  8. package/dist/fonts/material-symbols-rounded.woff2 +0 -0
  9. package/dist/fonts/material-symbols-sharp.woff2 +0 -0
  10. package/dist/js/chunks/{chunk-AYYYWUJ4.mjs → chunk-3CLXLPYS.mjs} +17 -11
  11. package/dist/js/chunks/chunk-3CLXLPYS.mjs.map +7 -0
  12. package/dist/js/chunks/chunk-3DHK5CZU.mjs +105 -0
  13. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +7 -0
  14. package/dist/js/chunks/{chunk-IMUPRRI6.mjs → chunk-3VOK6J7U.mjs} +3 -3
  15. package/dist/js/chunks/chunk-4PWAPV6F.mjs +7 -0
  16. package/dist/js/chunks/chunk-4PWAPV6F.mjs.map +7 -0
  17. package/dist/js/chunks/{chunk-XFJ452AZ.mjs → chunk-55IA2XUC.mjs} +5 -6
  18. package/dist/js/chunks/{chunk-XFJ452AZ.mjs.map → chunk-55IA2XUC.mjs.map} +2 -2
  19. package/dist/js/chunks/{chunk-XDB3G6RL.mjs → chunk-6N2XAEFK.mjs} +15 -4
  20. package/dist/js/chunks/{chunk-XDB3G6RL.mjs.map → chunk-6N2XAEFK.mjs.map} +2 -2
  21. package/dist/js/chunks/{chunk-MISGHDUU.mjs → chunk-6OMRGML6.mjs} +9 -7
  22. package/dist/js/chunks/{chunk-MISGHDUU.mjs.map → chunk-6OMRGML6.mjs.map} +2 -2
  23. package/dist/js/chunks/{chunk-A3BJA7V4.mjs → chunk-6WLSDZ4O.mjs} +2 -2
  24. package/dist/js/chunks/chunk-CCWDV5CR.mjs +292 -0
  25. package/dist/js/chunks/chunk-CCWDV5CR.mjs.map +7 -0
  26. package/dist/js/chunks/{chunk-JODJAGFS.mjs → chunk-CKQP6P76.mjs} +31 -8
  27. package/dist/js/chunks/chunk-CKQP6P76.mjs.map +7 -0
  28. package/dist/js/chunks/{chunk-KR44BSYQ.mjs → chunk-DLWYKFEI.mjs} +3 -3
  29. package/dist/js/chunks/chunk-DTKR54I6.mjs +270 -0
  30. package/dist/js/chunks/chunk-DTKR54I6.mjs.map +7 -0
  31. package/dist/js/chunks/{chunk-SLFNPY5M.mjs → chunk-EC63CHXU.mjs} +2 -2
  32. package/dist/js/chunks/chunk-GVGT6MIU.mjs +47 -0
  33. package/dist/js/chunks/chunk-GVGT6MIU.mjs.map +7 -0
  34. package/dist/js/chunks/{chunk-LZVBJ33S.mjs → chunk-GZWPXXY6.mjs} +15 -8
  35. package/dist/js/chunks/chunk-GZWPXXY6.mjs.map +7 -0
  36. package/dist/js/chunks/chunk-HKT2S7VM.mjs +48 -0
  37. package/dist/js/chunks/chunk-HKT2S7VM.mjs.map +7 -0
  38. package/dist/js/chunks/{chunk-D4UZ4HFN.mjs → chunk-IFXVDDDH.mjs} +23 -11
  39. package/dist/js/chunks/chunk-IFXVDDDH.mjs.map +7 -0
  40. package/dist/js/chunks/chunk-K4CJCRGE.mjs +262 -0
  41. package/dist/js/chunks/chunk-K4CJCRGE.mjs.map +7 -0
  42. package/dist/js/chunks/chunk-LNCCYGPC.mjs +163 -0
  43. package/dist/js/chunks/chunk-LNCCYGPC.mjs.map +7 -0
  44. package/dist/js/chunks/{chunk-QSQ24FYT.mjs → chunk-LTWPGFBR.mjs} +2 -2
  45. package/dist/js/chunks/{chunk-QSQ24FYT.mjs.map → chunk-LTWPGFBR.mjs.map} +2 -2
  46. package/dist/js/chunks/{chunk-I5KR22BY.mjs → chunk-LWBQIX5J.mjs} +15 -15
  47. package/dist/js/chunks/chunk-LWBQIX5J.mjs.map +7 -0
  48. package/dist/js/chunks/{chunk-GY2Z5CJ2.mjs → chunk-NNYP33NB.mjs} +67 -32
  49. package/dist/js/chunks/chunk-NNYP33NB.mjs.map +7 -0
  50. package/dist/js/chunks/chunk-NQLC3YMW.mjs +1 -0
  51. package/dist/js/chunks/chunk-O5XPWXIQ.mjs +406 -0
  52. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +7 -0
  53. package/dist/js/chunks/chunk-P3G3QHII.mjs +166 -0
  54. package/dist/js/chunks/chunk-P3G3QHII.mjs.map +7 -0
  55. package/dist/js/chunks/{chunk-VAS6JQ6P.mjs → chunk-PIJ2TAR3.mjs} +3 -3
  56. package/dist/js/chunks/{chunk-74N6U5JJ.mjs → chunk-PLYXLSH3.mjs} +38 -37
  57. package/dist/js/chunks/chunk-PLYXLSH3.mjs.map +7 -0
  58. package/dist/js/chunks/{chunk-PIIAEYAJ.mjs → chunk-QDAL4IYN.mjs} +2 -2
  59. package/dist/js/chunks/chunk-QKWPQK5N.mjs +179 -0
  60. package/dist/js/chunks/chunk-QKWPQK5N.mjs.map +7 -0
  61. package/dist/js/chunks/{chunk-FRB7TOCS.mjs → chunk-QV2JAWIZ.mjs} +2 -2
  62. package/dist/js/chunks/{chunk-N3UHGN3N.mjs → chunk-QVVEWBOF.mjs} +3 -3
  63. package/dist/js/chunks/chunk-RHRQKTTX.mjs +139 -0
  64. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +7 -0
  65. package/dist/js/chunks/chunk-SPETGK25.mjs +59 -0
  66. package/dist/js/chunks/chunk-SPETGK25.mjs.map +7 -0
  67. package/dist/js/chunks/{chunk-TK6PX2GC.mjs → chunk-U2OTHOTI.mjs} +131 -19
  68. package/dist/js/chunks/chunk-U2OTHOTI.mjs.map +7 -0
  69. package/dist/js/chunks/{chunk-TYM6U5DY.mjs → chunk-UAEAQBRC.mjs} +2 -2
  70. package/dist/js/chunks/{chunk-7UXHSYIA.mjs → chunk-UBLRRJ7N.mjs} +3 -3
  71. package/dist/js/chunks/{chunk-EP3CVKB5.mjs → chunk-UEZUJQ66.mjs} +8 -5
  72. package/dist/js/chunks/chunk-UEZUJQ66.mjs.map +7 -0
  73. package/dist/js/chunks/{chunk-JNPIWFJT.mjs → chunk-UNEMYWEW.mjs} +3 -3
  74. package/dist/js/chunks/chunk-VTLBW7QS.mjs +124 -0
  75. package/dist/js/chunks/chunk-VTLBW7QS.mjs.map +7 -0
  76. package/dist/js/chunks/{chunk-JKNPQQWY.mjs → chunk-WJXDBPXQ.mjs} +28 -12
  77. package/dist/js/chunks/chunk-WJXDBPXQ.mjs.map +7 -0
  78. package/dist/js/chunks/{chunk-CDW6WIRT.mjs → chunk-XGHORT7J.mjs} +18 -11
  79. package/dist/js/chunks/chunk-XGHORT7J.mjs.map +7 -0
  80. package/dist/js/chunks/{chunk-7GKXUG4B.mjs → chunk-XH6BEEMY.mjs} +78 -25
  81. package/dist/js/chunks/chunk-XH6BEEMY.mjs.map +7 -0
  82. package/dist/js/chunks/{chunk-XO5WX3TK.mjs → chunk-YDCS5S3J.mjs} +2 -2
  83. package/dist/js/expressive.cjs +2540 -233
  84. package/dist/js/expressive.cjs.map +4 -4
  85. package/dist/js/expressive.js +2540 -233
  86. package/dist/js/expressive.js.map +4 -4
  87. package/dist/js/expressive.min.js +10 -10
  88. package/dist/js/expressive.min.js.map +4 -4
  89. package/dist/js/expressive.mjs +86 -38
  90. package/dist/js/expressive.mjs.map +1 -1
  91. package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
  92. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  93. package/dist/js/internal/behaviors/forms.mjs +2 -2
  94. package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
  95. package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
  96. package/dist/js/internal/components/appBar.mjs +2 -2
  97. package/dist/js/internal/components/autocomplete.mjs +4 -4
  98. package/dist/js/internal/components/barChart.mjs +10 -0
  99. package/dist/js/internal/components/barChart.mjs.map +7 -0
  100. package/dist/js/internal/components/buttonGroup.mjs +2 -2
  101. package/dist/js/internal/components/buttons.mjs +3 -3
  102. package/dist/js/internal/components/cards.mjs +3 -3
  103. package/dist/js/internal/components/carousel.mjs +3 -3
  104. package/dist/js/internal/components/characterCounter.mjs +2 -2
  105. package/dist/js/internal/components/chips.mjs +5 -5
  106. package/dist/js/internal/components/columnChart.mjs +9 -0
  107. package/dist/js/internal/components/columnChart.mjs.map +7 -0
  108. package/dist/js/internal/components/commandPalette.mjs +9 -0
  109. package/dist/js/internal/components/commandPalette.mjs.map +7 -0
  110. package/dist/js/internal/components/datepicker.mjs +6 -6
  111. package/dist/js/internal/components/expandingCard.mjs +3 -3
  112. package/dist/js/internal/components/heatmapChart.mjs +9 -0
  113. package/dist/js/internal/components/heatmapChart.mjs.map +7 -0
  114. package/dist/js/internal/components/index.mjs +79 -31
  115. package/dist/js/internal/components/lightbox.mjs +3 -3
  116. package/dist/js/internal/components/lineChart.mjs +12 -0
  117. package/dist/js/internal/components/lineChart.mjs.map +7 -0
  118. package/dist/js/internal/components/menu.mjs +3 -3
  119. package/dist/js/internal/components/messageScroller.mjs +9 -0
  120. package/dist/js/internal/components/messageScroller.mjs.map +7 -0
  121. package/dist/js/internal/components/mixedChart.mjs +10 -0
  122. package/dist/js/internal/components/mixedChart.mjs.map +7 -0
  123. package/dist/js/internal/components/navigationRail.mjs +2 -2
  124. package/dist/js/internal/components/pieChart.mjs +9 -0
  125. package/dist/js/internal/components/pieChart.mjs.map +7 -0
  126. package/dist/js/internal/components/questionnaire.mjs +9 -0
  127. package/dist/js/internal/components/questionnaire.mjs.map +7 -0
  128. package/dist/js/internal/components/radarChart.mjs +9 -0
  129. package/dist/js/internal/components/radarChart.mjs.map +7 -0
  130. package/dist/js/internal/components/radialChart.mjs +9 -0
  131. package/dist/js/internal/components/radialChart.mjs.map +7 -0
  132. package/dist/js/internal/components/registry.mjs +37 -25
  133. package/dist/js/internal/components/richTextEditor.mjs +9 -0
  134. package/dist/js/internal/components/richTextEditor.mjs.map +7 -0
  135. package/dist/js/internal/components/scrollspy.mjs +2 -2
  136. package/dist/js/internal/components/select.mjs +4 -4
  137. package/dist/js/internal/components/slider.mjs +3 -3
  138. package/dist/js/internal/components/snackbar.mjs +2 -2
  139. package/dist/js/internal/components/tabs.mjs +4 -4
  140. package/dist/js/internal/components/timepicker.mjs +4 -4
  141. package/dist/js/internal/components/tooltip.mjs +3 -3
  142. package/dist/js/internal/core/component.mjs +1 -1
  143. package/dist/js/internal/core/utils.mjs +1 -1
  144. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  145. package/dist/js/modular.mjs +86 -38
  146. package/dist/types/behaviors/forms.d.ts +22 -0
  147. package/dist/types/components/appBar.d.ts +1 -1
  148. package/dist/types/components/barChart.d.ts +24 -0
  149. package/dist/types/components/columnChart.d.ts +21 -0
  150. package/dist/types/components/commandPalette.d.ts +96 -0
  151. package/dist/types/components/datepicker.d.ts +5 -2
  152. package/dist/types/components/heatmapChart.d.ts +49 -0
  153. package/dist/types/components/index.d.ts +12 -0
  154. package/dist/types/components/lineChart.d.ts +134 -0
  155. package/dist/types/components/menu.d.ts +32 -0
  156. package/dist/types/components/messageScroller.d.ts +111 -0
  157. package/dist/types/components/mixedChart.d.ts +25 -0
  158. package/dist/types/components/pieChart.d.ts +40 -0
  159. package/dist/types/components/questionnaire.d.ts +96 -0
  160. package/dist/types/components/radarChart.d.ts +39 -0
  161. package/dist/types/components/radialChart.d.ts +45 -0
  162. package/dist/types/components/registry.d.ts +44 -0
  163. package/dist/types/components/richTextEditor.d.ts +71 -0
  164. package/dist/types/components/slider.d.ts +1 -0
  165. package/dist/types/components/snackbar.d.ts +6 -0
  166. package/dist/types/components/timepicker.d.ts +4 -1
  167. package/dist/types/components/tooltip.d.ts +2 -1
  168. package/dist/types/modular.d.ts +10 -1
  169. package/package.json +4 -1
  170. package/src/sass/README.md +3 -6
  171. package/src/sass/abstracts/_index.scss +1 -1
  172. package/src/sass/abstracts/_mixins.scss +226 -0
  173. package/src/sass/abstracts/_variables.scss +14 -0
  174. package/src/sass/base/_typography.scss +45 -0
  175. package/src/sass/components/_accordion.scss +161 -0
  176. package/src/sass/components/_aura.scss +119 -0
  177. package/src/sass/components/_avatar.scss +86 -0
  178. package/src/sass/components/_bar-chart.scss +285 -0
  179. package/src/sass/components/_bottom-sheet.scss +1 -0
  180. package/src/sass/components/_button-groups.scss +13 -3
  181. package/src/sass/components/_cards.scss +16 -13
  182. package/src/sass/components/_carousel.scss +9 -7
  183. package/src/sass/components/_column-chart.scss +134 -0
  184. package/src/sass/components/_command-palette.scss +140 -0
  185. package/src/sass/components/_countdown.scss +89 -0
  186. package/src/sass/components/_data-table.scss +188 -0
  187. package/src/sass/components/_dialog.scss +1 -0
  188. package/src/sass/components/_empty-state.scss +78 -0
  189. package/src/sass/components/_expanding-card.scss +3 -0
  190. package/src/sass/components/_heatmap-chart.scss +156 -0
  191. package/src/sass/components/_index.scss +27 -0
  192. package/src/sass/components/_kpi.scss +162 -0
  193. package/src/sass/components/_line-chart.scss +102 -0
  194. package/src/sass/components/_marquee.scss +111 -0
  195. package/src/sass/components/_menu.scss +10 -0
  196. package/src/sass/components/_message-scroller.scss +66 -0
  197. package/src/sass/components/_message.scss +202 -0
  198. package/src/sass/components/_mixed-chart.scss +157 -0
  199. package/src/sass/components/_navbar.scss +11 -6
  200. package/src/sass/components/_navigation-bar.scss +1 -0
  201. package/src/sass/components/_navigation-rail.scss +9 -0
  202. package/src/sass/components/_page-footer.scss +0 -11
  203. package/src/sass/components/_pie-chart.scss +203 -0
  204. package/src/sass/components/_popover.scss +112 -0
  205. package/src/sass/components/_progress.scss +25 -6
  206. package/src/sass/components/_questionnaire.scss +144 -0
  207. package/src/sass/components/_radar-chart.scss +205 -0
  208. package/src/sass/components/_radial-chart.scss +174 -0
  209. package/src/sass/components/_rich-text-editor.scss +99 -0
  210. package/src/sass/components/_search.scss +1 -0
  211. package/src/sass/components/_side-sheet.scss +1 -0
  212. package/src/sass/components/_skeleton.scss +81 -0
  213. package/src/sass/components/_snackbar.scss +2 -1
  214. package/src/sass/components/_stat.scss +86 -0
  215. package/src/sass/components/_stepper.scss +190 -0
  216. package/src/sass/components/_timeline.scss +114 -0
  217. package/src/sass/components/_timepicker.scss +2 -2
  218. package/src/sass/components/_toolbar.scss +2 -1
  219. package/src/sass/components/_tooltip.scss +2 -0
  220. package/src/sass/components/_tree.scss +139 -0
  221. package/src/sass/components/forms/_checkboxes.scss +2 -2
  222. package/src/sass/components/forms/_drop-zone.scss +128 -0
  223. package/src/sass/components/forms/_index.scss +2 -0
  224. package/src/sass/components/forms/_input-fields.scss +166 -15
  225. package/src/sass/components/forms/_radio-buttons.scss +2 -2
  226. package/src/sass/components/forms/_rating.scss +165 -0
  227. package/src/sass/components/forms/_slider.scss +51 -29
  228. package/src/sass/components/forms/_switches.scss +3 -3
  229. package/src/sass/tokens/_reference.scss +3 -15
  230. package/src/sass/utilities/_helpers.scss +14 -0
  231. package/src/sass/utilities/_index.scss +2 -0
  232. package/src/sass/utilities/_scroll-area.scss +35 -0
  233. package/src/sass/utilities/_shapes.scss +164 -0
  234. package/src/sass/utilities/_spacing.scss +29 -23
  235. package/src/sass/utilities/_visibility.scss +3 -2
  236. package/dist/js/chunks/chunk-74N6U5JJ.mjs.map +0 -7
  237. package/dist/js/chunks/chunk-7GKXUG4B.mjs.map +0 -7
  238. package/dist/js/chunks/chunk-AYYYWUJ4.mjs.map +0 -7
  239. package/dist/js/chunks/chunk-CDW6WIRT.mjs.map +0 -7
  240. package/dist/js/chunks/chunk-D4UZ4HFN.mjs.map +0 -7
  241. package/dist/js/chunks/chunk-EP3CVKB5.mjs.map +0 -7
  242. package/dist/js/chunks/chunk-GY2Z5CJ2.mjs.map +0 -7
  243. package/dist/js/chunks/chunk-I5KR22BY.mjs.map +0 -7
  244. package/dist/js/chunks/chunk-JKNPQQWY.mjs.map +0 -7
  245. package/dist/js/chunks/chunk-JODJAGFS.mjs.map +0 -7
  246. package/dist/js/chunks/chunk-JR24UB4X.mjs +0 -100
  247. package/dist/js/chunks/chunk-JR24UB4X.mjs.map +0 -7
  248. package/dist/js/chunks/chunk-LZVBJ33S.mjs.map +0 -7
  249. package/dist/js/chunks/chunk-PMBPAFAS.mjs +0 -7
  250. package/dist/js/chunks/chunk-PMBPAFAS.mjs.map +0 -7
  251. package/dist/js/chunks/chunk-TK6PX2GC.mjs.map +0 -7
  252. package/dist/js/chunks/chunk-WWPAPHMA.mjs +0 -1
  253. /package/dist/js/chunks/{chunk-IMUPRRI6.mjs.map → chunk-3VOK6J7U.mjs.map} +0 -0
  254. /package/dist/js/chunks/{chunk-A3BJA7V4.mjs.map → chunk-6WLSDZ4O.mjs.map} +0 -0
  255. /package/dist/js/chunks/{chunk-KR44BSYQ.mjs.map → chunk-DLWYKFEI.mjs.map} +0 -0
  256. /package/dist/js/chunks/{chunk-SLFNPY5M.mjs.map → chunk-EC63CHXU.mjs.map} +0 -0
  257. /package/dist/js/chunks/{chunk-WWPAPHMA.mjs.map → chunk-NQLC3YMW.mjs.map} +0 -0
  258. /package/dist/js/chunks/{chunk-VAS6JQ6P.mjs.map → chunk-PIJ2TAR3.mjs.map} +0 -0
  259. /package/dist/js/chunks/{chunk-PIIAEYAJ.mjs.map → chunk-QDAL4IYN.mjs.map} +0 -0
  260. /package/dist/js/chunks/{chunk-FRB7TOCS.mjs.map → chunk-QV2JAWIZ.mjs.map} +0 -0
  261. /package/dist/js/chunks/{chunk-N3UHGN3N.mjs.map → chunk-QVVEWBOF.mjs.map} +0 -0
  262. /package/dist/js/chunks/{chunk-TYM6U5DY.mjs.map → chunk-UAEAQBRC.mjs.map} +0 -0
  263. /package/dist/js/chunks/{chunk-7UXHSYIA.mjs.map → chunk-UBLRRJ7N.mjs.map} +0 -0
  264. /package/dist/js/chunks/{chunk-JNPIWFJT.mjs.map → chunk-UNEMYWEW.mjs.map} +0 -0
  265. /package/dist/js/chunks/{chunk-XO5WX3TK.mjs.map → chunk-YDCS5S3J.mjs.map} +0 -0
@@ -0,0 +1,157 @@
1
+ @use "../abstracts" as *;
2
+
3
+ // Mixed chart. The same <figure>, <figcaption> and <table> as a line
4
+ // chart; MixedChart draws each series by its header cell's class: `column`
5
+ // as columns from zero, `area` as a line over a fading fill, and anything
6
+ // else as a line. `dashed` dashes a line. A series with `end` is drawn
7
+ // against a second scale, set by data-end-min and data-end-max on the
8
+ // figure. The plot, tooltip, labels and legend come from chart().
9
+ //
10
+ // Columns are full-height spans clipped to their value, as in the column
11
+ // chart, behind an SVG of the lines and areas, as in the line chart.
12
+ // Points on the cursor mark each line; the cursor bands the whole row.
13
+ //
14
+ // Tokens:
15
+ // --md-comp-mixed-chart-height 240px (sparkline 48px)
16
+ // --md-comp-mixed-chart-column-width 50% of each row's width
17
+ // --md-comp-mixed-chart-shape 4px, the column's end radius
18
+ // --md-comp-mixed-chart-line-width 3px (sparkline 2px)
19
+ // --md-comp-mixed-chart-grid-color outline-variant
20
+ // --md-comp-mixed-chart-color-1..4 primary, tertiary, secondary,
21
+ // on-surface-variant
22
+
23
+ @include chart("mixed-chart");
24
+
25
+ .mixed-chart {
26
+ --md-comp-mixed-chart-column-width: 50%;
27
+ --md-comp-mixed-chart-shape: 4px;
28
+ --md-comp-mixed-chart-line-width: 3px;
29
+
30
+ &.sparkline {
31
+ --md-comp-mixed-chart-line-width: 2px;
32
+ }
33
+ }
34
+
35
+ .mixed-chart-plot {
36
+ isolation: isolate;
37
+ }
38
+
39
+ .mixed-chart-marks,
40
+ .mixed-chart-marks > * {
41
+ position: absolute;
42
+ inset: 0;
43
+ }
44
+
45
+ .mixed-chart-marks > svg {
46
+ width: 100%;
47
+ height: 100%;
48
+ overflow: visible;
49
+ }
50
+
51
+ .mixed-chart-columns {
52
+ display: grid;
53
+ grid-auto-columns: minmax(0, 1fr);
54
+ grid-auto-flow: column;
55
+
56
+ // A row: its columns side by side.
57
+ > div {
58
+ display: grid;
59
+ grid-auto-columns: minmax(0, 1fr);
60
+ grid-auto-flow: column;
61
+ gap: 2px;
62
+ justify-self: center;
63
+ width: var(--md-comp-mixed-chart-column-width);
64
+ }
65
+
66
+ > div > span {
67
+ --mixed-chart-ends: var(--md-comp-mixed-chart-shape) var(--md-comp-mixed-chart-shape) 0 0;
68
+
69
+ background-color: var(--mixed-chart-color);
70
+ clip-path: inset(var(--top, 100%) 0 var(--bottom, 0%) round var(--mixed-chart-ends));
71
+
72
+ // A column below zero has its tip at the bottom.
73
+ &.negative {
74
+ --mixed-chart-ends: 0 0 var(--md-comp-mixed-chart-shape) var(--md-comp-mixed-chart-shape);
75
+ }
76
+ }
77
+
78
+ @media (prefers-reduced-motion: no-preference) {
79
+ > div > span {
80
+ transition: clip-path 400ms cubic-bezier(0.2, 0, 0, 1);
81
+
82
+ @starting-style {
83
+ clip-path: inset(var(--zero, 100%) 0 calc(100% - var(--zero, 100%)) round var(--mixed-chart-ends));
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ .mixed-chart-line {
90
+ fill: none;
91
+ stroke: var(--mixed-chart-color);
92
+ stroke-width: var(--md-comp-mixed-chart-line-width);
93
+ stroke-linecap: round;
94
+ stroke-linejoin: round;
95
+ vector-effect: non-scaling-stroke;
96
+ }
97
+
98
+ .mixed-chart-series.dashed .mixed-chart-line {
99
+ stroke-dasharray: 2 8;
100
+ }
101
+
102
+ .mixed-chart-series:not(.area) .mixed-chart-area {
103
+ display: none;
104
+ }
105
+
106
+ .mixed-chart-series stop {
107
+ stop-color: var(--mixed-chart-color);
108
+ stop-opacity: 0;
109
+
110
+ &:first-child {
111
+ stop-opacity: 0.24;
112
+ }
113
+ }
114
+
115
+ // A band behind the highlighted row, with a point over each line. The
116
+ // cursor makes no stacking context, so the band can go behind the marks
117
+ // and the points in front of them.
118
+ .mixed-chart-cursor {
119
+ width: calc(100% / var(--rows, 1));
120
+ margin-left: calc(-50% / var(--rows, 1));
121
+
122
+ &::before {
123
+ content: "";
124
+ position: absolute;
125
+ inset: 0;
126
+ z-index: -1;
127
+ border-radius: var(--md-comp-mixed-chart-shape);
128
+ background-color: color-mix(in srgb, var(--md-sys-color-on-surface) state-opacity("hover"), transparent);
129
+ }
130
+
131
+ > span {
132
+ position: absolute;
133
+ left: 50%;
134
+ z-index: 1;
135
+ width: 10px;
136
+ height: 10px;
137
+ border: 2px solid var(--md-sys-color-surface);
138
+ border-radius: 50%;
139
+ background-color: var(--mixed-chart-color);
140
+ translate: -50% -50%;
141
+ }
142
+
143
+ > .column {
144
+ display: none;
145
+ }
146
+ }
147
+
148
+ @media (forced-colors: active) {
149
+ .mixed-chart-columns > div > span,
150
+ .mixed-chart-cursor > span {
151
+ forced-color-adjust: none;
152
+ }
153
+
154
+ .mixed-chart-cursor::before {
155
+ outline: 1px solid CanvasText;
156
+ }
157
+ }
@@ -53,7 +53,7 @@ $_heading: ":is(h1, h2, h3, h4, h5, h6)";
53
53
  $_title: ":is(#{$_heading}, hgroup)";
54
54
  $_search: ":is(.search-bar, .searchbar)";
55
55
 
56
- header:has(> :is(nav:not(.navigation-bar, .navigation-rail), .bar)) {
56
+ header:has(> #{$_bar}) {
57
57
  --md-comp-top-app-bar-container-color: var(--md-sys-color-surface);
58
58
  --md-comp-top-app-bar-scrolled-container-color: var(--md-sys-color-surface-container);
59
59
  --md-comp-top-app-bar-headline-color: var(--md-sys-color-on-surface);
@@ -494,14 +494,19 @@ header.large.collapsed:has(> #{$_bar}) > #{$_bar} {
494
494
  // from the body (M3 Expressive). The animation only drives the mix
495
495
  // progress; a utility class on the header sets background-color itself
496
496
  // and is not overwritten. Without animation-timeline the bar stays at
497
- // rest (surface), the spec default.
498
- header:has(> :is(nav:not(.navigation-bar, .navigation-rail), .bar)) {
497
+ // rest (surface), the spec default. The @supports guard is load-bearing: an
498
+ // engine that drops animation-timeline runs a 0s animation instead, and
499
+ // fill-mode both holds the scrolled keyframe from the first frame.
500
+ header:has(> #{$_bar}) {
499
501
  position: sticky;
500
502
  top: 0;
501
503
  z-index: 997;
502
- animation: top-app-bar-scroll linear both;
503
- animation-timeline: scroll(root);
504
- animation-range: 0 8px;
504
+
505
+ @supports (animation-timeline: scroll()) {
506
+ animation: top-app-bar-scroll linear both;
507
+ animation-timeline: scroll(root);
508
+ animation-range: 0 8px;
509
+ }
505
510
  }
506
511
 
507
512
  @keyframes top-app-bar-scroll {
@@ -47,6 +47,7 @@
47
47
  padding-bottom: max(6px, env(safe-area-inset-bottom, 0px));
48
48
  background-color: var(--md-comp-nav-bar-container-color);
49
49
  color: var(--md-sys-color-on-surface);
50
+ @include glass(var(--md-comp-nav-bar-container-color));
50
51
 
51
52
  > :is(a, button) {
52
53
  position: relative;
@@ -57,6 +57,7 @@
57
57
  transition: width var(--md-comp-nav-rail-duration) ease,
58
58
  min-width var(--md-comp-nav-rail-duration) ease,
59
59
  padding var(--md-comp-nav-rail-duration) ease;
60
+ @include glass(var(--md-sys-color-surface-container));
60
61
 
61
62
  // Menu toggle.
62
63
  > button:not(.button, .icon-button):first-child {
@@ -282,6 +283,11 @@
282
283
  z-index: 998;
283
284
  @include z-depth("1");
284
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
+
285
291
  &::before {
286
292
  content: "";
287
293
  position: fixed;
@@ -298,6 +304,9 @@
298
304
  z-index: 998;
299
305
  @include z-depth("1");
300
306
 
307
+ background-color: var(--md-sys-color-surface-container);
308
+ backdrop-filter: none;
309
+
301
310
  &::before {
302
311
  content: "";
303
312
  position: fixed;
@@ -140,14 +140,3 @@ footer:not(:has(> nav:only-child)) > .container > small:last-child {
140
140
  }
141
141
  }
142
142
 
143
- // Sticky: pin the footer to the bottom of a short page. Only when the
144
- // landmark is a direct child of body — not a footer nested in a demo.
145
- body:has(> footer:not(:has(> nav:only-child))) {
146
- min-height: 100dvh;
147
- display: flex;
148
- flex-direction: column;
149
- }
150
-
151
- body:has(> footer:not(:has(> nav:only-child))) > main {
152
- flex: 1 0 auto;
153
- }
@@ -0,0 +1,203 @@
1
+ @use "../abstracts" as *;
2
+
3
+ // Pie chart. The same <figure>, <figcaption> and <table> as a line chart;
4
+ // PieChart draws the first value column as slices of the whole, clockwise
5
+ // from the top, with a legend of every row, its cell and its share. The
6
+ // plot, tooltip and legend swatches come from chart(); the plot is a square
7
+ // as wide as --md-comp-pie-chart-height.
8
+ //
9
+ // The slices are SVG in a -50 to 50 box with a radius of 46, under a mask
10
+ // whose lines cut the gaps and whose circle, scaled here, cuts the donut's
11
+ // hole. The value labels and the tooltip sit on a slice's middle from the
12
+ // --turn PieChart sets, a fraction of a turn clockwise from the top.
13
+ //
14
+ // Modifiers: .donut cuts a hole and shows a <tfoot> total in it, .values
15
+ // writes each slice's share on it, .sparkline is a small pie with no
16
+ // legend or tooltip.
17
+ //
18
+ // Tokens:
19
+ // --md-comp-pie-chart-height 240px, the pie's diameter (sparkline 48px)
20
+ // --md-comp-pie-chart-hole 0.6, the donut hole's share of the diameter
21
+ // --md-comp-pie-chart-gap 1.5, the gap between slices in hundredths
22
+ // of the plot's width
23
+ // --md-comp-pie-chart-color-1..6 primary, tertiary, secondary,
24
+ // on-surface-variant, primary-container,
25
+ // tertiary-container
26
+ // --md-comp-pie-chart-on-color-1..6 on-primary, on-tertiary, on-secondary,
27
+ // surface, on-primary-container,
28
+ // on-tertiary-container; .values text
29
+
30
+ @include chart("pie-chart");
31
+
32
+ .pie-chart {
33
+ --md-comp-pie-chart-hole: 0.6;
34
+ --md-comp-pie-chart-gap: 1.5;
35
+ --md-comp-pie-chart-color-5: var(--md-sys-color-primary-container);
36
+ --md-comp-pie-chart-color-6: var(--md-sys-color-tertiary-container);
37
+ --md-comp-pie-chart-on-color-1: var(--md-sys-color-on-primary);
38
+ --md-comp-pie-chart-on-color-2: var(--md-sys-color-on-tertiary);
39
+ --md-comp-pie-chart-on-color-3: var(--md-sys-color-on-secondary);
40
+ --md-comp-pie-chart-on-color-4: var(--md-sys-color-surface);
41
+ --md-comp-pie-chart-on-color-5: var(--md-sys-color-on-primary-container);
42
+ --md-comp-pie-chart-on-color-6: var(--md-sys-color-on-tertiary-container);
43
+ // Where labels and the tooltip sit, as a share of the radius.
44
+ --pie-chart-label-at: 0.62;
45
+
46
+ gap: 16px;
47
+
48
+ &.donut {
49
+ // The middle of the ring.
50
+ --pie-chart-label-at: calc((1 + var(--md-comp-pie-chart-hole)) / 2);
51
+ }
52
+ }
53
+
54
+ @for $i from 1 through 6 {
55
+ .pie-chart [data-series="#{$i}"] {
56
+ --pie-chart-color: var(--md-comp-pie-chart-color-#{$i});
57
+ --pie-chart-on-color: var(--md-comp-pie-chart-on-color-#{$i});
58
+ }
59
+ }
60
+
61
+ .pie-chart-plot {
62
+ width: min(100%, var(--md-comp-pie-chart-height));
63
+ height: auto;
64
+ aspect-ratio: 1;
65
+ margin-inline: auto;
66
+ border: 0;
67
+ border-radius: 50%;
68
+ background: none;
69
+ }
70
+
71
+ .pie-chart-pie {
72
+ position: absolute;
73
+ inset: 0;
74
+
75
+ > svg {
76
+ display: block;
77
+ width: 100%;
78
+ height: 100%;
79
+ }
80
+ }
81
+
82
+ // The origin of an SVG transform is the box's middle, (0, 0).
83
+ .pie-chart-hole {
84
+ transform: scale(0);
85
+ }
86
+
87
+ .pie-chart.donut .pie-chart-hole {
88
+ transform: scale(var(--md-comp-pie-chart-hole));
89
+ }
90
+
91
+ .pie-chart-gaps {
92
+ stroke-width: var(--md-comp-pie-chart-gap);
93
+ }
94
+
95
+ .pie-chart-slice {
96
+ fill: var(--pie-chart-color);
97
+
98
+ // GROWN in pieChart.ts.
99
+ &.active {
100
+ transform: scale(1.06);
101
+ }
102
+
103
+ @media (prefers-reduced-motion: no-preference) {
104
+ transition: transform 200ms cubic-bezier(0.2, 0, 0, 1), opacity 400ms cubic-bezier(0.2, 0, 0, 1);
105
+
106
+ @starting-style {
107
+ opacity: 0;
108
+ transform: scale(0.8);
109
+ }
110
+ }
111
+ }
112
+
113
+ .pie-chart-values > span,
114
+ .pie-chart-tooltip {
115
+ --pie-chart-angle: calc(var(--turn, 0) * 1turn);
116
+
117
+ position: absolute;
118
+ left: calc(50% + sin(var(--pie-chart-angle)) * var(--pie-chart-label-at) * 46%);
119
+ top: calc(50% - cos(var(--pie-chart-angle)) * var(--pie-chart-label-at) * 46%);
120
+ }
121
+
122
+ .pie-chart-values > span {
123
+ translate: -50% -50%;
124
+ color: var(--pie-chart-on-color);
125
+ @include typescale("label-medium");
126
+ font-variant-numeric: tabular-nums;
127
+ white-space: nowrap;
128
+ }
129
+
130
+ .pie-chart-tooltip {
131
+ translate: 12px -50%;
132
+
133
+ &.end {
134
+ translate: calc(-100% - 12px) -50%;
135
+ }
136
+ }
137
+
138
+ .pie-chart-total {
139
+ position: absolute;
140
+ inset: 0;
141
+ display: none;
142
+ flex-direction: column;
143
+ align-items: center;
144
+ justify-content: center;
145
+ text-align: center;
146
+
147
+ > * {
148
+ max-width: calc(80% * var(--md-comp-pie-chart-hole));
149
+ overflow-wrap: anywhere;
150
+ }
151
+
152
+ > strong {
153
+ color: var(--md-sys-color-on-surface);
154
+ @include typescale("headline-small");
155
+ }
156
+
157
+ > span {
158
+ color: var(--md-sys-color-on-surface-variant);
159
+ @include typescale("body-small");
160
+ }
161
+ }
162
+
163
+ .pie-chart.donut .pie-chart-total {
164
+ display: flex;
165
+ }
166
+
167
+ // One row per slice: swatch, name, cell and share in aligned columns.
168
+ .pie-chart-legend {
169
+ display: grid;
170
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
171
+ align-items: center;
172
+ gap: 8px;
173
+
174
+ > li {
175
+ display: contents;
176
+ }
177
+
178
+ > li > span:first-child {
179
+ overflow: hidden;
180
+ text-overflow: ellipsis;
181
+ white-space: nowrap;
182
+ }
183
+
184
+ > li > span:not(:first-child) {
185
+ text-align: end;
186
+ font-variant-numeric: tabular-nums;
187
+ }
188
+
189
+ > li > span:nth-child(2) {
190
+ color: var(--md-sys-color-on-surface);
191
+ font-weight: 500;
192
+ }
193
+ }
194
+
195
+ .pie-chart.sparkline .pie-chart-plot {
196
+ margin-inline: 0;
197
+ }
198
+
199
+ @media (forced-colors: active) {
200
+ .pie-chart-pie {
201
+ forced-color-adjust: none;
202
+ }
203
+ }
@@ -0,0 +1,112 @@
1
+ @use "../abstracts" as *;
2
+
3
+ // Popover. A .popover is a native [popover] panel opened by the button that
4
+ // names it with popovertarget (or commandfor). The browser owns opening,
5
+ // light dismiss, Escape, the top layer and the button's expanded state; CSS
6
+ // anchor positioning places the panel against that button, so there is no
7
+ // JavaScript.
8
+ //
9
+ // It looks like an M3 rich tooltip, but it is a disclosure: it opens on
10
+ // press, stays open while the user reads or acts, and can hold links and
11
+ // buttons. A small one behind an info button is a toggletip.
12
+ //
13
+ // Placement (the panel flips to the other side when it would not fit):
14
+ // (default) below, start edges aligned
15
+ // .top above, start edges aligned
16
+ // .start before the button, centered on it
17
+ // .end after the button, centered on it
18
+ //
19
+ // Tokens:
20
+ // --md-comp-popover-container-color surface-container
21
+ // --md-comp-popover-shape 12px
22
+ // --md-comp-popover-padding 12px 16px
23
+ // --md-comp-popover-max-width 320px
24
+ // --md-comp-popover-gap 4px (from the button)
25
+
26
+ .popover {
27
+ --md-comp-popover-container-color: var(--md-sys-color-surface-container);
28
+ --md-comp-popover-shape: 12px;
29
+ --md-comp-popover-padding: 12px 16px;
30
+ --md-comp-popover-max-width: 320px;
31
+ --md-comp-popover-gap: 4px;
32
+
33
+ box-sizing: border-box;
34
+ width: max-content;
35
+ max-width: min(var(--md-comp-popover-max-width), calc(100vw - 16px));
36
+ inset: auto;
37
+ margin: var(--md-comp-popover-gap) 0;
38
+ padding: var(--md-comp-popover-padding);
39
+ overflow: visible;
40
+ border: 0;
41
+ border-radius: var(--md-comp-popover-shape);
42
+ background-color: var(--md-comp-popover-container-color);
43
+ color: var(--md-sys-color-on-surface-variant);
44
+ @include z-depth("2");
45
+ @include typescale("body-medium");
46
+
47
+ position-area: block-end span-inline-end;
48
+ position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline;
49
+
50
+ opacity: 0;
51
+ transition:
52
+ opacity 150ms ease-out,
53
+ display 150ms allow-discrete,
54
+ overlay 150ms allow-discrete;
55
+ @include glass(var(--md-comp-popover-container-color));
56
+
57
+ &:popover-open {
58
+ opacity: 1;
59
+
60
+ @starting-style {
61
+ opacity: 0;
62
+ }
63
+ }
64
+
65
+ &.top {
66
+ position-area: block-start span-inline-end;
67
+ }
68
+
69
+ &.start,
70
+ &.end {
71
+ margin: 0 var(--md-comp-popover-gap);
72
+ }
73
+
74
+ &.start {
75
+ position-area: center inline-start;
76
+ }
77
+
78
+ &.end {
79
+ position-area: center inline-end;
80
+ }
81
+
82
+ > :is(h1, h2, h3, h4, h5, h6) {
83
+ margin: 0 0 4px;
84
+ color: var(--md-sys-color-on-surface-variant);
85
+ @include typescale("title-small");
86
+ }
87
+
88
+ > p {
89
+ margin: 0;
90
+ }
91
+
92
+ > p + p {
93
+ margin-block-start: 8px;
94
+ }
95
+
96
+ // Text buttons carry their own inset, so the row starts under the text.
97
+ > .popover-actions {
98
+ display: flex;
99
+ flex-wrap: wrap;
100
+ gap: 8px;
101
+ margin: 12px 0 -4px;
102
+ margin-inline-start: -12px;
103
+ }
104
+
105
+ @media (prefers-reduced-motion: reduce) {
106
+ transition: none;
107
+ }
108
+
109
+ @media (forced-colors: active) {
110
+ border: 1px solid CanvasText;
111
+ }
112
+ }
@@ -18,7 +18,7 @@
18
18
  // --md-comp-progress-circular-thickness 4px
19
19
 
20
20
  // M3 names this component "Progress indicators", linear and circular. The
21
- // class is `.progress`; `.preloader` is the Materialize name for the circular
21
+ // class is `.progress`; `.preloader` is the older name for the circular
22
22
  // one and stays as an alias, as does `.progress.circular`.
23
23
  .progress,
24
24
  .preloader {
@@ -71,12 +71,24 @@ progress.progress {
71
71
  border-radius: var(--md-comp-progress-shape);
72
72
  }
73
73
 
74
- &:indeterminate::-webkit-progress-value,
74
+ // Firefox draws no ::before/::after on <progress> and paints the track as the
75
+ // element's own background, so its indeterminate bar is the native one. It
76
+ // places that bar from the physical left and reads only margin-left, which is
77
+ // margin-inline-end in RTL, so both inline margins move. Keep this out of any
78
+ // -webkit- selector list: Chromium drops a list naming a pseudo-element it
79
+ // does not know.
75
80
  &:indeterminate::-moz-progress-bar {
76
- background-color: transparent;
81
+ width: 40%;
82
+ margin-inline-end: 60%;
83
+ animation: progress-indeterminate-moz 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
77
84
  }
78
85
  }
79
86
 
87
+ @keyframes progress-indeterminate-moz {
88
+ from { margin-inline-start: -40%; margin-inline-end: 100%; }
89
+ to { margin-inline-start: 100%; margin-inline-end: -40%; }
90
+ }
91
+
80
92
  .progress > .determinate {
81
93
  position: absolute;
82
94
  inset-block: 0;
@@ -107,10 +119,12 @@ progress.progress {
107
119
  }
108
120
  }
109
121
 
110
- .progress > .indeterminate,
111
- progress.progress:indeterminate {
122
+ .progress > .indeterminate {
112
123
  background-color: transparent;
124
+ }
113
125
 
126
+ .progress > .indeterminate,
127
+ progress.progress:indeterminate {
114
128
  &::before,
115
129
  &::after {
116
130
  content: "";
@@ -147,7 +161,7 @@ progress.progress:indeterminate {
147
161
  // ---------------------------------------------------------------------------
148
162
 
149
163
  // The circular indicator. `.progress.circular` is the M3-aligned name;
150
- // `.preloader` is the Materialize one and still works.
164
+ // `.preloader` remains a compatibility alias.
151
165
  :is(.preloader, .progress.circular) {
152
166
  box-sizing: border-box;
153
167
  display: inline-block;
@@ -218,6 +232,7 @@ progress.progress:indeterminate {
218
232
  progress.progress:indeterminate::-moz-progress-bar {
219
233
  background-color: CanvasText;
220
234
  width: 40%;
235
+ animation: none;
221
236
  }
222
237
 
223
238
  :is(.preloader, .progress.circular) {
@@ -254,4 +269,8 @@ progress.progress:indeterminate {
254
269
  .preloader {
255
270
  transform: none;
256
271
  }
272
+
273
+ progress.progress:indeterminate::-moz-progress-bar {
274
+ animation: none;
275
+ }
257
276
  }