@expressivecss/expressive 0.12.0 → 0.14.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.
- package/CHANGELOG.md +339 -1
- package/README.md +38 -1
- package/dist/css/expressive.css +5342 -105
- package/dist/css/expressive.css.map +1 -1
- package/dist/css/expressive.min.css +1 -1
- package/dist/css/expressive.min.css.map +1 -1
- package/dist/fonts/material-symbols-outlined.woff2 +0 -0
- package/dist/fonts/material-symbols-rounded.woff2 +0 -0
- package/dist/fonts/material-symbols-sharp.woff2 +0 -0
- package/dist/js/chunks/chunk-3DHK5CZU.mjs +105 -0
- package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +7 -0
- package/dist/js/chunks/{chunk-HB6IW7QQ.mjs → chunk-3GVFZ4XO.mjs} +3 -3
- package/dist/js/chunks/{chunk-HLDXZ7XB.mjs → chunk-4HZMB7LI.mjs} +22 -8
- package/dist/js/chunks/chunk-4HZMB7LI.mjs.map +7 -0
- package/dist/js/chunks/chunk-4KMNFIFZ.mjs +270 -0
- package/dist/js/chunks/chunk-4KMNFIFZ.mjs.map +7 -0
- package/dist/js/chunks/chunk-4TKTLGEM.mjs +262 -0
- package/dist/js/chunks/chunk-4TKTLGEM.mjs.map +7 -0
- package/dist/js/chunks/{chunk-3VOK6J7U.mjs → chunk-5BKHWHYY.mjs} +13 -6
- package/dist/js/chunks/chunk-5BKHWHYY.mjs.map +7 -0
- package/dist/js/chunks/{chunk-H2WA4XHH.mjs → chunk-5HQSGDZ5.mjs} +16 -7
- package/dist/js/chunks/chunk-5HQSGDZ5.mjs.map +7 -0
- package/dist/js/chunks/{chunk-LWBQIX5J.mjs → chunk-A7ALMYUR.mjs} +41 -44
- package/dist/js/chunks/chunk-A7ALMYUR.mjs.map +7 -0
- package/dist/js/chunks/chunk-BG6ZRB5H.mjs +154 -0
- package/dist/js/chunks/chunk-BG6ZRB5H.mjs.map +7 -0
- package/dist/js/chunks/{chunk-DLWYKFEI.mjs → chunk-CUQPB25U.mjs} +3 -3
- package/dist/js/chunks/{chunk-6WLSDZ4O.mjs → chunk-DAIU5SLG.mjs} +2 -2
- package/dist/js/chunks/chunk-FS7XY3HT.mjs +124 -0
- package/dist/js/chunks/chunk-FS7XY3HT.mjs.map +7 -0
- package/dist/js/chunks/{chunk-WJXDBPXQ.mjs → chunk-GIW4K4SE.mjs} +8 -12
- package/dist/js/chunks/chunk-GIW4K4SE.mjs.map +7 -0
- package/dist/js/chunks/chunk-GUB3TNO2.mjs +164 -0
- package/dist/js/chunks/chunk-GUB3TNO2.mjs.map +7 -0
- package/dist/js/chunks/chunk-GVGT6MIU.mjs +47 -0
- package/dist/js/chunks/chunk-GVGT6MIU.mjs.map +7 -0
- package/dist/js/chunks/{chunk-HNFSMIBY.mjs → chunk-GZKEFWPM.mjs} +83 -22
- package/dist/js/chunks/chunk-GZKEFWPM.mjs.map +7 -0
- package/dist/js/chunks/chunk-HKT2S7VM.mjs +48 -0
- package/dist/js/chunks/chunk-HKT2S7VM.mjs.map +7 -0
- package/dist/js/chunks/chunk-ILP3PDTL.mjs +187 -0
- package/dist/js/chunks/chunk-ILP3PDTL.mjs.map +7 -0
- package/dist/js/chunks/{chunk-YSBCHYXP.mjs → chunk-JIDMQGK6.mjs} +118 -13
- package/dist/js/chunks/chunk-JIDMQGK6.mjs.map +7 -0
- package/dist/js/chunks/chunk-KBNN3QDH.mjs +7 -0
- package/dist/js/chunks/chunk-KBNN3QDH.mjs.map +7 -0
- package/dist/js/chunks/{chunk-NNYP33NB.mjs → chunk-KHV6DZXX.mjs} +5 -4
- package/dist/js/chunks/chunk-KHV6DZXX.mjs.map +7 -0
- package/dist/js/chunks/{chunk-RFZZCYVU.mjs → chunk-KY6U46SM.mjs} +3 -3
- package/dist/js/chunks/{chunk-CKQP6P76.mjs → chunk-LRZMJZ3T.mjs} +4 -3
- package/dist/js/chunks/chunk-LRZMJZ3T.mjs.map +7 -0
- package/dist/js/chunks/{chunk-6OMRGML6.mjs → chunk-MNPROCZF.mjs} +4 -4
- package/dist/js/chunks/{chunk-6OMRGML6.mjs.map → chunk-MNPROCZF.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-QV2JAWIZ.mjs → chunk-MZ6Z24BX.mjs} +3 -2
- package/dist/js/chunks/{chunk-QV2JAWIZ.mjs.map → chunk-MZ6Z24BX.mjs.map} +2 -2
- package/dist/js/chunks/chunk-NS2UMNZV.mjs +292 -0
- package/dist/js/chunks/chunk-NS2UMNZV.mjs.map +7 -0
- package/dist/js/chunks/chunk-O5XPWXIQ.mjs +406 -0
- package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +7 -0
- package/dist/js/chunks/{chunk-UBLRRJ7N.mjs → chunk-PM655FXL.mjs} +2 -2
- package/dist/js/chunks/{chunk-IFXVDDDH.mjs → chunk-QERLECVU.mjs} +3 -3
- package/dist/js/chunks/{chunk-GZWPXXY6.mjs → chunk-QJABDLSD.mjs} +5 -2
- package/dist/js/chunks/chunk-QJABDLSD.mjs.map +7 -0
- package/dist/js/chunks/chunk-RHRQKTTX.mjs +139 -0
- package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +7 -0
- package/dist/js/chunks/{chunk-UNEMYWEW.mjs → chunk-S3XDFGSZ.mjs} +2 -2
- package/dist/js/chunks/chunk-SPETGK25.mjs +59 -0
- package/dist/js/chunks/chunk-SPETGK25.mjs.map +7 -0
- package/dist/js/chunks/chunk-TBM3FT7G.mjs +398 -0
- package/dist/js/chunks/chunk-TBM3FT7G.mjs.map +7 -0
- package/dist/js/chunks/chunk-UEXCIMJZ.mjs +214 -0
- package/dist/js/chunks/chunk-UEXCIMJZ.mjs.map +7 -0
- package/dist/js/chunks/chunk-VGZSAFTX.mjs +173 -0
- package/dist/js/chunks/chunk-VGZSAFTX.mjs.map +7 -0
- package/dist/js/chunks/{chunk-UAEAQBRC.mjs → chunk-X7OCHZVF.mjs} +2 -2
- package/dist/js/chunks/{chunk-EC63CHXU.mjs → chunk-YMSXJON6.mjs} +7 -6
- package/dist/js/chunks/chunk-YMSXJON6.mjs.map +7 -0
- package/dist/js/chunks/{chunk-QVVEWBOF.mjs → chunk-Z2NRKI7R.mjs} +2 -2
- package/dist/js/chunks/{chunk-PIJ2TAR3.mjs → chunk-ZAS25YFD.mjs} +2 -2
- package/dist/js/chunks/chunk-ZKZKNSLC.mjs +1 -0
- package/dist/js/expressive.cjs +3113 -148
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +3113 -148
- package/dist/js/expressive.js.map +4 -4
- package/dist/js/expressive.min.js +11 -11
- package/dist/js/expressive.min.js.map +4 -4
- package/dist/js/expressive.mjs +95 -35
- package/dist/js/expressive.mjs.map +1 -1
- package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
- package/dist/js/internal/behaviors/dialogs.mjs +2 -2
- package/dist/js/internal/behaviors/forms.mjs +2 -2
- package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
- package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
- package/dist/js/internal/components/autocomplete.mjs +3 -3
- package/dist/js/internal/components/barChart.mjs +10 -0
- package/dist/js/internal/components/barChart.mjs.map +7 -0
- package/dist/js/internal/components/buttons.mjs +2 -2
- package/dist/js/internal/components/cards.mjs +2 -2
- package/dist/js/internal/components/carousel.mjs +2 -2
- package/dist/js/internal/components/chips.mjs +4 -4
- package/dist/js/internal/components/columnChart.mjs +9 -0
- package/dist/js/internal/components/columnChart.mjs.map +7 -0
- package/dist/js/internal/components/commandPalette.mjs +9 -0
- package/dist/js/internal/components/commandPalette.mjs.map +7 -0
- package/dist/js/internal/components/confetti.mjs +8 -0
- package/dist/js/internal/components/confetti.mjs.map +7 -0
- package/dist/js/internal/components/datepicker.mjs +5 -5
- package/dist/js/internal/components/expandingCard.mjs +2 -2
- package/dist/js/internal/components/heatmapChart.mjs +9 -0
- package/dist/js/internal/components/heatmapChart.mjs.map +7 -0
- package/dist/js/internal/components/index.mjs +88 -28
- package/dist/js/internal/components/lightbox.mjs +2 -2
- package/dist/js/internal/components/lineChart.mjs +12 -0
- package/dist/js/internal/components/lineChart.mjs.map +7 -0
- package/dist/js/internal/components/mapView.mjs +9 -0
- package/dist/js/internal/components/mapView.mjs.map +7 -0
- package/dist/js/internal/components/menu.mjs +2 -2
- package/dist/js/internal/components/messageScroller.mjs +9 -0
- package/dist/js/internal/components/messageScroller.mjs.map +7 -0
- package/dist/js/internal/components/mixedChart.mjs +10 -0
- package/dist/js/internal/components/mixedChart.mjs.map +7 -0
- package/dist/js/internal/components/particles.mjs +8 -0
- package/dist/js/internal/components/particles.mjs.map +7 -0
- package/dist/js/internal/components/pieChart.mjs +9 -0
- package/dist/js/internal/components/pieChart.mjs.map +7 -0
- package/dist/js/internal/components/questionnaire.mjs +9 -0
- package/dist/js/internal/components/questionnaire.mjs.map +7 -0
- package/dist/js/internal/components/radarChart.mjs +9 -0
- package/dist/js/internal/components/radarChart.mjs.map +7 -0
- package/dist/js/internal/components/radialChart.mjs +9 -0
- package/dist/js/internal/components/radialChart.mjs.map +7 -0
- package/dist/js/internal/components/registry.mjs +35 -20
- package/dist/js/internal/components/richTextEditor.mjs +9 -0
- package/dist/js/internal/components/richTextEditor.mjs.map +7 -0
- package/dist/js/internal/components/scrollspy.mjs +1 -1
- package/dist/js/internal/components/select.mjs +3 -3
- package/dist/js/internal/components/slider.mjs +2 -2
- package/dist/js/internal/components/snackbar.mjs +2 -2
- package/dist/js/internal/components/tabs.mjs +3 -3
- package/dist/js/internal/components/timepicker.mjs +3 -3
- package/dist/js/internal/components/tooltip.mjs +2 -2
- package/dist/js/internal/core/utils.mjs +1 -1
- package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
- package/dist/js/modular.mjs +95 -35
- package/dist/types/behaviors/forms.d.ts +27 -0
- package/dist/types/components/barChart.d.ts +24 -0
- package/dist/types/components/carousel.d.ts +2 -0
- package/dist/types/components/columnChart.d.ts +21 -0
- package/dist/types/components/commandPalette.d.ts +96 -0
- package/dist/types/components/confetti.d.ts +103 -0
- package/dist/types/components/datepicker.d.ts +2 -0
- package/dist/types/components/heatmapChart.d.ts +49 -0
- package/dist/types/components/index.d.ts +15 -0
- package/dist/types/components/lineChart.d.ts +134 -0
- package/dist/types/components/mapView.d.ts +151 -0
- package/dist/types/components/menu.d.ts +31 -0
- package/dist/types/components/messageScroller.d.ts +111 -0
- package/dist/types/components/mixedChart.d.ts +25 -0
- package/dist/types/components/particles.d.ts +72 -0
- package/dist/types/components/pieChart.d.ts +43 -0
- package/dist/types/components/questionnaire.d.ts +96 -0
- package/dist/types/components/radarChart.d.ts +39 -0
- package/dist/types/components/radialChart.d.ts +45 -0
- package/dist/types/components/registry.d.ts +52 -0
- package/dist/types/components/richTextEditor.d.ts +71 -0
- package/dist/types/components/slider.d.ts +1 -1
- package/dist/types/components/snackbar.d.ts +2 -0
- package/dist/types/components/tabs.d.ts +1 -1
- package/dist/types/modular.d.ts +10 -1
- package/dist/types/plugins/dockedDisplayPlugin.d.ts +3 -3
- package/package.json +5 -1
- package/src/sass/README.md +3 -6
- package/src/sass/abstracts/_index.scss +1 -1
- package/src/sass/abstracts/_mixins.scss +226 -0
- package/src/sass/abstracts/_variables.scss +14 -0
- package/src/sass/base/_typography.scss +45 -0
- package/src/sass/components/_accordion.scss +161 -0
- package/src/sass/components/_aura.scss +119 -0
- package/src/sass/components/_avatar.scss +86 -0
- package/src/sass/components/_bar-chart.scss +285 -0
- package/src/sass/components/_bottom-sheet.scss +1 -0
- package/src/sass/components/_button-groups.scss +13 -3
- package/src/sass/components/_buttons.scss +1 -1
- package/src/sass/components/_cards.scss +16 -13
- package/src/sass/components/_column-chart.scss +134 -0
- package/src/sass/components/_command-palette.scss +140 -0
- package/src/sass/components/_confetti.scss +14 -0
- package/src/sass/components/_countdown.scss +89 -0
- package/src/sass/components/_data-table.scss +188 -0
- package/src/sass/components/_dialog.scss +1 -0
- package/src/sass/components/_empty-state.scss +78 -0
- package/src/sass/components/_expanding-card.scss +3 -0
- package/src/sass/components/_heatmap-chart.scss +156 -0
- package/src/sass/components/_index.scss +30 -0
- package/src/sass/components/_kpi.scss +162 -0
- package/src/sass/components/_line-chart.scss +102 -0
- package/src/sass/components/_map.scss +188 -0
- package/src/sass/components/_marquee.scss +111 -0
- package/src/sass/components/_menu.scss +10 -0
- package/src/sass/components/_message-scroller.scss +66 -0
- package/src/sass/components/_message.scss +202 -0
- package/src/sass/components/_mixed-chart.scss +157 -0
- package/src/sass/components/_navigation-bar.scss +1 -0
- package/src/sass/components/_navigation-rail.scss +9 -0
- package/src/sass/components/_particles.scss +14 -0
- package/src/sass/components/_pie-chart.scss +203 -0
- package/src/sass/components/_popover.scss +112 -0
- package/src/sass/components/_questionnaire.scss +144 -0
- package/src/sass/components/_radar-chart.scss +205 -0
- package/src/sass/components/_radial-chart.scss +174 -0
- package/src/sass/components/_rich-text-editor.scss +99 -0
- package/src/sass/components/_search.scss +1 -0
- package/src/sass/components/_side-sheet.scss +1 -0
- package/src/sass/components/_skeleton.scss +81 -0
- package/src/sass/components/_snackbar.scss +1 -0
- package/src/sass/components/_stat.scss +86 -0
- package/src/sass/components/_stepper.scss +190 -0
- package/src/sass/components/_table_of_contents.scss +3 -1
- package/src/sass/components/_timeline.scss +114 -0
- package/src/sass/components/_toolbar.scss +1 -0
- package/src/sass/components/_tooltip.scss +2 -0
- package/src/sass/components/_tree.scss +139 -0
- package/src/sass/components/forms/_checkboxes.scss +7 -2
- package/src/sass/components/forms/_drop-zone.scss +128 -0
- package/src/sass/components/forms/_index.scss +2 -0
- package/src/sass/components/forms/_input-fields.scss +133 -2
- package/src/sass/components/forms/_rating.scss +165 -0
- package/src/sass/tokens/_reference.scss +3 -15
- package/src/sass/utilities/_index.scss +2 -0
- package/src/sass/utilities/_scroll-area.scss +35 -0
- package/src/sass/utilities/_shapes.scss +164 -0
- package/dist/js/chunks/chunk-3VOK6J7U.mjs.map +0 -7
- package/dist/js/chunks/chunk-CKQP6P76.mjs.map +0 -7
- package/dist/js/chunks/chunk-EC63CHXU.mjs.map +0 -7
- package/dist/js/chunks/chunk-G3I5H2U3.mjs +0 -7
- package/dist/js/chunks/chunk-G3I5H2U3.mjs.map +0 -7
- package/dist/js/chunks/chunk-GZWPXXY6.mjs.map +0 -7
- package/dist/js/chunks/chunk-H2WA4XHH.mjs.map +0 -7
- package/dist/js/chunks/chunk-HLDXZ7XB.mjs.map +0 -7
- package/dist/js/chunks/chunk-HNFSMIBY.mjs.map +0 -7
- package/dist/js/chunks/chunk-LWBQIX5J.mjs.map +0 -7
- package/dist/js/chunks/chunk-NNYP33NB.mjs.map +0 -7
- package/dist/js/chunks/chunk-PSSHQWCX.mjs +0 -100
- package/dist/js/chunks/chunk-PSSHQWCX.mjs.map +0 -7
- package/dist/js/chunks/chunk-WJXDBPXQ.mjs.map +0 -7
- package/dist/js/chunks/chunk-WWPAPHMA.mjs +0 -1
- package/dist/js/chunks/chunk-YSBCHYXP.mjs.map +0 -7
- /package/dist/js/chunks/{chunk-HB6IW7QQ.mjs.map → chunk-3GVFZ4XO.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-DLWYKFEI.mjs.map → chunk-CUQPB25U.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-6WLSDZ4O.mjs.map → chunk-DAIU5SLG.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-RFZZCYVU.mjs.map → chunk-KY6U46SM.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-UBLRRJ7N.mjs.map → chunk-PM655FXL.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-IFXVDDDH.mjs.map → chunk-QERLECVU.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-UNEMYWEW.mjs.map → chunk-S3XDFGSZ.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-UAEAQBRC.mjs.map → chunk-X7OCHZVF.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-QVVEWBOF.mjs.map → chunk-Z2NRKI7R.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-PIJ2TAR3.mjs.map → chunk-ZAS25YFD.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-WWPAPHMA.mjs.map → chunk-ZKZKNSLC.mjs.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,340 @@ the format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.14.1] - 2026-10-11
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- The capability roadmap's source links point at a commit on `master`. The
|
|
13
|
+
0.14.0 links pointed at a pull request commit that the squash merge left
|
|
14
|
+
off `master`, which stopped the 0.14.0 release before it reached npm. A
|
|
15
|
+
test now fails when the pinned commit is not an ancestor of the checkout.
|
|
16
|
+
0.14.1 contains the 0.14.0 changes below.
|
|
17
|
+
|
|
18
|
+
## [0.14.0] - 2026-10-11
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- The `expressivecss-review` agent skill reviews a page, template, fragment
|
|
23
|
+
or screenshot with five specialist subagents (theme and tokens, layout,
|
|
24
|
+
component markup, lifecycle and accessibility, framework rules). It reuses
|
|
25
|
+
the `expressivecss` guides, version resolver and `expressivecss-lint`, and
|
|
26
|
+
returns one report scored out of 100 with five 20-point sections. One or two
|
|
27
|
+
critical findings cap the score at 69, and three or more at 49.
|
|
28
|
+
- `.map` is an interactive map built on MapLibre. The page installs
|
|
29
|
+
`maplibre-gl` and passes the module to `MapView.init()`; ExpressiveCSS does
|
|
30
|
+
not bundle it. `.map-marker` children sit at their `data-lng-lat`, can open
|
|
31
|
+
a `.map-popup` named by `aria-controls`, show a `.map-marker-label` and be
|
|
32
|
+
dragged with `data-draggable`. `.map-controls` buttons zoom, reset north,
|
|
33
|
+
locate the reader and go full screen. `addRoute()`, `addArcs()` and
|
|
34
|
+
`addClusters()` draw data in theme colors. The default OpenFreeMap style
|
|
35
|
+
follows the light or dark theme.
|
|
36
|
+
- `.confetti` bursts theme-colored confetti. A button with the class bursts
|
|
37
|
+
from its center over the page when clicked, a `<canvas class="confetti">`
|
|
38
|
+
bursts inside its own box, and `Expressive.Confetti.fire(options)` bursts
|
|
39
|
+
over the page from script. Options cover the count, angle, spread, speed,
|
|
40
|
+
gravity, drift, colors, shapes and size. The page canvas draws above an
|
|
41
|
+
open modal dialog and lets clicks through. Nothing is drawn when the reader
|
|
42
|
+
prefers reduced motion.
|
|
43
|
+
- `<canvas class="particles">` fills its positioned ancestor with drifting
|
|
44
|
+
dots in the theme's on-surface color that lean toward the pointer. Options
|
|
45
|
+
cover the count, size, color, drift and how far and how fast the dots
|
|
46
|
+
follow the pointer. The canvas lets clicks through, and under reduced
|
|
47
|
+
motion the dots are drawn once and stay still.
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
|
|
51
|
+
- The docs site has a new shell. A rail holds the five catalogue groups from
|
|
52
|
+
840px, with the current group's pages beside it from 1200px. Below 1200px
|
|
53
|
+
the menu button opens the catalogue in a side sheet. Each page opens with a
|
|
54
|
+
breadcrumb, title, description and a "View as Markdown" link, and the table
|
|
55
|
+
of contents sits in a sticky column. Page content and URLs are unchanged.
|
|
56
|
+
- The `expressivecss` skill is version 0.10.0. It adds guides for map,
|
|
57
|
+
confetti and particles. Its version resolver sizes file reads to the file
|
|
58
|
+
and reports a file that grows during a read as changed.
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- Idle components no longer listen to the whole document. Carousel attaches
|
|
63
|
+
its pointer listeners while a mouse press is down, Tooltip listens for Escape
|
|
64
|
+
while open, and the docked date picker listens for outside clicks while
|
|
65
|
+
shown.
|
|
66
|
+
- Calling `Forms.Init()`, `BottomSheets.Init()` or `SideSheets.Init()` again,
|
|
67
|
+
as a page that loads both the root and `/modular` entries can, no longer
|
|
68
|
+
adds a second set of document listeners.
|
|
69
|
+
- `Menu.destroy()` no longer throws when the menu's target element is missing,
|
|
70
|
+
which used to leave its listeners attached.
|
|
71
|
+
- `Utils.throttle` times calls with `performance.now()`, so a system clock
|
|
72
|
+
change cannot hold a call back.
|
|
73
|
+
- More hot-path fixes:
|
|
74
|
+
- ScrollSpy skips the document-wide link lookup while the same section
|
|
75
|
+
stays current.
|
|
76
|
+
- MapView finds its zoom buttons once, not on every `move` event.
|
|
77
|
+
- PieChart reuses one percent formatter per legend instead of making one
|
|
78
|
+
per row.
|
|
79
|
+
- Snackbar measures its width once per swipe, not on every pointer move.
|
|
80
|
+
- Slider updates once per drag frame. Its `pointermove` update also ran
|
|
81
|
+
before the browser moved the value.
|
|
82
|
+
- The heatmap tooltip measures its cell before writing to the page.
|
|
83
|
+
- Datepicker checks each calendar row's markup once.
|
|
84
|
+
- Less work on hot paths:
|
|
85
|
+
- Datepicker arrow keys inside the shown month move focus without
|
|
86
|
+
redrawing the grid.
|
|
87
|
+
- Autocomplete renders the result list once per keystroke while its menu is
|
|
88
|
+
open. It used to render the previous results first, and twice more with
|
|
89
|
+
`isMultiSelect`.
|
|
90
|
+
- Particles stop animating and tracking the pointer while the canvas is off
|
|
91
|
+
screen.
|
|
92
|
+
- Carousel reads all item positions before writing parallax offsets and works
|
|
93
|
+
out item sizes before setting them, so scrolling no longer forces a style
|
|
94
|
+
recalculation per item.
|
|
95
|
+
- Tabs throttle their window resize handling.
|
|
96
|
+
- `Utils.throttle` no longer stalls when the system clock moves backwards.
|
|
97
|
+
- Autocomplete with `allowUnsafeHTML` highlights the typed text inside the
|
|
98
|
+
label's text only. It used to insert the highlight into the HTML string, so a
|
|
99
|
+
match inside an attribute value could close the attribute and turn the rest
|
|
100
|
+
of the sanitized label into markup.
|
|
101
|
+
- Table-of-contents links are 48dp tall, the Material touch target, instead
|
|
102
|
+
of 32dp. `--md-comp-toc-item-height` sets a denser height.
|
|
103
|
+
- In Firefox, a carousel that moved several items while its item sizes were
|
|
104
|
+
still changing could slide back to an earlier item after it had settled.
|
|
105
|
+
Firefox re-snapped the track to whichever item it had passed mid-move.
|
|
106
|
+
Snapping is now off while the carousel scrolls to an item and comes back
|
|
107
|
+
once the item is in place.
|
|
108
|
+
|
|
109
|
+
## [0.13.1] - 2026-10-08
|
|
110
|
+
|
|
111
|
+
### Fixed
|
|
112
|
+
|
|
113
|
+
- The capability roadmap's source links point at a commit on `master`. The
|
|
114
|
+
0.13.0 links pointed at a pull request commit that no longer exists, which
|
|
115
|
+
stopped the 0.13.0 release before it reached npm. 0.13.1 contains the
|
|
116
|
+
0.13.0 changes below.
|
|
117
|
+
|
|
118
|
+
## [0.13.0] - 2026-10-08
|
|
119
|
+
|
|
120
|
+
### Added
|
|
121
|
+
|
|
122
|
+
- `.rich-text-editor` turns a `<textarea>` into a Tiptap editor with a
|
|
123
|
+
docked toolbar. The page installs Tiptap and passes its `Editor` class and
|
|
124
|
+
extensions to `RichTextEditor.init()`; ExpressiveCSS does not bundle it.
|
|
125
|
+
A toolbar button's `data-command` names a Tiptap command and
|
|
126
|
+
`data-attributes` holds its JSON argument. Buttons are disabled when their
|
|
127
|
+
command cannot run, and `toggle` commands set `aria-pressed` and `.active`.
|
|
128
|
+
The textarea keeps the editor's HTML, so it submits with its form, and
|
|
129
|
+
names the editable textbox.
|
|
130
|
+
- `.marquee` scrolls a row of logos, images or text without end. Write
|
|
131
|
+
the items in two `.marquee-content` groups, the second marked
|
|
132
|
+
`aria-hidden="true"`. `vertical`, `reverse` and `fade` change the
|
|
133
|
+
direction and edges, `paused` stops it, and hover or focus inside pauses
|
|
134
|
+
it. Reduced motion stops the scroll and hides the copy. CSS only.
|
|
135
|
+
- `<mark>` highlights part of a text in the tertiary container colors,
|
|
136
|
+
with no padding so a match inside a word keeps its spacing.
|
|
137
|
+
`::highlight(mark)` paints ranges registered with the CSS Custom
|
|
138
|
+
Highlight API the same way.
|
|
139
|
+
- `.message-scroller` scrolls a conversation. While the reader is at the
|
|
140
|
+
end it follows streamed replies, and scrolling up releases it. A message
|
|
141
|
+
appended with `data-scroll-anchor` starts a turn and is scrolled to the
|
|
142
|
+
top, leaving 64px of the previous message in view. Messages added above
|
|
143
|
+
keep the reader's place. A transcript can open at its end, its start or
|
|
144
|
+
its last turn, `scrollToMessage(id)` jumps to any message, and an optional
|
|
145
|
+
`.message-scroller-button` scrolls to the latest message.
|
|
146
|
+
- `form.questionnaire` asks one question at a time. Each `<fieldset>` is a
|
|
147
|
+
question with radio, checkbox or text answers, and footer buttons marked
|
|
148
|
+
`value="previous"`, `"skip"` and `"next"` move between them. The component
|
|
149
|
+
adds a progress row, checks each question with the browser's validation
|
|
150
|
+
(`data-required` asks for at least one checkbox), shows the question's
|
|
151
|
+
`.questionnaire-error`, offers Skip on optional questions and leaves out
|
|
152
|
+
disabled ones so pages can branch. The form submits normally, and without
|
|
153
|
+
JavaScript every question shows at once.
|
|
154
|
+
- KPI component: `article.kpi` is a card for one key figure, with its
|
|
155
|
+
label and value in a `<dl>`, a `.kpi-trend` chip that takes `up`, `down`
|
|
156
|
+
and `negative`, an optional `.kpi-icon`, a `.kpi-actions` corner button,
|
|
157
|
+
a sparkline chart, a progress bar and a `.kpi-footer`. A `negative` trend
|
|
158
|
+
also turns the sparkline to the error color. CSS only.
|
|
159
|
+
- `.countdown` shows a whole number from 0 to 999 and rolls its digits up
|
|
160
|
+
or down when `--md-comp-countdown-value` changes. The element's text is
|
|
161
|
+
the value screen readers read. `--md-comp-countdown-digits` pads with
|
|
162
|
+
leading zeros, and reduced motion turns the roll off. CSS only.
|
|
163
|
+
- `.aura` wraps one button, card or panel and runs a light around a ring
|
|
164
|
+
just outside it, to mark the one thing a screen most needs the user to
|
|
165
|
+
see. `dual`, `rainbow` and `glow` change the light, and tokens set its
|
|
166
|
+
color, width, corners and speed. The ring is fully rounded around a
|
|
167
|
+
button, stops turning under reduced motion and stays out of the
|
|
168
|
+
accessibility tree.
|
|
169
|
+
- The agent skill gains an `expressivecss-charts` guide for building charts
|
|
170
|
+
and chart dashboards. It covers choosing a chart for the question asked,
|
|
171
|
+
table cells the charts can read, chart cards with stats, tokens,
|
|
172
|
+
sparklines and redrawing. Its recipes cover a period switch, a KPI row,
|
|
173
|
+
a donut with its total, a budget meter, a gauge, a heatmap and a
|
|
174
|
+
dashboard section. The root skill routes chart work to it.
|
|
175
|
+
- `.mixed-chart` draws a `<figure>`'s data table as columns, lines and
|
|
176
|
+
areas on one plot, chosen by each series header's class: `column`,
|
|
177
|
+
`area`, or a line by default, with `dashed` lines. A series with `end`
|
|
178
|
+
is drawn against a second scale, set by `data-end-min` and
|
|
179
|
+
`data-end-max`, for values in other units. The tooltip, cursor points,
|
|
180
|
+
legend and `sparkline` work as in the line chart.
|
|
181
|
+
- `.radial-chart` draws a `<figure>`'s data table as rings, one per row,
|
|
182
|
+
filled clockwise from the top as a share of `data-max` (100 by default),
|
|
183
|
+
with a legend, tracks, and a tooltip that follows the pointer across the
|
|
184
|
+
rings or the arrow keys. `gauge` draws half circles, a `<tfoot>` row shows
|
|
185
|
+
in the middle, and `sparkline` is a small chart. Ring width, gap and track
|
|
186
|
+
color are tokens.
|
|
187
|
+
- `.heatmap-chart` draws a `<figure>`'s data table as a grid of cells shaded
|
|
188
|
+
from the lowest value to the highest, with the row headers beside it, the
|
|
189
|
+
column headers below and a scale naming the lowest and highest cells. A
|
|
190
|
+
tooltip follows the pointer or the arrow keys from cell to cell. `values`
|
|
191
|
+
writes each cell's text on it in black or white, whichever reads on the
|
|
192
|
+
shade; `data-label` shortens or hides a header on the grid; `data-min` and
|
|
193
|
+
`data-max` fix the scale.
|
|
194
|
+
- `.radar-chart` draws a `<figure>`'s data table as shapes on spokes from a
|
|
195
|
+
shared middle, one spoke per row clockwise from the top and one shape per
|
|
196
|
+
series, with each row's label past its spoke, a legend, and a tooltip that
|
|
197
|
+
follows the pointer round the chart or the arrow keys. `area` fills the
|
|
198
|
+
shapes, `points` marks each value, and `sparkline` is a small chart.
|
|
199
|
+
- `.pie-chart` draws a `<figure>`'s data table as slices of a whole,
|
|
200
|
+
clockwise from the top, with a legend of each row's cell and share and a
|
|
201
|
+
tooltip that follows the pointer round the pie or the arrow keys. `donut`
|
|
202
|
+
cuts a hole and shows a `<tfoot>` total in it, `values` writes each share
|
|
203
|
+
on its slice, and `sparkline` is a small pie. Further value columns show in
|
|
204
|
+
the tooltip.
|
|
205
|
+
- `.bar-chart` draws a `<figure>`'s data table as horizontal bars from zero,
|
|
206
|
+
with each row's label beside it, a legend, and a highlight band and tooltip
|
|
207
|
+
that follow the pointer or the up and down arrows. The plot grows with its
|
|
208
|
+
rows. `stacked`, `split`, `track`, `values` and `sparkline` vary it: `values`
|
|
209
|
+
writes each cell from its bar's base, running past a short bar, and a
|
|
210
|
+
stacked, split row on a track with `data-max` is a meter. It shares the column chart's runtime and markup, and
|
|
211
|
+
the bars grow leftwards in a right-to-left page.
|
|
212
|
+
- Line, column and bar charts: a tap on a touch screen shows the tapped row
|
|
213
|
+
instead of the first, keeps it when the finger lifts, and hides it when the
|
|
214
|
+
page scrolls.
|
|
215
|
+
- `.column-chart` draws a `<figure>`'s data table as columns from zero, one
|
|
216
|
+
group per row, with x labels, a legend, and a highlight band and tooltip that
|
|
217
|
+
follow the pointer or the arrow keys. `stacked`, `fade`, `track` and
|
|
218
|
+
`sparkline` vary it, and negative values hang below zero. It shares the line
|
|
219
|
+
chart's runtime, markup and accessibility; the table stays as the text
|
|
220
|
+
alternative and the no-JavaScript fallback.
|
|
221
|
+
- Line chart: `stacked` draws each series on the total of the ones before it
|
|
222
|
+
and fills the band between them, from a zero baseline. The tooltip still
|
|
223
|
+
shows each cell, and an empty cell breaks the series above it. The docs add chart card layouts with a period switch, a
|
|
224
|
+
compact chart and a side sparkline.
|
|
225
|
+
|
|
226
|
+
- Message component: `.message` lays out one message in a conversation with an
|
|
227
|
+
optional `.message-avatar`, `.message-header` and `.message-footer` around a
|
|
228
|
+
`.message-bubble`. `end` moves a message to the sender's side,
|
|
229
|
+
`.message-group` stacks consecutive messages and joins their corners, and
|
|
230
|
+
`.message-bubble.outlined` holds attachments. CSS only.
|
|
231
|
+
- Accordion component: `.accordion` stacks native `<details>` items as joined
|
|
232
|
+
tiles with a turning chevron. A shared `name` keeps one item open, and
|
|
233
|
+
opening animates where the engine can transition to `auto` height. CSS only.
|
|
234
|
+
- Data table component: `.data-table` wraps a native `<table>` in a scrolling,
|
|
235
|
+
outlined container with a sticky header row. `numeric` aligns number columns,
|
|
236
|
+
`dense` shortens rows, `aria-sort` on a header draws its sort arrow, and a
|
|
237
|
+
checked checkbox in the first cell selects the row. The page owns sorting.
|
|
238
|
+
CSS only.
|
|
239
|
+
- Avatar component: `.avatar` shows a person as a circular image, initials or
|
|
240
|
+
icon in `small`, default and `large` sizes. `.avatar-group` overlaps avatars
|
|
241
|
+
with a surface ring. CSS only.
|
|
242
|
+
- Skeleton component: `.skeleton` draws placeholder boxes, `text` lines and
|
|
243
|
+
`circle` shapes with a shimmer that stops under reduced motion. CSS only.
|
|
244
|
+
- Empty state component: `.empty-state` centers an icon or illustration, a
|
|
245
|
+
heading, supporting text and an `.empty-state-actions` row. CSS only.
|
|
246
|
+
- Popover component: `.popover` styles a native `[popover]` panel opened by a
|
|
247
|
+
`popovertarget` button and places it with CSS anchor positioning, below the
|
|
248
|
+
button by default or with `top`, `start` and `end`, flipping to stay on
|
|
249
|
+
screen. Use it for toggletips and small action panels. CSS only.
|
|
250
|
+
- Stepper component: `ol.stepper` numbers a fixed sequence of steps.
|
|
251
|
+
`aria-current="step"`, `complete` and `invalid` mark each step's state, and
|
|
252
|
+
the complete and invalid states are spoken through translatable tokens.
|
|
253
|
+
`vertical` stacks the steps and takes a `.stepper-content` panel. CSS only.
|
|
254
|
+
- Drop zone component: `.drop-zone` stretches a native file input over a large
|
|
255
|
+
labelled target. The Forms behavior marks a drag with `dragover` and lists
|
|
256
|
+
each chosen file's name and size in `.drop-zone-files`.
|
|
257
|
+
- Text fields take a trailing `.icon-button.suffix` as a clickable control.
|
|
258
|
+
`password-toggle` on that button shows and hides the password and reports
|
|
259
|
+
its state with `aria-pressed`. `input.otp` draws one native input as a row of
|
|
260
|
+
one-time code cells.
|
|
261
|
+
- Menu `contextMenu` option, also set by `data-context-menu` on the trigger:
|
|
262
|
+
the trigger is a region, and its menu opens at the pointer on right-click,
|
|
263
|
+
long-press, the menu key or Shift+F10, flipping to stay on screen.
|
|
264
|
+
- Timeline component: `ol.timeline` marks each event with a dot joined to the
|
|
265
|
+
next by a line, or with a leading icon in a tonal circle. CSS only.
|
|
266
|
+
- Stat component: `dl.stats` lays out key figures as wrapping tiles, with a
|
|
267
|
+
`.stat-change` line that takes `up`, `down` and `negative`. CSS only.
|
|
268
|
+
- Tree component: `ul.tree` nests lists of native disclosures and links with
|
|
269
|
+
guide lines, turning chevrons and an `aria-current` row. It takes no tree
|
|
270
|
+
role. CSS only.
|
|
271
|
+
- Rating component: `fieldset.rating` draws native radios as stars that fill
|
|
272
|
+
up to the choice and preview on hover; `.rating[role="img"]` with
|
|
273
|
+
`--md-comp-rating-value` shows a score, halves included. CSS only.
|
|
274
|
+
- Command palette component: `dialog.command-palette` with a search input and
|
|
275
|
+
a list of link or button commands. `CommandPalette` filters by text and
|
|
276
|
+
`data-keywords`, moves the active command with the arrow keys, runs it with
|
|
277
|
+
Enter and opens on Ctrl+K or Command+K. `AutoInit()` starts it.
|
|
278
|
+
- `<kbd>` is drawn as a keycap; an outer `<kbd>` around a combination stays
|
|
279
|
+
plain.
|
|
280
|
+
- `.line-chart` draws a `<figure>`'s data table as smooth SVG lines with x
|
|
281
|
+
labels, a legend, and a cursor and tooltip that follow the pointer or the
|
|
282
|
+
arrow keys. `area`, `fade`, `sparkline` and `<th class="dashed">` vary it.
|
|
283
|
+
The table stays as the text alternative and the no-JavaScript fallback.
|
|
284
|
+
- `.scroll-area` styles native scrollbars with theme-aware colors and thin
|
|
285
|
+
sizing, with a WebKit fallback and system scrollbars in forced-colors mode.
|
|
286
|
+
- `.shape-*` cuts images, videos, buttons, and other elements to twenty
|
|
287
|
+
rounded shapes after the M3 Expressive shape library, such as
|
|
288
|
+
`.shape-scallop-6`, `.shape-spark`, and `.shape-bloom-4`. Focused shapes draw
|
|
289
|
+
their focus ring inside the edge. CSS only.
|
|
290
|
+
- Frosted glass for floating surfaces. `--expressive-glass: true` on `:root` or
|
|
291
|
+
a wrapper turns it on. `--expressive-glass-blur` (default `16px`) sets the
|
|
292
|
+
frost thickness, and `--expressive-glass-opacity` (default `72%`) sets how
|
|
293
|
+
much of the surface color is kept. Sass `$expressive-glass`,
|
|
294
|
+
`$expressive-glass-blur`, and `$expressive-glass-opacity` change the defaults,
|
|
295
|
+
and `--expressive-glass: false` turns the effect off within a region. Surfaces
|
|
296
|
+
turn solid when the user prefers reduced transparency or more contrast.
|
|
297
|
+
- The docs site opens on a landing page with a features overview, a live
|
|
298
|
+
code demo and the installation guide. Ctrl+K, Command+K or the app bar's
|
|
299
|
+
search button opens a search of every documentation page. Pages now carry
|
|
300
|
+
a meta description and Open Graph tags, and the site publishes
|
|
301
|
+
`sitemap.xml` and `robots.txt`.
|
|
302
|
+
|
|
303
|
+
### Changed
|
|
304
|
+
|
|
305
|
+
- The default theme seed is Mist Iris (`#c6a0f6`). The docs picker uses the
|
|
306
|
+
same default for its initial value and Reset action. Set `--md-source` or
|
|
307
|
+
Sass `$md-source` to retain an application's existing brand color.
|
|
308
|
+
- The agent skill workflow is version 0.9.0 and costs fewer tokens to read.
|
|
309
|
+
Sub-skill scope now lives only in each frontmatter description, without
|
|
310
|
+
repeated "When to use" sections. Generated component guides no
|
|
311
|
+
longer repeat the page description or the generic rule and documentation
|
|
312
|
+
notes, and the theming, usage, dashboard and charts guides link to the
|
|
313
|
+
reference that owns a rule instead of restating it. Each sub-skill says when
|
|
314
|
+
to read each reference, long references open with a contents list, and the
|
|
315
|
+
design guide links its dated component reviews directly. A new delegation
|
|
316
|
+
reference explains how to split a large audit across subagents and merge
|
|
317
|
+
their findings. The install and runtime guides end with checklists, and the
|
|
318
|
+
charts guide asks for honest scales and labelled sample data. Component
|
|
319
|
+
guides drop the source list and the two notes every guide repeated; the
|
|
320
|
+
root skill states the rule-ID convention once and tells agents to treat
|
|
321
|
+
page content and tool output as evidence, not instructions. Performance
|
|
322
|
+
measurement moved from the design guide into its own reference.
|
|
323
|
+
|
|
324
|
+
### Fixed
|
|
325
|
+
|
|
326
|
+
- A checkbox label written as `<input type="checkbox"><span>…</span>` keeps
|
|
327
|
+
links and other inline elements in its text. The span was a flex box, so
|
|
328
|
+
each text run and link became a separate item: the spaces around a link
|
|
329
|
+
disappeared and the words split into columns. It now lays out as inline
|
|
330
|
+
text, and one line still sits centered in the 48px target.
|
|
331
|
+
- A focused line, column, bar or pie chart no longer cancels Escape when its
|
|
332
|
+
tooltip is already hidden, so a dialog or sheet around the chart can close.
|
|
333
|
+
Pressing a chart's plot away from its marks focuses it without showing the
|
|
334
|
+
first row's tooltip; keyboard focus still shows it.
|
|
335
|
+
- A drawn chart's hidden data table no longer makes a narrow tile or its page
|
|
336
|
+
scroll. The table keeps a fixed 1px layout, as the heatmap's already did,
|
|
337
|
+
and hangs up from the figure's bottom edge, so its rows cannot add overflow
|
|
338
|
+
below it.
|
|
339
|
+
- The line chart docs' chart cards pad their stat and chart off the card's
|
|
340
|
+
border.
|
|
341
|
+
|
|
8
342
|
## [0.12.0] - 2026-10-01
|
|
9
343
|
|
|
10
344
|
### Added
|
|
@@ -1919,7 +2253,11 @@ are no compatibility aliases.
|
|
|
1919
2253
|
- `.tabs` nested in a header or app bar as a secondary row. `.tabs` is a
|
|
1920
2254
|
standalone component; the `.tabs.transparent` app bar variant is gone with it.
|
|
1921
2255
|
|
|
1922
|
-
[Unreleased]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.
|
|
2256
|
+
[Unreleased]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.14.1...HEAD
|
|
2257
|
+
[0.14.1]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.14.0...v0.14.1
|
|
2258
|
+
[0.14.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.1...v0.14.0
|
|
2259
|
+
[0.13.1]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.0...v0.13.1
|
|
2260
|
+
[0.13.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.12.0...v0.13.0
|
|
1923
2261
|
[0.12.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.11.0...v0.12.0
|
|
1924
2262
|
[0.11.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.10.1...v0.11.0
|
|
1925
2263
|
[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.
|
|
7
|
+
> ExpressiveCSS version `0.14.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:
|
|
@@ -380,6 +416,7 @@ The documentation source lives in `docs/src/` and is published at
|
|
|
380
416
|
| `docs/src` | Astro documentation and examples | Yes |
|
|
381
417
|
| `mcp/expressivecss` | Independently versioned MCP package | Yes |
|
|
382
418
|
| `skills/expressivecss` | Agent guidance and generated component references | Yes |
|
|
419
|
+
| `skills/expressivecss-review` | Scored interface review that runs five specialist subagents | Yes |
|
|
383
420
|
| `scripts`, `tests`, `visual` | Generators, verification, and test tooling | Source only |
|
|
384
421
|
| `semantics.json`, `llm.md`, `m3-guidelines.md` | Markup rules, API reference, design guidance | Yes |
|
|
385
422
|
| `SEMANTICS.md`, generated skill/MCP data | Derived files checked for drift | Yes |
|