@maggioli-design-system/magma-react 2.1.0 → 2.3.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.
package/AGENTS.md CHANGED
@@ -5,7 +5,7 @@
5
5
  -->
6
6
  # @maggioli-design-system/magma-react - agent install guide
7
7
 
8
- > Version 2.1.0. You (the agent) are installing Magma into THIS project. Do not
8
+ > Version 2.3.0. You (the agent) are installing Magma into THIS project. Do not
9
9
  > assume the setup - detect it from the project, then ask the user only for what you
10
10
  > cannot infer. The detailed steps live in [`agents/install.md`](agents/install.md)
11
11
  > (this target) and [`agents/assets.md`](agents/assets.md) (shared styles, fonts,
@@ -23,31 +23,44 @@ Inspect the consumer project before asking anything:
23
23
  | Tailwind + version | `tailwindcss` in deps: v4 -> the CSS imports, v3 -> the JS preset (see agents/assets.md) |
24
24
  | SSR | `@angular/ssr` / Angular Universal, or Next App Router |
25
25
  | Compatible versions | derive from the installed `@maggioli-design-system/magma` major (see matrix in install.md) |
26
+ | Editor | a `.vscode/` folder -> VS Code; nothing -> ask (step 2) |
26
27
 
27
28
  ## Step 2 - ask only the gaps
28
29
 
29
30
  Ask the user only what detection left undecided. Typical questions:
30
31
 
31
- 1. **Icons**: use the prebuilt set (`@maggioli-design-system/svg-icons`) or do you need
32
- **iconsauce** for tree-shaking / custom icons? Most consumers do NOT need iconsauce -
33
- Magma already ships resolved SVGs; iconsauce is an internal build dependency. Only
34
- add `@iconsauce/*` if the user wants their own icon pipeline.
32
+ 1. **Icons**: which sets does the app use, and how should they be served? Every slug must
33
+ be served at `<mdsIconSvgPath><slug>.svg`, and each set comes from its own package:
34
+ Magma ships only `mgg/` (`@maggioli-design-system/svg-icons`), while `mi/` and
35
+ `mdi/` come from `@material-icons/svg` and `@mdi/svg`, and none of them is a
36
+ dependency of this package. The routes are in agents/assets.md section 3: **iconsauce**,
37
+ what Magma uses (it reads the sources and writes only the icons they name), or a copy
38
+ script that serves the files in the slug layout. Copying the `svg-icons` folder as it
39
+ is renders nothing: its files are not under `mgg/`.
35
40
  2. **Static assets path**: where are static files served from? This sets `mdsIconSvgPath`
36
41
  and the SVG copy destination.
37
42
  3. **Dark mode / preferences**: needed? If yes, wire the preference classes and components.
38
43
  4. Confirm the version row if the installed major is ambiguous.
44
+ 5. **Editor**: VS Code? It gets token and class autocomplete through two files in
45
+ `.vscode/` (agents/assets.md section 5); for another editor only the token file applies.
39
46
 
40
47
  ## Step 3 - execute
41
48
 
42
49
  1. Install packages and the shared assets - see [`agents/install.md`](agents/install.md).
43
50
  2. Wire styles in the exact cascade-layer order - see [`agents/assets.md`](agents/assets.md).
44
- 3. Copy the icon SVGs to the static path and set `mdsIconSvgPath`.
51
+ 3. Serve every icon slug the app uses at the static path, with the route from step 2, and
52
+ set `mdsIconSvgPath`.
45
53
  4. Register components: import the Mds* components from '@maggioli-design-system/magma-react' (no defineCustomElements needed).
54
+ 5. Set up editor autocomplete - see [`agents/assets.md`](agents/assets.md) section 5: MERGE the
55
+ keys into `.vscode/settings.json` and `.vscode/extensions.json`, never overwrite them.
46
56
 
47
57
  ## Step 4 - verify
48
58
 
49
- Build the app and confirm an `mds-*` component renders and at least one icon loads from
50
- the configured path. Report what was installed, the cascade order used, and the icon path.
59
+ Build the app and confirm an `mds-*` component renders and every icon it names loads
60
+ from the configured path (no 404 on `<path><slug>.svg`). In VS Code, check both halves of
61
+ the autocomplete: `var(--magma-` completes Magma tokens in a CSS file and, with Tailwind,
62
+ `bg-surface-default` shows a swatch. Report what was installed, the cascade order used, the
63
+ icon route and the icon path.
51
64
 
52
65
  ## Using the components
53
66
 
@@ -64,8 +77,11 @@ Once installed, do not guess component APIs or rules - read only the file you ne
64
77
  | Coloring your own UI | [`agents/color.md`](agents/color.md) |
65
78
  | Typography utilities | [`agents/typography.md`](agents/typography.md) |
66
79
  | Dark mode, preferences, named themes, surface levels and elevation, global design decisions, corner geometry | [`agents/theming.md`](agents/theming.md) |
80
+ | Reporting a problem that is Magma's, not this project's (bug, wrong guide, missing token), with this project's origin label | [`agents/reporting.md`](agents/reporting.md) |
81
+ | What changed between the installed version and a newer one, before upgrading | `CHANGELOG.md` of each Magma package, newest release first (`magma-react` and `magma-angular` carry the releases of `magma`) |
67
82
 
68
83
  Tooling that needs structured data reads `documentation.json`: one per component beside
69
84
  its `AGENTS.md`, or `@maggioli-design-system/magma/dist/documentation.json` for all of them
70
- (over 2 MB - do not load it into context). `dist/types/components.d.ts` drives editor
71
- IntelliSense.
85
+ (over 2 MB - do not load it into context). In both, the relative links of the `usage`
86
+ texts resolve from the component's folder, `dist/collection/components/<tag>/`.
87
+ `dist/types/components.d.ts` drives editor IntelliSense.
package/CHANGELOG.md ADDED
@@ -0,0 +1,478 @@
1
+ # Changelog
2
+
3
+ Every release of `@maggioli-design-system/magma-react`, newest first. Each section is the body of the GitHub
4
+ release with the same tag, written by git-cliff from the conventional commits of the
5
+ package.
6
+
7
+ It is released together with `magma`, at the same version: the sections are the
8
+ releases of `magma`.
9
+
10
+ ## [magma@2.3.0] - 2026-10-15
11
+
12
+ ### Bug Fixes
13
+
14
+ - *(mds-text)* Read the animation custom properties when the reveal starts
15
+ - *(mds-text)* Paint the revealed text as text, never as html
16
+ - *(magma)* Keep the HTMLElement shim of the loader in consumer bundles
17
+ - *(mds-input-switch)* Give the off knob of a switch a light colour in dark mode
18
+ - *(mds-input-select)* Keep the hover and focus ring in dark mode and with more contrast
19
+ - *(magma)* Keep the icon lists of the story controls out of the published collection
20
+ - *(mds-table)* Paint the scroll area of an interactive table like its rows while hovered
21
+ - *(mds-pref-theme-item)* Show the color preview next to the label
22
+ - *(mds-pref-theme)* Show the label of the selected item in the trigger
23
+ - *(mds-tab,mds-input-switch)* Animate the slider and the knob only on a change of state
24
+ - *(mds-button)* Give back the icon slug title when another element names the button
25
+ - *(mds-pref)* Keep the document flag and the listeners across a move in the DOM
26
+ - *(mds-button)* Leave a button with an icon given as markup without a role again
27
+ - *(magma)* Lay out the label and the tab of every mds-pref-* control alike
28
+ - *(magma)* Cap the radius of buttons, tabs and fields at a part of their height
29
+ - *(mds-file)* Show the downloaded indicator again and drop crypto-js
30
+ - *(magma)* Name the icon-only buttons inside the components and give every mds-button its role
31
+ - *(mds-filter,mds-filter-item)* Announce the selected state and the count, name the reset button
32
+ - *(mds-filter)* Follow the selection the application sets on the items
33
+ - *(mds-list-item)* Take the text colour of the container instead of painting the items muted
34
+
35
+ ### Build
36
+
37
+ - *(magma)* Prepend the release notes to each package's CHANGELOG.md in the release commit
38
+ - *(design-tokens,identity,styles,svg-icons,icons,magma)* Ship CHANGELOG.md in every package
39
+
40
+ ### Documentation
41
+
42
+ - *(magma)* Say in the agent guides that hydrated.css keeps the box of the components
43
+ - *(magma)* Point the no-bundler loader example of the readme at a real file
44
+ - *(magma)* Document icon routes that serve every slug where mds-icon fetches it
45
+ - *(mds-text)* Regenerate the readme with the usage docs of the yugop fix
46
+ - *(magma)* Set up editor autocomplete in the agent guides, tokens and classes
47
+ - *(magma)* Link the shipped component docs from the agent guides, never plain text
48
+ - *(magma)* Say in the agent guides what the semantic utilities paint without semantic.css
49
+ - *(stencil)* Drop the hand-written sections of the component readmes
50
+ - *(magma)* Lead the icon path setup with IconsSetService and link the mds-icon pattern
51
+ - *(magma)* Have a reporting agent propose the origin label its project lacks
52
+ - *(magma)* Point the agent guides to the identity manifest
53
+ - *(stencil)* Say every mds-pref-* control also works on its own
54
+ - *(magma)* Point to the changelogs in AGENTS.md and in the commit convention
55
+ - *(mds-tab,mds-input-switch)* Regenerate the readmes from the usage docs
56
+
57
+ ### Features
58
+
59
+ - *(mds-input,mds-input-select,mds-input-date,mds-input-date-range)* Add size (sm, md, lg)
60
+ - *(mds-tooltip)* Name the caller with relation="label"
61
+ - *(mds-usage)* Give each variant its own header icon and add an icon prop
62
+ - *(mds-table,mds-table-header-cell)* Emit mdsTableHeaderCellSort, let the back end sort the rows
63
+
64
+ ### Performance
65
+
66
+ - *(mds-button)* Render the spinner only to await, the label without mds-text
67
+ - *(mds-button)* Write each tone once, over the tokens each variant names
68
+ - *(magma)* Prefix the component CSS for the supported browsers, not for IE 11
69
+ - *(magma)* Drop the fallback links that can never resolve
70
+
71
+ ## [magma@2.2.0] - 2026-10-14
72
+
73
+ ### Bug Fixes
74
+
75
+ - *(mds-table-row)* Show the actions of rows revealed by a streamed ssr boundary
76
+
77
+ ### Build
78
+
79
+ - *(magma)* Pin typescript to 5.8.3, the version the lockfile installs
80
+ - *(magma)* Move to typescript 5.9.3 with typescript-eslint 8.71.2
81
+
82
+ ### Documentation
83
+
84
+ - *(magma)* Label issues by the project they come from
85
+ - *(magma)* Never merge a branch with a red pipeline into dev
86
+ - *(magma)* Tell consumer-project agents how to report a Magma problem
87
+
88
+ ### Features
89
+
90
+ - *(magma)* Render href as a real link and route it through NavigationService
91
+
92
+ ### Refactor
93
+
94
+ - *(mds-table-row)* Compare sizerWidth with undefined for the actions margin
95
+
96
+ ## [magma@2.1.0] - 2026-10-10
97
+
98
+ ### Bug Fixes
99
+
100
+ - *(styles,magma)* Require internal dependencies as caret ranges
101
+ - *(magma)* Ship the agent docs in the magma and magma-react tarballs
102
+ - *(stencil)* Apply the mds-pref-* preference once on load, then mirror the shared store
103
+ - *(mds-pref)* Keep data-magma-pref on <html> until the last instance unmounts
104
+ - *(mds-input)* Rebuild the validators when a rule changes after load
105
+ - *(mds-input-date)* Validate again when required, min or max change after load
106
+ - *(mds-input-select)* Show the required tip red when the value is null
107
+ - *(mds-input)* Report the validity to the form, so that required stops the submit
108
+ - *(mds-input-date)* Report the validity to the form
109
+ - *(mds-input-select)* Report a required select left empty to the form
110
+ - *(mds-input-upload)* Submit the files to the form, like a native file input
111
+ - *(mds-input)* Bring back the value of load on a form reset
112
+ - *(mds-input)* Check pattern like a native input, and stop overwriting it
113
+ - *(mds-input)* Emit mdsInputKeydown on keydown, with the KeyboardEvent
114
+ - *(mds-input)* Keep the value when the browser has no Speech API
115
+ - *(mds-input)* Check the format of email and url like the native types
116
+ - *(mds-input)* Check the format of piva and cc
117
+ - *(mds-input-date)* Honour readonly, load pristine and bring back the value on reset
118
+ - *(mds-input-select)* Make multiple work, bring back the selection on reset
119
+ - *(mds-input-switch)* Keep one value per radio group, bring back checked on reset
120
+ - *(mds-input-otp)* Fill the cells from value, bring back the code on reset
121
+ - *(mds-input-range)* Fall back to step 1 like a native input, bring back the value on reset
122
+ - *(mds-input-date-range)* Bound the slotted fields, keep presets in order and in sync at load
123
+ - *(mds-input)* Disable it in a disabled fieldset, like a native input
124
+ - *(mds-input-date)* Disable it in a disabled fieldset, like a native date input
125
+ - *(mds-input-range)* Disable it in a disabled fieldset, like a native range input
126
+ - *(mds-input-select)* Disable it in a disabled fieldset, like a native select
127
+ - *(mds-input-switch)* Disable it in a disabled fieldset, like a native checkbox
128
+ - *(mds-input)* Stop the mic and the steppers on a field the user cannot change
129
+ - *(mds-button-dropdown,mds-button)* Disable the buttons in a disabled fieldset
130
+
131
+ ### Build
132
+
133
+ - *(magma)* Pin internal dependencies as caret ranges
134
+ - *(stencil)* Write the public API snapshot magma.api.txt from the docs JSON
135
+ - *(stencil)* Compute the review level and the release check of a PR
136
+ - *(stencil)* Rate an event detail that extends the old one as minor
137
+ - *(stencil)* Record the disabled prop of three form inputs in magma.api.txt
138
+ - *(stencil)* Record the API changes of the button family in magma.api.txt
139
+ - *(stencil)* Declare a break no consumer can tell apart with API-Compatible
140
+
141
+ ### Documentation
142
+
143
+ - *(storybook)* Render the usage docs in the components' Docs pages
144
+ - *(storybook)* Scroll the docs pages to the heading clicked in the table of contents (#834)
145
+ - *(storybook)* Move the Magma preferences to a toolbar menu
146
+ - *(magma,styles,design-tokens)* Rewrite the color docs on the semantic layer
147
+ - *(magma,styles,design-tokens)* Align the styles and design-tokens docs with the build
148
+ - *(magma,stencil)* Align the agent and component docs with the code
149
+ - *(magma,stencil)* Align the 342 component usage docs with the code
150
+ - *(stencil)* Tell how to place mds-table so it scrolls by itself
151
+ - *(magma)* Document how the form components report their validity
152
+ - *(magma)* Document how the form components submit, reset and report validity
153
+ - *(magma)* Say what disabled and a disabled fieldset do to the form components
154
+ - *(magma)* Every form input follows disabled and a disabled fieldset
155
+ - *(stencil)* Document the API snapshot in SPEC.md, AGENTS.md and the PR template
156
+ - *(magma)* Document the review levels and the release check
157
+ - *(stencil)* Put the form reset JSDoc back on formResetCallback
158
+ - *(mds-button)* Let the controls of the Await story drive it
159
+ - *(magma)* Say how the buttons submit a form and tell the actions apart
160
+
161
+ ### Features
162
+
163
+ - *(magma)* Ship the agent docs as topic fragments and per-component docs
164
+ - *(mds-input-otp)* Add disabled, and disable it in a disabled fieldset
165
+ - *(mds-input-upload)* Add disabled, and disable it in a disabled fieldset
166
+ - *(mds-input-date-range)* Add disabled, and disable it in a disabled fieldset
167
+ - *(mds-input-upload,mds-input-select)* Record name and the selected values in magma.api.txt
168
+ - *(mds-button)* Send name and value to the form it submits, like a native submit button
169
+ - *(mds-button-dropdown,mds-button)* Submit a form from the primary action, with name and value
170
+ - *(mds-button-dropdown)* Emit mdsButtonDropdownClick from the primary action only
171
+
172
+ ### Refactor
173
+
174
+ - *(magma)* Move the release scope matching to commit-scopes.mjs
175
+
176
+ ## [magma@2.0.1] - 2026-10-05
177
+
178
+ ### Bug Fixes
179
+
180
+ - *(mds-icon)* Bump idb-keyval to 6.3.0 so the icon cache reopens a closed IndexedDB connection
181
+ - *(mds-icon)* Keep the whole svg path instead of truncating it
182
+ - *(mds-icon)* Render nothing without a name and stop listening once removed from the page
183
+ - *(stencil)* Treat null and missing props as not set again
184
+
185
+ ### Documentation
186
+
187
+ - *(storybook)* Resolve the story assets relative to the storybook base
188
+ - *(storybook)* Link the published storybook
189
+
190
+ ### Performance
191
+
192
+ - *(mds-icon)* Check the memory cache before reading IndexedDB
193
+
194
+ ## [magma@2.0.0] - 2026-09-30
195
+
196
+ ### Bug Fixes
197
+
198
+ - *(mds-modal)* Fix bug animation display
199
+ - *(magma)* Generate agent docs before stencil build
200
+ - *(mds-keyboard,mds-filter-item,mds-paginator-item,mds-url-view)* Typo disconnectedCallback
201
+ - *(stencil)* Set private function
202
+ - *(stencil)* Resolve eslint doc warning
203
+ - *(mds-keyboard)* Remove redundant .bind on test button onClick
204
+ - *(stencil)* Remove .bind in JSX props flagged by react/jsx-no-bind
205
+ - *(stencil)* Resolve react/jsx-no-bind warnings
206
+ - *(stencil)* Avoid top-level call expression in mds-push-notification-item
207
+ - *(mds-icon)* Remove duplicated method
208
+ - *(storybook)* Use accordion disable-close in color-scale
209
+ - *(stencil)* Dedupe repeated @layer order statements in component CSS
210
+ - *(stencil)* Guard preference observer when MutationObserver is missing
211
+ - *(mds-modal)* Correct backdrop click-through selector
212
+ - *(mds-pref-language-item)* Tolerate unset code prop on first render
213
+ - *(mds-video-wall)* [**breaking**] Rename --mds-video-wall-noise-fitler to --mds-video-wall-noise-filter
214
+ - *(mds-file)* [**breaking**] Rename --mds-file-preview-icon-bacground to --mds-file-preview-icon-background
215
+ - *(mds-img)* Tolerate undefined src without crashing
216
+ - *(stencil)* Stop inline components stretching in grid/flex parents
217
+ - *(stencil)* Fall back to the default theme value, not the dark one
218
+ - *(mds-table)* Tolerate lifecycle races on slotted elements
219
+ - *(stencil)* Give the status icons a role, and the contrast that comes with it
220
+ - *(stencil)* Replace :scope selectors with SSR-safe direct-child queries
221
+ - *(stencil)* Guard browser-only APIs for the hydrate/SSR runtime
222
+ - *(stencil)* Declare pre-hydration host geometry
223
+ - *(mds-usage)* Paint the header with its own background token
224
+ - *(stencil)* Point the dead rings at the republished family, and the shadows at the role
225
+ - *(mds-text)* Guard unknown typography against the default variant
226
+ - *(mds-button)* Guard unknown size against the md typography
227
+ - *(stencil,styles)* Close the escape hatch of #624, and repair the registration snapshots
228
+ - *(mds-paginator)* Scroll on item focus only for keyboard navigation so clicks are not lost
229
+ - *(mds-calendar)* Keep the intrinsic width within --mds-calendar-max-width
230
+ - *(mds-input-date)* Give the dropdown calendar a definite width
231
+ - *(stencil)* Center the calendar day numbers and the input date icons
232
+ - *(mds-input-upload)* Widen the infos column and lay the main actions in a row
233
+ - *(mds-file-preview)* Show the extension fallback icon when the icon prop is unset
234
+ - *(mds-input-upload)* Move the width cap from the infos column to the progress bar
235
+ - *(stencil)* Correct the @Element types of three components
236
+ - *(mds-calendar)* Ignore invalid start-date and end-date instead of throwing
237
+ - *(mds-calendar)* Redraw the range and preview the hover without a parent
238
+ - *(mds-input)* Keep the password mask inside the rounded field
239
+ - *(stencil)* Wire the mds-chip selected state to the tokens the docs promise
240
+ - *(mds-emoji)* Keep the thinking pose centred and let expressions take the face over
241
+ - *(mds-emoji)* Keep the prerender out of the browser only pose restore
242
+ - *(mds-input-date-range)* Repair the :host() selector that voided the slotted color
243
+ - *(stencil)* Write the registered <number> opacities as numbers, not percentages
244
+ - *(stencil)* Delete the ten custom properties nothing ever reads
245
+ - *(stencil)* Drop the two dead properties the codemod manifest flagged
246
+ - *(mds-chip)* Expose the selected state to assistive technology
247
+ - *(stencil)* Remove the seven documented APIs that do not exist at all
248
+ - *(stencil)* Close the mechanical dead chains the full sweep found
249
+ - *(stencil)* Apply the two v1 renames we ship to consumers
250
+ - *(mds-table)* Raise the table background to the overlay surface
251
+ - *(mds-tooltip)* Describe the caller as a tooltip, not as a menu it controls
252
+ - *(mds-input-switch)* Make the native input the focusable, labelled control
253
+ - *(mds-tab-item)* Name icon-only tabs after the host title
254
+ - *(mds-keyboard)* Label the combination checker with aria-label
255
+ - *(mds-progress)* Expose the progress value and hide the nested radial gauge
256
+ - *(mds-details)* Expose the header as a disclosure button, not a banner
257
+ - *(mds-file-preview)* Drop the footer landmark from the infos row
258
+ - *(mds-input-field)* Validate the input that emitted inside the slotted element
259
+ - *(stencil)* Spell the pill one way, on the generated radius scale
260
+ - *(stencil)* Put the hand written radii back on the generated scale
261
+ - *(stencil)* Wire the button corner shape, drop the dead tab style queries
262
+ - *(mds-banner)* Show the actions slotted after the first render
263
+ - *(stencil)* Show the slotted content added after the first render
264
+ - *(mds-dropdown)* Leave the ARIA wiring off a caller that delegates its role
265
+ - *(mds-pref-theme-variant)* Drop the caption that never had a string
266
+ - *(mds-label)* Put the tag back on the pill it was drawn as
267
+ - *(mds-label)* Give the close button one state that shows
268
+ - *(storybook)* Emit the icons named only in the stories
269
+ - *(mds-modal)* Release the body scroll lock when the modal closes
270
+ - *(storybook)* Wrap the body tokens in rgb()
271
+ - *(mds-modal)* Let the page colour through the dialog
272
+ - *(mds-modal)* Measure the bars when the dialog becomes visible
273
+ - *(storybook)* Let the header do what it does on a page
274
+ - *(mds-button-group)* Decide the joined edges among the members of the group
275
+ - *(stencil)* Open a floating panel from its arrow, not from its middle
276
+ - *(mds-dropdown,mds-tooltip)* Place a panel that mounts already visible
277
+ - *(mds-filter)* Centre the selected item wherever the filter sits on the page
278
+ - *(mds-stepper-bar-item)* Number the steps by position, not by child node
279
+ - *(stencil)* Position a floating panel only once it has a box to measure
280
+ - *(mds-dropdown)* Give the panel its outro back
281
+ - *(mds-input-select)* Draw the arrow the way mds-input-date draws its icon
282
+ - *(mds-input-select)* Stop the dark block from repainting the arrow
283
+ - *(mds-mention)* Give the remove button a switch and an event
284
+ - *(mds-table)* Count the selected rows in the batch actions badge
285
+ - *(mds-table-header)* Resolve the select-all switch before ticking it
286
+ - *(storybook)* Key the lists the stories build, and lint for it
287
+ - *(mds-button)* Keep the box of an icon-only button while it awaits
288
+ - *(mds-kpi-item)* Hold the line open while the value is still to come
289
+ - *(stencil)* Animate the text at its full length, from the first frame
290
+ - *(stencil)* Paint the two label variants that four components were missing
291
+ - *(mds-toast)* Park a toast that is not visible outside the screen
292
+ - *(stencil)* Hold back every transition under the animation preference
293
+ - *(stencil)* Let the animations written in JS read the preference too
294
+ - *(mds-tree-item)* End the branch on the icon that covers it
295
+ - *(mds-tree-item)* Give the shorter branch to the first child only
296
+ - *(mds-tree)* Stack the items, not the whitespace between them
297
+ - *(stencil)* Give the entries of a dropdown menu the role of entries
298
+ - *(mds-policy-ai)* Declare the chip panel a group, not a menu
299
+ - *(mds-modal)* Name the dialog, and leave only one of them
300
+ - *(mds-dropdown)* Wire the caller and the panel with references that resolve
301
+ - *(mds-dropdown)* Name the entries of the menu from the panel that declares it
302
+ - *(mds-tooltip)* Let the text of the tip reach the caller it describes
303
+ - *(mds-tab-item)* Let the tab tell whether the popup it opens is showing
304
+ - *(mds-dropdown)* Let go of the caller the target no longer names
305
+ - *(stencil)* Take the escape listener off window when it is detached
306
+ - *(mds-pref-theme)* Write the mode as --magma-pref-theme
307
+ - *(stencil)* Inject the global token fallbacks instead of writing them by hand
308
+ - *(storybook)* Align the chrome and the preview on one color scheme
309
+ - *(mds-badge)* Never fill the outline tone
310
+ - *(mds-progress)* Fill the status bars with the hue, not its ink
311
+ - *(mds-modal)* Keep the close icon visible on the scrim in dark
312
+ - *(mds-file)* Split the name from the extension at the last dot
313
+
314
+ ### Build
315
+
316
+ - *(magma)* Cache agent docs as stencil build outputs
317
+ - *(magma)* Add all target building every project in dependency order
318
+ - *(magma)* Exclude storybook stories and test files from the stencil build
319
+ - *(magma)* Replace yarn with npm as the package manager
320
+ - *(magma)* Drop the @mdi/svg override in favor of @iconsauce/mdi-svg 1.1.0
321
+ - *(magma)* Update dependencies to fix npm audit vulnerabilities
322
+ - *(magma)* Update nx to 23.1.3
323
+ - *(magma)* Make clean-modules remove all nested node_modules and lockfiles
324
+ - *(magma)* Add the root lint configs to the lint target inputs
325
+ - *(magma)* Add @stencil/vitest and align vitest to 4.1.11
326
+ - *(storybook)* Move to the vite builder and run the stories with the vitest addon
327
+ - *(magma)* Declare each dependency in the project that uses it
328
+ - *(magma)* Resolve svg-icons from the workspace and make the Nx graph analysis explicit
329
+ - *(magma)* Pin the remaining dependency ranges
330
+
331
+ ### Changes
332
+
333
+ - *(stencil)* Name the mode mode and the named theme theme
334
+ - *(mds-pref-mode)* Drop theme from the visible label
335
+
336
+ ### Documentation
337
+
338
+ - *(magma)* Add module install instructions for agents
339
+ - *(stencil)* Update property descriptions and types across multiple components
340
+ - *(magma)* Rename install->agents, add usage guide + component catalogue
341
+ - *(stencil)* Update components readme
342
+ - *(stencil)* Update components.d.ts
343
+ - *(mds-accordion-item)* Align docs with disableClose rename
344
+ - *(mds-card-content)* Regenerate component docs
345
+ - *(mds-card-media)* Regenerate component docs
346
+ - *(magma)* Enhance issue templates with new fields and labels
347
+ - *(magma)* Add agentic git governance rules and PR template
348
+ - *(magma)* Require linking work branches to their github issue
349
+ - *(stencil)* Clarify the quiet tone migration mapping
350
+ - *(magma)* Require merge commits when promoting dev into main
351
+ - *(magma)* Detail repo structure in README
352
+ - *(magma)* Require PRs to list every resolved issue with a closing keyword
353
+ - *(stencil)* Add the Semantic roles reference story
354
+ - *(stencil)* Allinea la reference story al ruolo inverse-surface
355
+ - *(mds-usage)* Restate why the dark header overrides stay removed
356
+ - *(mds-paginator)* Clarify that the focus auto-scroll follows keyboard navigation only
357
+ - *(mds-calendar)* Document and register --mds-calendar-max-width
358
+ - *(magma)* Point contributor docs at npm instead of yarn
359
+ - *(magma)* Document the lint gate in CI
360
+ - *(magma)* Document the vitest based stencil tests
361
+ - *(mds-input)* Recommend autocomplete tokens on login fields
362
+ - *(mds-chip)* Regenerate the readme after the selected-state rewiring
363
+ - *(mds-emoji)* Restore the css custom properties table dropped by the rewiring
364
+ - *(magma)* Require a covering test for every behaviour change
365
+ - *(magma)* Point the test docs at the vitest storybook project
366
+ - *(styles,magma)* Document the corner axis, and stop recommending the hatch
367
+ - *(mds-dropdown)* Write down the roles of the panel, and point the examples at an id
368
+ - *(magma)* Let agents open pull requests into dev, still never merge them
369
+ - *(stencil)* Customize the entity and tree stories with semantic roles
370
+ - *(mds-badge)* Regenerate the readme for the outline note
371
+ - *(magma)* Document the wrapper tests
372
+ - *(magma)* Document the tag-only beta releases
373
+ - *(styles,magma)* Update the compatibility table for magma 2 stable
374
+
375
+ ### Features
376
+
377
+ - *(mds-modal)* Update component properties and styles for improved functionality and consistency
378
+ - *(mds-modal)* Refine animation styles and transitions for improved modal behavior
379
+ - *(magma)* Add .browserslistrc for modern CSS support and update package dependencies
380
+ - *(mds-icon)* Expose IconsSetService to set the SVG path without sessionStorage
381
+ - *(mds-calendar,mds-input-date,mds-input-date-range)* Port magma 1.12 from support/v1.x
382
+ - *(stencil)* Inline the semantic layer as var() fallbacks
383
+ - *(stencil)* Adopt --magma-surface-* in surface components
384
+ - *(mds-table)* Consume semantic surfaces and flip text with the theme
385
+ - *(stencil)* Add the semantic surfaces Storybook cheat-sheet
386
+ - *(stencil)* Wire named themes into storybook and fix the variant components
387
+ - *(stencil)* Coordinate lock-dark between the pref theme lanes
388
+ - *(design-tokens,stencil,styles)* Collapse accent roles to {accent, ai}
389
+ - *(stencil)* [**breaking**] Make the published packages tree-shakeable
390
+ - *(design-tokens,styles,stencil)* Publish the hue role scales and promote them under pref-contrast-more
391
+ - *(styles,stencil)* Register the component custom properties from globals.css
392
+ - *(design-tokens,styles,stencil)* Retint the raw ramp with the theme via --magma-scale-*
393
+ - *(stencil)* Enable SSR with declarative shadow DOM
394
+ - *(stencil)* Add check.ssr guard for SSR regressions
395
+ - *(design-tokens,styles,stencil)* Give the colored hues the emphasis band states
396
+ - *(design-tokens,styles,stencil)* A shadow ink role, the ring family back, and a guard
397
+ - *(stencil)* Add hide-today to mds-calendar and the date inputs
398
+ - *(styles,stencil)* Emit the corner axis, shape and scale in one block
399
+ - *(stencil)* Point the shaped components at the shape-aware scale
400
+ - *(stencil)* Let mds-pref-theme-variant drive the corner axis
401
+ - *(stencil)* Forward an accessible name to the native controls of the inputs
402
+ - *(mds-dropdown)* Walk the menu with the keyboard, and close it back on the caller
403
+
404
+ ### Refactor
405
+
406
+ - *(mds-modal)* Replace @apply with direct gap property for consistency
407
+ - *(mds-avatar-stack)* Drive slotted item size from parent, drop :host-context
408
+ - *(stencil)* Drive slotted child styling from parent, drop :host-context
409
+ - *(stencil)* Drop precautionary safari :host-context in size container queries
410
+ - *(stencil)* Remove ineffective safari :host-context gates
411
+ - *(mds-tab)* Propagate direction/animation to items, drop :host-context
412
+ - *(mds-table)* Propagate selection to rows, drop :host-context
413
+ - *(mds-tree)* Propagate toggle-position/appearance to items, drop :host-context
414
+ - *(mds-tree)* Resolve effective actions in JS, drop last :host-context
415
+ - *(stencil)* Respect strict boolean condition
416
+ - *(mds-accordion)* Rename closable to disableClose
417
+ - *(mds-banner)* Rename cockade to hideCockade
418
+ - *(mds-breadcrumb)* Rename back to hideBack
419
+ - *(mds-card)* Rename autoGrid to disableAutoGrid
420
+ - *(mds-dropdown)* Rename arrow/autoPlacement/shift/smooth to negative props
421
+ - *(mds-file)* Rename showDownloadedIcon to hideDownloadedIcon
422
+ - *(mds-header)* Rename backdrop to hideBackdrop
423
+ - *(mds-help)* Rename autoPlacement to disableAutoPlacement
424
+ - *(mds-input-date)* Use disable-auto-placement on dropdown
425
+ - *(mds-input-date-range)* Use disable-auto-placement on dropdown
426
+ - *(mds-modal)* Rename backdrop to hideBackdrop
427
+ - *(mds-notification)* Rename visible to dismissed
428
+ - *(mds-pref-language)* Drop autoPlacement on dropdown
429
+ - *(mds-pref-theme-variant)* Drop autoPlacement on dropdown
430
+ - *(mds-push-notification-item)* Default deletable to false
431
+ - *(mds-radial-menu-item)* Use disableAutoPlacement on tooltip
432
+ - *(mds-status-bar)* Use hideBackdrop on modal
433
+ - *(mds-tooltip)* Rename arrow/autoPlacement/shift to negative props
434
+ - *(stencil)* Align floating controller with negative floating props
435
+ - *(stencil)* [**breaking**] Drive language and preferences through a shared reactive store
436
+ - *(storybook)* Sync preview preferences through the addon channel
437
+ - *(mds-pref-language-item)* Use explicit comparisons in code validation
438
+ - *(stencil,styles)* [**breaking**] Migrate --tone-*(bare) usages to --tone-*-seed (#572)
439
+ - *(magma)* Move semantic.config into design-tokens to break the build cycle
440
+ - *(mds-toast)* Consuma il ruolo --magma-surface-inverse
441
+ - *(stencil)* Replace stale bare tone utilities in stories
442
+ - *(stencil)* Read the staged semantic layer from styles build dir
443
+ - *(stencil)* Migrate accent variant partials to semantic accent roles
444
+ - *(design-tokens,styles,stencil)* Name the hue background levels wash-*, not surface-*
445
+ - *(stencil)* Adopt semantic color roles in components
446
+ - *(stencil)* Adopt the semantic status roles where the value is identical
447
+ - *(stencil)* Give the step-04 inks a role, split by what they sit on
448
+ - *(stencil)* Put the status fills on the emphasis band
449
+ - *(stencil)* Adopt the neutral wash band for the pill backgrounds
450
+ - *(stencil)* Give the step-02 inks a role, by what they sit on
451
+ - *(stencil)* Give the status borders a role, strong where the border is the affordance
452
+ - *(magma)* Move the react and angular wrappers out of projects/stencil
453
+ - *(stencil)* [**breaking**] Invert the mds-calendar boolean props to their negative form
454
+ - *(mds-stepper-bar)* Scroll the strip from the boxes
455
+ - *(stencil)* Move the neutral seed backgrounds onto the surface roles
456
+ - *(stencil)* Give the remaining neutral seed grounds a role
457
+ - *(stencil)* Let the contrast layer paint the paper ground
458
+ - *(mds-badge)* Drop the leftovers of the text tone
459
+ - *(stencil)* Move the accent residues onto the accent roles
460
+ - *(stencil)* Move the raw status steps onto the hue roles
461
+ - *(stencil)* Move the ramp-step borders onto the border roles
462
+ - *(stencil)* Retire the ramp steps from the *-pref-* sheets
463
+ - *(stencil)* Move the dark variants onto the inverse roles
464
+ - *(stencil)* Move the step 02 inks onto text-default
465
+ - *(stencil)* Move the step 06 inks onto the text and border roles
466
+ - *(stencil)* Move the step 07 inks onto the text and border roles
467
+ - *(stencil)* Move the step 06/07 grounds onto the wash and border roles
468
+ - *(mds-input)* Align the commented counter hover with wash-base
469
+ - *(stencil)* Move the --magma-scale-NN uses with an identical role onto it
470
+
471
+ ### Styling
472
+
473
+ - *(stencil)* Update accessibility feature with supported browser specs
474
+ - *(stencil)* Move apply tokens to custom proerty based tokens
475
+ - *(stencil)* Replace pref :host-context with dedicated attributes
476
+ - *(stencil)* Replace pref :host-context in variant files with attributes
477
+ - *(stencil)* Various component styles fixes
478
+ - *(stencil)* Quieter unchecked switch track in dark
package/agents/assets.md CHANGED
@@ -8,8 +8,8 @@
8
8
  ## Purpose
9
9
 
10
10
  Canonical setup for the assets every Magma consumer needs, **identical for all three
11
- targets** (web components, React, Angular): styles, fonts, icons and optional brand
12
- identity. The per-target tracks ([`install.md`](install.md)) link here instead of repeating
11
+ targets** (web components, React, Angular): styles, fonts, icons, optional brand
12
+ identity and editor autocomplete. The per-target tracks ([`install.md`](install.md)) link here instead of repeating
13
13
  this. If something about styles/fonts/icons setup is unclear, this file wins.
14
14
 
15
15
  This file is the minimum to get a consumer running. Once it runs: coloring your own UI
@@ -72,10 +72,10 @@ What each file provides:
72
72
  | `colors-rgb.css` | RGB color tokens (`--tone-*`, `--status-*`, ...). Required by components and Tailwind. Also redefines tokens for dark / high-contrast |
73
73
  | `typography.css` | The non-color tokens as CSS vars: fonts, type sizes, spacing, radius, shadows (`--shadow-md-sharp`, ...). Components carry their own fallbacks; your CSS needs this file for `var(--shadow-*)`, `var(--radius-*)` and the `--magma-radius-*` corner scale |
74
74
  | `reset.css` | Opinionated CSS reset |
75
- | `hydrated.css` | Anti-FOUC for Stencil - hides components until hydrated |
75
+ | `hydrated.css` | Anti-FOUC for Stencil - hides components until hydrated, then keeps the margin, padding and border they give themselves against a page reset such as Tailwind's preflight. Import it into `base`, as above |
76
76
  | `transitions.css`, `animations.css` | Shared motion |
77
77
  | `globals.css` | Global `--magma-*` design decisions |
78
- | `semantic.css` | The semantic color roles (`--magma-surface-*`, `--magma-text-*`, ..., see [`color.md`](color.md)). Required: without it the page `body` has no colour, the Tailwind role utilities paint nothing, and components lose named themes and high contrast |
78
+ | `semantic.css` | The semantic color roles (`--magma-surface-*`, `--magma-text-*`, ..., see [`color.md`](color.md)). Required: without it the page `body` has no colour, the Tailwind role utilities are stuck on their light default (the fallback that gives editors a swatch), and components lose dark mode, named themes and high contrast |
79
79
  | `themes.css` | The named themes (`data-theme-name`): retint the semantic roles. Import it after `semantic.css` |
80
80
  | `base.css` | Base element styles (sets `--font-info` body font, etc.) |
81
81
 
@@ -129,40 +129,173 @@ the `vendor` cascade layer and ship offline.
129
129
  ## 3. Icons
130
130
 
131
131
  Icons are consumed at runtime by `mds-icon`, which fetches each icon as an SVG file from
132
- a path the host app configures. A slug starts with its icon set (`mi/` Material Icons,
133
- `mdi/` Material Design Icons, `mgg/` Maggioli) and resolves to
134
- `<mdsIconSvgPath><slug>.svg`: with the path `/svg/`, `mi/baseline/email` is fetched from
135
- `/svg/mi/baseline/email.svg`.
132
+ a path the host app configures. The components' own icons are inlined, so what needs
133
+ serving is the icons the app names.
136
134
 
137
- ### Package and asset copy
135
+ ### The contract
136
+
137
+ Every slug the app uses must be served at `<mdsIconSvgPath><slug>.svg`: with the path
138
+ `/svg/`, `mi/baseline/email` is fetched from `/svg/mi/baseline/email.svg`. A slug starts
139
+ with its icon set, and each set comes from its own package, with its own layout:
140
+
141
+ | Slug | Set | Package | File in the package |
142
+ | ---- | --- | ------- | ------------------- |
143
+ | `mi/<variant>/<name>` | Material Icons | `@material-icons/svg` | `svg/<name>/<variant>.svg` |
144
+ | `mdi/<name>` | Material Design Icons | `@mdi/svg` | `svg/<name>.svg` |
145
+ | `mgg/<name>` | Maggioli | `@maggioli-design-system/svg-icons` | `dist/svg/<name>.svg` |
146
+
147
+ Magma ships only the `mgg/` set, and none of these packages is a dependency of `magma`,
148
+ `magma-react` or `magma-angular`: the route you pick installs what it needs. Copying the
149
+ `svg-icons` folder as it is does NOT follow the contract: its files sit directly in
150
+ `dist/svg/`, while `mds-icon` asks for them under `mgg/`.
151
+
152
+ `mds-usage` still fetches `mi/baseline/info` for its header: serve it too if the app
153
+ uses that component.
154
+
155
+ Any setup that follows the contract works. Two tested routes, both run before every dev
156
+ start and build, with the output folder kept out of git:
157
+
158
+ ### Route 1: iconsauce (what Magma uses)
159
+
160
+ iconsauce reads the sources the way Tailwind reads class names and writes only the icons
161
+ they use, one SVG file per slug, in the folders `mds-icon` expects. Its plugins know the
162
+ three sets and bring their packages along.
138
163
 
139
164
  ```bash
140
- npm i @maggioli-design-system/svg-icons
165
+ npm i -D @iconsauce/core @iconsauce/material-icons @iconsauce/mdi-svg @iconsauce/mgg-icons
141
166
  ```
142
167
 
143
- Copy the SVG library to a publicly served path. The package ships the files under
144
- `@maggioli-design-system/svg-icons/dist/svg/`. Copy them to e.g. `public/svg/` (the
145
- mechanism depends on the bundler - see each track file).
168
+ ```js
169
+ // iconsauce.config.mjs
170
+ import mi from '@iconsauce/material-icons';
171
+ import mdi from '@iconsauce/mdi-svg';
172
+ import mgg from '@iconsauce/mgg-icons';
146
173
 
147
- ### Tell mds-icon where the icons are
174
+ export default {
175
+ content: ['./index.html', './src/**/*.{html,js,jsx,ts,tsx}'], // every file where icon slugs are written
176
+ plugin: [mi, mdi, mgg],
177
+ };
178
+ ```
148
179
 
149
- The simplest way: set `mdsIconSvgPath` in `sessionStorage` before components hydrate.
150
- The value is the public URL of the folder you copied the SVGs into:
180
+ ```json
181
+ "scripts": {
182
+ "icons": "iconsauce --config ./iconsauce.config.mjs --output-svg ./public/svg",
183
+ "predev": "npm run icons",
184
+ "prebuild": "npm run icons"
185
+ }
186
+ ```
151
187
 
152
- ```javascript
153
- window.sessionStorage.setItem('mdsIconSvgPath', '/svg/');
188
+ A slug built at runtime (`'mi/baseline/' + name`) is invisible to iconsauce: write slugs
189
+ in full, or list the computed ones in a file that `content` reads.
190
+
191
+ ### Route 2: serve the files yourself
192
+
193
+ One renaming step: `@material-icons/svg` stores `<name>/<variant>.svg`, while the slug
194
+ wants `mi/<variant>/<name>`. `mdi/` and `mgg/` are plain folder copies. This script covers
195
+ the three sets with Node built-ins only, so it fits any bundler:
196
+
197
+ ```bash
198
+ npm i -D @maggioli-design-system/svg-icons @material-icons/svg @mdi/svg
154
199
  ```
155
200
 
156
- Alternatives, documented in
157
- the mds-icon readme:
201
+ ```js
202
+ // scripts/copy-icons.mjs
203
+ // Copies Magma's icon sets where mds-icon fetches them: <OUT>/<slug>.svg.
204
+ // node scripts/copy-icons.mjs icons.json only the slugs listed in icons.json
205
+ // node scripts/copy-icons.mjs every icon of the three sets (18,720 files, 73 MB)
206
+ import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync } from 'node:fs';
207
+ import { createRequire } from 'node:module';
208
+ import { dirname, join } from 'node:path';
209
+
210
+ const OUT = 'public/svg'; // served at /svg/ by Vite, Next.js and the Angular CLI
211
+ const require = createRequire(import.meta.url);
212
+ const root = (pkg) => dirname(require.resolve(`${pkg}/package.json`));
213
+ const MI = join(root('@material-icons/svg'), 'svg'); // <name>/<variant>.svg
214
+ const MDI = join(root('@mdi/svg'), 'svg'); // <name>.svg
215
+ const MGG = join(root('@maggioli-design-system/svg-icons'), 'dist/svg'); // <name>.svg
216
+
217
+ // Source file of a slug: mi/<variant>/<name>, mdi/<name>, mgg/<name>.
218
+ function source(slug) {
219
+ const [set, ...rest] = slug.split('/');
220
+ if (set === 'mi' && rest.length === 2) return join(MI, rest[1], `${rest[0]}.svg`);
221
+ if (set === 'mdi' && rest.length === 1) return join(MDI, `${rest[0]}.svg`);
222
+ if (set === 'mgg' && rest.length === 1) return join(MGG, `${rest[0]}.svg`);
223
+ throw new Error(`Not a Magma icon slug: ${slug}`);
224
+ }
225
+
226
+ function allSlugs() {
227
+ const names = (dir) => readdirSync(dir).map((file) => file.replace(/\.svg$/, ''));
228
+ return [
229
+ ...readdirSync(MI).flatMap((name) => names(join(MI, name)).map((variant) => `mi/${variant}/${name}`)),
230
+ ...names(MDI).map((name) => `mdi/${name}`),
231
+ ...names(MGG).map((name) => `mgg/${name}`),
232
+ ];
233
+ }
234
+
235
+ const slugs = process.argv[2] ? JSON.parse(readFileSync(process.argv[2], 'utf8')) : allSlugs();
236
+ for (const slug of slugs) {
237
+ const file = source(slug);
238
+ if (!existsSync(file)) throw new Error(`No such icon: ${slug} (${file})`);
239
+ const target = join(OUT, `${slug}.svg`);
240
+ mkdirSync(dirname(target), { recursive: true });
241
+ copyFileSync(file, target);
242
+ }
243
+ console.log(`${slugs.length} icons in ${OUT}/`);
244
+ ```
245
+
246
+ `icons.json` lists the slugs the app uses:
247
+
248
+ ```json
249
+ ["mi/baseline/email", "mi/baseline/send", "mdi/github", "mgg/abitazione-principale"]
250
+ ```
251
+
252
+ ```json
253
+ "scripts": {
254
+ "icons": "node scripts/copy-icons.mjs icons.json",
255
+ "predev": "npm run icons",
256
+ "prebuild": "npm run icons"
257
+ }
258
+ ```
259
+
260
+ A slug that does not exist stops the script with an error. A slug used in the code but
261
+ missing from `icons.json` gives a 404 at runtime: iconsauce avoids that by reading the
262
+ sources. Without `icons.json` the script copies every icon of the three sets, all of
263
+ them deployed: 18,720 files and 73 MB (`mi` 43 MB in five variants, `mdi` 29 MB, `mgg`
264
+ 1.3 MB).
265
+
266
+ ### Only the `mgg/` set
267
+
268
+ An app that uses only Maggioli icons can copy the `svg-icons` folder, into `mgg/` under
269
+ the served path: `@maggioli-design-system/svg-icons/dist/svg/` to `public/svg/mgg/`. With
270
+ the Angular CLI that is an `assets` entry in `angular.json`:
271
+
272
+ ```json
273
+ { "glob": "**/*.svg", "input": "node_modules/@maggioli-design-system/svg-icons/dist/svg", "output": "/svg/mgg" }
274
+ ```
275
+
276
+ ### Tell mds-icon where the icons are
277
+
278
+ Set the public URL of the folder the icons are served from, before the first `mds-icon`
279
+ renders. Two ways:
158
280
 
159
281
  - `IconsSetService.setSvgPath('/svg/')`, imported from
160
- `@maggioli-design-system/magma/services`: sets the path in code, without
161
- `sessionStorage`, and reloads the icons already mounted
162
- - `mdsIcon.setSvgPath('/svg/')` - instance method on a temporary `mds-icon` node, after
163
- `defineCustomElements()` has run
164
- - dispatch `new CustomEvent('mdsIconSvgPathUpdate')` on `window` to force a refresh
165
- after changing the path
282
+ `@maggioli-design-system/magma/services` (recommended): sets the path in code, without
283
+ `sessionStorage`, and reloads the icons already mounted.
284
+ - the `mdsIconSvgPath` key in `sessionStorage`, a one-liner the install tracks use. Some
285
+ browsers block storage (private windows, sandboxed iframes, storage partitioning): there
286
+ only `IconsSetService` works.
287
+
288
+ ```javascript
289
+ import { IconsSetService } from '@maggioli-design-system/magma/services';
290
+
291
+ IconsSetService.setSvgPath('/svg/');
292
+ // or: window.sessionStorage.setItem('mdsIconSvgPath', '/svg/');
293
+ ```
294
+
295
+ Icons mounted before a path set through `sessionStorage` reload on
296
+ `window.dispatchEvent(new CustomEvent('mdsIconSvgPathUpdate'))`. Every option, with its
297
+ snippet, is in the
298
+ [`mds-icon` pattern](../../magma/dist/collection/components/mds-icon/pattern.md).
166
299
 
167
300
  Reference an icon by slug, never inline SVG and never import from an icon-set package:
168
301
 
@@ -190,14 +323,84 @@ Assets live under `@maggioli-design-system/identity/dist/`:
190
323
  - `dist/illustrations/`, `dist/products/` - additional brand imagery
191
324
 
192
325
  These are static read-only files - serve them like any other asset, do not modify
193
- them in the consumer project.
326
+ them in the consumer project. `dist/identity.json` describes them: one entry per family of
327
+ artworks, with its name as the artwork writes it, its owner and kind, and every variant with
328
+ its path, form, colour, the background it is drawn for and its size. Read names and alt texts
329
+ from it instead of from the file names, which lose accents and punctuation.
330
+
331
+ ## 5. Editor autocomplete
332
+
333
+ Two halves, one extension each. Set them up in VS Code; for another editor, point its CSS
334
+ custom property completion at the same `tokens.editor.css` and leave the rest to the user.
335
+
336
+ | Completes | Extension | Fed by |
337
+ | --------- | --------- | ------ |
338
+ | Magma tokens inside `var(--...)`, in scale order, with a swatch on colors | CSS Var Complete (`phoenisx.cssvar`) | `@maggioli-design-system/styles/dist/css/tokens.editor.css`, every public token once |
339
+ | Tailwind classes (`bg-surface-default`, `p-600`), with their value | Tailwind CSS IntelliSense (`bradlc.vscode-tailwindcss`), only if the app uses Tailwind | the CSS entry that imports Tailwind and Magma's theme (section 1) |
340
+
341
+ MERGE these keys into `.vscode/settings.json` and `.vscode/extensions.json`: never overwrite
342
+ a file that exists, the user's own settings stay.
343
+
344
+ ```json
345
+ {
346
+ "cssvar.files": ["node_modules/@maggioli-design-system/styles/dist/css/tokens.editor.css"],
347
+ "cssvar.ignore": [],
348
+ "cssvar.disableSort": true
349
+ }
350
+ ```
351
+
352
+ ```json
353
+ {
354
+ "recommendations": ["phoenisx.cssvar", "bradlc.vscode-tailwindcss"],
355
+ "unwantedRecommendations": ["vunguyentuan.vscode-css-variables"]
356
+ }
357
+ ```
358
+
359
+ Leave `bradlc.vscode-tailwindcss` out of `recommendations` when the app has no Tailwind.
360
+
361
+ The traps, all measured:
362
+
363
+ - `cssvar.ignore` must be `[]`: its default, `["**/node_modules/**"]`, is applied over
364
+ `cssvar.files`, so the path above is dropped and nothing completes.
365
+ - `cssvar.disableSort: true` keeps the order of the file (a scale from its smallest step
366
+ up); without it the list is alphabetical.
367
+ - `vunguyentuan.vscode-css-variables` goes in `unwantedRecommendations`: it sorts
368
+ alphabetically, never opens the list by itself and duplicates every entry next to CSS
369
+ Var Complete.
370
+ - Never import `tokens.editor.css` in the app: it is for editors only, and holds light
371
+ defaults that would freeze theming (it is wrapped in a query that never matches, so an
372
+ import does nothing at best).
373
+
374
+ Tailwind IntelliSense finds the CSS entry on its own, the split imports of section 1
375
+ included. Only if hovering a class shows nothing, add
376
+ `"tailwindCSS.experimental.configFile": "<path of that CSS file>"`. If the app builds class
377
+ names through functions (`clsx`, `cva`, `cn`), list the ones it uses in
378
+ `"tailwindCSS.classFunctions"`, so the classes inside their calls complete too.
379
+
380
+ Verify, after reloading the window:
381
+
382
+ - in a CSS file, `var(--magma-surface` lists the surface roles, in order, with swatches;
383
+ - with Tailwind, in markup: hovering `p-600` shows `1.5rem = 24px`, and `bg-surface-default`
384
+ shows a swatch in the completion list. No swatch on the semantic classes means an older
385
+ `@maggioli-design-system/styles`: update it.
386
+
387
+ Known limits, nothing to configure:
388
+
389
+ - Tailwind IntelliSense lists the utilities alphabetically, whatever the order of the
390
+ theme: `bg-surface-bisque-*` comes before `bg-surface-default`. Type the role name.
391
+ - The class list offers Tailwind's stock spacing steps (`p-1` ... `p-96`), not Magma's:
392
+ with Magma's theme `p-1` is 0.04px. Write the Magma steps in full (`p-600`, `gap-400`):
393
+ they work and hover with their value, they are just not suggested.
194
394
 
195
395
  ## Checklist
196
396
 
197
397
  - [ ] `styles` + `design-tokens` installed on the matching version row
198
398
  - [ ] Global CSS imports in the exact cascade-layer order above
199
399
  - [ ] `@fontsource` fonts installed and imported in the `vendor` layer
200
- - [ ] `svg-icons` SVGs copied to a public path
400
+ - [ ] Every icon slug the app uses served at `<mdsIconSvgPath><slug>.svg` (iconsauce or
401
+ the copy script, run before dev and build, output folder out of git)
201
402
  - [ ] `mdsIconSvgPath` set to that public path before hydration
202
403
  - [ ] (optional) `identity` installed if brand assets are used
203
404
  - [ ] Components registered per your target track
405
+ - [ ] (VS Code) the editor keys merged into `.vscode/settings.json` and `extensions.json`;
406
+ `var(--magma-` completes, and with Tailwind `bg-surface-default` shows a swatch
package/agents/color.md CHANGED
@@ -55,9 +55,11 @@ Tailwind names the TEXT roles `fg-*`, so a utility never reads `text-text-*`:
55
55
  `border-border-default`, `bg-accent-emphasis`, `bg-danger-wash-base`.
56
56
 
57
57
  Both faces need the setup in [`assets.md`](assets.md): the values come from
58
- `styles/dist/css/semantic.css` (without it every role paints nothing), the Tailwind
59
- utilities from `styles/dist/tailwind/theme.css`. A Tailwind modifier works as usual
60
- (`bg-surface-raised/80`).
58
+ `styles/dist/css/semantic.css`, the Tailwind utilities from `styles/dist/tailwind/theme.css`.
59
+ Without `semantic.css` a `var(--magma-*)` paints nothing, and a Tailwind utility paints the
60
+ light default of its role, the fallback its bridge carries so editors can show a swatch: in
61
+ dark mode, with a named theme or with more contrast it stays wrong, so the file is still
62
+ required. A Tailwind modifier works as usual (`bg-surface-raised/80`).
61
63
 
62
64
  ## The roles
63
65
 
@@ -83,10 +83,10 @@
83
83
  | [`mds-pref-animation`](../../magma/dist/collection/components/mds-pref-animation/AGENTS.md) | The `<mds-pref-animation>` web component is a preference control that lets users choose how animations are presented (reduced, system-driven, or fully enabled) |
84
84
  | [`mds-pref-consumption`](../../magma/dist/collection/components/mds-pref-consumption/AGENTS.md) | The `<mds-pref-consumption>` web component is a preference control of the Magma Design System that lets the user pick an energy-consumption mode (`low`, `medium`, `high`); it is usually a child of `<mds-pref>` and renders as a tab group with one option per mode, so it has no native HTML primitive equivalent. |
85
85
  | [`mds-pref-contrast`](../../magma/dist/collection/components/mds-pref-contrast/AGENTS.md) | The `<mds-pref-contrast>` web component is a preference control that lets users switch the application's contrast mode (`more`, `system`, or `no-preference`) |
86
- | [`mds-pref-language`](../../magma/dist/collection/components/mds-pref-language/AGENTS.md) | The `<mds-pref-language>` web component is the language-preference control of the Magma Design System, designed to be slotted inside `<mds-pref>` alongside the other preference children |
86
+ | [`mds-pref-language`](../../magma/dist/collection/components/mds-pref-language/AGENTS.md) | The `<mds-pref-language>` web component is the language-preference control of the Magma Design System, usually slotted inside the `<mds-pref>` panel alongside the other preference children |
87
87
  | [`mds-pref-language-item`](../../magma/dist/collection/components/mds-pref-language-item/AGENTS.md) | The `<mds-pref-language-item>` web component represents a single selectable language option inside the language-preference picker `<mds-pref-language>` |
88
- | [`mds-pref-mode`](../../magma/dist/collection/components/mds-pref-mode/AGENTS.md) | The `<mds-pref-mode>` web component is the mode preference control of the Magma Design System, designed to live as a direct child of `<mds-pref>` |
89
- | [`mds-pref-theme`](../../magma/dist/collection/components/mds-pref-theme/AGENTS.md) | The `<mds-pref-theme>` web component is the theme-switcher segment of the Magma accessibility preferences panel, designed to live as a direct child of `<mds-pref>` |
88
+ | [`mds-pref-mode`](../../magma/dist/collection/components/mds-pref-mode/AGENTS.md) | The `<mds-pref-mode>` web component is the mode preference control of the Magma Design System, usually a direct child of the `<mds-pref>` panel |
89
+ | [`mds-pref-theme`](../../magma/dist/collection/components/mds-pref-theme/AGENTS.md) | The `<mds-pref-theme>` web component is the theme-switcher segment of the Magma accessibility preferences panel, usually a direct child of `<mds-pref>` |
90
90
  | [`mds-pref-theme-item`](../../magma/dist/collection/components/mds-pref-theme-item/AGENTS.md) | The `<mds-pref-theme-item>` web component is a single selectable theme entry inside the `<mds-pref-theme>` preference picker |
91
91
  | [`mds-price-table`](../../magma/dist/collection/components/mds-price-table/AGENTS.md) | The `<mds-price-table>` web component is the layout container of the Magma Design System pricing-table family |
92
92
  | [`mds-price-table-features`](../../magma/dist/collection/components/mds-price-table-features/AGENTS.md) | The `<mds-price-table-features>` web component is the feature-matrix block of the Magma Design System pricing-table family |
package/agents/install.md CHANGED
@@ -24,7 +24,7 @@ npm i @maggioli-design-system/magma-react @maggioli-design-system/magma
24
24
  matrix). Then install the assets from [`assets.md`](assets.md):
25
25
 
26
26
  ```bash
27
- npm i @maggioli-design-system/styles @maggioli-design-system/design-tokens @maggioli-design-system/svg-icons
27
+ npm i @maggioli-design-system/styles @maggioli-design-system/design-tokens
28
28
  npm i @fontsource/karla @fontsource/merriweather @fontsource/roboto @fontsource/roboto-mono
29
29
  ```
30
30
 
@@ -116,9 +116,10 @@ export default function RootLayout({
116
116
 
117
117
  ## 4. Serve the icon SVGs and styles
118
118
 
119
- - Copy `@maggioli-design-system/svg-icons/dist/svg/` into the static folder served at
120
- `/svg/` (Vite/CRA: `public/svg/`; Next.js: `public/svg/`). Match the path you pass
121
- to `mdsIconSvgPath`.
119
+ - Write the icons into the static folder served at `/svg/` (Vite and Next.js:
120
+ `public/svg/`) with one of the routes of [`assets.md`](assets.md) section 3
121
+ (iconsauce or the copy script, run from `predev` and `prebuild`). Match the path you
122
+ pass to `mdsIconSvgPath`.
122
123
  - Import the global CSS block from [`assets.md`](assets.md) in your global stylesheet
123
124
  (`app/globals.css`, `src/index.css`, ...) so the cascade-layer order is preserved.
124
125
 
@@ -168,6 +169,38 @@ SSR notes:
168
169
  server-only). It is imported lazily behind a `typeof window` check and must
169
170
  never end up in a client bundle.
170
171
 
172
+ ## 6. Client-side routing
173
+
174
+ The links of the components (`href` of `MdsButton`, `MdsTabItem`, ...) are real anchors
175
+ the browser follows, loading the page. Register the router once, in the client wrapper of
176
+ section 3, and every plain click on a component link is routed on the client instead; a
177
+ modifier or middle click, `target="blank"` and a link to another origin stay with the browser.
178
+
179
+ ```tsx
180
+ 'use client';
181
+ import { useEffect } from 'react';
182
+ import { useRouter } from 'next/navigation';
183
+ import { NavigationService } from '@maggioli-design-system/magma/services';
184
+
185
+ export default function ClientGlobalsWrapper({
186
+ children,
187
+ }: Readonly<{ children: React.ReactNode }>) {
188
+ const router = useRouter();
189
+
190
+ useEffect(() => {
191
+ sessionStorage.setItem('mdsIconSvgPath', '/svg/');
192
+ }, []);
193
+ // setHandler returns the function that removes the handler: the cleanup of the effect
194
+ useEffect(() => NavigationService.setHandler((href) => router.push(href)), [router]);
195
+
196
+ return <>{children}</>;
197
+ }
198
+ ```
199
+
200
+ With React Router the handler is `(href) => navigate(href)` from `useNavigate()`. Return
201
+ `false` from the handler for a link the browser is to load. Without a registered router, an
202
+ `onClick` on the component can still cancel the click with `preventDefault()` and route by hand.
203
+
171
204
  ## Gotchas
172
205
 
173
206
  - The icon path effect must run on the client. In Next.js App Router the wrapper that
@@ -0,0 +1,127 @@
1
+ <!--
2
+ GENERATED FILE - do not edit by hand.
3
+ Source of truth: docs/agents/ in the magma monorepo.
4
+ Regenerate with: npm run sync.agent-docs (from the stencil package).
5
+ -->
6
+ # Magma - reporting a problem
7
+
8
+ > Scope: you are working in a project that uses Magma and you hit a problem that is
9
+ > Magma's, not the project's: a component that misbehaves, a guide that is wrong, a
10
+ > missing token or utility, a packaging or install issue. This is how to report it to
11
+ > the Magma repository, `magma-design-system/magma`, labelled with the project it comes
12
+ > from, so the maintainers can tell which project reported what.
13
+
14
+ ## 1. Make sure it is Magma's
15
+
16
+ - Read the component's `AGENTS.md` and `antipattern.md`, and
17
+ [`anti-patterns.md`](anti-patterns.md): a documented mistake is the project's to fix,
18
+ not a Magma bug.
19
+ - Check that the installed `magma`, `styles` and `design-tokens` versions belong
20
+ together (the ones a `magma` release depends on): mismatched versions break tokens
21
+ and styles on their own.
22
+ - Reduce it to the smallest markup that still shows the problem, without the project's
23
+ own CSS or wrappers when you can.
24
+
25
+ ## 2. Look for an existing issue
26
+
27
+ ```bash
28
+ gh issue list --repo magma-design-system/magma --state all --search "<component or keywords>"
29
+ ```
30
+
31
+ If one already describes it, comment there with what is new (your versions, another
32
+ reproduction) and the project you hit it in, instead of opening a duplicate.
33
+
34
+ ## 3. Ask before you open it
35
+
36
+ The Magma repository is public: opening an issue publishes its text. Draft the issue,
37
+ show it to the user, and create it only once they agree. Leave out anything private to
38
+ the project: internal URLs, credentials, customer data, unreleased features.
39
+
40
+ ## 4. Pick the labels
41
+
42
+ Every issue carries three kinds of label:
43
+
44
+ | Label | Says | Values |
45
+ | ----- | ---- | ------ |
46
+ | type | what kind of issue | `bug`, `feature`, `docs` |
47
+ | `prg-*` | which Magma package is affected | `prg-stencil` (the components: `magma`, `magma-react`, `magma-angular`), `prg-styles`, `prg-design-tokens`, `prg-svg-icons`, `prg-icons`, `prg-identity` |
48
+ | `prd-*` | which project it was found in (its origin) | one per project, e.g. `prd-mindy` |
49
+
50
+ Find this project's origin label. Each one's description names the project and its
51
+ repository:
52
+
53
+ ```bash
54
+ gh label list --repo magma-design-system/magma --search prd-
55
+ ```
56
+
57
+ Match it against this project's repository name (the `origin` remote, or the `name` in
58
+ `package.json`). If none matches, do not create one: the Magma maintainers manage the
59
+ labels of their repository, and a label missing from their configuration is deleted by
60
+ the next sync. Open the issue without it, and propose its name in the body, so the
61
+ maintainers add it as it is: `prd-` and the project's short name, lowercase, in
62
+ kebab-case (`prd-mindy` for `mindy-webapp`, `prd-docs` for the docs site). Leave out
63
+ generic words such as `app`, `webapp`, `frontend` or the organization's name.
64
+
65
+ GitHub sets labels on a new issue only for users with write access to the repository,
66
+ and drops them for everyone else, often without an error. After creating the issue,
67
+ check what it got:
68
+
69
+ ```bash
70
+ gh issue view <number> --repo magma-design-system/magma --json labels
71
+ ```
72
+
73
+ If the labels were dropped, the `Found in` line of the body is what the maintainers
74
+ label it from.
75
+
76
+ ## 5. Write it
77
+
78
+ In English. Title: `<component or package>: <what is wrong>`, e.g.
79
+ `mds-modal: the window jumps on open`. Body:
80
+
81
+ ```markdown
82
+ ## Problem
83
+
84
+ What happens, and what should happen instead.
85
+
86
+ ## How to reproduce
87
+
88
+ The minimal markup or the steps, and the browser if it matters.
89
+
90
+ ## Versions
91
+
92
+ - @maggioli-design-system/magma (or magma-react / magma-angular): <installed version>
93
+ - @maggioli-design-system/styles: <installed version>
94
+ - @maggioli-design-system/design-tokens: <installed version>
95
+ - Framework: <e.g. Next 16 + React 19, Angular 20, none>
96
+
97
+ ## Workaround
98
+
99
+ What the project does meanwhile, if anything.
100
+
101
+ Found in <project> (<repository>): <where in the app>.
102
+ ```
103
+
104
+ When step 4 found no origin label, end the body with the one you propose:
105
+
106
+ ```markdown
107
+ No origin label for this project yet: proposed `prd-<name>`.
108
+ ```
109
+
110
+ Read the installed versions from the lockfile or `npm ls`, not from the ranges in
111
+ `package.json`.
112
+
113
+ ## 6. Create it
114
+
115
+ ```bash
116
+ gh issue create --repo magma-design-system/magma \
117
+ --title "mds-modal: the window jumps on open" \
118
+ --label bug --label prg-stencil --label prd-<project> \
119
+ --body-file magma-issue.md
120
+ ```
121
+
122
+ Pass only labels that exist: `gh` refuses an unknown one. Without `gh`, give the user
123
+ the title, the labels and the body to open it by hand at
124
+ `https://github.com/magma-design-system/magma/issues/new`.
125
+
126
+ Then give the user the issue URL, and leave a comment in the project next to the
127
+ workaround that links it, so the workaround can go once the fix ships.
package/agents/theming.md CHANGED
@@ -138,3 +138,18 @@ by itself changes the shape WITHOUT the scale.
138
138
  In your own CSS take radii from the `--magma-radius-*` scale (`none`, `3xs` ... `5xl`,
139
139
  `full`), which follows the axis: `border-radius: var(--magma-radius-lg)`. A raw
140
140
  `--radius-*` token or a pixel value stays the same under every shape.
141
+
142
+ A browser without `corner-shape` (Firefox, Safari) gets round corners and the round
143
+ scale on its own. A control of your own whose radius is past half its height
144
+ (Chromium clamps it to half the height) needs one more step to keep its look there:
145
+ cap the radius at a part of its height, as Magma's buttons and fields do.
146
+
147
+ ```css
148
+ .my-control {
149
+ --my-control-height: 2.25rem;
150
+
151
+ border-radius: min(var(--magma-radius-2xl), var(--magma-corner-cap) * var(--my-control-height));
152
+ corner-shape: var(--magma-corner-shape);
153
+ min-height: var(--my-control-height);
154
+ }
155
+ ```
@@ -12,6 +12,7 @@ export const MdsInputDateRange = /*@__PURE__*/ createComponent({
12
12
  min: 'min',
13
13
  max: 'max',
14
14
  delay: 'delay',
15
+ size: 'size',
15
16
  hideToday: 'hide-today',
16
17
  dualCalendar: 'dual-calendar',
17
18
  name: 'name',
@@ -13,6 +13,7 @@ export const MdsInputDate = /*@__PURE__*/ createComponent({
13
13
  min: 'min',
14
14
  max: 'max',
15
15
  delay: 'delay',
16
+ size: 'size',
16
17
  hideToday: 'hide-today',
17
18
  disabled: 'disabled',
18
19
  readonly: 'readonly',
@@ -14,6 +14,7 @@ export const MdsInputSelect = /*@__PURE__*/ createComponent({
14
14
  disabled: 'disabled',
15
15
  required: 'required',
16
16
  multiple: 'multiple',
17
+ rows: 'rows',
17
18
  size: 'size',
18
19
  value: 'value',
19
20
  defaultValue: 'default-value',
@@ -26,6 +26,7 @@ export const MdsInput = /*@__PURE__*/ createComponent({
26
26
  required: 'required',
27
27
  variant: 'variant',
28
28
  tip: 'tip',
29
+ size: 'size',
29
30
  step: 'step',
30
31
  type: 'type',
31
32
  typography: 'typography',
@@ -7,6 +7,6 @@ export const MdsTableHeaderCell = /*@__PURE__*/ createComponent({
7
7
  elementClass: MdsTableHeaderCellElement,
8
8
  // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
9
9
  react: React,
10
- events: {},
10
+ events: { onMdsTableHeaderCellSort: 'mdsTableHeaderCellSort' },
11
11
  defineCustomElement: defineMdsTableHeaderCell
12
12
  });
@@ -8,6 +8,7 @@ export const MdsTableHeaderCell = /*@__PURE__*/ createComponent({
8
8
  properties: {
9
9
  sortable: 'sortable',
10
10
  label: 'label',
11
+ sortKey: 'sort-key',
11
12
  direction: 'direction'
12
13
  },
13
14
  hydrateModule: typeof window === 'undefined' ? import('@maggioli-design-system/magma/hydrate') : undefined,
@@ -8,7 +8,8 @@ export const MdsTable = /*@__PURE__*/ createComponent({
8
8
  properties: {
9
9
  interactive: 'interactive',
10
10
  selectable: 'selectable',
11
- selection: 'selection'
11
+ selection: 'selection',
12
+ sorting: 'sorting'
12
13
  },
13
14
  hydrateModule: typeof window === 'undefined' ? import('@maggioli-design-system/magma/hydrate') : undefined,
14
15
  clientModule: clientComponents.MdsTable,
@@ -13,6 +13,7 @@ export const MdsTooltip = /*@__PURE__*/ createComponent({
13
13
  target: 'target',
14
14
  offset: 'offset',
15
15
  placement: 'placement',
16
+ relation: 'relation',
16
17
  typography: 'typography',
17
18
  disableShift: 'disable-shift',
18
19
  shiftPadding: 'shift-padding',
@@ -7,7 +7,8 @@ export const MdsUsage = /*@__PURE__*/ createComponent({
7
7
  tagName: 'mds-usage',
8
8
  properties: {
9
9
  variant: 'variant',
10
- alias: 'alias'
10
+ alias: 'alias',
11
+ icon: 'icon'
11
12
  },
12
13
  hydrateModule: typeof window === 'undefined' ? import('@maggioli-design-system/magma/hydrate') : undefined,
13
14
  clientModule: clientComponents.MdsUsage,
@@ -2,8 +2,11 @@
2
2
  * This file was automatically generated by the Stencil React Output Target.
3
3
  * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
4
  */
5
- import type { StencilReactComponent } from '@stencil/react-output-target/runtime';
5
+ import type { EventName, StencilReactComponent } from '@stencil/react-output-target/runtime';
6
+ import { type MdsTableHeaderCellCustomEvent, type MdsTableHeaderCellSortEventDetail } from "@maggioli-design-system/magma";
6
7
  import type { Components } from "@maggioli-design-system/magma/dist/components";
7
8
  import { MdsTableHeaderCell as MdsTableHeaderCellElement } from "@maggioli-design-system/magma/dist/components/mds-table-header-cell.js";
8
- export type MdsTableHeaderCellEvents = NonNullable<unknown>;
9
+ export type MdsTableHeaderCellEvents = {
10
+ onMdsTableHeaderCellSort: EventName<MdsTableHeaderCellCustomEvent<MdsTableHeaderCellSortEventDetail>>;
11
+ };
9
12
  export declare const MdsTableHeaderCell: StencilReactComponent<MdsTableHeaderCellElement, MdsTableHeaderCellEvents, Components.MdsTableHeaderCell>;
@@ -2,10 +2,13 @@
2
2
  * This file was automatically generated by the Stencil React Output Target.
3
3
  * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
4
  */
5
- import type { StencilReactComponent } from '@stencil/react-output-target/runtime';
5
+ import type { EventName, StencilReactComponent } from '@stencil/react-output-target/runtime';
6
6
  import { type SerializeShadowRootOptions } from '@stencil/react-output-target/ssr';
7
+ import { type MdsTableHeaderCellCustomEvent, type MdsTableHeaderCellSortEventDetail } from "@maggioli-design-system/magma";
7
8
  import type { Components } from "@maggioli-design-system/magma/dist/components";
8
9
  import { MdsTableHeaderCell as MdsTableHeaderCellElement } from "@maggioli-design-system/magma/dist/components/mds-table-header-cell.js";
9
10
  export declare const serializeShadowRoot: SerializeShadowRootOptions;
10
- export type MdsTableHeaderCellEvents = NonNullable<unknown>;
11
+ export type MdsTableHeaderCellEvents = {
12
+ onMdsTableHeaderCellSort: EventName<MdsTableHeaderCellCustomEvent<MdsTableHeaderCellSortEventDetail>>;
13
+ };
11
14
  export declare const MdsTableHeaderCell: StencilReactComponent<MdsTableHeaderCellElement, MdsTableHeaderCellEvents, Components.MdsTableHeaderCell>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maggioli-design-system/magma-react",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "main": "dist/components.js",
5
5
  "module": "dist/components.js",
6
6
  "types": "dist/types/components.d.ts",
@@ -26,13 +26,14 @@
26
26
  "files": [
27
27
  "dist",
28
28
  "AGENTS.md",
29
- "agents/"
29
+ "agents/",
30
+ "CHANGELOG.md"
30
31
  ],
31
32
  "publishConfig": {
32
33
  "access": "public"
33
34
  },
34
35
  "dependencies": {
35
- "@maggioli-design-system/magma": "2.1.0",
36
+ "@maggioli-design-system/magma": "2.3.0",
36
37
  "@stencil/react-output-target": "1.6.2"
37
38
  },
38
39
  "repository": {