@marigold/docs
18.1.0 (Released on Aug 27, 2026)
Patch Changes
-
1dfe461: feat(DST-1489): add non-form interactive list component
Adds
<ListView>and<ListView.Item>, a non-form list built on React Aria'sGridList/GridListItemfor rows the user operates in place — dismissing with a<Button>, opening a per-row<ActionMenu>, or following a link — without leaving the page. Unlike<SelectList>/<Select>/<ListBox>,<ListView>has no selection, no hidden input, and never becomes a submitted form value.A row is a named-area grid —
'label actions' 'description actions'— so every region names the cell it wants instead of counting columns and rows. Row content is authored with Marigold's slot-aware components (<TextValue>,<Description>,<Title>), and each of them claims its cell through slot context, so text still lands correctly when it's wrapped in a fragment, behindmemo(), or inside a consumer's own component. A bare string child is wrapped as the row's text value; to emphasise part of a line, nest<Text as="span">inside<TextValue>/<Description>. A row carries one<Description>— it takes inline markup, so several facts go on one line.Trailing controls claim their cell through Marigold's
ButtonContextand inherit the row'sghostcascade, the same mechanism<Panel.Header>and<SelectList.Option>use. A row with more than one control must wrap them in a<ButtonGroup>: each control reads the same context and would otherwise be placed in the same cell. A dev-only warning catches that at authoring time. The trailing cell takes Button-family controls only; trailing badges, pills or timestamps have no slot yet.<ListView.Item>forces any nested<Title>to render as a<span>instead of a real heading, so a list of rows never emits one document heading per row.The list is flat (divider lines only) and draws no surface of its own, the way
<Table>does — a framed list nested in a container that already draws a surface is a ring inside a ring. A standalone framed list is<Card><ListView /></Card>.This closes the gap between
<List>(presentational, no roles),<ListBox>(selection only — forbids focusable controls inside a row),<SelectList>/<Select>(form fields),<Table>(tabular), and<Menu>(commands that close on activation). The motivating consumer is the Popover notifications panel (DST-1485), and the docs cover a second must-support scenario: a resource list with a per-row action menu.v1 is intentionally minimal: no selection, no bulk-action bar, no async loading, no drag-and-drop, and no leading media. Leading icons and images need slot-aware icon/image components so placement doesn't depend on authoring order, which is tracked separately along with the rest of the follow-ups (selection ships together with a bulk-action bar, building on DST-1487).
Documentation
New
/components/collection/listviewdocs page: anatomy, appearance, a "which list?" decision guide, the must-support demos, accessibility notes (including the<Title>-as-span caveat), and cross-links to<List>,<ListBox>,<SelectList>,<Table>, and<Menu>. -
19474cf: docs(DST-1703): migrate the Link, LinkButton, Tag, Badge and List anatomy diagrams to inline SVG, and describe their annotated parts
-
b924fc6: docs(DST-1703): migrate the Calendar, DateField, DatePicker and TimeField anatomy diagrams to inline SVG, describe their annotated parts, and add the missing RangeCalendar anatomy
-
e5b29a5: docs(DST-1703): migrate the Autocomplete, Checkbox, FileField, NumberField, Radio, SearchField, Slider, TagField and TextField anatomy diagrams to inline SVG, and describe their annotated parts
-
75036b1: docs(DST-1703): migrate the Accordion, Breadcrumbs, Pagination, Tabs and TopNavigation anatomy diagrams to inline SVG, and describe their annotated parts
-
cbc9ab5: docs(DST-1703): migrate the ContextualHelp, Dialog, Toast and Tooltip anatomy diagrams to inline SVG, and describe their annotated parts. With this, docs/public/**/-anatomy. no longer exists.
-
e897384: fix(DST-1673): keep example tables readable when they outgrow their container
Example tables declared no column widths, so every column fell back to react-aria's 75px default. In the examples shell a 768px viewport still gives the sidebar 352px, leaving 401px for content, which pinned all five columns of
/examples/usersat that floor and let the nowrap name-and-email cell paint 146px over the Title column.Columns now carry widths (a fraction plus a floor for the flexible ones, a fixed width for the predictable ones), and the users, dashboard and report tables sit in
Scrollable, so they scroll instead of overlapping. The picker dialog's table already scrolled and only gains the widths. On the dashboard that scroll container also stops the activity table inflating its panel, which is what could wrap the 2:1 pair beforecollapseAtasked for it.The filter table gets fraction-only widths and no floors. It cannot have a
Scrollableof its own yet, because itsactionBaroverlay renders insideTableassticky bottom-…and an outer wrapper would re-anchor it. Since a static width also becomes that column's floor, floors on eleven columns would push the table past its container at 1440px with nothing to scroll. Fractions leave the floor where it already was, so the table keeps filling its container at desktop width, where the name cell no longer overlaps, and narrow viewports stay as they are untilTablecan own that scroll container itself. -
Updated dependencies [1dfe461]
-
Updated dependencies [c7b5c1d]
-
Updated dependencies [17f9158]
-
Updated dependencies [148ef97]
-
Updated dependencies [1dfe461]
-
Updated dependencies [1dfe461]
-
Updated dependencies [1fd3f85]
-
Updated dependencies [ce2720e]
-
Updated dependencies [eeb0a29]
-
Updated dependencies [f2dff15]
-
Updated dependencies [4a18a38]
-
Updated dependencies [e41e633]
- @marigold/components@18.1.0
- @marigold/theme-rui@6.1.0
- @marigold/system@18.1.0
- @marigold/icons@2.0.1
18.0.0 (Released on Aug 11, 2026)
Major Changes
-
b7122c0: refa([DST-1324]): Breaking change: Rename Inset's
space/spaceX/spaceYprops top/px/pyThe padding props on
Insetare renamed to align withPanel's existing API, so that across the design systemspacealways means gap between children andp/px/pyalways mean inner padding. Previously,spacecarried two different meanings depending on the component, which was a source of confusion.Migration:
Before After <Inset space="…" /><Inset p="…" /><Inset spaceX="…" spaceY="…" /><Inset px="…" py="…" />The discriminated union shape is unchanged:
pis mutually exclusive withpx/py. Token vocabularies are unchanged (InsetSpacingTokensforp,PaddingSpacingTokensforpx/py). -
b7122c0: refa([DST-1549]): Breaking change: Rename compound member
Tabs.TabPanel→Tabs.PanelTabsnow exposes.List,.Item, and.Panel, so every compound member follows one predictable naming rule.<Tabs.TabPanel>is removed (hard rename, no deprecated alias).Migration:
Before After <Tabs.TabPanel id="…"><Tabs.Panel id="…"> -
b7122c0: refactor([DST-1283]): Breaking Change — Remove
<Multiselect>(and thereact-selectdependency) from@marigold/components.Use
<TagField>instead. -
b7122c0: refa([DST-1162]): Breaking changes: The
Cardcomponent has been refactored into a compound component pattern.What changed:
- The previous prop-based API (
padding,space, etc.) has been removed. - Content must now be composed using explicit sub-components:
Card.Header,Card.Body,Card.Footer, andCard.Preview. - A
CardContextis now required — sub-components will throw an error if used outside of a<Card>.
Migration:
// Before <Card> <SomeContent /> </Card> // After <Card> <Card.Header>Title</Card.Header> <Card.Body><SomeContent /></Card.Body> <Card.Footer>Actions</Card.Footer> </Card> - The previous prop-based API (
Minor Changes
-
b7122c0: feat(DST-1446):
marigold searchto find components by docs contentAdds
marigold search <query>, which ranks components by matching the query against their docs content (title, description, section headings, and section prose), not just the component name. This collapses the "list → guess → docs → retry" discovery loop (3 to 5 calls) that AI agents run today into a single ranked, snippet-bearing, deep-linked result.- CLI: new
loadSearchIndex()/searchComponentDocs()library functions and asearchcommand wrapping them, with--limit,--format markdown|json|plain,--freshand--offline(reusing the existing cache andsanitizeRemote— no new dependencies). Scoring weights title ×3, description ×2, each matching heading ×2, and each matching section snippet ×1. Tab completion and telemetry cover the new command. No-match exits 0 ([]for--format json). - Docs:
build-manifest.mjsnow also emitspublic/component-search.json— a content index over the component MDX (per-componentheadingsplus prose-bearing{ heading, snippet }sections, with JSX/imports/code-fences stripped). It is written aftermanifest.jsonso a content-index bug can never block the manifest thatlist/docsdepend on.
- CLI: new
-
b7122c0: refa([DST-1298]): Refactor Divider component: API, styling, and docs
We fixed the vertical orientation of the divider, which previously didn't work. Added new Divider stories and updated the Divider docs.
-
b7122c0: docs(DST-1198): add Fetching and Mutations pattern for
@tanstack/react-query+ MarigoldAdds a new
Datapattern group with aFetching and Mutationspage covering hook encapsulation, centralized query keys, theisLoadingvsuseIsFetchingloading taxonomy, error handling and retries viathrowOnErrorwith an error boundary, toast feedback, optimistic updates, and destructive confirmation withuseConfirmation. It also points to React Server Components and Server Actions as the alternative paradigm.The
/examples/filterreference app now fetches from a real stateless/api/venuesroute handler: search, filter, sort and pagination run on the server, the query key is derived from the existing URL (nuqs) state, and rows can be deleted with confirmation and optimistic updates. Deletions are tracked per visitor on the client so the demo stays isolated and resets on reload. -
b7122c0: feat: add MCP server for semantic search over Marigold docs
Adds an MCP (Model Context Protocol) server at
/mcpthat lets AI coding assistants (Claude Code, VS Code Copilot, etc.) semantically search the Marigold documentation. An ETL pipeline (pnpm build:embeddings) chunks the MDX docs and generates vector embeddings via AWS Bedrock Titan v2, served via Streamable HTTP transport with Keycloak-authenticated access.
Patch Changes
-
b7122c0: feat([DST-1134]): add
<RangeCalendar>component (alpha)Adds a new
<RangeCalendar>for selecting a contiguous or non-contiguous date range, built on react-aria's<RangeCalendar>with Marigold conventions (disabled,readOnly,error,dateUnavailable,allowsNonContiguousRanges). Supports up to three side-by-side months viavisibleDuration, stacking vertically below thesmbreakpoint; the same responsive stacking now applies to multi-month<Calendar>for parity.descriptionanderrorMessageroute through<FieldBase>so the help/error UI matches the rest of the form-component family (TriangleAlert icon + HelpText container). Ships as an alpha component with a stub docs page under the form section. -
b7122c0: refactor: adopt
Sidebar.Navcurrentprop in demos and storiesReplaces the hand-rolled
active={currentPath === '/...'}pattern across Sidebar and AppLayout demos (documentation) and theAppLayoutStorybook story with the newcurrentprop onSidebar.Nav(shipped in DST-1322 / #5306). The order-detail demo additionally leverages the new prefix-match semantics, so/orders/:idroutes automatically highlight the/ordersnav item without a regex fallback.No consumer-facing package behavior changes — only demos and an internal story.
-
b7122c0: feat(DST-876): add Card usage guidelines
Renames the
Card.Previewslot toCard.Mediaacross components, theme, and docs. This is a breaking change: consumers using<Card.Preview>, thedata-card-previewselector, or thepreviewtheme slot key must migrate toCard.Media,data-card-media, and themediaslot key respectively.Adds a "Usage" section to the Card docs covering when to use cards, media slot guidance.
-
abd4942: fix(DST-1676): derive the token overview's contrast matrix from the theme instead of a copied palette
The matrix hand-copied all 11 charcoal rungs and the palette hue into the demo and recomputed the published WCAG and APCA numbers from that literal. Nothing linked it to
tokens.css, so a rebrand would have left the documented contrast numbers reporting the old palette, with no test to catch it. The numbers designers cite when judging a pairing are exactly the ones that must not be able to drift.The demo now measures the palette instead. Hidden probes painted with
var(--color-charcoal-*)are read back through a 1×1 canvas, which is what resolves the authoredoklch()down to the sRGB the contrast math needs, and it keeps working if the palette ever moves to a different color space. The swatch grid paints from the same custom properties, so it is correct on the first frame without JavaScript, and only the score badges wait for the measurement. If the palette cannot be read the demo says so and leaves the badges blank rather than publishing zeroes, keeping the swatch grid that needs no measurement.It also fixes the matrix's pinned first column, a defect that predates this change. No header cell painted a background, so the swatches scrolled visibly behind the row labels and, on a dark page background, the column labels sat at 3.4:1 on the page that documents contrast. The corner cell was not pinned sideways with the column it heads, so it scrolled out of the port and clipped mid-word. Every header cell now carries the surface fill, and the pinned column paints its edges as inset shadows because collapsed borders belong to the table and stay behind when a cell is pinned. The header row also carried a
topoffset that pinned nothing, since the scroll wrapper is constrained horizontally only, and that dead offset is gone rather than left to read as a feature. The header cells gainedscopeand the table an accessible name, so a screen reader announces both rungs before a cell's numbers. The unreadable-palette message arrives after hydration, so it is announced from a live region that was already mounted, and the table points its description at it, because blank badges announce as nothing.Note this fixes the matrix's inputs, not its algorithms. The APCA figures are still the simplified approximation the demo has always used and will not match a dedicated APCA tool.
Measuring also costs the numbers their place in the server-rendered HTML, since they now arrive on the client. The markdown export is unaffected, because file-based demos were never inlined into it.
The local
oklchToRgbhelper is gone with the literal it served. The WCAG and APCA helpers are unchanged. The prose no longer asserts the palette hue, and thesofttoken's documented value now mirrors the relative color syntax the theme actually declares rather than restating a resolved hue. -
b7122c0: Add unified demo app at
/examplesthat consolidates all pattern demos (filter, form, inventory) alongside a full app-shell example. A shared shell layout renders the sidebar, breadcrumbs, and section switcher from a single navigation tree; each example page links back to its corresponding pattern guidelines. Removes all standalone pattern pages in favor of colocated demo routes. -
3352765: feat(DST-1692): add consent banner, Impressum and privacy notice to the docs site.
What changed:
- New
/impressumand/datenschutzroutes. Both carry a German (authoritative) and an English version, each wrapped in alang-scoped<section>so screen readers switch voice (WCAG 2.1 AA 3.1.2); the English translation nests one heading level below the German so each page keeps a single<h1>. - The prose lives in
legal/*.mdx, rendered by those routes. It sits outsidecontent/on purpose: the docs collection globs all ofcontent, so anything there would join the page tree, sidebar, search and MCP index. - A consent banner gates Vercel Web Analytics. Nothing is loaded until consent is granted, the choice is stored in
localStorage, and the footer's "Cookie settings" link reopens the banner — with focus management, Escape and a close button. SiteFooteris wired into the docs, home, legal and/examples/*layouts, so the legal links are reachable from every public route.
Why:
§ 5 DDG and Art. 13 GDPR apply to the site, and analytics needs an opt-in that can be withdrawn as easily as it is given.
Impact:
- The banner only appears on the production deployment, or wherever
NEXT_PUBLIC_CONSENT_BANNER=1is set — including a preview, so Legal and the DPO can review it as it ships. - Both legal pages are drafts pending Legal / DPO review and release.
- New
-
b7122c0: fix(docs): make MCP and embedding env vars optional so
pnpm build:docsworks locally withoutAWS_BEDROCK_*,OIDC_*, orBLOB_READ_WRITE_TOKENset. Also corrects theclaude mcp add marigold-docssnippet to use the positional URL argument instead of--url. -
6497037: fix(DST-1687): key the prop-table cache on the lockfile
docs/scripts/build-types.tscaches each<AutoTypeTable>extraction under.next/cache/, which Vercel preserves across deploys. But fumadocs-typescript derives its cache key from the component source file only (path:name:content:version), never from the.d.tsfiles the props are inherited from. A dependency bump that changes an inherited prop set therefore leaves every component whose own source did not change serving its pre-bump props — indefinitely, because nothing ever invalidates the entry.That is not hypothetical:
keyboardNavigationBehaviorhas been missing from the<Table>prop table since react-aria-components moved 1.19 → 1.20 (#5699).Table.tsxlast changed the day before that bump, so its cache entry stayed valid while the prop it should surface arrived viareact-stately3.49.0.The cache directory is now salted with a hash of
pnpm-lock.yaml, so any dependency move retires the whole generation, and superseded generations are pruned so the Vercel cache does not grow without bound. A warm rebuild still takes under a second; a cold one takes ~30s. -
b7122c0: docs: remove dash punctuation and semicolons from documentation prose
Rewrites em-dash and en-dash punctuation and prose semicolons across the component, foundation, and pattern docs into plain sentences for easier reading. Numeric ranges now read as "N to M". Example strings that show literal component output (date and number range formatting, filter chip labels) keep their en-dash because it represents real output.
-
b7122c0: Improve spacing between sidebar navigation sections for better visual separation.
-
b7122c0: fix: redesign Do/Don't guideline cards to match fumadocs
Replaces the legacy Do/Don't design with a tinted card layout that uses fumadocs design tokens (
--color-fd-success/--color-fd-error) andlucide-reacticons. Adds proper dark mode support, which was previously broken due to hardcoded light-mode colors. -
b7122c0: docs(DST-1383): add the Bulk Actions pattern
New user-input pattern page documenting how to let users select many records in a collection and act on all of them at once, built by composing existing Marigold components (
<Table>selection,<ActionBar>,<Dialog>viauseConfirmation,<Drawer>,<Toast>). Covers the full flow in build order: when (not) to use the pattern, structure, choosing actions, selection and its visible-scope boundary, direct actions, confirming destructive actions, multi-field bulk edit, progress feedback, and result/partial-failure handling. Includes an anatomy diagram, seven inline demos, Do/Don't guidance, an accessibility section, and an implementation section with the load-bearing practices (derive the acted-on set once, clear selection on scope change, keep failed records selected, re-key the bulk-edit form). -
b7122c0: docs(DST-1384): add the Bulk Actions working example
New full-page example at
/examples/bulk-actionsthat wires the whole bulk-actions pattern together as one real product surface: a paginated, searchable events table with page-bounded selection, a floatingActionBar(Publish, Edit, Export, overflow menu, Delete), direct publish with a deterministic partial-failure path whose failed records stay selected and are fixable via the bulk-editDrawer(mixed values, explicit price opt-in, re-keyed per selection), a destructive confirmDialogwith count and reservation impact, button-loading and running-count progress, and toasts for every outcome. Backed by a stateless/api/eventsroute plus a/api/events/bulkauthorizer; all session changes are client-owned and ride along in the query key, so filters always see the visitor's world. Search, status filter, and page persist in the URL via nuqs. The pattern page'sDemoLinksnow resolves and its "in progress" callout is gone. -
b7122c0: docs(DST-1405): document the Marigold CLI on the docs site
Adds a new CLI page under Getting Started (
/getting-started/cli). The single page covers installation (npm / pnpm / npx), usage with AI agents, every command (docs,list,examples,init,completion,telemetry) with flags and examples, and configuration (environment variables and per-OS cache / config locations). Content mirrorspackages/cli/README.md.Cross-links were added from the Installation page (
marigold initas a faster setup path) and the Usage with AI page (the AI-agents section of the new CLI page). -
2b9df4c: docs(DST-1427): rework the
EmptyStatepage and fix seven dead linksThe docs gain an Actions section, which the component had nothing on before. It maps the action's role to a Button variant and states the one-primary rule for the case where an empty state stands in for a page's content but the
Page.Headerabove it already owns the page's primary action. Button's Surface actions section now names the components that reset the button cascade, since its "you rarely need to set avariantyourself" advice does not hold inside them.The Anatomy section moves to the current convention. A themed inline
EmptyStateAnatomySVG replaces the staticemptystate-anatomy.jpg, so the diagram follows light and dark mode instead of being a baked-in light-mode raster, and the section gains the labelled-parts list every other anatomy has.Also fixes seven dead links found while cross-referencing these pages. The app frame pattern pointed
EmptyStateat/components/feedback/empty-state, and the Button docs named aButtonLinkcomponent at/components/actions/button-link, linkedSelectList.Optionto/components/form/select-list, and sent theuseActionStatecallout to/patterns/user-input/form-implementation. That last route was dead in two more places, both in the recommended libraries list. All of these routes 404. They are now/components/content/empty-state,LinkButtonat/components/actions/link-button,/components/form/selectlist,/patterns/user-input/forms#async-forms-with-useactionstate, and/patterns/user-input/formsplus/patterns/user-input/forms#validationfor the two library references. The seventh, the spacing page's link to/components/overlay/tray, has no page to point at becauseTrayis not documented, so it drops the link and keepsTrayas plain code. -
b7122c0: docs(DST-1434): promote the Filter pattern to beta. Restructures the guidance into task-focused chapters (choosing filters, filter types, applying, designing options, scaling up, filter state, small screens, accessibility, implementation), reframes the SegmentedControl as a scope switch, bases date quick filters on the built-in DateRangePicker presets, makes panel grouping thematic, and documents the draft preview. The reference implementation gains quick filters, a searchable city filter, an availability date range filter, live option counts, and a result-count preview on the Apply button.
-
b7122c0: docs(DST-1465): position Card among Collection components and link out to alternatives
Reframes the Card docs to lead with Card's Collection identity. Adds a
Card vs Tablein-category comparison with a newCardVsTableMockupillustration, aWhen the content isn't a collectionsection pointing to Panel, Stack, and Tiles, and a top-levelAlternative componentssection that links out to the right component for each case. -
b7122c0: docs(DST-1474): write the ActionBar component documentation
Replaces the boilerplate ActionBar page with full, use-case-driven documentation: an intro that frames it as a bulk-action toolbar for the current selection in a collection, an anatomy diagram, Do/Don't guidance, and three demos (bulk actions in a
<Table>via theactionBarrender prop, bulk editing through a<Drawer>, and driving the bar from custom selection state outside a Table). Adds an accessibility section covering the labelled toolbar, the live-region announcement, Escape-to-clear, and focus restoration. -
b7122c0: docs(DST-1487): move ActionBar docs from "Actions" into the "Collection" section
<ActionBar>is the floating toolbar of bulk actions for the current selection in a collection, not a generic action primitive. Its docs page moves fromcomponents/actions/actionbartocomponents/collection/actionbar, sitting alongsideTable,Card, andTag.- The page description and intro are reframed around the collection/bulk-selection context, and a
Relatedsection now links back toTableandButton. - Internal links in
ActionButton,ActionGroup,Button, andDrawerare repointed to the new path. Historical release-note links are left untouched.
- The page description and intro are reframed around the collection/bulk-selection context, and a
-
b7122c0: docs(DST-1532): add the Pick pattern with demos and a working example
New user-input pattern page documenting picking: finding records in a collection and committing them as a set, the counterpart to filtering, which narrows a view in place. Covers the Filter-vs-Pick distinction, a surface spectrum that scales to collection size (inline multi-select, a searchable
<TagField>, a<Dialog>, and a routed page as the exception), and the load-bearing practices: preserve staged selections while search and filters narrow the list, bound the selection and name the outcome in the commit button, keep the staged set visible as a removable<Tag.Group>rail, and narrow rather than paginate large or async collections. Ships four inline demos (<TagField>, a multi-select<Table>dialog, a<SelectList>variant, and an on-page filter-select-act signpost) plus a full/examples/pickexample: asize="fullscreen"dialog that picks from about fifty venues into a report that owns the committed set. Cross-references the pattern from the Filter and Table Records pages. -
b7122c0: docs(DST-1543): document
marigold migrateon the CLI pageAdds a
marigold migratesection to/getting-started/cli, alongside the other commands: what the codemods cover (theme slot restructures and baseline swaps, application-code renames, report-only design-token checks), the optional version and path positionals, the--dry-runand--onlyflags, and the safety model (warnings instead of guesses, idempotent runs, the typecheck as the completeness check). -
b7122c0: docs(DST-1570): add v18 migration guide (
MIGRATION-v18.md)An exhaustive, agent-consumable guide for upgrading a consuming app from Marigold 17 to 18. Root-level Markdown file, split into Section A (app developers) and Section B (custom theme authors). Every breaking change lists what changed, a before→after, why, and gotchas, tagged
[auto]/[flagged]/[manual]/[adopt]so it composes with themarigold migrate v18codemod. Linked from the v18.0.0 release notes. -
e0f9c05: fix(DST-1647): honor the router's
useHrefin sidebar linksSidebar.ItemandSidebar.RailItemrendered the rawhrefprop straight onto their anchor, which shadowed the value produced byRouterProvider's optionaluseHref. Applications served from a prefix, such as a Next.jsbasePath, ended up with sidebar markup pointing at an unprefixed URL, so middle click and "copy link address" resolved to the wrong page. Both components now render the transformed href and keep handing the unprefixed path tonavigate, matching how React Aria's ownuseLinkbehaves. Consumers that do not passuseHrefsee no change, because the default leaves the href untouched.The
RouterProviderdocs now coveruseHrefnext tonavigate, and the component gained a matching Storybook story and prop description. -
b7122c0: docs(DST-1651): expand the Pick pattern guidance, examples, and commit-button behavior
Rounds out the Pick pattern docs (
/patterns/user-input/pick) and its example (/examples/pick).Commit button stays active. Aligns the pattern with the Button page's "avoid disabled buttons" guidance. The commit button no longer disables when the staged set is empty or below the minimum. Pressing it refuses the commit and reveals a
<SectionMessage variant="error">at the top of the surface that says what is still needed and announces itself to assistive technology, instead of a disabled control that gives no reason and drops out of the keyboard tab order. Applies to the guidance text and all four commit examples (the fullscreen example plus the dialog, select-list, and inline abonnement demos)."Naming the commit button" section. Promotes the commit-button label guidance into its own section. The button names its outcome with the host task's own verb ("Add venues", "Assign users", "Save venues"), never a generic label. The staged count is status that lives on the removable-tag rail. The label may echo it ("Add 3 venues") when it stays short and mirrors the trigger, and stays a bare verb when the label would run long or a min or max applies. Names the labels that do not fit a commit: "Next", "Continue", "OK", "Done" (multi-step words), "Filter" (the wrong mechanism), and "Save" for a discardable result.
"Selection limits" section. Promotes the terse "Bound the selection" bullet into its own subsection. States the rule up front in helper text ("Pick at least three", "Choose up to seven") and keeps a live count in the staged-tag rail ("Staged (3 of 5)"). A minimum is checked on press and surfaces the message rather than disabling the button. A maximum makes the ceiling visible, disables the unchecked rows once reached and says why, and keeps deselection free so the user can swap a pick.
In-page date-pick demo. Adds a second stay-on-the-page example to "Choose the surface by collection size": assembling a season subscription (an Abonnement) from concert dates without a dialog, over a
<SelectList>with sold-out entries disabled and a running count beside a verb-only commit.Faceted example filters. The
/examples/pickvenue picker's Type, Region, and Status filters now reference one another. Each option carries the count it would yield under the other active filters and the search ("Bavaria (3)"), options that would return nothing are disabled, and the current value is never disabled so a filter can always be changed back. Counts derive from the same predicate that filters the table, so they never disagree.Docs-only.
-
6497037: docs(DST-1687): document the data-entry grid pattern
Extends the table record management pattern from three options to four with the data-entry grid — a
<Table>of always-on form controls withkeyboardNavigationBehavior="tab"— and restructures the Table component page's editing guidance intoEditing, covering editable cells and the grid side by side. -
b7122c0: feat(DST-1574): surface example apps in the docs ⌘K search
The interactive example demos are now discoverable from the docs command menu. Typing an example's name — or just "example" — lists the standalone demos (App Shell, Filter, Event Form, Settings Form, Auto-Save Settings, Inventory) as "Example: …" quick actions. Internal screens of a larger demo (e.g. the App Shell's Billing/Users/Teams pages) are intentionally not surfaced as separate examples.
-
b7122c0: fix(DST-1434): ship nested example sources in the examples registry
build-examples.mjscollected only the top level of an example folder, so any example keeping code in a subdirectory shipped importers without their imports. Thefilterpayload carried 7 files while all six of its key files import from./hooks/…, andbulk-actionswas missing 8 of its 16 — snippets that could not be built by whoever copied them. The walk is now recursive, with paths POSIX-relative to the example root so they match the import specifiers, andkey_filesmay point into a subdirectory.Also completes the
filtersidecar so its copyable snippet typechecks: the@/lib/data/venuesstub was missingvenueCities,MAX_CAPACITY,MAX_PRICE, theVenuetype and thenextAvailablefield, and@/lib/data/venues-queryhad no stub at all despite being imported by a key file.peer_depsgains@internationalized/date,@tanstack/react-queryandreact-error-boundary, and dropszod, which nothing imports.The scripts/ tests that guard this were never running:
docs/vitest.config.mjsanddocs/vitest.config.tsboth existed, vitest resolved the latter, and itsincludecovered onlyapp/andlib/, sopnpm --filter @marigold/docs testpassed on an empty selection. The two configs are merged into one. -
b7122c0: docs(DST-1382): expand Drawer documentation with use cases and decision framework
Rewrites the Drawer docs to lead with a defining principle (supplementary, in-context, light task; non-modal on desktop), adds a decision framework (Drawer vs Dialog, routing to a page instead), and documents six canonical use cases: detail-row inspection, quick edit/create from a list, filter panel, comments and activity, contextual utility, and multi-field bulk edit. New demos illustrate the table-row inspection, comments/activity, and Table+ActionBar bulk-edit patterns. Filter pattern moved to a
## Relatedsection. -
b7122c0: docs(DST-1308): consolidate icon documentation onto the Iconography page
Merge the former
/foundations/iconsand/components/content/iconpages into/foundations/iconographyso principles, catalog, and engineering API live in one place. The newUsing icons in codesection covers installation, importing, sizing, color (currentColor+classNamerecommended;colorprop is literal CSS), filled brand icons, and accessibility (autoaria-hidden).Migration table
Old names from the legacy
@marigold/iconsset and their Lucide replacement. Names marked custom are retained brand icons that still ship from@marigold/iconsdirectly.UI
Old New Add PlusArrowDown ArrowDownArrowLeft ArrowLeftArrowRight ArrowRightArrowUp ArrowUpBurgerMenu MenuCheck CheckChevronDown ChevronDownChevronLeft ChevronLeftChevronRight ChevronRightChevronUp ChevronUpCircleChecked CircleDotCircleUnchecked CircleDelete Trash2ExternalLink ExternalLinkEye EyeFilter ListFilterIconMore EllipsisRemove MinusSearch SearchSettingDots EllipsisVerticalSquareChecked SquareCheckSquareUnchecked SquareInfo
Old New Accessible AccessibilityAutoRenew RefreshCcwBanned BanBatteryCharging BatteryChargingBatteryEmpty BatteryLowBatteryFull BatteryFullBatteryHalf BatteryMediumBus BusFrontCalendar CalendarCamera CameraClock ClockDirection SquareArrowUpRightEmail MailEventDate Calendar1Exclamation TriangleAlertFeedback MessageSquareMoreFood UtensilsGlobe GlobeHome HouseInfo InfoMarker MapPinMobilePhone SmartphoneMobileSignal SignalHighNotification MessageSquareWarningParking CircleParkingPDF PDF(custom)Print PrinterReports FileTextRequired AsteriskResaleLogbook BookOpenTextSpinner LoaderThumb ThumbsUpTruck TruckWifi WifiAction
Old New Cancel CircleXCrop CropDownload DownloadEdit PencilExportFile SquareArrowOutUpRightFormatBold BoldFormatItalic ItalicFormatSize ALargeSmallHighlightOff PowerLocation LocateFixedLock LockLockOpen LockOpenLogout LogOutPause PausePicture ImagePlay PlayResaleEdit CogRestart RotateCcwRotateLeft RotateCcwRotateRight RotateCwSave SaveSort ChevronsUpDownSortDown ChevronDownSortUp ChevronUpStar StarStop CircleStopUnderlined UnderlineZoom ZoomInTicketing
Old New Deal BadgePercentDesignTicket DesignTicket(custom)GiftCard GiftCard(custom)Membership IdCardLanyardPickup StorePrice EuroResale Resale(custom)Scanner Scanner(custom)Seat ArmchairSelling TagStadium Stadium(custom)Ticket TicketTicketInsurance TicketInsurance(custom)Turnstile Turnstile(custom)User
Old New Cart ShoppingCartCreditCard CreditCardGroup UsersRoundId IdCardSmilieDissatisfied FrownSmilieNeutral MehSmilieSatisfied SmileSmilieVeryDissatisfied AngrySmilieVerySatisfied LaughUser UserRoundSocial
Old New Google Google(custom)Instagram Instagram(custom)Share Share2Twitter Twitter(custom)TwitterXis also available for the post-rebrand X mark;Twitter(custom) remains for the bird mark. -
b7122c0: docs(DST-1326): restructure the Layouts foundation around
Panel+ primitivesReworks the Layouts foundation page to frame the two responsibilities explicitly:
Panelfor page-level content sectioning, and the atomic layout primitives (Stack,Inline,Inset,Split,Center,Tiles,Columns) for everything inside. Adds a "Choosing the right layout" decision table, collapses the previous two-tier framing that implicitly treatedPanelandAppLayoutas peers, and replaces the wireframe demo with an annotated SVG anatomy diagram that mirrors thePanelandSidebaranatomies. Also trims the component-principles Layout section to defer to this page, switches theconcepts-spacingdemo toWireframe.Boxfor nicer visuals, and fixesWireframe.Boxcolours after thesecondary-*token removal by falling back to the Tailwind neutral palette. -
b7122c0: docs([DST-1032]): Revise installation guideline
Revised the whole installation Guideline, to make it up to date and fix stuff that wasn't working. It now contains a more detailed description and has better examples. Users and AI should now be able to create a new project with Marigold, without a problem.
-
b7122c0: docs(DST-1326): add
Panelcomponent documentationMDX page, anatomy diagrams (header + collapsible), and a full set of demos covering appearance, variants, header actions, collapsible sections (incl. controlled + error state), footer, bleed content, danger-zone rows, and a
PanelvsCardcomparison. -
b3ffe6b: docs(DST-1698): remove the Design Principles page from Getting Started
The page was generic design advice (Familiarity, Simplicity, Clarity) with nothing tied to a Marigold component or token, and nothing in the docs linked to it. The maintained equivalent lives in
foundations/component-principlesand the rest offoundations/*, so Getting Started keeps only the pages that help someone actually start using Marigold.No redirect is added: the page had no inbound links and the docs app has no redirect config.
-
16aba43: docs: remove orphaned Table demo files
Deletes ten
*.demo.tsxfiles under the Table component docs that nothing had rendered since the old docs pages were removed. No rendered output changes. -
b7122c0: docs(DST-1226): restructure form documentation for clarity and discoverability
Consolidates three pages (Form Fields, Forms, Form Implementation) into two:
- Form Fields (Foundation): slimmed down to anatomy, label, placeholder, help text, width, and field states. New SVG anatomy diagram replaces the static image. Validation content and the redundant component list are removed.
- Forms (Pattern): merges design/layout content with validation (native, custom, real-time, server errors, Zod) and state management (controlled vs uncontrolled, FormData submission, conditional fields, error handling, react-hook-form, async with
useActionState).
The standalone Form Implementation page is removed, and 18 cross-references across component and pattern pages are repointed to the merged Forms page.
-
b7122c0: feat(SelectList): standardized API, item layout, and visual distinction from ListBox (DST-1076)
<SelectList>has been refined into a first-class form field for picking one or many items from a visible list of rich two-line rows. This release contains breaking renames and a tightened type surface.Breaking changes
SelectList.Item→SelectList.Option. The option semantic matchesSelect.Optionand the HTML<option>mental model. Update any<SelectList.Item>usage to<SelectList.Option>.SelectList.Actionhas been removed. Drop your<ActionMenu>or<IconButton>directly inside<SelectList.Option>— the component positions, sizes, and styles the nested control automatically viaButtonContext. Limit: one action per option (multi-button groups will arrive with a futureActionGroup).- Leading-image slot has been removed. Compose images inside
<Text slot="label">(or anywhere in children) as you see fit. selectionMode="none"is no longer accepted.SelectListis a form field; the default is now"single".onChangeis strictly typed perselectionMode:(key: Key | null) => voidfor single,(keys: Key[]) => voidfor multiple. The shape matchesSelect<T, M>. PassingsetStatedirectly may require adapting the callback.
Other changes
- Selection indicator — single-select rows render a visible radio circle; multi-select renders a checkbox.
- Label & description slots — use
<Text slot="label">and<Text slot="description">inside<SelectList.Option>. The row skeleton isselection · label + description · action (optional). - Dev-mode warning when
textValueis missing on an option whose children aren't a plain string. - Own theme entry —
SelectListships a dedicated theme component. The theme exposes first-classlabel,description, andactionentries; slot styling no longer uses descendant selectors. Consumers with custom themes must add or update aSelectListentry.
Documentation
The SelectList docs page is rewritten around the new API. Adds an anatomy diagram, a decision table for choosing between
<SelectList>and lighter controls (<Radio.Group>,<Checkbox.Group>,<Select>,<Combobox>,<TagField>), and dedicated sections for multi-selection, per-row actions (decision-help and configuration patterns), horizontal orientation, and empty state. Replaces selected prose with Do/Don't tiles. Tightens the accessibility section to what's specific to SelectList (keyboard model, label requirement,textValuefor rich rows).Migration
- <SelectList selectionMode="none"> - <SelectList.Item id="free"> - <SelectList.Action> - <IconButton aria-label="Info"><Info /></IconButton> - </SelectList.Action> - Free - </SelectList.Item> - </SelectList> + <SelectList selectionMode="single"> + <SelectList.Option id="free"> + Free + <IconButton aria-label="Info"><Info /></IconButton> + </SelectList.Option> + </SelectList> -
b7122c0: docs(DST-1313): add settings form pattern and documentation:
Add settings form and event form pattern examples at
/examples/settings-formand/examples/event-form. The settings form demonstrates tabbed navigation, independent section saves with Panel, collapsible advanced fields, and a danger zone with confirmation dialogs. The event form shows a single-submit form with multiple Panel sections. Updates the forms pattern documentation with a Panels subsection and links to both demos. -
b7122c0: fix(docs): pre-compute prop-table data at build time, eliminate ts-morph from the runtime, ship per-page markdown and the page manifest as static assets.
The Vercel preview build for the docs failed on
pnpm buildwith:TypeError: Cannot read private member #state from an object whose class did not declare it at Reflect.get (<anonymous>) Export encountered an error on /api/manifest.json/route, exiting the build.Same crash subsequently surfaced on
/api/md/[...slug]/routeonce the manifest was patched.Root cause (three things composing into one bug):
- Node 22+ undici's
Responseuses private class fields (#state) — see undici#4290, node#58814. - Next.js 16's
force-staticroute-handler prerender wraps the returnedResponsein a JavaScriptProxy. - The Proxy's handlers use
Reflect.getto forward property access. JavaScript's private-field semantics intentionally preventReflect.getfrom forwarding through a Proxy when the receiver isn't an instance of the class declaring the field.
So when Next.js's static exporter touches the proxied
Responseduring prerender, undici's getters callReflect.get(target, '#state'), which throws. The route handlers themselves run fine — the crash is on the way out, in the framework's prerender wrapper. The bug is environment-specific (Node 22+ ×force-static× Vercel build) and does not reproduce locally on older Node versions.Fix and surrounding cleanup
The data both endpoints serve (per-page markdown, page-index manifest) is fully static at build time. Rather than re-introduce route handlers and dance around the prerender Proxy with
await connection()/ cache headers /outputFileTracingIncludes, they're now plain files inpublic/served directly by Next.js. No route handler runs, no Proxy ever wraps the response — the bug surface is removed entirely. While re-architecting, ts-morph was eliminated from the runtime entirely; type extraction now happens in a single build-script pass.User-visible changes
- Per-page raw markdown is served at
<page-url>.md(e.g./components/actions/button.md) — written topublic/<slug>.mdat build time, served by Next.js as a static asset (Content-Type: text/markdown; charset=UTF-8). No rewrite, no route handler. - The docs page-index manifest is served at
/manifest.json— written topublic/manifest.json, served as a static asset (Content-Type: application/json; charset=UTF-8). Each entry'surlfield points at the slug-mirror<page-url>.mdpath. <AutoTypeTable package="system" />(used bysvg/index.mdxandicon/index.mdx) now produces a populated props table in the markdown output. The previous custom ts-morph plugin only handledpackages/components/src/, so system-package types silently rendered as empty.<AppearanceTable>rendering in markdown now matches the HTML output exactly — they read from the same@marigold/theme-rui/appearancesmap. Four components shift in<page-url>.mdoutput as a result:Menugainsdestructive(it lives on theMenuItemslot in cva, was missed by the old ts-morph regex),LinkButtongainsdestructive-ghost(itsPropsinterface omits it but the theme defines it),Panel.sizegainsdefault,Link.sizegainsdefault | small. AppearanceTable description cells render as plain text instead ofinlineCode— descriptions aren't code.- HTML and Markdown prop tables show identical type strings — both go through
autoTypeTableTransform, so design-system aliases (Scale | SpacingTokensetc.) appear consistently. Function types collapse tofunctionin markdown the same way they already do in HTML. - Dead
resolve-design-tokensmarkdown plugin removed: its<ColorTokenTable>JSX target was retired with the design-tokens content rewrite, but the plugin still referenced deletedui/ColorTable.tsx/ui/ColorTokens.tsxand crashed every markdown build with ENOENT.
Architecture
pnpm build (or dev) ├─ build:registry → .registry/demos.{tsx,json} (unchanged) ├─ build:types NEW → .registry/props.json (one ts-morph pass) ├─ build:changelog (unchanged) ├─ build:manifest → public/manifest.json (static asset) ├─ build:md → public/<slug>.md (static assets) └─ next buildAt request time:
<AutoTypeTable>(RSC) reads.registry/props.jsonsynchronously and renders via fumadocs-ui's<TypeTable>. No ts-morph, no async generator, no FS cache lookup per render.<AppearanceTable>(RSC) reads@marigold/theme-rui/appearancesdirectly (already the existing pattern)./manifest.jsonand/<slug>.mdare served as static assets frompublic/by Next.js.
Internals
docs/lib/props-data.ts(NEW) — typedgetPropTable({ path, name, package })reading from.registry/props.json. Single source of truth for both consumers.docs/scripts/build-types.ts(NEW) — scans MDX files for<AutoTypeTable>references, deduplicates, calls fumadocs-typescript's generator withautoTypeTableTransformonce per unique tuple, writes.registry/props.json. fumadocs FS cache lives at.registry/.cache/fumadocs-typescriptso subsequent runs are fast when component sources are unchanged: cold ~17s, warm ~0.3s.docs/scripts/build-md.ts— writes per-page markdown topublic/<slug>.md; cleans only.mdfiles in slug-root subtrees so existing image / asset directories underpublic/are untouched.docs/scripts/build-manifest.mjs— writes the page manifest topublic/manifest.json.docs/ui/AutoTypeTable.tsx— thin wrapper aroundfumadocs-typescript/ui's<AutoTypeTable>with a mockGeneratorthat just looks up.registry/props.json. The fumadocs/uientry doesn't import ts-morph, so this keeps ts-morph entirely out of the runtime bundle while still using the same<TypeTable>shell (collapsibles, hash deep-linking, Shiki).docs/lib/markdown/plugins/resolve-props-table.ts— synchronous remark plugin; reads from.registry/props.jsonviagetPropTable. No more async, no more generator call, no morepLimit(4)ts-morph contention inbuild-md.ts.docs/lib/markdown/plugins/resolve-appearance-table.ts— drops ts-morph entirely; importsappearancesfrom@marigold/theme-rui/appearances.docs/app/manifest.json/route.ts— deleted (replaced by static asset).docs/app/api/md/[...slug]/route.ts— deleted (replaced by static assets).docs/lib/typescript.ts— deleted (no longer used at runtime; build-time helpers folded intoscripts/build-types.ts).next.config.mjs—serverExternalPackages: ['ts-morph', 'typescript'], the/<slug>.md → /api/md/<slug>.mdrewrite, and the route-handleroutputFileTracingIncludesentries are all removed.ts-morphmoved from runtime dependencies to devDependencies.
Performance (
pnpm build:md128 files):before this PR after build:typescold— ~17s build:typeswarm— ~0.3s build:md~10s ~8s build:typesonly reruns ts-morph for source files whose content changed. The registry cache is local-only at.registry/.cache/fumadocs-typescript/. - Node 22+ undici's
-
b7122c0: feat([DST-1388]): split prop tables into main, aria and handler groups
The interactive Props table (
<AutoTypeTable>) on each component page now shows the meaningful API props by default and tucksaria-*/roleattributes and React DOM event handlers into separate collapsible sections (e.g. Button drops from 112 visible props to 39 main + 10 aria + 63 handlers). The static markdown pipeline that feeds the LLM/MCPsearch_docsindex is intentionally untouched, so machine-readable docs continue to expose the full prop list. -
b7122c0: fix(docs): serve per-page markdown and the page manifest as static assets, eliminate ts-morph from the runtime.
Backport of the static-files architecture from
beta-release(PR #5372). Onmain,app/api/md/[...slug]/route.tsstill usesforce-staticwithgenerateStaticParamsreturningNextResponse.json(...), which is the same pattern that crashes on Vercel under Node ≥22 + Next.js 16:TypeError: Cannot read private member #state from an object whose class did not declare it at Reflect.get (<anonymous>)Three things compose into the bug: Node 22+ undici's
Responseuses private class fields (#state); Next.js 16's prerender wraps the returnedResponsein aProxy; the Proxy usesReflect.getto forward access, which can't reach private fields declared on a class the receiver isn't an instance of (per the JavaScript spec). See undici#4290, node#58814.Production has been masked by 10-day-old CDN caches; the next non-trivial redeploy of
mainwould have hit the same crash that surfaced onbeta-release.Fix. Both endpoints serve fully static data — write it to
public/at build time and let Next.js serve it directly. No route handler runs, no Proxy ever wraps aResponse, so the bug surface is removed. While re-architecting, ts-morph was eliminated from the runtime: type extraction now happens once atpnpm build:types, writing.registry/props.jsonfor both the<AutoTypeTable>server component and the markdown-build remark plugin to read.User-visible changes
/manifest.jsonand/<page-url>.md(e.g./components/actions/button.md) are now plain static assets inpublic/. No rewrite, no route handler. Same URLs as before.<AutoTypeTable package="system">(used bysvg/index.mdxandicon/index.mdx) now produces a populated props table in markdown output. The previous custom ts-morph plugin only handledpackages/components/src/, so system-package types silently rendered as empty.<AppearanceTable>markdown output now matches the HTML output exactly — both read the same@marigold/theme-rui/appearancesmap. Four components shift in their.mdoutput:Menugainsdestructive,LinkButtongainsdestructive-ghost,Panel.sizegainsdefault,Link.sizegainsdefault | small. AppearanceTable description cells render as plain text instead ofinlineCode.- HTML and markdown prop tables show identical type strings — both go through
autoTypeTableTransform, so design-system aliases (Scale | SpacingTokensetc.) appear consistently. - Dead
resolve-design-tokensmarkdown plugin removed: it referenced deletedui/ColorTable.tsx/ui/ColorTokens.tsxand crashed every markdown build with ENOENT.
Architecture
pnpm build (or dev) → pnpm build:assets && next ... build:assets (parallel): ├─ build:registry → .registry/demos.{tsx,json} ├─ build:changelog → content/.../release.mdx ├─ build:manifest → public/manifest.json └─ build:types NEW → .registry/props.json (one ts-morph pass) │ ▼ build:md → public/<slug>.mdts-morph runs once at build time and is now a
devDependencyonly.<AutoTypeTable>reads the pre-computed JSON synchronously and renders via fumadocs-ui's<TypeTable>shell. Seedocs/README.mdfor the full script catalog. -
b7122c0: docs(DST-1385): document Switch
variant="settings"and the auto-save ruleAdds a Button-style variant table under
## Appearancesummarisingdefaultandsettings, rewritesSettings and preferencewith placement guidance and the reasoning for why switches must live on auto-save surfaces (light-switch metaphor +role="switch"ARIA contract + save-semantics conflict), and adds a warning Callout reservingvariant="settings"for auto-save surfaces. -
b7122c0: docs(DST-1361): fix column alignment in Table documentation demos. Several demos contradicted the alignment guidelines described in the Table docs (numeric right, text left, center only for icons/status). The action-menu demo centered its row actions with
<Inline alignX="center">while the column header was left-aligned, and thetable-editable,table-links, andtable-stickydemos had numeric Rating / Capacity columns rendered left-aligned. The demos now match the documented alignment rules. -
eadcbd1: fix(DST-1696): mark a row header column in the EmptyState and DateFormat table demos
Two rendered demos declared a
<Table>without marking any column asrowHeader, so react-aria threwA table must have at least one Column with the isRowHeader prop set to truewhenever the table's collection was rebuilt. The first commit runs withisSSRand stays silent, so the error only surfaced on a later re-render (the DateFormat demo's tabular-digits switch triggers it on the first toggle). React recovered with a synchronous re-render, leaving a console error on two published docs pages.Both demos now mark their first column as
rowHeader, which is also what assistive technology announces when navigating rows. The DateFormat table gained its missingaria-label. -
b7122c0: docs([DST-1314]): add full data management pattern with filtering
Add a full-page data management pattern example at
/examples/filterdemonstrating venue browsing with multi-criteria filtering. The example includes a toolbar with search and filter controls, applied filter chips for active filter display, and a paginated data table all coordinated through URL state vianuqs. -
b7122c0: docs(DST-1623): note that
<ToastProvider>should be mounted onceEvery toast shares one global queue (React Aria's model: a single
ToastRegionper queue), so one<ToastProvider>renders them all andaddToastworks from anywhere. Mounting more than one renders every toast per provider and creates duplicate notificationregionlandmarks. React Aria surfaces this via its duplicate-landmark-label warning and does not dedupe. Added a callout on the Toast page documenting the "mount once" guidance. -
b7122c0: docs(DST-1344): unify responsive hooks into the Responsive Design foundations page
Folds the
useResponsiveValueanduseSmallScreendocumentation into the existingResponsive Designfoundations page so all screen-size guidance lives in one place. Adds a combined import block, a dedicated section for each hook with an interactive breakpoint picker, and notes that both hooks read breakpoints fromtheme.screenswith a--breakpoint-*CSS fallback. Removes the standaloneuseResponsiveValuepage under hooks-and-utils and repoints internal links (the TopNavigation mobile-navigation note and the on-page references) to the consolidated page. -
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [85e9a45]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [0e2c676]
-
Updated dependencies [b7122c0]
-
Updated dependencies [a9fdcff]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [2b9df4c]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [68122ff]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [e0f9c05]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [7a122c7]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [bb23186]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [0e2c676]
-
Updated dependencies [b7122c0]
-
Updated dependencies [f331a41]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [04e22ab]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [6cfcea4]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
- @marigold/components@18.0.0
- @marigold/theme-rui@6.0.0
- @marigold/system@18.0.0
- @marigold/icons@2.0.0
18.0.0-rc.5
Patch Changes
-
b7122c0: docs(DST-1434): promote the Filter pattern to beta. Restructures the guidance into task-focused chapters (choosing filters, filter types, applying, designing options, scaling up, filter state, small screens, accessibility, implementation), reframes the SegmentedControl as a scope switch, bases date quick filters on the built-in DateRangePicker presets, makes panel grouping thematic, and documents the draft preview. The reference implementation gains quick filters, a searchable city filter, an availability date range filter, live option counts, and a result-count preview on the Apply button.
-
b7122c0: docs(DST-1543): document
marigold migrateon the CLI pageAdds a
marigold migratesection to/getting-started/cli, alongside the other commands: what the codemods cover (theme slot restructures and baseline swaps, application-code renames, report-only design-token checks), the optional version and path positionals, the--dry-runand--onlyflags, and the safety model (warnings instead of guesses, idempotent runs, the typecheck as the completeness check). -
b7122c0: docs(DST-1570): add v18 migration guide (
MIGRATION-v18.md)An exhaustive, agent-consumable guide for upgrading a consuming app from Marigold 17 to 18. Root-level Markdown file, split into Section A (app developers) and Section B (custom theme authors). Every breaking change lists what changed, a before→after, why, and gotchas, tagged
[auto]/[flagged]/[manual]/[adopt]so it composes with themarigold migrate v18codemod. Linked from the v18.0.0 release notes. -
e0f9c05: fix(DST-1647): honor the router's
useHrefin sidebar linksSidebar.ItemandSidebar.RailItemrendered the rawhrefprop straight onto their anchor, which shadowed the value produced byRouterProvider's optionaluseHref. Applications served from a prefix, such as a Next.jsbasePath, ended up with sidebar markup pointing at an unprefixed URL, so middle click and "copy link address" resolved to the wrong page. Both components now render the transformed href and keep handing the unprefixed path tonavigate, matching how React Aria's ownuseLinkbehaves. Consumers that do not passuseHrefsee no change, because the default leaves the href untouched.The
RouterProviderdocs now coveruseHrefnext tonavigate, and the component gained a matching Storybook story and prop description. -
b7122c0: docs(DST-1651): expand the Pick pattern guidance, examples, and commit-button behavior
Rounds out the Pick pattern docs (
/patterns/user-input/pick) and its example (/examples/pick).Commit button stays active. Aligns the pattern with the Button page's "avoid disabled buttons" guidance. The commit button no longer disables when the staged set is empty or below the minimum. Pressing it refuses the commit and reveals a
<SectionMessage variant="error">at the top of the surface that says what is still needed and announces itself to assistive technology, instead of a disabled control that gives no reason and drops out of the keyboard tab order. Applies to the guidance text and all four commit examples (the fullscreen example plus the dialog, select-list, and inline abonnement demos)."Naming the commit button" section. Promotes the commit-button label guidance into its own section. The button names its outcome with the host task's own verb ("Add venues", "Assign users", "Save venues"), never a generic label. The staged count is status that lives on the removable-tag rail. The label may echo it ("Add 3 venues") when it stays short and mirrors the trigger, and stays a bare verb when the label would run long or a min or max applies. Names the labels that do not fit a commit: "Next", "Continue", "OK", "Done" (multi-step words), "Filter" (the wrong mechanism), and "Save" for a discardable result.
"Selection limits" section. Promotes the terse "Bound the selection" bullet into its own subsection. States the rule up front in helper text ("Pick at least three", "Choose up to seven") and keeps a live count in the staged-tag rail ("Staged (3 of 5)"). A minimum is checked on press and surfaces the message rather than disabling the button. A maximum makes the ceiling visible, disables the unchecked rows once reached and says why, and keeps deselection free so the user can swap a pick.
In-page date-pick demo. Adds a second stay-on-the-page example to "Choose the surface by collection size": assembling a season subscription (an Abonnement) from concert dates without a dialog, over a
<SelectList>with sold-out entries disabled and a running count beside a verb-only commit.Faceted example filters. The
/examples/pickvenue picker's Type, Region, and Status filters now reference one another. Each option carries the count it would yield under the other active filters and the search ("Bavaria (3)"), options that would return nothing are disabled, and the current value is never disabled so a filter can always be changed back. Counts derive from the same predicate that filters the table, so they never disagree.Docs-only.
-
b7122c0: fix(DST-1434): ship nested example sources in the examples registry
build-examples.mjscollected only the top level of an example folder, so any example keeping code in a subdirectory shipped importers without their imports. Thefilterpayload carried 7 files while all six of its key files import from./hooks/…, andbulk-actionswas missing 8 of its 16 — snippets that could not be built by whoever copied them. The walk is now recursive, with paths POSIX-relative to the example root so they match the import specifiers, andkey_filesmay point into a subdirectory.Also completes the
filtersidecar so its copyable snippet typechecks: the@/lib/data/venuesstub was missingvenueCities,MAX_CAPACITY,MAX_PRICE, theVenuetype and thenextAvailablefield, and@/lib/data/venues-queryhad no stub at all despite being imported by a key file.peer_depsgains@internationalized/date,@tanstack/react-queryandreact-error-boundary, and dropszod, which nothing imports.The scripts/ tests that guard this were never running:
docs/vitest.config.mjsanddocs/vitest.config.tsboth existed, vitest resolved the latter, and itsincludecovered onlyapp/andlib/, sopnpm --filter @marigold/docs testpassed on an empty selection. The two configs are merged into one. -
b7122c0: docs(DST-1344): unify responsive hooks into the Responsive Design foundations page
Folds the
useResponsiveValueanduseSmallScreendocumentation into the existingResponsive Designfoundations page so all screen-size guidance lives in one place. Adds a combined import block, a dedicated section for each hook with an interactive breakpoint picker, and notes that both hooks read breakpoints fromtheme.screenswith a--breakpoint-*CSS fallback. Removes the standaloneuseResponsiveValuepage under hooks-and-utils and repoints internal links (the TopNavigation mobile-navigation note and the on-page references) to the consolidated page. -
Updated dependencies [85e9a45]
-
Updated dependencies [b7122c0]
-
Updated dependencies [0e2c676]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [68122ff]
-
Updated dependencies [e0f9c05]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [7a122c7]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [b7122c0]
-
Updated dependencies [0e2c676]
-
Updated dependencies [b7122c0]
-
Updated dependencies [6cfcea4]
- @marigold/components@18.0.0-rc.5
- @marigold/system@18.0.0-rc.5
- @marigold/theme-rui@6.0.0-rc.5
- @marigold/icons@2.0.0-rc.5
18.0.0-beta.4
Major Changes
-
fc8ca13: refa([DST-1549]): Breaking change: Rename compound member
Tabs.TabPanel→Tabs.PanelTabsnow exposes.List,.Item, and.Panel, so every compound member follows one predictable naming rule.<Tabs.TabPanel>is removed (hard rename, no deprecated alias).Migration:
Before After <Tabs.TabPanel id="…"><Tabs.Panel id="…">
Minor Changes
-
7fc3b53: feat(DST-1446):
marigold searchto find components by docs contentAdds
marigold search <query>, which ranks components by matching the query against their docs content (title, description, section headings, and section prose), not just the component name. This collapses the "list → guess → docs → retry" discovery loop (3 to 5 calls) that AI agents run today into a single ranked, snippet-bearing, deep-linked result.- CLI: new
loadSearchIndex()/searchComponentDocs()library functions and asearchcommand wrapping them, with--limit,--format markdown|json|plain,--freshand--offline(reusing the existing cache andsanitizeRemote— no new dependencies). Scoring weights title ×3, description ×2, each matching heading ×2, and each matching section snippet ×1. Tab completion and telemetry cover the new command. No-match exits 0 ([]for--format json). - Docs:
build-manifest.mjsnow also emitspublic/component-search.json— a content index over the component MDX (per-componentheadingsplus prose-bearing{ heading, snippet }sections, with JSX/imports/code-fences stripped). It is written aftermanifest.jsonso a content-index bug can never block the manifest thatlist/docsdepend on.
- CLI: new
-
762989f: docs(DST-1198): add Fetching and Mutations pattern for
@tanstack/react-query+ MarigoldAdds a new
Datapattern group with aFetching and Mutationspage covering hook encapsulation, centralized query keys, theisLoadingvsuseIsFetchingloading taxonomy, error handling and retries viathrowOnErrorwith an error boundary, toast feedback, optimistic updates, and destructive confirmation withuseConfirmation. It also points to React Server Components and Server Actions as the alternative paradigm.The
/examples/filterreference app now fetches from a real stateless/api/venuesroute handler: search, filter, sort and pagination run on the server, the query key is derived from the existing URL (nuqs) state, and rows can be deleted with confirmation and optimistic updates. Deletions are tracked per visitor on the client so the demo stays isolated and resets on reload.
Patch Changes
-
a912c89: Improve spacing between sidebar navigation sections for better visual separation.
-
6d7b6c6: docs(DST-1383): add the Bulk Actions pattern
New user-input pattern page documenting how to let users select many records in a collection and act on all of them at once, built by composing existing Marigold components (
<Table>selection,<ActionBar>,<Dialog>viauseConfirmation,<Drawer>,<Toast>). Covers the full flow in build order: when (not) to use the pattern, structure, choosing actions, selection and its visible-scope boundary, direct actions, confirming destructive actions, multi-field bulk edit, progress feedback, and result/partial-failure handling. Includes an anatomy diagram, seven inline demos, Do/Don't guidance, an accessibility section, and an implementation section with the load-bearing practices (derive the acted-on set once, clear selection on scope change, keep failed records selected, re-key the bulk-edit form). -
6d7b6c6: docs(DST-1384): add the Bulk Actions working example
New full-page example at
/examples/bulk-actionsthat wires the whole bulk-actions pattern together as one real product surface: a paginated, searchable events table with page-bounded selection, a floatingActionBar(Publish, Edit, Export, overflow menu, Delete), direct publish with a deterministic partial-failure path whose failed records stay selected and are fixable via the bulk-editDrawer(mixed values, explicit price opt-in, re-keyed per selection), a destructive confirmDialogwith count and reservation impact, button-loading and running-count progress, and toasts for every outcome. Backed by a stateless/api/eventsroute plus a/api/events/bulkauthorizer; all session changes are client-owned and ride along in the query key, so filters always see the visitor's world. Search, status filter, and page persist in the URL via nuqs. The pattern page'sDemoLinksnow resolves and its "in progress" callout is gone. -
c5bfbb1: docs(DST-1405): document the Marigold CLI on the docs site
Adds a new CLI page under Getting Started (
/getting-started/cli). The single page covers installation (npm / pnpm / npx), usage with AI agents, every command (docs,list,examples,init,completion,telemetry) with flags and examples, and configuration (environment variables and per-OS cache / config locations). Content mirrorspackages/cli/README.md.Cross-links were added from the Installation page (
marigold initas a faster setup path) and the Usage with AI page (the AI-agents section of the new CLI page). -
21e79b7: docs(DST-1465): position Card among Collection components and link out to alternatives
Reframes the Card docs to lead with Card's Collection identity. Adds a
Card vs Tablein-category comparison with a newCardVsTableMockupillustration, aWhen the content isn't a collectionsection pointing to Panel, Stack, and Tiles, and a top-levelAlternative componentssection that links out to the right component for each case. -
5b9e78d: docs(DST-1474): write the ActionBar component documentation
Replaces the boilerplate ActionBar page with full, use-case-driven documentation: an intro that frames it as a bulk-action toolbar for the current selection in a collection, an anatomy diagram, Do/Don't guidance, and three demos (bulk actions in a
<Table>via theactionBarrender prop, bulk editing through a<Drawer>, and driving the bar from custom selection state outside a Table). Adds an accessibility section covering the labelled toolbar, the live-region announcement, Escape-to-clear, and focus restoration. -
4f9cd66: docs(DST-1532): add the Pick pattern with demos and a working example
New user-input pattern page documenting picking: finding records in a collection and committing them as a set, the counterpart to filtering, which narrows a view in place. Covers the Filter-vs-Pick distinction, a surface spectrum that scales to collection size (inline multi-select, a searchable
<TagField>, a<Dialog>, and a routed page as the exception), and the load-bearing practices: preserve staged selections while search and filters narrow the list, bound the selection and name the outcome in the commit button, keep the staged set visible as a removable<Tag.Group>rail, and narrow rather than paginate large or async collections. Ships four inline demos (<TagField>, a multi-select<Table>dialog, a<SelectList>variant, and an on-page filter-select-act signpost) plus a full/examples/pickexample: asize="fullscreen"dialog that picks from about fifty venues into a report that owns the committed set. Cross-references the pattern from the Filter and Table Records pages. -
d257bff: feat(DST-1574): surface example apps in the docs ⌘K search
The interactive example demos are now discoverable from the docs command menu. Typing an example's name — or just "example" — lists the standalone demos (App Shell, Filter, Event Form, Settings Form, Auto-Save Settings, Inventory) as "Example: …" quick actions. Internal screens of a larger demo (e.g. the App Shell's Billing/Users/Teams pages) are intentionally not surfaced as separate examples.
-
4a75d68: docs(DST-1623): note that
<ToastProvider>should be mounted onceEvery toast shares one global queue (React Aria's model: a single
ToastRegionper queue), so one<ToastProvider>renders them all andaddToastworks from anywhere. Mounting more than one renders every toast per provider and creates duplicate notificationregionlandmarks. React Aria surfaces this via its duplicate-landmark-label warning and does not dedupe. Added a callout on the Toast page documenting the "mount once" guidance. -
Updated dependencies [c789dee]
-
Updated dependencies [28c4e40]
-
Updated dependencies [9918172]
-
Updated dependencies [f1990eb]
-
Updated dependencies [d72b30a]
-
Updated dependencies [be0eeb9]
-
Updated dependencies [9b613e6]
-
Updated dependencies [cff8f37]
-
Updated dependencies [e9996ef]
-
Updated dependencies [0b7f87f]
-
Updated dependencies [c20abe3]
-
Updated dependencies [13a1982]
-
Updated dependencies [d72f464]
-
Updated dependencies [9fd4000]
-
Updated dependencies [f715905]
-
Updated dependencies [0637671]
-
Updated dependencies [e686474]
-
Updated dependencies [c799448]
-
Updated dependencies [dd044be]
-
Updated dependencies [50d8339]
-
Updated dependencies [ecd739f]
-
Updated dependencies [2fc7b96]
-
Updated dependencies [586ffd1]
-
Updated dependencies [af7767c]
-
Updated dependencies [8418ee7]
-
Updated dependencies [fc8ca13]
-
Updated dependencies [f1990eb]
-
Updated dependencies [508ec2c]
-
Updated dependencies [2a275bb]
-
Updated dependencies [ae6644d]
-
Updated dependencies [e911844]
-
Updated dependencies [f69ba1c]
-
Updated dependencies [90d8af7]
-
Updated dependencies [136a4be]
-
Updated dependencies [018c055]
-
Updated dependencies [018c055]
-
Updated dependencies [018c055]
-
Updated dependencies [c30f224]
-
Updated dependencies [0e4b915]
-
Updated dependencies [51484fd]
-
Updated dependencies [51484fd]
-
Updated dependencies [b6666b4]
-
Updated dependencies [66a22e8]
-
Updated dependencies [7605d46]
-
Updated dependencies [40b006e]
-
Updated dependencies [f817023]
-
Updated dependencies [5d0b6c0]
-
Updated dependencies [e5701c4]
-
Updated dependencies [a34b353]
-
Updated dependencies [306fe23]
-
Updated dependencies [199e066]
-
Updated dependencies [106821a]
-
Updated dependencies [3231866]
-
Updated dependencies [40e6b21]
-
Updated dependencies [867f3cc]
-
Updated dependencies [b954ab2]
-
Updated dependencies [2b3e286]
-
Updated dependencies [d0bb11c]
-
Updated dependencies [b41a3e3]
-
Updated dependencies [be0eeb9]
-
Updated dependencies [be0eeb9]
-
Updated dependencies [ccd3bb3]
-
Updated dependencies [766a46b]
-
Updated dependencies [0e3971a]
-
Updated dependencies [4d44517]
- @marigold/components@18.0.0-beta.4
- @marigold/theme-rui@6.0.0-beta.4
- @marigold/system@18.0.0-beta.4
- @marigold/icons@2.0.0-beta.4
18.0.0-beta.3
Patch Changes
-
bd45aee: feat(DST-876): add Card usage guidelines
Renames the
Card.Previewslot toCard.Mediaacross components, theme, and docs. This is a breaking change: consumers using<Card.Preview>, thedata-card-previewselector, or thepreviewtheme slot key must migrate toCard.Media,data-card-media, and themediaslot key respectively.Adds a "Usage" section to the Card docs covering when to use cards, media slot guidance.
-
36b03b5: docs: remove dash punctuation and semicolons from documentation prose
Rewrites em-dash and en-dash punctuation and prose semicolons across the component, foundation, and pattern docs into plain sentences for easier reading. Numeric ranges now read as "N to M". Example strings that show literal component output (date and number range formatting, filter chip labels) keep their en-dash because it represents real output.
-
1ca43c2: docs(DST-1487): move ActionBar docs from "Actions" into the "Collection" section
<ActionBar>is the floating toolbar of bulk actions for the current selection in a collection, not a generic action primitive. Its docs page moves fromcomponents/actions/actionbartocomponents/collection/actionbar, sitting alongsideTable,Card, andTag.- The page description and intro are reframed around the collection/bulk-selection context, and a
Relatedsection now links back toTableandButton. - Internal links in
ActionButton,ActionGroup,Button, andDrawerare repointed to the new path. Historical release-note links are left untouched.
- The page description and intro are reframed around the collection/bulk-selection context, and a
-
11ff07a: docs(DST-1226): restructure form documentation for clarity and discoverability
Consolidates three pages (Form Fields, Forms, Form Implementation) into two:
- Form Fields (Foundation): slimmed down to anatomy, label, placeholder, help text, width, and field states. New SVG anatomy diagram replaces the static image. Validation content and the redundant component list are removed.
- Forms (Pattern): merges design/layout content with validation (native, custom, real-time, server errors, Zod) and state management (controlled vs uncontrolled, FormData submission, conditional fields, error handling, react-hook-form, async with
useActionState).
The standalone Form Implementation page is removed, and 18 cross-references across component and pattern pages are repointed to the merged Forms page.
-
Updated dependencies [5945653]
-
Updated dependencies [141a2cc]
-
Updated dependencies [bd45aee]
-
Updated dependencies [16bcb56]
-
Updated dependencies [263c5e6]
-
Updated dependencies [75cab86]
-
Updated dependencies [0760ecc]
-
Updated dependencies [6430567]
-
Updated dependencies [14f1324]
-
Updated dependencies [431d4dd]
-
Updated dependencies [141a2cc]
-
Updated dependencies [4d20fb6]
-
Updated dependencies [fc9ffb1]
-
Updated dependencies [334688e]
-
Updated dependencies [334688e]
-
Updated dependencies [9cdb389]
- @marigold/components@18.0.0-beta.3
- @marigold/system@18.0.0-beta.3
- @marigold/theme-rui@6.0.0-beta.3
- @marigold/icons@2.0.0-beta.3
18.0.0-beta.2
Patch Changes
- Updated dependencies [3a62175]
- Updated dependencies [2a34a64]
- Updated dependencies [61f917f]
- Updated dependencies [d51416c]
- Updated dependencies [a59d2dd]
- Updated dependencies [9a407ef]
- @marigold/components@18.0.0-beta.2
- @marigold/system@18.0.0-beta.2
- @marigold/theme-rui@6.0.0-beta.2
- @marigold/icons@2.0.0-beta.2
18.0.0-beta.1
Major Changes
-
9f4dc97: refa([DST-1324]): Breaking change: Rename Inset's
space/spaceX/spaceYprops top/px/pyThe padding props on
Insetare renamed to align withPanel's existing API, so that across the design systemspacealways means gap between children andp/px/pyalways mean inner padding. Previously,spacecarried two different meanings depending on the component, which was a source of confusion.Migration:
Before After <Inset space="…" /><Inset p="…" /><Inset spaceX="…" spaceY="…" /><Inset px="…" py="…" />The discriminated union shape is unchanged:
pis mutually exclusive withpx/py. Token vocabularies are unchanged (InsetSpacingTokensforp,PaddingSpacingTokensforpx/py).
Patch Changes
-
727163c: feat([DST-1134]): add
<RangeCalendar>component (alpha)Adds a new
<RangeCalendar>for selecting a contiguous or non-contiguous date range, built on react-aria's<RangeCalendar>with Marigold conventions (disabled,readOnly,error,dateUnavailable,allowsNonContiguousRanges). Supports up to three side-by-side months viavisibleDuration, stacking vertically below thesmbreakpoint; the same responsive stacking now applies to multi-month<Calendar>for parity.descriptionanderrorMessageroute through<FieldBase>so the help/error UI matches the rest of the form-component family (TriangleAlert icon + HelpText container). Ships as an alpha component with a stub docs page under the form section. -
8c8e2da: docs(DST-1382): expand Drawer documentation with use cases and decision framework
Rewrites the Drawer docs to lead with a defining principle (supplementary, in-context, light task; non-modal on desktop), adds a decision framework (Drawer vs Dialog, routing to a page instead), and documents six canonical use cases: detail-row inspection, quick edit/create from a list, filter panel, comments and activity, contextual utility, and multi-field bulk edit. New demos illustrate the table-row inspection, comments/activity, and Table+ActionBar bulk-edit patterns. Filter pattern moved to a
## Relatedsection. -
a244486: docs(DST-1308): consolidate icon documentation onto the Iconography page
Merge the former
/foundations/iconsand/components/content/iconpages into/foundations/iconographyso principles, catalog, and engineering API live in one place. The newUsing icons in codesection covers installation, importing, sizing, color (currentColor+classNamerecommended;colorprop is literal CSS), filled brand icons, and accessibility (autoaria-hidden).Migration table
Old names from the legacy
@marigold/iconsset and their Lucide replacement. Names marked custom are retained brand icons that still ship from@marigold/iconsdirectly.UI
Old New Add PlusArrowDown ArrowDownArrowLeft ArrowLeftArrowRight ArrowRightArrowUp ArrowUpBurgerMenu MenuCheck CheckChevronDown ChevronDownChevronLeft ChevronLeftChevronRight ChevronRightChevronUp ChevronUpCircleChecked CircleDotCircleUnchecked CircleDelete Trash2ExternalLink ExternalLinkEye EyeFilter ListFilterIconMore EllipsisRemove MinusSearch SearchSettingDots EllipsisVerticalSquareChecked SquareCheckSquareUnchecked SquareInfo
Old New Accessible AccessibilityAutoRenew RefreshCcwBanned BanBatteryCharging BatteryChargingBatteryEmpty BatteryLowBatteryFull BatteryFullBatteryHalf BatteryMediumBus BusFrontCalendar CalendarCamera CameraClock ClockDirection SquareArrowUpRightEmail MailEventDate Calendar1Exclamation TriangleAlertFeedback MessageSquareMoreFood UtensilsGlobe GlobeHome HouseInfo InfoMarker MapPinMobilePhone SmartphoneMobileSignal SignalHighNotification MessageSquareWarningParking CircleParkingPDF PDF(custom)Reports FileTextRequired AsteriskResaleLogbook BookOpenTextSpinner LoaderThumb ThumbsUpTruck TruckWifi WifiAction
Old New Cancel CircleXCrop CropDownload DownloadEdit PencilExportFile SquareArrowOutUpRightFormatBold BoldFormatItalic ItalicFormatSize ALargeSmallHighlightOff PowerLocation LocateFixedLock LockLockOpen LockOpenLogout LogOutPause PausePicture ImagePlay PlayResaleEdit CogRestart RotateCcwRotateLeft RotateCcwRotateRight RotateCwSave SaveSort ChevronsUpDownSortDown ChevronDownSortUp ChevronUpStar StarStop CircleStopUnderlined UnderlineZoom ZoomInTicketing
Old New Deal BadgePercentDesignTicket DesignTicket(custom)GiftCard GiftCard(custom)Membership IdCardLanyardPickup StorePrice EuroResale Resale(custom)Scanner Scanner(custom)Seat ArmchairSelling TagStadium Stadium(custom)Ticket TicketTicketInsurance TicketInsurance(custom)Turnstile Turnstile(custom)User
Old New Cart ShoppingCartCreditCard CreditCardGroup UsersRoundId IdCardSmilieDissatisfied FrownSmilieNeutral MehSmilieSatisfied SmileSmilieVeryDissatisfied AngrySmilieVerySatisfied LaughUser UserRoundSocial
Old New Google Google(custom)Instagram Instagram(custom)Share Share2Twitter Twitter(custom)TwitterXis also available for the post-rebrand X mark;Twitter(custom) remains for the bird mark. -
496a9f2: feat(SelectList): standardized API, item layout, and visual distinction from ListBox (DST-1076)
<SelectList>has been refined into a first-class form field for picking one or many items from a visible list of rich two-line rows. This release contains breaking renames and a tightened type surface.Breaking changes
SelectList.Item→SelectList.Option. The option semantic matchesSelect.Optionand the HTML<option>mental model. Update any<SelectList.Item>usage to<SelectList.Option>.SelectList.Actionhas been removed. Drop your<ActionMenu>or<IconButton>directly inside<SelectList.Option>— the component positions, sizes, and styles the nested control automatically viaButtonContext. Limit: one action per option (multi-button groups will arrive with a futureActionGroup).- Leading-image slot has been removed. Compose images inside
<Text slot="label">(or anywhere in children) as you see fit. selectionMode="none"is no longer accepted.SelectListis a form field; the default is now"single".onChangeis strictly typed perselectionMode:(key: Key | null) => voidfor single,(keys: Key[]) => voidfor multiple. The shape matchesSelect<T, M>. PassingsetStatedirectly may require adapting the callback.
Other changes
- Selection indicator — single-select rows render a visible radio circle; multi-select renders a checkbox.
- Label & description slots — use
<Text slot="label">and<Text slot="description">inside<SelectList.Option>. The row skeleton isselection · label + description · action (optional). - Dev-mode warning when
textValueis missing on an option whose children aren't a plain string. - Own theme entry —
SelectListships a dedicated theme component. The theme exposes first-classlabel,description, andactionentries; slot styling no longer uses descendant selectors. Consumers with custom themes must add or update aSelectListentry.
Documentation
The SelectList docs page is rewritten around the new API. Adds an anatomy diagram, a decision table for choosing between
<SelectList>and lighter controls (<Radio.Group>,<Checkbox.Group>,<Select>,<Combobox>,<TagField>), and dedicated sections for multi-selection, per-row actions (decision-help and configuration patterns), horizontal orientation, and empty state. Replaces selected prose with Do/Don't tiles. Tightens the accessibility section to what's specific to SelectList (keyboard model, label requirement,textValuefor rich rows).Migration
- <SelectList selectionMode="none"> - <SelectList.Item id="free"> - <SelectList.Action> - <IconButton aria-label="Info"><Info /></IconButton> - </SelectList.Action> - Free - </SelectList.Item> - </SelectList> + <SelectList selectionMode="single"> + <SelectList.Option id="free"> + Free + <IconButton aria-label="Info"><Info /></IconButton> + </SelectList.Option> + </SelectList> -
63af0c1: docs(DST-1313): add settings form pattern and documentation:
Add settings form and event form pattern examples at
/examples/settings-formand/examples/event-form. The settings form demonstrates tabbed navigation, independent section saves with Panel, collapsible advanced fields, and a danger zone with confirmation dialogs. The event form shows a single-submit form with multiple Panel sections. Updates the forms pattern documentation with a Panels subsection and links to both demos. -
4b02dfe: feat([DST-1388]): split prop tables into main, aria and handler groups
The interactive Props table (
<AutoTypeTable>) on each component page now shows the meaningful API props by default and tucksaria-*/roleattributes and React DOM event handlers into separate collapsible sections (e.g. Button drops from 112 visible props to 39 main + 10 aria + 63 handlers). The static markdown pipeline that feeds the LLM/MCPsearch_docsindex is intentionally untouched, so machine-readable docs continue to expose the full prop list. -
20bf9c1: docs([DST-1314]): add full data management pattern with filtering
Add a full-page data management pattern example at
/examples/filterdemonstrating venue browsing with multi-criteria filtering. The example includes a toolbar with search and filter controls, applied filter chips for active filter display, and a paginated data table all coordinated through URL state vianuqs. -
Updated dependencies [727163c]
-
Updated dependencies [cc568e3]
-
Updated dependencies [566c468]
-
Updated dependencies [9f4dc97]
-
Updated dependencies [2014edf]
-
Updated dependencies [3c6a943]
-
Updated dependencies [f8fbef9]
-
Updated dependencies [4742e8e]
-
Updated dependencies [496a9f2]
-
Updated dependencies [a5678ed]
-
Updated dependencies [5f2e9a0]
-
Updated dependencies [496a9f2]
-
Updated dependencies [8b754f0]
-
Updated dependencies [5744bbf]
-
Updated dependencies [2d9d6fd]
-
Updated dependencies [2ff7bda]
- @marigold/components@18.0.0-beta.1
- @marigold/theme-rui@6.0.0-beta.1
- @marigold/system@18.0.0-beta.1
- @marigold/icons@2.0.0-beta.1
18.0.0-beta.0
Major Changes
-
f629319: refactor([DST-1283]): Breaking Change — Remove
<Multiselect>(and thereact-selectdependency) from@marigold/components.Use
<TagField>instead. -
724f0ce: refa([DST-1162]): Breaking changes: The
Cardcomponent has been refactored into a compound component pattern.What changed:
- The previous prop-based API (
padding,space, etc.) has been removed. - Content must now be composed using explicit sub-components:
Card.Header,Card.Content,Card.Footer, andCard.Preview. - A
CardContextis now required — sub-components will throw an error if used outside of a<Card>.
Migration:
// Before <Card> <SomeContent /> </Card> // After <Card> <Card.Header>Title</Card.Header> <Card.Content><SomeContent /></Card.Content> <Card.Footer>Actions</Card.Footer> </Card> - The previous prop-based API (
Minor Changes
-
6587493: refa([DST-1298]): Refactor Divider component: API, styling, and docs
We fixed the vertical orientation of the divider, which previously didn't work. Added new Divider stories and updated the Divider docs.
-
91f4312: feat: add MCP server for semantic search over Marigold docs
Adds an MCP (Model Context Protocol) server at
/mcpthat lets AI coding assistants (Claude Code, VS Code Copilot, etc.) semantically search the Marigold documentation. An ETL pipeline (pnpm build:embeddings) chunks the MDX docs and generates vector embeddings via AWS Bedrock Titan v2, served via Streamable HTTP transport with Keycloak-authenticated access.
Patch Changes
-
a69e719: refactor: adopt
Sidebar.Navcurrentprop in demos and storiesReplaces the hand-rolled
active={currentPath === '/...'}pattern across Sidebar and AppLayout demos (documentation) and theAppLayoutStorybook story with the newcurrentprop onSidebar.Nav(shipped in DST-1322 / #5306). The order-detail demo additionally leverages the new prefix-match semantics, so/orders/:idroutes automatically highlight the/ordersnav item without a regex fallback.No consumer-facing package behavior changes — only demos and an internal story.
-
7aa5128: Add unified demo app at
/examplesthat consolidates all pattern demos (filter, form, inventory) alongside a full app-shell example. A shared shell layout renders the sidebar, breadcrumbs, and section switcher from a single navigation tree; each example page links back to its corresponding pattern guidelines. Removes all standalone pattern pages in favor of colocated demo routes. -
1dbb3e2: fix(docs): make MCP and embedding env vars optional so
pnpm build:docsworks locally withoutAWS_BEDROCK_*,OIDC_*, orBLOB_READ_WRITE_TOKENset. Also corrects theclaude mcp add marigold-docssnippet to use the positional URL argument instead of--url. -
0bf3239: fix: redesign Do/Don't guideline cards to match fumadocs
Replaces the legacy Do/Don't design with a tinted card layout that uses fumadocs design tokens (
--color-fd-success/--color-fd-error) andlucide-reacticons. Adds proper dark mode support, which was previously broken due to hardcoded light-mode colors. -
2d8b8a3: docs(DST-1326): restructure the Layouts foundation around
Panel+ primitivesReworks the Layouts foundation page to frame the two responsibilities explicitly:
Panelfor page-level content sectioning, and the atomic layout primitives (Stack,Inline,Inset,Split,Center,Tiles,Columns) for everything inside. Adds a "Choosing the right layout" decision table, collapses the previous two-tier framing that implicitly treatedPanelandAppLayoutas peers, and replaces the wireframe demo with an annotated SVG anatomy diagram that mirrors thePanelandSidebaranatomies. Also trims the component-principles Layout section to defer to this page, switches theconcepts-spacingdemo toWireframe.Boxfor nicer visuals, and fixesWireframe.Boxcolours after thesecondary-*token removal by falling back to the Tailwind neutral palette. -
c821902: docs([DST-1032]): Revise installation guideline
Revised the whole installation Guideline, to make it up to date and fix stuff that wasn't working. It now contains a more detailed description and has better examples. Users and AI should now be able to create a new project with Marigold, without a problem.
-
8326bf7: docs(DST-1326): add
Panelcomponent documentationMDX page, anatomy diagrams (header + collapsible), and a full set of demos covering appearance, variants, header actions, collapsible sections (incl. controlled + error state), footer, bleed content, danger-zone rows, and a
PanelvsCardcomparison. -
9830f43: docs(DST-1331): flesh out app-shell example pages with realistic content
Replaces the
PlaceholderPagestand-in on the Analytics, Billing, General, Security, Teams, and Users routes with proper example screens built entirely from Marigold components. Each page usesPanelfor page-level sections and reservesCardfor repeating collection items (payment methods, active sessions, team cards, stat tiles). Removes the now-unusedPlaceholderPagecomponent. -
7d96a7a: fix(docs): pre-compute prop-table data at build time, eliminate ts-morph from the runtime, ship per-page markdown and the page manifest as static assets.
The Vercel preview build for the docs failed on
pnpm buildwith:TypeError: Cannot read private member #state from an object whose class did not declare it at Reflect.get (<anonymous>) Export encountered an error on /api/manifest.json/route, exiting the build.Same crash subsequently surfaced on
/api/md/[...slug]/routeonce the manifest was patched.Root cause (three things composing into one bug):
- Node 22+ undici's
Responseuses private class fields (#state) — see undici#4290, node#58814. - Next.js 16's
force-staticroute-handler prerender wraps the returnedResponsein a JavaScriptProxy. - The Proxy's handlers use
Reflect.getto forward property access. JavaScript's private-field semantics intentionally preventReflect.getfrom forwarding through a Proxy when the receiver isn't an instance of the class declaring the field.
So when Next.js's static exporter touches the proxied
Responseduring prerender, undici's getters callReflect.get(target, '#state'), which throws. The route handlers themselves run fine — the crash is on the way out, in the framework's prerender wrapper. The bug is environment-specific (Node 22+ ×force-static× Vercel build) and does not reproduce locally on older Node versions.Fix and surrounding cleanup
The data both endpoints serve (per-page markdown, page-index manifest) is fully static at build time. Rather than re-introduce route handlers and dance around the prerender Proxy with
await connection()/ cache headers /outputFileTracingIncludes, they're now plain files inpublic/served directly by Next.js. No route handler runs, no Proxy ever wraps the response — the bug surface is removed entirely. While re-architecting, ts-morph was eliminated from the runtime entirely; type extraction now happens in a single build-script pass.User-visible changes
- Per-page raw markdown is served at
<page-url>.md(e.g./components/actions/button.md) — written topublic/<slug>.mdat build time, served by Next.js as a static asset (Content-Type: text/markdown; charset=UTF-8). No rewrite, no route handler. - The docs page-index manifest is served at
/manifest.json— written topublic/manifest.json, served as a static asset (Content-Type: application/json; charset=UTF-8). Each entry'surlfield points at the slug-mirror<page-url>.mdpath. <AutoTypeTable package="system" />(used bysvg/index.mdxandicon/index.mdx) now produces a populated props table in the markdown output. The previous custom ts-morph plugin only handledpackages/components/src/, so system-package types silently rendered as empty.<AppearanceTable>rendering in markdown now matches the HTML output exactly — they read from the same@marigold/theme-rui/appearancesmap. Four components shift in<page-url>.mdoutput as a result:Menugainsdestructive(it lives on theMenuItemslot in cva, was missed by the old ts-morph regex),LinkButtongainsdestructive-ghost(itsPropsinterface omits it but the theme defines it),Panel.sizegainsdefault,Link.sizegainsdefault | small. AppearanceTable description cells render as plain text instead ofinlineCode— descriptions aren't code.- HTML and Markdown prop tables show identical type strings — both go through
autoTypeTableTransform, so design-system aliases (Scale | SpacingTokensetc.) appear consistently. Function types collapse tofunctionin markdown the same way they already do in HTML. - Dead
resolve-design-tokensmarkdown plugin removed: its<ColorTokenTable>JSX target was retired with the design-tokens content rewrite, but the plugin still referenced deletedui/ColorTable.tsx/ui/ColorTokens.tsxand crashed every markdown build with ENOENT.
Architecture
pnpm build (or dev) ├─ build:registry → .registry/demos.{tsx,json} (unchanged) ├─ build:types NEW → .registry/props.json (one ts-morph pass) ├─ build:changelog (unchanged) ├─ build:manifest → public/manifest.json (static asset) ├─ build:md → public/<slug>.md (static assets) └─ next buildAt request time:
<AutoTypeTable>(RSC) reads.registry/props.jsonsynchronously and renders via fumadocs-ui's<TypeTable>. No ts-morph, no async generator, no FS cache lookup per render.<AppearanceTable>(RSC) reads@marigold/theme-rui/appearancesdirectly (already the existing pattern)./manifest.jsonand/<slug>.mdare served as static assets frompublic/by Next.js.
Internals
docs/lib/props-data.ts(NEW) — typedgetPropTable({ path, name, package })reading from.registry/props.json. Single source of truth for both consumers.docs/scripts/build-types.ts(NEW) — scans MDX files for<AutoTypeTable>references, deduplicates, calls fumadocs-typescript's generator withautoTypeTableTransformonce per unique tuple, writes.registry/props.json. fumadocs FS cache lives at.registry/.cache/fumadocs-typescriptso subsequent runs are fast when component sources are unchanged: cold ~17s, warm ~0.3s.docs/scripts/build-md.ts— writes per-page markdown topublic/<slug>.md; cleans only.mdfiles in slug-root subtrees so existing image / asset directories underpublic/are untouched.docs/scripts/build-manifest.mjs— writes the page manifest topublic/manifest.json.docs/ui/AutoTypeTable.tsx— thin wrapper aroundfumadocs-typescript/ui's<AutoTypeTable>with a mockGeneratorthat just looks up.registry/props.json. The fumadocs/uientry doesn't import ts-morph, so this keeps ts-morph entirely out of the runtime bundle while still using the same<TypeTable>shell (collapsibles, hash deep-linking, Shiki).docs/lib/markdown/plugins/resolve-props-table.ts— synchronous remark plugin; reads from.registry/props.jsonviagetPropTable. No more async, no more generator call, no morepLimit(4)ts-morph contention inbuild-md.ts.docs/lib/markdown/plugins/resolve-appearance-table.ts— drops ts-morph entirely; importsappearancesfrom@marigold/theme-rui/appearances.docs/app/manifest.json/route.ts— deleted (replaced by static asset).docs/app/api/md/[...slug]/route.ts— deleted (replaced by static assets).docs/lib/typescript.ts— deleted (no longer used at runtime; build-time helpers folded intoscripts/build-types.ts).next.config.mjs—serverExternalPackages: ['ts-morph', 'typescript'], the/<slug>.md → /api/md/<slug>.mdrewrite, and the route-handleroutputFileTracingIncludesentries are all removed.ts-morphmoved from runtime dependencies to devDependencies.
Performance (
pnpm build:md128 files):before this PR after build:typescold— ~17s build:typeswarm— ~0.3s build:md~10s ~8s build:typesonly reruns ts-morph for source files whose content changed. The registry cache is local-only at.registry/.cache/fumadocs-typescript/. - Node 22+ undici's
-
774a11a: fix(docs): serve per-page markdown and the page manifest as static assets, eliminate ts-morph from the runtime.
Backport of the static-files architecture from
beta-release(PR #5372). Onmain,app/api/md/[...slug]/route.tsstill usesforce-staticwithgenerateStaticParamsreturningNextResponse.json(...), which is the same pattern that crashes on Vercel under Node ≥22 + Next.js 16:TypeError: Cannot read private member #state from an object whose class did not declare it at Reflect.get (<anonymous>)Three things compose into the bug: Node 22+ undici's
Responseuses private class fields (#state); Next.js 16's prerender wraps the returnedResponsein aProxy; the Proxy usesReflect.getto forward access, which can't reach private fields declared on a class the receiver isn't an instance of (per the JavaScript spec). See undici#4290, node#58814.Production has been masked by 10-day-old CDN caches; the next non-trivial redeploy of
mainwould have hit the same crash that surfaced onbeta-release.Fix. Both endpoints serve fully static data — write it to
public/at build time and let Next.js serve it directly. No route handler runs, no Proxy ever wraps aResponse, so the bug surface is removed. While re-architecting, ts-morph was eliminated from the runtime: type extraction now happens once atpnpm build:types, writing.registry/props.jsonfor both the<AutoTypeTable>server component and the markdown-build remark plugin to read.User-visible changes
/manifest.jsonand/<page-url>.md(e.g./components/actions/button.md) are now plain static assets inpublic/. No rewrite, no route handler. Same URLs as before.<AutoTypeTable package="system">(used bysvg/index.mdxandicon/index.mdx) now produces a populated props table in markdown output. The previous custom ts-morph plugin only handledpackages/components/src/, so system-package types silently rendered as empty.<AppearanceTable>markdown output now matches the HTML output exactly — both read the same@marigold/theme-rui/appearancesmap. Four components shift in their.mdoutput:Menugainsdestructive,LinkButtongainsdestructive-ghost,Panel.sizegainsdefault,Link.sizegainsdefault | small. AppearanceTable description cells render as plain text instead ofinlineCode.- HTML and markdown prop tables show identical type strings — both go through
autoTypeTableTransform, so design-system aliases (Scale | SpacingTokensetc.) appear consistently. - Dead
resolve-design-tokensmarkdown plugin removed: it referenced deletedui/ColorTable.tsx/ui/ColorTokens.tsxand crashed every markdown build with ENOENT.
Architecture
pnpm build (or dev) → pnpm build:assets && next ... build:assets (parallel): ├─ build:registry → .registry/demos.{tsx,json} ├─ build:changelog → content/.../release.mdx ├─ build:manifest → public/manifest.json └─ build:types NEW → .registry/props.json (one ts-morph pass) │ ▼ build:md → public/<slug>.mdts-morph runs once at build time and is now a
devDependencyonly.<AutoTypeTable>reads the pre-computed JSON synchronously and renders via fumadocs-ui's<TypeTable>shell. Seedocs/README.mdfor the full script catalog. -
a7a210b: docs(DST-1385): document Switch
variant="settings"and the auto-save ruleAdds a Button-style variant table under
## Appearancesummarisingdefaultandsettings, rewritesSettings and preferencewith placement guidance and the reasoning for why switches must live on auto-save surfaces (light-switch metaphor +role="switch"ARIA contract + save-semantics conflict), and adds a warning Callout reservingvariant="settings"for auto-save surfaces. -
b5e6e0d: docs(DST-1361): fix column alignment in Table documentation demos. Several demos contradicted the alignment guidelines described in the Table docs (numeric right, text left, center only for icons/status). The action-menu demo centered its row actions with
<Inline alignX="center">while the column header was left-aligned, and thetable-editable,table-links, andtable-stickydemos had numeric Rating / Capacity columns rendered left-aligned. The demos now match the documented alignment rules. -
Updated dependencies [5cd5290]
-
Updated dependencies [adb8a18]
-
Updated dependencies [326f707]
-
Updated dependencies [84d3213]
-
Updated dependencies [b7c132d]
-
Updated dependencies [6587493]
-
Updated dependencies [f16b887]
-
Updated dependencies [f629319]
-
Updated dependencies [93f9ef1]
-
Updated dependencies [8326bf7]
-
Updated dependencies [bfea9df]
-
Updated dependencies [8326bf7]
-
Updated dependencies [d35022b]
-
Updated dependencies [1cac70d]
-
Updated dependencies [968bc0b]
-
Updated dependencies [cddcfd3]
-
Updated dependencies [e33a1e7]
-
Updated dependencies [20a42b0]
-
Updated dependencies [00d93c8]
-
Updated dependencies [c2a1c72]
-
Updated dependencies [326f707]
-
Updated dependencies [724f0ce]
-
Updated dependencies [62cca29]
-
Updated dependencies [8902b10]
-
Updated dependencies [de34b15]
-
Updated dependencies [04111ca]
- @marigold/theme-rui@6.0.0-beta.0
- @marigold/system@18.0.0-beta.0
- @marigold/components@18.0.0-beta.0
- @marigold/icons@1.3.39-beta.0
17.9.1 (Released on Jul 10, 2026)
Patch Changes
- Updated dependencies [cd9dd4d]
- Updated dependencies [76fca24]
- @marigold/theme-rui@5.5.1
- @marigold/components@17.9.1
- @marigold/system@17.9.1
- @marigold/icons@1.3.45
17.9.0 (Released on Jul 8, 2026)
Minor Changes
-
7fc3b53: feat(DST-1446):
marigold searchto find components by docs contentAdds
marigold search <query>, which ranks components by matching the query against their docs content (title, description, section headings, and section prose), not just the component name. This collapses the "list → guess → docs → retry" discovery loop (3 to 5 calls) that AI agents run today into a single ranked, snippet-bearing, deep-linked result.- CLI: new
loadSearchIndex()/searchComponentDocs()library functions and asearchcommand wrapping them, with--limit,--format markdown|json|plain,--freshand--offline(reusing the existing cache andsanitizeRemote— no new dependencies). Scoring weights title ×3, description ×2, each matching heading ×2, and each matching section snippet ×1. Tab completion and telemetry cover the new command. No-match exits 0 ([]for--format json). - Docs:
build-manifest.mjsnow also emitspublic/component-search.json— a content index over the component MDX (per-componentheadingsplus prose-bearing{ heading, snippet }sections, with JSX/imports/code-fences stripped). It is written aftermanifest.jsonso a content-index bug can never block the manifest thatlist/docsdepend on.
- CLI: new
Patch Changes
-
a912c89: Improve spacing between sidebar navigation sections for better visual separation.
-
c5bfbb1: docs(DST-1405): document the Marigold CLI on the docs site
Adds a new CLI page under Getting Started (
/getting-started/cli). The single page covers installation (npm / pnpm / npx), usage with AI agents, every command (docs,list,examples,init,completion,telemetry) with flags and examples, and configuration (environment variables and per-OS cache / config locations). Content mirrorspackages/cli/README.md.Cross-links were added from the Installation page (
marigold initas a faster setup path) and the Usage with AI page (the AI-agents section of the new CLI page). -
Updated dependencies [ed2d9ae]
-
Updated dependencies [e686474]
-
Updated dependencies [2fc7b96]
-
Updated dependencies [ed2d9ae]
-
Updated dependencies [508ec2c]
-
Updated dependencies [24354a9]
-
Updated dependencies [4d44517]
- @marigold/components@17.9.0
- @marigold/theme-rui@5.5.0
- @marigold/system@17.9.0
- @marigold/icons@1.3.44
17.8.0 (Released on Jun 18, 2026)
Patch Changes
-
4a4ab6b: docs(DST-1417): add Responsive Design foundations page
Documents Marigold's mobile-first breakpoint scale, the
useResponsiveValue/useSmallScreenhooks, and the 320px minimum supported width (a support floor, not a breakpoint). Also adds an "Extra Small Screen (320px)" viewport to Storybook for testing layouts at the floor. -
7877bc6: feat(DST-1421):
marigold examplescommands to expose application patternsAdds
marigold examples listandmarigold examples get <slug>so AI agents (and humans) can discover and retrieve Marigold's application-level reference patterns from the terminal, mirroring the library-first architecture of thedocs/listcommands.- CLI: new
listExamples()/getExample(slug)library functions and aexamplescommand wrapping them, with--format markdown|json|plain,--freshand--offline(reusing the existing cache layer). Tab completion and telemetry are extended to cover the new command and example slugs. - Docs: a new
build-examples.mjsregistry step emitspublic/mcp/examples.jsonandpublic/mcp/examples/<slug>.jsonfrom colocated*.marigold-pattern.yamlsidecars. Examples are discovered by sidecar presence (App-Shell placeholder pages are excluded automatically), and a malformed sidecar fails the build. Sidecars ship for thefilter,formandinventoryexamples. - A global framework-transformation note (
marigold docs getting-started/examples-for-agents) documents porting examples from the Next.js App Router to other frameworks (Vite, etc.) once, rather than per example.
- CLI: new
-
Updated dependencies [bdda185]
-
Updated dependencies [a609642]
-
Updated dependencies [60b6e03]
- @marigold/components@17.8.0
- @marigold/theme-rui@5.4.1
- @marigold/system@17.8.0
- @marigold/icons@1.3.43
17.7.0
Patch Changes
-
a42a30b: docs(DST-1377): expand "Usage with AI" page with prompting tips, helpers, and limitations
The "Usage with AI" page now covers three ways to feed Marigold docs to an AI agent (the marigold-docs MCP server, the public
manifest.json/ per-page.mdendpoints, and the@marigold/cli), alongside a new Prompting tips section (the renamed-prop gotcha, naming Marigold, nudging the MCP, referencing component names), a Reservix AI helpers section surfacing rx-ai-suite (frontend-dev,design-system,create-marigold-app), and a Limitations section setting honest expectations plus a Slack feedback footer. -
Updated dependencies [a6a1cb3]
-
Updated dependencies [f4608c6]
-
Updated dependencies [4242aa1]
-
Updated dependencies [da46e58]
-
Updated dependencies [e0d5c7b]
- @marigold/components@17.7.0
- @marigold/theme-rui@5.4.0
- @marigold/system@17.7.0
- @marigold/icons@1.3.42
17.6.0
Minor Changes
-
6b40542: feat(DST-1264): add
@marigold/cli— terminal access to Marigold docs, component discovery, and project setup.- New package
@marigold/cliwith commands:marigold docs <Component>— fetch component documentation (supports--section,--format,--fresh,--offline)marigold list— list available components (supports--category,--search)marigold init— interactive wizard that installs Marigold packages, edits CSS, wraps the app inProviders, and patches the Vite config for Next.js and Vite projectsmarigold telemetry <status|enable|disable>— manage anonymous telemetrymarigold completion <bash|zsh|fish>— print a shell completion script for tab-completing commands, options, and component names
- Security: sanitize remote content at the fetch boundary to strip the full ECMA-48 escape set (OSC, DCS, APC/PM/SOS, cursor) so a compromised docs origin can't write to the clipboard via OSC 52 or hijack the terminal; the OSC/DCS matchers are linear-time to avoid ReDoS on adversarial input.
- Docs site: extended
/api/manifest.jsonwith categorized components and package version; added/api/telemetryingest route (Upstash Redis). - CLAUDE.md: documented CLI usage for AI agents.
The CLI is designed so AI coding agents can fetch accurate Marigold API data from the terminal instead of guessing from training data. Library exports (
getComponentDocs,loadManifest, …) are available for the MCP server to reuse in a later change. - New package
Patch Changes
-
7ae875a: docs(DST-1430): reframe ToggleButton as an action button, not a form field or filter
Rewrites the ToggleButton docs to position it as an action button that retains an active state, used in toolbars, editors, and canvases. The page now states explicitly that
<ToggleButton>is not a form field or a filter, and that<ToggleButton.Group>is a toolbar of independent on/off actions rather than a selection control. The filter demo and the "Selection modes" section are removed; their guidance moves into a strengthened Do/Don't list and an updated Alternative components list that points readers to Checkbox.Group, Switch, Tabs, and Button. A new view-options demo broadens the group example beyond the formatting toolbar. -
8637d9f: docs(DST-982): add a recommended third-party libraries page
Adds a new "Recommended Libraries" page under Getting Started that collects the third-party libraries we recommend pairing with Marigold in one place. Until now these recommendations were scattered across individual component and pattern docs, so people only found them by chance. The page groups them by purpose (styling & build, data fetching, forms & validation, routing & URL state, dates, testing, and fonts), gives a brief note on when to use each, and links both the library's official docs and our own references. Registered in the Getting Started navigation after Installation.
-
a289d42: chore(deps): update react-aria
Bumps the react-aria packages and
tailwindcss-react-aria-components(theme-rui).Note: following the react-aria update,
Switchnow toggles with the Space key to match native checkbox behavior. It no longer toggles on Enter. -
Updated dependencies [6f24f07]
-
Updated dependencies [9436cbc]
-
Updated dependencies [737c0a9]
-
Updated dependencies [c619ffd]
-
Updated dependencies [1c5c5fd]
-
Updated dependencies [a289d42]
- @marigold/components@17.6.0
- @marigold/theme-rui@5.3.2
- @marigold/system@17.6.0
- @marigold/icons@1.3.41
17.5.1
Patch Changes
- Updated dependencies [6517e25]
- Updated dependencies [3b29d91]
- Updated dependencies [c65d2a7]
- @marigold/theme-rui@5.3.1
- @marigold/components@17.5.1
- @marigold/system@17.5.1
- @marigold/icons@1.3.40
17.5.0
Minor Changes
-
6587493: refa([DST-1298]): Refactor Divider component: API, styling, and docs
We fixed the vertical orientation of the divider, which previously didn't work. Added new Divider stories and updated the Divider docs.
-
91f4312: feat: add MCP server for semantic search over Marigold docs
Adds an MCP (Model Context Protocol) server at
/mcpthat lets AI coding assistants (Claude Code, VS Code Copilot, etc.) semantically search the Marigold documentation. An ETL pipeline (pnpm build:embeddings) chunks the MDX docs and generates vector embeddings via AWS Bedrock Titan v2, served via Streamable HTTP transport with Keycloak-authenticated access.
Patch Changes
-
727163c: feat([DST-1134]): add
<RangeCalendar>component (alpha)Adds a new
<RangeCalendar>for selecting a contiguous or non-contiguous date range, built on react-aria's<RangeCalendar>with Marigold conventions (disabled,readOnly,error,dateUnavailable,allowsNonContiguousRanges). Supports up to three side-by-side months viavisibleDuration, stacking vertically below thesmbreakpoint; the same responsive stacking now applies to multi-month<Calendar>for parity.descriptionanderrorMessageroute through<FieldBase>so the help/error UI matches the rest of the form-component family (TriangleAlert icon + HelpText container). Ships as an alpha component with a stub docs page under the form section. -
a69e719: refactor: adopt
Sidebar.Navcurrentprop in demos and storiesReplaces the hand-rolled
active={currentPath === '/...'}pattern across Sidebar and AppLayout demos (documentation) and theAppLayoutStorybook story with the newcurrentprop onSidebar.Nav(shipped in DST-1322 / #5306). The order-detail demo additionally leverages the new prefix-match semantics, so/orders/:idroutes automatically highlight the/ordersnav item without a regex fallback.No consumer-facing package behavior changes — only demos and an internal story.
-
7aa5128: Add unified demo app at
/examplesthat consolidates all pattern demos (filter, form, inventory) alongside a full app-shell example. A shared shell layout renders the sidebar, breadcrumbs, and section switcher from a single navigation tree; each example page links back to its corresponding pattern guidelines. Removes all standalone pattern pages in favor of colocated demo routes. -
1dbb3e2: fix(docs): make MCP and embedding env vars optional so
pnpm build:docsworks locally withoutAWS_BEDROCK_*,OIDC_*, orBLOB_READ_WRITE_TOKENset. Also corrects theclaude mcp add marigold-docssnippet to use the positional URL argument instead of--url. -
0bf3239: fix: redesign Do/Don't guideline cards to match fumadocs
Replaces the legacy Do/Don't design with a tinted card layout that uses fumadocs design tokens (
--color-fd-success/--color-fd-error) andlucide-reacticons. Adds proper dark mode support, which was previously broken due to hardcoded light-mode colors. -
8c8e2da: docs(DST-1382): expand Drawer documentation with use cases and decision framework
Rewrites the Drawer docs to lead with a defining principle (supplementary, in-context, light task; non-modal on desktop), adds a decision framework (Drawer vs Dialog, routing to a page instead), and documents six canonical use cases: detail-row inspection, quick edit/create from a list, filter panel, comments and activity, contextual utility, and multi-field bulk edit. New demos illustrate the table-row inspection, comments/activity, and Table+ActionBar bulk-edit patterns. Filter pattern moved to a
## Relatedsection. -
c821902: docs([DST-1032]): Revise installation guideline
Revised the whole installation Guideline, to make it up to date and fix stuff that wasn't working. It now contains a more detailed description and has better examples. Users and AI should now be able to create a new project with Marigold, without a problem.
-
4b02dfe: feat([DST-1388]): split prop tables into main, aria and handler groups
The interactive Props table (
<AutoTypeTable>) on each component page now shows the meaningful API props by default and tucksaria-*/roleattributes and React DOM event handlers into separate collapsible sections (e.g. Button drops from 112 visible props to 39 main + 10 aria + 63 handlers). The static markdown pipeline that feeds the LLM/MCPsearch_docsindex is intentionally untouched, so machine-readable docs continue to expose the full prop list. -
774a11a: fix(docs): serve per-page markdown and the page manifest as static assets, eliminate ts-morph from the runtime.
Backport of the static-files architecture from
beta-release(PR #5372). Onmain,app/api/md/[...slug]/route.tsstill usesforce-staticwithgenerateStaticParamsreturningNextResponse.json(...), which is the same pattern that crashes on Vercel under Node ≥22 + Next.js 16:TypeError: Cannot read private member #state from an object whose class did not declare it at Reflect.get (<anonymous>)Three things compose into the bug: Node 22+ undici's
Responseuses private class fields (#state); Next.js 16's prerender wraps the returnedResponsein aProxy; the Proxy usesReflect.getto forward access, which can't reach private fields declared on a class the receiver isn't an instance of (per the JavaScript spec). See undici#4290, node#58814.Production has been masked by 10-day-old CDN caches; the next non-trivial redeploy of
mainwould have hit the same crash that surfaced onbeta-release.Fix. Both endpoints serve fully static data — write it to
public/at build time and let Next.js serve it directly. No route handler runs, no Proxy ever wraps aResponse, so the bug surface is removed. While re-architecting, ts-morph was eliminated from the runtime: type extraction now happens once atpnpm build:types, writing.registry/props.jsonfor both the<AutoTypeTable>server component and the markdown-build remark plugin to read.User-visible changes
/manifest.jsonand/<page-url>.md(e.g./components/actions/button.md) are now plain static assets inpublic/. No rewrite, no route handler. Same URLs as before.<AutoTypeTable package="system">(used bysvg/index.mdxandicon/index.mdx) now produces a populated props table in markdown output. The previous custom ts-morph plugin only handledpackages/components/src/, so system-package types silently rendered as empty.<AppearanceTable>markdown output now matches the HTML output exactly — both read the same@marigold/theme-rui/appearancesmap. Four components shift in their.mdoutput:Menugainsdestructive,LinkButtongainsdestructive-ghost,Panel.sizegainsdefault,Link.sizegainsdefault | small. AppearanceTable description cells render as plain text instead ofinlineCode.- HTML and markdown prop tables show identical type strings — both go through
autoTypeTableTransform, so design-system aliases (Scale | SpacingTokensetc.) appear consistently. - Dead
resolve-design-tokensmarkdown plugin removed: it referenced deletedui/ColorTable.tsx/ui/ColorTokens.tsxand crashed every markdown build with ENOENT.
Architecture
pnpm build (or dev) → pnpm build:assets && next ... build:assets (parallel): ├─ build:registry → .registry/demos.{tsx,json} ├─ build:changelog → content/.../release.mdx ├─ build:manifest → public/manifest.json └─ build:types NEW → .registry/props.json (one ts-morph pass) │ ▼ build:md → public/<slug>.mdts-morph runs once at build time and is now a
devDependencyonly.<AutoTypeTable>reads the pre-computed JSON synchronously and renders via fumadocs-ui's<TypeTable>shell. Seedocs/README.mdfor the full script catalog. -
b5e6e0d: docs(DST-1361): fix column alignment in Table documentation demos. Several demos contradicted the alignment guidelines described in the Table docs (numeric right, text left, center only for icons/status). The action-menu demo centered its row actions with
<Inline alignX="center">while the column header was left-aligned, and thetable-editable,table-links, andtable-stickydemos had numeric Rating / Capacity columns rendered left-aligned. The demos now match the documented alignment rules. -
Updated dependencies [5cd5290]
-
Updated dependencies [727163c]
-
Updated dependencies [3c6a943]
-
Updated dependencies [f8fbef9]
-
Updated dependencies [4742e8e]
-
Updated dependencies [b7c132d]
-
Updated dependencies [6587493]
-
Updated dependencies [f16b887]
-
Updated dependencies [1cac70d]
-
Updated dependencies [5744bbf]
-
Updated dependencies [e33a1e7]
-
Updated dependencies [c2a1c72]
-
Updated dependencies [2ff7bda]
-
Updated dependencies [8902b10]
-
Updated dependencies [de34b15]
-
Updated dependencies [04111ca]
- @marigold/theme-rui@5.3.0
- @marigold/components@17.5.0
- @marigold/system@17.5.0
- @marigold/icons@1.3.39
17.4.0
Patch Changes
-
bb8d67a: Add new "Component Principles" foundations page explaining the four pillars of Marigold's component design: accessibility, theming, composition, and layout.
-
5969186: Replace "Governance Process" and "Governance Principles" pages with a new "How to Contribute" page. Simplify the "Get in touch" page to focus on getting help.
-
f02cd1b: docs(DST-975): document component variants under Appearance section
- Add structured variant description tables (
Variant | Description | When to use) to 14 component documentation pages: Button, SectionMessage, Badge, Card, Text, Accordion, Toast, Tooltip, Link, LinkButton, Divider, Loader, Menu, and Table - Retrofit Table's existing bullet list to the consistent table format
- Improve Card appearance demo with realistic venue data instead of placeholder content
- Add structured variant description tables (
-
39502d3: bugfix[DST-1300]: Readd missing file field anatomy pic
-
d01eb55: Add
/api/manifest.jsonroute that returns a JSON index of all documentation pages for AI agent discovery. -
fc7578c: Write complete ToggleButton documentation with anatomy diagrams, usage demos (standalone toggle, formatting toolbar, filter toggles, disabled state), Do/Don't guidelines, and alternative components section. Merge ToggleButtonGroup docs into the ToggleButton page.
-
Updated dependencies [5dfb6da]
-
Updated dependencies [f4f7a05]
-
Updated dependencies [bbf0832]
-
Updated dependencies [3f77810]
-
Updated dependencies [85b2eb0]
-
Updated dependencies [d341a9d]
-
Updated dependencies [d6507d5]
-
Updated dependencies [f560d95]
-
Updated dependencies [a4b467f]
-
Updated dependencies [50566a2]
-
Updated dependencies [203baca]
-
Updated dependencies [27d13b7]
-
Updated dependencies [49fc2e2]
-
Updated dependencies [969c8cc]
- @marigold/theme-rui@5.2.4
- @marigold/components@17.4.0
- @marigold/system@17.4.0
- @marigold/icons@1.3.38
17.3.1
Patch Changes
- 6b00a16: Move markdown parser and plugins from
app/mcp/tolib/markdown/. Serve markdown at/{page-path}.mdinstead of/mcp/{page-path}.md. Removebuild:md-docsscript. - c8653f3: Unify docs UI component locations: move all components from
docs/components/intodocs/ui/and replace local Button/Popover with fumadocs imports. - Updated dependencies [d3374cd]
- @marigold/components@17.3.1
- @marigold/theme-rui@5.2.3
- @marigold/system@17.3.1
- @marigold/icons@1.3.37
17.3.0
Patch Changes
- 000ec3d: docs[DST-1193]: Refactor
<Calendar>documentation. - Updated dependencies [a48059c]
- Updated dependencies [6a29a6c]
- Updated dependencies [f3068d7]
- Updated dependencies [548dcb4]
- @marigold/components@17.3.0
- @marigold/theme-rui@5.2.2
- @marigold/system@17.3.0
- @marigold/icons@1.3.36
17.2.1
Patch Changes
- Updated dependencies [fd6f323]
- @marigold/theme-rui@5.2.1
- @marigold/system@17.2.1
- @marigold/components@17.2.1
- @marigold/icons@1.3.35
17.2.0
Minor Changes
-
d44ee55: feat([DST-1163]): Add raw markdown MCP endpoint for documentation pages
Implements
/mcp/[...slug]route andpnpm build:md-docsthat converts all MDX documentation pages to clean Markdown format, enabling programmatic access for AI/LLM integration and external tools. The custom remark pipeline processes embedded JSX components (component demos, props tables, design tokens) into semantic Markdown with code blocks and tables.
Patch Changes
- 9db39f0: fix(DST-1243): Replace DateFormat JSX in changelog build script with plain text dates to fix docs crash
- 096fe67: Improve search result ranking by prioritizing pages whose title matches the query over pages that only mention the query in body text.
- d963df2: chore: Update React Aria to newest version
- Updated dependencies [91eb222]
- Updated dependencies [ed928a0]
- Updated dependencies [cf56729]
- Updated dependencies [5d4c915]
- Updated dependencies [b3c7085]
- Updated dependencies [28eba72]
- Updated dependencies [3019d28]
- Updated dependencies [b61ba43]
- Updated dependencies [e6091b6]
- Updated dependencies [efbd292]
- Updated dependencies [7ca2eb1]
- Updated dependencies [f7870ce]
- Updated dependencies [95c22b6]
- Updated dependencies [a3e3e8e]
- Updated dependencies [4a24ad6]
- Updated dependencies [beebd7c]
- Updated dependencies [9de007c]
- Updated dependencies [ed2baef]
- Updated dependencies [b115fda]
- Updated dependencies [61bfc60]
- Updated dependencies [a715f08]
- Updated dependencies [470d81c]
- Updated dependencies [600d09f]
- Updated dependencies [1ec6788]
- Updated dependencies [c3bf8e4]
- Updated dependencies [f63e57f]
- Updated dependencies [d963df2]
- @marigold/components@17.2.0
- @marigold/theme-rui@5.2.0
- @marigold/system@17.2.0
- @marigold/icons@1.3.34
0.0.3
Patch Changes
- Updated dependencies [fd1b092]
- Updated dependencies [a3042ed]
- @marigold/components@17.1.0
- @marigold/system@17.1.0
- @marigold/theme-rui@5.1.0
- @marigold/theme-docs@4.1.2
- @marigold/icons@1.3.33
0.0.2
Patch Changes
- Updated dependencies [fb32888]
- @marigold/theme-rui@5.0.1
- @marigold/system@17.0.1
- @marigold/components@17.0.1
- @marigold/icons@1.3.32
- @marigold/theme-docs@4.1.1
0.0.1
Patch Changes
- b8bab20: docs([DST-1201]): Fix AppearanceDemo Select
- Updated dependencies [d8ce791]
- Updated dependencies [34c785a]
- Updated dependencies [96e145a]
- Updated dependencies [196172e]
- Updated dependencies [f756051]
- Updated dependencies [2e3f7d2]
- Updated dependencies [cfa9b99]
- Updated dependencies [00a3c81]
- Updated dependencies [cc61968]
- Updated dependencies [01e6bdb]
- Updated dependencies [2244030]
- Updated dependencies [6c071f0]
- Updated dependencies [44d01a6]
- Updated dependencies [63f1603]
- Updated dependencies [a0564dc]
- Updated dependencies [282b330]
- Updated dependencies [7928a23]
- Updated dependencies [5a90757]
- Updated dependencies [0c00d1d]
- Updated dependencies [0c00d1d]
- Updated dependencies [4645c5d]
- Updated dependencies [59ed05f]
- Updated dependencies [8dd0455]
- Updated dependencies [1469268]
- Updated dependencies [196172e]
- Updated dependencies [31a4e38]
- Updated dependencies [f916a20]
- Updated dependencies [726239d]
- Updated dependencies [1bd9f27]
- Updated dependencies [b8bab20]
- Updated dependencies [b7c64cc]
- Updated dependencies [8a70185]
- @marigold/components@17.0.0
- @marigold/theme-rui@5.0.0
- @marigold/system@17.0.0
- @marigold/theme-docs@4.1.0
- @marigold/icons@1.3.31