@maggioli-design-system/magma-react 2.3.0 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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.1. 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,256 @@ 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.1] - 2026-10-21
11
+
12
+ ### Bug Fixes
13
+
14
+ - *(mds-emoji)* Read CSS custom properties once the emoji has a computed style
15
+ - *(mds-emoji)* Keep hearing the pointer when the host is moved
16
+ - *(mds-tree-item)* Count the first and the last child among the items
17
+ - *(mds-input-switch)* Keep the page still when clicked in a scrolled box
18
+
19
+ ### Documentation
20
+
21
+ - *(magma)* Describe the single trunk main and the manual release
22
+
23
+ ## [magma@2.4.0] - 2026-10-20
24
+
25
+ ### Bug Fixes
26
+
27
+ - *(mds-accordion-timer,mds-accordion-timer-item)* Announce each selection once, keep the open one
28
+ - *(mds-accordion)* Announce every change of the open items, and only those
29
+ - *(mds-pref-mode,mds-pref-animation,mds-pref-consumption,mds-pref-contrast)* Announce a pick once
30
+ - *(mds-pref-theme)* Announce a theme or a corner shape once, not on every render
31
+ - *(mds-pref-language)* Select the item of a language set from code
32
+ - *(mds-toast)* Emit mdsToastClose once per dismissal and stop the countdown on hide
33
+ - *(mds-push-notification-item)* Send the id the close event declares
34
+ - *(mds-header)* Type the visibility detail as the string it carries
35
+ - *(mds-file)* Send the description the card shows
36
+ - *(mds-breadcrumb)* Name the item the back arrow selects as the caller
37
+ - *(mds-details)* Write the user's toggle into opened
38
+ - *(mds-calendar)* Put a backwards range in order
39
+ - *(mds-table,mds-table-row)* Follow a selection made from code, remove the scroll listener
40
+ - *(mds-notification)* Stop following the target when the badge leaves the page
41
+ - *(mds-label)* Wrap at the width the label is given with truncate none or all
42
+ - *(design-tokens,styles,magma)* The shadow ink stays dark in dark mode, no more light halo
43
+ - *(mds-dropdown)* A second click on the caller closes the panel
44
+ - *(mds-button-dropdown)* The link and the initial focus belong to the primary action
45
+ - *(mds-emoji)* The gaze follows the direction of the pointer, at any size
46
+ - *(mds-table)* Call setActions only on a header that has it
47
+ - *(mds-modal)* Open the dialog after the render that reflects position and animation
48
+ - *(mds-text)* Keep the accents of a truncated label or option text visible
49
+ - *(mds-chip)* Paint the ground with surface-overlay, not the grey wash
50
+ - *(mds-banner)* Paint the neutral ground with surface-overlay, not the card's surface-raised
51
+ - *(mds-input-otp,mds-pref-theme-item,mds-stepper-bar-item,stencil)* Import the FOUC sheets
52
+ - *(mds-text)* Import the animation preference sheet
53
+ - *(mds-tooltip)* Import the dark high-contrast shadow sheet
54
+ - *(mds-avatar,mds-avatar-stack)* Spell the pill on the corner axis
55
+ - *(mds-entity)* Take the radii and the shape of the corner axis
56
+ - *(mds-chip,mds-mention)* Spell the pills on the corner axis
57
+ - *(mds-hr,mds-separator)* Spell the rounded rule on the corner axis
58
+ - *(mds-input-switch,mds-input)* Spell the switch and the password dots as pills
59
+ - *(mds-notification,mds-radial-progress)* Spell the circles on the corner axis
60
+ - *(mds-paginator,mds-paginator-item)* Spell the pills on the corner axis
61
+ - *(mds-horizontal-scroll)* Spell the dots and the arrows as pills
62
+ - *(mds-breadcrumb-item)* Spell the pill of the button on the corner axis
63
+ - *(mds-filter,mds-filter-item)* Spell the pills on the corner axis
64
+ - *(mds-badge)* Spell the pill on the corner axis
65
+ - *(mds-stepper-bar-item)* Take the radii of the corner axis
66
+ - *(mds-push-notification-item)* Take the radii of the corner axis
67
+ - *(mds-tooltip,mds-text,mds-note)* Take the smallest step of the corner axis
68
+ - *(mds-accordion-item,mds-accordion-timer-item,mds-details)* Cap the corner of the header
69
+ - *(mds-bibliography)* Spell the pill of the link on the corner axis
70
+ - *(mds-price-table-list,mds-zero,mds-usage)* Take the radii of the corner axis
71
+ - *(mds-toast,mds-status-bar)* Take the radii of the corner axis
72
+ - *(mds-header)* Round the inline bar on the corner axis
73
+ - *(mds-policy-ai)* Take the radii of the corner axis
74
+ - *(mds-table-row)* Round the actions panel on the corner axis
75
+ - *(mds-url-view)* Round the window on the corner axis
76
+ - *(mds-tree,mds-tree-item)* Take the radii of the corner axis
77
+ - *(mds-button-dropdown)* Round the corners as mds-button does, on the corner axis
78
+ - *(mds-calendar,mds-calendar-cell)* Take the radii of the corner axis
79
+ - *(mds-input-select,mds-input-tip-item,mds-input-range,mds-input-upload)* Take the corner axis
80
+ - *(mds-keyboard,mds-keyboard-key)* Paint the keyboard with the washes of the active theme
81
+ - *(mds-pref-theme-item)* Take the wash of the active theme and the pill radius
82
+ - *(mds-input-select)* Take the radius of mds-input, on the host
83
+ - *(mds-accordion)* Keep the ids of the items
84
+ - *(mds-breadcrumb)* Keep the ids of the items
85
+ - *(mds-filter)* Keep the ids of the items
86
+ - *(mds-tab-bar)* Keep the ids of the items
87
+ - *(mds-tree,mds-tree-item)* The toggle takes its expanded colours and its gap
88
+ - *(mds-tab,mds-tab-item)* The items take the default and the hover shadow
89
+ - *(mds-progress,mds-stepper-bar-item)* --mds-progress-radius rounds the bar again
90
+ - *(mds-dropdown)* The backdrop takes the z-index and the duration set on the dropdown
91
+ - *(mds-label)* Name the delete button in Spanish
92
+ - *(mds-label)* Load a deletable label without an error
93
+ - *(mds-tab)* Leave a content panel past the last item hidden
94
+ - *(mds-pref-animation,mds-pref-consumption,mds-pref-contrast)* Ignore a mode outside the union
95
+ - *(mds-pref-language,mds-pref-language-item)* Take three-letter codes, ignore invalid ones
96
+ - *(mds-pref-theme,mds-pref-theme-item)* Ignore an invalid theme name, scheme or corner shape
97
+ - *(mds-emoji)* Ignore a name outside the dictionary
98
+ - *(mds-input-otp)* Submit a paste that fills the last cell instead of throwing
99
+ - *(mds-icon)* Decode a base64 icon with its padding, draw a saved SVG file inline
100
+ - *(mds-img)* Skip a srcset-consumption entry without its level
101
+ - *(mds-bibliography)* Describe author as a string, read an array per entry
102
+ - *(mds-avatar)* Give every pair of initials a variant
103
+ - *(mds-horizontal-scroll)* Measure the slotted elements, not the text between them
104
+ - *(mds-notification)* Describe the element the badge sits on with its count
105
+ - *(mds-kpi-item)* Build the accessible name from the parts that are there
106
+ - *(mds-price-table-list,mds-usage)* Drop the main landmark and the document-edit roles
107
+ - *(mds-progress,mds-benchmark-bar)* Keep the progressbar values valid and follow aria-hidden
108
+ - *(mds-toast)* Announce the toast as a status message
109
+ - *(mds-spinner,mds-video-wall,mds-emoji)* Follow the Magma animation preference
110
+ - *(mds-tree,mds-tree-item)* Give the tree a structure and the branches their state
111
+ - *(mds-button,mds-filter-item)* Click on Enter and Space as the pointer does, never while busy
112
+ - *(mds-input-otp)* Leave Tab, Backspace and the shortcuts to the keyboard
113
+ - *(mds-details)* Toggle on Space, and keep the closed content out of the tab order
114
+ - *(mds-file,mds-file-preview)* Make the download cards buttons the keyboard activates
115
+ - *(mds-tooltip,mds-help)* Show the tooltip on focus as on hover
116
+ - *(mds-tab-bar-item)* Reach and activate the items from the keyboard
117
+ - *(mds-paginator,mds-paginator-item)* Take the disabled arrows out of the tab order
118
+ - *(mds-breadcrumb,mds-breadcrumb-item)* Keep the current page selected under the keyboard
119
+ - *(mds-modal,mds-status-bar)* Let strict veto the swipe, and keep the status bar non-modal
120
+ - *(mds-radial-menu)* Close the open menu on an outside click and on Escape
121
+ - *(mds-details)* Keep an open details hidden inside a closed one
122
+ - *(mds-calendar,mds-calendar-cell)* The cell properties reach the cells, the day colour paints
123
+ - *(mds-price-table-list-item)* The supported icon takes its hover colour
124
+ - *(mds-table-cell,mds-table-row,mds-table)* The -alt colours paint the sorted column
125
+ - *(mds-header,mds-header-bar)* The icon colours of the header reach the hamburger
126
+ - *(mds-price-table-features,mds-price-table-features-cell)* The border colour reaches the cells
127
+ - *(mds-toast)* MdsToastClose waits for the exit transition, not for 1000 ms
128
+ - *(mds-tree-item)* MdsTreeItemCollapse waits for the branch transition, not for 1000 ms
129
+ - *(mds-keyboard-key)* The space key is wide again
130
+ - *(mds-paginator,mds-paginator-item)* The item properties reach the items from the paginator
131
+ - *(mds-push-notification-item)* Style only the tones its type accepts
132
+ - *(mds-card)* Read the layout from the slots, again when the content changes
133
+ - *(mds-table)* Show the batch bar for buttons added after load
134
+ - *(mds-price-table-list)* Show the items rendered after load
135
+ - *(mds-tree,mds-tree-item)* Open on load, hand the props to the items that arrive later
136
+ - *(mds-calendar)* Show the preselection area for the content of its slot
137
+ - *(mds-pref,mds-pref-language,mds-pref-theme)* Size on load, follow the items added later
138
+ - *(mds-avatar-stack)* Count the avatars added after load
139
+ - *(mds-img)* Follow the consumption preference the page applies
140
+ - *(storybook)* Turn off the boolean controls of the form-associated components
141
+ - *(mds-tree-item)* Round the corners of the folder toggle again
142
+ - *(mds-input-switch)* Round the focus ring of the checkbox and radio again
143
+ - *(mds-avatar)* Show the sources in one order, never an empty avatar
144
+ - *(mds-bibliography)* Keep every first name, link the title only with a url
145
+ - *(mds-button-dropdown)* Pass truncate to the label of the primary action
146
+ - *(mds-calendar-cell)* Paint selection none as no selection, deprecate weekend
147
+ - *(mds-input-date-range-preselection)* Keep the author's slot, let the click through
148
+ - *(mds-dropdown,mds-tooltip,mds-help)* Keep the placement while it has room
149
+ - *(mds-emoji)* Keep the mouse tracking off once stopFollowMouse is called
150
+ - *(mds-file,mds-file-preview)* Show no extension for a filename without one
151
+ - *(mds-header)* Hide the hamburger of the bar without a menu slot
152
+ - *(mds-header-bar)* Open and close the menu of the header with setOpened
153
+ - *(mds-notification)* Hide a dismissed badge with the disabled strategy too
154
+ - *(mds-pref)* Show the reload notice in the visible panel
155
+ - *(mds-pref-theme)* Keep a name, scheme or corner shape set after load
156
+ - *(mds-pref-contrast)* Stop querying the contrast of the system on each pick
157
+ - *(mds-push-notification)* Hide once the last item goes, label the clear button
158
+ - *(mds-stepper-bar)* Hide the other panels with the hidden attribute
159
+ - *(mds-keyboard)* Accept the keys of a shortcut in any order
160
+ - *(mds-note)* Turn Enter into a click only while the note is deletable
161
+ - *(mds-calendar-cell)* Let the start and end of a selection keep their colours
162
+ - *(mds-pref-mode)* Stop forcing Safari to light mode
163
+ - *(magma)* Export CHANGELOG.md from magma, magma-react and magma-angular
164
+ - *(mds-benchmark-bar)* Announce the value as shown when there is no alias
165
+ - *(mds-input-switch)* Cast the shadow of the knob again
166
+ - *(mds-file,mds-filter-item,mds-input-range,mds-input-switch,mds-input-upload)* Use magma eases
167
+ - *(magma)* Fix: .claude to .gitignore
168
+ - *(mds-table-header)* Paint the select-all cell with the header colour
169
+ - *(mds-table)* Paint every row with a full colour, and the scroll area with the sunken surface
170
+ - *(mds-table)* Draw the frame with border-muted, like the grid
171
+ - *(mds-modal)* Slide the window in when its content has a focusable element
172
+
173
+ ### Build
174
+
175
+ - *(magma)* Drop the unused changelog scripts and the deprecated conventional-changelog-cli
176
+ - *(magma)* Print the BREAKING CHANGE footer under breaking entries
177
+
178
+ ### Documentation
179
+
180
+ - *(magma)* Merge every pull request into dev through the merge queue
181
+ - *(styles,magma)* A pill that casts a shadow takes surface-overlay, not a wash
182
+ - *(mds-accordion-timer-item)* Describe progress as the 0 to 1 the timer writes
183
+ - *(mds-breadcrumb-item)* Describe the button part
184
+ - *(mds-button)* Describe the label part
185
+ - *(mds-button-dropdown)* Describe the dropdown part
186
+ - *(mds-card-media)* Describe the content part
187
+ - *(mds-details)* Name the slots the content part wraps
188
+ - *(mds-emoji)* Put the description of the methods before their tags
189
+ - *(mds-file-preview)* Describe the card part
190
+ - *(mds-header-bar)* Describe the content part
191
+ - *(mds-help)* Describe the icon part
192
+ - *(mds-horizontal-scroll)* Describe the content part
193
+ - *(mds-img)* Describe the media part
194
+ - *(mds-input)* Attach the part docs to the class, put the icon on the left
195
+ - *(mds-input-date)* Describe the input-date part
196
+ - *(mds-input-date-range-preselection)* Say the slot takes the label text
197
+ - *(mds-input-field)* Name the controls the field validates, describe the content part
198
+ - *(mds-input-tip)* Say active moves the tip, not the items
199
+ - *(mds-input-tip-item)* List all ten variants in the Storybook controls
200
+ - *(mds-label)* Drop the doc of a slot the label does not render
201
+ - *(mds-list-item)* Describe the icon and text parts
202
+ - *(mds-mention)* Give size its own description
203
+ - *(mds-modal)* Say mdsModalOpen emits on open, describe the dialog part
204
+ - *(mds-notification)* Say a value of 0 shows an empty dot
205
+ - *(mds-pref)* List mds-pref-theme among the children
206
+ - *(mds-price-table-list-item)* Describe the icon part
207
+ - *(mds-push-notification)* Describe behavior as shipped
208
+ - *(mds-radial-menu)* Describe the radial-menu part
209
+ - *(mds-stepper-bar)* Describe itemsDone by what it sets, fix the slot tag name
210
+ - *(mds-stepper-bar-item)* Describe value without an event that does not exist
211
+ - *(mds-tab-item)* Describe the button part
212
+ - *(mds-table)* Say what mdsTableSelectionChange emits, describe the batch bar part
213
+ - *(mds-table-footer)* Say the footer takes cells
214
+ - *(mds-table-header)* Say the header takes header cells, describe the actions part
215
+ - *(mds-table-header-cell)* Describe the action and label parts
216
+ - *(mds-toast)* Say when mdsToastClose emits
217
+ - *(mds-tooltip)* Describe the text part
218
+ - *(mds-tree-item)* Describe async and the two events by what they do
219
+ - *(mds-url-view)* Give icon its own description
220
+ - *(mds-usage)* Describe the header, icon and label parts
221
+ - *(mds-button,mds-button-dropdown,mds-input-date)* Deprecate three properties nothing reads
222
+ - *(mds-button,mds-input,mds-input-field)* Three custom property descriptions match the code
223
+ - *(magma)* Explain that "false" turns on the booleans of form-associated components
224
+ - *(magma)* Describe when the preferences announce a change, and the hidden step panels
225
+ - *(magma)* Ask breaking commits to say what to change in their footer
226
+ - *(stencil)* Give an @example to the props whose value has a format
227
+ - *(magma)* List mds-toast-region and count 115 components
228
+ - *(magma)* Document the icons package and fix the scope lists
229
+
230
+ ### Features
231
+
232
+ - *(mds-stepper-bar,mds-stepper-bar-item)* Let the user ask to go back to a done step
233
+ - *(mds-button)* --mds-button-label-transform keeps a label as written
234
+ - *(mds-table,mds-table-header,mds-table-row)* The Actions column follows rows added after load
235
+ - *(mds-policy-ai)* Part chip selects the chip, the wrapper gets part chip-wrapper
236
+ - *(mds-push-notification-item)* Document the avatar part, drop the icon part
237
+ - *(mds-tree)* Deprecate async, which the tree never reads
238
+ - *(mds-img)* Let an empty alt mark the image as decorative
239
+ - *(mds-chip)* Reflect disabled, which now blocks the keyboard as well as the pointer
240
+ - *(mds-breadcrumb)* The selected colours and the disabled back button take their properties
241
+ - *(mds-modal)* --mds-modal-transition-timing-function, the misspelled name kept as an alias
242
+ - *(mds-radial-progress,mds-pref-mode,mds-accordion,mds-note)* Document the properties they read
243
+ - *(mds-card)* --mds-card-background paints the card too
244
+ - *(mds-radial-menu)* A stylesheet can set the radius and the angles
245
+ - *(mds-img)* Set crossorigin and referrerpolicy on the image, with no default
246
+ - *(mds-table-footer,mds-table)* Line the footer cells up with the rows
247
+ - *(mds-usage)* Reflect variant, which the styles read from the host attribute
248
+ - *(mds-table)* Draw the lines inside the table with their own separator colour
249
+ - *(mds-toast)* Add a hide arrow and hold the countdown while the toast is in use
250
+ - *(mds-toast,mds-toast-region)* Line up the toasts shown at once in a region
251
+
252
+ ### Refactor
253
+
254
+ - *(mds-mention)* Drop the .badge rules, which match no element
255
+
256
+ ### Styling
257
+
258
+ - *(mds-dropdown)* A deeper drop shadow in dark, three times the light alphas
259
+
10
260
  ## [magma@2.3.0] - 2026-10-15
11
261
 
12
262
  ### 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.1",
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.1",
38
+ "@stencil/react-output-target": "1.6.5"
38
39
  },
39
40
  "repository": {
40
41
  "type": "git",