Marigold
v18.1.0
Marigold
v18.1.0
Release Notes

packages

@marigold/components@marigold/icons@marigold/system@marigold/types

themes

@marigold/theme-rui

docs

@marigold/docs

config

@marigold/eslint-config@marigold/prettier-config@marigold/tsconfig
Releases

@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's GridList/GridListItem for 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, behind memo(), 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 ButtonContext and inherit the row's ghost cascade, 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/listview docs 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/users at 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 before collapseAt asked for it.

    The filter table gets fraction-only widths and no floors. It cannot have a Scrollable of its own yet, because its actionBar overlay renders inside Table as sticky 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 until Table can 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/spaceY props to p/px/py

    The padding props on Inset are renamed to align with Panel's existing API, so that across the design system space always means gap between children and p/px/py always mean inner padding. Previously, space carried two different meanings depending on the component, which was a source of confusion.

    Migration:

    BeforeAfter
    <Inset space="…" /><Inset p="…" />
    <Inset spaceX="…" spaceY="…" /><Inset px="…" py="…" />

    The discriminated union shape is unchanged: p is mutually exclusive with px/py. Token vocabularies are unchanged (InsetSpacingTokens for p, PaddingSpacingTokens for px/py).

  • b7122c0: refa([DST-1549]): Breaking change: Rename compound member Tabs.TabPanel → Tabs.Panel

    Tabs now exposes .List, .Item, and .Panel, so every compound member follows one predictable naming rule. <Tabs.TabPanel> is removed (hard rename, no deprecated alias).

    Migration:

    BeforeAfter
    <Tabs.TabPanel id="…"><Tabs.Panel id="…">
  • b7122c0: refactor([DST-1283]): Breaking Change — Remove <Multiselect> (and the react-select dependency) from @marigold/components.

    Use <TagField> instead.

  • b7122c0: refa([DST-1162]): Breaking changes: The Card component 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, and Card.Preview.
    • A CardContext is 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>

Minor Changes

  • b7122c0: feat(DST-1446): marigold search to find components by docs content

    Adds 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 a search command wrapping them, with --limit, --format markdown|json|plain, --fresh and --offline (reusing the existing cache and sanitizeRemote — 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.mjs now also emits public/component-search.json — a content index over the component MDX (per-component headings plus prose-bearing { heading, snippet } sections, with JSX/imports/code-fences stripped). It is written after manifest.json so a content-index bug can never block the manifest that list/docs depend on.
  • 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 + Marigold

    Adds a new Data pattern group with a Fetching and Mutations page covering hook encapsulation, centralized query keys, the isLoading vs useIsFetching loading taxonomy, error handling and retries via throwOnError with an error boundary, toast feedback, optimistic updates, and destructive confirmation with useConfirmation. It also points to React Server Components and Server Actions as the alternative paradigm.

    The /examples/filter reference app now fetches from a real stateless /api/venues route 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 /mcp that 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.

    DST-1166

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 via visibleDuration, stacking vertically below the sm breakpoint; the same responsive stacking now applies to multi-month <Calendar> for parity. description and errorMessage route 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.

    DST-1134

  • b7122c0: refactor: adopt Sidebar.Nav current prop in demos and stories

    Replaces the hand-rolled active={currentPath === '/...'} pattern across Sidebar and AppLayout demos (documentation) and the AppLayout Storybook story with the new current prop on Sidebar.Nav (shipped in DST-1322 / #5306). The order-detail demo additionally leverages the new prefix-match semantics, so /orders/:id routes automatically highlight the /orders nav 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.Preview slot to Card.Media across components, theme, and docs. This is a breaking change: consumers using <Card.Preview>, the data-card-preview selector, or the preview theme slot key must migrate to Card.Media, data-card-media, and the media slot 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 authored oklch() 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 top offset 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 gained scope and 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 oklchToRgb helper is gone with the literal it served. The WCAG and APCA helpers are unchanged. The prose no longer asserts the palette hue, and the soft token'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 /examples that 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 /impressum and /datenschutz routes. Both carry a German (authoritative) and an English version, each wrapped in a lang-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 outside content/ on purpose: the docs collection globs all of content, 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.
    • SiteFooter is 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=1 is 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.
  • b7122c0: fix(docs): make MCP and embedding env vars optional so pnpm build:docs works locally without AWS_BEDROCK_*, OIDC_*, or BLOB_READ_WRITE_TOKEN set. Also corrects the claude mcp add marigold-docs snippet 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.ts caches 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.ts files 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: keyboardNavigationBehavior has been missing from the <Table> prop table since react-aria-components moved 1.19 → 1.20 (#5699). Table.tsx last changed the day before that bump, so its cache entry stayed valid while the prop it should surface arrived via react-stately 3.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) and lucide-react icons. Adds proper dark mode support, which was previously broken due to hardcoded light-mode colors.

    DST-1348

  • 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> via useConfirmation, <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).

    DST-1383

  • b7122c0: docs(DST-1384): add the Bulk Actions working example

    New full-page example at /examples/bulk-actions that wires the whole bulk-actions pattern together as one real product surface: a paginated, searchable events table with page-bounded selection, a floating ActionBar (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-edit Drawer (mixed values, explicit price opt-in, re-keyed per selection), a destructive confirm Dialog with count and reservation impact, button-loading and running-count progress, and toasts for every outcome. Backed by a stateless /api/events route plus a /api/events/bulk authorizer; 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's DemoLinks now resolves and its "in progress" callout is gone.

    DST-1384

  • 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 mirrors packages/cli/README.md.

    Cross-links were added from the Installation page (marigold init as 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 EmptyState page and fix seven dead links

    The 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.Header above 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 a variant yourself" advice does not hold inside them.

    The Anatomy section moves to the current convention. A themed inline EmptyStateAnatomy SVG replaces the static emptystate-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 EmptyState at /components/feedback/empty-state, and the Button docs named a ButtonLink component at /components/actions/button-link, linked SelectList.Option to /components/form/select-list, and sent the useActionState callout 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, LinkButton at /components/actions/link-button, /components/form/selectlist, /patterns/user-input/forms#async-forms-with-useactionstate, and /patterns/user-input/forms plus /patterns/user-input/forms#validation for the two library references. The seventh, the spacing page's link to /components/overlay/tray, has no page to point at because Tray is not documented, so it drops the link and keeps Tray as 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 Table in-category comparison with a new CardVsTableMockup illustration, a When the content isn't a collection section pointing to Panel, Stack, and Tiles, and a top-level Alternative components section 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 the actionBar render 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.

    DST-1474

  • 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 from components/actions/actionbar to components/collection/actionbar, sitting alongside Table, Card, and Tag.

    • The page description and intro are reframed around the collection/bulk-selection context, and a Related section now links back to Table and Button.
    • Internal links in ActionButton, ActionGroup, Button, and Drawer are repointed to the new path. Historical release-note links are left untouched.
  • 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/pick example: a size="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.

    DST-1532

  • b7122c0: docs(DST-1543): document marigold migrate on the CLI page

    Adds a marigold migrate section 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-run and --only flags, 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 the marigold migrate v18 codemod. Linked from the v18.0.0 release notes.

  • e0f9c05: fix(DST-1647): honor the router's useHref in sidebar links

    Sidebar.Item and Sidebar.RailItem rendered the raw href prop straight onto their anchor, which shadowed the value produced by RouterProvider's optional useHref. Applications served from a prefix, such as a Next.js basePath, 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 to navigate, matching how React Aria's own useLink behaves. Consumers that do not pass useHref see no change, because the default leaves the href untouched.

    The RouterProvider docs now cover useHref next to navigate, 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/pick venue 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.

    DST-1651

  • 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 with keyboardNavigationBehavior="tab" — and restructures the Table component page's editing guidance into Editing, 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.mjs collected only the top level of an example folder, so any example keeping code in a subdirectory shipped importers without their imports. The filter payload carried 7 files while all six of its key files import from ./hooks/…, and bulk-actions was 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, and key_files may point into a subdirectory.

    Also completes the filter sidecar so its copyable snippet typechecks: the @/lib/data/venues stub was missing venueCities, MAX_CAPACITY, MAX_PRICE, the Venue type and the nextAvailable field, and @/lib/data/venues-query had no stub at all despite being imported by a key file. peer_deps gains @internationalized/date, @tanstack/react-query and react-error-boundary, and drops zod, which nothing imports.

    The scripts/ tests that guard this were never running: docs/vitest.config.mjs and docs/vitest.config.ts both existed, vitest resolved the latter, and its include covered only app/ and lib/, so pnpm --filter @marigold/docs test passed 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 ## Related section.

  • b7122c0: docs(DST-1308): consolidate icon documentation onto the Iconography page

    Merge the former /foundations/icons and /components/content/icon pages into /foundations/iconography so principles, catalog, and engineering API live in one place. The new Using icons in code section covers installation, importing, sizing, color (currentColor + className recommended; color prop is literal CSS), filled brand icons, and accessibility (auto aria-hidden).

    Migration table

    Old names from the legacy @marigold/icons set and their Lucide replacement. Names marked custom are retained brand icons that still ship from @marigold/icons directly.

    UI

    OldNew
    AddPlus
    ArrowDownArrowDown
    ArrowLeftArrowLeft
    ArrowRightArrowRight
    ArrowUpArrowUp
    BurgerMenuMenu
    CheckCheck
    ChevronDownChevronDown
    ChevronLeftChevronLeft
    ChevronRightChevronRight
    ChevronUpChevronUp
    CircleCheckedCircleDot
    CircleUncheckedCircle
    DeleteTrash2
    ExternalLinkExternalLink
    EyeEye
    FilterListFilter
    IconMoreEllipsis
    RemoveMinus
    SearchSearch
    SettingDotsEllipsisVertical
    SquareCheckedSquareCheck
    SquareUncheckedSquare

    Info

    OldNew
    AccessibleAccessibility
    AutoRenewRefreshCcw
    BannedBan
    BatteryChargingBatteryCharging
    BatteryEmptyBatteryLow
    BatteryFullBatteryFull
    BatteryHalfBatteryMedium
    BusBusFront
    CalendarCalendar
    CameraCamera
    ClockClock
    DirectionSquareArrowUpRight
    EmailMail
    EventDateCalendar1
    ExclamationTriangleAlert
    FeedbackMessageSquareMore
    FoodUtensils
    GlobeGlobe
    HomeHouse
    InfoInfo
    MarkerMapPin
    MobilePhoneSmartphone
    MobileSignalSignalHigh
    NotificationMessageSquareWarning
    ParkingCircleParking
    PDFPDF (custom)
    PrintPrinter
    ReportsFileText
    RequiredAsterisk
    ResaleLogbookBookOpenText
    SpinnerLoader
    ThumbThumbsUp
    TruckTruck
    WifiWifi

    Action

    OldNew
    CancelCircleX
    CropCrop
    DownloadDownload
    EditPencil
    ExportFileSquareArrowOutUpRight
    FormatBoldBold
    FormatItalicItalic
    FormatSizeALargeSmall
    HighlightOffPower
    LocationLocateFixed
    LockLock
    LockOpenLockOpen
    LogoutLogOut
    PausePause
    PictureImage
    PlayPlay
    ResaleEditCog
    RestartRotateCcw
    RotateLeftRotateCcw
    RotateRightRotateCw
    SaveSave
    SortChevronsUpDown
    SortDownChevronDown
    SortUpChevronUp
    StarStar
    StopCircleStop
    UnderlinedUnderline
    ZoomZoomIn

    Ticketing

    OldNew
    DealBadgePercent
    DesignTicketDesignTicket (custom)
    GiftCardGiftCard (custom)
    MembershipIdCardLanyard
    PickupStore
    PriceEuro
    ResaleResale (custom)
    ScannerScanner (custom)
    SeatArmchair
    SellingTag
    StadiumStadium (custom)
    TicketTicket
    TicketInsuranceTicketInsurance (custom)
    TurnstileTurnstile (custom)

    User

    OldNew
    CartShoppingCart
    CreditCardCreditCard
    GroupUsersRound
    IdIdCard
    SmilieDissatisfiedFrown
    SmilieNeutralMeh
    SmilieSatisfiedSmile
    SmilieVeryDissatisfiedAngry
    SmilieVerySatisfiedLaugh
    UserUserRound

    Social

    OldNew
    GoogleGoogle (custom)
    InstagramInstagram (custom)
    ShareShare2
    TwitterTwitter (custom)

    TwitterX is 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 + primitives

    Reworks the Layouts foundation page to frame the two responsibilities explicitly: Panel for 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 treated Panel and AppLayout as peers, and replaces the wireframe demo with an annotated SVG anatomy diagram that mirrors the Panel and Sidebar anatomies. Also trims the component-principles Layout section to defer to this page, switches the concepts-spacing demo to Wireframe.Box for nicer visuals, and fixes Wireframe.Box colours after the secondary-* 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 Panel component documentation

    MDX 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 Panel vs Card comparison.

  • 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-principles and the rest of foundations/*, 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.tsx files 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 matches Select.Option and the HTML <option> mental model. Update any <SelectList.Item> usage to <SelectList.Option>.
    • SelectList.Action has been removed. Drop your <ActionMenu> or <IconButton> directly inside <SelectList.Option> — the component positions, sizes, and styles the nested control automatically via ButtonContext. Limit: one action per option (multi-button groups will arrive with a future ActionGroup).
    • 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. SelectList is a form field; the default is now "single".
    • onChange is strictly typed per selectionMode: (key: Key | null) => void for single, (keys: Key[]) => void for multiple. The shape matches Select<T, M>. Passing setState directly 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 is selection · label + description · action (optional).
    • Dev-mode warning when textValue is missing on an option whose children aren't a plain string.
    • Own theme entry — SelectList ships a dedicated theme component. The theme exposes first-class label, description, and action entries; slot styling no longer uses descendant selectors. Consumers with custom themes must add or update a SelectList entry.

    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, textValue for 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-form and /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.

    DST-1313

  • 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 build with:

    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]/route once the manifest was patched.

    Root cause (three things composing into one bug):

    1. Node 22+ undici's Response uses private class fields (#state) — see undici#4290, node#58814.
    2. Next.js 16's force-static route-handler prerender wraps the returned Response in a JavaScript Proxy.
    3. The Proxy's handlers use Reflect.get to forward property access. JavaScript's private-field semantics intentionally prevent Reflect.get from 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 Response during prerender, undici's getters call Reflect.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 in public/ 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 to public/<slug>.md at 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 to public/manifest.json, served as a static asset (Content-Type: application/json; charset=UTF-8). Each entry's url field points at the slug-mirror <page-url>.md path.
    • <AutoTypeTable package="system" /> (used by svg/index.mdx and icon/index.mdx) now produces a populated props table in the markdown output. The previous custom ts-morph plugin only handled packages/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/appearances map. Four components shift in <page-url>.md output as a result: Menu gains destructive (it lives on the MenuItem slot in cva, was missed by the old ts-morph regex), LinkButton gains destructive-ghost (its Props interface omits it but the theme defines it), Panel.size gains default, Link.size gains default | small. AppearanceTable description cells render as plain text instead of inlineCode — descriptions aren't code.
    • HTML and Markdown prop tables show identical type strings — both go through autoTypeTableTransform, so design-system aliases (Scale | SpacingTokens etc.) appear consistently. Function types collapse to function in markdown the same way they already do in HTML.
    • Dead resolve-design-tokens markdown plugin removed: its <ColorTokenTable> JSX target was retired with the design-tokens content rewrite, but the plugin still referenced deleted ui/ColorTable.tsx / ui/ColorTokens.tsx and 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 build

    At request time:

    • <AutoTypeTable> (RSC) reads .registry/props.json synchronously 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/appearances directly (already the existing pattern).
    • /manifest.json and /<slug>.md are served as static assets from public/ by Next.js.

    Internals

    • docs/lib/props-data.ts (NEW) — typed getPropTable({ 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 with autoTypeTableTransform once per unique tuple, writes .registry/props.json. fumadocs FS cache lives at .registry/.cache/fumadocs-typescript so subsequent runs are fast when component sources are unchanged: cold ~17s, warm ~0.3s.
    • docs/scripts/build-md.ts — writes per-page markdown to public/<slug>.md; cleans only .md files in slug-root subtrees so existing image / asset directories under public/ are untouched.
    • docs/scripts/build-manifest.mjs — writes the page manifest to public/manifest.json.
    • docs/ui/AutoTypeTable.tsx — thin wrapper around fumadocs-typescript/ui's <AutoTypeTable> with a mock Generator that just looks up .registry/props.json. The fumadocs /ui entry 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.json via getPropTable. No more async, no more generator call, no more pLimit(4) ts-morph contention in build-md.ts.
    • docs/lib/markdown/plugins/resolve-appearance-table.ts — drops ts-morph entirely; imports appearances from @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 into scripts/build-types.ts).
    • next.config.mjs — serverExternalPackages: ['ts-morph', 'typescript'], the /<slug>.md → /api/md/<slug>.md rewrite, and the route-handler outputFileTracingIncludes entries are all removed.
    • ts-morph moved from runtime dependencies to devDependencies.

    Performance (pnpm build:md 128 files):

    before this PRafter
    build:types cold—~17s
    build:types warm—~0.3s
    build:md~10s~8s

    build:types only reruns ts-morph for source files whose content changed. The registry cache is local-only at .registry/.cache/fumadocs-typescript/.

  • 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 tucks aria-* / role attributes 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/MCP search_docs index is intentionally untouched, so machine-readable docs continue to expose the full prop list.

    DST-1388

  • 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). On main, app/api/md/[...slug]/route.ts still uses force-static with generateStaticParams returning NextResponse.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 Response uses private class fields (#state); Next.js 16's prerender wraps the returned Response in a Proxy; the Proxy uses Reflect.get to 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 main would have hit the same crash that surfaced on beta-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 a Response, so the bug surface is removed. While re-architecting, ts-morph was eliminated from the runtime: type extraction now happens once at pnpm build:types, writing .registry/props.json for both the <AutoTypeTable> server component and the markdown-build remark plugin to read.

    User-visible changes

    • /manifest.json and /<page-url>.md (e.g. /components/actions/button.md) are now plain static assets in public/. No rewrite, no route handler. Same URLs as before.
    • <AutoTypeTable package="system"> (used by svg/index.mdx and icon/index.mdx) now produces a populated props table in markdown output. The previous custom ts-morph plugin only handled packages/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/appearances map. Four components shift in their .md output: Menu gains destructive, LinkButton gains destructive-ghost, Panel.size gains default, Link.size gains default | small. AppearanceTable description cells render as plain text instead of inlineCode.
    • HTML and markdown prop tables show identical type strings — both go through autoTypeTableTransform, so design-system aliases (Scale | SpacingTokens etc.) appear consistently.
    • Dead resolve-design-tokens markdown plugin removed: it referenced deleted ui/ColorTable.tsx / ui/ColorTokens.tsx and 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>.md

    ts-morph runs once at build time and is now a devDependency only. <AutoTypeTable> reads the pre-computed JSON synchronously and renders via fumadocs-ui's <TypeTable> shell. See docs/README.md for the full script catalog.

  • b7122c0: docs(DST-1385): document Switch variant="settings" and the auto-save rule

    Adds a Button-style variant table under ## Appearance summarising default and settings, rewrites Settings and preference with 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 reserving variant="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 the table-editable, table-links, and table-sticky demos 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 as rowHeader, so react-aria threw A table must have at least one Column with the isRowHeader prop set to true whenever the table's collection was rebuilt. The first commit runs with isSSR and 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 missing aria-label.

    DST-1696

  • b7122c0: docs([DST-1314]): add full data management pattern with filtering

    Add a full-page data management pattern example at /examples/filter demonstrating 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 via nuqs.

  • b7122c0: docs(DST-1623): note that <ToastProvider> should be mounted once

    Every toast shares one global queue (React Aria's model: a single ToastRegion per queue), so one <ToastProvider> renders them all and addToast works from anywhere. Mounting more than one renders every toast per provider and creates duplicate notification region landmarks. 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.

    DST-1623

  • b7122c0: docs(DST-1344): unify responsive hooks into the Responsive Design foundations page

    Folds the useResponsiveValue and useSmallScreen documentation into the existing Responsive Design foundations 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 from theme.screens with a --breakpoint-* CSS fallback. Removes the standalone useResponsiveValue page 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 migrate on the CLI page

    Adds a marigold migrate section 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-run and --only flags, 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 the marigold migrate v18 codemod. Linked from the v18.0.0 release notes.

  • e0f9c05: fix(DST-1647): honor the router's useHref in sidebar links

    Sidebar.Item and Sidebar.RailItem rendered the raw href prop straight onto their anchor, which shadowed the value produced by RouterProvider's optional useHref. Applications served from a prefix, such as a Next.js basePath, 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 to navigate, matching how React Aria's own useLink behaves. Consumers that do not pass useHref see no change, because the default leaves the href untouched.

    The RouterProvider docs now cover useHref next to navigate, 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/pick venue 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.

    DST-1651

  • b7122c0: fix(DST-1434): ship nested example sources in the examples registry

    build-examples.mjs collected only the top level of an example folder, so any example keeping code in a subdirectory shipped importers without their imports. The filter payload carried 7 files while all six of its key files import from ./hooks/…, and bulk-actions was 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, and key_files may point into a subdirectory.

    Also completes the filter sidecar so its copyable snippet typechecks: the @/lib/data/venues stub was missing venueCities, MAX_CAPACITY, MAX_PRICE, the Venue type and the nextAvailable field, and @/lib/data/venues-query had no stub at all despite being imported by a key file. peer_deps gains @internationalized/date, @tanstack/react-query and react-error-boundary, and drops zod, which nothing imports.

    The scripts/ tests that guard this were never running: docs/vitest.config.mjs and docs/vitest.config.ts both existed, vitest resolved the latter, and its include covered only app/ and lib/, so pnpm --filter @marigold/docs test passed 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 useResponsiveValue and useSmallScreen documentation into the existing Responsive Design foundations 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 from theme.screens with a --breakpoint-* CSS fallback. Removes the standalone useResponsiveValue page 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.Panel

    Tabs now exposes .List, .Item, and .Panel, so every compound member follows one predictable naming rule. <Tabs.TabPanel> is removed (hard rename, no deprecated alias).

    Migration:

    BeforeAfter
    <Tabs.TabPanel id="…"><Tabs.Panel id="…">

Minor Changes

  • 7fc3b53: feat(DST-1446): marigold search to find components by docs content

    Adds 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 a search command wrapping them, with --limit, --format markdown|json|plain, --fresh and --offline (reusing the existing cache and sanitizeRemote — 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.mjs now also emits public/component-search.json — a content index over the component MDX (per-component headings plus prose-bearing { heading, snippet } sections, with JSX/imports/code-fences stripped). It is written after manifest.json so a content-index bug can never block the manifest that list/docs depend on.
  • 762989f: docs(DST-1198): add Fetching and Mutations pattern for @tanstack/react-query + Marigold

    Adds a new Data pattern group with a Fetching and Mutations page covering hook encapsulation, centralized query keys, the isLoading vs useIsFetching loading taxonomy, error handling and retries via throwOnError with an error boundary, toast feedback, optimistic updates, and destructive confirmation with useConfirmation. It also points to React Server Components and Server Actions as the alternative paradigm.

    The /examples/filter reference app now fetches from a real stateless /api/venues route 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> via useConfirmation, <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).

    DST-1383

  • 6d7b6c6: docs(DST-1384): add the Bulk Actions working example

    New full-page example at /examples/bulk-actions that wires the whole bulk-actions pattern together as one real product surface: a paginated, searchable events table with page-bounded selection, a floating ActionBar (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-edit Drawer (mixed values, explicit price opt-in, re-keyed per selection), a destructive confirm Dialog with count and reservation impact, button-loading and running-count progress, and toasts for every outcome. Backed by a stateless /api/events route plus a /api/events/bulk authorizer; 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's DemoLinks now resolves and its "in progress" callout is gone.

    DST-1384

  • 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 mirrors packages/cli/README.md.

    Cross-links were added from the Installation page (marigold init as 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 Table in-category comparison with a new CardVsTableMockup illustration, a When the content isn't a collection section pointing to Panel, Stack, and Tiles, and a top-level Alternative components section 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 the actionBar render 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.

    DST-1474

  • 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/pick example: a size="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.

    DST-1532

  • 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 once

    Every toast shares one global queue (React Aria's model: a single ToastRegion per queue), so one <ToastProvider> renders them all and addToast works from anywhere. Mounting more than one renders every toast per provider and creates duplicate notification region landmarks. 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.

    DST-1623

  • 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.Preview slot to Card.Media across components, theme, and docs. This is a breaking change: consumers using <Card.Preview>, the data-card-preview selector, or the preview theme slot key must migrate to Card.Media, data-card-media, and the media slot 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 from components/actions/actionbar to components/collection/actionbar, sitting alongside Table, Card, and Tag.

    • The page description and intro are reframed around the collection/bulk-selection context, and a Related section now links back to Table and Button.
    • Internal links in ActionButton, ActionGroup, Button, and Drawer are repointed to the new path. Historical release-note links are left untouched.
  • 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/spaceY props to p/px/py

    The padding props on Inset are renamed to align with Panel's existing API, so that across the design system space always means gap between children and p/px/py always mean inner padding. Previously, space carried two different meanings depending on the component, which was a source of confusion.

    Migration:

    BeforeAfter
    <Inset space="…" /><Inset p="…" />
    <Inset spaceX="…" spaceY="…" /><Inset px="…" py="…" />

    The discriminated union shape is unchanged: p is mutually exclusive with px/py. Token vocabularies are unchanged (InsetSpacingTokens for p, PaddingSpacingTokens for px/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 via visibleDuration, stacking vertically below the sm breakpoint; the same responsive stacking now applies to multi-month <Calendar> for parity. description and errorMessage route 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.

    DST-1134

  • 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 ## Related section.

  • a244486: docs(DST-1308): consolidate icon documentation onto the Iconography page

    Merge the former /foundations/icons and /components/content/icon pages into /foundations/iconography so principles, catalog, and engineering API live in one place. The new Using icons in code section covers installation, importing, sizing, color (currentColor + className recommended; color prop is literal CSS), filled brand icons, and accessibility (auto aria-hidden).

    Migration table

    Old names from the legacy @marigold/icons set and their Lucide replacement. Names marked custom are retained brand icons that still ship from @marigold/icons directly.

    UI

    OldNew
    AddPlus
    ArrowDownArrowDown
    ArrowLeftArrowLeft
    ArrowRightArrowRight
    ArrowUpArrowUp
    BurgerMenuMenu
    CheckCheck
    ChevronDownChevronDown
    ChevronLeftChevronLeft
    ChevronRightChevronRight
    ChevronUpChevronUp
    CircleCheckedCircleDot
    CircleUncheckedCircle
    DeleteTrash2
    ExternalLinkExternalLink
    EyeEye
    FilterListFilter
    IconMoreEllipsis
    RemoveMinus
    SearchSearch
    SettingDotsEllipsisVertical
    SquareCheckedSquareCheck
    SquareUncheckedSquare

    Info

    OldNew
    AccessibleAccessibility
    AutoRenewRefreshCcw
    BannedBan
    BatteryChargingBatteryCharging
    BatteryEmptyBatteryLow
    BatteryFullBatteryFull
    BatteryHalfBatteryMedium
    BusBusFront
    CalendarCalendar
    CameraCamera
    ClockClock
    DirectionSquareArrowUpRight
    EmailMail
    EventDateCalendar1
    ExclamationTriangleAlert
    FeedbackMessageSquareMore
    FoodUtensils
    GlobeGlobe
    HomeHouse
    InfoInfo
    MarkerMapPin
    MobilePhoneSmartphone
    MobileSignalSignalHigh
    NotificationMessageSquareWarning
    ParkingCircleParking
    PDFPDF (custom)
    ReportsFileText
    RequiredAsterisk
    ResaleLogbookBookOpenText
    SpinnerLoader
    ThumbThumbsUp
    TruckTruck
    WifiWifi

    Action

    OldNew
    CancelCircleX
    CropCrop
    DownloadDownload
    EditPencil
    ExportFileSquareArrowOutUpRight
    FormatBoldBold
    FormatItalicItalic
    FormatSizeALargeSmall
    HighlightOffPower
    LocationLocateFixed
    LockLock
    LockOpenLockOpen
    LogoutLogOut
    PausePause
    PictureImage
    PlayPlay
    ResaleEditCog
    RestartRotateCcw
    RotateLeftRotateCcw
    RotateRightRotateCw
    SaveSave
    SortChevronsUpDown
    SortDownChevronDown
    SortUpChevronUp
    StarStar
    StopCircleStop
    UnderlinedUnderline
    ZoomZoomIn

    Ticketing

    OldNew
    DealBadgePercent
    DesignTicketDesignTicket (custom)
    GiftCardGiftCard (custom)
    MembershipIdCardLanyard
    PickupStore
    PriceEuro
    ResaleResale (custom)
    ScannerScanner (custom)
    SeatArmchair
    SellingTag
    StadiumStadium (custom)
    TicketTicket
    TicketInsuranceTicketInsurance (custom)
    TurnstileTurnstile (custom)

    User

    OldNew
    CartShoppingCart
    CreditCardCreditCard
    GroupUsersRound
    IdIdCard
    SmilieDissatisfiedFrown
    SmilieNeutralMeh
    SmilieSatisfiedSmile
    SmilieVeryDissatisfiedAngry
    SmilieVerySatisfiedLaugh
    UserUserRound

    Social

    OldNew
    GoogleGoogle (custom)
    InstagramInstagram (custom)
    ShareShare2
    TwitterTwitter (custom)

    TwitterX is 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 matches Select.Option and the HTML <option> mental model. Update any <SelectList.Item> usage to <SelectList.Option>.
    • SelectList.Action has been removed. Drop your <ActionMenu> or <IconButton> directly inside <SelectList.Option> — the component positions, sizes, and styles the nested control automatically via ButtonContext. Limit: one action per option (multi-button groups will arrive with a future ActionGroup).
    • 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. SelectList is a form field; the default is now "single".
    • onChange is strictly typed per selectionMode: (key: Key | null) => void for single, (keys: Key[]) => void for multiple. The shape matches Select<T, M>. Passing setState directly 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 is selection · label + description · action (optional).
    • Dev-mode warning when textValue is missing on an option whose children aren't a plain string.
    • Own theme entry — SelectList ships a dedicated theme component. The theme exposes first-class label, description, and action entries; slot styling no longer uses descendant selectors. Consumers with custom themes must add or update a SelectList entry.

    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, textValue for 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-form and /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.

    DST-1313

  • 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 tucks aria-* / role attributes 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/MCP search_docs index is intentionally untouched, so machine-readable docs continue to expose the full prop list.

    DST-1388

  • 20bf9c1: docs([DST-1314]): add full data management pattern with filtering

    Add a full-page data management pattern example at /examples/filter demonstrating 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 via nuqs.

  • 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 the react-select dependency) from @marigold/components.

    Use <TagField> instead.

  • 724f0ce: refa([DST-1162]): Breaking changes: The Card component 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, and Card.Preview.
    • A CardContext is 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>

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 /mcp that 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.

    DST-1166

Patch Changes

  • a69e719: refactor: adopt Sidebar.Nav current prop in demos and stories

    Replaces the hand-rolled active={currentPath === '/...'} pattern across Sidebar and AppLayout demos (documentation) and the AppLayout Storybook story with the new current prop on Sidebar.Nav (shipped in DST-1322 / #5306). The order-detail demo additionally leverages the new prefix-match semantics, so /orders/:id routes automatically highlight the /orders nav item without a regex fallback.

    No consumer-facing package behavior changes — only demos and an internal story.

  • 7aa5128: Add unified demo app at /examples that 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:docs works locally without AWS_BEDROCK_*, OIDC_*, or BLOB_READ_WRITE_TOKEN set. Also corrects the claude mcp add marigold-docs snippet 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) and lucide-react icons. Adds proper dark mode support, which was previously broken due to hardcoded light-mode colors.

    DST-1348

  • 2d8b8a3: docs(DST-1326): restructure the Layouts foundation around Panel + primitives

    Reworks the Layouts foundation page to frame the two responsibilities explicitly: Panel for 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 treated Panel and AppLayout as peers, and replaces the wireframe demo with an annotated SVG anatomy diagram that mirrors the Panel and Sidebar anatomies. Also trims the component-principles Layout section to defer to this page, switches the concepts-spacing demo to Wireframe.Box for nicer visuals, and fixes Wireframe.Box colours after the secondary-* 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 Panel component documentation

    MDX 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 Panel vs Card comparison.

  • 9830f43: docs(DST-1331): flesh out app-shell example pages with realistic content

    Replaces the PlaceholderPage stand-in on the Analytics, Billing, General, Security, Teams, and Users routes with proper example screens built entirely from Marigold components. Each page uses Panel for page-level sections and reserves Card for repeating collection items (payment methods, active sessions, team cards, stat tiles). Removes the now-unused PlaceholderPage component.

  • 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 build with:

    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]/route once the manifest was patched.

    Root cause (three things composing into one bug):

    1. Node 22+ undici's Response uses private class fields (#state) — see undici#4290, node#58814.
    2. Next.js 16's force-static route-handler prerender wraps the returned Response in a JavaScript Proxy.
    3. The Proxy's handlers use Reflect.get to forward property access. JavaScript's private-field semantics intentionally prevent Reflect.get from 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 Response during prerender, undici's getters call Reflect.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 in public/ 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 to public/<slug>.md at 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 to public/manifest.json, served as a static asset (Content-Type: application/json; charset=UTF-8). Each entry's url field points at the slug-mirror <page-url>.md path.
    • <AutoTypeTable package="system" /> (used by svg/index.mdx and icon/index.mdx) now produces a populated props table in the markdown output. The previous custom ts-morph plugin only handled packages/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/appearances map. Four components shift in <page-url>.md output as a result: Menu gains destructive (it lives on the MenuItem slot in cva, was missed by the old ts-morph regex), LinkButton gains destructive-ghost (its Props interface omits it but the theme defines it), Panel.size gains default, Link.size gains default | small. AppearanceTable description cells render as plain text instead of inlineCode — descriptions aren't code.
    • HTML and Markdown prop tables show identical type strings — both go through autoTypeTableTransform, so design-system aliases (Scale | SpacingTokens etc.) appear consistently. Function types collapse to function in markdown the same way they already do in HTML.
    • Dead resolve-design-tokens markdown plugin removed: its <ColorTokenTable> JSX target was retired with the design-tokens content rewrite, but the plugin still referenced deleted ui/ColorTable.tsx / ui/ColorTokens.tsx and 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 build

    At request time:

    • <AutoTypeTable> (RSC) reads .registry/props.json synchronously 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/appearances directly (already the existing pattern).
    • /manifest.json and /<slug>.md are served as static assets from public/ by Next.js.

    Internals

    • docs/lib/props-data.ts (NEW) — typed getPropTable({ 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 with autoTypeTableTransform once per unique tuple, writes .registry/props.json. fumadocs FS cache lives at .registry/.cache/fumadocs-typescript so subsequent runs are fast when component sources are unchanged: cold ~17s, warm ~0.3s.
    • docs/scripts/build-md.ts — writes per-page markdown to public/<slug>.md; cleans only .md files in slug-root subtrees so existing image / asset directories under public/ are untouched.
    • docs/scripts/build-manifest.mjs — writes the page manifest to public/manifest.json.
    • docs/ui/AutoTypeTable.tsx — thin wrapper around fumadocs-typescript/ui's <AutoTypeTable> with a mock Generator that just looks up .registry/props.json. The fumadocs /ui entry 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.json via getPropTable. No more async, no more generator call, no more pLimit(4) ts-morph contention in build-md.ts.
    • docs/lib/markdown/plugins/resolve-appearance-table.ts — drops ts-morph entirely; imports appearances from @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 into scripts/build-types.ts).
    • next.config.mjs — serverExternalPackages: ['ts-morph', 'typescript'], the /<slug>.md → /api/md/<slug>.md rewrite, and the route-handler outputFileTracingIncludes entries are all removed.
    • ts-morph moved from runtime dependencies to devDependencies.

    Performance (pnpm build:md 128 files):

    before this PRafter
    build:types cold—~17s
    build:types warm—~0.3s
    build:md~10s~8s

    build:types only reruns ts-morph for source files whose content changed. The registry cache is local-only at .registry/.cache/fumadocs-typescript/.

  • 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). On main, app/api/md/[...slug]/route.ts still uses force-static with generateStaticParams returning NextResponse.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 Response uses private class fields (#state); Next.js 16's prerender wraps the returned Response in a Proxy; the Proxy uses Reflect.get to 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 main would have hit the same crash that surfaced on beta-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 a Response, so the bug surface is removed. While re-architecting, ts-morph was eliminated from the runtime: type extraction now happens once at pnpm build:types, writing .registry/props.json for both the <AutoTypeTable> server component and the markdown-build remark plugin to read.

    User-visible changes

    • /manifest.json and /<page-url>.md (e.g. /components/actions/button.md) are now plain static assets in public/. No rewrite, no route handler. Same URLs as before.
    • <AutoTypeTable package="system"> (used by svg/index.mdx and icon/index.mdx) now produces a populated props table in markdown output. The previous custom ts-morph plugin only handled packages/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/appearances map. Four components shift in their .md output: Menu gains destructive, LinkButton gains destructive-ghost, Panel.size gains default, Link.size gains default | small. AppearanceTable description cells render as plain text instead of inlineCode.
    • HTML and markdown prop tables show identical type strings — both go through autoTypeTableTransform, so design-system aliases (Scale | SpacingTokens etc.) appear consistently.
    • Dead resolve-design-tokens markdown plugin removed: it referenced deleted ui/ColorTable.tsx / ui/ColorTokens.tsx and 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>.md

    ts-morph runs once at build time and is now a devDependency only. <AutoTypeTable> reads the pre-computed JSON synchronously and renders via fumadocs-ui's <TypeTable> shell. See docs/README.md for the full script catalog.

  • a7a210b: docs(DST-1385): document Switch variant="settings" and the auto-save rule

    Adds a Button-style variant table under ## Appearance summarising default and settings, rewrites Settings and preference with 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 reserving variant="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 the table-editable, table-links, and table-sticky demos 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 search to find components by docs content

    Adds 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 a search command wrapping them, with --limit, --format markdown|json|plain, --fresh and --offline (reusing the existing cache and sanitizeRemote — 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.mjs now also emits public/component-search.json — a content index over the component MDX (per-component headings plus prose-bearing { heading, snippet } sections, with JSX/imports/code-fences stripped). It is written after manifest.json so a content-index bug can never block the manifest that list/docs depend on.

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 mirrors packages/cli/README.md.

    Cross-links were added from the Installation page (marigold init as 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 / useSmallScreen hooks, 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 examples commands to expose application patterns

    Adds marigold examples list and marigold 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 the docs/list commands.

    • CLI: new listExamples() / getExample(slug) library functions and a examples command wrapping them, with --format markdown|json|plain, --fresh and --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.mjs registry step emits public/mcp/examples.json and public/mcp/examples/<slug>.json from colocated *.marigold-pattern.yaml sidecars. Examples are discovered by sidecar presence (App-Shell placeholder pages are excluded automatically), and a malformed sidecar fails the build. Sidecars ship for the filter, form and inventory examples.
    • 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.
  • 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 .md endpoints, 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/cli with 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 in Providers, and patches the Vite config for Next.js and Vite projects
      • marigold telemetry <status|enable|disable> — manage anonymous telemetry
      • marigold 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.json with categorized components and package version; added /api/telemetry ingest 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.

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, Switch now 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 /mcp that 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.

    DST-1166

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 via visibleDuration, stacking vertically below the sm breakpoint; the same responsive stacking now applies to multi-month <Calendar> for parity. description and errorMessage route 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.

    DST-1134

  • a69e719: refactor: adopt Sidebar.Nav current prop in demos and stories

    Replaces the hand-rolled active={currentPath === '/...'} pattern across Sidebar and AppLayout demos (documentation) and the AppLayout Storybook story with the new current prop on Sidebar.Nav (shipped in DST-1322 / #5306). The order-detail demo additionally leverages the new prefix-match semantics, so /orders/:id routes automatically highlight the /orders nav item without a regex fallback.

    No consumer-facing package behavior changes — only demos and an internal story.

  • 7aa5128: Add unified demo app at /examples that 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:docs works locally without AWS_BEDROCK_*, OIDC_*, or BLOB_READ_WRITE_TOKEN set. Also corrects the claude mcp add marigold-docs snippet 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) and lucide-react icons. Adds proper dark mode support, which was previously broken due to hardcoded light-mode colors.

    DST-1348

  • 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 ## Related section.

  • 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 tucks aria-* / role attributes 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/MCP search_docs index is intentionally untouched, so machine-readable docs continue to expose the full prop list.

    DST-1388

  • 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). On main, app/api/md/[...slug]/route.ts still uses force-static with generateStaticParams returning NextResponse.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 Response uses private class fields (#state); Next.js 16's prerender wraps the returned Response in a Proxy; the Proxy uses Reflect.get to 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 main would have hit the same crash that surfaced on beta-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 a Response, so the bug surface is removed. While re-architecting, ts-morph was eliminated from the runtime: type extraction now happens once at pnpm build:types, writing .registry/props.json for both the <AutoTypeTable> server component and the markdown-build remark plugin to read.

    User-visible changes

    • /manifest.json and /<page-url>.md (e.g. /components/actions/button.md) are now plain static assets in public/. No rewrite, no route handler. Same URLs as before.
    • <AutoTypeTable package="system"> (used by svg/index.mdx and icon/index.mdx) now produces a populated props table in markdown output. The previous custom ts-morph plugin only handled packages/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/appearances map. Four components shift in their .md output: Menu gains destructive, LinkButton gains destructive-ghost, Panel.size gains default, Link.size gains default | small. AppearanceTable description cells render as plain text instead of inlineCode.
    • HTML and markdown prop tables show identical type strings — both go through autoTypeTableTransform, so design-system aliases (Scale | SpacingTokens etc.) appear consistently.
    • Dead resolve-design-tokens markdown plugin removed: it referenced deleted ui/ColorTable.tsx / ui/ColorTokens.tsx and 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>.md

    ts-morph runs once at build time and is now a devDependency only. <AutoTypeTable> reads the pre-computed JSON synchronously and renders via fumadocs-ui's <TypeTable> shell. See docs/README.md for 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 the table-editable, table-links, and table-sticky demos 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
  • 39502d3: bugfix[DST-1300]: Readd missing file field anatomy pic

  • d01eb55: Add /api/manifest.json route 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/ to lib/markdown/. Serve markdown at /{page-path}.md instead of /mcp/{page-path}.md. Remove build:md-docs script.
  • c8653f3: Unify docs UI component locations: move all components from docs/components/ into docs/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 and pnpm build:md-docs that 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
Last update: October 31, 2024

@marigold/theme-rui

Previous Page

@marigold/eslint-config

Next Page

© Reservix GmbH — Marigold Design System
ImpressumDatenschutzGitHubRSS