@gradeui/ui 3.1.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
18
18
  import * as LabelPrimitive from '@radix-ui/react-label';
19
19
  import * as PopoverPrimitive from '@radix-ui/react-popover';
20
20
  import * as ProgressPrimitive from '@radix-ui/react-progress';
21
+ import { SortingState, OnChangeFn, VisibilityState } from '@tanstack/react-table';
21
22
  import * as ResizablePrimitive from 'react-resizable-panels';
22
23
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
23
24
  import * as SelectPrimitive from '@radix-ui/react-select';
@@ -190,14 +191,14 @@ declare const MediaSurfaceContract: _gradeui_contracts.ComponentContract<{
190
191
  description: z.ZodOptional<z.ZodString>;
191
192
  }, "strip", z.ZodTypeAny, {
192
193
  kind: "book";
193
- description?: string | undefined;
194
194
  title?: string | undefined;
195
+ description?: string | undefined;
195
196
  author?: string | undefined;
196
197
  isbn?: string | undefined;
197
198
  }, {
198
199
  kind: "book";
199
- description?: string | undefined;
200
200
  title?: string | undefined;
201
+ description?: string | undefined;
201
202
  author?: string | undefined;
202
203
  isbn?: string | undefined;
203
204
  }>, z.ZodObject<{
@@ -584,7 +585,7 @@ type Surface = "solid" | "translucent" | "glass" | "glass-strong";
584
585
  */
585
586
  declare const bannerVariants: (props?: ({
586
587
  variant?: "default" | "destructive" | "success" | "warning" | "info" | "announcement" | null | undefined;
587
- align?: "between" | "start" | "center" | null | undefined;
588
+ align?: "center" | "between" | "start" | null | undefined;
588
589
  sticky?: boolean | null | undefined;
589
590
  } & class_variance_authority_types.ClassProp) | undefined) => string;
590
591
  interface BannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof bannerVariants> {
@@ -627,21 +628,28 @@ declare const Banner: React.ForwardRefExoticComponent<BannerProps & React.RefAtt
627
628
  * heights so a button placed next to a tab strip lines up without
628
629
  * any per-call className overrides:
629
630
  *
631
+ * 2xs: h-5 (20px) — densest tool-panel size; matches Figma Button size=2xs
632
+ * xs: h-6 (24px) — tool-panel density; matches Figma Button size=xs
630
633
  * sm: h-7 (28px) — matches `<TabsList size="sm">` height
631
634
  * md: h-8 (32px) — matches `<TabsList size="md">` height (default)
632
635
  * lg: h-10 (40px) — matches `<TabsList size="lg">` height
633
- * icon: h-8 w-8 — square variant, md height
634
636
  *
635
637
  * `default` is preserved as an alias for `md` so existing call sites
636
638
  * keep working through the rename.
637
639
  *
640
+ * `iconOnly` squares the button at WHATEVER `size` it has (2xs=20, sm=28,
641
+ * md=32, lg=40) by dropping horizontal padding and matching width to
642
+ * height. It's a boolean modifier on top of the height ramp — there is no
643
+ * separate icon size value — and the icon you pass as the child is centered.
644
+ *
638
645
  * Type and icon sizes also follow the Tabs scale (text-xs + size-3.5
639
646
  * at sm/md, text-sm + size-4 at lg) so the visual rhythm reads
640
647
  * consistent across primitives.
641
648
  */
642
649
  declare const buttonVariants: (props?: ({
643
- variant?: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | "raised" | null | undefined;
644
- size?: "2xs" | "xs" | "sm" | "md" | "lg" | "default" | "icon" | null | undefined;
650
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | "raised" | null | undefined;
651
+ size?: "default" | "2xs" | "xs" | "sm" | "md" | "lg" | null | undefined;
652
+ iconOnly?: boolean | null | undefined;
645
653
  } & class_variance_authority_types.ClassProp) | undefined) => string;
646
654
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
647
655
  asChild?: boolean;
@@ -656,6 +664,54 @@ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, Var
656
664
  }
657
665
  declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
658
666
 
667
+ /**
668
+ * Section + Container — the page scaffold (STUDIO-SECTIONS.md).
669
+ *
670
+ * A page is an ordered stack of Sections. `Section` is the FULL-WIDTH band: it
671
+ * owns a colour `scope` (subtheme) + vertical `pad` rhythm, and nothing else —
672
+ * it never constrains width. `Container` is the measure: a centred max-width +
673
+ * gutters you drop INSIDE a section to contain content; omit it for a full-bleed
674
+ * band. The content is FREE; Section never bakes a title/CTA (that's
675
+ * `SectionBlock`'s opinionated job). The known composable parts (Eyebrow /
676
+ * Title / Subtitle / Description / Actions / Media) give the common shape
677
+ * design intent without constraining it.
678
+ */
679
+ type SectionScope = "default" | "inverse" | "brand" | "accent" | "muted" | "card";
680
+ type ContainerMaxW = "sm" | "md" | "lg" | "xl" | "prose" | "full";
681
+ declare const bandVariants: (props?: ({
682
+ pad?: "none" | "sm" | "md" | "lg" | "xl" | null | undefined;
683
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
684
+ interface SectionProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof bandVariants> {
685
+ /** Colour subtheme — applies the `scope-*` class (STUDIO-COLOR.md). Unset =
686
+ * the page surface (transparent). */
687
+ scope?: SectionScope;
688
+ /** Visual band background — image / video / gradient / shader (e.g.
689
+ * `<BackgroundFill>`). Renders BEHIND the content; Section owns the
690
+ * relative + overflow-hidden + z-layering. Works with `scope`, which
691
+ * re-tones the content tokens so text stays legible over the media. */
692
+ background?: React.ReactNode;
693
+ /** Semantic element. */
694
+ as?: "section" | "header" | "footer" | "div";
695
+ }
696
+ declare const Section: React.ForwardRefExoticComponent<SectionProps & React.RefAttributes<HTMLElement>>;
697
+ declare const containerVariants: (props?: ({
698
+ maxW?: "sm" | "md" | "lg" | "xl" | "full" | "prose" | null | undefined;
699
+ grid?: boolean | null | undefined;
700
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
701
+ interface ContainerProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof containerVariants> {
702
+ as?: "div" | "section";
703
+ }
704
+ declare const Container: React.ForwardRefExoticComponent<ContainerProps & React.RefAttributes<HTMLDivElement>>;
705
+ declare const SectionEyebrow: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
706
+ declare const SectionTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLHeadingElement>>;
707
+ declare const SectionSubtitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
708
+ declare const SectionDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
709
+ declare const SectionActions: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
710
+ /** SectionMedia — a SLOT. Holds any media: a single image (MediaSurface),
711
+ * a Carousel, a VideoPlayer, an embed, or a whole app UI. The section
712
+ * doesn't care what's inside; the media frames itself. */
713
+ declare const SectionMedia: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
714
+
659
715
  declare function Calendar({ className, classNames, showOutsideDays, captionLayout, buttonVariant, formatters, components, ...props }: React.ComponentProps<typeof DayPicker> & {
660
716
  buttonVariant?: React.ComponentProps<typeof Button>["variant"];
661
717
  }): React.JSX.Element;
@@ -868,6 +924,74 @@ declare const Field: React.ForwardRefExoticComponent<FieldProps & React.RefAttri
868
924
  Trailing: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
869
925
  };
870
926
 
927
+ /**
928
+ * PropertyList — the read-only "one record, stacked" display primitive.
929
+ *
930
+ * A property list is a table row transposed: where a Table runs the schema
931
+ * horizontally (columns) across many records, a PropertyList takes ONE
932
+ * record and stacks its fields vertically as label / value pairs. Reach for
933
+ * it for detail panels, inspectors, "about this item" cards, order summaries
934
+ * — anywhere you're showing the properties of a single thing.
935
+ *
936
+ * <PropertyList>
937
+ * <PropertyList.Row label="Status" icon={<Activity />}>
938
+ * <Badge variant="warning-soft">Low</Badge>
939
+ * </PropertyList.Row>
940
+ * <PropertyList.Row label="Owner">
941
+ * <Avatar className="h-5 w-5"><AvatarFallback>EO</AvatarFallback></Avatar>
942
+ * </PropertyList.Row>
943
+ * </PropertyList>
944
+ *
945
+ * The value side is deliberately polymorphic — it's a slot (`children`, or
946
+ * the `value` prop), not a string. A row can hold plain text, a date, a
947
+ * single Badge, a tag group, an avatar stack, a link, anything. That's the
948
+ * whole point: the same value renderers that fill a Table cell drop straight
949
+ * into a PropertyList row, so the two surfaces never drift.
950
+ *
951
+ * Semantics: renders a real `<dl>` with `<dt>` / `<dd>` pairs (each pair
952
+ * wrapped in a `<div>`, which the HTML spec allows), so it's announced as a
953
+ * description list by assistive tech for free.
954
+ *
955
+ * Layout + density are token-driven (`--gds-property-list-*`) so a narrow
956
+ * inspector and a wide settings page can retune the label column and rhythm
957
+ * without prop-drilling. `layout="stack"` drops the label above the value
958
+ * for tight columns.
959
+ *
960
+ * This is a DISPLAY primitive. For an editable field (label + control), use
961
+ * `Field`; a detail panel that flips between read and edit typically swaps a
962
+ * PropertyList for a stack of Fields.
963
+ */
964
+ type PropertyListLayout = "row" | "stack";
965
+ type PropertyListDensity = "compact" | "default" | "relaxed";
966
+ type PropertyListAlign = "start" | "center";
967
+ interface PropertyListProps extends React.HTMLAttributes<HTMLDListElement> {
968
+ /** `row` (default): label column beside value. `stack`: label above value (narrow panels). */
969
+ layout?: PropertyListLayout;
970
+ /** Row rhythm. `compact` for dense inspectors, `relaxed` for airy settings pages. */
971
+ density?: PropertyListDensity;
972
+ /** Default vertical alignment of label vs value. `center` for single-line values, `start` when values wrap (tag groups, multi-line). */
973
+ align?: PropertyListAlign;
974
+ /** Hairline rule between rows. */
975
+ divider?: boolean;
976
+ /** Override the label column width (any CSS length). Sets `--gds-property-list-label-width` for all rows. */
977
+ labelWidth?: string;
978
+ }
979
+ interface PropertyListRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
980
+ /** The property name (the `<dt>`). */
981
+ label: React.ReactNode;
982
+ /** Optional leading glyph, rendered muted at `--gds-property-list-icon-size`. */
983
+ icon?: React.ReactNode;
984
+ /** The value. Provide via `value` or as `children` — accepts any node (text, Badge, tag group, Avatar stack, link…). */
985
+ value?: React.ReactNode;
986
+ /** Per-row override of the list's vertical alignment. */
987
+ align?: PropertyListAlign;
988
+ children?: React.ReactNode;
989
+ }
990
+ declare const PropertyListRow: React.ForwardRefExoticComponent<PropertyListRowProps & React.RefAttributes<HTMLDivElement>>;
991
+ declare const PropertyList: React.ForwardRefExoticComponent<PropertyListProps & React.RefAttributes<HTMLDListElement>> & {
992
+ Row: React.ForwardRefExoticComponent<PropertyListRowProps & React.RefAttributes<HTMLDivElement>>;
993
+ };
994
+
871
995
  /**
872
996
  * Selection cards — RadioCard / CheckboxCard / SwitchCard.
873
997
  *
@@ -1928,7 +2052,7 @@ declare const DropdownMenuShortcut: {
1928
2052
  * rationale.
1929
2053
  */
1930
2054
  declare const inputVariants: (props?: ({
1931
- size?: "2xs" | "xs" | "sm" | "default" | null | undefined;
2055
+ size?: "default" | "2xs" | "xs" | "sm" | null | undefined;
1932
2056
  variant?: "default" | "ghost" | null | undefined;
1933
2057
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1934
2058
  type InputSize = NonNullable<VariantProps<typeof inputVariants>["size"]>;
@@ -1949,7 +2073,7 @@ type InputProps = Omit<React.ComponentProps<"input">, "size"> & {
1949
2073
  declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
1950
2074
 
1951
2075
  declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: ({
1952
- size?: "2xs" | "xs" | "sm" | "default" | null | undefined;
2076
+ size?: "default" | "2xs" | "xs" | "sm" | null | undefined;
1953
2077
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLLabelElement>>;
1954
2078
 
1955
2079
  declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
@@ -2052,6 +2176,230 @@ interface MultiSelectProps {
2052
2176
  }
2053
2177
  declare const MultiSelect: React.ForwardRefExoticComponent<MultiSelectProps & React.RefAttributes<HTMLButtonElement>>;
2054
2178
 
2179
+ /**
2180
+ * Combobox — single-pick searchable picker. The single-select sibling of
2181
+ * MultiSelect, and the "selectable badge" pattern popularised by Linear's
2182
+ * status / priority pickers.
2183
+ *
2184
+ * Composes Popover + Command (cmdk) + Button into:
2185
+ *
2186
+ * - Trigger: a button showing the selected option (its icon + label, or
2187
+ * a fully custom node via `renderValue`). `triggerVariant="inline"`
2188
+ * drops the form-control chrome so the trigger reads as an inline
2189
+ * token — render a Badge through `renderValue` and the value becomes a
2190
+ * clickable badge that opens the menu (the Linear move).
2191
+ * - Open: a Popover with a searchable Command list; each row carries an
2192
+ * optional leading icon and a check on the selected item.
2193
+ * - Optional `clearable` adds a "Clear" row so the value can return to
2194
+ * unset (null).
2195
+ *
2196
+ * Controlled and uncontrolled both supported (value / defaultValue mirror
2197
+ * Radix conventions). Selection is a single `string | null` — the caller
2198
+ * pulls the matching option object from their own `options` array.
2199
+ *
2200
+ * Read-only / permissions: pass `disabled` to lock the control to a
2201
+ * display of its current value (the trigger stops opening). A
2202
+ * permission check ("can this user edit?") drives that prop; the Combobox
2203
+ * itself stays unaware of access rules.
2204
+ *
2205
+ * Data-driven via `options` rather than compound children — picker lists
2206
+ * run dozens of items long and the per-option icon has no natural
2207
+ * children-API equivalent. Theming inherits from Popover / Command /
2208
+ * Button / Badge; no new `--gds-combobox-*` tokens needed yet.
2209
+ */
2210
+
2211
+ interface ComboboxOption {
2212
+ /** Value stored in selection. Must be unique. */
2213
+ value: string;
2214
+ /** Display label for the dropdown row and the trigger. */
2215
+ label: string;
2216
+ /** Optional lucide-style icon (any component accepting className).
2217
+ * Rendered in the dropdown row and, by default, on the trigger. */
2218
+ icon?: React.ComponentType<{
2219
+ className?: string;
2220
+ }>;
2221
+ /** Extra search terms beyond the label (cmdk matches against these). */
2222
+ keywords?: string[];
2223
+ /** Disable the row — it can't be picked. */
2224
+ disabled?: boolean;
2225
+ }
2226
+ type ComboboxTriggerVariant = "default" | "inline";
2227
+ interface ComboboxProps {
2228
+ /** The full pool of selectable items. */
2229
+ options: ComboboxOption[];
2230
+ /** Controlled value. When provided, wire `onValueChange` or the
2231
+ * control becomes a read-only display of `value`. */
2232
+ value?: string | null;
2233
+ /** Uncontrolled initial value. Ignored if `value` is provided. */
2234
+ defaultValue?: string | null;
2235
+ /** Fired with the next value (or null when cleared). */
2236
+ onValueChange?: (next: string | null) => void;
2237
+ /** Trigger text when nothing is selected. */
2238
+ placeholder?: string;
2239
+ /** Search-input placeholder. Default "Search…". */
2240
+ searchPlaceholder?: string;
2241
+ /** Message rendered when search returns no rows. */
2242
+ emptyMessage?: string;
2243
+ /** Hide the search input (short lists). Default true (shown). */
2244
+ searchable?: boolean;
2245
+ /** Add a "Clear" row so the value can return to unset. */
2246
+ clearable?: boolean;
2247
+ /** `default` (form-control surface, like Select) or `inline` (chrome-free
2248
+ * token trigger — pair with `renderValue` to render a Badge). */
2249
+ triggerVariant?: ComboboxTriggerVariant;
2250
+ /** Render the selected value yourself (e.g. as a Badge). Falls back to
2251
+ * the option's icon + label. Receives the resolved option. */
2252
+ renderValue?: (option: ComboboxOption) => React.ReactNode;
2253
+ /** Hide the trailing chevron (useful for the inline token look). */
2254
+ hideChevron?: boolean;
2255
+ /** Lock the control to a display of its current value. */
2256
+ disabled?: boolean;
2257
+ /** Popover `modal` — outside clicks don't dismiss until explicit close. */
2258
+ modalPopover?: boolean;
2259
+ /** PopoverContent alignment. Default "start". */
2260
+ align?: "start" | "center" | "end";
2261
+ /** Extra classes on the trigger. */
2262
+ className?: string;
2263
+ /** Forwarded to the trigger for tests / Studio selection. */
2264
+ id?: string;
2265
+ "aria-label"?: string;
2266
+ }
2267
+ declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLButtonElement>>;
2268
+
2269
+ /**
2270
+ * DataView — one dataset, drawn as a table, a list of cards, or a grid.
2271
+ *
2272
+ * Wraps TanStack Table so a page stops re-typing the same boilerplate
2273
+ * (sortable-header buttons, flexRender plumbing, selection wiring, the
2274
+ * view switch). You hand it `data` + a `columns` schema; it owns sorting,
2275
+ * column visibility, selection, and view switching.
2276
+ *
2277
+ * <DataView data={rows} columns={cols} defaultView="table" />
2278
+ *
2279
+ * Schema-driven cells: each column declares a `type` (badge / tags /
2280
+ * number / currency / percent / date / boolean / url / text) and DataView
2281
+ * renders it. `cell` overrides per column for anything bespoke (avatars,
2282
+ * relations). `role: "title"` marks the primary field for card / grid.
2283
+ *
2284
+ * The view toggle can live ANYWHERE. `useDataView()` holds the state
2285
+ * (view / activeId / sorting / columnVisibility) so a `<DataViewToggle>`
2286
+ * or `<DataViewColumns>` placed in a page header drives a `<DataView>`
2287
+ * lower down. Or pass `toolbar` to let DataView render them inline.
2288
+ *
2289
+ * Single-view is first-class: pass `views={["table"]}` (or just
2290
+ * `defaultView` with no toolbar) and it's only ever a table / only cards /
2291
+ * only a grid, no switch.
2292
+ *
2293
+ * Table extras: mark a column `pinned="left"` for a fixed column (sticky,
2294
+ * give it a `width` so multi-pin offsets line up) and `stickyHeader` to
2295
+ * freeze the header row on scroll.
2296
+ *
2297
+ * Tunable via `--gds-data-view-*` (card / grid min column width, gap).
2298
+ */
2299
+
2300
+ type DataViewMode = "table" | "cards" | "grid";
2301
+ type DataViewCellType = "text" | "badge" | "tags" | "number" | "currency" | "percent" | "date" | "boolean" | "url";
2302
+ interface DataViewBadgeOption {
2303
+ value: string;
2304
+ label?: string;
2305
+ variant?: BadgeProps["variant"];
2306
+ }
2307
+ interface DataViewColumn<T = any> {
2308
+ /** Accessor key into the row + the column id. */
2309
+ key: string;
2310
+ /** Header content. */
2311
+ header: React.ReactNode;
2312
+ /** Built-in renderer to use for the value. Ignored when `cell` is set. */
2313
+ type?: DataViewCellType;
2314
+ /** For `type="badge"`: per-value label + colour. */
2315
+ options?: DataViewBadgeOption[];
2316
+ /** Render the cell yourself (avatars, relations, anything bespoke). */
2317
+ cell?: (row: T) => React.ReactNode;
2318
+ /** Hint for card / grid composition. `title` is the primary field. */
2319
+ role?: "title" | "meta";
2320
+ /** Allow click-to-sort on this column. */
2321
+ sortable?: boolean;
2322
+ /** Pin the column to the left (a fixed column). Give it `width` so
2323
+ * multi-pin offsets line up. */
2324
+ pinned?: "left";
2325
+ /** Fixed width in px (used for pinned offsets + min sizing). */
2326
+ width?: number;
2327
+ /** Right-align the cell (numbers / currency). */
2328
+ align?: "start" | "end";
2329
+ /** Whether the user can hide it from the Columns menu. Default true. */
2330
+ hideable?: boolean;
2331
+ /** Start hidden. */
2332
+ defaultHidden?: boolean;
2333
+ }
2334
+ interface UseDataViewOptions {
2335
+ defaultView?: DataViewMode;
2336
+ views?: DataViewMode[];
2337
+ defaultActiveId?: string | null;
2338
+ defaultSorting?: SortingState;
2339
+ defaultColumnVisibility?: VisibilityState;
2340
+ }
2341
+ interface DataViewState {
2342
+ view: DataViewMode;
2343
+ setView: (v: DataViewMode) => void;
2344
+ views: DataViewMode[];
2345
+ activeId: string | null;
2346
+ setActiveId: (id: string | null) => void;
2347
+ sorting: SortingState;
2348
+ setSorting: OnChangeFn<SortingState>;
2349
+ columnVisibility: VisibilityState;
2350
+ setColumnVisibility: OnChangeFn<VisibilityState>;
2351
+ }
2352
+ declare function useDataView(options?: UseDataViewOptions): DataViewState;
2353
+ interface DataViewToggleProps {
2354
+ value: DataViewMode;
2355
+ onChange: (v: DataViewMode) => void;
2356
+ views?: DataViewMode[];
2357
+ className?: string;
2358
+ }
2359
+ declare function DataViewToggle({ value, onChange, views, className, }: DataViewToggleProps): React.JSX.Element | null;
2360
+ interface DataViewColumnsProps {
2361
+ columns: DataViewColumn[];
2362
+ visibility: VisibilityState;
2363
+ onVisibilityChange: (next: VisibilityState) => void;
2364
+ label?: string;
2365
+ className?: string;
2366
+ }
2367
+ declare function DataViewColumns({ columns, visibility, onVisibilityChange, label, className, }: DataViewColumnsProps): React.JSX.Element;
2368
+ interface DataViewProps<T = any> {
2369
+ data: T[];
2370
+ columns: DataViewColumn<T>[];
2371
+ getRowId?: (row: T, index: number) => string;
2372
+ view?: DataViewMode;
2373
+ defaultView?: DataViewMode;
2374
+ onViewChange?: (v: DataViewMode) => void;
2375
+ views?: DataViewMode[];
2376
+ activeId?: string | null;
2377
+ defaultActiveId?: string | null;
2378
+ onActiveChange?: (id: string | null) => void;
2379
+ sorting?: SortingState;
2380
+ defaultSorting?: SortingState;
2381
+ onSortingChange?: OnChangeFn<SortingState>;
2382
+ columnVisibility?: VisibilityState;
2383
+ defaultColumnVisibility?: VisibilityState;
2384
+ onColumnVisibilityChange?: OnChangeFn<VisibilityState>;
2385
+ /** Freeze the header row on vertical scroll. */
2386
+ stickyHeader?: boolean;
2387
+ /** Render a built-in toolbar (columns menu + view toggle) above the view. */
2388
+ toolbar?: boolean;
2389
+ /** Override card / grid tile rendering. */
2390
+ renderCard?: (row: T, ctx: {
2391
+ active: boolean;
2392
+ }) => React.ReactNode;
2393
+ emptyMessage?: React.ReactNode;
2394
+ className?: string;
2395
+ }
2396
+ declare function DataView<T extends Record<string, any>>(props: DataViewProps<T>): React.JSX.Element;
2397
+ declare namespace DataView {
2398
+ var displayName: string;
2399
+ var Toggle: typeof DataViewToggle;
2400
+ var Columns: typeof DataViewColumns;
2401
+ }
2402
+
2055
2403
  declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
2056
2404
  declare const RadioGroupItem: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
2057
2405
 
@@ -2093,7 +2441,7 @@ declare const RadioGroupItem: React.ForwardRefExoticComponent<Omit<RadioGroupPri
2093
2441
  * </ResizablePanelGroup>
2094
2442
  */
2095
2443
  declare const ResizablePanelGroup: ({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => React.JSX.Element;
2096
- declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement | HTMLElement | HTMLObjectElement | HTMLSelectElement | HTMLTextAreaElement | HTMLMapElement | HTMLTitleElement | HTMLVideoElement | HTMLButtonElement | HTMLLinkElement | HTMLLabelElement | HTMLStyleElement | HTMLSourceElement | HTMLHtmlElement | HTMLOptionElement | HTMLTableColElement | HTMLAudioElement | HTMLEmbedElement | HTMLProgressElement | HTMLHRElement | HTMLTableElement | HTMLAnchorElement | HTMLFormElement | HTMLHeadingElement | HTMLImageElement | HTMLInputElement | HTMLLIElement | HTMLOListElement | HTMLParagraphElement | HTMLSpanElement | HTMLUListElement | HTMLAreaElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLFieldSetElement | HTMLHeadElement | HTMLIFrameElement | HTMLLegendElement | HTMLMetaElement | HTMLMeterElement | HTMLOptGroupElement | HTMLOutputElement | HTMLPreElement | HTMLSlotElement | HTMLScriptElement | HTMLTemplateElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTimeElement | HTMLTableRowElement | HTMLTrackElement | HTMLTableCaptionElement | HTMLMenuElement | HTMLPictureElement>, "id" | "onResize"> & {
2444
+ declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLHeadElement | HTMLElement | HTMLLinkElement | HTMLDivElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLButtonElement | HTMLCanvasElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLFormElement | HTMLHeadingElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLInputElement | HTMLLabelElement | HTMLLegendElement | HTMLLIElement | HTMLMapElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLParagraphElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement | HTMLTableCaptionElement | HTMLMenuElement | HTMLPictureElement>, "id" | "onResize"> & {
2097
2445
  className?: string | undefined;
2098
2446
  collapsedSize?: number | undefined;
2099
2447
  collapsible?: boolean | undefined;
@@ -2133,8 +2481,8 @@ declare const ResizableHandle: ({ withHandle, className, ...props }: React.Compo
2133
2481
  */
2134
2482
  declare const rowVariants: (props?: ({
2135
2483
  gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | null | undefined;
2136
- align?: "start" | "center" | "end" | "stretch" | "baseline" | null | undefined;
2137
- justify?: "between" | "start" | "center" | "end" | "around" | "evenly" | null | undefined;
2484
+ align?: "center" | "start" | "end" | "stretch" | "baseline" | null | undefined;
2485
+ justify?: "center" | "between" | "start" | "end" | "around" | "evenly" | null | undefined;
2138
2486
  wrap?: boolean | null | undefined;
2139
2487
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2140
2488
  interface RowProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof rowVariants> {
@@ -2169,7 +2517,7 @@ declare const Row: React.ForwardRefExoticComponent<RowProps & React.RefAttribute
2169
2517
  declare const gridVariants: (props?: ({
2170
2518
  cols?: "1" | "2" | "3" | "4" | "5" | "6" | "12" | null | undefined;
2171
2519
  gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | null | undefined;
2172
- align?: "start" | "center" | "end" | "stretch" | null | undefined;
2520
+ align?: "center" | "start" | "end" | "stretch" | null | undefined;
2173
2521
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2174
2522
  interface GridProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof gridVariants> {
2175
2523
  /** When true, render as the single child element via Radix Slot — lets
@@ -2201,10 +2549,10 @@ declare const Grid: React.ForwardRefExoticComponent<GridProps & React.RefAttribu
2201
2549
  * case. Flex is the escape hatch, not the default.
2202
2550
  */
2203
2551
  declare const flexVariants: (props?: ({
2204
- direction?: "row" | "col" | "row-reverse" | "col-reverse" | null | undefined;
2552
+ direction?: "col" | "row" | "row-reverse" | "col-reverse" | null | undefined;
2205
2553
  gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | null | undefined;
2206
- align?: "start" | "center" | "end" | "stretch" | "baseline" | null | undefined;
2207
- justify?: "between" | "start" | "center" | "end" | "around" | "evenly" | null | undefined;
2554
+ align?: "center" | "start" | "end" | "stretch" | "baseline" | null | undefined;
2555
+ justify?: "center" | "between" | "start" | "end" | "around" | "evenly" | null | undefined;
2208
2556
  wrap?: "wrap" | "nowrap" | "wrap-reverse" | null | undefined;
2209
2557
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2210
2558
  interface FlexProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof flexVariants> {
@@ -2238,7 +2586,7 @@ type SelectMenuSize = "default" | "sm" | "xs" | "2xs";
2238
2586
  * existing call site.
2239
2587
  */
2240
2588
  declare const selectTriggerVariants: (props?: ({
2241
- size?: "2xs" | "xs" | "sm" | "default" | null | undefined;
2589
+ size?: "default" | "2xs" | "xs" | "sm" | null | undefined;
2242
2590
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2243
2591
  type SelectTriggerSize = NonNullable<VariantProps<typeof selectTriggerVariants>["size"]>;
2244
2592
  declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & {
@@ -2257,6 +2605,10 @@ declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectP
2257
2605
  declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
2258
2606
  declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
2259
2607
  size?: SelectMenuSize;
2608
+ /** Portal target. Defaults to document.body; pass a themed wrapper to
2609
+ * keep the menu inside a scoped theme (e.g. the Studio preview, where
2610
+ * the theme is applied to a div, not :root). */
2611
+ container?: HTMLElement | null;
2260
2612
  } & React.RefAttributes<HTMLDivElement>>;
2261
2613
  declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
2262
2614
  declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
@@ -2293,12 +2645,12 @@ declare const Separator: React.ForwardRefExoticComponent<Omit<SeparatorPrimitive
2293
2645
  * shared selection ring (`--selected`). Pass `label` to caption it (the
2294
2646
  * caption also becomes the accessible name / tooltip).
2295
2647
  *
2296
- * Sizing is the t-shirt scale (xs → xl); reach for `size` over `h-*`/`w-*`
2648
+ * Sizing is the t-shirt scale (2xs → xl, 16px → 56px); reach for `size` over `h-*`/`w-*`
2297
2649
  * utilities so the scale stays on tokens. Shape is square / rounded (rides
2298
2650
  * `--radius`) / circle.
2299
2651
  */
2300
2652
  declare const swatchVariants: (props?: ({
2301
- size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
2653
+ size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
2302
2654
  shape?: "rounded" | "square" | "circle" | null | undefined;
2303
2655
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2304
2656
  type SwatchSize = NonNullable<VariantProps<typeof swatchVariants>["size"]>;
@@ -2308,6 +2660,13 @@ interface SwatchProps extends Omit<React.HTMLAttributes<HTMLElement>, "color">,
2308
2660
  color?: string;
2309
2661
  /** A Grade colour token name (no `--`), resolved as `oklch(var(--<token>))`. */
2310
2662
  token?: string;
2663
+ /** Fill kind. Defaults to "solid", or is inferred from `image` / `gradient`
2664
+ * when omitted. Drives what the chip renders in place. */
2665
+ type?: "solid" | "gradient" | "image";
2666
+ /** CSS gradient for `type="gradient"` — e.g. `"linear-gradient(135deg,#6366f1,#ec4899)"`. */
2667
+ gradient?: string;
2668
+ /** Image URL for `type="image"` — rendered cover-fit behind the chip. */
2669
+ image?: string;
2311
2670
  /** Optional caption rendered beneath the chip; also the accessible name. */
2312
2671
  label?: React.ReactNode;
2313
2672
  /** Draws the shared selection ring (`--selected`). */
@@ -2339,7 +2698,7 @@ declare const SheetClose: React.ForwardRefExoticComponent<DialogPrimitive.Dialog
2339
2698
  declare const SheetPortal: React.FC<DialogPrimitive.DialogPortalProps>;
2340
2699
  declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
2341
2700
  declare const sheetVariants: (props?: ({
2342
- side?: "top" | "right" | "bottom" | "left" | null | undefined;
2701
+ side?: "bottom" | "top" | "right" | "left" | null | undefined;
2343
2702
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2344
2703
  interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
2345
2704
  /** Extra classes for the backdrop overlay. e.g. `bg-transparent`
@@ -2473,7 +2832,7 @@ interface SortableItemProps extends React.HTMLAttributes<HTMLDivElement> {
2473
2832
  declare const SortableItem: React.ForwardRefExoticComponent<SortableItemProps & React.RefAttributes<HTMLDivElement>>;
2474
2833
  interface SortableHandleProps extends React.HTMLAttributes<HTMLElement> {
2475
2834
  /** Render as the child element via Slot — typical pattern is
2476
- * `<Sortable.Handle asChild><Button variant="ghost" size="icon">…</Button></Sortable.Handle>`. */
2835
+ * `<Sortable.Handle asChild><Button variant="ghost" iconOnly>…</Button></Sortable.Handle>`. */
2477
2836
  asChild?: boolean;
2478
2837
  }
2479
2838
  declare const SortableHandle: React.ForwardRefExoticComponent<SortableHandleProps & React.RefAttributes<HTMLElement>>;
@@ -2495,8 +2854,8 @@ declare const Sortable: SortableRootComponent;
2495
2854
  */
2496
2855
  declare const stackVariants: (props?: ({
2497
2856
  gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | null | undefined;
2498
- align?: "start" | "center" | "end" | "stretch" | null | undefined;
2499
- justify?: "between" | "start" | "center" | "end" | "around" | "evenly" | null | undefined;
2857
+ align?: "center" | "start" | "end" | "stretch" | null | undefined;
2858
+ justify?: "center" | "between" | "start" | "end" | "around" | "evenly" | null | undefined;
2500
2859
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2501
2860
  interface StackProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof stackVariants> {
2502
2861
  /** When true, render as the single child element via Radix Slot — lets
@@ -2514,7 +2873,7 @@ declare const Stack: React.ForwardRefExoticComponent<StackProps & React.RefAttri
2514
2873
  * dense tool-panel sizes (the Studio inspector).
2515
2874
  */
2516
2875
  declare const switchTrackVariants: (props?: ({
2517
- size?: "2xs" | "xs" | "sm" | "default" | null | undefined;
2876
+ size?: "default" | "2xs" | "xs" | "sm" | null | undefined;
2518
2877
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2519
2878
  type SwitchSize = NonNullable<VariantProps<typeof switchTrackVariants>["size"]>;
2520
2879
  declare const Switch: React.ForwardRefExoticComponent<Omit<Omit<SwitchPrimitives.SwitchProps & React.RefAttributes<HTMLButtonElement>, "ref">, "size"> & {
@@ -2702,7 +3061,7 @@ declare const ChartLegendContent: React.ForwardRefExoticComponent<Omit<React.Cla
2702
3061
  * px-3 / text-sm; `sm` and `xs` are for dense tool panels.
2703
3062
  */
2704
3063
  declare const textareaVariants: (props?: ({
2705
- size?: "2xs" | "xs" | "sm" | "default" | null | undefined;
3064
+ size?: "default" | "2xs" | "xs" | "sm" | null | undefined;
2706
3065
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2707
3066
  type TextareaSize = NonNullable<VariantProps<typeof textareaVariants>["size"]>;
2708
3067
  type TextareaProps = Omit<React.ComponentProps<"textarea">, "size"> & {
@@ -2712,11 +3071,11 @@ declare const Textarea: React.ForwardRefExoticComponent<Omit<TextareaProps, "ref
2712
3071
 
2713
3072
  declare const toggleVariants: (props?: ({
2714
3073
  variant?: "default" | "outline" | "segmented" | null | undefined;
2715
- size?: "2xs" | "xs" | "sm" | "lg" | "default" | null | undefined;
3074
+ size?: "default" | "2xs" | "xs" | "sm" | "lg" | null | undefined;
2716
3075
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2717
3076
  declare const Toggle: React.ForwardRefExoticComponent<Omit<TogglePrimitive.ToggleProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
2718
3077
  variant?: "default" | "outline" | "segmented" | null | undefined;
2719
- size?: "2xs" | "xs" | "sm" | "lg" | "default" | null | undefined;
3078
+ size?: "default" | "2xs" | "xs" | "sm" | "lg" | null | undefined;
2720
3079
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
2721
3080
 
2722
3081
  declare const TooltipProvider: React.FC<TooltipPrimitive.TooltipProviderProps>;
@@ -2726,11 +3085,11 @@ declare const TooltipContent: React.ForwardRefExoticComponent<Omit<TooltipPrimit
2726
3085
 
2727
3086
  declare const ToggleGroup: React.ForwardRefExoticComponent<((Omit<ToggleGroupPrimitive.ToggleGroupSingleProps & React.RefAttributes<HTMLDivElement>, "ref"> | Omit<ToggleGroupPrimitive.ToggleGroupMultipleProps & React.RefAttributes<HTMLDivElement>, "ref">) & VariantProps<(props?: ({
2728
3087
  variant?: "default" | "outline" | "segmented" | null | undefined;
2729
- size?: "2xs" | "xs" | "sm" | "lg" | "default" | null | undefined;
3088
+ size?: "default" | "2xs" | "xs" | "sm" | "lg" | null | undefined;
2730
3089
  } & class_variance_authority_types.ClassProp) | undefined) => string>) & React.RefAttributes<HTMLDivElement>>;
2731
3090
  declare const ToggleGroupItem: React.ForwardRefExoticComponent<Omit<ToggleGroupPrimitive.ToggleGroupItemProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
2732
3091
  variant?: "default" | "outline" | "segmented" | null | undefined;
2733
- size?: "2xs" | "xs" | "sm" | "lg" | "default" | null | undefined;
3092
+ size?: "default" | "2xs" | "xs" | "sm" | "lg" | null | undefined;
2734
3093
  } & class_variance_authority_types.ClassProp) | undefined) => string> & {
2735
3094
  tooltip?: React.ReactNode;
2736
3095
  tooltipSide?: React.ComponentPropsWithoutRef<typeof TooltipContent>["side"];
@@ -2785,7 +3144,7 @@ declare const ToggleGroupItem: React.ForwardRefExoticComponent<Omit<ToggleGroupP
2785
3144
  * persistent footer toolbars on mobile-style layouts.
2786
3145
  */
2787
3146
  declare const toolbarVariants: (props?: ({
2788
- position?: "top" | "bottom" | "inline" | null | undefined;
3147
+ position?: "bottom" | "top" | "inline" | null | undefined;
2789
3148
  variant?: "default" | "transparent" | "subtle" | null | undefined;
2790
3149
  size?: "sm" | "md" | "lg" | null | undefined;
2791
3150
  sticky?: boolean | null | undefined;
@@ -4252,6 +4611,133 @@ declare function FillPicker({ value, onChange, className }: FillPickerProps): Re
4252
4611
  declare namespace FillPicker {
4253
4612
  var displayName: string;
4254
4613
  }
4614
+ interface FillSectionProps {
4615
+ /** The ordered list of fills (top-most last, Figma-style — but the list
4616
+ * renders in array order; the consumer owns z-ordering semantics). */
4617
+ value: FillValue[];
4618
+ /** Fired with the next list on any add / edit / remove / reorder. */
4619
+ onChange: (value: FillValue[]) => void;
4620
+ /** Section heading. Default "Fills". */
4621
+ title?: string;
4622
+ className?: string;
4623
+ }
4624
+ declare function FillSection({ value, onChange, title, className, }: FillSectionProps): React.JSX.Element;
4625
+ declare namespace FillSection {
4626
+ var displayName: string;
4627
+ }
4628
+
4629
+ /**
4630
+ * ColorPicker — a token-led, grouped, searchable colour picker. The
4631
+ * single-select sibling of FillPicker's solid tab: where FillPicker is the
4632
+ * full Figma paint popover (solid / gradient / image / …), ColorPicker is
4633
+ * the focused "pick one colour token" control.
4634
+ *
4635
+ * Two exports:
4636
+ * - <ColorPickerPanel> — the popover BODY (header + search + grouped
4637
+ * list). Reusable: the inspector's colour fields host it inside their
4638
+ * own TokenField-chrome popover so every colour control shares ONE
4639
+ * panel. Matches the Figma "Color Picker" frame: a "Color" title with
4640
+ * a ghost close button, a search input, then DropdownMenuItem-style
4641
+ * rows (Swatch + token name + check) grouped by family.
4642
+ * - <ColorPicker> — panel + a self-contained trigger (swatch + name or,
4643
+ * with `triggerVariant="inline"`, just the swatch).
4644
+ *
4645
+ * Grade is token-led, so the value is a token NAME ("action/primary"), the
4646
+ * literal "transparent", or null. The Swatch resolves the live CSS variable,
4647
+ * so every chip re-voices when the theme changes.
4648
+ */
4649
+
4650
+ /** A named family of colour tokens, rendered as one group in the list. */
4651
+ interface ColorTokenGroup {
4652
+ /** Group heading (e.g. "action"). */
4653
+ group: string;
4654
+ /** Token NAMES in this group (e.g. "action/primary"). */
4655
+ tokens: string[];
4656
+ }
4657
+ /** Default token groups — the Grade semantic colour families. */
4658
+ declare const DEFAULT_COLOR_TOKEN_GROUPS: ColorTokenGroup[];
4659
+ /** The literal value for "no fill". */
4660
+ declare const TRANSPARENT = "transparent";
4661
+ type ColorPickerTriggerVariant = "default" | "inline";
4662
+ interface ColorPickerProps {
4663
+ /** A Grade colour token NAME ("action/primary"), the literal "transparent",
4664
+ * or null when nothing is picked. */
4665
+ value?: string | null;
4666
+ /** Fired with the next value (token name, "transparent", or null). */
4667
+ onValueChange?: (value: string | null) => void;
4668
+ /** Token families offered in the list. Defaults to the Grade semantic set. */
4669
+ tokens?: ColorTokenGroup[];
4670
+ /** Show the search input. Default true. */
4671
+ searchable?: boolean;
4672
+ /** `default` (form-control surface, swatch + name) or `inline` (just a
4673
+ * clickable swatch — the inspector / fill-row affordance). */
4674
+ triggerVariant?: ColorPickerTriggerVariant;
4675
+ /** Trigger text when nothing is selected. */
4676
+ placeholder?: string;
4677
+ /** Search-input placeholder. */
4678
+ searchPlaceholder?: string;
4679
+ /** Message rendered when search returns no rows. */
4680
+ emptyMessage?: string;
4681
+ /** Include a "Transparent" option at the top. Default true. */
4682
+ allowTransparent?: boolean;
4683
+ /** Popover header title. Default "Color"; pass null to drop the header. */
4684
+ title?: string | null;
4685
+ /** PopoverContent alignment. Default "start". */
4686
+ align?: "start" | "center" | "end";
4687
+ /** Lock the control to a display of its current value. */
4688
+ disabled?: boolean;
4689
+ /** Extra classes on the trigger. */
4690
+ className?: string;
4691
+ /** Forwarded to the trigger for tests / Studio selection. */
4692
+ id?: string;
4693
+ "aria-label"?: string;
4694
+ }
4695
+ declare const ColorPicker: React.ForwardRefExoticComponent<ColorPickerProps & React.RefAttributes<HTMLButtonElement>>;
4696
+
4697
+ /**
4698
+ * GradientEditor — edit a multi-stop CSS gradient with token-led stops.
4699
+ *
4700
+ * A type Select (Linear / Radial / Angular) with reverse + rotate actions, a
4701
+ * live full-width preview bar (a <Swatch type="gradient">), then a "Stops"
4702
+ * list: each stop is a position %, a colour (token via <ColorPicker>, or a
4703
+ * raw colour), an opacity %, and a remove button. An add button in the Stops
4704
+ * header appends a stop.
4705
+ *
4706
+ * The CSS gradient string is computed from type + angle + stops; token stops
4707
+ * resolve to `oklch(var(--<token>))` so the preview re-voices with the theme.
4708
+ * It emits the structured `GradientValue` (NOT a string) so the value stays
4709
+ * editable and serialisable — the caller renders the string via
4710
+ * `gradientToCss(value)` (exported alongside).
4711
+ */
4712
+
4713
+ type GradientType = "linear" | "radial" | "angular";
4714
+ /** A single colour stop. `token` wins over `color`; `opacity` is 0–1. */
4715
+ interface GradientStop {
4716
+ /** Stable key for list rendering / edits. */
4717
+ id: string;
4718
+ /** Position along the gradient, 0–100 (%). */
4719
+ position: number;
4720
+ /** A Grade colour token NAME ("action/primary"). Takes precedence. */
4721
+ token?: string;
4722
+ /** A raw CSS colour, used when no `token`. */
4723
+ color?: string;
4724
+ /** Stop opacity, 0–1. */
4725
+ opacity: number;
4726
+ }
4727
+ interface GradientValue {
4728
+ type: GradientType;
4729
+ /** Angle in degrees for linear / angular gradients. */
4730
+ angle?: number;
4731
+ stops: GradientStop[];
4732
+ }
4733
+ /** Compute the CSS gradient string from a structured value. */
4734
+ declare function gradientToCss(value: GradientValue): string;
4735
+ interface GradientEditorProps {
4736
+ value: GradientValue;
4737
+ onChange: (value: GradientValue) => void;
4738
+ className?: string;
4739
+ }
4740
+ declare const GradientEditor: React.ForwardRefExoticComponent<GradientEditorProps & React.RefAttributes<HTMLDivElement>>;
4255
4741
 
4256
4742
  /**
4257
4743
  * ShaderPresetPreview — a thumbnail-sized preview of a shader preset.
@@ -4929,4 +5415,4 @@ declare function GradeModeSwitcher({ className, variant }: GradeModeSwitcherProp
4929
5415
  */
4930
5416
  declare function ThemeToggle(): React.JSX.Element;
4931
5417
 
4932
- export { ALL_MODES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AppShell, AppShellAside, type AppShellAsideProps, AppShellFooter, type AppShellFooterProps, AppShellHeader, type AppShellHeaderProps, AppShellMain, type AppShellMainProps, AppShellNav, type AppShellNavProps, type AppShellProps, Avatar, AvatarFallback, AvatarImage, type AvatarTone, BUILT_IN_INPUTS, BackgroundFill, type BackgroundFillFit, type BackgroundFillProps, type BackgroundFillType, Badge, Banner, type BannerProps, type BaseMediaProps, BlinkingCursor, type BlinkingCursorProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, type BreadcrumbMenuItem, BreadcrumbMenuTrigger, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonShape, COMPONENT_CONTRACTS, Calendar, CalendarDayButton, Callout, CalloutDescription, CalloutTitle, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardStyle, CardTitle, Carousel, CarouselArrows, type CarouselArrowsProps, type AutoplayConfig as CarouselAutoplayConfig, CarouselDots, type CarouselDotsProps, type CarouselNavButtonProps, CarouselNext, CarouselPrev, type CarouselProps, CarouselSlide, type CarouselSlideProps, CarouselVideoSlide, type CarouselVideoSlideProps, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, type ChartPalette, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, CheckboxCard, type CheckboxCardProps, Code, type CodeDiff, type CodeLanguage, type CodeProps, type CodeReveal, type CodeTrigger, type ColorIntensity, Composer, type ComposerAttachment, type ComposerAttachmentConfig, type ComposerContent, type ComposerFormat, type ComposerHandle, type ComposerMentionItem, type ComposerProps, ComposerReply, type ComposerStep, type ComposerTriggerConfig, DEMO_SPEED_PRESETS, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, type DemoSpeed, DemoStage, type DemoStageProps, type DemoTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FILL_TOKENS, FRAGMENT_HEADER, Field, FieldDescription, FieldLabel, type FieldProps, FieldTrailing, FillPicker, type FillPickerProps, type FillValue, Flex, type FlexProps, type FontKey, GRADE_PRE_HYDRATION_SCRIPT, type GeneratedTheme, GradeLoader, type GradeLoaderProps, type GradeLoaderSize, GradeModeSwitcher, GradeThemeProvider, type GradeThemeProviderProps, GradeThemeSwitcher, Grid, type GridProps, Input, type InputStyle, Label, LenisProvider, Logo, type LogoLockup, type LogoMode, type LogoProps, type LogoSize, type LogoSources, type LogoVariant, MOTION_ATTR, Map, MapHandle, MapMarker, MapMarkerProps, MapProps, type MediaAspect, type MediaRadius, MediaSurface, MediaSurfaceContract, type MediaSurfaceProps, Message, type MessageProps, type ModeName, Motion, MotionOverlay, type MotionOverlayProps, type MotionOverlayZone, type MotionProps, MotionScene, type MotionSceneProps, type MotionSceneRegistration, type MotionSceneTransition, MotionScreen, type MotionScreenAnimate, type MotionScreenProps, MotionText, type MotionTextProps, type MotionTextTemplate, MultiSelect, type MultiSelectOption, type MultiSelectProps, type OKLCHTriplet, type Palette, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostPreset, Progress, RadioCard, type RadioCardProps, RadioGroup, RadioGroupItem, type RadiusStyle, type Ramp, ResizableHandle, ResizablePanel, ResizablePanelGroup, Reveal, type RevealAnimation, type RevealProps, type RevealStep, RivePlayer, type RivePlayerProps, Row, type RowProps, type SceneContext, type SceneFactory, type SceneHandle, ScreenAnimator, type ScreenAnimatorProps, type ScreenAnimatorShot, type ScriptedDemoContext, type ScriptedDemoState, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShaderCompileError, ShaderControls, type ShaderControlsProps, type ShaderPreset, ShaderPresetPicker, type ShaderPresetPickerProps, ShaderPresetPreview, type ShaderPresetPreviewProps, type ShadowIntensity, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, type SidebarContentProps, SidebarFooter, type SidebarFooterProps, SidebarHeader, type SidebarHeaderProps, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, SidebarTreeItem, type SidebarTreeItemProps, Skeleton, Slider, Sortable, SortableGroup, type SortableGroupProps, SortableHandle, type SortableHandleProps, SortableItem, type SortableItemProps, type SortableProps, type SpacingDensity, Stack, type StackProps, Swatch, SwatchGroup, type SwatchGroupProps, type SwatchProps, Switch, SwitchCard, type SwitchCardProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type ThemeInput, ThemeToggle, ThreeScene, type ThreeSceneProps, Toggle, ToggleGroup, ToggleGroupItem, Toolbar, type ToolbarProps, ToolbarSlot, type ToolbarSlotProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TypeScalePreset, type UseScriptedDemoOptions, VideoPlayer, type VideoPlayerProps, asideVariants as appShellAsideVariants, footerVariants as appShellFooterVariants, headerVariants as appShellHeaderVariants, mainVariants as appShellMainVariants, navVariants as appShellNavVariants, applyThemeToRoot, badgeVariants, bannerVariants, buildFragmentShaderScene, builtInThemes, buttonVariants, calloutVariants, calmInput, cn, defaultPostPreset, defaultThemeId, deleteUserTheme, sleep as demoSleep, typeText as demoTypeText, duplicateTheme, energyInput, flexVariants, generateTheme, getComponentContract, getTheme, gridVariants, listContractedComponents, listThemes, listUserThemes, loadUserThemeInput, postPresets, rowVariants, saveUserTheme, sceneRegistry, setMotion, shaderPresetById, shaderPresets, shellVariants, stackVariants, swatchVariants, themeToCSSVars, toggleVariants, useCarouselApi, useGradeTheme, useMaybeGradeTheme, useMotionScene, usePageActive, usePrefersReducedMotion, useReducedMotion, useScriptedDemo };
5418
+ export { ALL_MODES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AppShell, AppShellAside, type AppShellAsideProps, AppShellFooter, type AppShellFooterProps, AppShellHeader, type AppShellHeaderProps, AppShellMain, type AppShellMainProps, AppShellNav, type AppShellNavProps, type AppShellProps, Avatar, AvatarFallback, AvatarImage, type AvatarTone, BUILT_IN_INPUTS, BackgroundFill, type BackgroundFillFit, type BackgroundFillProps, type BackgroundFillType, Badge, Banner, type BannerProps, type BaseMediaProps, BlinkingCursor, type BlinkingCursorProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, type BreadcrumbMenuItem, BreadcrumbMenuTrigger, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonShape, TRANSPARENT as COLOR_PICKER_TRANSPARENT, COMPONENT_CONTRACTS, Calendar, CalendarDayButton, Callout, CalloutDescription, CalloutTitle, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardStyle, CardTitle, Carousel, CarouselArrows, type CarouselArrowsProps, type AutoplayConfig as CarouselAutoplayConfig, CarouselDots, type CarouselDotsProps, type CarouselNavButtonProps, CarouselNext, CarouselPrev, type CarouselProps, CarouselSlide, type CarouselSlideProps, CarouselVideoSlide, type CarouselVideoSlideProps, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, type ChartPalette, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, CheckboxCard, type CheckboxCardProps, Code, type CodeDiff, type CodeLanguage, type CodeProps, type CodeReveal, type CodeTrigger, type ColorIntensity, ColorPicker, type ColorPickerProps, type ColorTokenGroup, Combobox, type ComboboxOption, type ComboboxProps, Composer, type ComposerAttachment, type ComposerAttachmentConfig, type ComposerContent, type ComposerFormat, type ComposerHandle, type ComposerMentionItem, type ComposerProps, ComposerReply, type ComposerStep, type ComposerTriggerConfig, Container, type ContainerMaxW, type ContainerProps, DEFAULT_COLOR_TOKEN_GROUPS, DEMO_SPEED_PRESETS, DataView, type DataViewBadgeOption, type DataViewCellType, type DataViewColumn, DataViewColumns, type DataViewColumnsProps, type DataViewMode, type DataViewProps, type DataViewState, DataViewToggle, type DataViewToggleProps, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, type DemoSpeed, DemoStage, type DemoStageProps, type DemoTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FILL_TOKENS, FRAGMENT_HEADER, Field, FieldDescription, FieldLabel, type FieldProps, FieldTrailing, FillPicker, type FillPickerProps, FillSection, type FillSectionProps, type FillValue, Flex, type FlexProps, type FontKey, GRADE_PRE_HYDRATION_SCRIPT, type GeneratedTheme, GradeLoader, type GradeLoaderProps, type GradeLoaderSize, GradeModeSwitcher, GradeThemeProvider, type GradeThemeProviderProps, GradeThemeSwitcher, GradientEditor, type GradientEditorProps, type GradientStop, type GradientType, type GradientValue, Grid, type GridProps, Input, type InputStyle, Label, LenisProvider, Logo, type LogoLockup, type LogoMode, type LogoProps, type LogoSize, type LogoSources, type LogoVariant, MOTION_ATTR, Map, MapHandle, MapMarker, MapMarkerProps, MapProps, type MediaAspect, type MediaRadius, MediaSurface, MediaSurfaceContract, type MediaSurfaceProps, Message, type MessageProps, type ModeName, Motion, MotionOverlay, type MotionOverlayProps, type MotionOverlayZone, type MotionProps, MotionScene, type MotionSceneProps, type MotionSceneRegistration, type MotionSceneTransition, MotionScreen, type MotionScreenAnimate, type MotionScreenProps, MotionText, type MotionTextProps, type MotionTextTemplate, MultiSelect, type MultiSelectOption, type MultiSelectProps, type OKLCHTriplet, type Palette, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostPreset, Progress, PropertyList, type PropertyListProps, PropertyListRow, type PropertyListRowProps, RadioCard, type RadioCardProps, RadioGroup, RadioGroupItem, type RadiusStyle, type Ramp, ResizableHandle, ResizablePanel, ResizablePanelGroup, Reveal, type RevealAnimation, type RevealProps, type RevealStep, RivePlayer, type RivePlayerProps, Row, type RowProps, type SceneContext, type SceneFactory, type SceneHandle, ScreenAnimator, type ScreenAnimatorProps, type ScreenAnimatorShot, type ScriptedDemoContext, type ScriptedDemoState, ScrollArea, ScrollBar, Section, SectionActions, SectionDescription, SectionEyebrow, SectionMedia, type SectionProps, type SectionScope, SectionSubtitle, SectionTitle, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShaderCompileError, ShaderControls, type ShaderControlsProps, type ShaderPreset, ShaderPresetPicker, type ShaderPresetPickerProps, ShaderPresetPreview, type ShaderPresetPreviewProps, type ShadowIntensity, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, type SidebarContentProps, SidebarFooter, type SidebarFooterProps, SidebarHeader, type SidebarHeaderProps, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, SidebarTreeItem, type SidebarTreeItemProps, Skeleton, Slider, Sortable, SortableGroup, type SortableGroupProps, SortableHandle, type SortableHandleProps, SortableItem, type SortableItemProps, type SortableProps, type SpacingDensity, Stack, type StackProps, Swatch, SwatchGroup, type SwatchGroupProps, type SwatchProps, Switch, SwitchCard, type SwitchCardProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type ThemeInput, ThemeToggle, ThreeScene, type ThreeSceneProps, Toggle, ToggleGroup, ToggleGroupItem, Toolbar, type ToolbarProps, ToolbarSlot, type ToolbarSlotProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TypeScalePreset, type UseDataViewOptions, type UseScriptedDemoOptions, VideoPlayer, type VideoPlayerProps, asideVariants as appShellAsideVariants, footerVariants as appShellFooterVariants, headerVariants as appShellHeaderVariants, mainVariants as appShellMainVariants, navVariants as appShellNavVariants, applyThemeToRoot, badgeVariants, bannerVariants, buildFragmentShaderScene, builtInThemes, buttonVariants, calloutVariants, calmInput, cn, containerVariants, defaultPostPreset, defaultThemeId, deleteUserTheme, sleep as demoSleep, typeText as demoTypeText, duplicateTheme, energyInput, flexVariants, generateTheme, getComponentContract, getTheme, gradientToCss, gridVariants, listContractedComponents, listThemes, listUserThemes, loadUserThemeInput, postPresets, rowVariants, saveUserTheme, sceneRegistry, bandVariants as sectionBandVariants, setMotion, shaderPresetById, shaderPresets, shellVariants, stackVariants, swatchVariants, themeToCSSVars, toggleVariants, useCarouselApi, useDataView, useGradeTheme, useMaybeGradeTheme, useMotionScene, usePageActive, usePrefersReducedMotion, useReducedMotion, useScriptedDemo };