@windforge/ui 0.1.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 +1195 -0
- package/dist/index.js +3628 -0
- package/package.json +66 -0
- package/src/catalog.ts +654 -0
- package/src/components/accordion.tsx +91 -0
- package/src/components/alert.tsx +58 -0
- package/src/components/autocomplete.tsx +174 -0
- package/src/components/avatar.tsx +60 -0
- package/src/components/badge.tsx +37 -0
- package/src/components/breadcrumb.tsx +62 -0
- package/src/components/button-group.tsx +23 -0
- package/src/components/button.tsx +53 -0
- package/src/components/calendar.tsx +61 -0
- package/src/components/card.tsx +72 -0
- package/src/components/chart.tsx +130 -0
- package/src/components/checkbox.tsx +27 -0
- package/src/components/chip.tsx +75 -0
- package/src/components/code-block.tsx +126 -0
- package/src/components/command.tsx +139 -0
- package/src/components/data-table.tsx +194 -0
- package/src/components/date-picker.tsx +77 -0
- package/src/components/dialog.tsx +57 -0
- package/src/components/dropdown-menu.tsx +186 -0
- package/src/components/form-field.tsx +97 -0
- package/src/components/input.tsx +29 -0
- package/src/components/label.tsx +18 -0
- package/src/components/layout.tsx +179 -0
- package/src/components/link.tsx +37 -0
- package/src/components/modal.tsx +67 -0
- package/src/components/multi-select.tsx +175 -0
- package/src/components/pagination.tsx +72 -0
- package/src/components/popover.tsx +25 -0
- package/src/components/progress.tsx +31 -0
- package/src/components/radio-group.tsx +34 -0
- package/src/components/select.tsx +134 -0
- package/src/components/separator.tsx +21 -0
- package/src/components/sheet.tsx +80 -0
- package/src/components/skeleton.tsx +11 -0
- package/src/components/slider.tsx +28 -0
- package/src/components/stepper.tsx +69 -0
- package/src/components/switch.tsx +33 -0
- package/src/components/table.tsx +121 -0
- package/src/components/tabs.tsx +90 -0
- package/src/components/text.tsx +109 -0
- package/src/components/textarea.tsx +27 -0
- package/src/components/toast.tsx +107 -0
- package/src/components/toggle-button.tsx +103 -0
- package/src/components/tooltip.tsx +26 -0
- package/src/icons/forge-icon.tsx +55 -0
- package/src/icons/icon-set.ts +60 -0
- package/src/icons/svg-icon.tsx +43 -0
- package/src/index.ts +80 -0
- package/src/layouts/app-bar.tsx +95 -0
- package/src/layouts/app-shell.tsx +80 -0
- package/src/layouts/side-nav.tsx +196 -0
- package/src/layouts/theme-provider.tsx +128 -0
- package/src/lib/recipes.ts +50 -0
- package/src/lib/types.ts +3 -0
- package/src/lib/use-media-query.ts +18 -0
- package/src/lib/utils.ts +10 -0
- package/tailwind-preset.cjs +77 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,1195 @@
|
|
|
1
|
+
import { ClassValue } from 'clsx';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { VariantProps } from 'class-variance-authority';
|
|
5
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
6
|
+
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
|
7
|
+
import * as SwitchPrimitives from '@radix-ui/react-switch';
|
|
8
|
+
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
|
9
|
+
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
|
|
10
|
+
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
11
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
12
|
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
13
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
14
|
+
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
15
|
+
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
16
|
+
import * as ProgressPrimitive from '@radix-ui/react-progress';
|
|
17
|
+
import * as SliderPrimitive from '@radix-ui/react-slider';
|
|
18
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
19
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
20
|
+
import { DayPicker } from 'react-day-picker';
|
|
21
|
+
import { EChartsCoreOption } from 'echarts/core';
|
|
22
|
+
import { LucideIcon } from 'lucide-react';
|
|
23
|
+
export * from '@windforge/tokens';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* DETERMINISTIC LAYOUT PRIMITIVES — `Box` and `Stack`.
|
|
27
|
+
*
|
|
28
|
+
* Layout is a CLOSED set of intent-named, conventionally-named props, not free-form
|
|
29
|
+
* CSS. An AI (or a human) picks from a finite vocabulary — `direction="row"`,
|
|
30
|
+
* `gap="card"`, `padding="lg"`, `borderRadius="xl"` — and `cva` maps each choice to
|
|
31
|
+
* exactly one on-scale Tailwind class at build time. There is no path to an
|
|
32
|
+
* off-scale value like `padding-[13px]` or a random hex, so output is always
|
|
33
|
+
* on-system and reviewable.
|
|
34
|
+
*
|
|
35
|
+
* No JS runtime: thin wrappers that concatenate class strings — no `sx`-style
|
|
36
|
+
* computation at render.
|
|
37
|
+
*
|
|
38
|
+
* Spacing accepts the generic steps (none·xs·sm·md·lg·xl·2xl) AND the practical
|
|
39
|
+
* Windforge spacing tokens (nbsp·card·gutter·section·page).
|
|
40
|
+
*
|
|
41
|
+
* <Box padding="lg" background="subtle" borderRadius="xl" border="default">…</Box>
|
|
42
|
+
* <Stack direction="row" gap="card" align="center" justify="between">…</Stack>
|
|
43
|
+
*
|
|
44
|
+
* `asChild` makes either polymorphic (the replacement for MUI `component=`):
|
|
45
|
+
* <Box asChild padding="md"><section/></Box>
|
|
46
|
+
*/
|
|
47
|
+
declare const surface: (props?: ({
|
|
48
|
+
padding?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "nbsp" | "card" | "gutter" | "section" | "page" | null | undefined;
|
|
49
|
+
paddingX?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "nbsp" | "card" | "gutter" | "section" | "page" | null | undefined;
|
|
50
|
+
paddingY?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "nbsp" | "card" | "gutter" | "section" | "page" | null | undefined;
|
|
51
|
+
background?: "none" | "surface" | "subtle" | "inset" | "inverse" | "brand" | null | undefined;
|
|
52
|
+
border?: "none" | "subtle" | "default" | "strong" | null | undefined;
|
|
53
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "2xl" | "full" | null | undefined;
|
|
54
|
+
boxShadow?: "none" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
55
|
+
maxWidth?: "sm" | "md" | "lg" | "xl" | "full" | "prose" | null | undefined;
|
|
56
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
57
|
+
type SurfaceProps = VariantProps<typeof surface>;
|
|
58
|
+
declare const flex: (props?: ({
|
|
59
|
+
direction?: "row" | "column" | null | undefined;
|
|
60
|
+
gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "nbsp" | "card" | "gutter" | "section" | "page" | null | undefined;
|
|
61
|
+
align?: "start" | "center" | "end" | "stretch" | "baseline" | null | undefined;
|
|
62
|
+
justify?: "start" | "center" | "end" | "between" | "around" | null | undefined;
|
|
63
|
+
wrap?: boolean | null | undefined;
|
|
64
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
65
|
+
type FlexProps = VariantProps<typeof flex>;
|
|
66
|
+
interface BoxProps extends React.HTMLAttributes<HTMLDivElement>, SurfaceProps {
|
|
67
|
+
asChild?: boolean;
|
|
68
|
+
}
|
|
69
|
+
declare const Box: React.ForwardRefExoticComponent<BoxProps & React.RefAttributes<HTMLDivElement>>;
|
|
70
|
+
interface StackProps extends React.HTMLAttributes<HTMLDivElement>, FlexProps, SurfaceProps {
|
|
71
|
+
asChild?: boolean;
|
|
72
|
+
}
|
|
73
|
+
declare const Stack: React.ForwardRefExoticComponent<StackProps & React.RefAttributes<HTMLDivElement>>;
|
|
74
|
+
declare const grid: (props?: ({
|
|
75
|
+
cols?: 1 | 2 | 3 | 4 | 5 | 6 | 12 | null | undefined;
|
|
76
|
+
mdCols?: 1 | 2 | 3 | 4 | 5 | 6 | 12 | null | undefined;
|
|
77
|
+
gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "nbsp" | "card" | "gutter" | "section" | "page" | null | undefined;
|
|
78
|
+
align?: "start" | "center" | "end" | "stretch" | null | undefined;
|
|
79
|
+
justify?: "start" | "center" | "end" | "stretch" | null | undefined;
|
|
80
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
81
|
+
interface GridProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof grid> {
|
|
82
|
+
asChild?: boolean;
|
|
83
|
+
}
|
|
84
|
+
declare const Grid: React.ForwardRefExoticComponent<GridProps & React.RefAttributes<HTMLDivElement>>;
|
|
85
|
+
/**
|
|
86
|
+
* The machine-readable layout contract. An AI/registry reads this to know the
|
|
87
|
+
* exact allowed values for every layout prop — so generated layouts are picked
|
|
88
|
+
* from a closed set, never invented. Spacing mixes generic steps with the
|
|
89
|
+
* practical Windforge spacing tokens.
|
|
90
|
+
*/
|
|
91
|
+
declare const layoutVocabulary: {
|
|
92
|
+
readonly spacing: readonly ["none", "xs", "sm", "md", "lg", "xl", "2xl", "nbsp", "card", "gutter", "section", "page"];
|
|
93
|
+
readonly direction: readonly ["row", "column"];
|
|
94
|
+
readonly align: readonly ["start", "center", "end", "stretch", "baseline"];
|
|
95
|
+
readonly justify: readonly ["start", "center", "end", "between", "around"];
|
|
96
|
+
readonly background: readonly ["none", "surface", "subtle", "inset", "inverse", "brand"];
|
|
97
|
+
readonly border: readonly ["none", "default", "subtle", "strong"];
|
|
98
|
+
readonly borderRadius: readonly ["none", "sm", "md", "lg", "xl", "2xl", "full"];
|
|
99
|
+
readonly boxShadow: readonly ["none", "sm", "md", "lg", "xl"];
|
|
100
|
+
readonly maxWidth: readonly ["sm", "md", "lg", "xl", "prose", "full"];
|
|
101
|
+
readonly gridCols: readonly [1, 2, 3, 4, 5, 6, 12];
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* catalog.ts — machine-readable component registry for @windforge/ui.
|
|
106
|
+
*
|
|
107
|
+
* An AI or code-generation tool reads this to know the exact closed set of
|
|
108
|
+
* components and the allowed values for every enum prop. Values are extracted
|
|
109
|
+
* directly from the cva variant definitions in each component file; nothing
|
|
110
|
+
* is invented here.
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
interface ComponentSpec {
|
|
114
|
+
/** one-line purpose */
|
|
115
|
+
summary: string;
|
|
116
|
+
/** closed-vocabulary props → their allowed values (enums only) */
|
|
117
|
+
props?: Record<string, readonly string[]>;
|
|
118
|
+
/** notable boolean/other props, name → short note */
|
|
119
|
+
flags?: Record<string, string>;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
declare const catalog: Record<string, ComponentSpec>;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* `cn` — merge conditional class lists and resolve Tailwind conflicts.
|
|
126
|
+
* The one utility every component uses to compose token-driven classes.
|
|
127
|
+
*/
|
|
128
|
+
declare function cn(...inputs: ClassValue[]): string;
|
|
129
|
+
|
|
130
|
+
/** Subscribe to a media query; SSR-safe (returns false until mounted). */
|
|
131
|
+
declare function useMediaQuery(query: string): boolean;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* RECIPES — named class-fragment bundles shared across components.
|
|
135
|
+
*
|
|
136
|
+
* These collapse the utility groups that repeat verbatim across many primitives
|
|
137
|
+
* (focus rings, floating surfaces, menu rows, overlays) into one named class
|
|
138
|
+
* each, so a component reads as `cn(floatingPanel, '…specifics…')` instead of a
|
|
139
|
+
* wall of utilities. Compose them with `cn()` — because `cn` runs tailwind-merge,
|
|
140
|
+
* a component can override any piece simply by adding the conflicting utility
|
|
141
|
+
* after the recipe (e.g. `cn(floatingPanel, 'rounded-xl shadow-lg')`).
|
|
142
|
+
*
|
|
143
|
+
* Every utility here resolves to a token (`var(--wf-*)`), so these stay
|
|
144
|
+
* theme- and accent-aware: the class is stable, the values move underneath it.
|
|
145
|
+
*/
|
|
146
|
+
/** Keyboard focus ring for standalone interactive controls (buttons, triggers, thumbs). */
|
|
147
|
+
declare const focusRing: string;
|
|
148
|
+
/** Focus ring with no offset — for controls that sit flush inside a container. */
|
|
149
|
+
declare const focusRingInset = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
|
|
150
|
+
/** Focus treatment for text fields — recolors the border and adds a ring. */
|
|
151
|
+
declare const focusRingField = "focus-visible:outline-none focus-visible:border-focus focus-visible:ring-2 focus-visible:ring-ring";
|
|
152
|
+
/**
|
|
153
|
+
* Floating surface for popovers / menus / listboxes. Radius (`rounded-lg`) and
|
|
154
|
+
* shadow (`shadow-md`) are sensible defaults — override per component via `cn`.
|
|
155
|
+
* Padding, width, max-height and entrance animation are left to the caller.
|
|
156
|
+
*/
|
|
157
|
+
declare const floatingPanel = "z-50 rounded-lg border border-border bg-surface text-primary shadow-md outline-none";
|
|
158
|
+
/**
|
|
159
|
+
* Structural recipe for a selectable row inside a menu / listbox. Intentionally
|
|
160
|
+
* carries no focus colors or padding — those differ per surface (dropdown and
|
|
161
|
+
* select both use `focus:bg-surface-inset`; autocomplete highlights the same way).
|
|
162
|
+
*/
|
|
163
|
+
declare const menuItem: string;
|
|
164
|
+
/** Full-screen scrim behind modal surfaces (dialog, sheet). */
|
|
165
|
+
declare const overlayBackdrop = "fixed inset-0 z-50 bg-overlay animate-fade-in";
|
|
166
|
+
/** The corner dismiss (×) button shared by dialog and sheet. Pair with `focusRingInset`. */
|
|
167
|
+
declare const dismissButton = "absolute right-4 top-4 rounded-md p-1 text-secondary opacity-70 transition-opacity hover:opacity-100";
|
|
168
|
+
|
|
169
|
+
/** Strip the styling escape hatch. Applied to every component except the
|
|
170
|
+
* layout/building-block primitives (Box, Stack, Grid). */
|
|
171
|
+
type NoStyle<T> = Omit<T, 'className' | 'style'>;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Button — emphasis comes from a three-tier hierarchy (primary / secondary /
|
|
175
|
+
* tertiary), never from hue. `destructive` is the one semantic exception.
|
|
176
|
+
* Every colour is a token; nothing here is a raw value.
|
|
177
|
+
*/
|
|
178
|
+
declare const buttonVariants: (props?: ({
|
|
179
|
+
variant?: "link" | "primary" | "secondary" | "tertiary" | "destructive" | null | undefined;
|
|
180
|
+
size?: "sm" | "md" | "lg" | "icon" | null | undefined;
|
|
181
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
182
|
+
interface ButtonProps extends NoStyle<React.ButtonHTMLAttributes<HTMLButtonElement>>, VariantProps<typeof buttonVariants> {
|
|
183
|
+
asChild?: boolean;
|
|
184
|
+
}
|
|
185
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* ButtonGroup — joins a row of Buttons into one segmented control: shared edges,
|
|
189
|
+
* single outer radius, collapsed seams. Put `<Button>`s (any variant) inside.
|
|
190
|
+
*/
|
|
191
|
+
declare const ButtonGroup: React.ForwardRefExoticComponent<NoStyle<React.HTMLAttributes<HTMLDivElement>> & React.RefAttributes<HTMLDivElement>>;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* ToggleButtonGroup / ToggleButton — a segmented control. `type="single"` keeps
|
|
195
|
+
* one value selected; `type="multiple"` keeps an array. Controlled via
|
|
196
|
+
* `value`/`onValueChange`. Buttons share edges like a ButtonGroup.
|
|
197
|
+
*/
|
|
198
|
+
type SingleProps = {
|
|
199
|
+
type?: 'single';
|
|
200
|
+
value: string | null;
|
|
201
|
+
onValueChange: (value: string | null) => void;
|
|
202
|
+
};
|
|
203
|
+
type MultipleProps = {
|
|
204
|
+
type: 'multiple';
|
|
205
|
+
value: string[];
|
|
206
|
+
onValueChange: (value: string[]) => void;
|
|
207
|
+
};
|
|
208
|
+
type ToggleButtonGroupProps = (SingleProps | MultipleProps) & NoStyle<Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>>;
|
|
209
|
+
declare function ToggleButtonGroup({ type, value, onValueChange, children, ...props }: ToggleButtonGroupProps): React.JSX.Element;
|
|
210
|
+
interface ToggleButtonProps extends NoStyle<React.ButtonHTMLAttributes<HTMLButtonElement>> {
|
|
211
|
+
value: string;
|
|
212
|
+
}
|
|
213
|
+
declare const ToggleButton: React.ForwardRefExoticComponent<ToggleButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
214
|
+
|
|
215
|
+
declare const badgeVariants: (props?: ({
|
|
216
|
+
variant?: "subtle" | "brand" | "neutral" | "outline" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
217
|
+
size?: "sm" | "md" | null | undefined;
|
|
218
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
219
|
+
interface BadgeProps extends NoStyle<React.HTMLAttributes<HTMLSpanElement>>, VariantProps<typeof badgeVariants> {
|
|
220
|
+
}
|
|
221
|
+
declare function Badge({ variant, size, ...props }: BadgeProps): React.JSX.Element;
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Chip — an interactive pill: clickable (filter/selection) and optionally
|
|
225
|
+
* deletable. Distinct from `Badge`, which is a static label. Set `selected` for
|
|
226
|
+
* the active state and pass `onDelete` to show a trailing ✕.
|
|
227
|
+
*/
|
|
228
|
+
declare const chip: (props?: ({
|
|
229
|
+
selected?: boolean | null | undefined;
|
|
230
|
+
clickable?: boolean | null | undefined;
|
|
231
|
+
size?: "sm" | "md" | null | undefined;
|
|
232
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
233
|
+
interface ChipProps extends NoStyle<Omit<React.HTMLAttributes<HTMLElement>, 'onClick'>>, VariantProps<typeof chip> {
|
|
234
|
+
onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
|
235
|
+
/** When provided, renders a trailing ✕ that calls this instead of selecting. */
|
|
236
|
+
onDelete?: () => void;
|
|
237
|
+
disabled?: boolean;
|
|
238
|
+
icon?: React.ReactNode;
|
|
239
|
+
}
|
|
240
|
+
declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLElement>>;
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Text — the typography primitive (our `Typography`). Size, weight, tone and
|
|
244
|
+
* alignment are a closed token vocabulary; nothing renders off-scale. Renders a
|
|
245
|
+
* `<p>` by default; use `asChild` for the right semantic element:
|
|
246
|
+
*
|
|
247
|
+
* <Text size="3xl" weight="bold" asChild><h1>Title</h1></Text>
|
|
248
|
+
* <Text tone="muted">Body copy</Text>
|
|
249
|
+
* <Text span weight="medium">inline label</Text> // inline <span>, not a block <p>
|
|
250
|
+
* <Text variant="inline-code">defaultOpen</Text> // inline <code> within prose
|
|
251
|
+
*/
|
|
252
|
+
declare const text: (props?: ({
|
|
253
|
+
size?: "sm" | "lg" | "xl" | "2xl" | "base" | "3xl" | "4xl" | "5xl" | "6xl" | null | undefined;
|
|
254
|
+
weight?: "bold" | "light" | "regular" | "medium" | "semibold" | null | undefined;
|
|
255
|
+
tone?: "subtle" | "inverse" | "brand" | "default" | "link" | "muted" | "disabled" | "gradient" | null | undefined;
|
|
256
|
+
align?: "center" | "left" | "right" | null | undefined;
|
|
257
|
+
truncate?: boolean | null | undefined;
|
|
258
|
+
mono?: boolean | null | undefined;
|
|
259
|
+
variant?: "inline-code" | null | undefined;
|
|
260
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
261
|
+
interface TextProps extends NoStyle<React.HTMLAttributes<HTMLElement>>, VariantProps<typeof text> {
|
|
262
|
+
asChild?: boolean;
|
|
263
|
+
/** Render inline as a `<span>` instead of a block `<p>` — for labels, chips and text inside flex rows. */
|
|
264
|
+
span?: boolean;
|
|
265
|
+
}
|
|
266
|
+
declare const Text: React.ForwardRefExoticComponent<TextProps & React.RefAttributes<HTMLElement>>;
|
|
267
|
+
/**
|
|
268
|
+
* Headings — semantic `H1`–`H6` components. Each picks the right element and a
|
|
269
|
+
* sensible default size; override `size`/`weight`/`tone` to decouple visual
|
|
270
|
+
* scale from document outline.
|
|
271
|
+
*
|
|
272
|
+
* <H1>Page title</H1>
|
|
273
|
+
* <H3 size="lg">Section</H3>
|
|
274
|
+
*/
|
|
275
|
+
interface HeadingProps extends NoStyle<React.HTMLAttributes<HTMLHeadingElement>>, Pick<VariantProps<typeof text>, 'size' | 'weight' | 'tone' | 'align' | 'truncate'> {
|
|
276
|
+
}
|
|
277
|
+
declare const H1: React.ForwardRefExoticComponent<HeadingProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
278
|
+
declare const H2: React.ForwardRefExoticComponent<HeadingProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
279
|
+
declare const H3: React.ForwardRefExoticComponent<HeadingProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
280
|
+
declare const H4: React.ForwardRefExoticComponent<HeadingProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
281
|
+
declare const H5: React.ForwardRefExoticComponent<HeadingProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
282
|
+
declare const H6: React.ForwardRefExoticComponent<HeadingProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Link — an inline anchor in the link color (blue). Use `asChild` to wrap a
|
|
286
|
+
* router link while keeping the styling: <Link asChild><RouterLink to="…"/></Link>
|
|
287
|
+
*/
|
|
288
|
+
declare const link: (props?: ({
|
|
289
|
+
underline?: "none" | "hover" | "always" | null | undefined;
|
|
290
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
291
|
+
interface LinkProps extends NoStyle<React.AnchorHTMLAttributes<HTMLAnchorElement>>, VariantProps<typeof link> {
|
|
292
|
+
asChild?: boolean;
|
|
293
|
+
}
|
|
294
|
+
declare const Link: React.ForwardRefExoticComponent<LinkProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Card — a surface that groups related content. Pass `title`, `description`,
|
|
298
|
+
* an optional `headerAction` (e.g. a Badge opposite the title), `footer`
|
|
299
|
+
* actions, and the body as `children`; there are no sub-components to assemble.
|
|
300
|
+
* Under the hood it's a `Box` with the universal surface preset, so any Box prop
|
|
301
|
+
* (`boxShadow`, `borderRadius`, …) still applies.
|
|
302
|
+
*
|
|
303
|
+
* <Card title="Deploy preview" description="Pushed 4 minutes ago"
|
|
304
|
+
* footer={<Button>Visit preview</Button>}>
|
|
305
|
+
* Vercel finished building your branch.
|
|
306
|
+
* </Card>
|
|
307
|
+
*/
|
|
308
|
+
type CardPadding = NonNullable<BoxProps['padding']>;
|
|
309
|
+
interface CardProps extends Omit<NoStyle<BoxProps>, 'title' | 'paddingX' | 'paddingY'> {
|
|
310
|
+
title?: React.ReactNode;
|
|
311
|
+
description?: React.ReactNode;
|
|
312
|
+
/** Trailing header content — sits opposite the title (e.g. a status Badge). */
|
|
313
|
+
headerAction?: React.ReactNode;
|
|
314
|
+
/** Footer content — typically buttons. */
|
|
315
|
+
footer?: React.ReactNode;
|
|
316
|
+
/** Inset for the header/body/footer sections. Overrides (never stacks on) the
|
|
317
|
+
* default; defaults to the `card` spacing token. */
|
|
318
|
+
padding?: CardPadding;
|
|
319
|
+
}
|
|
320
|
+
declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
|
|
321
|
+
|
|
322
|
+
interface InputProps extends NoStyle<React.InputHTMLAttributes<HTMLInputElement>> {
|
|
323
|
+
/** Error state — red control outline + aria-invalid. Usually set for you by FormField. */
|
|
324
|
+
invalid?: boolean;
|
|
325
|
+
}
|
|
326
|
+
declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
327
|
+
|
|
328
|
+
interface TextareaProps extends NoStyle<React.TextareaHTMLAttributes<HTMLTextAreaElement>> {
|
|
329
|
+
/** Error state — red control outline + aria-invalid. Usually set for you by FormField. */
|
|
330
|
+
invalid?: boolean;
|
|
331
|
+
}
|
|
332
|
+
declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
333
|
+
|
|
334
|
+
declare const Label: React.ForwardRefExoticComponent<NoStyle<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref">> & React.RefAttributes<HTMLLabelElement>>;
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* FormField — the on-system way to assemble a labelled control. For the common
|
|
338
|
+
* case it renders the field for you: pass `label`, `description`, `placeholder`,
|
|
339
|
+
* and `type` and it owns an `Input`. To wrap a different control (Textarea,
|
|
340
|
+
* Select, Autocomplete) pass it as the single child instead. Either way FormField
|
|
341
|
+
* generates the ids and wires `htmlFor`, `aria-describedby`, `aria-invalid`, and
|
|
342
|
+
* the error/required state — so accessible, validated forms stay a one-liner and
|
|
343
|
+
* never drift.
|
|
344
|
+
*
|
|
345
|
+
* <FormField label="Email" description="We'll only use this to sign you in."
|
|
346
|
+
* type="email" placeholder="you@example.com" error={errors.email} required />
|
|
347
|
+
*
|
|
348
|
+
* <FormField label="Notes" description="Optional.">
|
|
349
|
+
* <Textarea rows={3} />
|
|
350
|
+
* </FormField>
|
|
351
|
+
*
|
|
352
|
+
* Per the system's hue policy, the error MESSAGE text stays the normal foreground;
|
|
353
|
+
* only the leading icon (and the control's outline) carry the status hue — matching
|
|
354
|
+
* Alert and Toast. The state is never conveyed by color alone (icon + border + text).
|
|
355
|
+
*/
|
|
356
|
+
interface FormFieldProps extends NoStyle<Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>> {
|
|
357
|
+
label?: React.ReactNode;
|
|
358
|
+
/** Helper text below the label. Kept as normal foreground — meant to be read. */
|
|
359
|
+
description?: React.ReactNode;
|
|
360
|
+
/** Placeholder forwarded onto the control. A prop set directly on a child wins. */
|
|
361
|
+
placeholder?: string;
|
|
362
|
+
/** Input type for the default control (text, email, password, …). Forwarded onto the control. */
|
|
363
|
+
type?: React.HTMLInputTypeAttribute;
|
|
364
|
+
/** Error message. Its presence puts the control into the invalid state. */
|
|
365
|
+
error?: React.ReactNode;
|
|
366
|
+
required?: boolean;
|
|
367
|
+
/** Escape hatch: a non-Input control to wrap. Omit to let FormField render an Input. */
|
|
368
|
+
children?: React.ReactElement;
|
|
369
|
+
}
|
|
370
|
+
declare const FormField: React.ForwardRefExoticComponent<FormFieldProps & React.RefAttributes<HTMLDivElement>>;
|
|
371
|
+
|
|
372
|
+
declare const Separator: React.ForwardRefExoticComponent<NoStyle<Omit<SeparatorPrimitive.SeparatorProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Skeleton — a fluid loading placeholder. It fills its parent (`h-full w-full`),
|
|
376
|
+
* so you size it by wrapping it in a Box: `<Box className="h-4 w-2/3"><Skeleton/></Box>`.
|
|
377
|
+
*/
|
|
378
|
+
declare function Skeleton({ ...props }: NoStyle<React.HTMLAttributes<HTMLDivElement>>): React.JSX.Element;
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* CodeBlock — the on-system, syntax-highlighted code surface. One source of truth
|
|
382
|
+
* for every snippet in the system (docs, examples, anywhere). Highlighting runs
|
|
383
|
+
* locally via prism-react-renderer — no network, no API. The token theme below is
|
|
384
|
+
* built from `var(--wf-*)` references, so colors resolve live: the code re-skins
|
|
385
|
+
* with light/dark and with a brand swap automatically, no JS reactivity needed.
|
|
386
|
+
*
|
|
387
|
+
* Takes no className by design — its surface is fixed so every snippet in a product
|
|
388
|
+
* renders identically.
|
|
389
|
+
*
|
|
390
|
+
* <CodeBlock code={src} language="tsx" filename="button.tsx" showLineNumbers />
|
|
391
|
+
*/
|
|
392
|
+
interface CodeBlockProps {
|
|
393
|
+
code: string;
|
|
394
|
+
/** Prism language id. Default 'tsx'. */
|
|
395
|
+
language?: string;
|
|
396
|
+
/** Optional header filename; shown left of the language label. */
|
|
397
|
+
filename?: string;
|
|
398
|
+
/** Render a left gutter with 1-based line numbers. */
|
|
399
|
+
showLineNumbers?: boolean;
|
|
400
|
+
/** 1-based line numbers to emphasize. */
|
|
401
|
+
highlightLines?: number[];
|
|
402
|
+
/** Soft-wrap long lines instead of scrolling horizontally. */
|
|
403
|
+
wrap?: boolean;
|
|
404
|
+
/** Max height before vertical scroll, e.g. '24rem'. */
|
|
405
|
+
maxHeight?: string;
|
|
406
|
+
/** Show the copy button (default true). */
|
|
407
|
+
copyable?: boolean;
|
|
408
|
+
}
|
|
409
|
+
declare function CodeBlock({ code, language, filename, showLineNumbers, highlightLines, wrap, maxHeight, copyable, }: CodeBlockProps): React.JSX.Element;
|
|
410
|
+
|
|
411
|
+
declare const alertVariants: (props?: ({
|
|
412
|
+
variant?: "neutral" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
413
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
414
|
+
/**
|
|
415
|
+
* Alert — an inline status message. Pass `title`, `description`, an optional
|
|
416
|
+
* leading `icon`, and optional `actions`; there are no sub-components to
|
|
417
|
+
* assemble. For a fully custom body, use `children` instead of `description`.
|
|
418
|
+
*
|
|
419
|
+
* <Alert variant="info" icon={<Info />} title="Heads up"
|
|
420
|
+
* description="Your trial ends in 5 days." />
|
|
421
|
+
*/
|
|
422
|
+
interface AlertProps extends Omit<NoStyle<React.HTMLAttributes<HTMLDivElement>>, 'title'>, VariantProps<typeof alertVariants> {
|
|
423
|
+
title?: React.ReactNode;
|
|
424
|
+
description?: React.ReactNode;
|
|
425
|
+
/** Leading status icon (a lucide element). Inherits the variant hue. */
|
|
426
|
+
icon?: React.ReactNode;
|
|
427
|
+
/** Trailing actions — typically buttons or links. */
|
|
428
|
+
actions?: React.ReactNode;
|
|
429
|
+
}
|
|
430
|
+
declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
|
|
431
|
+
|
|
432
|
+
declare const Switch: React.ForwardRefExoticComponent<NoStyle<Omit<SwitchPrimitives.SwitchProps & React.RefAttributes<HTMLButtonElement>, "ref">> & React.RefAttributes<HTMLButtonElement>>;
|
|
433
|
+
|
|
434
|
+
declare const Checkbox: React.ForwardRefExoticComponent<NoStyle<Omit<CheckboxPrimitive.CheckboxProps & React.RefAttributes<HTMLButtonElement>, "ref">> & React.RefAttributes<HTMLButtonElement>>;
|
|
435
|
+
|
|
436
|
+
declare const RadioGroup: React.ForwardRefExoticComponent<NoStyle<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
437
|
+
declare const RadioGroupItem: React.ForwardRefExoticComponent<NoStyle<Omit<RadioGroupPrimitive.RadioGroupItemProps & React.RefAttributes<HTMLButtonElement>, "ref">> & React.RefAttributes<HTMLButtonElement>>;
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Tabs — pass an `items` array for the common case (the component renders the
|
|
441
|
+
* list, triggers, and panels for you), or compose `TabsList`/`TabsTrigger`/
|
|
442
|
+
* `TabsContent` by hand for full control.
|
|
443
|
+
*
|
|
444
|
+
* <Tabs defaultValue="overview" items={[
|
|
445
|
+
* { value: 'overview', label: 'Overview', content: <Overview /> },
|
|
446
|
+
* { value: 'usage', label: 'Usage', content: <Usage /> },
|
|
447
|
+
* ]} />
|
|
448
|
+
*/
|
|
449
|
+
interface TabItem {
|
|
450
|
+
value: string;
|
|
451
|
+
label: React.ReactNode;
|
|
452
|
+
content: React.ReactNode;
|
|
453
|
+
disabled?: boolean;
|
|
454
|
+
}
|
|
455
|
+
interface TabsProps extends NoStyle<React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>> {
|
|
456
|
+
/** Declarative tabs. Omit to compose the primitives as children instead. */
|
|
457
|
+
items?: TabItem[];
|
|
458
|
+
}
|
|
459
|
+
declare const Tabs: React.ForwardRefExoticComponent<TabsProps & React.RefAttributes<HTMLDivElement>>;
|
|
460
|
+
declare const TabsList: React.ForwardRefExoticComponent<NoStyle<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
461
|
+
declare const TabsTrigger: React.ForwardRefExoticComponent<NoStyle<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref">> & React.RefAttributes<HTMLButtonElement>>;
|
|
462
|
+
declare const TabsContent: React.ForwardRefExoticComponent<NoStyle<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
463
|
+
|
|
464
|
+
declare const TooltipProvider: React.FC<TooltipPrimitive.TooltipProviderProps>;
|
|
465
|
+
declare const Tooltip: React.FC<TooltipPrimitive.TooltipProps>;
|
|
466
|
+
declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
467
|
+
declare const TooltipContent: React.ForwardRefExoticComponent<NoStyle<Omit<TooltipPrimitive.TooltipContentProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
468
|
+
|
|
469
|
+
declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
470
|
+
declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
|
|
471
|
+
/**
|
|
472
|
+
* Select — pass an `options` array for the common case (the component renders
|
|
473
|
+
* the trigger, value, and items), or compose `SelectTrigger`/`SelectContent`/
|
|
474
|
+
* `SelectItem` by hand for groups, labels, or custom triggers. Value props
|
|
475
|
+
* (`value`/`defaultValue`/`onValueChange`) pass through to the Radix root.
|
|
476
|
+
*
|
|
477
|
+
* <Select placeholder="Pick one" options={[
|
|
478
|
+
* { value: 'a', label: 'Apple' },
|
|
479
|
+
* { value: 'b', label: 'Banana' },
|
|
480
|
+
* ]} />
|
|
481
|
+
*/
|
|
482
|
+
interface SelectOption {
|
|
483
|
+
value: string;
|
|
484
|
+
label: React.ReactNode;
|
|
485
|
+
disabled?: boolean;
|
|
486
|
+
}
|
|
487
|
+
interface SelectProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Root> {
|
|
488
|
+
/** Declarative options. Omit to compose the primitives as children instead. */
|
|
489
|
+
options?: SelectOption[];
|
|
490
|
+
placeholder?: string;
|
|
491
|
+
/** Error state — red trigger outline + aria-invalid. Usually set by FormField. */
|
|
492
|
+
invalid?: boolean;
|
|
493
|
+
/** Forwarded to the trigger so FormField can wire label/description/error. */
|
|
494
|
+
id?: string;
|
|
495
|
+
'aria-describedby'?: string;
|
|
496
|
+
}
|
|
497
|
+
declare function Select({ options, placeholder, invalid, id, children, ...props }: SelectProps): React.JSX.Element;
|
|
498
|
+
declare const SelectTrigger: React.ForwardRefExoticComponent<NoStyle<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref">> & {
|
|
499
|
+
invalid?: boolean;
|
|
500
|
+
} & React.RefAttributes<HTMLButtonElement>>;
|
|
501
|
+
declare const SelectContent: React.ForwardRefExoticComponent<NoStyle<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
502
|
+
declare const SelectLabel: React.ForwardRefExoticComponent<NoStyle<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
503
|
+
declare const SelectItem: React.ForwardRefExoticComponent<NoStyle<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Autocomplete — a searchable single-select combobox. Type to filter; arrow keys
|
|
507
|
+
* move the highlight, Enter selects, Escape closes. Controlled via
|
|
508
|
+
* `value`/`onValueChange`. Positioning/portalling come from the shared Radix
|
|
509
|
+
* popper (same engine as Select/Tooltip/Popover); the combobox logic and
|
|
510
|
+
* `listbox`/`option` ARIA are ours.
|
|
511
|
+
*/
|
|
512
|
+
interface AutocompleteOption {
|
|
513
|
+
value: string;
|
|
514
|
+
label: string;
|
|
515
|
+
}
|
|
516
|
+
interface AutocompleteProps {
|
|
517
|
+
options: AutocompleteOption[];
|
|
518
|
+
value?: string | null;
|
|
519
|
+
onValueChange?: (value: string | null) => void;
|
|
520
|
+
placeholder?: string;
|
|
521
|
+
emptyText?: string;
|
|
522
|
+
disabled?: boolean;
|
|
523
|
+
id?: string;
|
|
524
|
+
/** Error state — red field outline + aria-invalid. Usually set by FormField. */
|
|
525
|
+
invalid?: boolean;
|
|
526
|
+
'aria-describedby'?: string;
|
|
527
|
+
}
|
|
528
|
+
declare function Autocomplete({ options, value, onValueChange, placeholder, emptyText, disabled, id, invalid, 'aria-describedby': ariaDescribedBy, }: AutocompleteProps): React.JSX.Element;
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* Modal — the low-level, fully composable overlay primitive (Radix Dialog under
|
|
532
|
+
* the hood). Compose freely: `Modal > ModalTrigger + ModalContent`. For the
|
|
533
|
+
* common title/description/actions case, reach for `Dialog`, the props-based
|
|
534
|
+
* convenience built on this — there are no header/title/footer sub-components.
|
|
535
|
+
*/
|
|
536
|
+
declare const Modal: React.FC<DialogPrimitive.DialogProps>;
|
|
537
|
+
declare const ModalTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
538
|
+
declare const ModalClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
539
|
+
declare const ModalPortal: React.FC<DialogPrimitive.DialogPortalProps>;
|
|
540
|
+
declare const ModalOverlay: React.ForwardRefExoticComponent<NoStyle<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
541
|
+
declare const modalContent: (props?: ({
|
|
542
|
+
size?: "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
543
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
544
|
+
interface ModalContentProps extends NoStyle<React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>>, VariantProps<typeof modalContent> {
|
|
545
|
+
/** Hide the default corner close button. */
|
|
546
|
+
hideClose?: boolean;
|
|
547
|
+
}
|
|
548
|
+
declare const ModalContent: React.ForwardRefExoticComponent<ModalContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* Dialog — the opinionated, props-based convenience built on `Modal`. Pass
|
|
552
|
+
* `title`, `description`, and `actions` (buttons) as nodes; body goes in
|
|
553
|
+
* `children`. There are no header/title/footer sub-components to assemble — for
|
|
554
|
+
* full control over structure, drop down to the `Modal` primitives directly.
|
|
555
|
+
*
|
|
556
|
+
* <Dialog
|
|
557
|
+
* trigger={<Button>Delete</Button>}
|
|
558
|
+
* title="Delete project?"
|
|
559
|
+
* description="This can't be undone."
|
|
560
|
+
* actions={<><Button variant="secondary">Cancel</Button><Button variant="destructive">Delete</Button></>}
|
|
561
|
+
* />
|
|
562
|
+
*/
|
|
563
|
+
interface DialogProps {
|
|
564
|
+
title: React.ReactNode;
|
|
565
|
+
description?: React.ReactNode;
|
|
566
|
+
/** Footer content — typically buttons. */
|
|
567
|
+
actions?: React.ReactNode;
|
|
568
|
+
/** The element that opens the dialog. Omit for fully controlled use. */
|
|
569
|
+
trigger?: React.ReactNode;
|
|
570
|
+
children?: React.ReactNode;
|
|
571
|
+
size?: ModalContentProps['size'];
|
|
572
|
+
open?: boolean;
|
|
573
|
+
defaultOpen?: boolean;
|
|
574
|
+
onOpenChange?: (open: boolean) => void;
|
|
575
|
+
}
|
|
576
|
+
declare function Dialog({ title, description, actions, trigger, children, size, open, defaultOpen, onOpenChange, }: DialogProps): React.JSX.Element;
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Pagination — controlled page navigation. `page` is 1-based; `count` is the
|
|
580
|
+
* total number of pages. Renders first/last, a window of siblings around the
|
|
581
|
+
* current page, and ellipses. Emits `onPageChange`.
|
|
582
|
+
*/
|
|
583
|
+
interface PaginationProps extends NoStyle<Omit<React.HTMLAttributes<HTMLElement>, 'onChange'>> {
|
|
584
|
+
page: number;
|
|
585
|
+
count: number;
|
|
586
|
+
onPageChange: (page: number) => void;
|
|
587
|
+
siblingCount?: number;
|
|
588
|
+
}
|
|
589
|
+
declare function Pagination({ page, count, onPageChange, siblingCount, ...props }: PaginationProps): React.JSX.Element;
|
|
590
|
+
|
|
591
|
+
/**
|
|
592
|
+
* Stepper — progress through a sequence of steps. `activeStep` is the 0-based
|
|
593
|
+
* index of the current step; earlier steps render as completed (✓). Horizontal
|
|
594
|
+
* by default; pass `orientation="vertical"` for a stacked flow.
|
|
595
|
+
*/
|
|
596
|
+
interface Step {
|
|
597
|
+
label: string;
|
|
598
|
+
description?: string;
|
|
599
|
+
}
|
|
600
|
+
interface StepperProps extends NoStyle<React.HTMLAttributes<HTMLOListElement>> {
|
|
601
|
+
steps: Step[];
|
|
602
|
+
activeStep: number;
|
|
603
|
+
orientation?: 'horizontal' | 'vertical';
|
|
604
|
+
}
|
|
605
|
+
declare function Stepper({ steps, activeStep, orientation, ...props }: StepperProps): React.JSX.Element;
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* Toast / Snackbar — a transient message. Call `toast({...})` from anywhere
|
|
609
|
+
* (event handlers, effects, outside React), and render `<Toaster />` once near
|
|
610
|
+
* the app root. Text stays the normal foreground; only the icon carries the
|
|
611
|
+
* status hue (matching Alert).
|
|
612
|
+
*/
|
|
613
|
+
type ToastVariant = 'neutral' | 'success' | 'error' | 'warning' | 'info';
|
|
614
|
+
interface ToastOptions {
|
|
615
|
+
title?: React.ReactNode;
|
|
616
|
+
description?: React.ReactNode;
|
|
617
|
+
variant?: ToastVariant;
|
|
618
|
+
duration?: number;
|
|
619
|
+
action?: React.ReactNode;
|
|
620
|
+
}
|
|
621
|
+
declare function toast(options: ToastOptions): number;
|
|
622
|
+
declare function dismissToast(id: number): void;
|
|
623
|
+
declare function Toaster(): React.ReactPortal | null;
|
|
624
|
+
|
|
625
|
+
/**
|
|
626
|
+
* Accordion — pass an `items` array for the common case (the component renders
|
|
627
|
+
* each item, trigger, and panel), or compose `AccordionItem`/`AccordionTrigger`/
|
|
628
|
+
* `AccordionContent` by hand. `type`/`collapsible`/`defaultValue` pass through
|
|
629
|
+
* to the underlying Radix root.
|
|
630
|
+
*
|
|
631
|
+
* <Accordion type="single" collapsible items={[
|
|
632
|
+
* { value: 'a', trigger: 'What is Windforge?', content: <p>…</p> },
|
|
633
|
+
* ]} />
|
|
634
|
+
*/
|
|
635
|
+
interface AccordionItemData {
|
|
636
|
+
value: string;
|
|
637
|
+
trigger: React.ReactNode;
|
|
638
|
+
content: React.ReactNode;
|
|
639
|
+
disabled?: boolean;
|
|
640
|
+
}
|
|
641
|
+
type AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root> & {
|
|
642
|
+
/** Declarative items. Omit to compose the primitives as children instead. */
|
|
643
|
+
items?: AccordionItemData[];
|
|
644
|
+
};
|
|
645
|
+
declare const Accordion: React.ForwardRefExoticComponent<AccordionProps & React.RefAttributes<HTMLDivElement>>;
|
|
646
|
+
declare const AccordionItem: React.ForwardRefExoticComponent<NoStyle<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
647
|
+
declare const AccordionTrigger: React.ForwardRefExoticComponent<NoStyle<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref">> & React.RefAttributes<HTMLButtonElement>>;
|
|
648
|
+
declare const AccordionContent: React.ForwardRefExoticComponent<NoStyle<Omit<AccordionPrimitive.AccordionContentProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
649
|
+
|
|
650
|
+
declare const Avatar: React.ForwardRefExoticComponent<NoStyle<Omit<AvatarPrimitive.AvatarProps & React.RefAttributes<HTMLSpanElement>, "ref">> & VariantProps<(props?: ({
|
|
651
|
+
size?: "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
652
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLSpanElement>>;
|
|
653
|
+
declare const AvatarImage: React.ForwardRefExoticComponent<NoStyle<Omit<AvatarPrimitive.AvatarImageProps & React.RefAttributes<HTMLImageElement>, "ref">> & React.RefAttributes<HTMLImageElement>>;
|
|
654
|
+
declare const AvatarFallback: React.ForwardRefExoticComponent<NoStyle<Omit<AvatarPrimitive.AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>, "ref">> & React.RefAttributes<HTMLSpanElement>>;
|
|
655
|
+
|
|
656
|
+
declare const Progress: React.ForwardRefExoticComponent<NoStyle<Omit<ProgressPrimitive.ProgressProps & React.RefAttributes<HTMLDivElement>, "ref">> & {
|
|
657
|
+
value?: number;
|
|
658
|
+
/** Looping animation for work of unknown duration; ignores `value`. */
|
|
659
|
+
indeterminate?: boolean;
|
|
660
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
661
|
+
|
|
662
|
+
declare const Slider: React.ForwardRefExoticComponent<NoStyle<Omit<SliderPrimitive.SliderProps & React.RefAttributes<HTMLSpanElement>, "ref">> & React.RefAttributes<HTMLSpanElement>>;
|
|
663
|
+
|
|
664
|
+
declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
|
|
665
|
+
declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
666
|
+
declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
|
|
667
|
+
declare const PopoverContent: React.ForwardRefExoticComponent<NoStyle<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
668
|
+
|
|
669
|
+
declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
670
|
+
declare const DropdownMenuGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
671
|
+
declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
|
|
672
|
+
declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
|
|
673
|
+
declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
674
|
+
declare const DropdownMenuContent: React.ForwardRefExoticComponent<NoStyle<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
675
|
+
declare const DropdownMenuItem: React.ForwardRefExoticComponent<NoStyle<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref">> & {
|
|
676
|
+
inset?: boolean;
|
|
677
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
678
|
+
declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<NoStyle<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
679
|
+
declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<NoStyle<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
680
|
+
declare const DropdownMenuLabel: React.ForwardRefExoticComponent<NoStyle<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref">> & {
|
|
681
|
+
inset?: boolean;
|
|
682
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
683
|
+
declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<NoStyle<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
684
|
+
declare function DropdownMenuShortcut({ ...props }: NoStyle<React.HTMLAttributes<HTMLSpanElement>>): React.JSX.Element;
|
|
685
|
+
declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<NoStyle<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref">> & {
|
|
686
|
+
inset?: boolean;
|
|
687
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
688
|
+
declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<NoStyle<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
689
|
+
/**
|
|
690
|
+
* DropdownMenu — pass a `trigger` and an `items` array for the common case (the
|
|
691
|
+
* component renders the content, items, labels, and separators), or compose the
|
|
692
|
+
* primitives (`DropdownMenuTrigger`/`DropdownMenuContent`/…) by hand for
|
|
693
|
+
* submenus, checkbox/radio groups, and other advanced layouts.
|
|
694
|
+
*
|
|
695
|
+
* <DropdownMenu trigger={<Button>Open</Button>} items={[
|
|
696
|
+
* { label: 'Profile', icon: <User />, shortcut: '⇧⌘P', onSelect: goProfile },
|
|
697
|
+
* { type: 'separator' },
|
|
698
|
+
* { label: 'Log out', onSelect: logout },
|
|
699
|
+
* ]} />
|
|
700
|
+
*/
|
|
701
|
+
type DropdownMenuItemData = {
|
|
702
|
+
type?: 'item';
|
|
703
|
+
label: React.ReactNode;
|
|
704
|
+
icon?: React.ReactNode;
|
|
705
|
+
shortcut?: string;
|
|
706
|
+
onSelect?: () => void;
|
|
707
|
+
disabled?: boolean;
|
|
708
|
+
} | {
|
|
709
|
+
type: 'separator';
|
|
710
|
+
} | {
|
|
711
|
+
type: 'label';
|
|
712
|
+
label: React.ReactNode;
|
|
713
|
+
};
|
|
714
|
+
interface DropdownMenuProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root> {
|
|
715
|
+
/** The element that opens the menu (rendered via asChild). */
|
|
716
|
+
trigger?: React.ReactNode;
|
|
717
|
+
/** Declarative items. Omit to compose the primitives as children instead. */
|
|
718
|
+
items?: DropdownMenuItemData[];
|
|
719
|
+
}
|
|
720
|
+
declare function DropdownMenu({ trigger, items, children, ...props }: DropdownMenuProps): React.JSX.Element;
|
|
721
|
+
|
|
722
|
+
declare const alignClass: {
|
|
723
|
+
readonly left: "text-left";
|
|
724
|
+
readonly center: "text-center";
|
|
725
|
+
readonly right: "text-right";
|
|
726
|
+
};
|
|
727
|
+
type Align$1 = keyof typeof alignClass;
|
|
728
|
+
/**
|
|
729
|
+
* Table — pass `columns` + `data` for the common case (the component renders the
|
|
730
|
+
* header, rows, and cells), or compose `TableHeader`/`TableRow`/`TableCell` by
|
|
731
|
+
* hand for full control. Each column's `accessor` is a row key or a render
|
|
732
|
+
* function for custom cells (badges, buttons, …).
|
|
733
|
+
*
|
|
734
|
+
* <Table
|
|
735
|
+
* columns={[
|
|
736
|
+
* { header: 'Name', accessor: 'name' },
|
|
737
|
+
* { header: 'Status', accessor: (r) => <Badge>{r.status}</Badge> },
|
|
738
|
+
* { header: 'Amount', accessor: 'amount', align: 'right' },
|
|
739
|
+
* ]}
|
|
740
|
+
* data={rows}
|
|
741
|
+
* />
|
|
742
|
+
*/
|
|
743
|
+
interface TableColumn<Row = Record<string, React.ReactNode>> {
|
|
744
|
+
header: React.ReactNode;
|
|
745
|
+
/** A key into the row, or a render function returning the cell content. */
|
|
746
|
+
accessor: keyof Row | ((row: Row) => React.ReactNode);
|
|
747
|
+
align?: Align$1;
|
|
748
|
+
}
|
|
749
|
+
interface TableProps<Row = Record<string, React.ReactNode>> extends NoStyle<React.HTMLAttributes<HTMLTableElement>> {
|
|
750
|
+
columns?: TableColumn<Row>[];
|
|
751
|
+
data?: readonly Row[];
|
|
752
|
+
caption?: React.ReactNode;
|
|
753
|
+
}
|
|
754
|
+
declare const Table: (<Row extends Record<string, React.ReactNode>>(props: TableProps<Row> & {
|
|
755
|
+
ref?: React.ForwardedRef<HTMLTableElement>;
|
|
756
|
+
}) => React.ReactElement) & {
|
|
757
|
+
displayName?: string;
|
|
758
|
+
};
|
|
759
|
+
declare const TableHeader: React.ForwardRefExoticComponent<NoStyle<React.HTMLAttributes<HTMLTableSectionElement>> & React.RefAttributes<HTMLTableSectionElement>>;
|
|
760
|
+
declare const TableBody: React.ForwardRefExoticComponent<NoStyle<React.HTMLAttributes<HTMLTableSectionElement>> & React.RefAttributes<HTMLTableSectionElement>>;
|
|
761
|
+
declare const TableFooter: React.ForwardRefExoticComponent<NoStyle<React.HTMLAttributes<HTMLTableSectionElement>> & React.RefAttributes<HTMLTableSectionElement>>;
|
|
762
|
+
declare const TableRow: React.ForwardRefExoticComponent<NoStyle<React.HTMLAttributes<HTMLTableRowElement>> & React.RefAttributes<HTMLTableRowElement>>;
|
|
763
|
+
declare const TableHead: React.ForwardRefExoticComponent<Omit<NoStyle<React.ThHTMLAttributes<HTMLTableCellElement>>, "align"> & {
|
|
764
|
+
align?: Align$1;
|
|
765
|
+
} & React.RefAttributes<HTMLTableCellElement>>;
|
|
766
|
+
declare const TableCell: React.ForwardRefExoticComponent<Omit<NoStyle<React.TdHTMLAttributes<HTMLTableCellElement>>, "align"> & {
|
|
767
|
+
align?: Align$1;
|
|
768
|
+
} & React.RefAttributes<HTMLTableCellElement>>;
|
|
769
|
+
declare const TableCaption: React.ForwardRefExoticComponent<NoStyle<React.HTMLAttributes<HTMLTableCaptionElement>> & React.RefAttributes<HTMLTableCaptionElement>>;
|
|
770
|
+
|
|
771
|
+
/**
|
|
772
|
+
* DataTable — the batteries-included table: column sorting, row selection, and
|
|
773
|
+
* optional client-side pagination, built on the Table primitives so it stays
|
|
774
|
+
* on-system. Pass `columns` + `data` + a `rowKey`; opt into `selectable` and
|
|
775
|
+
* `pageSize`. For a purely presentational table, use Table directly.
|
|
776
|
+
*
|
|
777
|
+
* <DataTable rowKey={(r) => r.id} selectable pageSize={10}
|
|
778
|
+
* columns={[
|
|
779
|
+
* { header: 'Name', accessor: 'name', sortable: true },
|
|
780
|
+
* { header: 'Amount', accessor: 'amount', align: 'right', sortable: true },
|
|
781
|
+
* ]}
|
|
782
|
+
* data={rows}
|
|
783
|
+
* />
|
|
784
|
+
*/
|
|
785
|
+
type Align = 'left' | 'center' | 'right';
|
|
786
|
+
interface DataTableColumn<Row> {
|
|
787
|
+
header: React.ReactNode;
|
|
788
|
+
/** A row key, or a render function returning the cell content. */
|
|
789
|
+
accessor: keyof Row | ((row: Row) => React.ReactNode);
|
|
790
|
+
align?: Align;
|
|
791
|
+
sortable?: boolean;
|
|
792
|
+
/** Sort value when `accessor` is a render function (or to sort by something else). */
|
|
793
|
+
sortAccessor?: (row: Row) => string | number;
|
|
794
|
+
}
|
|
795
|
+
interface DataTableProps<Row> {
|
|
796
|
+
columns: DataTableColumn<Row>[];
|
|
797
|
+
data: readonly Row[];
|
|
798
|
+
/** Stable id per row — required for selection and React keys. */
|
|
799
|
+
rowKey: (row: Row) => string;
|
|
800
|
+
caption?: React.ReactNode;
|
|
801
|
+
selectable?: boolean;
|
|
802
|
+
/** Controlled selection (ids). Omit for uncontrolled. */
|
|
803
|
+
selected?: string[];
|
|
804
|
+
onSelectedChange?: (ids: string[]) => void;
|
|
805
|
+
/** Enable client-side pagination at this page size. */
|
|
806
|
+
pageSize?: number;
|
|
807
|
+
/** Empty-state content when there are no rows. */
|
|
808
|
+
emptyState?: React.ReactNode;
|
|
809
|
+
}
|
|
810
|
+
declare function DataTable<Row>({ columns, data, rowKey, caption, selectable, selected, onSelectedChange, pageSize, emptyState, }: DataTableProps<Row>): React.JSX.Element;
|
|
811
|
+
|
|
812
|
+
/**
|
|
813
|
+
* Breadcrumb — the path to the current page. Pass an `items` array; the last
|
|
814
|
+
* item renders as the (non-link) current page, the rest as links. `label` is a
|
|
815
|
+
* ReactNode, so a crumb can carry an icon. Override `separator` to change the
|
|
816
|
+
* glyph between crumbs.
|
|
817
|
+
*
|
|
818
|
+
* <Breadcrumb items={[
|
|
819
|
+
* { label: 'Home', href: '/' },
|
|
820
|
+
* { label: 'Projects', href: '/projects' },
|
|
821
|
+
* { label: 'Windforge' },
|
|
822
|
+
* ]} />
|
|
823
|
+
*/
|
|
824
|
+
interface BreadcrumbItemData {
|
|
825
|
+
label: React.ReactNode;
|
|
826
|
+
/** Link target. Omit on the final crumb (the current page). */
|
|
827
|
+
href?: string;
|
|
828
|
+
}
|
|
829
|
+
interface BreadcrumbProps extends NoStyle<React.ComponentPropsWithoutRef<'nav'>> {
|
|
830
|
+
items: BreadcrumbItemData[];
|
|
831
|
+
/** Separator between crumbs; defaults to a chevron. */
|
|
832
|
+
separator?: React.ReactNode;
|
|
833
|
+
}
|
|
834
|
+
declare const Breadcrumb: React.ForwardRefExoticComponent<BreadcrumbProps & React.RefAttributes<HTMLElement>>;
|
|
835
|
+
|
|
836
|
+
declare const Sheet: React.FC<DialogPrimitive.DialogProps>;
|
|
837
|
+
declare const SheetTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
838
|
+
declare const SheetClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
839
|
+
declare const SheetPortal: React.FC<DialogPrimitive.DialogPortalProps>;
|
|
840
|
+
declare const sheetVariants: (props?: ({
|
|
841
|
+
side?: "left" | "right" | "top" | "bottom" | null | undefined;
|
|
842
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
843
|
+
/**
|
|
844
|
+
* SheetContent — the sliding panel. Pass `title`, `description`, and `footer`
|
|
845
|
+
* actions as props (no header/title/footer sub-components to assemble); the
|
|
846
|
+
* body goes in `children`. `title`/`description` render as accessible Radix
|
|
847
|
+
* Dialog nodes.
|
|
848
|
+
*/
|
|
849
|
+
interface SheetContentProps extends Omit<NoStyle<React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>>, 'title'>, VariantProps<typeof sheetVariants> {
|
|
850
|
+
title?: React.ReactNode;
|
|
851
|
+
description?: React.ReactNode;
|
|
852
|
+
/** Footer content pinned to the bottom — typically buttons. */
|
|
853
|
+
footer?: React.ReactNode;
|
|
854
|
+
}
|
|
855
|
+
declare const SheetContent: React.ForwardRefExoticComponent<SheetContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
856
|
+
|
|
857
|
+
/**
|
|
858
|
+
* MultiSelect — a searchable multi-value combobox. Selected values render as
|
|
859
|
+
* removable tags in the field; the dropdown filters as you type and toggles
|
|
860
|
+
* options with the keyboard (↑/↓ move, Enter toggles, Backspace removes the last
|
|
861
|
+
* tag on an empty query). Controlled via `value`/`onValueChange`. Shares the Radix
|
|
862
|
+
* popper and floating-panel recipe with Select/Autocomplete.
|
|
863
|
+
*/
|
|
864
|
+
interface MultiSelectOption {
|
|
865
|
+
value: string;
|
|
866
|
+
label: string;
|
|
867
|
+
}
|
|
868
|
+
interface MultiSelectProps {
|
|
869
|
+
options: MultiSelectOption[];
|
|
870
|
+
value: string[];
|
|
871
|
+
onValueChange: (value: string[]) => void;
|
|
872
|
+
placeholder?: string;
|
|
873
|
+
emptyText?: string;
|
|
874
|
+
disabled?: boolean;
|
|
875
|
+
invalid?: boolean;
|
|
876
|
+
id?: string;
|
|
877
|
+
'aria-describedby'?: string;
|
|
878
|
+
}
|
|
879
|
+
declare function MultiSelect({ options, value, onValueChange, placeholder, emptyText, disabled, invalid, id, 'aria-describedby': ariaDescribedBy, }: MultiSelectProps): React.JSX.Element;
|
|
880
|
+
|
|
881
|
+
/**
|
|
882
|
+
* Command — a fast, filterable command menu / palette (cmdk under the hood),
|
|
883
|
+
* token-styled to match the system. Compose `Command` > `CommandInput` +
|
|
884
|
+
* `CommandList` (`CommandEmpty`/`CommandGroup`/`CommandItem`/`CommandSeparator`),
|
|
885
|
+
* or drop the whole thing into `CommandDialog` for a ⌘K palette.
|
|
886
|
+
*
|
|
887
|
+
* <CommandDialog open={open} onOpenChange={setOpen}>
|
|
888
|
+
* <CommandInput placeholder="Type a command…" />
|
|
889
|
+
* <CommandList>
|
|
890
|
+
* <CommandEmpty>No results.</CommandEmpty>
|
|
891
|
+
* <CommandGroup heading="Actions">
|
|
892
|
+
* <CommandItem onSelect={…}>New file</CommandItem>
|
|
893
|
+
* </CommandGroup>
|
|
894
|
+
* </CommandList>
|
|
895
|
+
* </CommandDialog>
|
|
896
|
+
*/
|
|
897
|
+
declare const Command: React.ForwardRefExoticComponent<NoStyle<Omit<{
|
|
898
|
+
children?: React.ReactNode;
|
|
899
|
+
} & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
900
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
901
|
+
} & {
|
|
902
|
+
asChild?: boolean;
|
|
903
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
904
|
+
label?: string;
|
|
905
|
+
shouldFilter?: boolean;
|
|
906
|
+
filter?: (value: string, search: string, keywords?: string[]) => number;
|
|
907
|
+
defaultValue?: string;
|
|
908
|
+
value?: string;
|
|
909
|
+
onValueChange?: (value: string) => void;
|
|
910
|
+
loop?: boolean;
|
|
911
|
+
disablePointerSelection?: boolean;
|
|
912
|
+
vimBindings?: boolean;
|
|
913
|
+
} & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
914
|
+
declare const CommandInput: React.ForwardRefExoticComponent<NoStyle<Omit<Omit<Pick<Pick<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "key" | keyof React.InputHTMLAttributes<HTMLInputElement>> & {
|
|
915
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
916
|
+
} & {
|
|
917
|
+
asChild?: boolean;
|
|
918
|
+
}, "asChild" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "value" | "type"> & {
|
|
919
|
+
value?: string;
|
|
920
|
+
onValueChange?: (search: string) => void;
|
|
921
|
+
} & React.RefAttributes<HTMLInputElement>, "ref">> & React.RefAttributes<HTMLInputElement>>;
|
|
922
|
+
declare const CommandList: React.ForwardRefExoticComponent<NoStyle<Omit<{
|
|
923
|
+
children?: React.ReactNode;
|
|
924
|
+
} & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
925
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
926
|
+
} & {
|
|
927
|
+
asChild?: boolean;
|
|
928
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
929
|
+
label?: string;
|
|
930
|
+
} & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
931
|
+
declare const CommandEmpty: React.ForwardRefExoticComponent<NoStyle<Omit<{
|
|
932
|
+
children?: React.ReactNode;
|
|
933
|
+
} & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
934
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
935
|
+
} & {
|
|
936
|
+
asChild?: boolean;
|
|
937
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>> & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
938
|
+
declare const CommandGroup: React.ForwardRefExoticComponent<NoStyle<Omit<{
|
|
939
|
+
children?: React.ReactNode;
|
|
940
|
+
} & Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
941
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
942
|
+
} & {
|
|
943
|
+
asChild?: boolean;
|
|
944
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "heading" | "value"> & {
|
|
945
|
+
heading?: React.ReactNode;
|
|
946
|
+
value?: string;
|
|
947
|
+
forceMount?: boolean;
|
|
948
|
+
} & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
949
|
+
declare const CommandSeparator: React.ForwardRefExoticComponent<NoStyle<Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
950
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
951
|
+
} & {
|
|
952
|
+
asChild?: boolean;
|
|
953
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
954
|
+
alwaysRender?: boolean;
|
|
955
|
+
} & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
956
|
+
declare const CommandItem: React.ForwardRefExoticComponent<NoStyle<Omit<{
|
|
957
|
+
children?: React.ReactNode;
|
|
958
|
+
} & Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
959
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
960
|
+
} & {
|
|
961
|
+
asChild?: boolean;
|
|
962
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "onSelect" | "disabled" | "value"> & {
|
|
963
|
+
disabled?: boolean;
|
|
964
|
+
onSelect?: (value: string) => void;
|
|
965
|
+
value?: string;
|
|
966
|
+
keywords?: string[];
|
|
967
|
+
forceMount?: boolean;
|
|
968
|
+
} & React.RefAttributes<HTMLDivElement>, "ref">> & React.RefAttributes<HTMLDivElement>>;
|
|
969
|
+
declare function CommandShortcut({ ...props }: NoStyle<React.HTMLAttributes<HTMLSpanElement>>): React.JSX.Element;
|
|
970
|
+
interface CommandDialogProps {
|
|
971
|
+
open?: boolean;
|
|
972
|
+
onOpenChange?: (open: boolean) => void;
|
|
973
|
+
children: React.ReactNode;
|
|
974
|
+
/** Accessible label for the palette dialog. */
|
|
975
|
+
label?: string;
|
|
976
|
+
}
|
|
977
|
+
declare function CommandDialog({ open, onOpenChange, children, label }: CommandDialogProps): React.JSX.Element;
|
|
978
|
+
|
|
979
|
+
/**
|
|
980
|
+
* Calendar — the date grid (react-day-picker), styled entirely from tokens (no
|
|
981
|
+
* vendor CSS imported). Use it directly for inline pickers and ranges, or via the
|
|
982
|
+
* DatePicker (which pairs it with a Popover + field). Pass any react-day-picker
|
|
983
|
+
* prop — `mode="single" | "range" | "multiple"`, `selected`, `onSelect`, etc.
|
|
984
|
+
*/
|
|
985
|
+
type CalendarProps = React.ComponentProps<typeof DayPicker>;
|
|
986
|
+
declare function Calendar({ showOutsideDays, classNames, ...props }: CalendarProps): React.JSX.Element;
|
|
987
|
+
declare namespace Calendar {
|
|
988
|
+
var displayName: string;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
/**
|
|
992
|
+
* DatePicker — a single-date field: a token-styled trigger that opens the Calendar
|
|
993
|
+
* in a Popover. Controlled via `value`/`onValueChange`. For ranges or multi-select,
|
|
994
|
+
* use the Calendar directly inside a Popover.
|
|
995
|
+
*
|
|
996
|
+
* <DatePicker value={date} onValueChange={setDate} />
|
|
997
|
+
*/
|
|
998
|
+
interface DatePickerProps {
|
|
999
|
+
value?: Date;
|
|
1000
|
+
onValueChange?: (date?: Date) => void;
|
|
1001
|
+
placeholder?: string;
|
|
1002
|
+
disabled?: boolean;
|
|
1003
|
+
invalid?: boolean;
|
|
1004
|
+
id?: string;
|
|
1005
|
+
'aria-describedby'?: string;
|
|
1006
|
+
/** Intl format for the displayed value. Default { dateStyle: 'medium' }. */
|
|
1007
|
+
formatOptions?: Intl.DateTimeFormatOptions;
|
|
1008
|
+
}
|
|
1009
|
+
declare function DatePicker({ value, onValueChange, placeholder, disabled, invalid, id, 'aria-describedby': ariaDescribedBy, formatOptions, }: DatePickerProps): React.JSX.Element;
|
|
1010
|
+
|
|
1011
|
+
/**
|
|
1012
|
+
* Chart — a token-driven ECharts surface. Pass a standard ECharts `option`; the
|
|
1013
|
+
* series palette, axes, grid, tooltip, and fonts are themed from the live `--wf-*`
|
|
1014
|
+
* tokens, so charts re-skin with the brand and flip with light/dark automatically
|
|
1015
|
+
* (no ThemeProvider required — it watches the document root). Auto-resizes.
|
|
1016
|
+
*
|
|
1017
|
+
* <Chart option={{ xAxis: { type: 'category', data: months },
|
|
1018
|
+
* yAxis: { type: 'value' },
|
|
1019
|
+
* series: [{ type: 'line', data: revenue }] }} />
|
|
1020
|
+
*
|
|
1021
|
+
* ECharts is the one canvas dependency; everything else stays DOM + tokens.
|
|
1022
|
+
*/
|
|
1023
|
+
interface ChartProps {
|
|
1024
|
+
/** A standard ECharts option object. */
|
|
1025
|
+
option: EChartsCoreOption;
|
|
1026
|
+
/** Pixel or CSS height (width always fills the container). Default 320. */
|
|
1027
|
+
height?: number | string;
|
|
1028
|
+
/** Replace the previous option wholesale instead of merging. Default true. */
|
|
1029
|
+
notMerge?: boolean;
|
|
1030
|
+
/** ECharts events to bind, e.g. `{ click: (p) => … }`. */
|
|
1031
|
+
onEvents?: Record<string, (params: unknown) => void>;
|
|
1032
|
+
}
|
|
1033
|
+
declare function Chart({ option, height, notMerge, onEvents }: ChartProps): React.JSX.Element;
|
|
1034
|
+
|
|
1035
|
+
interface ForgeIconProps extends React.SVGProps<SVGSVGElement> {
|
|
1036
|
+
}
|
|
1037
|
+
declare const ForgeIcon: React.ForwardRefExoticComponent<Omit<ForgeIconProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
1038
|
+
interface WindforgeLogoProps {
|
|
1039
|
+
className?: string;
|
|
1040
|
+
/** Hide the wordmark, show only the mark. */
|
|
1041
|
+
markOnly?: boolean;
|
|
1042
|
+
}
|
|
1043
|
+
declare function WindforgeLogo({ className, markOnly }: WindforgeLogoProps): React.JSX.Element;
|
|
1044
|
+
|
|
1045
|
+
interface SVGIconProps extends React.SVGProps<SVGSVGElement> {
|
|
1046
|
+
/** SVG viewBox — defaults to the 24×24 grid lucide draws on, so custom icons
|
|
1047
|
+
* line up with the rest of the set. */
|
|
1048
|
+
viewBox?: string;
|
|
1049
|
+
/** Accessible label. Omit for a purely decorative icon (rendered aria-hidden). */
|
|
1050
|
+
label?: string;
|
|
1051
|
+
}
|
|
1052
|
+
/**
|
|
1053
|
+
* SVGIcon — render a custom icon with the same conventions as the supported
|
|
1054
|
+
* lucide set: a 24×24 viewBox, 2px round strokes painted in `currentColor`, and
|
|
1055
|
+
* sizing through h-/w- utilities. Pass the shape as children; override `stroke`,
|
|
1056
|
+
* `fill`, or `strokeWidth` for a filled or heavier glyph.
|
|
1057
|
+
*
|
|
1058
|
+
* <SVGIcon label="Spark" className="h-5 w-5 text-brand">
|
|
1059
|
+
* <path d="M12 2 4 7v10l8 5 8-5V7z" />
|
|
1060
|
+
* </SVGIcon>
|
|
1061
|
+
*/
|
|
1062
|
+
declare const SVGIcon: React.ForwardRefExoticComponent<Omit<SVGIconProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
1063
|
+
|
|
1064
|
+
/**
|
|
1065
|
+
* COMMONLY-USED LUCIDE ICONS — a reference selection, grouped by purpose.
|
|
1066
|
+
*
|
|
1067
|
+
* lucide-react is the design system's supported icon library; consumers import
|
|
1068
|
+
* icons directly from it. These are NOT re-exported as Windforge icons — this
|
|
1069
|
+
* map just powers a browsable, on-brand subset on the Iconography page (the ones
|
|
1070
|
+
* the system actually uses plus the obvious gaps), with an escape hatch to the
|
|
1071
|
+
* full library for the long tail. Object-shorthand keys keep each entry's name in
|
|
1072
|
+
* sync with its component, and the explicit imports keep this list tree-shakeable.
|
|
1073
|
+
*/
|
|
1074
|
+
declare const commonIconGroups: {
|
|
1075
|
+
label: string;
|
|
1076
|
+
icons: Record<string, LucideIcon>;
|
|
1077
|
+
}[];
|
|
1078
|
+
/** The flat name → component map across all groups. */
|
|
1079
|
+
declare const commonIcons: Record<string, LucideIcon>;
|
|
1080
|
+
|
|
1081
|
+
type ColorMode = 'light' | 'dark' | 'system';
|
|
1082
|
+
type ResolvedMode = 'light' | 'dark';
|
|
1083
|
+
/**
|
|
1084
|
+
* Inline this in <head> BEFORE the app bundle to set the color mode on first
|
|
1085
|
+
* paint and avoid a flash of the wrong theme (SSR/SPA alike). Mirrors the mode
|
|
1086
|
+
* resolution below; reads the persisted `wf-mode`, falls back to system.
|
|
1087
|
+
*
|
|
1088
|
+
* <script dangerouslySetInnerHTML={{ __html: themeInitScript() }} />
|
|
1089
|
+
*/
|
|
1090
|
+
declare function themeInitScript(storageKey?: string): string;
|
|
1091
|
+
interface ThemeContextValue {
|
|
1092
|
+
mode: ColorMode;
|
|
1093
|
+
resolvedMode: ResolvedMode;
|
|
1094
|
+
setMode: (mode: ColorMode) => void;
|
|
1095
|
+
cycleMode: () => void;
|
|
1096
|
+
}
|
|
1097
|
+
interface ThemeProviderProps {
|
|
1098
|
+
children: React.ReactNode;
|
|
1099
|
+
defaultMode?: ColorMode;
|
|
1100
|
+
/**
|
|
1101
|
+
* Runtime token overrides — a `--wf-*` → value map applied as custom properties
|
|
1102
|
+
* on the document root, so the whole app (including portaled overlays) re-skins
|
|
1103
|
+
* with no rebuild. Pass a function to stay mode-aware:
|
|
1104
|
+
* `tokens={(mode) => brandVars(ramp, mode)}`. For more than color, use
|
|
1105
|
+
* `themeVars({ brand, fontSans, radius, … }, mode)`. For a site's fixed identity,
|
|
1106
|
+
* prefer a static CSS `:root` override instead.
|
|
1107
|
+
*/
|
|
1108
|
+
tokens?: Record<string, string> | ((mode: ResolvedMode) => Record<string, string>);
|
|
1109
|
+
persist?: boolean;
|
|
1110
|
+
}
|
|
1111
|
+
declare function ThemeProvider({ children, defaultMode, tokens, persist }: ThemeProviderProps): React.JSX.Element;
|
|
1112
|
+
declare function useTheme(): ThemeContextValue;
|
|
1113
|
+
|
|
1114
|
+
interface AppShellContextValue {
|
|
1115
|
+
/** Toggle the sidebar — collapses it on desktop, opens/closes the drawer on mobile. */
|
|
1116
|
+
toggleNav: () => void;
|
|
1117
|
+
/** Close the mobile drawer (no-op on desktop). */
|
|
1118
|
+
closeNav: () => void;
|
|
1119
|
+
}
|
|
1120
|
+
/** Read the AppShell coordination handles. Returns null outside an AppShell. */
|
|
1121
|
+
declare const useAppShell: () => AppShellContextValue | null;
|
|
1122
|
+
interface AppShellProps {
|
|
1123
|
+
/** The top bar slot — typically an `<AppBar>`. Rendered inside the shell so it
|
|
1124
|
+
* can drive the nav via {@link useAppShell}. */
|
|
1125
|
+
header?: React.ReactNode;
|
|
1126
|
+
/** The side navigation slot — typically a `<SideNav>`. */
|
|
1127
|
+
sidebar?: React.ReactNode;
|
|
1128
|
+
children: React.ReactNode;
|
|
1129
|
+
fullBleed?: boolean;
|
|
1130
|
+
/** Whether the desktop sidebar starts expanded. Set `false` to open collapsed
|
|
1131
|
+
* — e.g. a personal site where the nav is secondary. The menu button (and
|
|
1132
|
+
* `useAppShell().toggleNav`) flips it. Defaults to `true`. */
|
|
1133
|
+
defaultNavOpen?: boolean;
|
|
1134
|
+
}
|
|
1135
|
+
/**
|
|
1136
|
+
* AppShell — the guaranteed-layout chrome: a fixed sidebar on desktop, a Sheet
|
|
1137
|
+
* drawer on mobile, a sticky bar, and a scrollable main. `header` and `sidebar`
|
|
1138
|
+
* are slots (their own components, `AppBar` and `SideNav`); AppShell only owns
|
|
1139
|
+
* the responsive frame and exposes toggle/close handles via {@link useAppShell}.
|
|
1140
|
+
*/
|
|
1141
|
+
declare function AppShell({ header, sidebar, children, fullBleed, defaultNavOpen }: AppShellProps): React.JSX.Element;
|
|
1142
|
+
|
|
1143
|
+
interface NavLeafItem {
|
|
1144
|
+
type?: 'item';
|
|
1145
|
+
label: string;
|
|
1146
|
+
path?: string;
|
|
1147
|
+
icon?: React.ReactNode;
|
|
1148
|
+
badge?: React.ReactNode;
|
|
1149
|
+
onClick?: () => void;
|
|
1150
|
+
disabled?: boolean;
|
|
1151
|
+
}
|
|
1152
|
+
interface NavGroupItem {
|
|
1153
|
+
type: 'group';
|
|
1154
|
+
label: string;
|
|
1155
|
+
icon?: React.ReactNode;
|
|
1156
|
+
children: NavItem[];
|
|
1157
|
+
defaultOpen?: boolean;
|
|
1158
|
+
}
|
|
1159
|
+
interface NavSectionItem {
|
|
1160
|
+
type: 'section';
|
|
1161
|
+
label: string;
|
|
1162
|
+
items: NavItem[];
|
|
1163
|
+
}
|
|
1164
|
+
interface NavDividerItem {
|
|
1165
|
+
type: 'divider';
|
|
1166
|
+
}
|
|
1167
|
+
type NavItem = NavLeafItem | NavGroupItem | NavSectionItem | NavDividerItem;
|
|
1168
|
+
interface SideNavProps {
|
|
1169
|
+
items: NavItem[];
|
|
1170
|
+
activePath?: string;
|
|
1171
|
+
onNavigate?: (path: string) => void;
|
|
1172
|
+
logo?: React.ReactNode;
|
|
1173
|
+
}
|
|
1174
|
+
declare function SideNav({ items, activePath, onNavigate, logo }: SideNavProps): React.JSX.Element;
|
|
1175
|
+
|
|
1176
|
+
declare const appBarVariants: (props?: ({
|
|
1177
|
+
variant?: "glass" | "solid" | null | undefined;
|
|
1178
|
+
color?: "surface" | "subtle" | "inset" | null | undefined;
|
|
1179
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1180
|
+
interface AppBarProps extends VariantProps<typeof appBarVariants> {
|
|
1181
|
+
title?: string;
|
|
1182
|
+
logo?: React.ReactNode;
|
|
1183
|
+
actions?: React.ReactNode;
|
|
1184
|
+
/** Override the menu-button handler. Inside an AppShell it defaults to toggling the nav. */
|
|
1185
|
+
onMenuClick?: () => void;
|
|
1186
|
+
}
|
|
1187
|
+
/**
|
|
1188
|
+
* ModeToggle — the light/dark/system switch, as a standalone control. Drop it
|
|
1189
|
+
* into an AppBar's `actions` (or anywhere else); it reads and cycles the theme
|
|
1190
|
+
* from the surrounding ThemeProvider.
|
|
1191
|
+
*/
|
|
1192
|
+
declare function ModeToggle(): React.JSX.Element;
|
|
1193
|
+
declare function AppBar({ title, logo, actions, onMenuClick, variant, color, }: AppBarProps): React.JSX.Element;
|
|
1194
|
+
|
|
1195
|
+
export { Accordion, AccordionContent, AccordionItem, type AccordionItemData, type AccordionProps, AccordionTrigger, Alert, type AlertProps, AppBar, type AppBarProps, AppShell, type AppShellProps, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Box, type BoxProps, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Button, ButtonGroup, type ButtonProps, Calendar, type CalendarProps, Card, type CardProps, Chart, type ChartProps, Checkbox, Chip, type ChipProps, CodeBlock, type CodeBlockProps, type ColorMode, Command, CommandDialog, type CommandDialogProps, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, type ComponentSpec, DataTable, type DataTableColumn, type DataTableProps, DatePicker, type DatePickerProps, Dialog, type DialogProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemData, DropdownMenuLabel, DropdownMenuPortal, type DropdownMenuProps, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ForgeIcon, type ForgeIconProps, FormField, type FormFieldProps, Grid, type GridProps, H1, H2, H3, H4, H5, H6, type HeadingProps, Input, type InputProps, Label, Link, type LinkProps, Modal, ModalClose, ModalContent, type ModalContentProps, ModalOverlay, ModalPortal, ModalTrigger, ModeToggle, MultiSelect, type MultiSelectOption, type MultiSelectProps, type NavDividerItem, type NavGroupItem, type NavItem, type NavLeafItem, type NavSectionItem, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, type ResolvedMode, SVGIcon, type SVGIconProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, type SelectOption, type SelectProps, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, type SheetContentProps, SheetPortal, SheetTrigger, SideNav, type SideNavProps, Skeleton, Slider, Stack, type StackProps, type Step, Stepper, type StepperProps, Switch, type TabItem, Table, TableBody, TableCaption, TableCell, type TableColumn, TableFooter, TableHead, TableHeader, type TableProps, TableRow, Tabs, TabsContent, TabsList, type TabsProps, TabsTrigger, Text, type TextProps, Textarea, type TextareaProps, ThemeProvider, type ThemeProviderProps, type ToastOptions, type ToastVariant, Toaster, ToggleButton, ToggleButtonGroup, type ToggleButtonGroupProps, type ToggleButtonProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, WindforgeLogo, type WindforgeLogoProps, badgeVariants, buttonVariants, catalog, chip as chipVariants, cn, commonIconGroups, commonIcons, dismissButton, dismissToast, floatingPanel, focusRing, focusRingField, focusRingInset, layoutVocabulary, link as linkVariants, menuItem, modalContent, overlayBackdrop, text as textVariants, themeInitScript, toast, useAppShell, useMediaQuery, useTheme };
|