@expressivecss/expressive 0.13.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/CHANGELOG.md +196 -1
  2. package/README.md +2 -1
  3. package/dist/css/expressive.css +432 -311
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/js/chunks/{chunk-DTKR54I6.mjs → chunk-33QVDDGR.mjs} +3 -3
  8. package/dist/js/chunks/{chunk-SPETGK25.mjs → chunk-45FER6RI.mjs} +5 -5
  9. package/dist/js/chunks/chunk-45FER6RI.mjs.map +7 -0
  10. package/dist/js/chunks/{chunk-WJXDBPXQ.mjs → chunk-5CEAOLUA.mjs} +17 -20
  11. package/dist/js/chunks/chunk-5CEAOLUA.mjs.map +7 -0
  12. package/dist/js/chunks/{chunk-CKQP6P76.mjs → chunk-6VATUZC6.mjs} +12 -7
  13. package/dist/js/chunks/chunk-6VATUZC6.mjs.map +7 -0
  14. package/dist/js/chunks/{chunk-QDAL4IYN.mjs → chunk-74MXKKLN.mjs} +2 -2
  15. package/dist/js/chunks/{chunk-QDAL4IYN.mjs.map → chunk-74MXKKLN.mjs.map} +2 -2
  16. package/dist/js/chunks/{chunk-DLWYKFEI.mjs → chunk-AIURVCG6.mjs} +3 -3
  17. package/dist/js/chunks/{chunk-NNYP33NB.mjs → chunk-BGZLF6JZ.mjs} +19 -18
  18. package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +7 -0
  19. package/dist/js/chunks/chunk-C6CHEWYP.mjs +154 -0
  20. package/dist/js/chunks/chunk-C6CHEWYP.mjs.map +7 -0
  21. package/dist/js/chunks/{chunk-GVGT6MIU.mjs → chunk-CK2XCICY.mjs} +2 -2
  22. package/dist/js/chunks/{chunk-XGHORT7J.mjs → chunk-CXXM2L4F.mjs} +8 -9
  23. package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +7 -0
  24. package/dist/js/chunks/{chunk-QVVEWBOF.mjs → chunk-DXGRXYYL.mjs} +25 -37
  25. package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +7 -0
  26. package/dist/js/chunks/{chunk-QV2JAWIZ.mjs → chunk-FM5CZOUB.mjs} +5 -8
  27. package/dist/js/chunks/{chunk-QV2JAWIZ.mjs.map → chunk-FM5CZOUB.mjs.map} +2 -2
  28. package/dist/js/chunks/{chunk-PLYXLSH3.mjs → chunk-GJL6GCIU.mjs} +46 -58
  29. package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +7 -0
  30. package/dist/js/chunks/chunk-K3HZMFMD.mjs +135 -0
  31. package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +7 -0
  32. package/dist/js/chunks/chunk-KHXZ2A4K.mjs +395 -0
  33. package/dist/js/chunks/chunk-KHXZ2A4K.mjs.map +7 -0
  34. package/dist/js/chunks/chunk-KQACNQ22.mjs +7 -0
  35. package/dist/js/chunks/{chunk-4PWAPV6F.mjs.map → chunk-KQACNQ22.mjs.map} +1 -1
  36. package/dist/js/chunks/chunk-KUFHW3DS.mjs +214 -0
  37. package/dist/js/chunks/chunk-KUFHW3DS.mjs.map +7 -0
  38. package/dist/js/chunks/{chunk-LWBQIX5J.mjs → chunk-KVJAVDBC.mjs} +46 -57
  39. package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +7 -0
  40. package/dist/js/chunks/{chunk-YDCS5S3J.mjs → chunk-L27Q6ZMI.mjs} +2 -2
  41. package/dist/js/chunks/{chunk-CCWDV5CR.mjs → chunk-LQWUDNHZ.mjs} +3 -3
  42. package/dist/js/chunks/{chunk-6OMRGML6.mjs → chunk-M372EDXD.mjs} +7 -13
  43. package/dist/js/chunks/{chunk-6OMRGML6.mjs.map → chunk-M372EDXD.mjs.map} +2 -2
  44. package/dist/js/chunks/{chunk-EC63CHXU.mjs → chunk-M3MURWMB.mjs} +20 -16
  45. package/dist/js/chunks/chunk-M3MURWMB.mjs.map +7 -0
  46. package/dist/js/chunks/{chunk-U2OTHOTI.mjs → chunk-NUHMOAOY.mjs} +19 -33
  47. package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +7 -0
  48. package/dist/js/chunks/{chunk-P3G3QHII.mjs → chunk-OWG3LMUL.mjs} +17 -14
  49. package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +7 -0
  50. package/dist/js/chunks/{chunk-LTWPGFBR.mjs → chunk-PD6HYHAE.mjs} +4 -15
  51. package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +7 -0
  52. package/dist/js/chunks/{chunk-PIJ2TAR3.mjs → chunk-PDG64UHF.mjs} +3 -3
  53. package/dist/js/chunks/{chunk-IFXVDDDH.mjs → chunk-PO3AXVR3.mjs} +38 -64
  54. package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +7 -0
  55. package/dist/js/chunks/{chunk-QKWPQK5N.mjs → chunk-QYGK36OG.mjs} +16 -14
  56. package/dist/js/chunks/chunk-QYGK36OG.mjs.map +7 -0
  57. package/dist/js/chunks/{chunk-UNEMYWEW.mjs → chunk-SFI2U4YW.mjs} +28 -44
  58. package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +7 -0
  59. package/dist/js/chunks/{chunk-VTLBW7QS.mjs → chunk-SMY7GJSS.mjs} +3 -3
  60. package/dist/js/chunks/{chunk-O5XPWXIQ.mjs → chunk-TCCA2HDG.mjs} +39 -31
  61. package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +7 -0
  62. package/dist/js/chunks/{chunk-UBLRRJ7N.mjs → chunk-TSZYSW7F.mjs} +4 -4
  63. package/dist/js/chunks/{chunk-UBLRRJ7N.mjs.map → chunk-TSZYSW7F.mjs.map} +2 -2
  64. package/dist/js/chunks/{chunk-UEZUJQ66.mjs → chunk-UAZSDUVP.mjs} +3 -4
  65. package/dist/js/chunks/{chunk-UEZUJQ66.mjs.map → chunk-UAZSDUVP.mjs.map} +2 -2
  66. package/dist/js/chunks/{chunk-6N2XAEFK.mjs → chunk-UBRZZWRA.mjs} +10 -8
  67. package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +7 -0
  68. package/dist/js/chunks/{chunk-3VOK6J7U.mjs → chunk-UCOE7ZDL.mjs} +47 -45
  69. package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +7 -0
  70. package/dist/js/chunks/{chunk-K4CJCRGE.mjs → chunk-UETTGDLI.mjs} +3 -3
  71. package/dist/js/chunks/{chunk-RHRQKTTX.mjs → chunk-UNCRDLP6.mjs} +6 -9
  72. package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +7 -0
  73. package/dist/js/chunks/{chunk-LNCCYGPC.mjs → chunk-VGNYF6FB.mjs} +8 -10
  74. package/dist/js/chunks/chunk-VGNYF6FB.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-UAEAQBRC.mjs → chunk-VGPGBNGL.mjs} +4 -12
  76. package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +7 -0
  77. package/dist/js/chunks/chunk-VKAUVTQY.mjs +1 -0
  78. package/dist/js/chunks/{chunk-HKT2S7VM.mjs → chunk-VM4FTS7L.mjs} +3 -3
  79. package/dist/js/chunks/{chunk-55IA2XUC.mjs → chunk-WDK4T63U.mjs} +8 -11
  80. package/dist/js/chunks/chunk-WDK4T63U.mjs.map +7 -0
  81. package/dist/js/chunks/{chunk-XH6BEEMY.mjs → chunk-WOCCTVUF.mjs} +51 -39
  82. package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +7 -0
  83. package/dist/js/chunks/{chunk-GZWPXXY6.mjs → chunk-WQYN5L4E.mjs} +14 -16
  84. package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +7 -0
  85. package/dist/js/chunks/{chunk-6WLSDZ4O.mjs → chunk-X4ISMKE2.mjs} +2 -2
  86. package/dist/js/chunks/{chunk-3DHK5CZU.mjs → chunk-XAEAEHIX.mjs} +6 -8
  87. package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +7 -0
  88. package/dist/js/chunks/{chunk-3CLXLPYS.mjs → chunk-ZX6M7SWO.mjs} +43 -29
  89. package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +7 -0
  90. package/dist/js/expressive.cjs +1337 -572
  91. package/dist/js/expressive.cjs.map +4 -4
  92. package/dist/js/expressive.js +1337 -572
  93. package/dist/js/expressive.js.map +4 -4
  94. package/dist/js/expressive.min.js +10 -13
  95. package/dist/js/expressive.min.js.map +4 -4
  96. package/dist/js/expressive.mjs +71 -55
  97. package/dist/js/expressive.mjs.map +1 -1
  98. package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
  99. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  100. package/dist/js/internal/behaviors/forms.mjs +2 -2
  101. package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
  102. package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
  103. package/dist/js/internal/components/appBar.mjs +2 -2
  104. package/dist/js/internal/components/autocomplete.mjs +4 -4
  105. package/dist/js/internal/components/barChart.mjs +4 -4
  106. package/dist/js/internal/components/buttonGroup.mjs +2 -2
  107. package/dist/js/internal/components/buttons.mjs +3 -3
  108. package/dist/js/internal/components/cards.mjs +3 -3
  109. package/dist/js/internal/components/carousel.mjs +3 -3
  110. package/dist/js/internal/components/characterCounter.mjs +2 -2
  111. package/dist/js/internal/components/chips.mjs +5 -5
  112. package/dist/js/internal/components/columnChart.mjs +3 -3
  113. package/dist/js/internal/components/commandPalette.mjs +3 -3
  114. package/dist/js/internal/components/confetti.mjs +8 -0
  115. package/dist/js/internal/components/confetti.mjs.map +7 -0
  116. package/dist/js/internal/components/datepicker.mjs +6 -6
  117. package/dist/js/internal/components/expandingCard.mjs +3 -3
  118. package/dist/js/internal/components/heatmapChart.mjs +3 -3
  119. package/dist/js/internal/components/index.mjs +64 -48
  120. package/dist/js/internal/components/keypad.mjs +9 -0
  121. package/dist/js/internal/components/keypad.mjs.map +7 -0
  122. package/dist/js/internal/components/lightbox.mjs +3 -3
  123. package/dist/js/internal/components/lineChart.mjs +6 -2
  124. package/dist/js/internal/components/mapView.mjs +9 -0
  125. package/dist/js/internal/components/mapView.mjs.map +7 -0
  126. package/dist/js/internal/components/menu.mjs +3 -3
  127. package/dist/js/internal/components/messageScroller.mjs +3 -3
  128. package/dist/js/internal/components/mixedChart.mjs +4 -4
  129. package/dist/js/internal/components/navigationRail.mjs +2 -2
  130. package/dist/js/internal/components/particles.mjs +8 -0
  131. package/dist/js/internal/components/particles.mjs.map +7 -0
  132. package/dist/js/internal/components/pieChart.mjs +3 -3
  133. package/dist/js/internal/components/questionnaire.mjs +3 -3
  134. package/dist/js/internal/components/radarChart.mjs +3 -3
  135. package/dist/js/internal/components/radialChart.mjs +3 -3
  136. package/dist/js/internal/components/registry.mjs +41 -37
  137. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  138. package/dist/js/internal/components/scrollspy.mjs +2 -2
  139. package/dist/js/internal/components/select.mjs +4 -4
  140. package/dist/js/internal/components/slider.mjs +3 -3
  141. package/dist/js/internal/components/snackbar.mjs +2 -2
  142. package/dist/js/internal/components/tabs.mjs +4 -4
  143. package/dist/js/internal/components/timepicker.mjs +4 -4
  144. package/dist/js/internal/components/tooltip.mjs +3 -3
  145. package/dist/js/internal/core/component.mjs +1 -1
  146. package/dist/js/internal/core/utils.mjs +1 -1
  147. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  148. package/dist/js/modular.mjs +71 -55
  149. package/dist/types/behaviors/forms.d.ts +5 -0
  150. package/dist/types/components/autocomplete.d.ts +1 -0
  151. package/dist/types/components/carousel.d.ts +2 -0
  152. package/dist/types/components/confetti.d.ts +103 -0
  153. package/dist/types/components/datepicker.d.ts +5 -4
  154. package/dist/types/components/expandingCard.d.ts +2 -0
  155. package/dist/types/components/index.d.ts +4 -0
  156. package/dist/types/components/keypad.d.ts +34 -0
  157. package/dist/types/components/lightbox.d.ts +3 -5
  158. package/dist/types/components/lineChart.d.ts +4 -0
  159. package/dist/types/components/mapView.d.ts +151 -0
  160. package/dist/types/components/menu.d.ts +1 -0
  161. package/dist/types/components/particles.d.ts +72 -0
  162. package/dist/types/components/pieChart.d.ts +3 -0
  163. package/dist/types/components/radialChart.d.ts +0 -1
  164. package/dist/types/components/registry.d.ts +12 -0
  165. package/dist/types/components/slider.d.ts +3 -1
  166. package/dist/types/components/snackbar.d.ts +3 -0
  167. package/dist/types/components/tabs.d.ts +5 -1
  168. package/dist/types/components/timepicker.d.ts +2 -0
  169. package/dist/types/modular.d.ts +1 -1
  170. package/dist/types/plugins/dockedDisplayPlugin.d.ts +4 -3
  171. package/package.json +2 -1
  172. package/src/sass/abstracts/_breakpoints.scss +0 -1
  173. package/src/sass/abstracts/_elevation.scss +1 -1
  174. package/src/sass/abstracts/_mixins.scss +20 -60
  175. package/src/sass/abstracts/_variables.scss +10 -0
  176. package/src/sass/base/_global.scss +3 -12
  177. package/src/sass/base/_index.scss +1 -1
  178. package/src/sass/components/_badges.scss +1 -8
  179. package/src/sass/components/_bar-chart.scss +1 -1
  180. package/src/sass/components/_button-groups.scss +31 -66
  181. package/src/sass/components/_buttons.scss +1 -1
  182. package/src/sass/components/_cards.scss +6 -25
  183. package/src/sass/components/_carousel.scss +16 -55
  184. package/src/sass/components/_chips.scss +0 -6
  185. package/src/sass/components/_column-chart.scss +1 -1
  186. package/src/sass/components/_confetti.scss +14 -0
  187. package/src/sass/components/_data-table.scss +1 -3
  188. package/src/sass/components/_datepicker.scss +3 -22
  189. package/src/sass/components/_dialog.scss +1 -4
  190. package/src/sass/components/_heatmap-chart.scss +2 -2
  191. package/src/sass/components/_icon-buttons.scss +0 -1
  192. package/src/sass/components/_index.scss +4 -0
  193. package/src/sass/components/_keypad.scss +162 -0
  194. package/src/sass/components/_lightbox.scss +3 -8
  195. package/src/sass/components/_map.scss +188 -0
  196. package/src/sass/components/_menu.scss +31 -74
  197. package/src/sass/components/_mixed-chart.scss +1 -1
  198. package/src/sass/components/_navbar.scss +9 -45
  199. package/src/sass/components/_navigation-rail.scss +23 -32
  200. package/src/sass/components/_page-footer.scss +15 -12
  201. package/src/sass/components/_panes.scss +2 -6
  202. package/src/sass/components/_particles.scss +14 -0
  203. package/src/sass/components/_progress.scss +6 -4
  204. package/src/sass/components/_side-sheet.scss +1 -4
  205. package/src/sass/components/_stepper.scss +0 -4
  206. package/src/sass/components/_table_of_contents.scss +3 -1
  207. package/src/sass/components/_timepicker.scss +4 -36
  208. package/src/sass/components/_toolbar.scss +0 -4
  209. package/src/sass/components/forms/_checkboxes.scss +44 -67
  210. package/src/sass/components/forms/_fieldset.scss +3 -3
  211. package/src/sass/components/forms/_file-input.scss +0 -1
  212. package/src/sass/components/forms/_radio-buttons.scss +10 -36
  213. package/src/sass/components/forms/_select.scss +0 -3
  214. package/src/sass/components/forms/_slider.scss +72 -259
  215. package/src/sass/tokens/_state.scss +2 -2
  216. package/src/sass/tokens/_theme.scss +1 -1
  217. package/src/sass/utilities/_colors.scss +6 -1
  218. package/src/sass/utilities/_index.scss +1 -1
  219. package/dist/js/chunks/chunk-3CLXLPYS.mjs.map +0 -7
  220. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +0 -7
  221. package/dist/js/chunks/chunk-3VOK6J7U.mjs.map +0 -7
  222. package/dist/js/chunks/chunk-4PWAPV6F.mjs +0 -7
  223. package/dist/js/chunks/chunk-55IA2XUC.mjs.map +0 -7
  224. package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
  225. package/dist/js/chunks/chunk-CKQP6P76.mjs.map +0 -7
  226. package/dist/js/chunks/chunk-EC63CHXU.mjs.map +0 -7
  227. package/dist/js/chunks/chunk-GZWPXXY6.mjs.map +0 -7
  228. package/dist/js/chunks/chunk-IFXVDDDH.mjs.map +0 -7
  229. package/dist/js/chunks/chunk-LNCCYGPC.mjs.map +0 -7
  230. package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
  231. package/dist/js/chunks/chunk-LWBQIX5J.mjs.map +0 -7
  232. package/dist/js/chunks/chunk-NNYP33NB.mjs.map +0 -7
  233. package/dist/js/chunks/chunk-NQLC3YMW.mjs +0 -1
  234. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
  235. package/dist/js/chunks/chunk-P3G3QHII.mjs.map +0 -7
  236. package/dist/js/chunks/chunk-PLYXLSH3.mjs.map +0 -7
  237. package/dist/js/chunks/chunk-QKWPQK5N.mjs.map +0 -7
  238. package/dist/js/chunks/chunk-QVVEWBOF.mjs.map +0 -7
  239. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
  240. package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
  241. package/dist/js/chunks/chunk-U2OTHOTI.mjs.map +0 -7
  242. package/dist/js/chunks/chunk-UAEAQBRC.mjs.map +0 -7
  243. package/dist/js/chunks/chunk-UNEMYWEW.mjs.map +0 -7
  244. package/dist/js/chunks/chunk-WJXDBPXQ.mjs.map +0 -7
  245. package/dist/js/chunks/chunk-XGHORT7J.mjs.map +0 -7
  246. package/dist/js/chunks/chunk-XH6BEEMY.mjs.map +0 -7
  247. /package/dist/js/chunks/{chunk-DTKR54I6.mjs.map → chunk-33QVDDGR.mjs.map} +0 -0
  248. /package/dist/js/chunks/{chunk-DLWYKFEI.mjs.map → chunk-AIURVCG6.mjs.map} +0 -0
  249. /package/dist/js/chunks/{chunk-GVGT6MIU.mjs.map → chunk-CK2XCICY.mjs.map} +0 -0
  250. /package/dist/js/chunks/{chunk-YDCS5S3J.mjs.map → chunk-L27Q6ZMI.mjs.map} +0 -0
  251. /package/dist/js/chunks/{chunk-CCWDV5CR.mjs.map → chunk-LQWUDNHZ.mjs.map} +0 -0
  252. /package/dist/js/chunks/{chunk-PIJ2TAR3.mjs.map → chunk-PDG64UHF.mjs.map} +0 -0
  253. /package/dist/js/chunks/{chunk-VTLBW7QS.mjs.map → chunk-SMY7GJSS.mjs.map} +0 -0
  254. /package/dist/js/chunks/{chunk-K4CJCRGE.mjs.map → chunk-UETTGDLI.mjs.map} +0 -0
  255. /package/dist/js/chunks/{chunk-NQLC3YMW.mjs.map → chunk-VKAUVTQY.mjs.map} +0 -0
  256. /package/dist/js/chunks/{chunk-HKT2S7VM.mjs.map → chunk-VM4FTS7L.mjs.map} +0 -0
  257. /package/dist/js/chunks/{chunk-6WLSDZ4O.mjs.map → chunk-X4ISMKE2.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,193 @@ the format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.15.0] - 2026-10-14
9
+
10
+ ### Added
11
+
12
+ - The agent skill has a layout guide, `expressivecss-layout`. It covers
13
+ Material's layout principles, the five breakpoints with their grid
14
+ prefixes and Sass mixins, the canonical layout starting points,
15
+ right-to-left support, and where each Material layout term lives in
16
+ ExpressiveCSS. Its breakpoints reference lists the panes and components
17
+ for each breakpoint and walks through Material's five questions for the
18
+ next size: what to reveal, divide, resize, reposition or swap. Its
19
+ canonical layouts reference covers feed, list-detail and supporting pane
20
+ layouts, including list-detail behavior when the window crosses 840px and
21
+ a grid fallback for supporting content that must stack on narrow windows.
22
+ Its grids and spacing reference maps Material's 4, 8 and 12 column grids
23
+ onto the 12-track `.row`, rulers onto containers and pane margins, and
24
+ covers grouping, rhythm and opt-in density with 48px targets. The design
25
+ guide's scaffold reference now lists the recommended pane count for each
26
+ breakpoint, the 50% split-pane rule with a navigation rail, the
27
+ three-pane limit, drag-handle toggling and persistent resizing, and the
28
+ co-planar, floating and docked ways to show more than one pane.
29
+ - The scroll area docs show `.scroll-area` on `<html>` for a themed page
30
+ scrollbar. A browser test covers page scrolling and theme colors.
31
+ - `.keypad` and `.keyboard` are on-screen keys that type into the text
32
+ field named by `aria-controls`. A keypad is three columns of round keys for
33
+ PINs, codes and dial pads; a keyboard is rows of keys sized from a column
34
+ count, with an optional `.numbers` row of shorter digit keys that
35
+ `hidden` drops. Keys with a `value` type at the caret and fire `input`; `data-key`
36
+ keys handle Backspace, Enter and a one-shot Shift. Keys square their
37
+ corners on press, and a `wide` key spans two cells. A key inside the
38
+ field's `.field`, such as a trailing Backspace, works too. Browsers skip
39
+ `minlength` for scripted edits, so the docs give a minimum length as
40
+ `pattern`. `Keypad` is in `AutoInit()` and takes an `onKey` option.
41
+
42
+ ### Changed
43
+
44
+ - The `expressivecss` skill is version 0.11.0. It adds the
45
+ `expressivecss-layout` guide and component guides for keypad and keyboard.
46
+
47
+ ### Fixed
48
+
49
+ - Reference tables on the docs site scroll sideways inside their own box on
50
+ narrow windows. At 375px, 22 docs pages used to scroll the whole page
51
+ sideways, mostly because of tables with long token names and defaults.
52
+ Three pages still do, because their demos (the 12-column grid, the large
53
+ icon and the extra-large split button) are wider than a phone.
54
+
55
+ - A snackbar dismissed by a swipe now slides off the side it was swiped
56
+ toward, starting from where the pointer let go. It used to jump to the
57
+ right at once, even after a swipe to the left, because the dismiss
58
+ transition replaced the transform transition before it could run.
59
+ - Date picker days outside `minDate`/`maxDate`, weekends under
60
+ `disableWeekends`, days rejected by `disableDayFn`, and the adjacent-month
61
+ days from `showDaysInNextAndPreviousMonths` now use the M3 disabled text
62
+ color and ignore the pointer. The rule looked for the state class on the
63
+ day button, but the picker puts it on the cell, so these days looked
64
+ selectable.
65
+ - A footer whose only child is a plain `<nav>` link column now gets the full
66
+ page footer styles. When the navigation bar arrived, only the first footer
67
+ rule was narrowed to a lone `.navigation-bar`. The grid, `.filled`, link
68
+ and legal bar rules still skipped any footer with a lone `<nav>`. Pane
69
+ footers use the same guard, so they keep their flex action row.
70
+ - Map markers and the column, bar and mixed chart hover layers mix
71
+ `in oklab` like the rest of the framework. Each mix is with `transparent`,
72
+ so the rendered colors do not change.
73
+ - The date picker's unused `.year-text` no longer sets `on-primary`, a
74
+ leftover from the removed primary header.
75
+ - A `data-tooltip-id` that names no element now logs an error and shows the
76
+ `data-tooltip` text. A `.tabs` bar with no links logs an error, and
77
+ swipeable tabs whose links reach no panel act as normal tabs. Each of these
78
+ used to throw, which stopped `AutoInit()` before the components after it.
79
+ - Reopening a date picker no longer re-reads a value it wrote itself. Without
80
+ a custom `parse`, `Date.parse` read a `dd/mm/yyyy` value of `05/10/2026` as
81
+ 10 May and passed that to `onSelect`.
82
+ - Space and Enter reach an autocomplete's text field while the list is
83
+ closed. The menu's trigger keys cancelled them, so a space typed after
84
+ Escape was lost and Enter could not submit the form. ArrowUp and ArrowDown
85
+ open the list with the current matches.
86
+ - Autocomplete fires `change` and `onAutocomplete` only when the selection
87
+ changes, as documented, instead of after every search. `setMenuItems` no
88
+ longer replaces `options.data`, so the documented custom `onSearch` filter
89
+ keeps searching the full data set.
90
+ - A chart cell such as `e5` or `1e400` is a gap. These passed the number
91
+ check but read as `NaN` or `Infinity`, so one such cell turned every point
92
+ in the chart into `NaN` and nothing was drawn.
93
+
94
+ ## [0.14.1] - 2026-10-11
95
+
96
+ ### Fixed
97
+
98
+ - The capability roadmap's source links point at a commit on `master`. The
99
+ 0.14.0 links pointed at a pull request commit that the squash merge left
100
+ off `master`, which stopped the 0.14.0 release before it reached npm. A
101
+ test now fails when the pinned commit is not an ancestor of the checkout.
102
+ 0.14.1 contains the 0.14.0 changes below.
103
+
104
+ ## [0.14.0] - 2026-10-11
105
+
106
+ ### Added
107
+
108
+ - The `expressivecss-review` agent skill reviews a page, template, fragment
109
+ or screenshot with five specialist subagents (theme and tokens, layout,
110
+ component markup, lifecycle and accessibility, framework rules). It reuses
111
+ the `expressivecss` guides, version resolver and `expressivecss-lint`, and
112
+ returns one report scored out of 100 with five 20-point sections. One or two
113
+ critical findings cap the score at 69, and three or more at 49.
114
+ - `.map` is an interactive map built on MapLibre. The page installs
115
+ `maplibre-gl` and passes the module to `MapView.init()`; ExpressiveCSS does
116
+ not bundle it. `.map-marker` children sit at their `data-lng-lat`, can open
117
+ a `.map-popup` named by `aria-controls`, show a `.map-marker-label` and be
118
+ dragged with `data-draggable`. `.map-controls` buttons zoom, reset north,
119
+ locate the reader and go full screen. `addRoute()`, `addArcs()` and
120
+ `addClusters()` draw data in theme colors. The default OpenFreeMap style
121
+ follows the light or dark theme.
122
+ - `.confetti` bursts theme-colored confetti. A button with the class bursts
123
+ from its center over the page when clicked, a `<canvas class="confetti">`
124
+ bursts inside its own box, and `Expressive.Confetti.fire(options)` bursts
125
+ over the page from script. Options cover the count, angle, spread, speed,
126
+ gravity, drift, colors, shapes and size. The page canvas draws above an
127
+ open modal dialog and lets clicks through. Nothing is drawn when the reader
128
+ prefers reduced motion.
129
+ - `<canvas class="particles">` fills its positioned ancestor with drifting
130
+ dots in the theme's on-surface color that lean toward the pointer. Options
131
+ cover the count, size, color, drift and how far and how fast the dots
132
+ follow the pointer. The canvas lets clicks through, and under reduced
133
+ motion the dots are drawn once and stay still.
134
+
135
+ ### Changed
136
+
137
+ - The docs site has a new shell. A rail holds the five catalogue groups from
138
+ 840px, with the current group's pages beside it from 1200px. Below 1200px
139
+ the menu button opens the catalogue in a side sheet. Each page opens with a
140
+ breadcrumb, title, description and a "View as Markdown" link, and the table
141
+ of contents sits in a sticky column. Page content and URLs are unchanged.
142
+ - The `expressivecss` skill is version 0.10.0. It adds guides for map,
143
+ confetti and particles. Its version resolver sizes file reads to the file
144
+ and reports a file that grows during a read as changed.
145
+
146
+ ### Fixed
147
+
148
+ - Idle components no longer listen to the whole document. Carousel attaches
149
+ its pointer listeners while a mouse press is down, Tooltip listens for Escape
150
+ while open, and the docked date picker listens for outside clicks while
151
+ shown.
152
+ - Calling `Forms.Init()`, `BottomSheets.Init()` or `SideSheets.Init()` again,
153
+ as a page that loads both the root and `/modular` entries can, no longer
154
+ adds a second set of document listeners.
155
+ - `Menu.destroy()` no longer throws when the menu's target element is missing,
156
+ which used to leave its listeners attached.
157
+ - `Utils.throttle` times calls with `performance.now()`, so a system clock
158
+ change cannot hold a call back.
159
+ - More hot-path fixes:
160
+ - ScrollSpy skips the document-wide link lookup while the same section
161
+ stays current.
162
+ - MapView finds its zoom buttons once, not on every `move` event.
163
+ - PieChart reuses one percent formatter per legend instead of making one
164
+ per row.
165
+ - Snackbar measures its width once per swipe, not on every pointer move.
166
+ - Slider updates once per drag frame. Its `pointermove` update also ran
167
+ before the browser moved the value.
168
+ - The heatmap tooltip measures its cell before writing to the page.
169
+ - Datepicker checks each calendar row's markup once.
170
+ - Less work on hot paths:
171
+ - Datepicker arrow keys inside the shown month move focus without
172
+ redrawing the grid.
173
+ - Autocomplete renders the result list once per keystroke while its menu is
174
+ open. It used to render the previous results first, and twice more with
175
+ `isMultiSelect`.
176
+ - Particles stop animating and tracking the pointer while the canvas is off
177
+ screen.
178
+ - Carousel reads all item positions before writing parallax offsets and works
179
+ out item sizes before setting them, so scrolling no longer forces a style
180
+ recalculation per item.
181
+ - Tabs throttle their window resize handling.
182
+ - `Utils.throttle` no longer stalls when the system clock moves backwards.
183
+ - Autocomplete with `allowUnsafeHTML` highlights the typed text inside the
184
+ label's text only. It used to insert the highlight into the HTML string, so a
185
+ match inside an attribute value could close the attribute and turn the rest
186
+ of the sanitized label into markup.
187
+ - Table-of-contents links are 48dp tall, the Material touch target, instead
188
+ of 32dp. `--md-comp-toc-item-height` sets a denser height.
189
+ - In Firefox, a carousel that moved several items while its item sizes were
190
+ still changing could slide back to an earlier item after it had settled.
191
+ Firefox re-snapped the track to whichever item it had passed mid-move.
192
+ Snapping is now off while the carousel scrolls to an item and comes back
193
+ once the item is in place.
194
+
8
195
  ## [0.13.1] - 2026-10-08
9
196
 
10
197
  ### Fixed
@@ -222,6 +409,11 @@ the format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
222
409
 
223
410
  ### Fixed
224
411
 
412
+ - A checkbox label written as `<input type="checkbox"><span>…</span>` keeps
413
+ links and other inline elements in its text. The span was a flex box, so
414
+ each text run and link became a separate item: the spaces around a link
415
+ disappeared and the words split into columns. It now lays out as inline
416
+ text, and one line still sits centered in the 48px target.
225
417
  - A focused line, column, bar or pie chart no longer cancels Escape when its
226
418
  tooltip is already hidden, so a dialog or sheet around the chart can close.
227
419
  Pressing a chart's plot away from its marks focuses it without showing the
@@ -2147,7 +2339,10 @@ are no compatibility aliases.
2147
2339
  - `.tabs` nested in a header or app bar as a secondary row. `.tabs` is a
2148
2340
  standalone component; the `.tabs.transparent` app bar variant is gone with it.
2149
2341
 
2150
- [Unreleased]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.1...HEAD
2342
+ [Unreleased]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.15.0...HEAD
2343
+ [0.15.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.14.1...v0.15.0
2344
+ [0.14.1]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.14.0...v0.14.1
2345
+ [0.14.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.1...v0.14.0
2151
2346
  [0.13.1]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.13.0...v0.13.1
2152
2347
  [0.13.0]: https://github.com/BaezFJ/ExpressiveCSS/compare/v0.12.0...v0.13.0
2153
2348
  [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.15.0` 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 |