From 600186aed2498b836e84cb4f4550f3d0aecdfbb2 Mon Sep 17 00:00:00 2001 From: Corrin Lakeland Date: Fri, 19 Jun 2026 14:28:57 +1200 Subject: [PATCH 1/2] docs: add design sync extraction --- .design-sync/EXTRACTION_SPEC.md | 73 +++++++ .design-sync/NOTES.md | 28 +++ .design-sync/config.json | 9 + .design-sync/conventions.md | 72 +++++++ .design-sync/ds-bundle/README.md | 120 ++++++++++++ .../components/alert/Alert/Alert.d.ts | 23 +++ .../components/alert/Alert/Alert.html | 36 ++++ .../components/alert/Alert/Alert.prompt.md | 39 ++++ .../components/avatar/Avatar/Avatar.d.ts | 36 ++++ .../components/avatar/Avatar/Avatar.html | 35 ++++ .../components/avatar/Avatar/Avatar.prompt.md | 38 ++++ .../components/badge/Badge/Badge.d.ts | 27 +++ .../components/badge/Badge/Badge.html | 35 ++++ .../components/badge/Badge/Badge.prompt.md | 37 ++++ .../components/button/Button/Button.d.ts | 35 ++++ .../components/button/Button/Button.html | 52 +++++ .../components/button/Button/Button.prompt.md | 51 +++++ .../calendar/Calendar/Calendar.d.ts | 95 +++++++++ .../calendar/Calendar/Calendar.html | 48 +++++ .../calendar/Calendar/Calendar.prompt.md | 53 +++++ .../ds-bundle/components/card/Card/Card.d.ts | 32 +++ .../ds-bundle/components/card/Card/Card.html | 42 ++++ .../components/card/Card/Card.prompt.md | 52 +++++ .../checkbox/Checkbox/Checkbox.d.ts | 26 +++ .../checkbox/Checkbox/Checkbox.html | 46 +++++ .../checkbox/Checkbox/Checkbox.prompt.md | 41 ++++ .../collapsible/Collapsible/Collapsible.d.ts | 40 ++++ .../collapsible/Collapsible/Collapsible.html | 34 ++++ .../Collapsible/Collapsible.prompt.md | 41 ++++ .../CustomDatePicker/CustomDatePicker.d.ts | 25 +++ .../CustomDatePicker/CustomDatePicker.html | 31 +++ .../CustomDatePicker.prompt.md | 39 ++++ .../date-picker/DatePicker/DatePicker.d.ts | 29 +++ .../date-picker/DatePicker/DatePicker.html | 41 ++++ .../DatePicker/DatePicker.prompt.md | 44 +++++ .../components/dialog/Dialog/Dialog.d.ts | 98 ++++++++++ .../components/dialog/Dialog/Dialog.html | 44 +++++ .../components/dialog/Dialog/Dialog.prompt.md | 67 +++++++ .../components/drawer/Drawer/Drawer.d.ts | 92 +++++++++ .../components/drawer/Drawer/Drawer.html | 44 +++++ .../components/drawer/Drawer/Drawer.prompt.md | 65 +++++++ .../DropdownMenu/DropdownMenu.d.ts | 154 +++++++++++++++ .../DropdownMenu/DropdownMenu.html | 43 ++++ .../DropdownMenu/DropdownMenu.prompt.md | 73 +++++++ .../components/input/Input/Input.d.ts | 24 +++ .../components/input/Input/Input.html | 39 ++++ .../components/input/Input/Input.prompt.md | 37 ++++ .../components/label/Label/Label.d.ts | 20 ++ .../components/label/Label/Label.html | 30 +++ .../components/label/Label/Label.prompt.md | 37 ++++ .../LoadingState/LoadingState.d.ts | 30 +++ .../LoadingState/LoadingState.html | 34 ++++ .../LoadingState/LoadingState.prompt.md | 58 ++++++ .../pagination/Pagination/Pagination.d.ts | 31 +++ .../pagination/Pagination/Pagination.html | 43 ++++ .../Pagination/Pagination.prompt.md | 38 ++++ .../components/popover/Popover/Popover.d.ts | 57 ++++++ .../components/popover/Popover/Popover.html | 39 ++++ .../popover/Popover/Popover.prompt.md | 49 +++++ .../progress/Progress/Progress.d.ts | 21 ++ .../progress/Progress/Progress.html | 29 +++ .../progress/Progress/Progress.prompt.md | 35 ++++ .../RangeCalendar/RangeCalendar.d.ts | 90 +++++++++ .../RangeCalendar/RangeCalendar.html | 49 +++++ .../RangeCalendar/RangeCalendar.prompt.md | 52 +++++ .../components/select/Select/Select.d.ts | 96 +++++++++ .../components/select/Select/Select.html | 40 ++++ .../components/select/Select/Select.prompt.md | 63 ++++++ .../skeleton/Skeleton/Skeleton.d.ts | 11 ++ .../skeleton/Skeleton/Skeleton.html | 36 ++++ .../skeleton/Skeleton/Skeleton.prompt.md | 34 ++++ .../components/sonner/Sonner/Sonner.d.ts | 37 ++++ .../components/sonner/Sonner/Sonner.html | 33 ++++ .../components/sonner/Sonner/Sonner.prompt.md | 52 +++++ .../components/switch/Switch/Switch.d.ts | 26 +++ .../components/switch/Switch/Switch.html | 43 ++++ .../components/switch/Switch/Switch.prompt.md | 40 ++++ .../components/table/Table/Table.d.ts | 67 +++++++ .../components/table/Table/Table.html | 42 ++++ .../components/table/Table/Table.prompt.md | 54 +++++ .../ds-bundle/components/tabs/Tabs/Tabs.d.ts | 39 ++++ .../ds-bundle/components/tabs/Tabs/Tabs.html | 38 ++++ .../components/tabs/Tabs/Tabs.prompt.md | 43 ++++ .../textarea/Textarea/Textarea.d.ts | 24 +++ .../textarea/Textarea/Textarea.html | 33 ++++ .../textarea/Textarea/Textarea.prompt.md | 37 ++++ .../components/tooltip/Tooltip/Tooltip.d.ts | 67 +++++++ .../components/tooltip/Tooltip/Tooltip.html | 33 ++++ .../tooltip/Tooltip/Tooltip.prompt.md | 51 +++++ .design-sync/ds-bundle/styles.css | 184 ++++++++++++++++++ .design-sync/ds-bundle/tokens/colors.json | 52 +++++ .design-sync/ds-bundle/tokens/radius.json | 16 ++ .design-sync/ds-bundle/tokens/typography.json | 20 ++ 93 files changed, 4338 insertions(+) create mode 100644 .design-sync/EXTRACTION_SPEC.md create mode 100644 .design-sync/NOTES.md create mode 100644 .design-sync/config.json create mode 100644 .design-sync/conventions.md create mode 100644 .design-sync/ds-bundle/README.md create mode 100644 .design-sync/ds-bundle/components/alert/Alert/Alert.d.ts create mode 100644 .design-sync/ds-bundle/components/alert/Alert/Alert.html create mode 100644 .design-sync/ds-bundle/components/alert/Alert/Alert.prompt.md create mode 100644 .design-sync/ds-bundle/components/avatar/Avatar/Avatar.d.ts create mode 100644 .design-sync/ds-bundle/components/avatar/Avatar/Avatar.html create mode 100644 .design-sync/ds-bundle/components/avatar/Avatar/Avatar.prompt.md create mode 100644 .design-sync/ds-bundle/components/badge/Badge/Badge.d.ts create mode 100644 .design-sync/ds-bundle/components/badge/Badge/Badge.html create mode 100644 .design-sync/ds-bundle/components/badge/Badge/Badge.prompt.md create mode 100644 .design-sync/ds-bundle/components/button/Button/Button.d.ts create mode 100644 .design-sync/ds-bundle/components/button/Button/Button.html create mode 100644 .design-sync/ds-bundle/components/button/Button/Button.prompt.md create mode 100644 .design-sync/ds-bundle/components/calendar/Calendar/Calendar.d.ts create mode 100644 .design-sync/ds-bundle/components/calendar/Calendar/Calendar.html create mode 100644 .design-sync/ds-bundle/components/calendar/Calendar/Calendar.prompt.md create mode 100644 .design-sync/ds-bundle/components/card/Card/Card.d.ts create mode 100644 .design-sync/ds-bundle/components/card/Card/Card.html create mode 100644 .design-sync/ds-bundle/components/card/Card/Card.prompt.md create mode 100644 .design-sync/ds-bundle/components/checkbox/Checkbox/Checkbox.d.ts create mode 100644 .design-sync/ds-bundle/components/checkbox/Checkbox/Checkbox.html create mode 100644 .design-sync/ds-bundle/components/checkbox/Checkbox/Checkbox.prompt.md create mode 100644 .design-sync/ds-bundle/components/collapsible/Collapsible/Collapsible.d.ts create mode 100644 .design-sync/ds-bundle/components/collapsible/Collapsible/Collapsible.html create mode 100644 .design-sync/ds-bundle/components/collapsible/Collapsible/Collapsible.prompt.md create mode 100644 .design-sync/ds-bundle/components/custom-date-picker/CustomDatePicker/CustomDatePicker.d.ts create mode 100644 .design-sync/ds-bundle/components/custom-date-picker/CustomDatePicker/CustomDatePicker.html create mode 100644 .design-sync/ds-bundle/components/custom-date-picker/CustomDatePicker/CustomDatePicker.prompt.md create mode 100644 .design-sync/ds-bundle/components/date-picker/DatePicker/DatePicker.d.ts create mode 100644 .design-sync/ds-bundle/components/date-picker/DatePicker/DatePicker.html create mode 100644 .design-sync/ds-bundle/components/date-picker/DatePicker/DatePicker.prompt.md create mode 100644 .design-sync/ds-bundle/components/dialog/Dialog/Dialog.d.ts create mode 100644 .design-sync/ds-bundle/components/dialog/Dialog/Dialog.html create mode 100644 .design-sync/ds-bundle/components/dialog/Dialog/Dialog.prompt.md create mode 100644 .design-sync/ds-bundle/components/drawer/Drawer/Drawer.d.ts create mode 100644 .design-sync/ds-bundle/components/drawer/Drawer/Drawer.html create mode 100644 .design-sync/ds-bundle/components/drawer/Drawer/Drawer.prompt.md create mode 100644 .design-sync/ds-bundle/components/dropdown-menu/DropdownMenu/DropdownMenu.d.ts create mode 100644 .design-sync/ds-bundle/components/dropdown-menu/DropdownMenu/DropdownMenu.html create mode 100644 .design-sync/ds-bundle/components/dropdown-menu/DropdownMenu/DropdownMenu.prompt.md create mode 100644 .design-sync/ds-bundle/components/input/Input/Input.d.ts create mode 100644 .design-sync/ds-bundle/components/input/Input/Input.html create mode 100644 .design-sync/ds-bundle/components/input/Input/Input.prompt.md create mode 100644 .design-sync/ds-bundle/components/label/Label/Label.d.ts create mode 100644 .design-sync/ds-bundle/components/label/Label/Label.html create mode 100644 .design-sync/ds-bundle/components/label/Label/Label.prompt.md create mode 100644 .design-sync/ds-bundle/components/loading-state/LoadingState/LoadingState.d.ts create mode 100644 .design-sync/ds-bundle/components/loading-state/LoadingState/LoadingState.html create mode 100644 .design-sync/ds-bundle/components/loading-state/LoadingState/LoadingState.prompt.md create mode 100644 .design-sync/ds-bundle/components/pagination/Pagination/Pagination.d.ts create mode 100644 .design-sync/ds-bundle/components/pagination/Pagination/Pagination.html create mode 100644 .design-sync/ds-bundle/components/pagination/Pagination/Pagination.prompt.md create mode 100644 .design-sync/ds-bundle/components/popover/Popover/Popover.d.ts create mode 100644 .design-sync/ds-bundle/components/popover/Popover/Popover.html create mode 100644 .design-sync/ds-bundle/components/popover/Popover/Popover.prompt.md create mode 100644 .design-sync/ds-bundle/components/progress/Progress/Progress.d.ts create mode 100644 .design-sync/ds-bundle/components/progress/Progress/Progress.html create mode 100644 .design-sync/ds-bundle/components/progress/Progress/Progress.prompt.md create mode 100644 .design-sync/ds-bundle/components/range-calendar/RangeCalendar/RangeCalendar.d.ts create mode 100644 .design-sync/ds-bundle/components/range-calendar/RangeCalendar/RangeCalendar.html create mode 100644 .design-sync/ds-bundle/components/range-calendar/RangeCalendar/RangeCalendar.prompt.md create mode 100644 .design-sync/ds-bundle/components/select/Select/Select.d.ts create mode 100644 .design-sync/ds-bundle/components/select/Select/Select.html create mode 100644 .design-sync/ds-bundle/components/select/Select/Select.prompt.md create mode 100644 .design-sync/ds-bundle/components/skeleton/Skeleton/Skeleton.d.ts create mode 100644 .design-sync/ds-bundle/components/skeleton/Skeleton/Skeleton.html create mode 100644 .design-sync/ds-bundle/components/skeleton/Skeleton/Skeleton.prompt.md create mode 100644 .design-sync/ds-bundle/components/sonner/Sonner/Sonner.d.ts create mode 100644 .design-sync/ds-bundle/components/sonner/Sonner/Sonner.html create mode 100644 .design-sync/ds-bundle/components/sonner/Sonner/Sonner.prompt.md create mode 100644 .design-sync/ds-bundle/components/switch/Switch/Switch.d.ts create mode 100644 .design-sync/ds-bundle/components/switch/Switch/Switch.html create mode 100644 .design-sync/ds-bundle/components/switch/Switch/Switch.prompt.md create mode 100644 .design-sync/ds-bundle/components/table/Table/Table.d.ts create mode 100644 .design-sync/ds-bundle/components/table/Table/Table.html create mode 100644 .design-sync/ds-bundle/components/table/Table/Table.prompt.md create mode 100644 .design-sync/ds-bundle/components/tabs/Tabs/Tabs.d.ts create mode 100644 .design-sync/ds-bundle/components/tabs/Tabs/Tabs.html create mode 100644 .design-sync/ds-bundle/components/tabs/Tabs/Tabs.prompt.md create mode 100644 .design-sync/ds-bundle/components/textarea/Textarea/Textarea.d.ts create mode 100644 .design-sync/ds-bundle/components/textarea/Textarea/Textarea.html create mode 100644 .design-sync/ds-bundle/components/textarea/Textarea/Textarea.prompt.md create mode 100644 .design-sync/ds-bundle/components/tooltip/Tooltip/Tooltip.d.ts create mode 100644 .design-sync/ds-bundle/components/tooltip/Tooltip/Tooltip.html create mode 100644 .design-sync/ds-bundle/components/tooltip/Tooltip/Tooltip.prompt.md create mode 100644 .design-sync/ds-bundle/styles.css create mode 100644 .design-sync/ds-bundle/tokens/colors.json create mode 100644 .design-sync/ds-bundle/tokens/radius.json create mode 100644 .design-sync/ds-bundle/tokens/typography.json diff --git a/.design-sync/EXTRACTION_SPEC.md b/.design-sync/EXTRACTION_SPEC.md new file mode 100644 index 000000000..acdac1859 --- /dev/null +++ b/.design-sync/EXTRACTION_SPEC.md @@ -0,0 +1,73 @@ +# Extraction spec for design-sync subagents + +You extract a **framework-agnostic** spec of shadcn-vue components for upload to claude.ai/design. +The design tool renders React, so we DO NOT ship runnable component code — only contracts, docs, and a +discoverable preview card. Everything you write must be derived by **reading** the real source under +`/home/corrin/src/docketworks/frontend/src/components/ui//` (the `.vue` files + `index.ts`). +Do not invent props, variants, or parts — read them from `defineProps`, the cva config in `index.ts`, +and the reka-ui primitive each part wraps. + +## For each assigned group, write THREE files + +Output dir: `/home/corrin/src/docketworks/.design-sync/ds-bundle/components///` +where `` is the PascalCase group name (e.g. `dropdown-menu` -> `DropdownMenu`, `button` -> `Button`). + +### 1. `.d.ts` — the API contract +- A TypeScript declaration for the component (and every exported sub-component/part). +- Export a `Props` interface (and per-part `XProps` interfaces) with the REAL prop names and types + read from each `.vue`'s `defineProps`/`withDefaults`. Resolve cva `VariantProps` into literal unions + (e.g. `variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'`). +- Include `class?: string` where the component forwards a class via `cn()`. +- Note slots in a JSDoc comment per component (`@slot default`, named slots if any). +- Re-export the cva helper type if one exists (e.g. `export type ButtonVariants = ...`). +- Keep it pure declarations — no implementation. + +### 2. `.prompt.md` — usage reference for the design agent +Sections, terse and concrete: +- **`# `** one-line description + when to use it. +- **Parts** — bullet list of the exported components from `index.ts` and what each is for. +- **Props** — the key props/variants/sizes with their literal values and defaults (from `defaultVariants`). +- **Usage** — ONE minimal composition example using the REAL import (`import { ... } from '@/components/ui/'`) + and the REAL component/part names and slot structure. Vue SFC ` +``` + +## Notes + +- Plain `
`, no reka-ui primitive. No title/description sub-components in this kit — author them as child elements. +- A direct child `` is treated as the alert icon (absolute-positioned); keep it as the first child. +- Forwards unknown attributes onto the root div via `v-bind`. diff --git a/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.d.ts b/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.d.ts new file mode 100644 index 000000000..ab110366f --- /dev/null +++ b/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.d.ts @@ -0,0 +1,36 @@ +import type { AvatarFallbackProps, AvatarImageProps } from 'reka-ui' + +export interface AvatarProps { + /** Extra classes merged via cn(). */ + class?: string +} + +/** + * Avatar — root container (reka-ui AvatarRoot). + * Default geometry: size-8 (2rem) circle, overflow-hidden. + * @slot default — expects and/or . + */ +export declare const Avatar: import('vue').DefineComponent + +/** + * AvatarImage — the photo (reka-ui AvatarImage). + * Hidden until the src loads; shows AvatarFallback meanwhile/on error. + */ +export interface AvatarImageProps_ extends AvatarImageProps { + /** Image source URL (reka-ui). */ + src?: string +} +export declare const AvatarImage: import('vue').DefineComponent + +/** + * AvatarFallback — shown while the image is loading or has failed + * (reka-ui AvatarFallback). Typically initials. + * @slot default — fallback content (initials / icon). + */ +export interface AvatarFallbackProps_ extends AvatarFallbackProps { + /** Delay (ms) before fallback renders, to avoid flash (reka-ui). */ + delayMs?: number + /** Extra classes merged via cn(). */ + class?: string +} +export declare const AvatarFallback: import('vue').DefineComponent diff --git a/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.html b/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.html new file mode 100644 index 000000000..701c5bdd2 --- /dev/null +++ b/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.html @@ -0,0 +1,35 @@ + + +
+

Avatar

+
Circular image + initials fallback · default size 32px
+
+
AB
+
JD
+
CL
+
+
+
diff --git a/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.prompt.md b/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.prompt.md new file mode 100644 index 000000000..446efe190 --- /dev/null +++ b/.design-sync/ds-bundle/components/avatar/Avatar/Avatar.prompt.md @@ -0,0 +1,38 @@ +# Avatar + +A circular user/entity image with an initials fallback. Use for profile photos, staff lists, comment authors. + +## Parts + +- **Avatar** — root container (`AvatarRoot`). Fixed circle, `size-8` (32px), `overflow-hidden rounded-full`. Resize via `class` (e.g. `class="size-10"`). +- **AvatarImage** — the `` (`AvatarImage`). `aspect-square size-full`. Hidden until `src` loads. +- **AvatarFallback** — initials/icon shown while loading or on error (`AvatarFallback`). `bg-muted`, centered, full-size circle. + +## Props + +- **Avatar**: `class?: string`. +- **AvatarImage**: `src?: string` (+ reka-ui AvatarImageProps); no `class` prop forwarded. +- **AvatarFallback**: `delayMs?: number` (delay before showing, avoids flash), `class?: string`. + +No variant/size axes — geometry is set via Tailwind `class`. + +## Usage + +```vue + + + +``` + +## Notes + +- Backed by reka-ui `AvatarRoot` / `AvatarImage` / `AvatarFallback`. Fallback visibility is managed by the primitive based on image load state. +- `AvatarImage` and `AvatarFallback` must be inside `Avatar`. +- Default size is 32px; override on the root with `class`. diff --git a/.design-sync/ds-bundle/components/badge/Badge/Badge.d.ts b/.design-sync/ds-bundle/components/badge/Badge/Badge.d.ts new file mode 100644 index 000000000..57a0df672 --- /dev/null +++ b/.design-sync/ds-bundle/components/badge/Badge/Badge.d.ts @@ -0,0 +1,27 @@ +import type { VariantProps } from 'class-variance-authority' +import type { PrimitiveProps } from 'reka-ui' + +declare const badgeVariants: (props?: { + variant?: 'default' | 'secondary' | 'destructive' | 'outline' +}) => string + +export type BadgeVariants = VariantProps + +export interface BadgeProps extends PrimitiveProps { + /** Visual style. @default 'default' */ + variant?: 'default' | 'secondary' | 'destructive' | 'outline' + /** Extra classes merged via cn(). */ + class?: string + /** PrimitiveProps: render as child element instead of . @default false */ + asChild?: boolean + /** PrimitiveProps: element/component to render as. */ + as?: PrimitiveProps['as'] +} + +/** + * Badge — a small inline status/label pill. + * Renders a reka-ui (default tag is the kit's wrapper). + * + * @slot default — badge label; a leading is sized to 12px (size-3). + */ +export declare const Badge: import('vue').DefineComponent diff --git a/.design-sync/ds-bundle/components/badge/Badge/Badge.html b/.design-sync/ds-bundle/components/badge/Badge/Badge.html new file mode 100644 index 000000000..010174ae8 --- /dev/null +++ b/.design-sync/ds-bundle/components/badge/Badge/Badge.html @@ -0,0 +1,35 @@ + + +
+

Badge

+
Status pill · variants: default, secondary, destructive, outline
+
+ Default + Secondary + Destructive + Outline +
+
diff --git a/.design-sync/ds-bundle/components/badge/Badge/Badge.prompt.md b/.design-sync/ds-bundle/components/badge/Badge/Badge.prompt.md new file mode 100644 index 000000000..b782df86d --- /dev/null +++ b/.design-sync/ds-bundle/components/badge/Badge/Badge.prompt.md @@ -0,0 +1,37 @@ +# Badge + +A small inline pill for status, counts, or labels (e.g. "Active", "3", "Draft"). Use beside text/headings, in table cells, or on cards — not for interactive buttons. + +## Parts + +- **Badge** — the only exported part. Renders a reka-ui `` wrapped in a ``. Pass `as` / `asChild` to render as a link (``) — hover styles for anchors are built in (`[a&]:hover:...`). + +## Props + +- `variant?: 'default' | 'secondary' | 'destructive' | 'outline'` — default `'default'`. + - `default`: `bg-primary text-primary-foreground`. + - `secondary`: `bg-secondary text-secondary-foreground`. + - `destructive`: `bg-destructive text-white`. + - `outline`: transparent, `text-foreground`, bordered; hover tints accent (anchors only). +- `as?` / `asChild?` — reka-ui PrimitiveProps for polymorphic rendering. +- `class?: string` — extra classes (merged with `cn()`). + +Geometry: `inline-flex rounded-md border px-2 py-0.5 text-xs font-medium w-fit`; leading icons are `size-3` with `gap-1`. + +## Usage + +```vue + + + +``` + +## Notes + +- Backed by reka-ui `Primitive`; default element is a ``. +- For a clickable badge, use `as="a"` (or `asChild` with a router-link) so the anchor hover variants apply. +- Icon-only or icon+text supported; SVGs are auto-sized to 12px and non-interactive. diff --git a/.design-sync/ds-bundle/components/button/Button/Button.d.ts b/.design-sync/ds-bundle/components/button/Button/Button.d.ts new file mode 100644 index 000000000..ae2c4d400 --- /dev/null +++ b/.design-sync/ds-bundle/components/button/Button/Button.d.ts @@ -0,0 +1,35 @@ +import type { PrimitiveProps } from 'reka-ui' + +/** + * Button — the primary action control. + * Backed by reka-ui `Primitive`, so it is polymorphic: renders a `