@nextlyhq/ui 0.0.2-alpha.6 → 0.0.2-alpha.62
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/README.md +128 -23
- package/dist/color.cjs +193 -0
- package/dist/color.cjs.map +1 -0
- package/dist/color.d.cts +251 -0
- package/dist/color.d.ts +251 -0
- package/dist/color.mjs +179 -0
- package/dist/color.mjs.map +1 -0
- package/dist/index.cjs +3402 -1089
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1475 -315
- package/dist/index.d.ts +1475 -315
- package/dist/index.mjs +3137 -833
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +2 -0
- package/dist/styles.scoped.css +2 -0
- package/dist/tailwind-preset.cjs +153 -0
- package/dist/tailwind-preset.cjs.map +1 -0
- package/dist/tailwind-preset.d.cts +120 -0
- package/dist/tailwind-preset.d.ts +120 -0
- package/dist/tailwind-preset.mjs +148 -0
- package/dist/tailwind-preset.mjs.map +1 -0
- package/dist/theme.css +1249 -0
- package/dist/utils.cjs +13 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +19 -0
- package/dist/utils.d.ts +19 -0
- package/dist/utils.mjs +11 -0
- package/dist/utils.mjs.map +1 -0
- package/docs/plugin-ui-authoring.md +230 -0
- package/package.json +78 -17
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
2
2
|
import * as react from 'react';
|
|
3
|
-
import { ButtonHTMLAttributes, ComponentProps, TextareaHTMLAttributes, HTMLAttributes,
|
|
3
|
+
import { ButtonHTMLAttributes, ComponentProps, TextareaHTMLAttributes, HTMLAttributes, ReactNode, ComponentPropsWithoutRef } from 'react';
|
|
4
4
|
import * as class_variance_authority from 'class-variance-authority';
|
|
5
5
|
import { VariantProps } from 'class-variance-authority';
|
|
6
6
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
@@ -13,7 +13,7 @@ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
|
|
|
13
13
|
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
14
14
|
import { Content, Item, Root as Root$2, Trigger } from '@radix-ui/react-accordion';
|
|
15
15
|
import * as _radix_ui_react_tabs from '@radix-ui/react-tabs';
|
|
16
|
-
import { Content as Content$1,
|
|
16
|
+
import { Content as Content$1, Root as Root$3 } from '@radix-ui/react-tabs';
|
|
17
17
|
import * as _radix_ui_react_tooltip from '@radix-ui/react-tooltip';
|
|
18
18
|
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
19
19
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
@@ -24,8 +24,11 @@ import { Command as Command$1 } from 'cmdk';
|
|
|
24
24
|
import { LucideProps } from 'lucide-react';
|
|
25
25
|
import { ToasterProps } from 'sonner';
|
|
26
26
|
export { ToasterProps, toast } from 'sonner';
|
|
27
|
-
import
|
|
27
|
+
import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
|
|
28
|
+
import * as ResizablePrimitive from 'react-resizable-panels';
|
|
29
|
+
import * as SliderPrimitive from '@radix-ui/react-slider';
|
|
28
30
|
|
|
31
|
+
/** @public */
|
|
29
32
|
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
30
33
|
asChild?: boolean;
|
|
31
34
|
}
|
|
@@ -45,11 +48,13 @@ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantPr
|
|
|
45
48
|
* - link: Link-style button (underlined text)
|
|
46
49
|
*
|
|
47
50
|
* Note: 'primary' is a semantic alias for 'default' variant for better code readability
|
|
51
|
+
* @experimental
|
|
48
52
|
*/
|
|
49
53
|
declare const buttonVariants: (props?: ({
|
|
50
54
|
variant?: "default" | "primary" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
|
|
51
55
|
size?: "default" | "sm" | "md" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
|
|
52
56
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
57
|
+
/** @public */
|
|
53
58
|
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
54
59
|
|
|
55
60
|
/**
|
|
@@ -66,15 +71,15 @@ declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAtt
|
|
|
66
71
|
* - Placeholder text for guidance (not a replacement for labels)
|
|
67
72
|
*
|
|
68
73
|
* Design Specs:
|
|
69
|
-
* - Height: sm=
|
|
74
|
+
* - Height: sm=36px, default=40px, lg=44px
|
|
70
75
|
* - Padding: Horizontal varies by size (sm=10px, default=12px, lg=16px)
|
|
71
|
-
* - Border radius:
|
|
76
|
+
* - Border radius: `rounded-md`, the control step of the `--radius` scale
|
|
72
77
|
* - Border: 1px solid, changes on focus/error
|
|
73
78
|
* - Transition: 150ms (consistent with design system)
|
|
74
79
|
* - Font size: sm/default=14px (text-sm), lg=16px (text-base)
|
|
75
80
|
*
|
|
76
81
|
* Size Variants:
|
|
77
|
-
* - sm: Height
|
|
82
|
+
* - sm: Height 36px - Compact forms and filters, matching a small Button
|
|
78
83
|
* - default: Height 40px (h-10) - Standard forms
|
|
79
84
|
* - lg: Height 44px (h-11) - Prominent inputs, marketing forms
|
|
80
85
|
*
|
|
@@ -86,18 +91,34 @@ declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAtt
|
|
|
86
91
|
* - tel: Phone number input
|
|
87
92
|
* - url: URL validation
|
|
88
93
|
* - search: Search input with clear button
|
|
94
|
+
* @experimental
|
|
89
95
|
*/
|
|
90
96
|
declare const inputVariants: (props?: ({
|
|
91
97
|
size?: "default" | "sm" | "lg" | null | undefined;
|
|
92
98
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
99
|
+
/** @public */
|
|
93
100
|
interface InputProps extends Omit<ComponentProps<"input">, "size">, VariantProps<typeof inputVariants> {
|
|
94
101
|
}
|
|
102
|
+
/** @public */
|
|
95
103
|
declare const Input: react.ForwardRefExoticComponent<Omit<InputProps, "ref"> & react.RefAttributes<HTMLInputElement>>;
|
|
96
104
|
|
|
105
|
+
/** @public */
|
|
97
106
|
declare const Textarea: react.ForwardRefExoticComponent<TextareaHTMLAttributes<HTMLTextAreaElement> & react.RefAttributes<HTMLTextAreaElement>>;
|
|
98
107
|
|
|
108
|
+
/** @public */
|
|
99
109
|
declare function Label({ className, ...props }: ComponentProps<typeof Root>): react_jsx_runtime.JSX.Element;
|
|
100
110
|
|
|
111
|
+
/** @public */
|
|
112
|
+
interface FormLabelWithTooltipProps extends react.ComponentPropsWithoutRef<typeof Label> {
|
|
113
|
+
label: react.ReactNode;
|
|
114
|
+
description?: react.ReactNode;
|
|
115
|
+
required?: boolean;
|
|
116
|
+
labelClassName?: string;
|
|
117
|
+
tooltipClassName?: string;
|
|
118
|
+
}
|
|
119
|
+
/** @public */
|
|
120
|
+
declare const FormLabelWithTooltip: react.ForwardRefExoticComponent<FormLabelWithTooltipProps & react.RefAttributes<HTMLLabelElement>>;
|
|
121
|
+
|
|
101
122
|
/**
|
|
102
123
|
* Badge Component - Design System Specification
|
|
103
124
|
*
|
|
@@ -124,13 +145,16 @@ declare function Label({ className, ...props }: ComponentProps<typeof Root>): re
|
|
|
124
145
|
* - success: Light green background
|
|
125
146
|
* - warning: Light amber background
|
|
126
147
|
* - destructive: Light red background
|
|
127
|
-
* - outline: Transparent background with border border-
|
|
148
|
+
* - outline: Transparent background with border border-border
|
|
149
|
+
* @experimental
|
|
128
150
|
*/
|
|
129
151
|
declare const badgeVariants: (props?: ({
|
|
130
152
|
variant?: "default" | "primary" | "destructive" | "outline" | "success" | "warning" | null | undefined;
|
|
131
153
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
154
|
+
/** @public */
|
|
132
155
|
interface BadgeProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
133
156
|
}
|
|
157
|
+
/** @public */
|
|
134
158
|
declare function Badge({ className, variant, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
135
159
|
|
|
136
160
|
/**
|
|
@@ -140,14 +164,14 @@ declare function Badge({ className, variant, ...props }: BadgeProps): react_jsx_
|
|
|
140
164
|
* Cards provide a structured layout with header, content, and footer sections.
|
|
141
165
|
*
|
|
142
166
|
* Design Specs:
|
|
143
|
-
* - Border radius:
|
|
167
|
+
* - Border radius: `rounded-lg`, the container step of the `--radius` scale
|
|
144
168
|
* - Padding: 24px (p-6) for header/content, 16px 24px for footer
|
|
145
169
|
* - Shadow: sm (default), md (hover/elevated)
|
|
146
|
-
* - Border: 1px solid border border-
|
|
170
|
+
* - Border: 1px solid border border-border color
|
|
147
171
|
*
|
|
148
172
|
* Variants:
|
|
149
173
|
* - default: Standard card with subtle shadow
|
|
150
|
-
* - interactive: Hover effects for clickable cards (border border-
|
|
174
|
+
* - interactive: Hover effects for clickable cards (border border-border highlight, shadow increase)
|
|
151
175
|
* ⚠️ IMPORTANT: When using the interactive variant, you MUST add appropriate
|
|
152
176
|
* accessibility attributes:
|
|
153
177
|
* - Add role="button" or use an actual <button> wrapper
|
|
@@ -182,33 +206,89 @@ declare function Badge({ className, variant, ...props }: BadgeProps): react_jsx_
|
|
|
182
206
|
* - Interactive cards MUST have role, tabIndex, and keyboard handlers (see above)
|
|
183
207
|
* - Ensure sufficient color contrast for all text (WCAG 2.2 AA minimum)
|
|
184
208
|
* - Use aria-label or aria-labelledby for cards without visible text labels
|
|
209
|
+
* @experimental
|
|
185
210
|
*/
|
|
186
211
|
declare const cardVariants: (props?: ({
|
|
187
212
|
variant?: "default" | "interactive" | "elevated" | null | undefined;
|
|
188
213
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
214
|
+
/** @experimental */
|
|
189
215
|
type CardProps = HTMLAttributes<HTMLDivElement> & VariantProps<typeof cardVariants>;
|
|
216
|
+
/** @experimental */
|
|
190
217
|
declare const Card: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
|
|
191
218
|
variant?: "default" | "interactive" | "elevated" | null | undefined;
|
|
192
219
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & react.RefAttributes<HTMLDivElement>>;
|
|
220
|
+
/** @experimental */
|
|
193
221
|
interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {
|
|
194
222
|
/**
|
|
195
|
-
* Whether to hide the bottom border border-
|
|
196
|
-
* Default: false (border border-
|
|
223
|
+
* Whether to hide the bottom border border-border separator between header and content.
|
|
224
|
+
* Default: false (border border-border is shown per design spec)
|
|
197
225
|
*/
|
|
198
226
|
noBorder?: boolean;
|
|
199
227
|
}
|
|
228
|
+
/** @experimental */
|
|
200
229
|
declare const CardHeader: react.ForwardRefExoticComponent<CardHeaderProps & react.RefAttributes<HTMLDivElement>>;
|
|
230
|
+
/** @experimental */
|
|
201
231
|
type CardTitleProps = HTMLAttributes<HTMLHeadingElement>;
|
|
232
|
+
/** @experimental */
|
|
202
233
|
declare const CardTitle: react.ForwardRefExoticComponent<CardTitleProps & react.RefAttributes<HTMLHeadingElement>>;
|
|
234
|
+
/** @experimental */
|
|
203
235
|
type CardDescriptionProps = HTMLAttributes<HTMLParagraphElement>;
|
|
236
|
+
/** @experimental */
|
|
204
237
|
declare const CardDescription: react.ForwardRefExoticComponent<CardDescriptionProps & react.RefAttributes<HTMLParagraphElement>>;
|
|
238
|
+
/** @experimental */
|
|
205
239
|
type CardActionProps = HTMLAttributes<HTMLDivElement>;
|
|
240
|
+
/** @experimental */
|
|
206
241
|
declare const CardAction: react.ForwardRefExoticComponent<CardActionProps & react.RefAttributes<HTMLDivElement>>;
|
|
242
|
+
/** @experimental */
|
|
207
243
|
type CardContentProps = HTMLAttributes<HTMLDivElement>;
|
|
244
|
+
/** @experimental */
|
|
208
245
|
declare const CardContent: react.ForwardRefExoticComponent<CardContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
246
|
+
/** @experimental */
|
|
209
247
|
type CardFooterProps = HTMLAttributes<HTMLDivElement>;
|
|
248
|
+
/** @experimental */
|
|
210
249
|
declare const CardFooter: react.ForwardRefExoticComponent<CardFooterProps & react.RefAttributes<HTMLDivElement>>;
|
|
211
250
|
|
|
251
|
+
type Gap = 0 | 1 | 2 | 3 | 4 | 6 | 8;
|
|
252
|
+
type Cols = 1 | 2 | 3 | 4 | 6;
|
|
253
|
+
/** @experimental */
|
|
254
|
+
interface StackProps extends HTMLAttributes<HTMLDivElement> {
|
|
255
|
+
/** Main-axis direction. Default `col`. */
|
|
256
|
+
direction?: "col" | "row";
|
|
257
|
+
/** Gap between children (Tailwind spacing step). Default `4`. */
|
|
258
|
+
gap?: Gap;
|
|
259
|
+
}
|
|
260
|
+
/** Flex stack: vertical by default, horizontal with `direction="row"`.
|
|
261
|
+
* @experimental
|
|
262
|
+
*/
|
|
263
|
+
declare const Stack: react.ForwardRefExoticComponent<StackProps & react.RefAttributes<HTMLDivElement>>;
|
|
264
|
+
/** @experimental */
|
|
265
|
+
interface GridProps extends HTMLAttributes<HTMLDivElement> {
|
|
266
|
+
/** Column count. Default `2`. */
|
|
267
|
+
cols?: Cols;
|
|
268
|
+
/** Gap between cells. Default `4`. */
|
|
269
|
+
gap?: Gap;
|
|
270
|
+
/**
|
|
271
|
+
* Collapse to one column in a narrow container. Off by default so existing
|
|
272
|
+
* callers keep the fixed column count they were written against.
|
|
273
|
+
*/
|
|
274
|
+
responsive?: boolean;
|
|
275
|
+
}
|
|
276
|
+
/** Simple fixed-column grid, or a container-responsive one via `responsive`.
|
|
277
|
+
* @experimental
|
|
278
|
+
*/
|
|
279
|
+
declare const Grid: react.ForwardRefExoticComponent<GridProps & react.RefAttributes<HTMLDivElement>>;
|
|
280
|
+
/** @experimental */
|
|
281
|
+
interface StatProps extends HTMLAttributes<HTMLDivElement> {
|
|
282
|
+
/** Muted label above the value. */
|
|
283
|
+
label: string;
|
|
284
|
+
/** The emphasized value (string or node). */
|
|
285
|
+
value: ReactNode;
|
|
286
|
+
}
|
|
287
|
+
/** Labelled metric block for dashboard-style plugin widgets.
|
|
288
|
+
* @experimental
|
|
289
|
+
*/
|
|
290
|
+
declare const Stat: react.ForwardRefExoticComponent<StatProps & react.RefAttributes<HTMLDivElement>>;
|
|
291
|
+
|
|
212
292
|
/**
|
|
213
293
|
* Alert Component - Design System Specification
|
|
214
294
|
*
|
|
@@ -217,7 +297,7 @@ declare const CardFooter: react.ForwardRefExoticComponent<CardFooterProps & reac
|
|
|
217
297
|
*
|
|
218
298
|
* Design Specs:
|
|
219
299
|
* - Padding: 16px (p-4)
|
|
220
|
-
* - Border radius:
|
|
300
|
+
* - Border radius: `rounded-md`, one step tighter than Card's `rounded-lg`
|
|
221
301
|
* for inline/flow content vs. larger container components
|
|
222
302
|
* - Border: 1px solid matching variant color
|
|
223
303
|
* - Shadow: sm (subtle elevation)
|
|
@@ -276,10 +356,12 @@ declare const CardFooter: react.ForwardRefExoticComponent<CardFooterProps & reac
|
|
|
276
356
|
* - Success: <CheckCircle2 className="h-4 w-4" />
|
|
277
357
|
* - Warning: <AlertTriangle className="h-4 w-4" />
|
|
278
358
|
* - Destructive: <XCircle className="h-4 w-4" />
|
|
359
|
+
* @experimental
|
|
279
360
|
*/
|
|
280
361
|
declare const alertVariants: (props?: ({
|
|
281
362
|
variant?: "destructive" | "success" | "warning" | "info" | null | undefined;
|
|
282
363
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
364
|
+
/** @experimental */
|
|
283
365
|
type AlertProps = HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>;
|
|
284
366
|
/**
|
|
285
367
|
* Alert - Root container for alert messages
|
|
@@ -292,10 +374,12 @@ type AlertProps = HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVari
|
|
|
292
374
|
* <CheckCircle2 className="h-4 w-4" />
|
|
293
375
|
* <AlertDescription>Operation completed successfully</AlertDescription>
|
|
294
376
|
* </Alert>
|
|
377
|
+
* @experimental
|
|
295
378
|
*/
|
|
296
379
|
declare const Alert: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
|
|
297
380
|
variant?: "destructive" | "success" | "warning" | "info" | null | undefined;
|
|
298
381
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & react.RefAttributes<HTMLDivElement>>;
|
|
382
|
+
/** @experimental */
|
|
299
383
|
type AlertTitleProps = HTMLAttributes<HTMLHeadingElement>;
|
|
300
384
|
/**
|
|
301
385
|
* AlertTitle - Heading text for alert message
|
|
@@ -305,8 +389,10 @@ type AlertTitleProps = HTMLAttributes<HTMLHeadingElement>;
|
|
|
305
389
|
*
|
|
306
390
|
* @example
|
|
307
391
|
* <AlertTitle>Payment Successful</AlertTitle>
|
|
392
|
+
* @experimental
|
|
308
393
|
*/
|
|
309
394
|
declare const AlertTitle: react.ForwardRefExoticComponent<AlertTitleProps & react.RefAttributes<HTMLHeadingElement>>;
|
|
395
|
+
/** @experimental */
|
|
310
396
|
type AlertDescriptionProps = HTMLAttributes<HTMLDivElement>;
|
|
311
397
|
/**
|
|
312
398
|
* AlertDescription - Supporting detail text for alert message
|
|
@@ -318,9 +404,11 @@ type AlertDescriptionProps = HTMLAttributes<HTMLDivElement>;
|
|
|
318
404
|
* <AlertDescription>
|
|
319
405
|
* Your changes have been saved. <a href="/view">View details</a>
|
|
320
406
|
* </AlertDescription>
|
|
407
|
+
* @experimental
|
|
321
408
|
*/
|
|
322
409
|
declare const AlertDescription: react.ForwardRefExoticComponent<AlertDescriptionProps & react.RefAttributes<HTMLDivElement>>;
|
|
323
410
|
|
|
411
|
+
/** @experimental */
|
|
324
412
|
declare function Separator({ className, orientation, decorative, ...props }: react.ComponentProps<typeof SeparatorPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
325
413
|
|
|
326
414
|
/**
|
|
@@ -332,7 +420,7 @@ declare function Separator({ className, orientation, decorative, ...props }: rea
|
|
|
332
420
|
* @design_specs
|
|
333
421
|
* - Background: bg-accent (slate-100 in light mode, slate-800 in dark mode)
|
|
334
422
|
* - Animation: animate-pulse with motion-reduce:animate-none (respects prefers-reduced-motion)
|
|
335
|
-
* - Border-radius:
|
|
423
|
+
* - Border-radius: `rounded-md` by default; override per placeholder shape
|
|
336
424
|
* - Contrast: 3:1 minimum for WCAG 1.4.11 (Non-text Contrast) compliance
|
|
337
425
|
*
|
|
338
426
|
* @accessibility
|
|
@@ -352,13 +440,13 @@ declare function Separator({ className, orientation, decorative, ...props }: rea
|
|
|
352
440
|
*
|
|
353
441
|
* **Avatar Skeleton:**
|
|
354
442
|
* ```tsx
|
|
355
|
-
* <Skeleton className="h-12 w-12 rounded-
|
|
443
|
+
* <Skeleton className="h-12 w-12 rounded-md" />
|
|
356
444
|
* ```
|
|
357
445
|
*
|
|
358
446
|
* **Card Skeleton:**
|
|
359
447
|
* ```tsx
|
|
360
448
|
* <div className="space-y-3">
|
|
361
|
-
* <Skeleton className="h-[125px] w-[250px] rounded-
|
|
449
|
+
* <Skeleton className="h-[125px] w-[250px] rounded-lg" />
|
|
362
450
|
* <div className="space-y-2">
|
|
363
451
|
* <Skeleton className="h-4 w-[250px]" />
|
|
364
452
|
* <Skeleton className="h-4 w-[200px]" />
|
|
@@ -372,7 +460,7 @@ declare function Separator({ className, orientation, decorative, ...props }: rea
|
|
|
372
460
|
* {isLoading ? (
|
|
373
461
|
* <>
|
|
374
462
|
* <span className="sr-only">Loading user profile...</span>
|
|
375
|
-
* <Skeleton className="h-12 w-12 rounded-
|
|
463
|
+
* <Skeleton className="h-12 w-12 rounded-md" />
|
|
376
464
|
* <Skeleton className="h-4 w-[200px]" />
|
|
377
465
|
* </>
|
|
378
466
|
* ) : (
|
|
@@ -395,20 +483,25 @@ declare function Separator({ className, orientation, decorative, ...props }: rea
|
|
|
395
483
|
*
|
|
396
484
|
* @see {@link https://ui.shadcn.com/docs/components/skeleton shadcn/ui Skeleton}
|
|
397
485
|
* @see {@link https://adrianroselli.com/2020/11/more-accessible-skeletons.html More Accessible Skeletons}
|
|
486
|
+
* @experimental
|
|
398
487
|
*/
|
|
399
488
|
declare const Skeleton: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
489
|
+
/** @experimental */
|
|
400
490
|
type SkeletonProps = react.ComponentProps<"div">;
|
|
401
491
|
|
|
402
492
|
/**
|
|
403
493
|
* Progress variants using CVA
|
|
404
494
|
*
|
|
405
495
|
* Defines color variants for different progress states.
|
|
496
|
+
*
|
|
497
|
+
* @experimental
|
|
406
498
|
*/
|
|
407
499
|
declare const progressVariants: (props?: ({
|
|
408
500
|
variant?: "default" | "success" | "error" | null | undefined;
|
|
409
501
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
410
502
|
/**
|
|
411
503
|
* Progress component props
|
|
504
|
+
* @experimental
|
|
412
505
|
*/
|
|
413
506
|
type ProgressProps = {
|
|
414
507
|
/**
|
|
@@ -433,7 +526,7 @@ type ProgressProps = {
|
|
|
433
526
|
* Visual variant for different states
|
|
434
527
|
*
|
|
435
528
|
* - `default`: Primary blue (bg-primary-500)
|
|
436
|
-
* - `success`: Green (bg-
|
|
529
|
+
* - `success`: Green (bg-success-500)
|
|
437
530
|
* - `error`: Red (bg-destructive)
|
|
438
531
|
*
|
|
439
532
|
* @default "default"
|
|
@@ -476,6 +569,7 @@ type ProgressProps = {
|
|
|
476
569
|
* );
|
|
477
570
|
* }
|
|
478
571
|
* ```
|
|
572
|
+
* @experimental
|
|
479
573
|
*/
|
|
480
574
|
declare const Progress: react.ForwardRefExoticComponent<{
|
|
481
575
|
/**
|
|
@@ -500,7 +594,7 @@ declare const Progress: react.ForwardRefExoticComponent<{
|
|
|
500
594
|
* Visual variant for different states
|
|
501
595
|
*
|
|
502
596
|
* - `default`: Primary blue (bg-primary-500)
|
|
503
|
-
* - `success`: Green (bg-
|
|
597
|
+
* - `success`: Green (bg-success-500)
|
|
504
598
|
* - `error`: Red (bg-destructive)
|
|
505
599
|
*
|
|
506
600
|
* @default "default"
|
|
@@ -523,6 +617,7 @@ declare const Progress: react.ForwardRefExoticComponent<{
|
|
|
523
617
|
"aria-label"?: string;
|
|
524
618
|
} & react.HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
525
619
|
|
|
620
|
+
/** @public */
|
|
526
621
|
declare const Checkbox: react.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & react.RefAttributes<HTMLButtonElement>, "ref"> & {
|
|
527
622
|
indeterminate?: boolean;
|
|
528
623
|
} & react.RefAttributes<HTMLButtonElement>>;
|
|
@@ -542,40 +637,58 @@ declare const Checkbox: react.ForwardRefExoticComponent<Omit<CheckboxPrimitive.C
|
|
|
542
637
|
* Design Specs:
|
|
543
638
|
* - Size: 16px (h-4 w-4) - Fixed size matching Checkbox
|
|
544
639
|
* - Border: 1px solid, expands to 5px when checked (visual indicator)
|
|
545
|
-
* - Border radius:
|
|
640
|
+
* - Border radius: `rounded-full`. Round means "pick one" and square means
|
|
641
|
+
* "pick many"; a square radio would announce the wrong behaviour, so the
|
|
642
|
+
* shape is fixed and deliberately outside the `--radius` scale. Checkbox
|
|
643
|
+
* keeps the derived radius for the same reason.
|
|
546
644
|
* - Transition: 150ms (consistent with design system)
|
|
547
645
|
* - Focus ring: 2px ring with 2px offset
|
|
548
646
|
*
|
|
549
647
|
* Implementation Notes:
|
|
550
648
|
* - Uses Radix UI primitives for robust accessibility
|
|
551
|
-
* - Visual "checked" state achieved via border border-
|
|
552
|
-
* - No inner indicator needed - border border-
|
|
553
|
-
* - Hover state changes border border-
|
|
649
|
+
* - Visual "checked" state achieved via border border-border expansion (border-[5px])
|
|
650
|
+
* - No inner indicator needed - border border-border expansion provides clear visual feedback
|
|
651
|
+
* - Hover state changes border border-border color for better interactivity
|
|
652
|
+
* @public
|
|
554
653
|
*/
|
|
555
654
|
declare const RadioGroup: react.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
655
|
+
/** @public */
|
|
556
656
|
declare const RadioGroupItem: react.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
557
657
|
|
|
658
|
+
/**
|
|
659
|
+
* A pill track carrying a circular thumb is how a toggle is recognised, so both
|
|
660
|
+
* parts use `rounded-full` and stay outside the `--radius` scale: at any theme
|
|
661
|
+
* radius the switch must still read as a switch and not as a small checkbox.
|
|
662
|
+
* @public
|
|
663
|
+
*/
|
|
558
664
|
declare function Switch({ className, ...props }: ComponentProps<typeof Root$1>): react_jsx_runtime.JSX.Element;
|
|
559
665
|
|
|
666
|
+
/** @experimental */
|
|
560
667
|
declare const Collapsible: react.ForwardRefExoticComponent<CollapsiblePrimitive.CollapsibleProps & react.RefAttributes<HTMLDivElement>>;
|
|
668
|
+
/** @experimental */
|
|
561
669
|
declare const CollapsibleTrigger: react.ForwardRefExoticComponent<CollapsiblePrimitive.CollapsibleTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
670
|
+
/** @experimental */
|
|
562
671
|
declare const CollapsibleContent: react.ForwardRefExoticComponent<CollapsiblePrimitive.CollapsibleContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
563
672
|
|
|
564
673
|
/**
|
|
565
674
|
* Props for the Accordion root component
|
|
566
675
|
* @see https://www.radix-ui.com/primitives/docs/components/accordion
|
|
676
|
+
* @experimental
|
|
567
677
|
*/
|
|
568
678
|
type AccordionProps = ComponentPropsWithoutRef<typeof Root$2>;
|
|
569
679
|
/**
|
|
570
680
|
* Props for the AccordionItem component (container for trigger and content)
|
|
681
|
+
* @experimental
|
|
571
682
|
*/
|
|
572
683
|
type AccordionItemProps = ComponentPropsWithoutRef<typeof Item>;
|
|
573
684
|
/**
|
|
574
685
|
* Props for the AccordionTrigger component (clickable header button)
|
|
686
|
+
* @experimental
|
|
575
687
|
*/
|
|
576
688
|
type AccordionTriggerProps = ComponentPropsWithoutRef<typeof Trigger>;
|
|
577
689
|
/**
|
|
578
690
|
* Props for the AccordionContent component (collapsible content panel)
|
|
691
|
+
* @experimental
|
|
579
692
|
*/
|
|
580
693
|
type AccordionContentProps = ComponentPropsWithoutRef<typeof Content>;
|
|
581
694
|
|
|
@@ -586,7 +699,7 @@ type AccordionContentProps = ComponentPropsWithoutRef<typeof Content>;
|
|
|
586
699
|
* Built on Radix UI primitives with WAI-ARIA compliance.
|
|
587
700
|
*
|
|
588
701
|
* Design Specs:
|
|
589
|
-
* - AccordionItem border: 1px bottom border border-
|
|
702
|
+
* - AccordionItem border: 1px bottom border border-border (border-b)
|
|
590
703
|
* - AccordionTrigger padding: 16px vertical (py-4)
|
|
591
704
|
* - AccordionTrigger font: font-medium (500 weight)
|
|
592
705
|
* - AccordionContent padding: 16px bottom, 0 top (pb-4 pt-0)
|
|
@@ -671,18 +784,20 @@ type AccordionContentProps = ComponentPropsWithoutRef<typeof Content>;
|
|
|
671
784
|
* ```
|
|
672
785
|
*
|
|
673
786
|
* @see https://www.radix-ui.com/primitives/docs/components/accordion
|
|
787
|
+
* @experimental
|
|
674
788
|
*/
|
|
675
789
|
declare const Accordion: react.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & react.RefAttributes<HTMLDivElement>>;
|
|
676
790
|
/**
|
|
677
791
|
* AccordionItem - Container for trigger and content
|
|
678
792
|
*
|
|
679
793
|
* Design Specs:
|
|
680
|
-
* - Border: 1px bottom border border-
|
|
794
|
+
* - Border: 1px bottom border border-border (border-b) for visual separation
|
|
681
795
|
* - Each item represents a collapsible section
|
|
682
796
|
*
|
|
683
797
|
* Accessibility:
|
|
684
798
|
* - Each item requires a unique value prop for identification
|
|
685
799
|
* - Disabled state can be set via disabled prop
|
|
800
|
+
* @experimental
|
|
686
801
|
*/
|
|
687
802
|
declare const AccordionItem: react.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
688
803
|
/**
|
|
@@ -707,6 +822,7 @@ declare const AccordionItem: react.ForwardRefExoticComponent<Omit<AccordionPrimi
|
|
|
707
822
|
* - The ChevronDown icon is included by default
|
|
708
823
|
* - Icon rotates 180° when item is expanded ([data-state=open])
|
|
709
824
|
* - Trigger includes AccordionPrimitive.Header wrapper for proper semantics
|
|
825
|
+
* @experimental
|
|
710
826
|
*/
|
|
711
827
|
declare const AccordionTrigger: react.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
712
828
|
/**
|
|
@@ -728,6 +844,7 @@ declare const AccordionTrigger: react.ForwardRefExoticComponent<Omit<AccordionPr
|
|
|
728
844
|
* - data-state="open": animate-accordion-down (Tailwind built-in)
|
|
729
845
|
* - data-state="closed": animate-accordion-up (Tailwind built-in)
|
|
730
846
|
* - Height transitions smoothly from 0 to auto
|
|
847
|
+
* @experimental
|
|
731
848
|
*/
|
|
732
849
|
declare const AccordionContent: react.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
733
850
|
|
|
@@ -750,7 +867,9 @@ declare const AccordionContent: react.ForwardRefExoticComponent<Omit<AccordionPr
|
|
|
750
867
|
* - 2xl: 80px (h-20 w-20) - For profile headers, large avatars
|
|
751
868
|
*
|
|
752
869
|
* **Design Specs**:
|
|
753
|
-
* - Border radius: rounded-
|
|
870
|
+
* - Border radius: `rounded-full`. A person's avatar is read as a circle, so it
|
|
871
|
+
* sits outside the `--radius` scale and stays circular at any theme radius.
|
|
872
|
+
* Non-identity content (media thumbnails) overrides back to a scale step.
|
|
754
873
|
* - Background: bg-accent (slate-100 light, slate-800 dark)
|
|
755
874
|
* - Text color: text-accent-foreground (slate-900 light, slate-100 dark)
|
|
756
875
|
* - Fallback text scales with avatar size (text-xs to text-2xl)
|
|
@@ -790,6 +909,7 @@ declare const AccordionContent: react.ForwardRefExoticComponent<Omit<AccordionPr
|
|
|
790
909
|
*
|
|
791
910
|
* @see {@link https://www.radix-ui.com/primitives/docs/components/avatar Radix UI Avatar}
|
|
792
911
|
* @see {@link https://github.com/nextlyhq/nextly/blob/main/ui-revamp/04-design-system-specification.md Design System Specification}
|
|
912
|
+
* @experimental
|
|
793
913
|
*/
|
|
794
914
|
declare const avatarVariants: (props?: ({
|
|
795
915
|
size?: "sm" | "md" | "lg" | "xl" | "2xl" | null | undefined;
|
|
@@ -800,6 +920,7 @@ declare const avatarVariants: (props?: ({
|
|
|
800
920
|
* Container element for avatar image and fallback. Provides consistent sizing
|
|
801
921
|
* and styling across the application. Uses React Context to pass size to
|
|
802
922
|
* AvatarFallback for reliable text scaling.
|
|
923
|
+
* @experimental
|
|
803
924
|
*/
|
|
804
925
|
declare const Avatar: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & class_variance_authority.VariantProps<(props?: ({
|
|
805
926
|
size?: "sm" | "md" | "lg" | "xl" | "2xl" | null | undefined;
|
|
@@ -819,6 +940,7 @@ declare const Avatar: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLPro
|
|
|
819
940
|
*
|
|
820
941
|
* @example
|
|
821
942
|
* <AvatarImage src="/users/john-doe.jpg" alt="John Doe" />
|
|
943
|
+
* @experimental
|
|
822
944
|
*/
|
|
823
945
|
declare const AvatarImage: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, "ref"> & react.RefAttributes<HTMLImageElement>>;
|
|
824
946
|
/**
|
|
@@ -851,6 +973,7 @@ declare const AvatarImage: react.ForwardRefExoticComponent<Omit<react.DetailedHT
|
|
|
851
973
|
* @example
|
|
852
974
|
* // Custom delay before showing fallback
|
|
853
975
|
* <AvatarFallback delayMs={300}>AB</AvatarFallback>
|
|
976
|
+
* @experimental
|
|
854
977
|
*/
|
|
855
978
|
declare const AvatarFallback: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
|
|
856
979
|
delayMs?: number;
|
|
@@ -861,6 +984,7 @@ declare const AvatarFallback: react.ForwardRefExoticComponent<Omit<react.Detaile
|
|
|
861
984
|
*
|
|
862
985
|
* Root container for displaying user avatars with image and fallback support.
|
|
863
986
|
* Extends Radix UI Avatar.Root props with size variants.
|
|
987
|
+
* @experimental
|
|
864
988
|
*/
|
|
865
989
|
type AvatarProps = ComponentPropsWithoutRef<"span"> & VariantProps<typeof avatarVariants> & {
|
|
866
990
|
/**
|
|
@@ -882,6 +1006,7 @@ type AvatarProps = ComponentPropsWithoutRef<"span"> & VariantProps<typeof avatar
|
|
|
882
1006
|
*
|
|
883
1007
|
* Note: Both src and alt are optional to support dynamic loading scenarios.
|
|
884
1008
|
* When src is undefined/empty, the AvatarFallback will be displayed instead.
|
|
1009
|
+
* @experimental
|
|
885
1010
|
*/
|
|
886
1011
|
type AvatarImageProps = ComponentPropsWithoutRef<"img">;
|
|
887
1012
|
/**
|
|
@@ -889,6 +1014,7 @@ type AvatarImageProps = ComponentPropsWithoutRef<"img">;
|
|
|
889
1014
|
*
|
|
890
1015
|
* Displays fallback content (typically user initials) when image fails to load.
|
|
891
1016
|
* Extends Radix UI Avatar.Fallback props.
|
|
1017
|
+
* @experimental
|
|
892
1018
|
*/
|
|
893
1019
|
type AvatarFallbackProps = ComponentPropsWithoutRef<"span"> & {
|
|
894
1020
|
/**
|
|
@@ -901,18 +1027,12 @@ type AvatarFallbackProps = ComponentPropsWithoutRef<"span"> & {
|
|
|
901
1027
|
/**
|
|
902
1028
|
* Props for the Tabs root component
|
|
903
1029
|
* @see https://www.radix-ui.com/primitives/docs/components/tabs
|
|
1030
|
+
* @public
|
|
904
1031
|
*/
|
|
905
1032
|
type TabsProps = ComponentPropsWithoutRef<typeof Root$3>;
|
|
906
|
-
/**
|
|
907
|
-
* Props for the TabsList component (container for tab triggers)
|
|
908
|
-
*/
|
|
909
|
-
type TabsListProps = ComponentPropsWithoutRef<typeof List>;
|
|
910
|
-
/**
|
|
911
|
-
* Props for the TabsTrigger component (clickable tab button)
|
|
912
|
-
*/
|
|
913
|
-
type TabsTriggerProps = ComponentPropsWithoutRef<typeof Trigger$1>;
|
|
914
1033
|
/**
|
|
915
1034
|
* Props for the TabsContent component (content panel for each tab)
|
|
1035
|
+
* @public
|
|
916
1036
|
*/
|
|
917
1037
|
type TabsContentProps = ComponentPropsWithoutRef<typeof Content$1>;
|
|
918
1038
|
|
|
@@ -923,8 +1043,9 @@ type TabsContentProps = ComponentPropsWithoutRef<typeof Content$1>;
|
|
|
923
1043
|
* Built on Radix UI primitives with WAI-ARIA compliance.
|
|
924
1044
|
*
|
|
925
1045
|
* Design Specs:
|
|
926
|
-
* - TabsList border-radius:
|
|
927
|
-
* - TabsTrigger border-radius:
|
|
1046
|
+
* - TabsList border-radius: square, independent of `--radius`
|
|
1047
|
+
* - TabsTrigger border-radius: square, independent of `--radius`; the active
|
|
1048
|
+
* state is a 2px bottom border that has to stay flush with the tab edges
|
|
928
1049
|
* - TabsList height: 40px (h-10)
|
|
929
1050
|
* - TabsTrigger padding: 12px 24px (px-3 py-1.5)
|
|
930
1051
|
* - Transition duration: 150ms (design system standard)
|
|
@@ -992,6 +1113,7 @@ type TabsContentProps = ComponentPropsWithoutRef<typeof Content$1>;
|
|
|
992
1113
|
* ```
|
|
993
1114
|
*
|
|
994
1115
|
* @see https://www.radix-ui.com/primitives/docs/components/tabs
|
|
1116
|
+
* @public
|
|
995
1117
|
*/
|
|
996
1118
|
declare const Tabs: react.ForwardRefExoticComponent<_radix_ui_react_tabs.TabsProps & react.RefAttributes<HTMLDivElement>>;
|
|
997
1119
|
/**
|
|
@@ -1002,8 +1124,34 @@ declare const Tabs: react.ForwardRefExoticComponent<_radix_ui_react_tabs.TabsPro
|
|
|
1002
1124
|
* - Border-radius: none (for underline style)
|
|
1003
1125
|
* - Background: transparent
|
|
1004
1126
|
* - Layout: inline-flex (horizontal by default, use orientation="vertical" on Tabs root for vertical)
|
|
1127
|
+
* @public
|
|
1005
1128
|
*/
|
|
1006
|
-
declare const TabsList: react.ForwardRefExoticComponent<Omit<_radix_ui_react_tabs.TabsListProps & react.RefAttributes<HTMLDivElement>, "ref"> &
|
|
1129
|
+
declare const TabsList: react.ForwardRefExoticComponent<Omit<_radix_ui_react_tabs.TabsListProps & react.RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
|
|
1130
|
+
variant?: "default" | "ghost" | null | undefined;
|
|
1131
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string> & {
|
|
1132
|
+
/**
|
|
1133
|
+
* Let a strip too wide for its container scroll sideways.
|
|
1134
|
+
*
|
|
1135
|
+
* The scroll container is a WRAPPER, never the list, and that is why this
|
|
1136
|
+
* prop exists rather than callers reaching for `overflow-x-auto`
|
|
1137
|
+
* themselves. Two things go wrong when the list is the scroller, and the
|
|
1138
|
+
* second is why the obvious remedy is also wrong:
|
|
1139
|
+
*
|
|
1140
|
+
* - Per the CSS overflow rules, `visible` computes to `auto` when the
|
|
1141
|
+
* other axis is neither `visible` nor `clip`, so `overflow-x` alone
|
|
1142
|
+
* always makes the element a VERTICAL scroll container too.
|
|
1143
|
+
* - `TabsTrigger` carries `-mb-0.5` so its 2px underline lands ON this
|
|
1144
|
+
* list's rail rather than below it. That pull-up puts content past the
|
|
1145
|
+
* content-box edge, which the new scroll container reports as vertical
|
|
1146
|
+
* overflow — so `overflow-y-hidden` would clip the 2px the underline is
|
|
1147
|
+
* made of, silencing a scrollbar by deleting the indicator.
|
|
1148
|
+
*
|
|
1149
|
+
* With the wrapper scrolling instead, the list keeps its rail and
|
|
1150
|
+
* `w-max min-w-full` makes that rail span the full scroll width rather
|
|
1151
|
+
* than stopping where the triggers do.
|
|
1152
|
+
*/
|
|
1153
|
+
scrollable?: boolean;
|
|
1154
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
1007
1155
|
/**
|
|
1008
1156
|
* TabsTrigger - Clickable tab button
|
|
1009
1157
|
*
|
|
@@ -1012,8 +1160,8 @@ declare const TabsList: react.ForwardRefExoticComponent<Omit<_radix_ui_react_tab
|
|
|
1012
1160
|
* - Padding: 6px 16px (px-4 py-2)
|
|
1013
1161
|
* - Font: text-sm (14px), font-medium (500)
|
|
1014
1162
|
* - Transition: 150ms (design system standard)
|
|
1015
|
-
* - Active state:
|
|
1016
|
-
* - Hover:
|
|
1163
|
+
* - Active state: the accent colour on the text and on the 2px trailing border
|
|
1164
|
+
* - Hover: the same accent, so the target reads before it is chosen
|
|
1017
1165
|
* - Gmail-inspired clean underline style
|
|
1018
1166
|
*
|
|
1019
1167
|
* Accessibility:
|
|
@@ -1021,8 +1169,11 @@ declare const TabsList: react.ForwardRefExoticComponent<Omit<_radix_ui_react_tab
|
|
|
1021
1169
|
* - Focus ring: 2px with offset (WCAG 2.2 compliant)
|
|
1022
1170
|
* - Disabled state: pointer-events-none, opacity-50
|
|
1023
1171
|
* - Data attributes: [data-state="active|inactive"], [data-disabled]
|
|
1172
|
+
* @public
|
|
1024
1173
|
*/
|
|
1025
|
-
declare const TabsTrigger: react.ForwardRefExoticComponent<Omit<_radix_ui_react_tabs.TabsTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> &
|
|
1174
|
+
declare const TabsTrigger: react.ForwardRefExoticComponent<Omit<_radix_ui_react_tabs.TabsTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
|
|
1175
|
+
size?: "default" | "sm" | null | undefined;
|
|
1176
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string> & react.RefAttributes<HTMLButtonElement>>;
|
|
1026
1177
|
/**
|
|
1027
1178
|
* TabsContent - Content panel for each tab
|
|
1028
1179
|
*
|
|
@@ -1034,17 +1185,46 @@ declare const TabsTrigger: react.ForwardRefExoticComponent<Omit<_radix_ui_react_
|
|
|
1034
1185
|
* - Focus indicator when navigating with Tab key
|
|
1035
1186
|
* - Data attributes: [data-state="active|inactive"], [data-orientation]
|
|
1036
1187
|
* - Only active content is visible, inactive content is hidden
|
|
1188
|
+
* @public
|
|
1037
1189
|
*/
|
|
1038
1190
|
declare const TabsContent: react.ForwardRefExoticComponent<Omit<_radix_ui_react_tabs.TabsContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1039
1191
|
|
|
1192
|
+
/**
|
|
1193
|
+
* The public prop types, DERIVED from the components rather than restated.
|
|
1194
|
+
*
|
|
1195
|
+
* `../types/tabs` describes the Radix props alone, so an alias taken from there
|
|
1196
|
+
* rejects `variant` and `size` — and a consumer typing a wrapper around
|
|
1197
|
+
* `TabsList` would be told the prop it can see in the signature does not exist.
|
|
1198
|
+
* Reading the component's own props keeps the two from drifting: a variant
|
|
1199
|
+
* added later reaches every consumer without a second edit.
|
|
1200
|
+
*/
|
|
1201
|
+
/**
|
|
1202
|
+
* The list's props, including its `variant`.
|
|
1203
|
+
* @public
|
|
1204
|
+
*/
|
|
1205
|
+
type TabsListProps = ComponentPropsWithoutRef<typeof TabsList>;
|
|
1206
|
+
/**
|
|
1207
|
+
* The trigger's props, including its `size`.
|
|
1208
|
+
* @public
|
|
1209
|
+
*/
|
|
1210
|
+
type TabsTriggerProps = ComponentPropsWithoutRef<typeof TabsTrigger>;
|
|
1211
|
+
|
|
1212
|
+
/** @experimental */
|
|
1040
1213
|
declare const TooltipProvider: react.FC<_radix_ui_react_tooltip.TooltipProviderProps>;
|
|
1214
|
+
/** @public */
|
|
1041
1215
|
declare const Tooltip: react.FC<_radix_ui_react_tooltip.TooltipProps>;
|
|
1216
|
+
/** @public */
|
|
1042
1217
|
declare const TooltipTrigger: react.ForwardRefExoticComponent<_radix_ui_react_tooltip.TooltipTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1218
|
+
/** @public */
|
|
1043
1219
|
declare const TooltipContent: react.ForwardRefExoticComponent<Omit<_radix_ui_react_tooltip.TooltipContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1044
1220
|
|
|
1221
|
+
/** @experimental */
|
|
1045
1222
|
declare const Popover: react.FC<PopoverPrimitive.PopoverProps>;
|
|
1223
|
+
/** @experimental */
|
|
1046
1224
|
declare const PopoverTrigger: react.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1225
|
+
/** @experimental */
|
|
1047
1226
|
declare const PopoverAnchor: react.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & react.RefAttributes<HTMLDivElement>>;
|
|
1227
|
+
/** @experimental */
|
|
1048
1228
|
declare const PopoverContent: react.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1049
1229
|
|
|
1050
1230
|
/**
|
|
@@ -1078,9 +1258,9 @@ declare const PopoverContent: react.ForwardRefExoticComponent<Omit<PopoverPrimit
|
|
|
1078
1258
|
* ```
|
|
1079
1259
|
*
|
|
1080
1260
|
* @design-spec
|
|
1081
|
-
* - Border-radius:
|
|
1261
|
+
* - Border-radius: `rounded-lg`, the container step of the `--radius` scale
|
|
1082
1262
|
* - Max-width: 512px (default), responsive sizes available
|
|
1083
|
-
* - Backdrop:
|
|
1263
|
+
* - Backdrop: the `--nx-overlay` scrim with blur effect
|
|
1084
1264
|
* - Padding: 24px (p-6)
|
|
1085
1265
|
* - Shadow: xl for prominence (elevation level 4)
|
|
1086
1266
|
* - Transition: 150ms per design system
|
|
@@ -1093,15 +1273,22 @@ declare const PopoverContent: react.ForwardRefExoticComponent<Omit<PopoverPrimit
|
|
|
1093
1273
|
* - Includes ARIA labels and descriptions
|
|
1094
1274
|
* - Screen reader announcements via role="dialog"
|
|
1095
1275
|
* - Close button has sr-only text for screen readers
|
|
1276
|
+
* @public
|
|
1096
1277
|
*/
|
|
1097
1278
|
declare const Dialog: react.FC<DialogPrimitive.DialogProps>;
|
|
1279
|
+
/** @experimental */
|
|
1098
1280
|
declare const DialogTrigger: react.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1281
|
+
/** @experimental */
|
|
1099
1282
|
declare const DialogPortal: react.FC<DialogPrimitive.DialogPortalProps>;
|
|
1283
|
+
/** @experimental */
|
|
1100
1284
|
declare const DialogClose: react.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1285
|
+
/** @experimental */
|
|
1101
1286
|
type DialogOverlayProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;
|
|
1102
1287
|
/**
|
|
1103
1288
|
* DialogOverlay - The backdrop overlay behind the dialog content.
|
|
1104
|
-
* Renders
|
|
1289
|
+
* Renders the `--nx-overlay` scrim with a blur effect. The opacity is the
|
|
1290
|
+
* token's, not a literal: it differs by mode and a host can retheme it.
|
|
1291
|
+
* @experimental
|
|
1105
1292
|
*/
|
|
1106
1293
|
declare const DialogOverlay: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1107
1294
|
/**
|
|
@@ -1112,10 +1299,12 @@ declare const DialogOverlay: react.ForwardRefExoticComponent<Omit<DialogPrimitiv
|
|
|
1112
1299
|
* @variant lg - Large dialog (672px / max-w-2xl) - complex forms, data tables
|
|
1113
1300
|
* @variant xl - Extra large dialog (896px / max-w-4xl) - content editors, media galleries
|
|
1114
1301
|
* @variant full - Full width with margin (responsive) - fullscreen on mobile
|
|
1302
|
+
* @experimental
|
|
1115
1303
|
*/
|
|
1116
1304
|
declare const dialogContentVariants: (props?: ({
|
|
1117
1305
|
size?: "sm" | "md" | "lg" | "xl" | "full" | null | undefined;
|
|
1118
1306
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1307
|
+
/** @public */
|
|
1119
1308
|
type DialogContentProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & VariantProps<typeof dialogContentVariants>;
|
|
1120
1309
|
/**
|
|
1121
1310
|
* DialogContent - The main dialog content container.
|
|
@@ -1128,16 +1317,20 @@ type DialogContentProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Conten
|
|
|
1128
1317
|
* Your content here
|
|
1129
1318
|
* </DialogContent>
|
|
1130
1319
|
* ```
|
|
1320
|
+
* @public
|
|
1131
1321
|
*/
|
|
1132
1322
|
declare const DialogContent: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
|
|
1133
1323
|
size?: "sm" | "md" | "lg" | "xl" | "full" | null | undefined;
|
|
1134
1324
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & react.RefAttributes<HTMLDivElement>>;
|
|
1325
|
+
/** @public */
|
|
1135
1326
|
type DialogHeaderProps = HTMLAttributes<HTMLDivElement>;
|
|
1136
1327
|
/**
|
|
1137
1328
|
* DialogHeader - Container for dialog title and description.
|
|
1138
1329
|
* Provides consistent spacing and alignment (centered on mobile, left-aligned on desktop).
|
|
1330
|
+
* @public
|
|
1139
1331
|
*/
|
|
1140
1332
|
declare const DialogHeader: react.ForwardRefExoticComponent<DialogHeaderProps & react.RefAttributes<HTMLDivElement>>;
|
|
1333
|
+
/** @public */
|
|
1141
1334
|
type DialogFooterProps = HTMLAttributes<HTMLDivElement>;
|
|
1142
1335
|
/**
|
|
1143
1336
|
* DialogFooter - Container for dialog action buttons.
|
|
@@ -1150,16 +1343,20 @@ type DialogFooterProps = HTMLAttributes<HTMLDivElement>;
|
|
|
1150
1343
|
* <Button type="submit">Save Changes</Button>
|
|
1151
1344
|
* </DialogFooter>
|
|
1152
1345
|
* ```
|
|
1346
|
+
* @public
|
|
1153
1347
|
*/
|
|
1154
1348
|
declare const DialogFooter: react.ForwardRefExoticComponent<DialogFooterProps & react.RefAttributes<HTMLDivElement>>;
|
|
1349
|
+
/** @public */
|
|
1155
1350
|
type DialogTitleProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;
|
|
1156
1351
|
/**
|
|
1157
1352
|
* DialogTitle - The title of the dialog.
|
|
1158
1353
|
* Uses text-lg (18px) with semibold weight per design system.
|
|
1159
1354
|
*
|
|
1160
1355
|
* @accessibility Required for screen readers. Always include a DialogTitle.
|
|
1356
|
+
* @public
|
|
1161
1357
|
*/
|
|
1162
1358
|
declare const DialogTitle: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
|
|
1359
|
+
/** @public */
|
|
1163
1360
|
type DialogDescriptionProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;
|
|
1164
1361
|
/**
|
|
1165
1362
|
* DialogDescription - The description text of the dialog.
|
|
@@ -1167,52 +1364,72 @@ type DialogDescriptionProps = ComponentPropsWithoutRef<typeof DialogPrimitive.De
|
|
|
1167
1364
|
*
|
|
1168
1365
|
* @accessibility Provides additional context for screen readers.
|
|
1169
1366
|
* If not needed visually, you can use sr-only class.
|
|
1367
|
+
* @public
|
|
1170
1368
|
*/
|
|
1171
1369
|
declare const DialogDescription: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
1172
1370
|
|
|
1371
|
+
/** @experimental */
|
|
1173
1372
|
declare const AlertDialog: react.FC<AlertDialogPrimitive.AlertDialogProps>;
|
|
1373
|
+
/** @experimental */
|
|
1174
1374
|
declare const AlertDialogTrigger: react.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1375
|
+
/** @experimental */
|
|
1175
1376
|
declare const AlertDialogPortal: react.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
|
|
1377
|
+
/** @experimental */
|
|
1176
1378
|
type AlertDialogOverlayProps = ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>;
|
|
1177
1379
|
/**
|
|
1178
1380
|
* AlertDialogOverlay - The backdrop overlay behind the dialog content.
|
|
1381
|
+
* @experimental
|
|
1179
1382
|
*/
|
|
1180
1383
|
declare const AlertDialogOverlay: react.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1384
|
+
/** @experimental */
|
|
1181
1385
|
type AlertDialogContentProps = ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>;
|
|
1182
1386
|
/**
|
|
1183
1387
|
* AlertDialogContent - The main dialog content container.
|
|
1388
|
+
* @experimental
|
|
1184
1389
|
*/
|
|
1185
1390
|
declare const AlertDialogContent: react.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1391
|
+
/** @experimental */
|
|
1186
1392
|
type AlertDialogHeaderProps = HTMLAttributes<HTMLDivElement>;
|
|
1187
1393
|
/**
|
|
1188
1394
|
* AlertDialogHeader - Container for dialog title and description.
|
|
1395
|
+
* @experimental
|
|
1189
1396
|
*/
|
|
1190
1397
|
declare const AlertDialogHeader: react.ForwardRefExoticComponent<AlertDialogHeaderProps & react.RefAttributes<HTMLDivElement>>;
|
|
1398
|
+
/** @experimental */
|
|
1191
1399
|
type AlertDialogFooterProps = HTMLAttributes<HTMLDivElement>;
|
|
1192
1400
|
/**
|
|
1193
1401
|
* AlertDialogFooter - Container for dialog action buttons.
|
|
1402
|
+
* @experimental
|
|
1194
1403
|
*/
|
|
1195
1404
|
declare const AlertDialogFooter: react.ForwardRefExoticComponent<AlertDialogFooterProps & react.RefAttributes<HTMLDivElement>>;
|
|
1405
|
+
/** @experimental */
|
|
1196
1406
|
type AlertDialogTitleProps = ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>;
|
|
1197
1407
|
/**
|
|
1198
1408
|
* AlertDialogTitle - The title of the alert dialog.
|
|
1409
|
+
* @experimental
|
|
1199
1410
|
*/
|
|
1200
1411
|
declare const AlertDialogTitle: react.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
|
|
1412
|
+
/** @experimental */
|
|
1201
1413
|
type AlertDialogDescriptionProps = ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>;
|
|
1202
1414
|
/**
|
|
1203
1415
|
* AlertDialogDescription - The description text of the alert dialog.
|
|
1416
|
+
* @experimental
|
|
1204
1417
|
*/
|
|
1205
1418
|
declare const AlertDialogDescription: react.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
1419
|
+
/** @experimental */
|
|
1206
1420
|
type AlertDialogActionProps = ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>;
|
|
1207
1421
|
/**
|
|
1208
1422
|
* AlertDialogAction - The primary action button (e.g., "Delete", "Confirm").
|
|
1209
1423
|
* Styled as destructive by default.
|
|
1424
|
+
* @experimental
|
|
1210
1425
|
*/
|
|
1211
1426
|
declare const AlertDialogAction: react.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
1427
|
+
/** @experimental */
|
|
1212
1428
|
type AlertDialogCancelProps = ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>;
|
|
1213
1429
|
/**
|
|
1214
1430
|
* AlertDialogCancel - The cancel button.
|
|
1215
1431
|
* Styled as outline variant.
|
|
1432
|
+
* @experimental
|
|
1216
1433
|
*/
|
|
1217
1434
|
declare const AlertDialogCancel: react.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
1218
1435
|
|
|
@@ -1223,7 +1440,7 @@ declare const AlertDialogCancel: react.ForwardRefExoticComponent<Omit<AlertDialo
|
|
|
1223
1440
|
* Provides context menus, action menus, and navigation menus with full keyboard support.
|
|
1224
1441
|
*
|
|
1225
1442
|
* **Design Specifications**:
|
|
1226
|
-
* - Border-radius:
|
|
1443
|
+
* - Border-radius: `rounded-lg` for the menu surface, `rounded-sm` for items
|
|
1227
1444
|
* - Padding: 4px (p-1) - compact spacing for menu items
|
|
1228
1445
|
* - Shadow: shadow-md - floating element elevation
|
|
1229
1446
|
* - Z-index: z-50 - above most content, below modals
|
|
@@ -1312,30 +1529,46 @@ declare const AlertDialogCancel: react.ForwardRefExoticComponent<Omit<AlertDialo
|
|
|
1312
1529
|
* @see https://www.radix-ui.com/docs/primitives/components/dropdown-menu - Radix UI DropdownMenu
|
|
1313
1530
|
*/
|
|
1314
1531
|
|
|
1532
|
+
/** @public */
|
|
1315
1533
|
declare const DropdownMenu: react.FC<DropdownMenuPrimitive.DropdownMenuProps>;
|
|
1534
|
+
/** @public */
|
|
1316
1535
|
declare const DropdownMenuTrigger: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1536
|
+
/** @experimental */
|
|
1317
1537
|
declare const DropdownMenuGroup: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
1538
|
+
/** @experimental */
|
|
1318
1539
|
declare const DropdownMenuPortal: react.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
|
|
1540
|
+
/** @experimental */
|
|
1319
1541
|
declare const DropdownMenuSub: react.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
|
|
1542
|
+
/** @experimental */
|
|
1320
1543
|
declare const DropdownMenuRadioGroup: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
1544
|
+
/** @experimental */
|
|
1321
1545
|
declare const DropdownMenuSubTrigger: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
1322
1546
|
inset?: boolean;
|
|
1323
1547
|
} & react.RefAttributes<HTMLDivElement>>;
|
|
1548
|
+
/** @experimental */
|
|
1324
1549
|
declare const DropdownMenuSubContent: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1550
|
+
/** @public */
|
|
1325
1551
|
declare const DropdownMenuContent: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1552
|
+
/** @public */
|
|
1326
1553
|
declare const DropdownMenuItem: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
1327
1554
|
inset?: boolean;
|
|
1328
1555
|
} & react.RefAttributes<HTMLDivElement>>;
|
|
1556
|
+
/** @public */
|
|
1329
1557
|
declare const DropdownMenuCheckboxItem: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1558
|
+
/** @experimental */
|
|
1330
1559
|
declare const DropdownMenuRadioItem: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1560
|
+
/** @experimental */
|
|
1331
1561
|
declare const DropdownMenuLabel: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
1332
1562
|
inset?: boolean;
|
|
1333
1563
|
} & react.RefAttributes<HTMLDivElement>>;
|
|
1564
|
+
/** @public */
|
|
1334
1565
|
declare const DropdownMenuSeparator: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1566
|
+
/** @experimental */
|
|
1335
1567
|
declare const DropdownMenuShortcut: react.ForwardRefExoticComponent<react.HTMLAttributes<HTMLSpanElement> & react.RefAttributes<HTMLSpanElement>>;
|
|
1336
1568
|
|
|
1337
1569
|
/**
|
|
1338
1570
|
* Props for the DropdownMenuSubTrigger component
|
|
1571
|
+
* @experimental
|
|
1339
1572
|
*/
|
|
1340
1573
|
type DropdownMenuSubTriggerProps = react.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
1341
1574
|
/**
|
|
@@ -1345,14 +1578,17 @@ type DropdownMenuSubTriggerProps = react.ComponentPropsWithoutRef<typeof Dropdow
|
|
|
1345
1578
|
};
|
|
1346
1579
|
/**
|
|
1347
1580
|
* Props for the DropdownMenuSubContent component
|
|
1581
|
+
* @experimental
|
|
1348
1582
|
*/
|
|
1349
1583
|
type DropdownMenuSubContentProps = react.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>;
|
|
1350
1584
|
/**
|
|
1351
1585
|
* Props for the DropdownMenuContent component
|
|
1586
|
+
* @public
|
|
1352
1587
|
*/
|
|
1353
1588
|
type DropdownMenuContentProps = react.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>;
|
|
1354
1589
|
/**
|
|
1355
1590
|
* Props for the DropdownMenuItem component
|
|
1591
|
+
* @public
|
|
1356
1592
|
*/
|
|
1357
1593
|
type DropdownMenuItemProps = react.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
|
|
1358
1594
|
/**
|
|
@@ -1362,14 +1598,17 @@ type DropdownMenuItemProps = react.ComponentPropsWithoutRef<typeof DropdownMenuP
|
|
|
1362
1598
|
};
|
|
1363
1599
|
/**
|
|
1364
1600
|
* Props for the DropdownMenuCheckboxItem component
|
|
1601
|
+
* @public
|
|
1365
1602
|
*/
|
|
1366
1603
|
type DropdownMenuCheckboxItemProps = react.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>;
|
|
1367
1604
|
/**
|
|
1368
1605
|
* Props for the DropdownMenuRadioItem component
|
|
1606
|
+
* @experimental
|
|
1369
1607
|
*/
|
|
1370
1608
|
type DropdownMenuRadioItemProps = react.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>;
|
|
1371
1609
|
/**
|
|
1372
1610
|
* Props for the DropdownMenuLabel component
|
|
1611
|
+
* @experimental
|
|
1373
1612
|
*/
|
|
1374
1613
|
type DropdownMenuLabelProps = react.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
|
|
1375
1614
|
/**
|
|
@@ -1379,10 +1618,12 @@ type DropdownMenuLabelProps = react.ComponentPropsWithoutRef<typeof DropdownMenu
|
|
|
1379
1618
|
};
|
|
1380
1619
|
/**
|
|
1381
1620
|
* Props for the DropdownMenuSeparator component
|
|
1621
|
+
* @public
|
|
1382
1622
|
*/
|
|
1383
1623
|
type DropdownMenuSeparatorProps = react.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>;
|
|
1384
1624
|
/**
|
|
1385
1625
|
* Props for the DropdownMenuShortcut component
|
|
1626
|
+
* @experimental
|
|
1386
1627
|
*/
|
|
1387
1628
|
type DropdownMenuShortcutProps = react.HTMLAttributes<HTMLSpanElement>;
|
|
1388
1629
|
|
|
@@ -1400,15 +1641,15 @@ type DropdownMenuShortcutProps = react.HTMLAttributes<HTMLSpanElement>;
|
|
|
1400
1641
|
* - Disabled state support
|
|
1401
1642
|
*
|
|
1402
1643
|
* Design Specs:
|
|
1403
|
-
* - Height: sm=
|
|
1644
|
+
* - Height: sm=36px, default=40px, lg=44px (matches Input component)
|
|
1404
1645
|
* - Padding: Horizontal 12px, vertical varies by size
|
|
1405
|
-
* - Border radius:
|
|
1646
|
+
* - Border radius: `rounded-md` on the trigger, `rounded-lg` on the panel
|
|
1406
1647
|
* - Border: 1px solid, changes on focus/error
|
|
1407
1648
|
* - Transition: 150ms (consistent with design system)
|
|
1408
1649
|
* - Font size: sm/default=14px (text-sm), lg=16px (text-base)
|
|
1409
1650
|
*
|
|
1410
1651
|
* Size Variants:
|
|
1411
|
-
* - sm: Height
|
|
1652
|
+
* - sm: Height 36px - Compact forms and filters, matching a small Button
|
|
1412
1653
|
* - default: Height 40px (h-10) - Standard forms
|
|
1413
1654
|
* - lg: Height 44px (h-11) - Prominent selects
|
|
1414
1655
|
*
|
|
@@ -1419,23 +1660,101 @@ type DropdownMenuShortcutProps = react.HTMLAttributes<HTMLSpanElement>;
|
|
|
1419
1660
|
* - Grouping support with labels
|
|
1420
1661
|
* - Placeholder text support
|
|
1421
1662
|
* - Error state via aria-invalid
|
|
1663
|
+
* @public
|
|
1422
1664
|
*/
|
|
1423
1665
|
declare function Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
1666
|
+
/** @experimental */
|
|
1424
1667
|
declare function SelectGroup({ ...props }: ComponentProps<typeof SelectPrimitive.Group>): react_jsx_runtime.JSX.Element;
|
|
1668
|
+
/** @public */
|
|
1425
1669
|
declare function SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>): react_jsx_runtime.JSX.Element;
|
|
1670
|
+
/** @experimental */
|
|
1426
1671
|
declare const selectTriggerVariants: (props?: ({
|
|
1427
1672
|
size?: "default" | "sm" | "lg" | null | undefined;
|
|
1428
1673
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1674
|
+
/** @public */
|
|
1429
1675
|
interface SelectTriggerProps extends ComponentProps<typeof SelectPrimitive.Trigger>, VariantProps<typeof selectTriggerVariants> {
|
|
1430
1676
|
}
|
|
1677
|
+
/** @public */
|
|
1431
1678
|
declare const SelectTrigger: react.ForwardRefExoticComponent<Omit<SelectTriggerProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
1679
|
+
/** @public */
|
|
1432
1680
|
declare function SelectContent({ className, children, position, ...props }: ComponentProps<typeof SelectPrimitive.Content>): react_jsx_runtime.JSX.Element;
|
|
1681
|
+
/** @experimental */
|
|
1433
1682
|
declare function SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>): react_jsx_runtime.JSX.Element;
|
|
1683
|
+
/** @public */
|
|
1434
1684
|
declare function SelectItem({ className, children, ...props }: ComponentProps<typeof SelectPrimitive.Item>): react_jsx_runtime.JSX.Element;
|
|
1685
|
+
/** @experimental */
|
|
1435
1686
|
declare function SelectSeparator({ className, ...props }: ComponentProps<typeof SelectPrimitive.Separator>): react_jsx_runtime.JSX.Element;
|
|
1687
|
+
/** @experimental */
|
|
1436
1688
|
declare function SelectScrollUpButton({ className, ...props }: ComponentProps<typeof SelectPrimitive.ScrollUpButton>): react_jsx_runtime.JSX.Element;
|
|
1689
|
+
/** @experimental */
|
|
1437
1690
|
declare function SelectScrollDownButton({ className, ...props }: ComponentProps<typeof SelectPrimitive.ScrollDownButton>): react_jsx_runtime.JSX.Element;
|
|
1438
1691
|
|
|
1692
|
+
/**
|
|
1693
|
+
* Sheet Component Types
|
|
1694
|
+
*
|
|
1695
|
+
* TypeScript type definitions for the Sheet component (Dialog variant).
|
|
1696
|
+
*/
|
|
1697
|
+
|
|
1698
|
+
/**
|
|
1699
|
+
* Sheet root component props
|
|
1700
|
+
* Extends Radix UI Dialog.Root props
|
|
1701
|
+
* @public
|
|
1702
|
+
*/
|
|
1703
|
+
type SheetProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;
|
|
1704
|
+
/**
|
|
1705
|
+
* Sheet trigger component props
|
|
1706
|
+
* Extends Radix UI Dialog.Trigger props
|
|
1707
|
+
* @experimental
|
|
1708
|
+
*/
|
|
1709
|
+
type SheetTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;
|
|
1710
|
+
/**
|
|
1711
|
+
* Sheet close component props
|
|
1712
|
+
* Extends Radix UI Dialog.Close props
|
|
1713
|
+
* @experimental
|
|
1714
|
+
*/
|
|
1715
|
+
type SheetCloseProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>;
|
|
1716
|
+
/**
|
|
1717
|
+
* Sheet overlay component props
|
|
1718
|
+
* Extends Radix UI Dialog.Overlay props
|
|
1719
|
+
* @experimental
|
|
1720
|
+
*/
|
|
1721
|
+
type SheetOverlayProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;
|
|
1722
|
+
/**
|
|
1723
|
+
* Sheet header component props
|
|
1724
|
+
* Standard div props
|
|
1725
|
+
* @public
|
|
1726
|
+
*/
|
|
1727
|
+
type SheetHeaderProps = React.HTMLAttributes<HTMLDivElement>;
|
|
1728
|
+
/**
|
|
1729
|
+
* Sheet footer component props
|
|
1730
|
+
* Standard div props
|
|
1731
|
+
* @experimental
|
|
1732
|
+
*/
|
|
1733
|
+
type SheetFooterProps = React.HTMLAttributes<HTMLDivElement>;
|
|
1734
|
+
/**
|
|
1735
|
+
* Sheet title component props
|
|
1736
|
+
* Extends Radix UI Dialog.Title props
|
|
1737
|
+
* @public
|
|
1738
|
+
*/
|
|
1739
|
+
type SheetTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;
|
|
1740
|
+
/**
|
|
1741
|
+
* Sheet description component props
|
|
1742
|
+
* Extends Radix UI Dialog.Description props
|
|
1743
|
+
* @public
|
|
1744
|
+
*/
|
|
1745
|
+
type SheetDescriptionProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;
|
|
1746
|
+
/**
|
|
1747
|
+
* Sheet component refs
|
|
1748
|
+
* @experimental
|
|
1749
|
+
*/
|
|
1750
|
+
type SheetOverlayRef = React.ElementRef<typeof DialogPrimitive.Overlay>;
|
|
1751
|
+
/** @experimental */
|
|
1752
|
+
type SheetContentRef = React.ElementRef<typeof DialogPrimitive.Content>;
|
|
1753
|
+
/** @experimental */
|
|
1754
|
+
type SheetTitleRef = React.ElementRef<typeof DialogPrimitive.Title>;
|
|
1755
|
+
/** @experimental */
|
|
1756
|
+
type SheetDescriptionRef = React.ElementRef<typeof DialogPrimitive.Description>;
|
|
1757
|
+
|
|
1439
1758
|
/**
|
|
1440
1759
|
* Sheet Component
|
|
1441
1760
|
*
|
|
@@ -1448,7 +1767,7 @@ declare function SelectScrollDownButton({ className, ...props }: ComponentProps<
|
|
|
1448
1767
|
*
|
|
1449
1768
|
* - **Width**: 320px (sm), 400px (default), 512px (lg), 672px (xl), 100% (full)
|
|
1450
1769
|
* - **Animation**: Slide-in from side (150ms duration)
|
|
1451
|
-
* - **Backdrop**:
|
|
1770
|
+
* - **Backdrop**: the `--nx-overlay` scrim, with backdrop blur
|
|
1452
1771
|
* - **z-index**: 50 (both overlay and content - content renders on top via DOM order)
|
|
1453
1772
|
* - **Border-radius**: 0 (full-screen edges)
|
|
1454
1773
|
*
|
|
@@ -1488,29 +1807,39 @@ declare function SelectScrollDownButton({ className, ...props }: ComponentProps<
|
|
|
1488
1807
|
* ```
|
|
1489
1808
|
*
|
|
1490
1809
|
* @see https://www.radix-ui.com/primitives/docs/components/dialog
|
|
1810
|
+
* @public
|
|
1491
1811
|
*/
|
|
1492
|
-
declare const Sheet:
|
|
1812
|
+
declare const Sheet: {
|
|
1813
|
+
({ modal, children, ...props }: SheetProps): react_jsx_runtime.JSX.Element;
|
|
1814
|
+
displayName: string;
|
|
1815
|
+
};
|
|
1816
|
+
/** @experimental */
|
|
1493
1817
|
declare const SheetTrigger: react.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1818
|
+
/** @experimental */
|
|
1494
1819
|
declare const SheetClose: react.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1820
|
+
/** @experimental */
|
|
1495
1821
|
declare const SheetPortal: react.FC<DialogPrimitive.DialogPortalProps>;
|
|
1496
1822
|
/**
|
|
1497
1823
|
* SheetOverlay
|
|
1498
1824
|
*
|
|
1499
1825
|
* Semi-transparent backdrop that appears behind the sheet.
|
|
1500
1826
|
*
|
|
1501
|
-
* - **Background**:
|
|
1827
|
+
* - **Background**: the `--nx-overlay` scrim + backdrop blur
|
|
1502
1828
|
* - **Animation**: Fade in/out (150ms)
|
|
1503
1829
|
* - **z-index**: 50
|
|
1830
|
+
* @experimental
|
|
1504
1831
|
*/
|
|
1505
1832
|
declare const SheetOverlay: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1506
1833
|
/**
|
|
1507
1834
|
* Sheet Content Variants
|
|
1508
1835
|
*
|
|
1509
1836
|
* Defines slide-in animations for each side and size options.
|
|
1837
|
+
* @experimental
|
|
1510
1838
|
*/
|
|
1511
1839
|
declare const sheetVariants: (props?: ({
|
|
1512
1840
|
side?: "top" | "right" | "bottom" | "left" | null | undefined;
|
|
1513
1841
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1842
|
+
/** @public */
|
|
1514
1843
|
interface SheetContentProps extends react.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
|
|
1515
1844
|
}
|
|
1516
1845
|
/**
|
|
@@ -1525,6 +1854,7 @@ interface SheetContentProps extends react.ComponentPropsWithoutRef<typeof Dialog
|
|
|
1525
1854
|
* - **Close Button**: Positioned in top-right corner (16px from edges)
|
|
1526
1855
|
*
|
|
1527
1856
|
* @param side - Which edge to slide in from: "left", "right", "top", "bottom"
|
|
1857
|
+
* @public
|
|
1528
1858
|
*/
|
|
1529
1859
|
declare const SheetContent: react.ForwardRefExoticComponent<SheetContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
1530
1860
|
/**
|
|
@@ -1534,6 +1864,7 @@ declare const SheetContent: react.ForwardRefExoticComponent<SheetContentProps &
|
|
|
1534
1864
|
*
|
|
1535
1865
|
* - **Layout**: Flex column with 6px gap
|
|
1536
1866
|
* - **Text Alignment**: Left (default) or center
|
|
1867
|
+
* @public
|
|
1537
1868
|
*/
|
|
1538
1869
|
declare const SheetHeader: {
|
|
1539
1870
|
({ className, ...props }: react.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
@@ -1546,6 +1877,7 @@ declare const SheetHeader: {
|
|
|
1546
1877
|
*
|
|
1547
1878
|
* - **Layout**: Flex row on desktop, column on mobile
|
|
1548
1879
|
* - **Alignment**: Right-aligned on desktop, stretched on mobile
|
|
1880
|
+
* @experimental
|
|
1549
1881
|
*/
|
|
1550
1882
|
declare const SheetFooter: {
|
|
1551
1883
|
({ className, ...props }: react.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
@@ -1559,6 +1891,7 @@ declare const SheetFooter: {
|
|
|
1559
1891
|
* - **Font**: text-lg font-semibold
|
|
1560
1892
|
* - **Color**: text-foreground
|
|
1561
1893
|
* - **Required**: For accessibility (screen readers)
|
|
1894
|
+
* @public
|
|
1562
1895
|
*/
|
|
1563
1896
|
declare const SheetTitle: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
|
|
1564
1897
|
/**
|
|
@@ -1569,63 +1902,10 @@ declare const SheetTitle: react.ForwardRefExoticComponent<Omit<DialogPrimitive.D
|
|
|
1569
1902
|
* - **Font**: text-sm
|
|
1570
1903
|
* - **Color**: text-muted-foreground
|
|
1571
1904
|
* - **Purpose**: Provide context for screen readers
|
|
1905
|
+
* @public
|
|
1572
1906
|
*/
|
|
1573
1907
|
declare const SheetDescription: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
1574
1908
|
|
|
1575
|
-
/**
|
|
1576
|
-
* Sheet Component Types
|
|
1577
|
-
*
|
|
1578
|
-
* TypeScript type definitions for the Sheet component (Dialog variant).
|
|
1579
|
-
*/
|
|
1580
|
-
|
|
1581
|
-
/**
|
|
1582
|
-
* Sheet root component props
|
|
1583
|
-
* Extends Radix UI Dialog.Root props
|
|
1584
|
-
*/
|
|
1585
|
-
type SheetProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;
|
|
1586
|
-
/**
|
|
1587
|
-
* Sheet trigger component props
|
|
1588
|
-
* Extends Radix UI Dialog.Trigger props
|
|
1589
|
-
*/
|
|
1590
|
-
type SheetTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;
|
|
1591
|
-
/**
|
|
1592
|
-
* Sheet close component props
|
|
1593
|
-
* Extends Radix UI Dialog.Close props
|
|
1594
|
-
*/
|
|
1595
|
-
type SheetCloseProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>;
|
|
1596
|
-
/**
|
|
1597
|
-
* Sheet overlay component props
|
|
1598
|
-
* Extends Radix UI Dialog.Overlay props
|
|
1599
|
-
*/
|
|
1600
|
-
type SheetOverlayProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;
|
|
1601
|
-
/**
|
|
1602
|
-
* Sheet header component props
|
|
1603
|
-
* Standard div props
|
|
1604
|
-
*/
|
|
1605
|
-
type SheetHeaderProps = React.HTMLAttributes<HTMLDivElement>;
|
|
1606
|
-
/**
|
|
1607
|
-
* Sheet footer component props
|
|
1608
|
-
* Standard div props
|
|
1609
|
-
*/
|
|
1610
|
-
type SheetFooterProps = React.HTMLAttributes<HTMLDivElement>;
|
|
1611
|
-
/**
|
|
1612
|
-
* Sheet title component props
|
|
1613
|
-
* Extends Radix UI Dialog.Title props
|
|
1614
|
-
*/
|
|
1615
|
-
type SheetTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;
|
|
1616
|
-
/**
|
|
1617
|
-
* Sheet description component props
|
|
1618
|
-
* Extends Radix UI Dialog.Description props
|
|
1619
|
-
*/
|
|
1620
|
-
type SheetDescriptionProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;
|
|
1621
|
-
/**
|
|
1622
|
-
* Sheet component refs
|
|
1623
|
-
*/
|
|
1624
|
-
type SheetOverlayRef = React.ElementRef<typeof DialogPrimitive.Overlay>;
|
|
1625
|
-
type SheetContentRef = React.ElementRef<typeof DialogPrimitive.Content>;
|
|
1626
|
-
type SheetTitleRef = React.ElementRef<typeof DialogPrimitive.Title>;
|
|
1627
|
-
type SheetDescriptionRef = React.ElementRef<typeof DialogPrimitive.Description>;
|
|
1628
|
-
|
|
1629
1909
|
/**
|
|
1630
1910
|
* Command Component
|
|
1631
1911
|
*
|
|
@@ -1651,7 +1931,7 @@ type SheetDescriptionRef = React.ElementRef<typeof DialogPrimitive.Description>;
|
|
|
1651
1931
|
* @design-spec
|
|
1652
1932
|
* - Input height: 48px (h-12) - larger for prominence
|
|
1653
1933
|
* - Item height: 36px (h-9) desktop, 44px (h-11) mobile for touch
|
|
1654
|
-
* - Border radius:
|
|
1934
|
+
* - Border radius: `rounded-lg` for the panel, `rounded-sm` for items
|
|
1655
1935
|
* - Max list height: 400px (max-h-[400px])
|
|
1656
1936
|
* - Transition: 150ms per design system
|
|
1657
1937
|
*
|
|
@@ -1661,11 +1941,13 @@ type SheetDescriptionRef = React.ElementRef<typeof DialogPrimitive.Description>;
|
|
|
1661
1941
|
* - Screen reader announcements for results
|
|
1662
1942
|
* - Focus management and visual focus indicators
|
|
1663
1943
|
* - WCAG 2.2 AA compliant (verified contrast ratios)
|
|
1944
|
+
* @experimental
|
|
1664
1945
|
*/
|
|
1665
1946
|
type CommandProps = ComponentPropsWithoutRef<typeof Command$1>;
|
|
1666
1947
|
/**
|
|
1667
1948
|
* Command - Root container for the command palette.
|
|
1668
1949
|
* Handles filtering, keyboard navigation, and accessibility.
|
|
1950
|
+
* @experimental
|
|
1669
1951
|
*/
|
|
1670
1952
|
declare const Command: react.ForwardRefExoticComponent<Omit<{
|
|
1671
1953
|
children?: React.ReactNode;
|
|
@@ -1684,7 +1966,31 @@ declare const Command: react.ForwardRefExoticComponent<Omit<{
|
|
|
1684
1966
|
disablePointerSelection?: boolean;
|
|
1685
1967
|
vimBindings?: boolean;
|
|
1686
1968
|
} & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1687
|
-
|
|
1969
|
+
/** @experimental */
|
|
1970
|
+
interface CommandDialogProps extends DialogPrimitive.DialogProps {
|
|
1971
|
+
/**
|
|
1972
|
+
* Passed to the command root this dialog renders internally.
|
|
1973
|
+
*
|
|
1974
|
+
* A seam rather than a list of forwarded props, because the settings a caller needs from the
|
|
1975
|
+
* root are the ones this component happens not to have thought of: `label`, which supplies the
|
|
1976
|
+
* search input's accessible name (cmdk renders an EMPTY hidden label without it, and an empty
|
|
1977
|
+
* `aria-labelledby` reference is worse than none — it stops the placeholder naming the field);
|
|
1978
|
+
* `filter` and `shouldFilter`, which decide match order; and `vimBindings`, which claims Ctrl+K
|
|
1979
|
+
* and Ctrl+N inside the list.
|
|
1980
|
+
*
|
|
1981
|
+
* `children` is excluded because this component owns the dialog's contents.
|
|
1982
|
+
*/
|
|
1983
|
+
commandProps?: Omit<ComponentPropsWithoutRef<typeof Command>, "children">;
|
|
1984
|
+
/**
|
|
1985
|
+
* Passed to the dialog content this component renders internally.
|
|
1986
|
+
*
|
|
1987
|
+
* The seam that matters here is `onCloseAutoFocus`: this dialog has no trigger, so Radix has
|
|
1988
|
+
* nothing to hand focus back to, and it fires this at the point focus is actually being
|
|
1989
|
+
* returned — after the exit animation, which a timer set at close time cannot know the length
|
|
1990
|
+
* of. `className` is excluded because this component owns the dialog's own layout.
|
|
1991
|
+
*/
|
|
1992
|
+
contentProps?: Omit<ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, "children" | "className">;
|
|
1993
|
+
}
|
|
1688
1994
|
/**
|
|
1689
1995
|
* CommandDialog - Command palette in a modal dialog.
|
|
1690
1996
|
* Use this variant for Cmd+K keyboard shortcut pattern.
|
|
@@ -1711,12 +2017,15 @@ type CommandDialogProps = DialogPrimitive.DialogProps;
|
|
|
1711
2017
|
* </CommandDialog>
|
|
1712
2018
|
* )
|
|
1713
2019
|
* ```
|
|
2020
|
+
* @experimental
|
|
1714
2021
|
*/
|
|
1715
|
-
declare const CommandDialog: ({ children, ...props }: CommandDialogProps) => react_jsx_runtime.JSX.Element;
|
|
2022
|
+
declare const CommandDialog: ({ children, commandProps, contentProps, ...props }: CommandDialogProps) => react_jsx_runtime.JSX.Element;
|
|
2023
|
+
/** @experimental */
|
|
1716
2024
|
type CommandInputProps = ComponentPropsWithoutRef<typeof Command$1.Input>;
|
|
1717
2025
|
/**
|
|
1718
2026
|
* CommandInput - Search input field for filtering commands.
|
|
1719
2027
|
* Includes search icon and styled per design system.
|
|
2028
|
+
* @experimental
|
|
1720
2029
|
*/
|
|
1721
2030
|
declare const CommandInput: react.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<react.DetailedHTMLProps<react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "key" | keyof react.InputHTMLAttributes<HTMLInputElement>> & {
|
|
1722
2031
|
ref?: React.Ref<HTMLInputElement>;
|
|
@@ -1726,10 +2035,12 @@ declare const CommandInput: react.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<
|
|
|
1726
2035
|
value?: string;
|
|
1727
2036
|
onValueChange?: (search: string) => void;
|
|
1728
2037
|
} & react.RefAttributes<HTMLInputElement>, "ref"> & react.RefAttributes<HTMLInputElement>>;
|
|
2038
|
+
/** @experimental */
|
|
1729
2039
|
type CommandListProps = ComponentPropsWithoutRef<typeof Command$1.List>;
|
|
1730
2040
|
/**
|
|
1731
2041
|
* CommandList - Scrollable container for command results.
|
|
1732
2042
|
* Max height 400px per design spec to prevent tall dialogs.
|
|
2043
|
+
* @experimental
|
|
1733
2044
|
*/
|
|
1734
2045
|
declare const CommandList: react.ForwardRefExoticComponent<Omit<{
|
|
1735
2046
|
children?: React.ReactNode;
|
|
@@ -1740,10 +2051,12 @@ declare const CommandList: react.ForwardRefExoticComponent<Omit<{
|
|
|
1740
2051
|
}, "asChild" | "key" | keyof HTMLAttributes<HTMLDivElement>> & {
|
|
1741
2052
|
label?: string;
|
|
1742
2053
|
} & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2054
|
+
/** @experimental */
|
|
1743
2055
|
type CommandEmptyProps = ComponentPropsWithoutRef<typeof Command$1.Empty>;
|
|
1744
2056
|
/**
|
|
1745
2057
|
* CommandEmpty - Empty state message when no results found.
|
|
1746
2058
|
* Centered text with muted color per design spec.
|
|
2059
|
+
* @experimental
|
|
1747
2060
|
*/
|
|
1748
2061
|
declare const CommandEmpty: react.ForwardRefExoticComponent<Omit<{
|
|
1749
2062
|
children?: React.ReactNode;
|
|
@@ -1752,10 +2065,12 @@ declare const CommandEmpty: react.ForwardRefExoticComponent<Omit<{
|
|
|
1752
2065
|
} & {
|
|
1753
2066
|
asChild?: boolean;
|
|
1754
2067
|
}, "asChild" | "key" | keyof HTMLAttributes<HTMLDivElement>> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2068
|
+
/** @experimental */
|
|
1755
2069
|
type CommandGroupProps = ComponentPropsWithoutRef<typeof Command$1.Group>;
|
|
1756
2070
|
/**
|
|
1757
2071
|
* CommandGroup - Grouped section of commands with optional heading.
|
|
1758
2072
|
* Heading styled as uppercase, small, semibold per design spec.
|
|
2073
|
+
* @experimental
|
|
1759
2074
|
*/
|
|
1760
2075
|
declare const CommandGroup: react.ForwardRefExoticComponent<Omit<{
|
|
1761
2076
|
children?: React.ReactNode;
|
|
@@ -1768,10 +2083,12 @@ declare const CommandGroup: react.ForwardRefExoticComponent<Omit<{
|
|
|
1768
2083
|
value?: string;
|
|
1769
2084
|
forceMount?: boolean;
|
|
1770
2085
|
} & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2086
|
+
/** @experimental */
|
|
1771
2087
|
type CommandSeparatorProps = ComponentPropsWithoutRef<typeof Command$1.Separator>;
|
|
1772
2088
|
/**
|
|
1773
2089
|
* CommandSeparator - Visual divider between command groups.
|
|
1774
|
-
* 1px line with border border-
|
|
2090
|
+
* 1px line with border border-border color, 8px margin top/bottom.
|
|
2091
|
+
* @experimental
|
|
1775
2092
|
*/
|
|
1776
2093
|
declare const CommandSeparator: react.ForwardRefExoticComponent<Omit<Pick<Pick<react.DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof HTMLAttributes<HTMLDivElement>> & {
|
|
1777
2094
|
ref?: React.Ref<HTMLDivElement>;
|
|
@@ -1780,11 +2097,13 @@ declare const CommandSeparator: react.ForwardRefExoticComponent<Omit<Pick<Pick<r
|
|
|
1780
2097
|
}, "asChild" | "key" | keyof HTMLAttributes<HTMLDivElement>> & {
|
|
1781
2098
|
alwaysRender?: boolean;
|
|
1782
2099
|
} & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2100
|
+
/** @experimental */
|
|
1783
2101
|
type CommandItemProps = ComponentPropsWithoutRef<typeof Command$1.Item>;
|
|
1784
2102
|
/**
|
|
1785
2103
|
* CommandItem - Individual selectable command item.
|
|
1786
2104
|
* Height: 36px desktop, 44px mobile per design spec.
|
|
1787
2105
|
* Includes hover, focus, and selected states.
|
|
2106
|
+
* @experimental
|
|
1788
2107
|
*/
|
|
1789
2108
|
declare const CommandItem: react.ForwardRefExoticComponent<Omit<{
|
|
1790
2109
|
children?: React.ReactNode;
|
|
@@ -1799,13 +2118,69 @@ declare const CommandItem: react.ForwardRefExoticComponent<Omit<{
|
|
|
1799
2118
|
keywords?: string[];
|
|
1800
2119
|
forceMount?: boolean;
|
|
1801
2120
|
} & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2121
|
+
/** @experimental */
|
|
1802
2122
|
type CommandShortcutProps = HTMLAttributes<HTMLSpanElement>;
|
|
1803
2123
|
/**
|
|
1804
2124
|
* CommandShortcut - Keyboard shortcut display (e.g., "⌘K", "↵ Enter").
|
|
1805
2125
|
* Monospace font, subtle background, right-aligned per design spec.
|
|
2126
|
+
* @experimental
|
|
1806
2127
|
*/
|
|
1807
2128
|
declare const CommandShortcut: react.ForwardRefExoticComponent<CommandShortcutProps & react.RefAttributes<HTMLSpanElement>>;
|
|
1808
2129
|
|
|
2130
|
+
/**
|
|
2131
|
+
* The command palette's default match scorer, re-exported.
|
|
2132
|
+
*
|
|
2133
|
+
* A caller that overrides `filter` — to keep an opaque item value out of the scoring, say — still
|
|
2134
|
+
* wants the ranking that comes for free, and reaching for `cmdk` directly is not open to every
|
|
2135
|
+
* package here.
|
|
2136
|
+
*
|
|
2137
|
+
* Bound to a declaration rather than re-exported with `export { x as y }`: the bundler keeps a doc
|
|
2138
|
+
* comment attached to a declaration and drops one attached to an export statement, so the release
|
|
2139
|
+
* tag would not reach the published types.
|
|
2140
|
+
*
|
|
2141
|
+
* @experimental
|
|
2142
|
+
*/
|
|
2143
|
+
declare const commandDefaultFilter: (value: string, search: string, keywords?: string[]) => number;
|
|
2144
|
+
/**
|
|
2145
|
+
* The value of the item the palette has HIGHLIGHTED, from a component inside
|
|
2146
|
+
* it.
|
|
2147
|
+
*
|
|
2148
|
+
* The palette owns which item is highlighted, and it moves that highlight for
|
|
2149
|
+
* reasons a caller never sees: a pointer crossing an item, an arrow key, and a
|
|
2150
|
+
* filter that removes the item the highlight was on. Anything outside wanting
|
|
2151
|
+
* to follow it — a preview pane, a description strip, a status line — needs to
|
|
2152
|
+
* read that rather than keep a copy.
|
|
2153
|
+
*
|
|
2154
|
+
* Reading beats mirroring here for a specific reason rather than on principle.
|
|
2155
|
+
* The palette's controlled `value` sets which item is MARKED, and does not move
|
|
2156
|
+
* the internal cursor that `aria-activedescendant` and the scroll follow. So a
|
|
2157
|
+
* caller that writes the value to steer the highlight desynchronises the two:
|
|
2158
|
+
* the item drawn as current and the option announced as current stop agreeing,
|
|
2159
|
+
* and after a filter the announcement can name an element that has been
|
|
2160
|
+
* removed. A read leaves one owner and takes a derived view.
|
|
2161
|
+
*
|
|
2162
|
+
* NARROWED to the one field deliberately. The underlying library exposes its
|
|
2163
|
+
* whole store through a selector — the raw search text, its internal item and
|
|
2164
|
+
* group maps, the id it uses for `aria-activedescendant` — and publishing that
|
|
2165
|
+
* selector would make every one of those part of this kit's public API and its
|
|
2166
|
+
* generated declarations. A dependency upgrade could then reshape what callers
|
|
2167
|
+
* can reach without any export changing name, which is exactly what the
|
|
2168
|
+
* surface snapshot cannot see. This returns a string.
|
|
2169
|
+
*
|
|
2170
|
+
* Empty string means nothing is highlighted, which is the library's own
|
|
2171
|
+
* spelling and a different answer from "an item whose value is unknown".
|
|
2172
|
+
*
|
|
2173
|
+
* Must be called from inside the palette, since that is where the state lives.
|
|
2174
|
+
*
|
|
2175
|
+
* Bound to a declaration rather than re-exported with `export { x as y }`: the
|
|
2176
|
+
* bundler keeps a doc comment attached to a declaration and drops one attached
|
|
2177
|
+
* to an export statement, so the release tag would not reach the published
|
|
2178
|
+
* types.
|
|
2179
|
+
*
|
|
2180
|
+
* @experimental
|
|
2181
|
+
*/
|
|
2182
|
+
declare const useCommandHighlight: () => string;
|
|
2183
|
+
|
|
1809
2184
|
/**
|
|
1810
2185
|
* Spinner Component - Design System Specification
|
|
1811
2186
|
*
|
|
@@ -1849,6 +2224,7 @@ declare const CommandShortcut: react.ForwardRefExoticComponent<CommandShortcutPr
|
|
|
1849
2224
|
* @example
|
|
1850
2225
|
* // Custom color
|
|
1851
2226
|
* <Spinner className="text-primary" />
|
|
2227
|
+
* @experimental
|
|
1852
2228
|
*/
|
|
1853
2229
|
declare const spinnerVariants: (props?: ({
|
|
1854
2230
|
size?: "sm" | "md" | "lg" | null | undefined;
|
|
@@ -1858,6 +2234,7 @@ declare const spinnerVariants: (props?: ({
|
|
|
1858
2234
|
*
|
|
1859
2235
|
* Extends LucideProps to support all standard SVG attributes (data-*, id, etc.)
|
|
1860
2236
|
* while providing size variants and accessibility features.
|
|
2237
|
+
* @experimental
|
|
1861
2238
|
*/
|
|
1862
2239
|
type SpinnerProps = Omit<LucideProps, "size"> & VariantProps<typeof spinnerVariants> & {
|
|
1863
2240
|
/**
|
|
@@ -1868,6 +2245,7 @@ type SpinnerProps = Omit<LucideProps, "size"> & VariantProps<typeof spinnerVaria
|
|
|
1868
2245
|
};
|
|
1869
2246
|
/**
|
|
1870
2247
|
* Spinner component for loading states
|
|
2248
|
+
* @experimental
|
|
1871
2249
|
*/
|
|
1872
2250
|
declare const Spinner: react.ForwardRefExoticComponent<Omit<SpinnerProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1873
2251
|
|
|
@@ -1936,9 +2314,9 @@ declare const Spinner: react.ForwardRefExoticComponent<Omit<SpinnerProps, "ref">
|
|
|
1936
2314
|
*
|
|
1937
2315
|
* Customization:
|
|
1938
2316
|
* All styling uses CSS variables from the design system:
|
|
1939
|
-
* - --normal-bg: Background color (uses --popover with fallback)
|
|
1940
|
-
* - --normal-text: Text color (uses --popover-foreground with fallback)
|
|
1941
|
-
* - --normal-border: Border color (uses --border with fallback)
|
|
2317
|
+
* - --normal-bg: Background color (uses --nx-popover with fallback)
|
|
2318
|
+
* - --normal-text: Text color (uses --nx-popover-foreground with fallback)
|
|
2319
|
+
* - --normal-border: Border color (uses --nx-border with fallback)
|
|
1942
2320
|
* - --border-radius: Border radius (uses --radius with fallback)
|
|
1943
2321
|
*
|
|
1944
2322
|
* Security:
|
|
@@ -1960,20 +2338,30 @@ declare const Spinner: react.ForwardRefExoticComponent<Omit<SpinnerProps, "ref">
|
|
|
1960
2338
|
*
|
|
1961
2339
|
* @see https://sonner.emilkowal.ski/ - Sonner documentation
|
|
1962
2340
|
* @see https://ui.shadcn.com/docs/components/sonner - shadcn/ui integration guide
|
|
2341
|
+
* @experimental
|
|
1963
2342
|
*/
|
|
1964
2343
|
declare function Toaster({ theme, ...props }: ToasterProps): react_jsx_runtime.JSX.Element;
|
|
1965
2344
|
|
|
2345
|
+
/** @experimental */
|
|
1966
2346
|
declare const Table: react.ForwardRefExoticComponent<react.HTMLAttributes<HTMLTableElement> & react.RefAttributes<HTMLTableElement>>;
|
|
2347
|
+
/** @experimental */
|
|
1967
2348
|
declare const TableHeader: react.ForwardRefExoticComponent<react.HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
|
|
2349
|
+
/** @experimental */
|
|
1968
2350
|
declare const TableBody: react.ForwardRefExoticComponent<react.HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
|
|
2351
|
+
/** @experimental */
|
|
1969
2352
|
declare const TableFooter: react.ForwardRefExoticComponent<react.HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
|
|
2353
|
+
/** @experimental */
|
|
1970
2354
|
declare const TableRow: react.ForwardRefExoticComponent<react.HTMLAttributes<HTMLTableRowElement> & react.RefAttributes<HTMLTableRowElement>>;
|
|
2355
|
+
/** @experimental */
|
|
1971
2356
|
declare const TableHead: react.ForwardRefExoticComponent<react.ThHTMLAttributes<HTMLTableCellElement> & react.RefAttributes<HTMLTableCellElement>>;
|
|
2357
|
+
/** @experimental */
|
|
1972
2358
|
declare const TableCell: react.ForwardRefExoticComponent<react.TdHTMLAttributes<HTMLTableCellElement> & react.RefAttributes<HTMLTableCellElement>>;
|
|
2359
|
+
/** @experimental */
|
|
1973
2360
|
declare const TableCaption: react.ForwardRefExoticComponent<react.HTMLAttributes<HTMLTableCaptionElement> & react.RefAttributes<HTMLTableCaptionElement>>;
|
|
1974
2361
|
|
|
1975
2362
|
/**
|
|
1976
2363
|
* Props for TableSearch component
|
|
2364
|
+
* @experimental
|
|
1977
2365
|
*/
|
|
1978
2366
|
interface TableSearchProps {
|
|
1979
2367
|
/** Current search value */
|
|
@@ -2008,11 +2396,13 @@ interface TableSearchProps {
|
|
|
2008
2396
|
* isLoading={loading}
|
|
2009
2397
|
* />
|
|
2010
2398
|
* ```
|
|
2399
|
+
* @experimental
|
|
2011
2400
|
*/
|
|
2012
2401
|
declare function TableSearch({ value, onChange, onClear, placeholder, isLoading, inputRef, }: TableSearchProps): react_jsx_runtime.JSX.Element;
|
|
2013
2402
|
|
|
2014
2403
|
/**
|
|
2015
2404
|
* Props for TableError component
|
|
2405
|
+
* @experimental
|
|
2016
2406
|
*/
|
|
2017
2407
|
interface TableErrorProps {
|
|
2018
2408
|
/** Error message to display */
|
|
@@ -2020,14 +2410,17 @@ interface TableErrorProps {
|
|
|
2020
2410
|
}
|
|
2021
2411
|
/**
|
|
2022
2412
|
* Error state component for tables
|
|
2413
|
+
* @experimental
|
|
2023
2414
|
*/
|
|
2024
2415
|
declare function TableError({ message, }: TableErrorProps): react_jsx_runtime.JSX.Element;
|
|
2025
2416
|
/**
|
|
2026
2417
|
* Loading state component for tables
|
|
2418
|
+
* @experimental
|
|
2027
2419
|
*/
|
|
2028
2420
|
declare function TableLoading(): react_jsx_runtime.JSX.Element;
|
|
2029
2421
|
/**
|
|
2030
2422
|
* Props for TableEmpty component
|
|
2423
|
+
* @experimental
|
|
2031
2424
|
*/
|
|
2032
2425
|
interface TableEmptyProps {
|
|
2033
2426
|
/** Custom message to display when no data */
|
|
@@ -2035,9 +2428,97 @@ interface TableEmptyProps {
|
|
|
2035
2428
|
}
|
|
2036
2429
|
/**
|
|
2037
2430
|
* Empty state component for tables
|
|
2431
|
+
* @experimental
|
|
2038
2432
|
*/
|
|
2039
2433
|
declare function TableEmpty({ message }: TableEmptyProps): react_jsx_runtime.JSX.Element;
|
|
2040
2434
|
|
|
2435
|
+
/**
|
|
2436
|
+
* TableSkeleton Component
|
|
2437
|
+
*
|
|
2438
|
+
* Generic loading skeleton for data tables.
|
|
2439
|
+
* Renders header, body, and footer skeleton bars inside a card.
|
|
2440
|
+
* Unified with EntryTable skeleton pattern for consistency across all tables.
|
|
2441
|
+
*/
|
|
2442
|
+
|
|
2443
|
+
/** @experimental */
|
|
2444
|
+
interface TableSkeletonProps {
|
|
2445
|
+
columns?: number;
|
|
2446
|
+
rowCount?: number;
|
|
2447
|
+
hideWrapper?: boolean;
|
|
2448
|
+
hideFooter?: boolean;
|
|
2449
|
+
}
|
|
2450
|
+
/** @experimental */
|
|
2451
|
+
declare const TableSkeleton: react.FC<TableSkeletonProps>;
|
|
2452
|
+
|
|
2453
|
+
/**
|
|
2454
|
+
* One preset a host offers.
|
|
2455
|
+
*
|
|
2456
|
+
* `color` is what the swatch is PAINTED with. `value` is what `onSwatchSelect`
|
|
2457
|
+
* hands back, unread by this component — a host storing design tokens puts its
|
|
2458
|
+
* own token reference there and receives it unchanged, so choosing a swatch
|
|
2459
|
+
* never resolves a token into the colour it currently happens to be. Without
|
|
2460
|
+
* that, re-theming stops moving the values that pointed at it.
|
|
2461
|
+
*
|
|
2462
|
+
* @experimental
|
|
2463
|
+
*/
|
|
2464
|
+
interface ColorSwatch<TValue = string> {
|
|
2465
|
+
id: string;
|
|
2466
|
+
label: string;
|
|
2467
|
+
color: string;
|
|
2468
|
+
value?: TValue;
|
|
2469
|
+
}
|
|
2470
|
+
/**
|
|
2471
|
+
* Props for ColorPicker.
|
|
2472
|
+
* @experimental
|
|
2473
|
+
*/
|
|
2474
|
+
interface ColorPickerProps<TValue = string> {
|
|
2475
|
+
/** The colour shown on the surface, as hex. */
|
|
2476
|
+
color: string;
|
|
2477
|
+
/** A colour was chosen by editing — surface, hue, alpha or the hex field. */
|
|
2478
|
+
onColorChange: (color: string) => void;
|
|
2479
|
+
/** Presets. Painted from `color`, returned by `value`. */
|
|
2480
|
+
swatches?: ColorSwatch<TValue>[];
|
|
2481
|
+
/**
|
|
2482
|
+
* A preset was chosen. Separate from `onColorChange` because only the host
|
|
2483
|
+
* can say what a swatch MEANS: the two are different events, and collapsing
|
|
2484
|
+
* them is what loses a token reference.
|
|
2485
|
+
*/
|
|
2486
|
+
onSwatchSelect?: (swatch: ColorSwatch<TValue>) => void;
|
|
2487
|
+
/**
|
|
2488
|
+
* Recently used colours. Owned by the host, never by this component — the
|
|
2489
|
+
* admin scopes them per user, and a component writing `localStorage` at
|
|
2490
|
+
* render is unusable on a server and untestable without a DOM.
|
|
2491
|
+
*/
|
|
2492
|
+
recentColors?: string[];
|
|
2493
|
+
/** Alpha channel. Off by default: most call sites want an opaque colour. */
|
|
2494
|
+
showAlpha?: boolean;
|
|
2495
|
+
className?: string;
|
|
2496
|
+
}
|
|
2497
|
+
/**
|
|
2498
|
+
* A colour control: a saturation square, a hue strip, optional alpha, a hex
|
|
2499
|
+
* field, and any presets the host supplies.
|
|
2500
|
+
*
|
|
2501
|
+
* Deliberately knows nothing about design tokens. A swatch carries an opaque
|
|
2502
|
+
* `value` this component never reads and hands back untouched, so a host can
|
|
2503
|
+
* store a token reference and keep it. That is what lets one component serve
|
|
2504
|
+
* both a plain colour field and a token-aware surface without either learning
|
|
2505
|
+
* about the other.
|
|
2506
|
+
*
|
|
2507
|
+
* @experimental
|
|
2508
|
+
*
|
|
2509
|
+
* @example
|
|
2510
|
+
* ```tsx
|
|
2511
|
+
* <ColorPicker
|
|
2512
|
+
* color={color}
|
|
2513
|
+
* onColorChange={setColor}
|
|
2514
|
+
* swatches={tokens.map(t => ({ id: t.name, label: t.name, color: t.value, value: { $token: t.name } }))}
|
|
2515
|
+
* onSwatchSelect={s => store(s.value)}
|
|
2516
|
+
* />
|
|
2517
|
+
* ```
|
|
2518
|
+
*/
|
|
2519
|
+
declare function ColorPicker<TValue = string>({ color, onColorChange, swatches, onSwatchSelect, recentColors, showAlpha, className, }: ColorPickerProps<TValue>): react_jsx_runtime.JSX.Element;
|
|
2520
|
+
|
|
2521
|
+
/** @experimental */
|
|
2041
2522
|
interface PaginationMeta {
|
|
2042
2523
|
total: number;
|
|
2043
2524
|
page: number;
|
|
@@ -2046,14 +2527,17 @@ interface PaginationMeta {
|
|
|
2046
2527
|
hasNext: boolean;
|
|
2047
2528
|
hasPrev: boolean;
|
|
2048
2529
|
}
|
|
2530
|
+
/** @experimental */
|
|
2049
2531
|
interface SortInfo {
|
|
2050
2532
|
field: string;
|
|
2051
2533
|
direction: "asc" | "desc";
|
|
2052
2534
|
}
|
|
2535
|
+
/** @experimental */
|
|
2053
2536
|
interface FilterInfo {
|
|
2054
2537
|
search?: string;
|
|
2055
2538
|
filters?: Record<string, unknown>;
|
|
2056
2539
|
}
|
|
2540
|
+
/** @experimental */
|
|
2057
2541
|
interface TableParams {
|
|
2058
2542
|
pagination: {
|
|
2059
2543
|
page: number;
|
|
@@ -2062,258 +2546,934 @@ interface TableParams {
|
|
|
2062
2546
|
sorting?: SortInfo[];
|
|
2063
2547
|
filters?: FilterInfo;
|
|
2064
2548
|
}
|
|
2549
|
+
/** @experimental */
|
|
2065
2550
|
interface ListResponse<TData> {
|
|
2066
2551
|
items: TData[];
|
|
2067
2552
|
meta: PaginationMeta;
|
|
2068
2553
|
}
|
|
2554
|
+
/** @experimental */
|
|
2069
2555
|
interface PaginationConfig {
|
|
2070
2556
|
pageSize?: number;
|
|
2071
2557
|
pageSizeOptions?: number[];
|
|
2072
2558
|
showPageSizeSelector?: boolean;
|
|
2073
2559
|
maxVisiblePages?: number;
|
|
2074
2560
|
}
|
|
2561
|
+
/** @experimental */
|
|
2075
2562
|
interface ActionCallbacks<TData = unknown> {
|
|
2076
2563
|
onEdit?: (item: TData) => void;
|
|
2077
2564
|
onDelete?: (item: TData) => void;
|
|
2078
2565
|
onView?: (item: TData) => void;
|
|
2079
2566
|
}
|
|
2567
|
+
/** @experimental */
|
|
2080
2568
|
type DataFetcher<TData> = (params: TableParams) => Promise<ListResponse<TData>>;
|
|
2081
2569
|
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
/** Pagination metadata from server */
|
|
2087
|
-
meta: PaginationMeta;
|
|
2088
|
-
/** Callback when page changes */
|
|
2089
|
-
onPageChange: (page: number) => void;
|
|
2090
|
-
/** Callback when page size changes */
|
|
2091
|
-
onPageSizeChange: (pageSize: number) => void;
|
|
2092
|
-
/** Pagination configuration */
|
|
2093
|
-
config?: Required<PaginationConfig>;
|
|
2094
|
-
/** Whether data is currently loading */
|
|
2095
|
-
isLoading?: boolean;
|
|
2570
|
+
interface PortalProviderProps {
|
|
2571
|
+
/** The DOM element to portal overlay content into. Defaults to document.body (Radix default). */
|
|
2572
|
+
container: HTMLElement | null;
|
|
2573
|
+
children: ReactNode;
|
|
2096
2574
|
}
|
|
2575
|
+
/** @public */
|
|
2576
|
+
declare function PortalProvider({ container, children }: PortalProviderProps): react_jsx_runtime.JSX.Element;
|
|
2577
|
+
/** @public */
|
|
2578
|
+
declare function usePortalContainer(): HTMLElement | undefined;
|
|
2579
|
+
|
|
2580
|
+
/** @experimental */
|
|
2581
|
+
declare const ContextMenu: react.FC<ContextMenuPrimitive.ContextMenuProps>;
|
|
2582
|
+
/** @experimental */
|
|
2583
|
+
declare const ContextMenuTrigger: react.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuTriggerProps & react.RefAttributes<HTMLSpanElement>>;
|
|
2584
|
+
/** @experimental */
|
|
2585
|
+
declare const ContextMenuGroup: react.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
2586
|
+
/** @experimental */
|
|
2587
|
+
declare const ContextMenuSub: react.FC<ContextMenuPrimitive.ContextMenuSubProps>;
|
|
2588
|
+
/** @experimental */
|
|
2589
|
+
declare const ContextMenuRadioGroup: react.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuRadioGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
2590
|
+
/** @experimental */
|
|
2591
|
+
declare const ContextMenuSubTrigger: react.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubTriggerProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
2592
|
+
inset?: boolean;
|
|
2593
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2594
|
+
/** @experimental */
|
|
2595
|
+
declare const ContextMenuSubContent: react.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2596
|
+
/** @experimental */
|
|
2597
|
+
declare const ContextMenuContent: react.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2598
|
+
/** @experimental */
|
|
2599
|
+
declare const ContextMenuItem: react.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
2600
|
+
inset?: boolean;
|
|
2601
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2602
|
+
/** @experimental */
|
|
2603
|
+
declare const ContextMenuCheckboxItem: react.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuCheckboxItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2604
|
+
/** @experimental */
|
|
2605
|
+
declare const ContextMenuRadioItem: react.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuRadioItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2606
|
+
/** @experimental */
|
|
2607
|
+
declare const ContextMenuLabel: react.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuLabelProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
2608
|
+
inset?: boolean;
|
|
2609
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2610
|
+
/** @experimental */
|
|
2611
|
+
declare const ContextMenuSeparator: react.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSeparatorProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2097
2612
|
/**
|
|
2098
|
-
*
|
|
2613
|
+
* A keyboard shortcut hint, right-aligned in the item.
|
|
2614
|
+
*
|
|
2615
|
+
* @experimental
|
|
2099
2616
|
*/
|
|
2100
|
-
declare
|
|
2617
|
+
declare const ContextMenuShortcut: {
|
|
2618
|
+
({ className, ...props }: react.HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
|
|
2619
|
+
displayName: string;
|
|
2620
|
+
};
|
|
2101
2621
|
|
|
2102
2622
|
/**
|
|
2103
|
-
*
|
|
2623
|
+
* A splitter's accessible name, which the caller must supply one way or the
|
|
2624
|
+
* other.
|
|
2625
|
+
*
|
|
2626
|
+
* REQUIRED rather than documented, because the handle is focusable: a keyboard
|
|
2627
|
+
* user lands on it whether or not anyone remembered, and an unnamed separator
|
|
2628
|
+
* announces its position — "74" — with nothing saying what is at 74. The
|
|
2629
|
+
* caller is the only one who can name it, since only the caller knows what the
|
|
2630
|
+
* two panels hold, so the type is the only place the requirement can live.
|
|
2631
|
+
*
|
|
2632
|
+
* Either attribute satisfies it and neither may be paired with the other: two
|
|
2633
|
+
* names on one element is not a stronger label, it is an ambiguity resolved by
|
|
2634
|
+
* precedence rules nobody writing the call site is thinking about.
|
|
2635
|
+
*/
|
|
2636
|
+
type SplitterName = {
|
|
2637
|
+
"aria-label": string;
|
|
2638
|
+
"aria-labelledby"?: never;
|
|
2639
|
+
} | {
|
|
2640
|
+
"aria-labelledby": string;
|
|
2641
|
+
"aria-label"?: never;
|
|
2642
|
+
};
|
|
2643
|
+
/**
|
|
2644
|
+
* A group of resizable panels, laid out horizontally or vertically.
|
|
2104
2645
|
*
|
|
2105
|
-
*
|
|
2106
|
-
* Renders header, body, and footer skeleton bars inside a card.
|
|
2107
|
-
* Unified with EntryTable skeleton pattern for consistency across all tables.
|
|
2646
|
+
* @experimental
|
|
2108
2647
|
*/
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2648
|
+
declare const ResizablePanelGroup: ({ className, ...props }: react.ComponentProps<typeof ResizablePrimitive.Group>) => react_jsx_runtime.JSX.Element;
|
|
2649
|
+
/**
|
|
2650
|
+
* One region of a panel group.
|
|
2651
|
+
*
|
|
2652
|
+
* @experimental
|
|
2653
|
+
*/
|
|
2654
|
+
declare const ResizablePanel: typeof ResizablePrimitive.Panel;
|
|
2655
|
+
/**
|
|
2656
|
+
* The draggable divider between two panels.
|
|
2657
|
+
*
|
|
2658
|
+
* The visible line is 1px; the element around it is wider and transparent, so the pointer target
|
|
2659
|
+
* is comfortably larger than the line it appears to grab. `withGrip` adds a visible handle, which
|
|
2660
|
+
* is worth it on a divider people are meant to discover rather than one they already expect.
|
|
2661
|
+
*
|
|
2662
|
+
* @experimental
|
|
2663
|
+
*/
|
|
2664
|
+
declare const ResizableHandle: ({ withGrip, className, children, ...props }: Omit<react.ComponentProps<typeof ResizablePrimitive.Separator>, "aria-label" | "aria-labelledby"> & SplitterName & {
|
|
2665
|
+
withGrip?: boolean;
|
|
2666
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
2117
2667
|
|
|
2118
2668
|
/**
|
|
2119
|
-
*
|
|
2669
|
+
* TreeView
|
|
2670
|
+
*
|
|
2671
|
+
* A keyboard-operable, virtualized tree. The layers panel of an editor is this control: a
|
|
2672
|
+
* hierarchy that can hold thousands of nodes, that someone navigates with arrow keys as much as
|
|
2673
|
+
* with a pointer, and that has to stay responsive while they do.
|
|
2120
2674
|
*
|
|
2121
|
-
*
|
|
2675
|
+
* **Why virtualized, and why that decides the markup.** A document of a few thousand blocks
|
|
2676
|
+
* renders a few thousand rows, and the cost is not the React work — it is layout and paint on
|
|
2677
|
+
* every expand, scroll and selection. Only the visible window is rendered here.
|
|
2122
2678
|
*
|
|
2123
|
-
*
|
|
2124
|
-
*
|
|
2679
|
+
* That has a consequence the accessibility notes below depend on: with only a window in the DOM,
|
|
2680
|
+
* the nested `role="group"` markup the tree pattern usually uses **cannot be built**, because an
|
|
2681
|
+
* item's children may not be rendered at all. The APG covers this exact case by allowing a FLAT
|
|
2682
|
+
* set of `treeitem`s that describe the hierarchy through `aria-level`, `aria-setsize` and
|
|
2683
|
+
* `aria-posinset` instead of through nesting. A screen reader reads depth and position from those
|
|
2684
|
+
* attributes, so they are not decoration — without them a virtualized tree announces itself as a
|
|
2685
|
+
* flat list of whatever happens to be on screen.
|
|
2686
|
+
*
|
|
2687
|
+
* **Why a headless virtualizer.** The markup above is the requirement, so anything that owns the
|
|
2688
|
+
* DOM is unusable. `@tanstack/react-virtual` computes offsets and renders nothing.
|
|
2689
|
+
*
|
|
2690
|
+
* **State is controllable, not controlled.** `expandedIds`/`selectedId` may be passed with their
|
|
2691
|
+
* `onChange` partners to drive the tree from a store — which an editor will do, since selection is
|
|
2692
|
+
* shared with the canvas and the inspector — or omitted entirely, in which case the tree keeps its
|
|
2693
|
+
* own. Requiring a store for a tree in a settings dialog would be a poor trade.
|
|
2694
|
+
*
|
|
2695
|
+
* **Design specifications**:
|
|
2696
|
+
* - Row height: fixed 28px (`--tree-row`), so the virtualizer needs no measurement pass
|
|
2697
|
+
* - Indent: 12px per level, applied as padding so the whole row stays a hit target
|
|
2698
|
+
* - Selection: `bg-muted`, matching the menu highlight rather than a full-contrast flip
|
|
2699
|
+
* - Focus: `focus-visible` ring in the focus token
|
|
2700
|
+
*
|
|
2701
|
+
* **Accessibility**:
|
|
2702
|
+
* - `role="tree"` with flat `role="treeitem"` children carrying `aria-level`, `aria-setsize`,
|
|
2703
|
+
* `aria-posinset`, and `aria-expanded` on anything with children
|
|
2704
|
+
* - Roving tabindex: exactly one row is in the tab order, so Tab enters and leaves the tree once
|
|
2705
|
+
* rather than walking every node
|
|
2706
|
+
* - Arrow keys move and expand, per the APG tree pattern: Right expands then descends, Left
|
|
2707
|
+
* collapses then ascends, Home/End jump to the ends, `*` expands every sibling
|
|
2708
|
+
* - Typeahead focuses the next row whose label starts with what was typed
|
|
2709
|
+
* - Moving focus scrolls the row into view, which virtualization would otherwise prevent: a row
|
|
2710
|
+
* outside the window has no element to focus
|
|
2125
2711
|
*
|
|
2126
2712
|
* @example
|
|
2127
2713
|
* ```tsx
|
|
2128
|
-
*
|
|
2129
|
-
*
|
|
2130
|
-
*
|
|
2131
|
-
*
|
|
2132
|
-
*
|
|
2133
|
-
*
|
|
2134
|
-
*
|
|
2135
|
-
* const columns: Column<User>[] = [
|
|
2136
|
-
* {
|
|
2137
|
-
* key: "name",
|
|
2138
|
-
* label: "Name",
|
|
2139
|
-
* // value is inferred as string, not string | number
|
|
2140
|
-
* render: (value, user) => <strong>{value}</strong>
|
|
2141
|
-
* },
|
|
2142
|
-
* {
|
|
2143
|
-
* key: "age",
|
|
2144
|
-
* label: "Age",
|
|
2145
|
-
* // value is inferred as number, not string | number
|
|
2146
|
-
* render: (value) => `${value} years old`
|
|
2147
|
-
* }
|
|
2148
|
-
* ];
|
|
2714
|
+
* <TreeView
|
|
2715
|
+
* nodes={layers}
|
|
2716
|
+
* aria-label="Layers"
|
|
2717
|
+
* selectedId={selected}
|
|
2718
|
+
* onSelectedChange={setSelected}
|
|
2719
|
+
* className="h-full"
|
|
2720
|
+
* />
|
|
2149
2721
|
* ```
|
|
2722
|
+
*
|
|
2723
|
+
* @module
|
|
2150
2724
|
*/
|
|
2151
|
-
|
|
2152
|
-
/** Unique key for the column (must match a property in T) */
|
|
2153
|
-
key: K;
|
|
2154
|
-
/** Display label for the column header */
|
|
2155
|
-
label: react.ReactNode;
|
|
2156
|
-
/** Optional custom renderer for cell content with type-safe value */
|
|
2157
|
-
render?: (value: T[K], item: T) => react.ReactNode;
|
|
2158
|
-
/** Hide column on mobile card view (optional, default: false) */
|
|
2159
|
-
hideOnMobile?: boolean;
|
|
2160
|
-
/** Hide the label on mobile card view (optional, default: false) */
|
|
2161
|
-
hideLabelOnMobile?: boolean;
|
|
2162
|
-
/** Optional custom className for the table header cell */
|
|
2163
|
-
headerClassName?: string;
|
|
2164
|
-
/** Optional custom className for the table body cell */
|
|
2165
|
-
cellClassName?: string;
|
|
2166
|
-
};
|
|
2725
|
+
|
|
2167
2726
|
/**
|
|
2168
|
-
*
|
|
2727
|
+
* One node of the tree. Children are omitted or empty for a leaf.
|
|
2169
2728
|
*
|
|
2170
|
-
* @
|
|
2729
|
+
* @experimental
|
|
2171
2730
|
*/
|
|
2172
|
-
|
|
2731
|
+
interface TreeNode {
|
|
2732
|
+
/** Stable identity. What selection and expansion are keyed by. */
|
|
2173
2733
|
id: string;
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
/**
|
|
2184
|
-
|
|
2185
|
-
/**
|
|
2186
|
-
|
|
2187
|
-
/**
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2734
|
+
/** What the row shows. A string also feeds typeahead; anything else needs `textValue`. */
|
|
2735
|
+
label: react.ReactNode;
|
|
2736
|
+
/**
|
|
2737
|
+
* The text typeahead matches on, when `label` is not a string.
|
|
2738
|
+
*
|
|
2739
|
+
* Without it a row rendered as markup cannot be typed to, and a keyboard user loses the fastest
|
|
2740
|
+
* way through a long tree.
|
|
2741
|
+
*/
|
|
2742
|
+
textValue?: string;
|
|
2743
|
+
/** Children, if any. An empty array still marks the node as a parent. */
|
|
2744
|
+
children?: readonly TreeNode[];
|
|
2745
|
+
/** Shown before the label, after the twisty. */
|
|
2746
|
+
icon?: react.ReactNode;
|
|
2747
|
+
/** Skipped by every keyboard move and not selectable. */
|
|
2748
|
+
disabled?: boolean;
|
|
2749
|
+
}
|
|
2750
|
+
/**
|
|
2751
|
+
* Which gesture a row's modifiers meant.
|
|
2752
|
+
*
|
|
2753
|
+
* Named by the same three words the rest of the system uses, so a caller maps
|
|
2754
|
+
* them onto its own selection rules without translating. Both Meta and Control
|
|
2755
|
+
* mean toggle: a Mac author presses Command and a Windows author presses
|
|
2756
|
+
* Control, and neither ever presses the other's.
|
|
2757
|
+
*
|
|
2758
|
+
* Shift outranks the toggle modifier — a shift+mod click is a slip rather than
|
|
2759
|
+
* a fourth gesture, and extending is the one whose result is visible and undone
|
|
2760
|
+
* by a plain click.
|
|
2761
|
+
*
|
|
2762
|
+
* @experimental
|
|
2763
|
+
*/
|
|
2764
|
+
type TreeSelectionMode = "replace" | "toggle" | "extend";
|
|
2765
|
+
/** @experimental */
|
|
2766
|
+
interface TreeViewProps extends Omit<react.HTMLAttributes<HTMLDivElement>, "onSelect"> {
|
|
2767
|
+
/** The roots of the tree. */
|
|
2768
|
+
nodes: readonly TreeNode[];
|
|
2769
|
+
/** Expanded node ids, if the caller owns them. */
|
|
2770
|
+
expandedIds?: readonly string[];
|
|
2771
|
+
/** Which ids start expanded when the caller does not own expansion. */
|
|
2772
|
+
defaultExpandedIds?: readonly string[];
|
|
2773
|
+
/** Called with the full next set whenever a branch opens or closes. */
|
|
2774
|
+
onExpandedChange?: (ids: string[]) => void;
|
|
2775
|
+
/**
|
|
2776
|
+
* The selected node id, if the caller owns it.
|
|
2777
|
+
*
|
|
2778
|
+
* With `selectedIds` also supplied this is the PRIMARY — the row a detail
|
|
2779
|
+
* panel answers for. Drawn at a heavier weight so a reader can tell which
|
|
2780
|
+
* member of a multi-row selection the rest of the screen describes.
|
|
2781
|
+
*/
|
|
2782
|
+
selectedId?: string | null;
|
|
2783
|
+
/**
|
|
2784
|
+
* Every selected id, when the caller holds more than one.
|
|
2785
|
+
*
|
|
2786
|
+
* Additive: omit it and the tree behaves exactly as it did. Supplying it also
|
|
2787
|
+
* makes the tree announce itself as `aria-multiselectable`, which is why it
|
|
2788
|
+
* is a separate prop rather than inferred — a single-select tree claiming to
|
|
2789
|
+
* be multi-selectable is wrong in a way a screen-reader user acts on.
|
|
2790
|
+
*/
|
|
2791
|
+
selectedIds?: readonly string[];
|
|
2792
|
+
/** Which id starts selected when the caller does not own selection. */
|
|
2793
|
+
defaultSelectedId?: string | null;
|
|
2794
|
+
/** Called when a row is chosen, by pointer or by Enter. */
|
|
2795
|
+
onSelectedChange?: (id: string, mode: TreeSelectionMode) => void;
|
|
2796
|
+
/**
|
|
2797
|
+
* Names the tree for a screen reader. One of this or `aria-labelledby` is required: a tree
|
|
2798
|
+
* announced only as "tree" tells a user nothing about which one they are in.
|
|
2799
|
+
*/
|
|
2800
|
+
"aria-label"?: string;
|
|
2801
|
+
}
|
|
2802
|
+
/**
|
|
2803
|
+
* A virtualized tree.
|
|
2804
|
+
*
|
|
2805
|
+
* @experimental
|
|
2806
|
+
*/
|
|
2807
|
+
declare const TreeView: react.ForwardRefExoticComponent<TreeViewProps & react.RefAttributes<HTMLDivElement>>;
|
|
2808
|
+
|
|
2809
|
+
/**
|
|
2810
|
+
* The assistive-technology attributes a single thumb can carry.
|
|
2811
|
+
*
|
|
2812
|
+
* @experimental
|
|
2813
|
+
*/
|
|
2814
|
+
interface SliderThumbProps {
|
|
2815
|
+
/** The thumb's accessible name. */
|
|
2816
|
+
"aria-label"?: string;
|
|
2817
|
+
/** An element naming the thumb, when the name is already on screen. */
|
|
2818
|
+
"aria-labelledby"?: string;
|
|
2819
|
+
/**
|
|
2820
|
+
* What the value MEANS, when the number alone does not say it — "40
|
|
2821
|
+
* percent", "Medium". Announced in place of the raw number.
|
|
2822
|
+
*/
|
|
2823
|
+
"aria-valuetext"?: string;
|
|
2824
|
+
/** An element carrying help text for this thumb. */
|
|
2825
|
+
"aria-describedby"?: string;
|
|
2826
|
+
}
|
|
2827
|
+
/**
|
|
2828
|
+
* The slider's props, mirroring the Radix root.
|
|
2829
|
+
*
|
|
2830
|
+
* @experimental
|
|
2831
|
+
*/
|
|
2832
|
+
type SliderProps = Omit<react.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>, "asChild"> & {
|
|
2833
|
+
/**
|
|
2834
|
+
* Assistive-technology attributes per thumb, in value order.
|
|
2835
|
+
*
|
|
2836
|
+
* The reason this exists at all: the focusable element with the `slider`
|
|
2837
|
+
* role is the THUMB, and none of these attributes are inherited from the
|
|
2838
|
+
* root. Anything a caller puts on the root is therefore announced by
|
|
2839
|
+
* nothing, and the thumbs are generated internally so they cannot be
|
|
2840
|
+
* reached any other way.
|
|
2841
|
+
*
|
|
2842
|
+
* Deliberately a curated set rather than the thumb's full prop type. This
|
|
2843
|
+
* is the surface assistive technology reads; opening it to arbitrary props
|
|
2844
|
+
* would let a caller replace the class names or the role the control
|
|
2845
|
+
* depends on, and every escape hatch in a design system eventually gets
|
|
2846
|
+
* used that way.
|
|
2847
|
+
*
|
|
2848
|
+
* Required for a RANGE: two thumbs sharing one name are announced
|
|
2849
|
+
* identically, so nothing says which end is held. A single thumb falls back
|
|
2850
|
+
* to the root's `aria-label`/`aria-labelledby`, so the one-thumb API stays
|
|
2851
|
+
* as documented.
|
|
2852
|
+
*/
|
|
2853
|
+
thumbs?: readonly SliderThumbProps[];
|
|
2193
2854
|
};
|
|
2194
2855
|
/**
|
|
2195
|
-
*
|
|
2856
|
+
* A bounded numeric value chosen by dragging.
|
|
2857
|
+
*
|
|
2858
|
+
* @experimental
|
|
2196
2859
|
*/
|
|
2197
|
-
|
|
2860
|
+
declare const Slider: react.ForwardRefExoticComponent<Omit<Omit<SliderPrimitive.SliderProps & react.RefAttributes<HTMLSpanElement>, "ref">, "asChild"> & {
|
|
2861
|
+
/**
|
|
2862
|
+
* Assistive-technology attributes per thumb, in value order.
|
|
2863
|
+
*
|
|
2864
|
+
* The reason this exists at all: the focusable element with the `slider`
|
|
2865
|
+
* role is the THUMB, and none of these attributes are inherited from the
|
|
2866
|
+
* root. Anything a caller puts on the root is therefore announced by
|
|
2867
|
+
* nothing, and the thumbs are generated internally so they cannot be
|
|
2868
|
+
* reached any other way.
|
|
2869
|
+
*
|
|
2870
|
+
* Deliberately a curated set rather than the thumb's full prop type. This
|
|
2871
|
+
* is the surface assistive technology reads; opening it to arbitrary props
|
|
2872
|
+
* would let a caller replace the class names or the role the control
|
|
2873
|
+
* depends on, and every escape hatch in a design system eventually gets
|
|
2874
|
+
* used that way.
|
|
2875
|
+
*
|
|
2876
|
+
* Required for a RANGE: two thumbs sharing one name are announced
|
|
2877
|
+
* identically, so nothing says which end is held. A single thumb falls back
|
|
2878
|
+
* to the root's `aria-label`/`aria-labelledby`, so the one-thumb API stays
|
|
2879
|
+
* as documented.
|
|
2880
|
+
*/
|
|
2881
|
+
thumbs?: readonly SliderThumbProps[];
|
|
2882
|
+
} & react.RefAttributes<HTMLSpanElement>>;
|
|
2198
2883
|
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2884
|
+
/**
|
|
2885
|
+
* The single owner of keyboard shortcuts for an application.
|
|
2886
|
+
*
|
|
2887
|
+
* ## Why this exists
|
|
2888
|
+
*
|
|
2889
|
+
* Shortcuts are usually registered by whoever needs them, each component adding its own
|
|
2890
|
+
* `document` listener. That works until two of them want the same key, and then it fails in a way
|
|
2891
|
+
* that is very hard to see: `stopPropagation()` does NOT stop other listeners on the same node —
|
|
2892
|
+
* that requires `stopImmediatePropagation()`, and even then only for listeners registered later.
|
|
2893
|
+
* So every global handler runs, in mount order, and mount order is not something a developer
|
|
2894
|
+
* chose. Pressing Escape during a drag can cancel the drag AND navigate away from the page,
|
|
2895
|
+
* because two independent listeners each believed they owned the key.
|
|
2896
|
+
*
|
|
2897
|
+
* This module replaces that with one listener and an explicit precedence rule.
|
|
2898
|
+
*
|
|
2899
|
+
* ## The model: a stack of layers
|
|
2900
|
+
*
|
|
2901
|
+
* A **layer** is a set of bindings belonging to one interactive context — the application shell,
|
|
2902
|
+
* a dialog, an editor canvas mid-drag. Layers are ordered, the topmost is offered each keystroke
|
|
2903
|
+
* first, and the first binding that matches consumes it.
|
|
2904
|
+
*
|
|
2905
|
+
* Precedence is `(depth, sequence)`: the deeper layer wins, and between layers at equal depth the
|
|
2906
|
+
* more recently registered wins.
|
|
2907
|
+
*
|
|
2908
|
+
* Of those two, **depth is declared and sequence is incidental** — and only declared properties
|
|
2909
|
+
* survive a refactor. A layer that unmounts and remounts takes a fresh sequence number, so a
|
|
2910
|
+
* subtree rebuilt for unrelated reasons can change equal-depth ordering. The guidance that falls
|
|
2911
|
+
* out: if relative order matters to you, express it as depth, because depth is the part of the
|
|
2912
|
+
* tuple you control. Equal-depth ordering is for stacking things that arrive in genuine
|
|
2913
|
+
* mount order, such as one dialog over another. Depth comes from how the application nests, so precedence
|
|
2914
|
+
* follows the component tree rather than a set of coordinated numbers — the z-index problem,
|
|
2915
|
+
* avoided. Equal-depth ordering is what stacks a second dialog above the first.
|
|
2916
|
+
*
|
|
2917
|
+
* A layer may be **blocking**, meaning it also swallows the keys it does NOT bind. That is the
|
|
2918
|
+
* property a drag or a modal needs: while it is up, nothing beneath it can act. This is the same
|
|
2919
|
+
* shape as a window manager's keyboard grab, and as the dismissable-layer stack this kit's
|
|
2920
|
+
* dialogs already sit on.
|
|
2921
|
+
*
|
|
2922
|
+
* ## What it deliberately does not do
|
|
2923
|
+
*
|
|
2924
|
+
* It listens in the BUBBLE phase, so a focused component that handles its own keys and calls
|
|
2925
|
+
* `stopPropagation()` wins without needing to know this module exists. React attaches its
|
|
2926
|
+
* handlers at the app root, below `document`, so an `onKeyDown` prop is a sufficient opt-out.
|
|
2927
|
+
* Capturing instead would make this module outrank every component in the tree, including the
|
|
2928
|
+
* kit's own dialogs, and there would be no way for a component to decline.
|
|
2929
|
+
*
|
|
2930
|
+
* @module lib/shortcuts/manager
|
|
2931
|
+
*/
|
|
2932
|
+
/**
|
|
2933
|
+
* One shortcut and what it does.
|
|
2934
|
+
*
|
|
2935
|
+
* @experimental
|
|
2936
|
+
*/
|
|
2937
|
+
interface ShortcutBinding {
|
|
2938
|
+
/** The keys, as understood by `parseKeys` — `"mod+s"`, `"Escape"`, `"g d"`. */
|
|
2939
|
+
keys: string;
|
|
2940
|
+
/**
|
|
2941
|
+
* What this does, in words, for a shortcuts help panel. Required because an undiscoverable
|
|
2942
|
+
* shortcut helps only the person who wrote it.
|
|
2943
|
+
*/
|
|
2944
|
+
description: string;
|
|
2945
|
+
/** Runs when the shortcut fires. */
|
|
2946
|
+
run: (event: KeyboardEvent) => void;
|
|
2947
|
+
/** Checked at press time; a binding whose condition is false is skipped and passes the key on. */
|
|
2948
|
+
when?: () => boolean;
|
|
2949
|
+
/**
|
|
2950
|
+
* Whether this fires while the user is typing in a field.
|
|
2951
|
+
*
|
|
2952
|
+
* Defaults to true for bindings whose FIRST chord carries a non-shift modifier or is Escape,
|
|
2953
|
+
* and false otherwise — the rule nearly every application converges on. `mod+s` must save
|
|
2954
|
+
* mid-sentence and Escape must dismiss, while a bare `n` must be able to be the letter n.
|
|
2955
|
+
*
|
|
2956
|
+
* The first chord decides because it is the keystroke that has to be taken from the field.
|
|
2957
|
+
* `mod+k c` is a command from its opening chord, so its bare `c` completes it in an input. A
|
|
2958
|
+
* sequence that OPENS on a plain character cannot fire while typing whatever it ends with:
|
|
2959
|
+
* allowing `g Escape` would mean swallowing the `g` of every word containing one.
|
|
2960
|
+
*/
|
|
2961
|
+
whenTyping?: boolean;
|
|
2962
|
+
/** Whether to call `preventDefault()` when it fires. Defaults to true. */
|
|
2963
|
+
preventDefault?: boolean;
|
|
2964
|
+
}
|
|
2965
|
+
/**
|
|
2966
|
+
* How a layer behaves for keys it does not bind.
|
|
2967
|
+
*
|
|
2968
|
+
* @experimental
|
|
2969
|
+
*/
|
|
2970
|
+
interface ShortcutLayerOptions {
|
|
2971
|
+
/** Identifies the layer in diagnostics and in a help panel. */
|
|
2972
|
+
name: string;
|
|
2973
|
+
/** Precedence: deeper layers are offered keystrokes first. */
|
|
2974
|
+
depth: number;
|
|
2975
|
+
/**
|
|
2976
|
+
* Whether unmatched keys stop here instead of reaching layers beneath.
|
|
2977
|
+
*
|
|
2978
|
+
* The reason a drag can be interrupted safely: everything below is inert for as long as this
|
|
2979
|
+
* is set, so no other context can act on a keystroke aimed at this one.
|
|
2980
|
+
*/
|
|
2981
|
+
blocking?: boolean;
|
|
2982
|
+
/**
|
|
2983
|
+
* Sorted ABOVE depth, so a layer can outrank one nested deeper than itself.
|
|
2984
|
+
*
|
|
2985
|
+
* Depth alone cannot express a modal. A modal wants to sit above every ordinary layer, but the
|
|
2986
|
+
* host chooses how deeply its own shortcuts are scoped, so any depth a modal picks can be tied
|
|
2987
|
+
* or beaten by a scope the host nests one level further. Priority is the axis the host does not
|
|
2988
|
+
* control: ordinary layers leave it at 0 and a modal raises it.
|
|
2989
|
+
*
|
|
2990
|
+
* KNOWN LIMIT, stated so it is not discovered: layers at EQUAL priority still compare depth
|
|
2991
|
+
* before registration order. Two modals therefore stack by how deeply each is scoped rather
|
|
2992
|
+
* than by which opened last, so a modal opened later at a shallower depth can sit under one
|
|
2993
|
+
* opened earlier and nested deeper — while whatever renders them puts the newer on top.
|
|
2994
|
+
*
|
|
2995
|
+
* Fixing it needs the manager to record when a layer is ACTIVATED, which registration order
|
|
2996
|
+
* does not capture: `useShortcuts` registers once at mount and updates its options in place, so
|
|
2997
|
+
* a layer enabled later still carries its mount-time sequence. Not attempted here because
|
|
2998
|
+
* nothing reaches it yet — `priority` is new and one layer sets it, so no two layers currently
|
|
2999
|
+
* share a nonzero value.
|
|
3000
|
+
*/
|
|
3001
|
+
priority?: number;
|
|
3002
|
+
/** Whether the layer participates at all. A disabled layer neither matches nor blocks. */
|
|
3003
|
+
enabled?: boolean;
|
|
3004
|
+
}
|
|
3005
|
+
/**
|
|
3006
|
+
* A layer's registration, held by whoever created it.
|
|
3007
|
+
*
|
|
3008
|
+
* @experimental
|
|
3009
|
+
*/
|
|
3010
|
+
interface ShortcutRegistration {
|
|
3011
|
+
/** Replace this layer's bindings and options without changing its precedence. */
|
|
3012
|
+
update: (bindings: readonly ShortcutBinding[], options: ShortcutLayerOptions) => void;
|
|
3013
|
+
/** Remove the layer. */
|
|
3014
|
+
dispose: () => void;
|
|
3015
|
+
}
|
|
3016
|
+
/**
|
|
3017
|
+
* Options for creating a manager.
|
|
3018
|
+
*
|
|
3019
|
+
* @experimental
|
|
3020
|
+
*/
|
|
3021
|
+
interface ShortcutManagerOptions {
|
|
3022
|
+
/** Whether `mod` means Command. Detected from the platform when omitted. */
|
|
3023
|
+
isApple?: boolean;
|
|
3024
|
+
/** How long a partially typed sequence waits for its next key, in milliseconds. */
|
|
3025
|
+
sequenceTimeoutMs?: number;
|
|
3026
|
+
/** Clock source, for tests that need to control sequence expiry. */
|
|
3027
|
+
now?: () => number;
|
|
3028
|
+
}
|
|
3029
|
+
/**
|
|
3030
|
+
* A shortcut manager: the registry, the matcher, and the one listener.
|
|
3031
|
+
*
|
|
3032
|
+
* @experimental
|
|
3033
|
+
*/
|
|
3034
|
+
interface ShortcutManager {
|
|
3035
|
+
/** Add a layer. */
|
|
3036
|
+
register: (bindings: readonly ShortcutBinding[], options: ShortcutLayerOptions) => ShortcutRegistration;
|
|
3037
|
+
/**
|
|
3038
|
+
* Offer a keystroke to the stack. Returns whether it was consumed.
|
|
3039
|
+
*
|
|
3040
|
+
* Public so the behaviour can be tested without a DOM, and so a host that already owns its
|
|
3041
|
+
* event plumbing can drive the manager itself.
|
|
3042
|
+
*/
|
|
3043
|
+
handle: (event: KeyboardEvent) => boolean;
|
|
3044
|
+
/** Install the single listener on a target, returning a function that removes it. */
|
|
3045
|
+
attach: (target: Pick<EventTarget, "addEventListener" | "removeEventListener">) => () => void;
|
|
3046
|
+
/**
|
|
3047
|
+
* Every active binding, most-precedent layer first, for a shortcuts help panel.
|
|
3048
|
+
*
|
|
3049
|
+
* The same array is returned until the layer stack changes, so it is safe to use as an external
|
|
3050
|
+
* store snapshot without re-rendering on every read.
|
|
3051
|
+
*/
|
|
3052
|
+
activeBindings: () => readonly ActiveShortcut[];
|
|
3053
|
+
/**
|
|
3054
|
+
* Watch for changes to the layer stack.
|
|
3055
|
+
*
|
|
3056
|
+
* A help panel mounting alongside the components that register shortcuts would otherwise read
|
|
3057
|
+
* BEFORE their effects run and show nothing, with no later render to correct it.
|
|
3058
|
+
*/
|
|
3059
|
+
subscribe: (onChange: () => void) => () => void;
|
|
3060
|
+
}
|
|
3061
|
+
/**
|
|
3062
|
+
* A binding as presented to a help panel, with the layer it came from.
|
|
3063
|
+
*
|
|
3064
|
+
* @experimental
|
|
3065
|
+
*/
|
|
3066
|
+
interface ActiveShortcut {
|
|
3067
|
+
keys: string;
|
|
3068
|
+
description: string;
|
|
3069
|
+
layer: string;
|
|
3070
|
+
}
|
|
3071
|
+
/**
|
|
3072
|
+
* Create a shortcut manager.
|
|
3073
|
+
*
|
|
3074
|
+
* @experimental
|
|
3075
|
+
*/
|
|
3076
|
+
declare function createShortcutManager(options?: ShortcutManagerOptions): ShortcutManager;
|
|
2204
3077
|
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
3078
|
+
/**
|
|
3079
|
+
* Props for {@link ShortcutProvider}.
|
|
3080
|
+
*
|
|
3081
|
+
* @experimental
|
|
3082
|
+
*/
|
|
3083
|
+
interface ShortcutProviderProps extends ShortcutManagerOptions {
|
|
3084
|
+
children?: react.ReactNode;
|
|
3085
|
+
/**
|
|
3086
|
+
* Where the listener is installed. Defaults to `document`.
|
|
3087
|
+
*
|
|
3088
|
+
* The bubble phase is deliberate: a component that handles its own keys and calls
|
|
3089
|
+
* `stopPropagation` wins without knowing this exists, because React attaches its handlers
|
|
3090
|
+
* below `document`.
|
|
3091
|
+
*/
|
|
3092
|
+
target?: Pick<EventTarget, "addEventListener" | "removeEventListener"> | null;
|
|
2209
3093
|
}
|
|
2210
|
-
|
|
2211
|
-
|
|
3094
|
+
/**
|
|
3095
|
+
* Installs the application's one keydown listener and roots the layer stack.
|
|
3096
|
+
*
|
|
3097
|
+
* @experimental
|
|
3098
|
+
*/
|
|
3099
|
+
declare function ShortcutProvider({ children, target, ...managerOptions }: ShortcutProviderProps): react.JSX.Element;
|
|
3100
|
+
/**
|
|
3101
|
+
* Raises the precedence of everything inside it by one level.
|
|
3102
|
+
*
|
|
3103
|
+
* @experimental
|
|
3104
|
+
*/
|
|
3105
|
+
declare function ShortcutScope({ children, }: {
|
|
3106
|
+
children?: react.ReactNode;
|
|
3107
|
+
}): react.JSX.Element;
|
|
3108
|
+
/**
|
|
3109
|
+
* Options for {@link useShortcuts}, minus the depth, which comes from the tree.
|
|
3110
|
+
*
|
|
3111
|
+
* @experimental
|
|
3112
|
+
*/
|
|
3113
|
+
interface UseShortcutsOptions {
|
|
3114
|
+
/** Identifies this layer in a help panel. */
|
|
3115
|
+
name: string;
|
|
3116
|
+
/** Whether the layer participates. A disabled layer neither matches nor blocks. */
|
|
3117
|
+
enabled?: boolean;
|
|
3118
|
+
/**
|
|
3119
|
+
* Whether unmatched keys stop here rather than reaching layers beneath.
|
|
3120
|
+
*
|
|
3121
|
+
* Set this while a drag or a modal interaction owns the keyboard.
|
|
3122
|
+
*/
|
|
3123
|
+
blocking?: boolean;
|
|
3124
|
+
/**
|
|
3125
|
+
* Sorted ABOVE depth, so a layer can outrank one nested deeper than itself.
|
|
3126
|
+
*
|
|
3127
|
+
* For a modal, whose hold must not be tied or beaten by a host scoping its own shortcuts one
|
|
3128
|
+
* level further. Ordinary layers leave this alone.
|
|
3129
|
+
*/
|
|
3130
|
+
priority?: number;
|
|
3131
|
+
}
|
|
3132
|
+
/**
|
|
3133
|
+
* Register shortcuts for as long as the calling component is mounted.
|
|
3134
|
+
*
|
|
3135
|
+
* The bindings array may be rebuilt on every render; it is re-read in place rather than
|
|
3136
|
+
* re-registered, so inline closures are fine and the layer keeps its position in the stack.
|
|
3137
|
+
*
|
|
3138
|
+
* @experimental
|
|
3139
|
+
*/
|
|
3140
|
+
declare function useShortcuts(bindings: readonly ShortcutBinding[], options: UseShortcutsOptions): void;
|
|
3141
|
+
/**
|
|
3142
|
+
* The manager itself, for a help panel that lists what is currently bound.
|
|
3143
|
+
*
|
|
3144
|
+
* @experimental
|
|
3145
|
+
*/
|
|
3146
|
+
declare function useShortcutManager(): ShortcutManager;
|
|
3147
|
+
/**
|
|
3148
|
+
* The shortcuts currently in effect, most precedent first.
|
|
3149
|
+
*
|
|
3150
|
+
* SUBSCRIBED rather than read once. A help panel mounting alongside the components that register
|
|
3151
|
+
* shortcuts reads before their effects have run, so a one-time read returns an empty list and no
|
|
3152
|
+
* later render corrects it — the panel simply shows nothing. The same applies whenever a layer is
|
|
3153
|
+
* enabled, disabled or replaced while the panel is open.
|
|
3154
|
+
*
|
|
3155
|
+
* The manager returns the same array until its stack changes, so this re-renders when the
|
|
3156
|
+
* shortcuts change and not on every read.
|
|
3157
|
+
*
|
|
3158
|
+
* @experimental
|
|
3159
|
+
*/
|
|
3160
|
+
declare function useActiveShortcuts(): readonly ActiveShortcut[];
|
|
2212
3161
|
|
|
2213
3162
|
/**
|
|
2214
|
-
*
|
|
3163
|
+
* Parsing and matching for keyboard shortcut specifications.
|
|
2215
3164
|
*
|
|
2216
|
-
*
|
|
2217
|
-
*
|
|
3165
|
+
* A spec is written the way it is spoken: `"mod+s"`, `"Escape"`, `"shift+alt+f"`, and — for a
|
|
3166
|
+
* sequence — `"g d"`, meaning `g` then `d`. Steps are separated by spaces; within a step,
|
|
3167
|
+
* modifiers are joined to the key with `+`.
|
|
2218
3168
|
*
|
|
2219
|
-
*
|
|
2220
|
-
*
|
|
2221
|
-
*
|
|
2222
|
-
*
|
|
2223
|
-
*
|
|
3169
|
+
* The space bar is written `"Space"`, because the character the browser reports for it is `" "`
|
|
3170
|
+
* and a spec split on whitespace has no way to carry that.
|
|
3171
|
+
*
|
|
3172
|
+
* **`mod` is the point of this module.** It resolves to Command on Apple platforms and Control
|
|
3173
|
+
* everywhere else, so a binding is written once. Writing `ctrl` or `meta` explicitly is still
|
|
3174
|
+
* possible and then means exactly that, which is what lets a platform-specific binding coexist
|
|
3175
|
+
* with a portable one — a distinction lost by any implementation that treats the two as
|
|
3176
|
+
* interchangeable.
|
|
3177
|
+
*
|
|
3178
|
+
* @module lib/shortcuts/key-spec
|
|
3179
|
+
*/
|
|
3180
|
+
/**
|
|
3181
|
+
* One keystroke: a key plus the modifier state required with it.
|
|
3182
|
+
*
|
|
3183
|
+
* @experimental
|
|
3184
|
+
*/
|
|
3185
|
+
interface KeyChord {
|
|
3186
|
+
/** The `KeyboardEvent.key` value, normalized to lower case for single characters. */
|
|
3187
|
+
readonly key: string;
|
|
3188
|
+
/** Command on Apple platforms, Control elsewhere. */
|
|
3189
|
+
readonly mod: boolean;
|
|
3190
|
+
readonly ctrl: boolean;
|
|
3191
|
+
readonly meta: boolean;
|
|
3192
|
+
readonly alt: boolean;
|
|
3193
|
+
readonly shift: boolean;
|
|
3194
|
+
}
|
|
3195
|
+
/**
|
|
3196
|
+
* A shortcut: one chord, or several pressed in order.
|
|
3197
|
+
*
|
|
3198
|
+
* @experimental
|
|
3199
|
+
*/
|
|
3200
|
+
type KeySequence = readonly KeyChord[];
|
|
3201
|
+
/**
|
|
3202
|
+
* Parse a spec into the sequence of chords it describes.
|
|
3203
|
+
*
|
|
3204
|
+
* @param spec - For example `"mod+s"`, `"Escape"`, or `"g d"`.
|
|
3205
|
+
* @throws If the spec is empty, or a step names modifiers but no key.
|
|
3206
|
+
*
|
|
3207
|
+
* @experimental
|
|
3208
|
+
*/
|
|
3209
|
+
declare function parseKeys(spec: string): KeySequence;
|
|
3210
|
+
/**
|
|
3211
|
+
* The modifier state an event carries, with `mod` already resolved for the platform.
|
|
3212
|
+
*
|
|
3213
|
+
* @experimental
|
|
3214
|
+
*/
|
|
3215
|
+
interface ModifierState {
|
|
3216
|
+
readonly ctrlKey: boolean;
|
|
3217
|
+
readonly metaKey: boolean;
|
|
3218
|
+
readonly altKey: boolean;
|
|
3219
|
+
readonly shiftKey: boolean;
|
|
3220
|
+
/** Optional, so a caller driving the matcher by hand need not synthesise one. */
|
|
3221
|
+
readonly getModifierState?: (key: string) => boolean;
|
|
3222
|
+
}
|
|
3223
|
+
/**
|
|
3224
|
+
* Whether a chord describes the given keystroke.
|
|
3225
|
+
*
|
|
3226
|
+
* Modifiers are matched EXACTLY rather than as a minimum: a binding for `s` must not fire on
|
|
3227
|
+
* `mod+s`, which is a different shortcut and very often a destructive one.
|
|
3228
|
+
*
|
|
3229
|
+
* @param chord - The chord to test.
|
|
3230
|
+
* @param key - The event's `key`.
|
|
3231
|
+
* @param state - The event's modifier flags.
|
|
3232
|
+
* @param isApple - Whether `mod` should resolve to Command rather than Control.
|
|
3233
|
+
*
|
|
3234
|
+
* @experimental
|
|
3235
|
+
*/
|
|
3236
|
+
declare function chordMatches(chord: KeyChord, key: string, state: ModifierState, isApple: boolean): boolean;
|
|
3237
|
+
/**
|
|
3238
|
+
* Whether this platform uses Command as its primary modifier.
|
|
3239
|
+
*
|
|
3240
|
+
* Reads the modern `userAgentData` hint before the deprecated `navigator.platform`, and answers
|
|
3241
|
+
* `false` when neither exists — the non-Apple default is also the correct answer for a server
|
|
3242
|
+
* render, where no keystroke can arrive.
|
|
3243
|
+
*
|
|
3244
|
+
* @experimental
|
|
2224
3245
|
*/
|
|
2225
|
-
declare function
|
|
3246
|
+
declare function detectApplePlatform(): boolean;
|
|
2226
3247
|
|
|
2227
3248
|
/**
|
|
2228
|
-
*
|
|
2229
|
-
*
|
|
2230
|
-
*
|
|
2231
|
-
*
|
|
2232
|
-
*
|
|
2233
|
-
*
|
|
2234
|
-
*
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
*
|
|
2239
|
-
*
|
|
2240
|
-
*
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
3249
|
+
* How wide a field's CONTROL may grow.
|
|
3250
|
+
*
|
|
3251
|
+
* Named rather than measured so a page cannot invent a one-off width, which is
|
|
3252
|
+
* how the eight admin forms diverged. The caps read from custom properties with
|
|
3253
|
+
* literal fallbacks, so a theme can retune them centrally without this file
|
|
3254
|
+
* changing and without a page overriding them locally.
|
|
3255
|
+
* @experimental
|
|
3256
|
+
*/
|
|
3257
|
+
type FieldWidth = "half" | "full" | "fill";
|
|
3258
|
+
/**
|
|
3259
|
+
* The wiring `FieldShell` computes for its control: the id to attach, the
|
|
3260
|
+
* composed `aria-describedby` (`undefined` when nothing is rendered to point
|
|
3261
|
+
* at), and whether a rendered `error` forces the control invalid (`undefined`
|
|
3262
|
+
* when there is no error to force one way or the other).
|
|
3263
|
+
*
|
|
3264
|
+
* A render-function `children` (see `FieldShellProps`) receives exactly this
|
|
3265
|
+
* object — the SAME computation the element-clone path derives its
|
|
3266
|
+
* `cloneElement` overrides from — so a caller wiring a compound control (a
|
|
3267
|
+
* Radix `Select`'s trigger, for example) gets precisely the values the
|
|
3268
|
+
* simple, single-element case would have applied.
|
|
3269
|
+
* @experimental
|
|
3270
|
+
*/
|
|
3271
|
+
interface FieldShellRenderProps {
|
|
3272
|
+
id: string;
|
|
3273
|
+
describedBy: string | undefined;
|
|
3274
|
+
invalid: boolean | undefined;
|
|
3275
|
+
}
|
|
3276
|
+
/** @experimental */
|
|
3277
|
+
interface FieldShellProps {
|
|
3278
|
+
label?: React.ReactNode;
|
|
3279
|
+
/** Helper text under the control. Rendered only when present. */
|
|
3280
|
+
description?: React.ReactNode;
|
|
3281
|
+
/** Validation message under the control. Rendered only when present. */
|
|
3282
|
+
error?: React.ReactNode;
|
|
3283
|
+
/** Defaults to "half": most admin inputs are short values. */
|
|
3284
|
+
width?: FieldWidth;
|
|
3285
|
+
htmlFor?: string;
|
|
3286
|
+
className?: string;
|
|
3287
|
+
/**
|
|
3288
|
+
* Either a single element to clone, or a function that receives the
|
|
3289
|
+
* computed wiring and applies it itself.
|
|
3290
|
+
*
|
|
3291
|
+
* The element form is `FieldShell` cloning it with `cloneElement` to
|
|
3292
|
+
* attach the id, `aria-describedby` and `aria-invalid` it computes —
|
|
3293
|
+
* unchanged from before, and still the right choice for an atomic control
|
|
3294
|
+
* (`Input`, `Textarea`, `Switch`) that spreads its own props onto a real
|
|
3295
|
+
* DOM node. Typing this branch as `ReactNode` would let a composite field
|
|
3296
|
+
* (two inputs with a unit between them, for example) compile and then
|
|
3297
|
+
* crash on mount, so it stays a single `ReactElement` — wrap several
|
|
3298
|
+
* elements in one real element, a `<div>`, not a `<Fragment>`: a Fragment
|
|
3299
|
+
* forwards none of those props to what is inside it.
|
|
3300
|
+
*
|
|
3301
|
+
* The function form exists for a compound control built on a Radix `Root`
|
|
3302
|
+
* (`Select`, and by the same shape `RadioGroup`): `Root` destructures a
|
|
3303
|
+
* fixed, named prop list and never spreads the remainder, so `id` handed
|
|
3304
|
+
* to it via `cloneElement` is silently dropped rather than reaching the
|
|
3305
|
+
* actual focusable element two levels down (`Select` > `SelectTrigger` >
|
|
3306
|
+
* `SelectValue`). A render function is called with `FieldShellRenderProps`
|
|
3307
|
+
* and applies `id`/`describedBy`/`invalid` to whichever nested element is
|
|
3308
|
+
* the real control, instead of relying on a single top-level clone that
|
|
3309
|
+
* can never reach it.
|
|
3310
|
+
*/
|
|
3311
|
+
children: React.ReactElement | ((field: FieldShellRenderProps) => React.ReactNode);
|
|
3312
|
+
}
|
|
3313
|
+
/** @experimental */
|
|
3314
|
+
interface FormActionsProps {
|
|
3315
|
+
/**
|
|
3316
|
+
* Whether the form has unsaved changes. Supplied by the page from the form
|
|
3317
|
+
* state that already tracks it; never computed here.
|
|
3318
|
+
*/
|
|
3319
|
+
dirty?: boolean;
|
|
3320
|
+
className?: string;
|
|
3321
|
+
children: React.ReactNode;
|
|
3322
|
+
}
|
|
3323
|
+
|
|
3324
|
+
/** @experimental */
|
|
3325
|
+
declare function FieldShell({ label, description, error, width, htmlFor, className, children, }: FieldShellProps): react_jsx_runtime.JSX.Element;
|
|
3326
|
+
|
|
3327
|
+
/** @experimental */
|
|
3328
|
+
interface FormSectionProps {
|
|
3329
|
+
/** Short label above the card, rendered uppercase. */
|
|
3330
|
+
label: string;
|
|
3331
|
+
/** Optional sentence under the label. */
|
|
3332
|
+
description?: react.ReactNode;
|
|
3333
|
+
className?: string;
|
|
3334
|
+
children: react.ReactNode;
|
|
3335
|
+
}
|
|
3336
|
+
/**
|
|
3337
|
+
* A labelled card holding a group of fields.
|
|
3338
|
+
*
|
|
3339
|
+
* Composes `Card` rather than hand-rolling its own border and background, so
|
|
3340
|
+
* a section carries the CONTAINER radius tier `Card` already defines instead
|
|
3341
|
+
* of a second, drifting copy of the same chrome. There is deliberately no
|
|
3342
|
+
* footer slot. A form commits as one document, so its action belongs to the
|
|
3343
|
+
* page rather than to a section.
|
|
3344
|
+
* @experimental
|
|
3345
|
+
*/
|
|
3346
|
+
declare function FormSection({ label, description, className, children, }: FormSectionProps): react_jsx_runtime.JSX.Element;
|
|
3347
|
+
|
|
3348
|
+
/**
|
|
3349
|
+
* One action bar per form, at the end of the page's measure.
|
|
3350
|
+
*
|
|
3351
|
+
* A form commits as a single document, so there is one place to commit it. The
|
|
3352
|
+
* dirty flag arrives from the page because the form state already answers that
|
|
3353
|
+
* question, and a second implementation of it here would disagree with the
|
|
3354
|
+
* first as soon as either changed.
|
|
3355
|
+
* @experimental
|
|
3356
|
+
*/
|
|
3357
|
+
declare function FormActions({ dirty, className, children }: FormActionsProps): react_jsx_runtime.JSX.Element;
|
|
3358
|
+
|
|
3359
|
+
/** @experimental */
|
|
3360
|
+
interface PageShellProps extends HTMLAttributes<HTMLDivElement> {
|
|
3361
|
+
/**
|
|
3362
|
+
* Which measure the content column is bounded to. `full` removes the cap so
|
|
3363
|
+
* the column takes whatever the panel gives it, while KEEPING the gutter — a
|
|
3364
|
+
* full-width page is still inset from the panel's edge.
|
|
3365
|
+
*/
|
|
3366
|
+
width?: "form" | "wide" | "full";
|
|
3367
|
+
}
|
|
3368
|
+
/**
|
|
3369
|
+
* What each named width resolves to, owned here because this is what applies it.
|
|
3370
|
+
*
|
|
3371
|
+
* Declared as a lookup rather than branched at the call site so the three arms
|
|
3372
|
+
* are one list. A `switch` here would let a fourth width be added to the type
|
|
3373
|
+
* and forgotten in the mapping, which the checker cannot see through a
|
|
3374
|
+
* `default` arm.
|
|
3375
|
+
*
|
|
3376
|
+
* Exported because a caller whose CONTENT carries the measure needs the same
|
|
3377
|
+
* value as a length, and the alternative is a second table naming the same
|
|
3378
|
+
* tokens — which drifts silently, since both look correct beside their own
|
|
3379
|
+
* neighbours. Reading it here means there is one answer rather than two that
|
|
3380
|
+
* agree today.
|
|
3381
|
+
*
|
|
3382
|
+
* @experimental
|
|
3383
|
+
*/
|
|
3384
|
+
declare const SHELL_MEASURE: Record<NonNullable<PageShellProps["width"]>, string>;
|
|
3385
|
+
/**
|
|
3386
|
+
* The page's inset and measure, owned in one place and spent as GRID COLUMNS.
|
|
3387
|
+
*
|
|
3388
|
+
* This replaces a pairing in which an outer container padded the panel and an
|
|
3389
|
+
* inner one padded again while capping the width. That shape had three
|
|
3390
|
+
* defects, and all three are structural rather than cosmetic:
|
|
3391
|
+
*
|
|
3392
|
+
* - The two insets ADDED, because padding is not something a descendant can
|
|
3393
|
+
* cancel. Measured on the settings page, the header sat at x=360 and the
|
|
3394
|
+
* form card at x=384 — a 24px disagreement between two elements that are
|
|
3395
|
+
* supposed to share a left edge. Here the inset is a column, so there is one
|
|
3396
|
+
* declaration and no second site to disagree with it.
|
|
3397
|
+
* - A measure applied INSIDE a form component lets anything the page renders
|
|
3398
|
+
* beside that form escape it. With the page owning the shell, a sibling is
|
|
3399
|
+
* inside the measure by default and leaves it only by saying `Bleed`.
|
|
3400
|
+
* - Centring by `mx-auto` on a max-width box does nothing at panel widths
|
|
3401
|
+
* where the cap does not bind. Here the two outer tracks are equal and
|
|
3402
|
+
* flexible, so the content column is centred at every width and no
|
|
3403
|
+
* `justify-content` is declared — with flexible tracks the grid fills its
|
|
3404
|
+
* container and there is no free space for one to distribute.
|
|
3405
|
+
*
|
|
3406
|
+
* Vertical padding stays ordinary `padding-block`: it is not in tension with
|
|
3407
|
+
* the columns, and keeping it here means one component answers the whole of
|
|
3408
|
+
* "how far is content from the panel's edge".
|
|
3409
|
+
* @experimental
|
|
3410
|
+
*/
|
|
3411
|
+
declare const PageShell: react.ForwardRefExoticComponent<PageShellProps & react.RefAttributes<HTMLDivElement>>;
|
|
3412
|
+
/** @experimental */
|
|
3413
|
+
type BleedProps = HTMLAttributes<HTMLDivElement>;
|
|
3414
|
+
/**
|
|
3415
|
+
* Opts one child out of the measure, edge to edge across the shell's gutter.
|
|
3416
|
+
*
|
|
3417
|
+
* The sanctioned form of something that previously only happened by accident.
|
|
3418
|
+
* A wide data table, a delivery log or a toolbar declares that it wants the
|
|
3419
|
+
* full panel, so a reviewer can see the intent — and, just as usefully, a block
|
|
3420
|
+
* that is merely in the wrong place no longer LOOKS like a deliberate
|
|
3421
|
+
* full-bleed.
|
|
3422
|
+
*
|
|
3423
|
+
* Valid only as a DIRECT child of `PageShell`. The `full-start`/`full-end`
|
|
3424
|
+
* lines are named on the shell's own grid, so they are in scope for its
|
|
3425
|
+
* children and nowhere else; nested inside a `FormSection` this renders a plain
|
|
3426
|
+
* block and the `grid-column` is inert. That is a real constraint rather than a
|
|
3427
|
+
* stylistic preference, and `page-shell.test.tsx` pins both halves: that a
|
|
3428
|
+
* `Bleed` rendered directly under the shell is its child, and that one nested a
|
|
3429
|
+
* level deeper does NOT receive the full column.
|
|
3430
|
+
*
|
|
3431
|
+
* It forwards its ref and any div attributes for the same reason: a consumer
|
|
3432
|
+
* cannot reach for the usual remedy of wrapping it, because a wrapper is
|
|
3433
|
+
* precisely what makes it stop working.
|
|
3434
|
+
* @experimental
|
|
3435
|
+
*/
|
|
3436
|
+
declare const Bleed: react.ForwardRefExoticComponent<BleedProps & react.RefAttributes<HTMLDivElement>>;
|
|
3437
|
+
|
|
3438
|
+
/** @experimental */
|
|
3439
|
+
interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
3440
|
+
/** The page's name, rendered as its `h1`. */
|
|
3441
|
+
title: string;
|
|
3442
|
+
/**
|
|
3443
|
+
* A sentence under the title. A `ReactNode` rather than a string because a
|
|
3444
|
+
* description carrying a link or an inline code span is ordinary here, and
|
|
3445
|
+
* typing it narrowly would push those pages back to hand-rolling the header.
|
|
3446
|
+
*/
|
|
3447
|
+
description?: ReactNode;
|
|
3448
|
+
/** The trail above the title. The page supplies it; this only places it. */
|
|
3449
|
+
breadcrumbs?: ReactNode;
|
|
3450
|
+
/** Page-level actions, trailing the title on one line where there is room. */
|
|
3451
|
+
actions?: ReactNode;
|
|
3452
|
+
}
|
|
3453
|
+
/**
|
|
3454
|
+
* A page's own identity — its trail, its name, its one-line summary and its
|
|
3455
|
+
* actions — rendered once instead of at every page that needs one.
|
|
3456
|
+
*
|
|
3457
|
+
* Every value arrives as a PROP, and that is the point rather than an
|
|
3458
|
+
* implementation detail. The markup this replaces was written out by hand on 22
|
|
3459
|
+
* pages, and the settings pages took their title from a ~130-line chain that
|
|
3460
|
+
* matched `window.location.pathname` in a file none of them import. Both are
|
|
3461
|
+
* the same defect from opposite ends: a page knows what it is, and nothing let
|
|
3462
|
+
* it say so — so the title lived either in 22 copies or in one foreign file
|
|
3463
|
+
* that had to be edited whenever a route was added.
|
|
3464
|
+
*
|
|
3465
|
+
* The route registry already made this decision for the sidebar. A private
|
|
3466
|
+
* route must DECLARE the rail section it belongs to, because the sidebar reads
|
|
3467
|
+
* that declaration rather than matching the URL, which makes a route added
|
|
3468
|
+
* without one a compile error instead of a page that silently highlights the
|
|
3469
|
+
* wrong entry. A title derived from a pathname is the same defect in the half
|
|
3470
|
+
* nobody had covered.
|
|
3471
|
+
*
|
|
3472
|
+
* It also makes a plugin's page indistinguishable from a first-party one: a
|
|
3473
|
+
* plugin cannot add a branch to an if-chain it does not ship, but it can pass a
|
|
3474
|
+
* prop.
|
|
3475
|
+
* @experimental
|
|
3476
|
+
*/
|
|
3477
|
+
declare const PageHeader: react.ForwardRefExoticComponent<PageHeaderProps & react.RefAttributes<HTMLElement>>;
|
|
2318
3478
|
|
|
2319
|
-
export { Accordion, AccordionContent, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, type ActionCallbacks, Alert, AlertDescription, type AlertDescriptionProps, AlertDialog, AlertDialogAction, type AlertDialogActionProps, AlertDialogCancel, type AlertDialogCancelProps, AlertDialogContent, type AlertDialogContentProps, AlertDialogDescription, type AlertDialogDescriptionProps, AlertDialogFooter, type AlertDialogFooterProps, AlertDialogHeader, type AlertDialogHeaderProps, AlertDialogOverlay, type AlertDialogOverlayProps, AlertDialogPortal, AlertDialogTitle, type AlertDialogTitleProps, AlertDialogTrigger, type AlertProps, AlertTitle, type AlertTitleProps, Avatar, AvatarFallback, type AvatarFallbackProps, AvatarImage, type AvatarImageProps, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, CardAction, type CardActionProps, CardContent, type CardContentProps, CardDescription, type CardDescriptionProps, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, CardTitle, type CardTitleProps, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, type
|
|
3479
|
+
export { Accordion, AccordionContent, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, type ActionCallbacks, type ActiveShortcut, Alert, AlertDescription, type AlertDescriptionProps, AlertDialog, AlertDialogAction, type AlertDialogActionProps, AlertDialogCancel, type AlertDialogCancelProps, AlertDialogContent, type AlertDialogContentProps, AlertDialogDescription, type AlertDialogDescriptionProps, AlertDialogFooter, type AlertDialogFooterProps, AlertDialogHeader, type AlertDialogHeaderProps, AlertDialogOverlay, type AlertDialogOverlayProps, AlertDialogPortal, AlertDialogTitle, type AlertDialogTitleProps, AlertDialogTrigger, type AlertProps, AlertTitle, type AlertTitleProps, Avatar, AvatarFallback, type AvatarFallbackProps, AvatarImage, type AvatarImageProps, type AvatarProps, Badge, type BadgeProps, Bleed, type BleedProps, Button, type ButtonProps, Card, CardAction, type CardActionProps, CardContent, type CardContentProps, CardDescription, type CardDescriptionProps, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, CardTitle, type CardTitleProps, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, ColorPicker, type ColorPickerProps, type ColorSwatch, Command, CommandDialog, type CommandDialogProps, CommandEmpty, type CommandEmptyProps, CommandGroup, type CommandGroupProps, CommandInput, type CommandInputProps, CommandItem, type CommandItemProps, CommandList, type CommandListProps, type CommandProps, CommandSeparator, type CommandSeparatorProps, CommandShortcut, type CommandShortcutProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, type DataFetcher, Dialog, DialogClose, DialogContent, type DialogContentProps, DialogDescription, type DialogDescriptionProps, DialogFooter, type DialogFooterProps, DialogHeader, type DialogHeaderProps, DialogOverlay, type DialogOverlayProps, DialogPortal, DialogTitle, type DialogTitleProps, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, type DropdownMenuCheckboxItemProps, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, type DropdownMenuLabelProps, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, type DropdownMenuRadioItemProps, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuShortcut, type DropdownMenuShortcutProps, DropdownMenuSub, DropdownMenuSubContent, type DropdownMenuSubContentProps, DropdownMenuSubTrigger, type DropdownMenuSubTriggerProps, DropdownMenuTrigger, FieldShell, type FieldShellProps, type FieldShellRenderProps, type FieldWidth, type FilterInfo, FormActions, type FormActionsProps, FormLabelWithTooltip, type FormLabelWithTooltipProps, FormSection, type FormSectionProps, Grid, type GridProps, Input, type InputProps, type KeyChord, type KeySequence, Label, type ListResponse, type ModifierState, PageHeader, type PageHeaderProps, PageShell, type PageShellProps, type PaginationConfig, type PaginationMeta, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PortalProvider, Progress, type ProgressProps, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, SHELL_MEASURE, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, type SelectTriggerProps, SelectValue, Separator, Sheet, SheetClose, type SheetCloseProps, SheetContent, type SheetContentProps, type SheetContentRef, SheetDescription, type SheetDescriptionProps, type SheetDescriptionRef, SheetFooter, type SheetFooterProps, SheetHeader, type SheetHeaderProps, SheetOverlay, type SheetOverlayProps, type SheetOverlayRef, SheetPortal, type SheetProps, SheetTitle, type SheetTitleProps, type SheetTitleRef, SheetTrigger, type SheetTriggerProps, type ShortcutBinding, type ShortcutLayerOptions, type ShortcutManager, type ShortcutManagerOptions, ShortcutProvider, type ShortcutProviderProps, type ShortcutRegistration, ShortcutScope, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderThumbProps, type SortInfo, Spinner, type SpinnerProps, Stack, type StackProps, Stat, type StatProps, Switch, Table, TableBody, TableCaption, TableCell, TableEmpty, type TableEmptyProps, TableError, type TableErrorProps, TableFooter, TableHead, TableHeader, TableLoading, type TableParams, TableRow, TableSearch, type TableSearchProps, TableSkeleton, type TableSkeletonProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TreeNode, TreeView, type TreeViewProps, type UseShortcutsOptions, alertVariants, avatarVariants, badgeVariants, buttonVariants, cardVariants, chordMatches, commandDefaultFilter, createShortcutManager, detectApplePlatform, dialogContentVariants, inputVariants, parseKeys, progressVariants, selectTriggerVariants, sheetVariants, spinnerVariants, useActiveShortcuts, useCommandHighlight, usePortalContainer, useShortcutManager, useShortcuts };
|