@maggioli-design-system/magma-react 2.3.0 → 2.4.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.3.0. You (the agent) are installing Magma into THIS project. Do not
8
+ > Version 2.4.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,
package/CHANGELOG.md CHANGED
@@ -7,6 +7,243 @@ package.
7
7
  It is released together with `magma`, at the same version: the sections are the
8
8
  releases of `magma`.
9
9
 
10
+ ## [magma@2.4.0] - 2026-10-20
11
+
12
+ ### Bug Fixes
13
+
14
+ - *(mds-accordion-timer,mds-accordion-timer-item)* Announce each selection once, keep the open one
15
+ - *(mds-accordion)* Announce every change of the open items, and only those
16
+ - *(mds-pref-mode,mds-pref-animation,mds-pref-consumption,mds-pref-contrast)* Announce a pick once
17
+ - *(mds-pref-theme)* Announce a theme or a corner shape once, not on every render
18
+ - *(mds-pref-language)* Select the item of a language set from code
19
+ - *(mds-toast)* Emit mdsToastClose once per dismissal and stop the countdown on hide
20
+ - *(mds-push-notification-item)* Send the id the close event declares
21
+ - *(mds-header)* Type the visibility detail as the string it carries
22
+ - *(mds-file)* Send the description the card shows
23
+ - *(mds-breadcrumb)* Name the item the back arrow selects as the caller
24
+ - *(mds-details)* Write the user's toggle into opened
25
+ - *(mds-calendar)* Put a backwards range in order
26
+ - *(mds-table,mds-table-row)* Follow a selection made from code, remove the scroll listener
27
+ - *(mds-notification)* Stop following the target when the badge leaves the page
28
+ - *(mds-label)* Wrap at the width the label is given with truncate none or all
29
+ - *(design-tokens,styles,magma)* The shadow ink stays dark in dark mode, no more light halo
30
+ - *(mds-dropdown)* A second click on the caller closes the panel
31
+ - *(mds-button-dropdown)* The link and the initial focus belong to the primary action
32
+ - *(mds-emoji)* The gaze follows the direction of the pointer, at any size
33
+ - *(mds-table)* Call setActions only on a header that has it
34
+ - *(mds-modal)* Open the dialog after the render that reflects position and animation
35
+ - *(mds-text)* Keep the accents of a truncated label or option text visible
36
+ - *(mds-chip)* Paint the ground with surface-overlay, not the grey wash
37
+ - *(mds-banner)* Paint the neutral ground with surface-overlay, not the card's surface-raised
38
+ - *(mds-input-otp,mds-pref-theme-item,mds-stepper-bar-item,stencil)* Import the FOUC sheets
39
+ - *(mds-text)* Import the animation preference sheet
40
+ - *(mds-tooltip)* Import the dark high-contrast shadow sheet
41
+ - *(mds-avatar,mds-avatar-stack)* Spell the pill on the corner axis
42
+ - *(mds-entity)* Take the radii and the shape of the corner axis
43
+ - *(mds-chip,mds-mention)* Spell the pills on the corner axis
44
+ - *(mds-hr,mds-separator)* Spell the rounded rule on the corner axis
45
+ - *(mds-input-switch,mds-input)* Spell the switch and the password dots as pills
46
+ - *(mds-notification,mds-radial-progress)* Spell the circles on the corner axis
47
+ - *(mds-paginator,mds-paginator-item)* Spell the pills on the corner axis
48
+ - *(mds-horizontal-scroll)* Spell the dots and the arrows as pills
49
+ - *(mds-breadcrumb-item)* Spell the pill of the button on the corner axis
50
+ - *(mds-filter,mds-filter-item)* Spell the pills on the corner axis
51
+ - *(mds-badge)* Spell the pill on the corner axis
52
+ - *(mds-stepper-bar-item)* Take the radii of the corner axis
53
+ - *(mds-push-notification-item)* Take the radii of the corner axis
54
+ - *(mds-tooltip,mds-text,mds-note)* Take the smallest step of the corner axis
55
+ - *(mds-accordion-item,mds-accordion-timer-item,mds-details)* Cap the corner of the header
56
+ - *(mds-bibliography)* Spell the pill of the link on the corner axis
57
+ - *(mds-price-table-list,mds-zero,mds-usage)* Take the radii of the corner axis
58
+ - *(mds-toast,mds-status-bar)* Take the radii of the corner axis
59
+ - *(mds-header)* Round the inline bar on the corner axis
60
+ - *(mds-policy-ai)* Take the radii of the corner axis
61
+ - *(mds-table-row)* Round the actions panel on the corner axis
62
+ - *(mds-url-view)* Round the window on the corner axis
63
+ - *(mds-tree,mds-tree-item)* Take the radii of the corner axis
64
+ - *(mds-button-dropdown)* Round the corners as mds-button does, on the corner axis
65
+ - *(mds-calendar,mds-calendar-cell)* Take the radii of the corner axis
66
+ - *(mds-input-select,mds-input-tip-item,mds-input-range,mds-input-upload)* Take the corner axis
67
+ - *(mds-keyboard,mds-keyboard-key)* Paint the keyboard with the washes of the active theme
68
+ - *(mds-pref-theme-item)* Take the wash of the active theme and the pill radius
69
+ - *(mds-input-select)* Take the radius of mds-input, on the host
70
+ - *(mds-accordion)* Keep the ids of the items
71
+ - *(mds-breadcrumb)* Keep the ids of the items
72
+ - *(mds-filter)* Keep the ids of the items
73
+ - *(mds-tab-bar)* Keep the ids of the items
74
+ - *(mds-tree,mds-tree-item)* The toggle takes its expanded colours and its gap
75
+ - *(mds-tab,mds-tab-item)* The items take the default and the hover shadow
76
+ - *(mds-progress,mds-stepper-bar-item)* --mds-progress-radius rounds the bar again
77
+ - *(mds-dropdown)* The backdrop takes the z-index and the duration set on the dropdown
78
+ - *(mds-label)* Name the delete button in Spanish
79
+ - *(mds-label)* Load a deletable label without an error
80
+ - *(mds-tab)* Leave a content panel past the last item hidden
81
+ - *(mds-pref-animation,mds-pref-consumption,mds-pref-contrast)* Ignore a mode outside the union
82
+ - *(mds-pref-language,mds-pref-language-item)* Take three-letter codes, ignore invalid ones
83
+ - *(mds-pref-theme,mds-pref-theme-item)* Ignore an invalid theme name, scheme or corner shape
84
+ - *(mds-emoji)* Ignore a name outside the dictionary
85
+ - *(mds-input-otp)* Submit a paste that fills the last cell instead of throwing
86
+ - *(mds-icon)* Decode a base64 icon with its padding, draw a saved SVG file inline
87
+ - *(mds-img)* Skip a srcset-consumption entry without its level
88
+ - *(mds-bibliography)* Describe author as a string, read an array per entry
89
+ - *(mds-avatar)* Give every pair of initials a variant
90
+ - *(mds-horizontal-scroll)* Measure the slotted elements, not the text between them
91
+ - *(mds-notification)* Describe the element the badge sits on with its count
92
+ - *(mds-kpi-item)* Build the accessible name from the parts that are there
93
+ - *(mds-price-table-list,mds-usage)* Drop the main landmark and the document-edit roles
94
+ - *(mds-progress,mds-benchmark-bar)* Keep the progressbar values valid and follow aria-hidden
95
+ - *(mds-toast)* Announce the toast as a status message
96
+ - *(mds-spinner,mds-video-wall,mds-emoji)* Follow the Magma animation preference
97
+ - *(mds-tree,mds-tree-item)* Give the tree a structure and the branches their state
98
+ - *(mds-button,mds-filter-item)* Click on Enter and Space as the pointer does, never while busy
99
+ - *(mds-input-otp)* Leave Tab, Backspace and the shortcuts to the keyboard
100
+ - *(mds-details)* Toggle on Space, and keep the closed content out of the tab order
101
+ - *(mds-file,mds-file-preview)* Make the download cards buttons the keyboard activates
102
+ - *(mds-tooltip,mds-help)* Show the tooltip on focus as on hover
103
+ - *(mds-tab-bar-item)* Reach and activate the items from the keyboard
104
+ - *(mds-paginator,mds-paginator-item)* Take the disabled arrows out of the tab order
105
+ - *(mds-breadcrumb,mds-breadcrumb-item)* Keep the current page selected under the keyboard
106
+ - *(mds-modal,mds-status-bar)* Let strict veto the swipe, and keep the status bar non-modal
107
+ - *(mds-radial-menu)* Close the open menu on an outside click and on Escape
108
+ - *(mds-details)* Keep an open details hidden inside a closed one
109
+ - *(mds-calendar,mds-calendar-cell)* The cell properties reach the cells, the day colour paints
110
+ - *(mds-price-table-list-item)* The supported icon takes its hover colour
111
+ - *(mds-table-cell,mds-table-row,mds-table)* The -alt colours paint the sorted column
112
+ - *(mds-header,mds-header-bar)* The icon colours of the header reach the hamburger
113
+ - *(mds-price-table-features,mds-price-table-features-cell)* The border colour reaches the cells
114
+ - *(mds-toast)* MdsToastClose waits for the exit transition, not for 1000 ms
115
+ - *(mds-tree-item)* MdsTreeItemCollapse waits for the branch transition, not for 1000 ms
116
+ - *(mds-keyboard-key)* The space key is wide again
117
+ - *(mds-paginator,mds-paginator-item)* The item properties reach the items from the paginator
118
+ - *(mds-push-notification-item)* Style only the tones its type accepts
119
+ - *(mds-card)* Read the layout from the slots, again when the content changes
120
+ - *(mds-table)* Show the batch bar for buttons added after load
121
+ - *(mds-price-table-list)* Show the items rendered after load
122
+ - *(mds-tree,mds-tree-item)* Open on load, hand the props to the items that arrive later
123
+ - *(mds-calendar)* Show the preselection area for the content of its slot
124
+ - *(mds-pref,mds-pref-language,mds-pref-theme)* Size on load, follow the items added later
125
+ - *(mds-avatar-stack)* Count the avatars added after load
126
+ - *(mds-img)* Follow the consumption preference the page applies
127
+ - *(storybook)* Turn off the boolean controls of the form-associated components
128
+ - *(mds-tree-item)* Round the corners of the folder toggle again
129
+ - *(mds-input-switch)* Round the focus ring of the checkbox and radio again
130
+ - *(mds-avatar)* Show the sources in one order, never an empty avatar
131
+ - *(mds-bibliography)* Keep every first name, link the title only with a url
132
+ - *(mds-button-dropdown)* Pass truncate to the label of the primary action
133
+ - *(mds-calendar-cell)* Paint selection none as no selection, deprecate weekend
134
+ - *(mds-input-date-range-preselection)* Keep the author's slot, let the click through
135
+ - *(mds-dropdown,mds-tooltip,mds-help)* Keep the placement while it has room
136
+ - *(mds-emoji)* Keep the mouse tracking off once stopFollowMouse is called
137
+ - *(mds-file,mds-file-preview)* Show no extension for a filename without one
138
+ - *(mds-header)* Hide the hamburger of the bar without a menu slot
139
+ - *(mds-header-bar)* Open and close the menu of the header with setOpened
140
+ - *(mds-notification)* Hide a dismissed badge with the disabled strategy too
141
+ - *(mds-pref)* Show the reload notice in the visible panel
142
+ - *(mds-pref-theme)* Keep a name, scheme or corner shape set after load
143
+ - *(mds-pref-contrast)* Stop querying the contrast of the system on each pick
144
+ - *(mds-push-notification)* Hide once the last item goes, label the clear button
145
+ - *(mds-stepper-bar)* Hide the other panels with the hidden attribute
146
+ - *(mds-keyboard)* Accept the keys of a shortcut in any order
147
+ - *(mds-note)* Turn Enter into a click only while the note is deletable
148
+ - *(mds-calendar-cell)* Let the start and end of a selection keep their colours
149
+ - *(mds-pref-mode)* Stop forcing Safari to light mode
150
+ - *(magma)* Export CHANGELOG.md from magma, magma-react and magma-angular
151
+ - *(mds-benchmark-bar)* Announce the value as shown when there is no alias
152
+ - *(mds-input-switch)* Cast the shadow of the knob again
153
+ - *(mds-file,mds-filter-item,mds-input-range,mds-input-switch,mds-input-upload)* Use magma eases
154
+ - *(magma)* Fix: .claude to .gitignore
155
+ - *(mds-table-header)* Paint the select-all cell with the header colour
156
+ - *(mds-table)* Paint every row with a full colour, and the scroll area with the sunken surface
157
+ - *(mds-table)* Draw the frame with border-muted, like the grid
158
+ - *(mds-modal)* Slide the window in when its content has a focusable element
159
+
160
+ ### Build
161
+
162
+ - *(magma)* Drop the unused changelog scripts and the deprecated conventional-changelog-cli
163
+ - *(magma)* Print the BREAKING CHANGE footer under breaking entries
164
+
165
+ ### Documentation
166
+
167
+ - *(magma)* Merge every pull request into dev through the merge queue
168
+ - *(styles,magma)* A pill that casts a shadow takes surface-overlay, not a wash
169
+ - *(mds-accordion-timer-item)* Describe progress as the 0 to 1 the timer writes
170
+ - *(mds-breadcrumb-item)* Describe the button part
171
+ - *(mds-button)* Describe the label part
172
+ - *(mds-button-dropdown)* Describe the dropdown part
173
+ - *(mds-card-media)* Describe the content part
174
+ - *(mds-details)* Name the slots the content part wraps
175
+ - *(mds-emoji)* Put the description of the methods before their tags
176
+ - *(mds-file-preview)* Describe the card part
177
+ - *(mds-header-bar)* Describe the content part
178
+ - *(mds-help)* Describe the icon part
179
+ - *(mds-horizontal-scroll)* Describe the content part
180
+ - *(mds-img)* Describe the media part
181
+ - *(mds-input)* Attach the part docs to the class, put the icon on the left
182
+ - *(mds-input-date)* Describe the input-date part
183
+ - *(mds-input-date-range-preselection)* Say the slot takes the label text
184
+ - *(mds-input-field)* Name the controls the field validates, describe the content part
185
+ - *(mds-input-tip)* Say active moves the tip, not the items
186
+ - *(mds-input-tip-item)* List all ten variants in the Storybook controls
187
+ - *(mds-label)* Drop the doc of a slot the label does not render
188
+ - *(mds-list-item)* Describe the icon and text parts
189
+ - *(mds-mention)* Give size its own description
190
+ - *(mds-modal)* Say mdsModalOpen emits on open, describe the dialog part
191
+ - *(mds-notification)* Say a value of 0 shows an empty dot
192
+ - *(mds-pref)* List mds-pref-theme among the children
193
+ - *(mds-price-table-list-item)* Describe the icon part
194
+ - *(mds-push-notification)* Describe behavior as shipped
195
+ - *(mds-radial-menu)* Describe the radial-menu part
196
+ - *(mds-stepper-bar)* Describe itemsDone by what it sets, fix the slot tag name
197
+ - *(mds-stepper-bar-item)* Describe value without an event that does not exist
198
+ - *(mds-tab-item)* Describe the button part
199
+ - *(mds-table)* Say what mdsTableSelectionChange emits, describe the batch bar part
200
+ - *(mds-table-footer)* Say the footer takes cells
201
+ - *(mds-table-header)* Say the header takes header cells, describe the actions part
202
+ - *(mds-table-header-cell)* Describe the action and label parts
203
+ - *(mds-toast)* Say when mdsToastClose emits
204
+ - *(mds-tooltip)* Describe the text part
205
+ - *(mds-tree-item)* Describe async and the two events by what they do
206
+ - *(mds-url-view)* Give icon its own description
207
+ - *(mds-usage)* Describe the header, icon and label parts
208
+ - *(mds-button,mds-button-dropdown,mds-input-date)* Deprecate three properties nothing reads
209
+ - *(mds-button,mds-input,mds-input-field)* Three custom property descriptions match the code
210
+ - *(magma)* Explain that "false" turns on the booleans of form-associated components
211
+ - *(magma)* Describe when the preferences announce a change, and the hidden step panels
212
+ - *(magma)* Ask breaking commits to say what to change in their footer
213
+ - *(stencil)* Give an @example to the props whose value has a format
214
+ - *(magma)* List mds-toast-region and count 115 components
215
+ - *(magma)* Document the icons package and fix the scope lists
216
+
217
+ ### Features
218
+
219
+ - *(mds-stepper-bar,mds-stepper-bar-item)* Let the user ask to go back to a done step
220
+ - *(mds-button)* --mds-button-label-transform keeps a label as written
221
+ - *(mds-table,mds-table-header,mds-table-row)* The Actions column follows rows added after load
222
+ - *(mds-policy-ai)* Part chip selects the chip, the wrapper gets part chip-wrapper
223
+ - *(mds-push-notification-item)* Document the avatar part, drop the icon part
224
+ - *(mds-tree)* Deprecate async, which the tree never reads
225
+ - *(mds-img)* Let an empty alt mark the image as decorative
226
+ - *(mds-chip)* Reflect disabled, which now blocks the keyboard as well as the pointer
227
+ - *(mds-breadcrumb)* The selected colours and the disabled back button take their properties
228
+ - *(mds-modal)* --mds-modal-transition-timing-function, the misspelled name kept as an alias
229
+ - *(mds-radial-progress,mds-pref-mode,mds-accordion,mds-note)* Document the properties they read
230
+ - *(mds-card)* --mds-card-background paints the card too
231
+ - *(mds-radial-menu)* A stylesheet can set the radius and the angles
232
+ - *(mds-img)* Set crossorigin and referrerpolicy on the image, with no default
233
+ - *(mds-table-footer,mds-table)* Line the footer cells up with the rows
234
+ - *(mds-usage)* Reflect variant, which the styles read from the host attribute
235
+ - *(mds-table)* Draw the lines inside the table with their own separator colour
236
+ - *(mds-toast)* Add a hide arrow and hold the countdown while the toast is in use
237
+ - *(mds-toast,mds-toast-region)* Line up the toasts shown at once in a region
238
+
239
+ ### Refactor
240
+
241
+ - *(mds-mention)* Drop the .badge rules, which match no element
242
+
243
+ ### Styling
244
+
245
+ - *(mds-dropdown)* A deeper drop shadow in dark, three times the light alphas
246
+
10
247
  ## [magma@2.3.0] - 2026-10-15
11
248
 
12
249
  ### Bug Fixes
@@ -19,10 +19,13 @@
19
19
  properties and, for a deep customisation, the parts listed in the component's
20
20
  `AGENTS.md` (see [`conventions.md`](conventions.md)).
21
21
  - Setting boolean attributes to the string `"false"` (e.g. `disabled="false"`,
22
- `await="false"`). Stencil reads `"false"` as `false`, but the attribute stays in the
23
- DOM on a prop that is not reflected (and until the first render on one that is), so
24
- `[disabled]` selectors and scripts reading the attribute still see it set. **Remove
25
- the attribute** to turn it off.
22
+ `await="false"`). On a form-associated component (`mds-button`, `mds-button-dropdown`
23
+ and the form inputs, listed in [`conventions.md`](conventions.md)) it turns the prop
24
+ **on**, as on a native control. On the others Stencil reads `"false"` as `false`, but
25
+ the attribute stays in the DOM on a prop that is not reflected (and until the first
26
+ render on one that is), so `[disabled]` selectors and scripts reading the attribute
27
+ still see it set. **Remove the attribute** to turn it off; from React or Angular, pass
28
+ `false` to the property, as [`conventions.md`](conventions.md) shows.
26
29
  - Embedding nested HTML in a default slot when the component documents a `label` prop.
27
30
  - Using raw Tailwind colour utilities (`bg-white`, `text-gray-700`) on or inside Magma
28
31
  components - use the semantic role classes (`bg-surface-default`, `text-fg-muted`),
package/agents/color.md CHANGED
@@ -72,10 +72,10 @@ named theme retints all of it at once.
72
72
  | --- | --- | --- |
73
73
  | `surface-default` | `bg-surface-default` | the page canvas (the `body` already has it) |
74
74
  | `surface-raised` | `bg-surface-raised` | cards, panels, sticky headers |
75
- | `surface-overlay` | `bg-surface-overlay` | modal, dropdown, popover, sheet |
75
+ | `surface-overlay` | `bg-surface-overlay` | modal, dropdown, popover, sheet, and anything lifted with a shadow |
76
76
  | `surface-sunken` | `bg-surface-sunken` | wells, insets, code blocks, tracks |
77
77
  | `surface-muted` | `bg-surface-muted` | same-plane grouping: zebra rows, a subtle section |
78
- | `wash-soft` / `wash-base` / `wash-strong` | `bg-wash-*` | a neutral pill or chip, by how marked it is |
78
+ | `wash-soft` / `wash-base` / `wash-strong` | `bg-wash-*` | a flat neutral pill or chip (no shadow), by how marked it is |
79
79
  | `surface-inverse` / `surface-inverse-muted` | `bg-surface-inverse*` | the chip that flips with the mode (dark on a light UI) |
80
80
  | `on-inverse` | `text-on-inverse` | text and icons on either inverse level |
81
81
  | `text-default` | `text-fg-default` | body text, titles, primary data |
@@ -3,7 +3,7 @@
3
3
  Source of truth: docs/agents/ in the magma monorepo.
4
4
  Regenerate with: npm run sync.agent-docs (from the stencil package).
5
5
  -->
6
- # Magma components catalogue (114 components)
6
+ # Magma components catalogue (115 components)
7
7
 
8
8
  > Generated from each component's usage description. Each tag links the component's
9
9
  > own `AGENTS.md` (its API, with `pattern.md` and `antipattern.md` beside it) in
@@ -120,6 +120,7 @@
120
120
  | [`mds-table-row`](../../magma/dist/collection/components/mds-table-row/AGENTS.md) | The `<mds-table-row>` web component represents a single data row inside a `<mds-table>` (slotted through `mds-table-body`; `mds-table-header` and `mds-table-footer` are rows themselves) |
121
121
  | [`mds-text`](../../magma/dist/collection/components/mds-text/AGENTS.md) | The `<mds-text>` web component is the foundational typography primitive of the Magma Design System |
122
122
  | [`mds-toast`](../../magma/dist/collection/components/mds-toast/AGENTS.md) | The `<mds-toast>` web component is the transient notification surface of the Magma Design System, used to surface brief, non-blocking feedback messages that appear over the viewport and auto-dismiss after a timeout |
123
+ | [`mds-toast-region`](../../magma/dist/collection/components/mds-toast-region/AGENTS.md) | The `<mds-toast-region>` web component is the place where an application shows its toasts: placed once in the application shell, at an edge of the viewport, it lines up the `<mds-toast>` elements visible at the same time, each one readable, and announces them to assistive technologies |
123
124
  | [`mds-tooltip`](../../magma/dist/collection/components/mds-tooltip/AGENTS.md) | The `<mds-tooltip>` web component is the floating contextual hint of the Magma Design System |
124
125
  | [`mds-tree`](../../magma/dist/collection/components/mds-tree/AGENTS.md) | The `<mds-tree>` web component is the root container of the Magma Design System tree view, organizing a hierarchy of slotted `<mds-tree-item>` nodes into an expandable/collapsible structure |
125
126
  | [`mds-tree-item`](../../magma/dist/collection/components/mds-tree-item/AGENTS.md) | The `<mds-tree-item>` web component is the node primitive of the Magma Design System tree view: it represents a single labeled, expandable/collapsible entry inside an `<mds-tree>` and is also the recursive container for its own descendants |
@@ -28,11 +28,27 @@
28
28
 
29
29
  - Boolean props default to `false`/`undefined`. Prefer removing the attribute over
30
30
  setting it to `false`.
31
+ - A boolean attribute turns its prop on by being present. On the form-associated
32
+ components (`mds-button`, `mds-button-dropdown`, `mds-input`, `mds-input-date`,
33
+ `mds-input-date-range`, `mds-input-field`, `mds-input-otp`, `mds-input-range`,
34
+ `mds-input-select`, `mds-input-switch`, `mds-input-upload`) any value turns it on,
35
+ `"false"` included, as on a native control.
31
36
  - Disabled: `<mds-button disabled>`. Never `disabled="false"` - remove it instead. Set
32
37
  `disabled` on the component, not on a wrapper: disabled components are removed from
33
38
  the tab order automatically.
34
39
  - Async: `<mds-button await>` shows a spinner and blocks interaction; remove `await`
35
40
  (set `undefined`) when done.
41
+ - From a framework, pass a real boolean to the property, not a string to the attribute:
42
+ - React with `magma-react`: `<MdsButton disabled={isDisabled} />` sets the property,
43
+ so `false` turns the prop off; the `.server` variants leave a `false` out of the
44
+ markup. A bare `mds-*` tag in React 18 JSX is different: React 18 writes
45
+ `disabled={false}` as the attribute `"false"`, which turns a form-associated component
46
+ on, so pass `undefined` there. React 19 sets the property and turns it off.
47
+ - Angular with `magma-angular`: bind the input, `[disabled]="isDisabled"`. The proxy
48
+ sets the property, so `false` turns the prop off. A static `disabled="false"` or an
49
+ attribute binding (`[attr.disabled]="false"`) writes the attribute instead, and turns
50
+ a form-associated component on; `[attr.disabled]="null"` removes it. Reactive Forms
51
+ `disable()` / `enable()` set the property through the value accessor.
36
52
 
37
53
  ## Sizing
38
54
 
package/agents/install.md CHANGED
@@ -165,7 +165,7 @@ SSR notes:
165
165
  - Icons render empty server-side (the box is reserved, no layout shift) and the
166
166
  default theme is rendered - see the SSR section in
167
167
  [`install.md`](install.md).
168
- - The hydrate module (`magma/hydrate`) bundles all 114 components (~3 MB,
168
+ - The hydrate module (`magma/hydrate`) bundles all 115 components (~3 MB,
169
169
  server-only). It is imported lazily behind a `typeof window` check and must
170
170
  never end up in a client bundle.
171
171
 
@@ -209,6 +209,11 @@ With React Router the handler is `(href) => navigate(href)` from `useNavigate()`
209
209
  on the client - use the `.server` variants (section 5) to get real SSR markup.
210
210
  - Keep `magma` and `magma-react` on the exact same version; the wrapper is generated
211
211
  against a specific `magma` build.
212
+ - Pass booleans as booleans: `<MdsButton disabled={false} />` sets the property and turns
213
+ the prop off, and the `.server` variants leave a `false` out of the markup. Render the
214
+ wrapper, not the bare `mds-*` tag: in React 18 JSX `<mds-button disabled={false}>`
215
+ writes the attribute `"false"`, which turns a form-associated component on (see
216
+ [`conventions.md`](conventions.md)).
212
217
 
213
218
  ## See also
214
219
 
@@ -109,6 +109,7 @@ export { MdsTableHeader } from "./mds-table-header.js";
109
109
  export { MdsTableRow } from "./mds-table-row.js";
110
110
  export { MdsTable } from "./mds-table.js";
111
111
  export { MdsText } from "./mds-text.js";
112
+ export { MdsToastRegion } from "./mds-toast-region.js";
112
113
  export { MdsToast } from "./mds-toast.js";
113
114
  export { MdsTooltip } from "./mds-tooltip.js";
114
115
  export { MdsTreeItem } from "./mds-tree-item.js";
@@ -109,6 +109,7 @@ export { MdsTableHeader } from "./mds-table-header.server.js";
109
109
  export { MdsTableRow } from "./mds-table-row.server.js";
110
110
  export { MdsTable } from "./mds-table.server.js";
111
111
  export { MdsText } from "./mds-text.server.js";
112
+ export { MdsToastRegion } from "./mds-toast-region.server.js";
112
113
  export { MdsToast } from "./mds-toast.server.js";
113
114
  export { MdsTooltip } from "./mds-tooltip.server.js";
114
115
  export { MdsTreeItem } from "./mds-tree-item.server.js";
@@ -5,7 +5,7 @@ import * as clientComponents from "@maggioli-design-system/magma-react";
5
5
  export const serializeShadowRoot = "declarative-shadow-dom";
6
6
  export const MdsTableFooter = /*@__PURE__*/ createComponent({
7
7
  tagName: 'mds-table-footer',
8
- properties: {},
8
+ properties: { selectable: 'selectable' },
9
9
  hydrateModule: typeof window === 'undefined' ? import('@maggioli-design-system/magma/hydrate') : undefined,
10
10
  clientModule: clientComponents.MdsTableFooter,
11
11
  serializeShadowRoot
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { createComponent } from '@stencil/react-output-target/runtime';
3
+ import React from 'react';
4
+ import { MdsToastRegion as MdsToastRegionElement, defineCustomElement as defineMdsToastRegion } from "@maggioli-design-system/magma/dist/components/mds-toast-region.js";
5
+ export const MdsToastRegion = /*@__PURE__*/ createComponent({
6
+ tagName: 'mds-toast-region',
7
+ elementClass: MdsToastRegionElement,
8
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
9
+ react: React,
10
+ events: {},
11
+ defineCustomElement: defineMdsToastRegion
12
+ });
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { createComponent } from '@stencil/react-output-target/ssr';
3
+ // @ts-ignore - ignore potential type issues as the project is importing itself
4
+ import * as clientComponents from "@maggioli-design-system/magma-react";
5
+ export const serializeShadowRoot = "declarative-shadow-dom";
6
+ export const MdsToastRegion = /*@__PURE__*/ createComponent({
7
+ tagName: 'mds-toast-region',
8
+ properties: {
9
+ position: 'position',
10
+ max: 'max'
11
+ },
12
+ hydrateModule: typeof window === 'undefined' ? import('@maggioli-design-system/magma/hydrate') : undefined,
13
+ clientModule: clientComponents.MdsToastRegion,
14
+ serializeShadowRoot
15
+ });
@@ -10,7 +10,8 @@ export const MdsToast = /*@__PURE__*/ createComponent({
10
10
  visible: 'visible',
11
11
  variant: 'variant',
12
12
  tone: 'tone',
13
- position: 'position'
13
+ position: 'position',
14
+ deletable: 'deletable'
14
15
  },
15
16
  hydrateModule: typeof window === 'undefined' ? import('@maggioli-design-system/magma/hydrate') : undefined,
16
17
  clientModule: clientComponents.MdsToast,
@@ -108,6 +108,7 @@ export { MdsTableHeader } from "./mds-table-header.js";
108
108
  export { MdsTableRow } from "./mds-table-row.js";
109
109
  export { MdsTable } from "./mds-table.js";
110
110
  export { MdsText } from "./mds-text.js";
111
+ export { MdsToastRegion } from "./mds-toast-region.js";
111
112
  export { MdsToast } from "./mds-toast.js";
112
113
  export { MdsTooltip } from "./mds-tooltip.js";
113
114
  export { MdsTreeItem } from "./mds-tree-item.js";
@@ -110,6 +110,7 @@ export { MdsTableHeader } from "./mds-table-header.server.js";
110
110
  export { MdsTableRow } from "./mds-table-row.server.js";
111
111
  export { MdsTable } from "./mds-table.server.js";
112
112
  export { MdsText } from "./mds-text.server.js";
113
+ export { MdsToastRegion } from "./mds-toast-region.server.js";
113
114
  export { MdsToast } from "./mds-toast.server.js";
114
115
  export { MdsTooltip } from "./mds-tooltip.server.js";
115
116
  export { MdsTreeItem } from "./mds-tree-item.server.js";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This file was automatically generated by the Stencil React Output Target.
3
+ * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
+ */
5
+ import type { StencilReactComponent } from '@stencil/react-output-target/runtime';
6
+ import type { Components } from "@maggioli-design-system/magma/dist/components";
7
+ import { MdsToastRegion as MdsToastRegionElement } from "@maggioli-design-system/magma/dist/components/mds-toast-region.js";
8
+ export type MdsToastRegionEvents = NonNullable<unknown>;
9
+ export declare const MdsToastRegion: StencilReactComponent<MdsToastRegionElement, MdsToastRegionEvents, Components.MdsToastRegion>;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * This file was automatically generated by the Stencil React Output Target.
3
+ * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
+ */
5
+ import type { StencilReactComponent } from '@stencil/react-output-target/runtime';
6
+ import { type SerializeShadowRootOptions } from '@stencil/react-output-target/ssr';
7
+ import type { Components } from "@maggioli-design-system/magma/dist/components";
8
+ import { MdsToastRegion as MdsToastRegionElement } from "@maggioli-design-system/magma/dist/components/mds-toast-region.js";
9
+ export declare const serializeShadowRoot: SerializeShadowRootOptions;
10
+ export type MdsToastRegionEvents = NonNullable<unknown>;
11
+ export declare const MdsToastRegion: StencilReactComponent<MdsToastRegionElement, MdsToastRegionEvents, Components.MdsToastRegion>;
@@ -3,10 +3,10 @@
3
3
  * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
4
  */
5
5
  import type { EventName, StencilReactComponent } from '@stencil/react-output-target/runtime';
6
- import { type MdsToastCustomEvent } from "@maggioli-design-system/magma";
6
+ import { type MdsToastCloseEventDetail, type MdsToastCustomEvent } from "@maggioli-design-system/magma";
7
7
  import type { Components } from "@maggioli-design-system/magma/dist/components";
8
8
  import { MdsToast as MdsToastElement } from "@maggioli-design-system/magma/dist/components/mds-toast.js";
9
9
  export type MdsToastEvents = {
10
- onMdsToastClose: EventName<MdsToastCustomEvent<void>>;
10
+ onMdsToastClose: EventName<MdsToastCustomEvent<MdsToastCloseEventDetail>>;
11
11
  };
12
12
  export declare const MdsToast: StencilReactComponent<MdsToastElement, MdsToastEvents, Components.MdsToast>;
@@ -4,11 +4,11 @@
4
4
  */
5
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 MdsToastCustomEvent } from "@maggioli-design-system/magma";
7
+ import { type MdsToastCloseEventDetail, type MdsToastCustomEvent } from "@maggioli-design-system/magma";
8
8
  import type { Components } from "@maggioli-design-system/magma/dist/components";
9
9
  import { MdsToast as MdsToastElement } from "@maggioli-design-system/magma/dist/components/mds-toast.js";
10
10
  export declare const serializeShadowRoot: SerializeShadowRootOptions;
11
11
  export type MdsToastEvents = {
12
- onMdsToastClose: EventName<MdsToastCustomEvent<void>>;
12
+ onMdsToastClose: EventName<MdsToastCustomEvent<MdsToastCloseEventDetail>>;
13
13
  };
14
14
  export declare const MdsToast: StencilReactComponent<MdsToastElement, MdsToastEvents, Components.MdsToast>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maggioli-design-system/magma-react",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "main": "dist/components.js",
5
5
  "module": "dist/components.js",
6
6
  "types": "dist/types/components.d.ts",
@@ -14,6 +14,7 @@
14
14
  "types": "./dist/types/*.d.ts",
15
15
  "import": "./dist/*.js"
16
16
  },
17
+ "./CHANGELOG.md": "./CHANGELOG.md",
17
18
  "./package.json": "./package.json"
18
19
  },
19
20
  "sideEffects": false,
@@ -33,8 +34,8 @@
33
34
  "access": "public"
34
35
  },
35
36
  "dependencies": {
36
- "@maggioli-design-system/magma": "2.3.0",
37
- "@stencil/react-output-target": "1.6.2"
37
+ "@maggioli-design-system/magma": "2.4.0",
38
+ "@stencil/react-output-target": "1.6.5"
38
39
  },
39
40
  "repository": {
40
41
  "type": "git",