@expressivecss/expressive 0.13.1 → 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.
Files changed (158) hide show
  1. package/CHANGELOG.md +109 -1
  2. package/README.md +2 -1
  3. package/dist/css/expressive.css +234 -72
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/js/chunks/{chunk-55IA2XUC.mjs → chunk-3GVFZ4XO.mjs} +3 -3
  8. package/dist/js/chunks/{chunk-3CLXLPYS.mjs → chunk-4HZMB7LI.mjs} +22 -8
  9. package/dist/js/chunks/chunk-4HZMB7LI.mjs.map +7 -0
  10. package/dist/js/chunks/{chunk-DTKR54I6.mjs → chunk-4KMNFIFZ.mjs} +2 -2
  11. package/dist/js/chunks/{chunk-K4CJCRGE.mjs → chunk-4TKTLGEM.mjs} +2 -2
  12. package/dist/js/chunks/{chunk-3VOK6J7U.mjs → chunk-5BKHWHYY.mjs} +13 -6
  13. package/dist/js/chunks/chunk-5BKHWHYY.mjs.map +7 -0
  14. package/dist/js/chunks/{chunk-PLYXLSH3.mjs → chunk-5HQSGDZ5.mjs} +18 -9
  15. package/dist/js/chunks/chunk-5HQSGDZ5.mjs.map +7 -0
  16. package/dist/js/chunks/{chunk-LWBQIX5J.mjs → chunk-A7ALMYUR.mjs} +41 -44
  17. package/dist/js/chunks/chunk-A7ALMYUR.mjs.map +7 -0
  18. package/dist/js/chunks/chunk-BG6ZRB5H.mjs +154 -0
  19. package/dist/js/chunks/chunk-BG6ZRB5H.mjs.map +7 -0
  20. package/dist/js/chunks/{chunk-DLWYKFEI.mjs → chunk-CUQPB25U.mjs} +3 -3
  21. package/dist/js/chunks/{chunk-6WLSDZ4O.mjs → chunk-DAIU5SLG.mjs} +2 -2
  22. package/dist/js/chunks/{chunk-VTLBW7QS.mjs → chunk-FS7XY3HT.mjs} +2 -2
  23. package/dist/js/chunks/{chunk-WJXDBPXQ.mjs → chunk-GIW4K4SE.mjs} +8 -12
  24. package/dist/js/chunks/chunk-GIW4K4SE.mjs.map +7 -0
  25. package/dist/js/chunks/{chunk-LNCCYGPC.mjs → chunk-GUB3TNO2.mjs} +6 -5
  26. package/dist/js/chunks/chunk-GUB3TNO2.mjs.map +7 -0
  27. package/dist/js/chunks/{chunk-XH6BEEMY.mjs → chunk-GZKEFWPM.mjs} +39 -31
  28. package/dist/js/chunks/chunk-GZKEFWPM.mjs.map +7 -0
  29. package/dist/js/chunks/{chunk-QKWPQK5N.mjs → chunk-ILP3PDTL.mjs} +11 -3
  30. package/dist/js/chunks/chunk-ILP3PDTL.mjs.map +7 -0
  31. package/dist/js/chunks/{chunk-U2OTHOTI.mjs → chunk-JIDMQGK6.mjs} +3 -2
  32. package/dist/js/chunks/{chunk-U2OTHOTI.mjs.map → chunk-JIDMQGK6.mjs.map} +2 -2
  33. package/dist/js/chunks/chunk-KBNN3QDH.mjs +7 -0
  34. package/dist/js/chunks/{chunk-4PWAPV6F.mjs.map → chunk-KBNN3QDH.mjs.map} +1 -1
  35. package/dist/js/chunks/{chunk-NNYP33NB.mjs → chunk-KHV6DZXX.mjs} +5 -4
  36. package/dist/js/chunks/chunk-KHV6DZXX.mjs.map +7 -0
  37. package/dist/js/chunks/{chunk-XGHORT7J.mjs → chunk-KY6U46SM.mjs} +3 -3
  38. package/dist/js/chunks/{chunk-CKQP6P76.mjs → chunk-LRZMJZ3T.mjs} +4 -3
  39. package/dist/js/chunks/chunk-LRZMJZ3T.mjs.map +7 -0
  40. package/dist/js/chunks/{chunk-6OMRGML6.mjs → chunk-MNPROCZF.mjs} +4 -4
  41. package/dist/js/chunks/{chunk-6OMRGML6.mjs.map → chunk-MNPROCZF.mjs.map} +2 -2
  42. package/dist/js/chunks/{chunk-QV2JAWIZ.mjs → chunk-MZ6Z24BX.mjs} +3 -2
  43. package/dist/js/chunks/{chunk-QV2JAWIZ.mjs.map → chunk-MZ6Z24BX.mjs.map} +2 -2
  44. package/dist/js/chunks/{chunk-CCWDV5CR.mjs → chunk-NS2UMNZV.mjs} +2 -2
  45. package/dist/js/chunks/{chunk-UBLRRJ7N.mjs → chunk-PM655FXL.mjs} +2 -2
  46. package/dist/js/chunks/{chunk-IFXVDDDH.mjs → chunk-QERLECVU.mjs} +3 -3
  47. package/dist/js/chunks/{chunk-GZWPXXY6.mjs → chunk-QJABDLSD.mjs} +5 -2
  48. package/dist/js/chunks/chunk-QJABDLSD.mjs.map +7 -0
  49. package/dist/js/chunks/{chunk-UNEMYWEW.mjs → chunk-S3XDFGSZ.mjs} +2 -2
  50. package/dist/js/chunks/chunk-TBM3FT7G.mjs +398 -0
  51. package/dist/js/chunks/chunk-TBM3FT7G.mjs.map +7 -0
  52. package/dist/js/chunks/chunk-UEXCIMJZ.mjs +214 -0
  53. package/dist/js/chunks/chunk-UEXCIMJZ.mjs.map +7 -0
  54. package/dist/js/chunks/{chunk-P3G3QHII.mjs → chunk-VGZSAFTX.mjs} +11 -4
  55. package/dist/js/chunks/{chunk-P3G3QHII.mjs.map → chunk-VGZSAFTX.mjs.map} +2 -2
  56. package/dist/js/chunks/{chunk-UAEAQBRC.mjs → chunk-X7OCHZVF.mjs} +2 -2
  57. package/dist/js/chunks/{chunk-EC63CHXU.mjs → chunk-YMSXJON6.mjs} +7 -6
  58. package/dist/js/chunks/chunk-YMSXJON6.mjs.map +7 -0
  59. package/dist/js/chunks/{chunk-QVVEWBOF.mjs → chunk-Z2NRKI7R.mjs} +2 -2
  60. package/dist/js/chunks/{chunk-PIJ2TAR3.mjs → chunk-ZAS25YFD.mjs} +2 -2
  61. package/dist/js/chunks/chunk-ZKZKNSLC.mjs +1 -0
  62. package/dist/js/expressive.cjs +905 -117
  63. package/dist/js/expressive.cjs.map +4 -4
  64. package/dist/js/expressive.js +905 -117
  65. package/dist/js/expressive.js.map +4 -4
  66. package/dist/js/expressive.min.js +10 -10
  67. package/dist/js/expressive.min.js.map +4 -4
  68. package/dist/js/expressive.mjs +57 -45
  69. package/dist/js/expressive.mjs.map +1 -1
  70. package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
  71. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  72. package/dist/js/internal/behaviors/forms.mjs +2 -2
  73. package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
  74. package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
  75. package/dist/js/internal/components/autocomplete.mjs +3 -3
  76. package/dist/js/internal/components/buttons.mjs +2 -2
  77. package/dist/js/internal/components/cards.mjs +2 -2
  78. package/dist/js/internal/components/carousel.mjs +2 -2
  79. package/dist/js/internal/components/chips.mjs +4 -4
  80. package/dist/js/internal/components/commandPalette.mjs +2 -2
  81. package/dist/js/internal/components/confetti.mjs +8 -0
  82. package/dist/js/internal/components/confetti.mjs.map +7 -0
  83. package/dist/js/internal/components/datepicker.mjs +5 -5
  84. package/dist/js/internal/components/expandingCard.mjs +2 -2
  85. package/dist/js/internal/components/heatmapChart.mjs +1 -1
  86. package/dist/js/internal/components/index.mjs +50 -38
  87. package/dist/js/internal/components/lightbox.mjs +2 -2
  88. package/dist/js/internal/components/mapView.mjs +9 -0
  89. package/dist/js/internal/components/mapView.mjs.map +7 -0
  90. package/dist/js/internal/components/menu.mjs +2 -2
  91. package/dist/js/internal/components/messageScroller.mjs +2 -2
  92. package/dist/js/internal/components/particles.mjs +8 -0
  93. package/dist/js/internal/components/particles.mjs.map +7 -0
  94. package/dist/js/internal/components/pieChart.mjs +1 -1
  95. package/dist/js/internal/components/questionnaire.mjs +2 -2
  96. package/dist/js/internal/components/registry.mjs +31 -28
  97. package/dist/js/internal/components/richTextEditor.mjs +2 -2
  98. package/dist/js/internal/components/scrollspy.mjs +1 -1
  99. package/dist/js/internal/components/select.mjs +3 -3
  100. package/dist/js/internal/components/slider.mjs +2 -2
  101. package/dist/js/internal/components/snackbar.mjs +2 -2
  102. package/dist/js/internal/components/tabs.mjs +3 -3
  103. package/dist/js/internal/components/timepicker.mjs +3 -3
  104. package/dist/js/internal/components/tooltip.mjs +2 -2
  105. package/dist/js/internal/core/utils.mjs +1 -1
  106. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  107. package/dist/js/modular.mjs +57 -45
  108. package/dist/types/behaviors/forms.d.ts +5 -0
  109. package/dist/types/components/carousel.d.ts +2 -0
  110. package/dist/types/components/confetti.d.ts +103 -0
  111. package/dist/types/components/datepicker.d.ts +2 -0
  112. package/dist/types/components/index.d.ts +3 -0
  113. package/dist/types/components/mapView.d.ts +151 -0
  114. package/dist/types/components/particles.d.ts +72 -0
  115. package/dist/types/components/pieChart.d.ts +3 -0
  116. package/dist/types/components/registry.d.ts +8 -0
  117. package/dist/types/components/slider.d.ts +1 -1
  118. package/dist/types/components/snackbar.d.ts +2 -0
  119. package/dist/types/components/tabs.d.ts +1 -1
  120. package/dist/types/modular.d.ts +1 -1
  121. package/dist/types/plugins/dockedDisplayPlugin.d.ts +3 -3
  122. package/package.json +2 -1
  123. package/src/sass/components/_buttons.scss +1 -1
  124. package/src/sass/components/_confetti.scss +14 -0
  125. package/src/sass/components/_index.scss +3 -0
  126. package/src/sass/components/_map.scss +188 -0
  127. package/src/sass/components/_particles.scss +14 -0
  128. package/src/sass/components/_table_of_contents.scss +3 -1
  129. package/src/sass/components/forms/_checkboxes.scss +7 -2
  130. package/dist/js/chunks/chunk-3CLXLPYS.mjs.map +0 -7
  131. package/dist/js/chunks/chunk-3VOK6J7U.mjs.map +0 -7
  132. package/dist/js/chunks/chunk-4PWAPV6F.mjs +0 -7
  133. package/dist/js/chunks/chunk-CKQP6P76.mjs.map +0 -7
  134. package/dist/js/chunks/chunk-EC63CHXU.mjs.map +0 -7
  135. package/dist/js/chunks/chunk-GZWPXXY6.mjs.map +0 -7
  136. package/dist/js/chunks/chunk-LNCCYGPC.mjs.map +0 -7
  137. package/dist/js/chunks/chunk-LWBQIX5J.mjs.map +0 -7
  138. package/dist/js/chunks/chunk-NNYP33NB.mjs.map +0 -7
  139. package/dist/js/chunks/chunk-NQLC3YMW.mjs +0 -1
  140. package/dist/js/chunks/chunk-PLYXLSH3.mjs.map +0 -7
  141. package/dist/js/chunks/chunk-QKWPQK5N.mjs.map +0 -7
  142. package/dist/js/chunks/chunk-WJXDBPXQ.mjs.map +0 -7
  143. package/dist/js/chunks/chunk-XH6BEEMY.mjs.map +0 -7
  144. /package/dist/js/chunks/{chunk-55IA2XUC.mjs.map → chunk-3GVFZ4XO.mjs.map} +0 -0
  145. /package/dist/js/chunks/{chunk-DTKR54I6.mjs.map → chunk-4KMNFIFZ.mjs.map} +0 -0
  146. /package/dist/js/chunks/{chunk-K4CJCRGE.mjs.map → chunk-4TKTLGEM.mjs.map} +0 -0
  147. /package/dist/js/chunks/{chunk-DLWYKFEI.mjs.map → chunk-CUQPB25U.mjs.map} +0 -0
  148. /package/dist/js/chunks/{chunk-6WLSDZ4O.mjs.map → chunk-DAIU5SLG.mjs.map} +0 -0
  149. /package/dist/js/chunks/{chunk-VTLBW7QS.mjs.map → chunk-FS7XY3HT.mjs.map} +0 -0
  150. /package/dist/js/chunks/{chunk-XGHORT7J.mjs.map → chunk-KY6U46SM.mjs.map} +0 -0
  151. /package/dist/js/chunks/{chunk-CCWDV5CR.mjs.map → chunk-NS2UMNZV.mjs.map} +0 -0
  152. /package/dist/js/chunks/{chunk-UBLRRJ7N.mjs.map → chunk-PM655FXL.mjs.map} +0 -0
  153. /package/dist/js/chunks/{chunk-IFXVDDDH.mjs.map → chunk-QERLECVU.mjs.map} +0 -0
  154. /package/dist/js/chunks/{chunk-UNEMYWEW.mjs.map → chunk-S3XDFGSZ.mjs.map} +0 -0
  155. /package/dist/js/chunks/{chunk-UAEAQBRC.mjs.map → chunk-X7OCHZVF.mjs.map} +0 -0
  156. /package/dist/js/chunks/{chunk-QVVEWBOF.mjs.map → chunk-Z2NRKI7R.mjs.map} +0 -0
  157. /package/dist/js/chunks/{chunk-PIJ2TAR3.mjs.map → chunk-ZAS25YFD.mjs.map} +0 -0
  158. /package/dist/js/chunks/{chunk-NQLC3YMW.mjs.map → chunk-ZKZKNSLC.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,107 @@ 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
+
8
109
  ## [0.13.1] - 2026-10-08
9
110
 
10
111
  ### Fixed
@@ -222,6 +323,11 @@ the format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
222
323
 
223
324
  ### Fixed
224
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.
225
331
  - A focused line, column, bar or pie chart no longer cancels Escape when its
226
332
  tooltip is already hidden, so a dialog or sheet around the chart can close.
227
333
  Pressing a chart's plot away from its marks focuses it without showing the
@@ -2147,7 +2253,9 @@ are no compatibility aliases.
2147
2253
  - `.tabs` nested in a header or app bar as a secondary row. `.tabs` is a
2148
2254
  standalone component; the `.tabs.transparent` app bar variant is gone with it.
2149
2255
 
2150
- [Unreleased]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.1...HEAD
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
2151
2259
  [0.13.1]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.0...v0.13.1
2152
2260
  [0.13.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.12.0...v0.13.0
2153
2261
  [0.12.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.11.0...v0.12.0
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.13.1` is under active development.
7
+ > ExpressiveCSS version `0.14.1` is under active development.
8
8
 
9
9
  Documentation: [www.expressivecss.com](https://www.expressivecss.com)
10
10
 
@@ -416,6 +416,7 @@ The documentation source lives in `docs/src/` and is published at
416
416
  | `docs/src` | Astro documentation and examples | Yes |
417
417
  | `mcp/expressivecss` | Independently versioned MCP package | Yes |
418
418
  | `skills/expressivecss` | Agent guidance and generated component references | Yes |
419
+ | `skills/expressivecss-review` | Scored interface review that runs five specialist subagents | Yes |
419
420
  | `scripts`, `tests`, `visual` | Generators, verification, and test tooling | Source only |
420
421
  | `semantics.json`, `llm.md`, `m3-guidelines.md` | Markup rules, API reference, design guidance | Yes |
421
422
  | `SEMANTICS.md`, generated skill/MCP data | Derived files checked for drift | Yes |