@expressivecss/expressive 0.12.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 (171) hide show
  1. package/CHANGELOG.md +231 -1
  2. package/README.md +37 -1
  3. package/dist/css/expressive.css +5111 -36
  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-HLDXZ7XB.mjs → chunk-3CLXLPYS.mjs} +2 -2
  11. package/dist/js/chunks/chunk-3DHK5CZU.mjs +105 -0
  12. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +7 -0
  13. package/dist/js/chunks/chunk-4PWAPV6F.mjs +7 -0
  14. package/dist/js/chunks/chunk-4PWAPV6F.mjs.map +7 -0
  15. package/dist/js/chunks/{chunk-HB6IW7QQ.mjs → chunk-55IA2XUC.mjs} +2 -2
  16. package/dist/js/chunks/chunk-CCWDV5CR.mjs +292 -0
  17. package/dist/js/chunks/chunk-CCWDV5CR.mjs.map +7 -0
  18. package/dist/js/chunks/chunk-DTKR54I6.mjs +270 -0
  19. package/dist/js/chunks/chunk-DTKR54I6.mjs.map +7 -0
  20. package/dist/js/chunks/chunk-GVGT6MIU.mjs +47 -0
  21. package/dist/js/chunks/chunk-GVGT6MIU.mjs.map +7 -0
  22. package/dist/js/chunks/chunk-HKT2S7VM.mjs +48 -0
  23. package/dist/js/chunks/chunk-HKT2S7VM.mjs.map +7 -0
  24. package/dist/js/chunks/chunk-K4CJCRGE.mjs +262 -0
  25. package/dist/js/chunks/chunk-K4CJCRGE.mjs.map +7 -0
  26. package/dist/js/chunks/chunk-LNCCYGPC.mjs +163 -0
  27. package/dist/js/chunks/chunk-LNCCYGPC.mjs.map +7 -0
  28. package/dist/js/chunks/chunk-NQLC3YMW.mjs +1 -0
  29. package/dist/js/chunks/chunk-O5XPWXIQ.mjs +406 -0
  30. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +7 -0
  31. package/dist/js/chunks/chunk-P3G3QHII.mjs +166 -0
  32. package/dist/js/chunks/chunk-P3G3QHII.mjs.map +7 -0
  33. package/dist/js/chunks/{chunk-H2WA4XHH.mjs → chunk-PLYXLSH3.mjs} +4 -4
  34. package/dist/js/chunks/chunk-QKWPQK5N.mjs +179 -0
  35. package/dist/js/chunks/chunk-QKWPQK5N.mjs.map +7 -0
  36. package/dist/js/chunks/chunk-RHRQKTTX.mjs +139 -0
  37. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +7 -0
  38. package/dist/js/chunks/chunk-SPETGK25.mjs +59 -0
  39. package/dist/js/chunks/chunk-SPETGK25.mjs.map +7 -0
  40. package/dist/js/chunks/{chunk-YSBCHYXP.mjs → chunk-U2OTHOTI.mjs} +116 -12
  41. package/dist/js/chunks/chunk-U2OTHOTI.mjs.map +7 -0
  42. package/dist/js/chunks/chunk-VTLBW7QS.mjs +124 -0
  43. package/dist/js/chunks/chunk-VTLBW7QS.mjs.map +7 -0
  44. package/dist/js/chunks/{chunk-RFZZCYVU.mjs → chunk-XGHORT7J.mjs} +2 -2
  45. package/dist/js/chunks/{chunk-HNFSMIBY.mjs → chunk-XH6BEEMY.mjs} +69 -16
  46. package/dist/js/chunks/chunk-XH6BEEMY.mjs.map +7 -0
  47. package/dist/js/expressive.cjs +2209 -32
  48. package/dist/js/expressive.cjs.map +4 -4
  49. package/dist/js/expressive.js +2209 -32
  50. package/dist/js/expressive.js.map +4 -4
  51. package/dist/js/expressive.min.js +10 -10
  52. package/dist/js/expressive.min.js.map +4 -4
  53. package/dist/js/expressive.mjs +68 -20
  54. package/dist/js/expressive.mjs.map +1 -1
  55. package/dist/js/internal/behaviors/forms.mjs +1 -1
  56. package/dist/js/internal/components/autocomplete.mjs +2 -2
  57. package/dist/js/internal/components/barChart.mjs +10 -0
  58. package/dist/js/internal/components/barChart.mjs.map +7 -0
  59. package/dist/js/internal/components/chips.mjs +3 -3
  60. package/dist/js/internal/components/columnChart.mjs +9 -0
  61. package/dist/js/internal/components/columnChart.mjs.map +7 -0
  62. package/dist/js/internal/components/commandPalette.mjs +9 -0
  63. package/dist/js/internal/components/commandPalette.mjs.map +7 -0
  64. package/dist/js/internal/components/datepicker.mjs +3 -3
  65. package/dist/js/internal/components/heatmapChart.mjs +9 -0
  66. package/dist/js/internal/components/heatmapChart.mjs.map +7 -0
  67. package/dist/js/internal/components/index.mjs +65 -17
  68. package/dist/js/internal/components/lineChart.mjs +12 -0
  69. package/dist/js/internal/components/lineChart.mjs.map +7 -0
  70. package/dist/js/internal/components/menu.mjs +1 -1
  71. package/dist/js/internal/components/messageScroller.mjs +9 -0
  72. package/dist/js/internal/components/messageScroller.mjs.map +7 -0
  73. package/dist/js/internal/components/mixedChart.mjs +10 -0
  74. package/dist/js/internal/components/mixedChart.mjs.map +7 -0
  75. package/dist/js/internal/components/pieChart.mjs +9 -0
  76. package/dist/js/internal/components/pieChart.mjs.map +7 -0
  77. package/dist/js/internal/components/questionnaire.mjs +9 -0
  78. package/dist/js/internal/components/questionnaire.mjs.map +7 -0
  79. package/dist/js/internal/components/radarChart.mjs +9 -0
  80. package/dist/js/internal/components/radarChart.mjs.map +7 -0
  81. package/dist/js/internal/components/radialChart.mjs +9 -0
  82. package/dist/js/internal/components/radialChart.mjs.map +7 -0
  83. package/dist/js/internal/components/registry.mjs +23 -11
  84. package/dist/js/internal/components/richTextEditor.mjs +9 -0
  85. package/dist/js/internal/components/richTextEditor.mjs.map +7 -0
  86. package/dist/js/internal/components/select.mjs +2 -2
  87. package/dist/js/modular.mjs +68 -20
  88. package/dist/types/behaviors/forms.d.ts +22 -0
  89. package/dist/types/components/barChart.d.ts +24 -0
  90. package/dist/types/components/columnChart.d.ts +21 -0
  91. package/dist/types/components/commandPalette.d.ts +96 -0
  92. package/dist/types/components/heatmapChart.d.ts +49 -0
  93. package/dist/types/components/index.d.ts +12 -0
  94. package/dist/types/components/lineChart.d.ts +134 -0
  95. package/dist/types/components/menu.d.ts +31 -0
  96. package/dist/types/components/messageScroller.d.ts +111 -0
  97. package/dist/types/components/mixedChart.d.ts +25 -0
  98. package/dist/types/components/pieChart.d.ts +40 -0
  99. package/dist/types/components/questionnaire.d.ts +96 -0
  100. package/dist/types/components/radarChart.d.ts +39 -0
  101. package/dist/types/components/radialChart.d.ts +45 -0
  102. package/dist/types/components/registry.d.ts +44 -0
  103. package/dist/types/components/richTextEditor.d.ts +71 -0
  104. package/dist/types/modular.d.ts +10 -1
  105. package/package.json +4 -1
  106. package/src/sass/README.md +3 -6
  107. package/src/sass/abstracts/_index.scss +1 -1
  108. package/src/sass/abstracts/_mixins.scss +226 -0
  109. package/src/sass/abstracts/_variables.scss +14 -0
  110. package/src/sass/base/_typography.scss +45 -0
  111. package/src/sass/components/_accordion.scss +161 -0
  112. package/src/sass/components/_aura.scss +119 -0
  113. package/src/sass/components/_avatar.scss +86 -0
  114. package/src/sass/components/_bar-chart.scss +285 -0
  115. package/src/sass/components/_bottom-sheet.scss +1 -0
  116. package/src/sass/components/_button-groups.scss +13 -3
  117. package/src/sass/components/_cards.scss +16 -13
  118. package/src/sass/components/_column-chart.scss +134 -0
  119. package/src/sass/components/_command-palette.scss +140 -0
  120. package/src/sass/components/_countdown.scss +89 -0
  121. package/src/sass/components/_data-table.scss +188 -0
  122. package/src/sass/components/_dialog.scss +1 -0
  123. package/src/sass/components/_empty-state.scss +78 -0
  124. package/src/sass/components/_expanding-card.scss +3 -0
  125. package/src/sass/components/_heatmap-chart.scss +156 -0
  126. package/src/sass/components/_index.scss +27 -0
  127. package/src/sass/components/_kpi.scss +162 -0
  128. package/src/sass/components/_line-chart.scss +102 -0
  129. package/src/sass/components/_marquee.scss +111 -0
  130. package/src/sass/components/_menu.scss +10 -0
  131. package/src/sass/components/_message-scroller.scss +66 -0
  132. package/src/sass/components/_message.scss +202 -0
  133. package/src/sass/components/_mixed-chart.scss +157 -0
  134. package/src/sass/components/_navigation-bar.scss +1 -0
  135. package/src/sass/components/_navigation-rail.scss +9 -0
  136. package/src/sass/components/_pie-chart.scss +203 -0
  137. package/src/sass/components/_popover.scss +112 -0
  138. package/src/sass/components/_questionnaire.scss +144 -0
  139. package/src/sass/components/_radar-chart.scss +205 -0
  140. package/src/sass/components/_radial-chart.scss +174 -0
  141. package/src/sass/components/_rich-text-editor.scss +99 -0
  142. package/src/sass/components/_search.scss +1 -0
  143. package/src/sass/components/_side-sheet.scss +1 -0
  144. package/src/sass/components/_skeleton.scss +81 -0
  145. package/src/sass/components/_snackbar.scss +1 -0
  146. package/src/sass/components/_stat.scss +86 -0
  147. package/src/sass/components/_stepper.scss +190 -0
  148. package/src/sass/components/_timeline.scss +114 -0
  149. package/src/sass/components/_toolbar.scss +1 -0
  150. package/src/sass/components/_tooltip.scss +2 -0
  151. package/src/sass/components/_tree.scss +139 -0
  152. package/src/sass/components/forms/_drop-zone.scss +128 -0
  153. package/src/sass/components/forms/_index.scss +2 -0
  154. package/src/sass/components/forms/_input-fields.scss +133 -2
  155. package/src/sass/components/forms/_rating.scss +165 -0
  156. package/src/sass/tokens/_reference.scss +3 -15
  157. package/src/sass/utilities/_index.scss +2 -0
  158. package/src/sass/utilities/_scroll-area.scss +35 -0
  159. package/src/sass/utilities/_shapes.scss +164 -0
  160. package/dist/js/chunks/chunk-G3I5H2U3.mjs +0 -7
  161. package/dist/js/chunks/chunk-G3I5H2U3.mjs.map +0 -7
  162. package/dist/js/chunks/chunk-HNFSMIBY.mjs.map +0 -7
  163. package/dist/js/chunks/chunk-PSSHQWCX.mjs +0 -100
  164. package/dist/js/chunks/chunk-PSSHQWCX.mjs.map +0 -7
  165. package/dist/js/chunks/chunk-WWPAPHMA.mjs +0 -1
  166. package/dist/js/chunks/chunk-YSBCHYXP.mjs.map +0 -7
  167. /package/dist/js/chunks/{chunk-HLDXZ7XB.mjs.map → chunk-3CLXLPYS.mjs.map} +0 -0
  168. /package/dist/js/chunks/{chunk-HB6IW7QQ.mjs.map → chunk-55IA2XUC.mjs.map} +0 -0
  169. /package/dist/js/chunks/{chunk-WWPAPHMA.mjs.map → chunk-NQLC3YMW.mjs.map} +0 -0
  170. /package/dist/js/chunks/{chunk-H2WA4XHH.mjs.map → chunk-PLYXLSH3.mjs.map} +0 -0
  171. /package/dist/js/chunks/{chunk-RFZZCYVU.mjs.map → chunk-XGHORT7J.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,234 @@ the format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.13.1] - 2026-10-08
9
+
10
+ ### Fixed
11
+
12
+ - The capability roadmap's source links point at a commit on `master`. The
13
+ 0.13.0 links pointed at a pull request commit that no longer exists, which
14
+ stopped the 0.13.0 release before it reached npm. 0.13.1 contains the
15
+ 0.13.0 changes below.
16
+
17
+ ## [0.13.0] - 2026-10-08
18
+
19
+ ### Added
20
+
21
+ - `.rich-text-editor` turns a `<textarea>` into a Tiptap editor with a
22
+ docked toolbar. The page installs Tiptap and passes its `Editor` class and
23
+ extensions to `RichTextEditor.init()`; ExpressiveCSS does not bundle it.
24
+ A toolbar button's `data-command` names a Tiptap command and
25
+ `data-attributes` holds its JSON argument. Buttons are disabled when their
26
+ command cannot run, and `toggle` commands set `aria-pressed` and `.active`.
27
+ The textarea keeps the editor's HTML, so it submits with its form, and
28
+ names the editable textbox.
29
+ - `.marquee` scrolls a row of logos, images or text without end. Write
30
+ the items in two `.marquee-content` groups, the second marked
31
+ `aria-hidden="true"`. `vertical`, `reverse` and `fade` change the
32
+ direction and edges, `paused` stops it, and hover or focus inside pauses
33
+ it. Reduced motion stops the scroll and hides the copy. CSS only.
34
+ - `<mark>` highlights part of a text in the tertiary container colors,
35
+ with no padding so a match inside a word keeps its spacing.
36
+ `::highlight(mark)` paints ranges registered with the CSS Custom
37
+ Highlight API the same way.
38
+ - `.message-scroller` scrolls a conversation. While the reader is at the
39
+ end it follows streamed replies, and scrolling up releases it. A message
40
+ appended with `data-scroll-anchor` starts a turn and is scrolled to the
41
+ top, leaving 64px of the previous message in view. Messages added above
42
+ keep the reader's place. A transcript can open at its end, its start or
43
+ its last turn, `scrollToMessage(id)` jumps to any message, and an optional
44
+ `.message-scroller-button` scrolls to the latest message.
45
+ - `form.questionnaire` asks one question at a time. Each `<fieldset>` is a
46
+ question with radio, checkbox or text answers, and footer buttons marked
47
+ `value="previous"`, `"skip"` and `"next"` move between them. The component
48
+ adds a progress row, checks each question with the browser's validation
49
+ (`data-required` asks for at least one checkbox), shows the question's
50
+ `.questionnaire-error`, offers Skip on optional questions and leaves out
51
+ disabled ones so pages can branch. The form submits normally, and without
52
+ JavaScript every question shows at once.
53
+ - KPI component: `article.kpi` is a card for one key figure, with its
54
+ label and value in a `<dl>`, a `.kpi-trend` chip that takes `up`, `down`
55
+ and `negative`, an optional `.kpi-icon`, a `.kpi-actions` corner button,
56
+ a sparkline chart, a progress bar and a `.kpi-footer`. A `negative` trend
57
+ also turns the sparkline to the error color. CSS only.
58
+ - `.countdown` shows a whole number from 0 to 999 and rolls its digits up
59
+ or down when `--md-comp-countdown-value` changes. The element's text is
60
+ the value screen readers read. `--md-comp-countdown-digits` pads with
61
+ leading zeros, and reduced motion turns the roll off. CSS only.
62
+ - `.aura` wraps one button, card or panel and runs a light around a ring
63
+ just outside it, to mark the one thing a screen most needs the user to
64
+ see. `dual`, `rainbow` and `glow` change the light, and tokens set its
65
+ color, width, corners and speed. The ring is fully rounded around a
66
+ button, stops turning under reduced motion and stays out of the
67
+ accessibility tree.
68
+ - The agent skill gains an `expressivecss-charts` guide for building charts
69
+ and chart dashboards. It covers choosing a chart for the question asked,
70
+ table cells the charts can read, chart cards with stats, tokens,
71
+ sparklines and redrawing. Its recipes cover a period switch, a KPI row,
72
+ a donut with its total, a budget meter, a gauge, a heatmap and a
73
+ dashboard section. The root skill routes chart work to it.
74
+ - `.mixed-chart` draws a `<figure>`'s data table as columns, lines and
75
+ areas on one plot, chosen by each series header's class: `column`,
76
+ `area`, or a line by default, with `dashed` lines. A series with `end`
77
+ is drawn against a second scale, set by `data-end-min` and
78
+ `data-end-max`, for values in other units. The tooltip, cursor points,
79
+ legend and `sparkline` work as in the line chart.
80
+ - `.radial-chart` draws a `<figure>`'s data table as rings, one per row,
81
+ filled clockwise from the top as a share of `data-max` (100 by default),
82
+ with a legend, tracks, and a tooltip that follows the pointer across the
83
+ rings or the arrow keys. `gauge` draws half circles, a `<tfoot>` row shows
84
+ in the middle, and `sparkline` is a small chart. Ring width, gap and track
85
+ color are tokens.
86
+ - `.heatmap-chart` draws a `<figure>`'s data table as a grid of cells shaded
87
+ from the lowest value to the highest, with the row headers beside it, the
88
+ column headers below and a scale naming the lowest and highest cells. A
89
+ tooltip follows the pointer or the arrow keys from cell to cell. `values`
90
+ writes each cell's text on it in black or white, whichever reads on the
91
+ shade; `data-label` shortens or hides a header on the grid; `data-min` and
92
+ `data-max` fix the scale.
93
+ - `.radar-chart` draws a `<figure>`'s data table as shapes on spokes from a
94
+ shared middle, one spoke per row clockwise from the top and one shape per
95
+ series, with each row's label past its spoke, a legend, and a tooltip that
96
+ follows the pointer round the chart or the arrow keys. `area` fills the
97
+ shapes, `points` marks each value, and `sparkline` is a small chart.
98
+ - `.pie-chart` draws a `<figure>`'s data table as slices of a whole,
99
+ clockwise from the top, with a legend of each row's cell and share and a
100
+ tooltip that follows the pointer round the pie or the arrow keys. `donut`
101
+ cuts a hole and shows a `<tfoot>` total in it, `values` writes each share
102
+ on its slice, and `sparkline` is a small pie. Further value columns show in
103
+ the tooltip.
104
+ - `.bar-chart` draws a `<figure>`'s data table as horizontal bars from zero,
105
+ with each row's label beside it, a legend, and a highlight band and tooltip
106
+ that follow the pointer or the up and down arrows. The plot grows with its
107
+ rows. `stacked`, `split`, `track`, `values` and `sparkline` vary it: `values`
108
+ writes each cell from its bar's base, running past a short bar, and a
109
+ stacked, split row on a track with `data-max` is a meter. It shares the column chart's runtime and markup, and
110
+ the bars grow leftwards in a right-to-left page.
111
+ - Line, column and bar charts: a tap on a touch screen shows the tapped row
112
+ instead of the first, keeps it when the finger lifts, and hides it when the
113
+ page scrolls.
114
+ - `.column-chart` draws a `<figure>`'s data table as columns from zero, one
115
+ group per row, with x labels, a legend, and a highlight band and tooltip that
116
+ follow the pointer or the arrow keys. `stacked`, `fade`, `track` and
117
+ `sparkline` vary it, and negative values hang below zero. It shares the line
118
+ chart's runtime, markup and accessibility; the table stays as the text
119
+ alternative and the no-JavaScript fallback.
120
+ - Line chart: `stacked` draws each series on the total of the ones before it
121
+ and fills the band between them, from a zero baseline. The tooltip still
122
+ shows each cell, and an empty cell breaks the series above it. The docs add chart card layouts with a period switch, a
123
+ compact chart and a side sparkline.
124
+
125
+ - Message component: `.message` lays out one message in a conversation with an
126
+ optional `.message-avatar`, `.message-header` and `.message-footer` around a
127
+ `.message-bubble`. `end` moves a message to the sender's side,
128
+ `.message-group` stacks consecutive messages and joins their corners, and
129
+ `.message-bubble.outlined` holds attachments. CSS only.
130
+ - Accordion component: `.accordion` stacks native `<details>` items as joined
131
+ tiles with a turning chevron. A shared `name` keeps one item open, and
132
+ opening animates where the engine can transition to `auto` height. CSS only.
133
+ - Data table component: `.data-table` wraps a native `<table>` in a scrolling,
134
+ outlined container with a sticky header row. `numeric` aligns number columns,
135
+ `dense` shortens rows, `aria-sort` on a header draws its sort arrow, and a
136
+ checked checkbox in the first cell selects the row. The page owns sorting.
137
+ CSS only.
138
+ - Avatar component: `.avatar` shows a person as a circular image, initials or
139
+ icon in `small`, default and `large` sizes. `.avatar-group` overlaps avatars
140
+ with a surface ring. CSS only.
141
+ - Skeleton component: `.skeleton` draws placeholder boxes, `text` lines and
142
+ `circle` shapes with a shimmer that stops under reduced motion. CSS only.
143
+ - Empty state component: `.empty-state` centers an icon or illustration, a
144
+ heading, supporting text and an `.empty-state-actions` row. CSS only.
145
+ - Popover component: `.popover` styles a native `[popover]` panel opened by a
146
+ `popovertarget` button and places it with CSS anchor positioning, below the
147
+ button by default or with `top`, `start` and `end`, flipping to stay on
148
+ screen. Use it for toggletips and small action panels. CSS only.
149
+ - Stepper component: `ol.stepper` numbers a fixed sequence of steps.
150
+ `aria-current="step"`, `complete` and `invalid` mark each step's state, and
151
+ the complete and invalid states are spoken through translatable tokens.
152
+ `vertical` stacks the steps and takes a `.stepper-content` panel. CSS only.
153
+ - Drop zone component: `.drop-zone` stretches a native file input over a large
154
+ labelled target. The Forms behavior marks a drag with `dragover` and lists
155
+ each chosen file's name and size in `.drop-zone-files`.
156
+ - Text fields take a trailing `.icon-button.suffix` as a clickable control.
157
+ `password-toggle` on that button shows and hides the password and reports
158
+ its state with `aria-pressed`. `input.otp` draws one native input as a row of
159
+ one-time code cells.
160
+ - Menu `contextMenu` option, also set by `data-context-menu` on the trigger:
161
+ the trigger is a region, and its menu opens at the pointer on right-click,
162
+ long-press, the menu key or Shift+F10, flipping to stay on screen.
163
+ - Timeline component: `ol.timeline` marks each event with a dot joined to the
164
+ next by a line, or with a leading icon in a tonal circle. CSS only.
165
+ - Stat component: `dl.stats` lays out key figures as wrapping tiles, with a
166
+ `.stat-change` line that takes `up`, `down` and `negative`. CSS only.
167
+ - Tree component: `ul.tree` nests lists of native disclosures and links with
168
+ guide lines, turning chevrons and an `aria-current` row. It takes no tree
169
+ role. CSS only.
170
+ - Rating component: `fieldset.rating` draws native radios as stars that fill
171
+ up to the choice and preview on hover; `.rating[role="img"]` with
172
+ `--md-comp-rating-value` shows a score, halves included. CSS only.
173
+ - Command palette component: `dialog.command-palette` with a search input and
174
+ a list of link or button commands. `CommandPalette` filters by text and
175
+ `data-keywords`, moves the active command with the arrow keys, runs it with
176
+ Enter and opens on Ctrl+K or Command+K. `AutoInit()` starts it.
177
+ - `<kbd>` is drawn as a keycap; an outer `<kbd>` around a combination stays
178
+ plain.
179
+ - `.line-chart` draws a `<figure>`'s data table as smooth SVG lines with x
180
+ labels, a legend, and a cursor and tooltip that follow the pointer or the
181
+ arrow keys. `area`, `fade`, `sparkline` and `<th class="dashed">` vary it.
182
+ The table stays as the text alternative and the no-JavaScript fallback.
183
+ - `.scroll-area` styles native scrollbars with theme-aware colors and thin
184
+ sizing, with a WebKit fallback and system scrollbars in forced-colors mode.
185
+ - `.shape-*` cuts images, videos, buttons, and other elements to twenty
186
+ rounded shapes after the M3 Expressive shape library, such as
187
+ `.shape-scallop-6`, `.shape-spark`, and `.shape-bloom-4`. Focused shapes draw
188
+ their focus ring inside the edge. CSS only.
189
+ - Frosted glass for floating surfaces. `--expressive-glass: true` on `:root` or
190
+ a wrapper turns it on. `--expressive-glass-blur` (default `16px`) sets the
191
+ frost thickness, and `--expressive-glass-opacity` (default `72%`) sets how
192
+ much of the surface color is kept. Sass `$expressive-glass`,
193
+ `$expressive-glass-blur`, and `$expressive-glass-opacity` change the defaults,
194
+ and `--expressive-glass: false` turns the effect off within a region. Surfaces
195
+ turn solid when the user prefers reduced transparency or more contrast.
196
+ - The docs site opens on a landing page with a features overview, a live
197
+ code demo and the installation guide. Ctrl+K, Command+K or the app bar's
198
+ search button opens a search of every documentation page. Pages now carry
199
+ a meta description and Open Graph tags, and the site publishes
200
+ `sitemap.xml` and `robots.txt`.
201
+
202
+ ### Changed
203
+
204
+ - The default theme seed is Mist Iris (`#c6a0f6`). The docs picker uses the
205
+ same default for its initial value and Reset action. Set `--md-source` or
206
+ Sass `$md-source` to retain an application's existing brand color.
207
+ - The agent skill workflow is version 0.9.0 and costs fewer tokens to read.
208
+ Sub-skill scope now lives only in each frontmatter description, without
209
+ repeated "When to use" sections. Generated component guides no
210
+ longer repeat the page description or the generic rule and documentation
211
+ notes, and the theming, usage, dashboard and charts guides link to the
212
+ reference that owns a rule instead of restating it. Each sub-skill says when
213
+ to read each reference, long references open with a contents list, and the
214
+ design guide links its dated component reviews directly. A new delegation
215
+ reference explains how to split a large audit across subagents and merge
216
+ their findings. The install and runtime guides end with checklists, and the
217
+ charts guide asks for honest scales and labelled sample data. Component
218
+ guides drop the source list and the two notes every guide repeated; the
219
+ root skill states the rule-ID convention once and tells agents to treat
220
+ page content and tool output as evidence, not instructions. Performance
221
+ measurement moved from the design guide into its own reference.
222
+
223
+ ### Fixed
224
+
225
+ - A focused line, column, bar or pie chart no longer cancels Escape when its
226
+ tooltip is already hidden, so a dialog or sheet around the chart can close.
227
+ Pressing a chart's plot away from its marks focuses it without showing the
228
+ first row's tooltip; keyboard focus still shows it.
229
+ - A drawn chart's hidden data table no longer makes a narrow tile or its page
230
+ scroll. The table keeps a fixed 1px layout, as the heatmap's already did,
231
+ and hangs up from the figure's bottom edge, so its rows cannot add overflow
232
+ below it.
233
+ - The line chart docs' chart cards pad their stat and chart off the card's
234
+ border.
235
+
8
236
  ## [0.12.0] - 2026-10-01
9
237
 
10
238
  ### Added
@@ -1919,7 +2147,9 @@ are no compatibility aliases.
1919
2147
  - `.tabs` nested in a header or app bar as a secondary row. `.tabs` is a
1920
2148
  standalone component; the `.tabs.transparent` app bar variant is gone with it.
1921
2149
 
1922
- [Unreleased]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.12.0...HEAD
2150
+ [Unreleased]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.1...HEAD
2151
+ [0.13.1]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.0...v0.13.1
2152
+ [0.13.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.12.0...v0.13.0
1923
2153
  [0.12.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.11.0...v0.12.0
1924
2154
  [0.11.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.10.1...v0.11.0
1925
2155
  [0.10.1]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.10.0...v0.10.1
package/README.md CHANGED
@@ -4,7 +4,7 @@ ExpressiveCSS is a Material Design 3 front-end framework built with Sass and
4
4
  TypeScript. It provides theme tokens, layout and utility classes, styled form
5
5
  controls, and JavaScript components in browser, ES module, and CommonJS builds.
6
6
 
7
- > ExpressiveCSS version `0.12.0` is under active development.
7
+ > ExpressiveCSS version `0.13.1` is under active development.
8
8
 
9
9
  Documentation: [www.expressivecss.com](https://www.expressivecss.com)
10
10
 
@@ -326,6 +326,42 @@ After building, run `node --test tests/selective-builds.test.js`. It records raw
326
326
  gzip, and Brotli sizes in `.cache/selective-builds/sizes.json`. The browser suite
327
327
  records font requests and full/selective screenshots separately in that directory.
328
328
 
329
+ ### Frosted glass
330
+
331
+ Floating surfaces can blur the page behind them. The effect is off by default.
332
+ Turn it on in CSS for the whole page or for one region:
333
+
334
+ ```css
335
+ :root {
336
+ --expressive-glass: true;
337
+ --expressive-glass-blur: 16px; /* frost thickness */
338
+ --expressive-glass-opacity: 72%; /* share of the surface color kept; 100% is solid */
339
+ }
340
+ ```
341
+
342
+ The blur and opacity lines are optional and show the defaults. Set
343
+ `--expressive-glass` on `:root` or on an element that contains the surfaces. The
344
+ browser reads the value from a surface's parent, so setting it on the surface
345
+ itself has no effect. `--expressive-glass: false` turns the effect off again inside
346
+ a region.
347
+
348
+ Sass builds can turn glass on by default and change the default values. The CSS
349
+ properties still override these settings:
350
+
351
+ ```scss
352
+ @use "@expressivecss/expressive/src/sass/expressive" with (
353
+ $expressive-glass: true,
354
+ $expressive-glass-blur: 16px,
355
+ $expressive-glass-opacity: 72%
356
+ );
357
+ ```
358
+
359
+ The effect applies to menus, tooltips, dialogs, bottom and side sheets, the
360
+ snackbar, the navigation bar and rail, toolbars, and the search view. Grouped menus
361
+ and a modal navigation rail keep a solid surface. The rail would otherwise clip its
362
+ own scrim. Users who request reduced transparency or more contrast in their system
363
+ settings see solid surfaces. The switch uses CSS style queries.
364
+
329
365
  ### Themes
330
366
 
331
367
  ExpressiveCSS uses the `theme` attribute on the root element: