@dimaan/ui 0.0.10 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +16081 -326
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +679 -274
- package/dist/index.d.ts +679 -274
- package/dist/index.js +15982 -270
- package/dist/index.js.map +1 -1
- package/package.json +12 -11
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as react from 'react';
|
|
3
|
-
import { HTMLAttributes, ReactNode,
|
|
3
|
+
import { HTMLAttributes, ReactNode, ButtonHTMLAttributes, ReactElement, InputHTMLAttributes, ChangeEvent, ComponentPropsWithoutRef, FieldsetHTMLAttributes, Ref, TextareaHTMLAttributes } from 'react';
|
|
4
|
+
import { LinkProps } from 'react-router-dom';
|
|
5
|
+
import * as RadixDropdown from '@radix-ui/react-dropdown-menu';
|
|
4
6
|
import { FieldValues, FieldPath, Control } from 'react-hook-form';
|
|
5
7
|
import * as RadixRadioGroup from '@radix-ui/react-radio-group';
|
|
6
8
|
import { ClassValue } from 'clsx';
|
|
@@ -29,22 +31,85 @@ declare function DashboardLayout({ defaultCollapsed, collapsed: collapsedProp, o
|
|
|
29
31
|
type DashboardMainProps = HTMLAttributes<HTMLDivElement>;
|
|
30
32
|
declare function DashboardMain({ className, children, ...props }: DashboardMainProps): react_jsx_runtime.JSX.Element;
|
|
31
33
|
|
|
32
|
-
type
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
type SidebarProps = HTMLAttributes<HTMLElement>;
|
|
35
|
+
declare function Sidebar({ className, children, ...props }: SidebarProps): react_jsx_runtime.JSX.Element;
|
|
36
|
+
|
|
37
|
+
type SidebarFooterProps = HTMLAttributes<HTMLDivElement>;
|
|
38
|
+
declare function SidebarFooter({ className, children, ...props }: SidebarFooterProps): react_jsx_runtime.JSX.Element;
|
|
39
|
+
|
|
40
|
+
interface SidebarGroupProps extends HTMLAttributes<HTMLDivElement> {
|
|
41
|
+
label?: ReactNode;
|
|
42
|
+
}
|
|
43
|
+
declare function SidebarGroup({ label, className, children, ...props }: SidebarGroupProps): react_jsx_runtime.JSX.Element;
|
|
44
|
+
|
|
45
|
+
type SidebarHeaderProps = HTMLAttributes<HTMLDivElement>;
|
|
46
|
+
declare function SidebarHeader({ className, children, ...props }: SidebarHeaderProps): react_jsx_runtime.JSX.Element;
|
|
47
|
+
|
|
48
|
+
type SidebarNavProps = HTMLAttributes<HTMLElement>;
|
|
49
|
+
declare function SidebarNav({ className, children, ...props }: SidebarNavProps): react_jsx_runtime.JSX.Element;
|
|
50
|
+
|
|
51
|
+
interface SidebarNavGroupProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
|
|
52
|
+
icon?: ReactNode;
|
|
53
|
+
label?: ReactNode;
|
|
54
|
+
endSlot?: ReactNode;
|
|
55
|
+
/** Highlight the parent (e.g. when one of its children is active). */
|
|
56
|
+
active?: boolean;
|
|
57
|
+
/** Uncontrolled initial state. */
|
|
58
|
+
defaultOpen?: boolean;
|
|
59
|
+
/** Controlled open state. */
|
|
60
|
+
open?: boolean;
|
|
61
|
+
onOpenChange?: (open: boolean) => void;
|
|
62
|
+
children: ReactNode;
|
|
63
|
+
}
|
|
64
|
+
declare function SidebarNavGroup({ icon, label, endSlot, active, defaultOpen, open: openProp, onOpenChange, className, children, onClick, ...props }: SidebarNavGroupProps): react_jsx_runtime.JSX.Element;
|
|
65
|
+
|
|
66
|
+
type SidebarNavItemRenderProps = {
|
|
67
|
+
className: string;
|
|
35
68
|
children: ReactNode;
|
|
69
|
+
to: LinkProps['to'];
|
|
70
|
+
isActive: boolean;
|
|
71
|
+
title?: string;
|
|
36
72
|
'aria-current'?: 'page';
|
|
37
|
-
|
|
73
|
+
'data-active'?: 'true';
|
|
74
|
+
};
|
|
75
|
+
interface SidebarNavItemProps extends LinkProps {
|
|
76
|
+
icon?: ReactNode;
|
|
77
|
+
active?: boolean;
|
|
78
|
+
label?: ReactNode;
|
|
79
|
+
endSlot?: ReactNode;
|
|
80
|
+
/** Whether the link should match exactly. */
|
|
81
|
+
end?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Override the rendered element. Use this to plug in routing-library link
|
|
84
|
+
* components (e.g. react-router `<Link>`) while keeping the styling.
|
|
85
|
+
*/
|
|
86
|
+
render?: (props: SidebarNavItemRenderProps) => ReactElement;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Individual navigation item inside a `<SidebarNav>` or `<SidebarGroup>`.
|
|
90
|
+
* Automatically detects active state based on the current route.
|
|
91
|
+
*
|
|
92
|
+
* @example Basic usage
|
|
93
|
+
* ```tsx
|
|
94
|
+
* <SidebarNavItem to="/dashboard" icon={<Home />}>
|
|
95
|
+
* Dashboard
|
|
96
|
+
* </SidebarNavItem>
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
declare function SidebarNavItem({ icon, active: forcedActive, label, endSlot, className, children, render, to, end, ...props }: SidebarNavItemProps): react_jsx_runtime.JSX.Element;
|
|
100
|
+
|
|
38
101
|
interface AppShellNavItem {
|
|
39
102
|
/** Optional stable key. Falls back to array index if omitted — only safe for static nav. */
|
|
40
103
|
key?: string;
|
|
41
104
|
label: ReactNode;
|
|
42
|
-
|
|
105
|
+
to?: string;
|
|
43
106
|
icon?: ReactNode;
|
|
44
107
|
active?: boolean;
|
|
108
|
+
/** Whether the link should match exactly. */
|
|
109
|
+
end?: boolean;
|
|
45
110
|
endSlot?: ReactNode;
|
|
46
111
|
/** Optional render prop for routing libraries (e.g. react-router <Link>). */
|
|
47
|
-
render?:
|
|
112
|
+
render?: (props: SidebarNavItemRenderProps) => ReactElement;
|
|
48
113
|
}
|
|
49
114
|
interface AppShellNavGroup {
|
|
50
115
|
/** Optional stable key. Falls back to array index if omitted — only safe for static nav. */
|
|
@@ -90,14 +155,14 @@ interface AppShellProps extends Pick<DashboardLayoutProps, 'defaultCollapsed' |
|
|
|
90
155
|
* <AppShell
|
|
91
156
|
* brand={{ logo: <Logo />, name: 'Acme' }}
|
|
92
157
|
* nav={[
|
|
93
|
-
* { key: 'home', label: 'Home',
|
|
158
|
+
* { key: 'home', label: 'Home', to: '/', icon: <Home /> },
|
|
94
159
|
* {
|
|
95
160
|
* key: 'settings',
|
|
96
161
|
* label: 'Settings',
|
|
97
162
|
* icon: <Settings />,
|
|
98
163
|
* items: [
|
|
99
|
-
* { key: 'profile', label: 'Profile',
|
|
100
|
-
* { key: 'team', label: 'Team',
|
|
164
|
+
* { key: 'profile', label: 'Profile', to: '/settings/profile' },
|
|
165
|
+
* { key: 'team', label: 'Team', to: '/settings/team' },
|
|
101
166
|
* ],
|
|
102
167
|
* },
|
|
103
168
|
* ]}
|
|
@@ -110,14 +175,14 @@ interface AppShellProps extends Pick<DashboardLayoutProps, 'defaultCollapsed' |
|
|
|
110
175
|
* </AppShell>
|
|
111
176
|
* ```
|
|
112
177
|
*
|
|
113
|
-
* @example With
|
|
178
|
+
* @example With custom rendering
|
|
114
179
|
* ```tsx
|
|
115
180
|
* const nav = [{
|
|
116
181
|
* key: 'home',
|
|
117
182
|
* label: 'Home',
|
|
118
183
|
* icon: <Home />,
|
|
119
184
|
* render: ({ children, className, ...rest }) => (
|
|
120
|
-
* <
|
|
185
|
+
* <MyCustomLink {...rest} className={className}>{children}</MyCustomLink>
|
|
121
186
|
* ),
|
|
122
187
|
* }];
|
|
123
188
|
* ```
|
|
@@ -132,6 +197,43 @@ interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
|
|
|
132
197
|
}
|
|
133
198
|
declare function Avatar({ src, alt, fallback, size, className, ...props }: AvatarProps): react_jsx_runtime.JSX.Element;
|
|
134
199
|
|
|
200
|
+
type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'destructive' | 'outline';
|
|
201
|
+
type BadgeSize = 'sm' | 'md';
|
|
202
|
+
declare const badgeVariantClass: Record<BadgeVariant, string>;
|
|
203
|
+
declare const badgeSizeClass: Record<BadgeSize, string>;
|
|
204
|
+
/** The dot-indicator size for each badge size. */
|
|
205
|
+
declare const badgeDotSizeClass: Record<BadgeSize, string>;
|
|
206
|
+
declare const badgeBaseClass = "inline-flex shrink-0 items-center rounded-full border font-medium leading-none whitespace-nowrap select-none transition-colors";
|
|
207
|
+
|
|
208
|
+
interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
209
|
+
variant?: BadgeVariant;
|
|
210
|
+
size?: BadgeSize;
|
|
211
|
+
/** Render a small dot before the label (useful for online/status indicators). */
|
|
212
|
+
dot?: boolean;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Inline status pill. Most common use: status column in a table (Active /
|
|
216
|
+
* Pending / Archived), category labels, or counts in nav items.
|
|
217
|
+
*
|
|
218
|
+
* @example Status pill in a table cell
|
|
219
|
+
* ```tsx
|
|
220
|
+
* <Badge variant="success">Active</Badge>
|
|
221
|
+
* <Badge variant="warning">Pending</Badge>
|
|
222
|
+
* <Badge variant="default">Archived</Badge>
|
|
223
|
+
* ```
|
|
224
|
+
*
|
|
225
|
+
* @example With status dot
|
|
226
|
+
* ```tsx
|
|
227
|
+
* <Badge variant="success" dot>Online</Badge>
|
|
228
|
+
* ```
|
|
229
|
+
*
|
|
230
|
+
* @example Outline (border-only, no fill)
|
|
231
|
+
* ```tsx
|
|
232
|
+
* <Badge variant="outline">Beta</Badge>
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
declare const Badge: react.ForwardRefExoticComponent<BadgeProps & react.RefAttributes<HTMLSpanElement>>;
|
|
236
|
+
|
|
135
237
|
type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'destructive' | 'success' | 'warning' | 'link';
|
|
136
238
|
type ButtonSize = 'sm' | 'md' | 'lg' | 'icon' | 'icon-sm';
|
|
137
239
|
declare const buttonVariantClass: Record<ButtonVariant, string>;
|
|
@@ -194,6 +296,153 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'typ
|
|
|
194
296
|
}
|
|
195
297
|
declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
|
|
196
298
|
|
|
299
|
+
type DropdownMenuItemVariant = 'default' | 'destructive';
|
|
300
|
+
declare const dropdownMenuContentClass = "z-50 min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95";
|
|
301
|
+
declare const dropdownMenuItemBaseClass = "relative flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0";
|
|
302
|
+
declare const dropdownMenuItemVariantClass: Record<DropdownMenuItemVariant, string>;
|
|
303
|
+
/** Indent items without an icon so they align with items that have one. */
|
|
304
|
+
declare const dropdownMenuItemInsetClass = "ps-8";
|
|
305
|
+
declare const dropdownMenuSeparatorClass = "-mx-1 my-1 h-px bg-border";
|
|
306
|
+
declare const dropdownMenuLabelClass = "px-2 py-1.5 text-xs font-semibold text-muted-foreground select-none";
|
|
307
|
+
declare const dropdownMenuShortcutClass = "ms-auto text-xs tracking-widest text-muted-foreground";
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Compound dropdown menu built on `@radix-ui/react-dropdown-menu`. Use for
|
|
311
|
+
* row actions (⋯ menu in tables), header overflow menus, user avatar menus.
|
|
312
|
+
*
|
|
313
|
+
* @example Row actions in a table
|
|
314
|
+
* ```tsx
|
|
315
|
+
* <DropdownMenu>
|
|
316
|
+
* <DropdownMenuTrigger asChild>
|
|
317
|
+
* <Button variant="ghost" size="icon" aria-label="More actions">
|
|
318
|
+
* <MoreHorizontal />
|
|
319
|
+
* </Button>
|
|
320
|
+
* </DropdownMenuTrigger>
|
|
321
|
+
* <DropdownMenuContent align="end">
|
|
322
|
+
* <DropdownMenuItem onSelect={() => edit(row)}>
|
|
323
|
+
* <Pencil />
|
|
324
|
+
* Edit
|
|
325
|
+
* </DropdownMenuItem>
|
|
326
|
+
* <DropdownMenuItem onSelect={() => archive(row)}>
|
|
327
|
+
* <Archive />
|
|
328
|
+
* Archive
|
|
329
|
+
* </DropdownMenuItem>
|
|
330
|
+
* <DropdownMenuSeparator />
|
|
331
|
+
* <DropdownMenuItem variant="destructive" onSelect={() => del(row)}>
|
|
332
|
+
* <Trash2 />
|
|
333
|
+
* Delete
|
|
334
|
+
* </DropdownMenuItem>
|
|
335
|
+
* </DropdownMenuContent>
|
|
336
|
+
* </DropdownMenu>
|
|
337
|
+
* ```
|
|
338
|
+
*
|
|
339
|
+
* @example With label, group, and keyboard shortcut
|
|
340
|
+
* ```tsx
|
|
341
|
+
* <DropdownMenu>
|
|
342
|
+
* <DropdownMenuTrigger asChild>
|
|
343
|
+
* <Button variant="outline">Options</Button>
|
|
344
|
+
* </DropdownMenuTrigger>
|
|
345
|
+
* <DropdownMenuContent>
|
|
346
|
+
* <DropdownMenuLabel>My account</DropdownMenuLabel>
|
|
347
|
+
* <DropdownMenuItem>
|
|
348
|
+
* Profile
|
|
349
|
+
* <DropdownMenuShortcut>⌘P</DropdownMenuShortcut>
|
|
350
|
+
* </DropdownMenuItem>
|
|
351
|
+
* <DropdownMenuItem>
|
|
352
|
+
* Settings
|
|
353
|
+
* <DropdownMenuShortcut>⌘,</DropdownMenuShortcut>
|
|
354
|
+
* </DropdownMenuItem>
|
|
355
|
+
* </DropdownMenuContent>
|
|
356
|
+
* </DropdownMenu>
|
|
357
|
+
* ```
|
|
358
|
+
*/
|
|
359
|
+
declare const DropdownMenu: react.FC<RadixDropdown.DropdownMenuProps>;
|
|
360
|
+
declare const DropdownMenuTrigger: react.ForwardRefExoticComponent<RadixDropdown.DropdownMenuTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
361
|
+
declare const DropdownMenuGroup: react.ForwardRefExoticComponent<RadixDropdown.DropdownMenuGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
362
|
+
declare const DropdownMenuPortal: react.FC<RadixDropdown.DropdownMenuPortalProps>;
|
|
363
|
+
interface DropdownMenuContentProps extends ComponentPropsWithoutRef<typeof RadixDropdown.Content> {
|
|
364
|
+
}
|
|
365
|
+
declare const DropdownMenuContent: react.ForwardRefExoticComponent<DropdownMenuContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
366
|
+
interface DropdownMenuItemProps extends ComponentPropsWithoutRef<typeof RadixDropdown.Item> {
|
|
367
|
+
variant?: DropdownMenuItemVariant;
|
|
368
|
+
/** Indent items without a leading icon so they align with iconed siblings. */
|
|
369
|
+
inset?: boolean;
|
|
370
|
+
}
|
|
371
|
+
declare const DropdownMenuItem: react.ForwardRefExoticComponent<DropdownMenuItemProps & react.RefAttributes<HTMLDivElement>>;
|
|
372
|
+
interface DropdownMenuSeparatorProps extends ComponentPropsWithoutRef<typeof RadixDropdown.Separator> {
|
|
373
|
+
}
|
|
374
|
+
declare const DropdownMenuSeparator: react.ForwardRefExoticComponent<DropdownMenuSeparatorProps & react.RefAttributes<HTMLDivElement>>;
|
|
375
|
+
interface DropdownMenuLabelProps extends ComponentPropsWithoutRef<typeof RadixDropdown.Label> {
|
|
376
|
+
/** Indent to align with iconed items. */
|
|
377
|
+
inset?: boolean;
|
|
378
|
+
}
|
|
379
|
+
declare const DropdownMenuLabel: react.ForwardRefExoticComponent<DropdownMenuLabelProps & react.RefAttributes<HTMLDivElement>>;
|
|
380
|
+
/**
|
|
381
|
+
* Visual hint for a keyboard shortcut, rendered at the trailing edge of an
|
|
382
|
+
* item. Pure presentation — does **not** register a keyboard handler.
|
|
383
|
+
*/
|
|
384
|
+
interface DropdownMenuShortcutProps extends HTMLAttributes<HTMLSpanElement> {
|
|
385
|
+
children: ReactNode;
|
|
386
|
+
}
|
|
387
|
+
declare const DropdownMenuShortcut: react.ForwardRefExoticComponent<DropdownMenuShortcutProps & react.RefAttributes<HTMLSpanElement>>;
|
|
388
|
+
|
|
389
|
+
type EmptyStateSize = 'sm' | 'md' | 'lg';
|
|
390
|
+
declare const emptyStateContainerSizeClass: Record<EmptyStateSize, string>;
|
|
391
|
+
declare const emptyStateIconWrapperSizeClass: Record<EmptyStateSize, string>;
|
|
392
|
+
declare const emptyStateTitleSizeClass: Record<EmptyStateSize, string>;
|
|
393
|
+
declare const emptyStateDescriptionSizeClass: Record<EmptyStateSize, string>;
|
|
394
|
+
declare const emptyStateActionsSpacingClass: Record<EmptyStateSize, string>;
|
|
395
|
+
declare const emptyStateBaseClass = "flex flex-col items-center justify-center text-center px-4";
|
|
396
|
+
declare const emptyStateIconWrapperBaseClass = "inline-flex items-center justify-center rounded-full bg-muted text-muted-foreground";
|
|
397
|
+
|
|
398
|
+
interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
399
|
+
/** Optional icon rendered in a circular muted background. Sized via `size` prop. */
|
|
400
|
+
icon?: ReactNode;
|
|
401
|
+
/** Required title — what's missing or what state we're in. */
|
|
402
|
+
title: ReactNode;
|
|
403
|
+
/** Secondary text — explain why the state is empty, suggest next action. */
|
|
404
|
+
description?: ReactNode;
|
|
405
|
+
/** Slot for primary (and optional secondary) action buttons. Rendered below description. */
|
|
406
|
+
action?: ReactNode;
|
|
407
|
+
/** Visual size — `sm` for inline empties (e.g. inside a popover), `md` (default) for table cells, `lg` for full-page empties. */
|
|
408
|
+
size?: EmptyStateSize;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Inline empty-state placeholder. Use when a list, table, or section has no
|
|
412
|
+
* data to show — either because the user hasn't created anything yet, or
|
|
413
|
+
* because filters/search returned zero results.
|
|
414
|
+
*
|
|
415
|
+
* The most common dashboard pattern: render inside a table's `tbody` colspan
|
|
416
|
+
* cell, or as a sibling to a list when the list is empty.
|
|
417
|
+
*
|
|
418
|
+
* @example No-results in a filtered table
|
|
419
|
+
* ```tsx
|
|
420
|
+
* <EmptyState
|
|
421
|
+
* icon={<SearchX />}
|
|
422
|
+
* title="No users match your filters"
|
|
423
|
+
* description="Try clearing the search or changing the status filter."
|
|
424
|
+
* action={<Button variant="outline" onClick={resetFilters}>Reset filters</Button>}
|
|
425
|
+
* />
|
|
426
|
+
* ```
|
|
427
|
+
*
|
|
428
|
+
* @example First-run empty (encourage creation)
|
|
429
|
+
* ```tsx
|
|
430
|
+
* <EmptyState
|
|
431
|
+
* size="lg"
|
|
432
|
+
* icon={<Users />}
|
|
433
|
+
* title="No users yet"
|
|
434
|
+
* description="Add your first team member to get started."
|
|
435
|
+
* action={<Button onClick={openCreate}>Add user</Button>}
|
|
436
|
+
* />
|
|
437
|
+
* ```
|
|
438
|
+
*
|
|
439
|
+
* @example Compact (inline)
|
|
440
|
+
* ```tsx
|
|
441
|
+
* <EmptyState size="sm" title="No notifications" />
|
|
442
|
+
* ```
|
|
443
|
+
*/
|
|
444
|
+
declare const EmptyState: react.ForwardRefExoticComponent<EmptyStateProps & react.RefAttributes<HTMLDivElement>>;
|
|
445
|
+
|
|
197
446
|
interface FieldRHFProps<TValues extends FieldValues = FieldValues, TName extends FieldPath<TValues> = FieldPath<TValues>> {
|
|
198
447
|
/**
|
|
199
448
|
* RHF `Control` returned from `useForm()`. Optional when `Field` is rendered
|
|
@@ -371,126 +620,6 @@ interface LanguageSwitcherProps<TCode extends string = string> extends Omit<Fiel
|
|
|
371
620
|
}
|
|
372
621
|
declare function LanguageSwitcher<TCode extends string = string>({ languages, value, onChange, ariaLabel, className, ...props }: LanguageSwitcherProps<TCode>): react_jsx_runtime.JSX.Element;
|
|
373
622
|
|
|
374
|
-
type RadioGroupSize = 'sm' | 'md' | 'lg';
|
|
375
|
-
/** Outer circle (radio button itself) — sized + bordered. */
|
|
376
|
-
declare const radioItemSizeClass: Record<RadioGroupSize, string>;
|
|
377
|
-
/** Inner indicator (the filled dot when selected). Centred via flex on the parent. */
|
|
378
|
-
declare const radioIndicatorSizeClass: Record<RadioGroupSize, string>;
|
|
379
|
-
/** Label text size that pairs naturally with each radio size. */
|
|
380
|
-
declare const radioLabelSizeClass: Record<RadioGroupSize, string>;
|
|
381
|
-
declare const radioItemBaseClass = "aspect-square shrink-0 rounded-full border border-input bg-background text-primary outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background hover:border-ring disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 data-[state=checked]:border-primary";
|
|
382
|
-
declare const radioIndicatorBaseClass = "flex h-full w-full items-center justify-center";
|
|
383
|
-
declare const radioIndicatorDotClass = "rounded-full bg-primary";
|
|
384
|
-
/** Each option row: radio + label + optional description. */
|
|
385
|
-
declare const radioOptionRowClass = "flex cursor-pointer items-start gap-2 has-[button:disabled]:cursor-not-allowed";
|
|
386
|
-
/** The group container — vertical stack by default, horizontal row when orientation="horizontal". */
|
|
387
|
-
declare const radioGroupBaseClass = "flex gap-3";
|
|
388
|
-
declare const radioGroupOrientationClass: {
|
|
389
|
-
readonly vertical: "flex-col";
|
|
390
|
-
readonly horizontal: "flex-row flex-wrap";
|
|
391
|
-
};
|
|
392
|
-
|
|
393
|
-
interface RadioGroupOption {
|
|
394
|
-
value: string;
|
|
395
|
-
/** Visible label rendered next to the radio button. */
|
|
396
|
-
label: ReactNode;
|
|
397
|
-
/** Optional secondary text rendered below the label (e.g. plan description). */
|
|
398
|
-
description?: ReactNode;
|
|
399
|
-
disabled?: boolean;
|
|
400
|
-
}
|
|
401
|
-
type RadioGroupOrientation = 'vertical' | 'horizontal';
|
|
402
|
-
interface RadioGroupProps {
|
|
403
|
-
/** Visual size of each radio + label. */
|
|
404
|
-
radioSize?: RadioGroupSize;
|
|
405
|
-
/** Layout direction within the group. `'vertical'` (default) stacks options; `'horizontal'` lays them out in a row. */
|
|
406
|
-
orientation?: RadioGroupOrientation;
|
|
407
|
-
/** Controlled selected value (Radix-style). */
|
|
408
|
-
value?: string;
|
|
409
|
-
/** Initial selected value for uncontrolled usage. */
|
|
410
|
-
defaultValue?: string;
|
|
411
|
-
/** Radix-style change handler — receives the new value directly. */
|
|
412
|
-
onValueChange?: (value: string) => void;
|
|
413
|
-
/** Synthetic-event handler for `react-hook-form`'s `field.onChange` and other consumers. */
|
|
414
|
-
onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
415
|
-
/** Called when focus leaves the group. */
|
|
416
|
-
onBlur?: () => void;
|
|
417
|
-
/** Form name (for native form submission). */
|
|
418
|
-
name?: string;
|
|
419
|
-
/** Disables the entire group. */
|
|
420
|
-
disabled?: boolean;
|
|
421
|
-
/** Marks the group as required. */
|
|
422
|
-
required?: boolean;
|
|
423
|
-
/** Override id (otherwise auto-generated via useId). */
|
|
424
|
-
id?: string;
|
|
425
|
-
/** Declarative options. When `children` is provided it wins (escape hatch for custom content). */
|
|
426
|
-
options?: RadioGroupOption[];
|
|
427
|
-
/** Class on the outer group container. */
|
|
428
|
-
className?: string;
|
|
429
|
-
'aria-label'?: string;
|
|
430
|
-
'aria-labelledby'?: string;
|
|
431
|
-
'aria-describedby'?: string;
|
|
432
|
-
'aria-invalid'?: boolean | 'true' | 'false';
|
|
433
|
-
/** Radix children — used for advanced composition (custom RadioGroupItem layouts). */
|
|
434
|
-
children?: ReactNode;
|
|
435
|
-
}
|
|
436
|
-
/**
|
|
437
|
-
* Group of mutually-exclusive radio buttons built on `@radix-ui/react-radio-group`.
|
|
438
|
-
* Use for **3–5 options** where Select would be overkill (pricing tier, privacy
|
|
439
|
-
* level, single-choice settings). Bare component — wrap in `<Field label="…">`
|
|
440
|
-
* for the GROUP label, helper, and error rendering.
|
|
441
|
-
*
|
|
442
|
-
* Each option carries its own per-radio `label` (and optional `description`).
|
|
443
|
-
* The Field's outer label names the group; the option labels name each choice.
|
|
444
|
-
*
|
|
445
|
-
* @example Inside a Field (RHF + Zod)
|
|
446
|
-
* ```tsx
|
|
447
|
-
* <Field name="plan" label="Subscription plan" description="You can change anytime.">
|
|
448
|
-
* <RadioGroup
|
|
449
|
-
* options={[
|
|
450
|
-
* { value: 'free', label: 'Free', description: 'Up to 3 projects' },
|
|
451
|
-
* { value: 'pro', label: 'Pro', description: 'Unlimited projects' },
|
|
452
|
-
* { value: 'enterprise', label: 'Enterprise', description: 'Custom limits' },
|
|
453
|
-
* ]}
|
|
454
|
-
* />
|
|
455
|
-
* </Field>
|
|
456
|
-
* ```
|
|
457
|
-
*
|
|
458
|
-
* @example Horizontal row in a settings card
|
|
459
|
-
* ```tsx
|
|
460
|
-
* <Field label="Visibility" orientation="horizontal">
|
|
461
|
-
* <RadioGroup
|
|
462
|
-
* orientation="horizontal"
|
|
463
|
-
* value={visibility}
|
|
464
|
-
* onValueChange={setVisibility}
|
|
465
|
-
* options={[
|
|
466
|
-
* { value: 'public', label: 'Public' },
|
|
467
|
-
* { value: 'private', label: 'Private' },
|
|
468
|
-
* ]}
|
|
469
|
-
* />
|
|
470
|
-
* </Field>
|
|
471
|
-
* ```
|
|
472
|
-
*/
|
|
473
|
-
declare const RadioGroup: react.ForwardRefExoticComponent<RadioGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
474
|
-
/**
|
|
475
|
-
* `<RadioGroupItem>` — re-exported for consumers building custom option layouts
|
|
476
|
-
* (icons, badges, etc.) via the `children` escape hatch.
|
|
477
|
-
*
|
|
478
|
-
* @example
|
|
479
|
-
* ```tsx
|
|
480
|
-
* <RadioGroup value={plan} onValueChange={setPlan}>
|
|
481
|
-
* {plans.map((p) => (
|
|
482
|
-
* <label key={p.value} htmlFor={p.value} className="flex items-center gap-2">
|
|
483
|
-
* <RadioGroupItem id={p.value} value={p.value} />
|
|
484
|
-
* <PlanCard {...p} />
|
|
485
|
-
* </label>
|
|
486
|
-
* ))}
|
|
487
|
-
* </RadioGroup>
|
|
488
|
-
* ```
|
|
489
|
-
*/
|
|
490
|
-
declare const RadioGroupItem: react.ForwardRefExoticComponent<Omit<RadixRadioGroup.RadioGroupItemProps & react.RefAttributes<HTMLButtonElement>, "ref"> & {
|
|
491
|
-
radioSize?: RadioGroupSize;
|
|
492
|
-
} & react.RefAttributes<HTMLButtonElement>>;
|
|
493
|
-
|
|
494
623
|
type SelectVariant = 'default' | 'filled' | 'ghost';
|
|
495
624
|
type SelectSize = 'sm' | 'md' | 'lg';
|
|
496
625
|
declare const selectVariantClass: Record<SelectVariant, string>;
|
|
@@ -586,148 +715,20 @@ interface SelectProps {
|
|
|
586
715
|
*/
|
|
587
716
|
declare const Select: react.ForwardRefExoticComponent<SelectProps & react.RefAttributes<HTMLButtonElement>>;
|
|
588
717
|
|
|
589
|
-
type
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
718
|
+
type TableSize = 'sm' | 'md' | 'lg';
|
|
719
|
+
interface TableSizeClasses {
|
|
720
|
+
/** Applied to <tr> when needed (currently empty — present for symmetry). */
|
|
721
|
+
row: string;
|
|
722
|
+
/** Applied to <td>. */
|
|
723
|
+
cell: string;
|
|
724
|
+
/** Applied to <th>. */
|
|
725
|
+
head: string;
|
|
597
726
|
}
|
|
598
|
-
declare
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
declare
|
|
602
|
-
|
|
603
|
-
type SidebarNavProps = HTMLAttributes<HTMLElement>;
|
|
604
|
-
declare function SidebarNav({ className, children, ...props }: SidebarNavProps): react_jsx_runtime.JSX.Element;
|
|
605
|
-
|
|
606
|
-
interface SidebarNavGroupProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
|
|
607
|
-
icon?: ReactNode;
|
|
608
|
-
label?: ReactNode;
|
|
609
|
-
endSlot?: ReactNode;
|
|
610
|
-
/** Highlight the parent (e.g. when one of its children is active). */
|
|
611
|
-
active?: boolean;
|
|
612
|
-
/** Uncontrolled initial state. */
|
|
613
|
-
defaultOpen?: boolean;
|
|
614
|
-
/** Controlled open state. */
|
|
615
|
-
open?: boolean;
|
|
616
|
-
onOpenChange?: (open: boolean) => void;
|
|
617
|
-
children: ReactNode;
|
|
618
|
-
}
|
|
619
|
-
declare function SidebarNavGroup({ icon, label, endSlot, active, defaultOpen, open: openProp, onOpenChange, className, children, onClick, ...props }: SidebarNavGroupProps): react_jsx_runtime.JSX.Element;
|
|
620
|
-
|
|
621
|
-
type SidebarNavItemRenderProps = {
|
|
622
|
-
className: string;
|
|
623
|
-
children: ReactNode;
|
|
624
|
-
title?: string;
|
|
625
|
-
'aria-current'?: 'page';
|
|
626
|
-
'data-active'?: 'true';
|
|
627
|
-
};
|
|
628
|
-
interface SidebarNavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
629
|
-
icon?: ReactNode;
|
|
630
|
-
active?: boolean;
|
|
631
|
-
label?: ReactNode;
|
|
632
|
-
endSlot?: ReactNode;
|
|
633
|
-
/**
|
|
634
|
-
* Override the rendered element. Use this to plug in routing-library link
|
|
635
|
-
* components (e.g. react-router `<Link>`) while keeping the styling.
|
|
636
|
-
*/
|
|
637
|
-
render?: (props: SidebarNavItemRenderProps) => ReactElement;
|
|
638
|
-
}
|
|
639
|
-
declare function SidebarNavItem({ icon, active, label, endSlot, className, children, render, ...props }: SidebarNavItemProps): react_jsx_runtime.JSX.Element;
|
|
640
|
-
|
|
641
|
-
type SwitchSize = 'sm' | 'md' | 'lg';
|
|
642
|
-
/**
|
|
643
|
-
* Each size is a tuple: track dimensions + thumb size + thumb travel distance.
|
|
644
|
-
* Track is `w` x `h`; thumb is `w/h size-X`; travel is the translation distance
|
|
645
|
-
* when checked (= track width − thumb size − padding).
|
|
646
|
-
*/
|
|
647
|
-
declare const switchTrackClass: Record<SwitchSize, string>;
|
|
648
|
-
declare const switchThumbClass: Record<SwitchSize, string>;
|
|
649
|
-
declare const switchTrackBaseClass = "relative inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-input transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-destructive/40";
|
|
650
|
-
declare const switchThumbBaseClass = "pointer-events-none block rounded-full bg-background shadow-sm ring-0 transition-transform";
|
|
651
|
-
|
|
652
|
-
interface SwitchProps {
|
|
653
|
-
/** Visual size. */
|
|
654
|
-
switchSize?: SwitchSize;
|
|
655
|
-
/** Controlled checked state (Radix-style). */
|
|
656
|
-
checked?: boolean;
|
|
657
|
-
/** Initial checked state for uncontrolled usage. */
|
|
658
|
-
defaultChecked?: boolean;
|
|
659
|
-
/** Radix-style change handler — receives the new boolean directly. */
|
|
660
|
-
onCheckedChange?: (checked: boolean) => void;
|
|
661
|
-
/**
|
|
662
|
-
* Form-library compatibility props. `value` mirrors what `<Field>` injects
|
|
663
|
-
* (RHF passes `field.value` as a boolean). `onChange` fires alongside
|
|
664
|
-
* `onCheckedChange` with a synthetic event so `field.onChange` works too.
|
|
665
|
-
*/
|
|
666
|
-
value?: boolean | string | number;
|
|
667
|
-
onChange?: (event: ChangeEvent<HTMLButtonElement>) => void;
|
|
668
|
-
onBlur?: () => void;
|
|
669
|
-
/** Form name for native form submission. */
|
|
670
|
-
name?: string;
|
|
671
|
-
/** Disable interaction. */
|
|
672
|
-
disabled?: boolean;
|
|
673
|
-
/** Mark required for form validation. */
|
|
674
|
-
required?: boolean;
|
|
675
|
-
/** Override id (otherwise auto-generated via useId). */
|
|
676
|
-
id?: string;
|
|
677
|
-
/** Class on the track (the switch itself). */
|
|
678
|
-
className?: string;
|
|
679
|
-
'aria-label'?: string;
|
|
680
|
-
'aria-describedby'?: string;
|
|
681
|
-
'aria-invalid'?: boolean | 'true' | 'false';
|
|
682
|
-
}
|
|
683
|
-
/**
|
|
684
|
-
* Boolean toggle built on `@radix-ui/react-switch`. Renders only the track +
|
|
685
|
-
* thumb — wrap it in `<Field orientation="horizontal" label="…">` to add a
|
|
686
|
-
* label, helper text, error, and aria wiring without duplicating that logic
|
|
687
|
-
* inside every form control.
|
|
688
|
-
*
|
|
689
|
-
* @example Inside a Field (RHF + Zod)
|
|
690
|
-
* ```tsx
|
|
691
|
-
* <Field name="darkMode" label="Dark mode" orientation="horizontal">
|
|
692
|
-
* <Switch />
|
|
693
|
-
* </Field>
|
|
694
|
-
* ```
|
|
695
|
-
*
|
|
696
|
-
* @example Bare in a settings list (custom layout)
|
|
697
|
-
* ```tsx
|
|
698
|
-
* <ul className="divide-y divide-border">
|
|
699
|
-
* <li className="flex items-center justify-between py-3">
|
|
700
|
-
* <span>Email digest</span>
|
|
701
|
-
* <Switch checked={digest} onCheckedChange={setDigest} aria-label="Email digest" />
|
|
702
|
-
* </li>
|
|
703
|
-
* </ul>
|
|
704
|
-
* ```
|
|
705
|
-
*
|
|
706
|
-
* @example Standalone controlled
|
|
707
|
-
* ```tsx
|
|
708
|
-
* <Switch
|
|
709
|
-
* checked={enabled}
|
|
710
|
-
* onCheckedChange={setEnabled}
|
|
711
|
-
* aria-label="Enable notifications"
|
|
712
|
-
* />
|
|
713
|
-
* ```
|
|
714
|
-
*/
|
|
715
|
-
declare const Switch: react.ForwardRefExoticComponent<SwitchProps & react.RefAttributes<HTMLButtonElement>>;
|
|
716
|
-
|
|
717
|
-
type TableSize = 'sm' | 'md' | 'lg';
|
|
718
|
-
interface TableSizeClasses {
|
|
719
|
-
/** Applied to <tr> when needed (currently empty — present for symmetry). */
|
|
720
|
-
row: string;
|
|
721
|
-
/** Applied to <td>. */
|
|
722
|
-
cell: string;
|
|
723
|
-
/** Applied to <th>. */
|
|
724
|
-
head: string;
|
|
725
|
-
}
|
|
726
|
-
declare const tableSizeClass: Record<TableSize, TableSizeClasses>;
|
|
727
|
-
declare const tableBaseClass = "w-full caption-bottom border-collapse";
|
|
728
|
-
declare const selectedRowClass = "bg-muted/40";
|
|
729
|
-
declare const sortIconClass = "inline-flex h-3 w-3 shrink-0 items-center justify-center";
|
|
730
|
-
declare const alignClass: Record<ColumnAlign, string>;
|
|
727
|
+
declare const tableSizeClass: Record<TableSize, TableSizeClasses>;
|
|
728
|
+
declare const tableBaseClass = "w-full caption-bottom border-collapse";
|
|
729
|
+
declare const selectedRowClass = "bg-muted/40";
|
|
730
|
+
declare const sortIconClass = "inline-flex h-3 w-3 shrink-0 items-center justify-center";
|
|
731
|
+
declare const alignClass: Record<ColumnAlign, string>;
|
|
731
732
|
|
|
732
733
|
type SortDirection = 'asc' | 'desc';
|
|
733
734
|
interface SortState {
|
|
@@ -825,6 +826,410 @@ interface TableProps<T> {
|
|
|
825
826
|
|
|
826
827
|
declare function Table<T>(props: TableProps<T>): react_jsx_runtime.JSX.Element;
|
|
827
828
|
|
|
829
|
+
/**
|
|
830
|
+
* One filter dropdown definition for `<ListPage>`. ListPage manages each
|
|
831
|
+
* filter's state internally — you provide options + accessor.
|
|
832
|
+
*/
|
|
833
|
+
interface ListPageFilter<T> {
|
|
834
|
+
/** Unique key for state tracking. */
|
|
835
|
+
key: string;
|
|
836
|
+
/** Aria-label on the Select trigger. */
|
|
837
|
+
ariaLabel?: string;
|
|
838
|
+
/** Returns the row value to match against the filter selection. */
|
|
839
|
+
accessor: (row: T) => string;
|
|
840
|
+
/** Options to choose from. The first option's value is treated as "no filter / show all". */
|
|
841
|
+
options: SelectOption[];
|
|
842
|
+
/** Override the "no filter" default. Defaults to the first option's `value`. */
|
|
843
|
+
defaultValue?: string;
|
|
844
|
+
/** Width of the Select. Defaults to `'default'` (~11rem). */
|
|
845
|
+
width?: 'narrow' | 'default' | 'wide';
|
|
846
|
+
}
|
|
847
|
+
interface ListPageEmptyState {
|
|
848
|
+
icon?: ReactNode;
|
|
849
|
+
title?: ReactNode;
|
|
850
|
+
description?: ReactNode;
|
|
851
|
+
/** Override the default "Reset filters" action button. Pass `null` to hide entirely. */
|
|
852
|
+
action?: ReactNode | null;
|
|
853
|
+
}
|
|
854
|
+
interface ListPageLabels {
|
|
855
|
+
/** Default search input placeholder. */
|
|
856
|
+
searchPlaceholder?: string;
|
|
857
|
+
/** Default search aria-label (falls back to placeholder). */
|
|
858
|
+
searchAriaLabel?: string;
|
|
859
|
+
/** Default "Reset filters" button label. */
|
|
860
|
+
reset?: string;
|
|
861
|
+
/** Default empty-state title (when filters return zero). */
|
|
862
|
+
emptyTitle?: string;
|
|
863
|
+
/** Default empty-state description. */
|
|
864
|
+
emptyDescription?: string;
|
|
865
|
+
}
|
|
866
|
+
interface ListPageProps<T> {
|
|
867
|
+
title: ReactNode;
|
|
868
|
+
description?: ReactNode;
|
|
869
|
+
/** Page-header bordered separator. Defaults to `true` for list pages. */
|
|
870
|
+
bordered?: boolean;
|
|
871
|
+
/** Header action slot — primary "Add" button, etc. */
|
|
872
|
+
actions?: ReactNode;
|
|
873
|
+
data: T[];
|
|
874
|
+
columns: Column<T>[];
|
|
875
|
+
getRowId: (row: T) => string;
|
|
876
|
+
/** Keys on `T` to search. Search input only renders when this is provided. */
|
|
877
|
+
searchKeys?: Array<keyof T>;
|
|
878
|
+
filters?: ListPageFilter<T>[];
|
|
879
|
+
enableRowSelection?: boolean;
|
|
880
|
+
bulkActions?: (selected: T[]) => ReactNode;
|
|
881
|
+
emptyState?: ListPageEmptyState;
|
|
882
|
+
labels?: ListPageLabels;
|
|
883
|
+
className?: string;
|
|
884
|
+
}
|
|
885
|
+
/**
|
|
886
|
+
* Declarative list-page template — composes `PageHeader + search input +
|
|
887
|
+
* filter selects + Table + EmptyState` into a single configurable component.
|
|
888
|
+
*
|
|
889
|
+
* **Owns state internally** for search and filter selections — you pass raw
|
|
890
|
+
* `data` and ListPage filters it for you. For server-side data fetching or URL
|
|
891
|
+
* sync, drop down to the underlying primitives directly (see the
|
|
892
|
+
* `RecipeListPage` playground page for the manual composition pattern).
|
|
893
|
+
*
|
|
894
|
+
* @example Basic — Users list
|
|
895
|
+
* ```tsx
|
|
896
|
+
* <ListPage
|
|
897
|
+
* title="Users"
|
|
898
|
+
* description="Manage your team members."
|
|
899
|
+
* actions={<Button onClick={openCreate}>Add user</Button>}
|
|
900
|
+
* data={users}
|
|
901
|
+
* columns={USER_COLUMNS}
|
|
902
|
+
* getRowId={(u) => u.id}
|
|
903
|
+
* searchKeys={['name', 'email']}
|
|
904
|
+
* filters={[
|
|
905
|
+
* {
|
|
906
|
+
* key: 'status',
|
|
907
|
+
* ariaLabel: 'Status',
|
|
908
|
+
* accessor: (u) => u.status,
|
|
909
|
+
* options: [
|
|
910
|
+
* { value: 'all', label: 'All statuses' },
|
|
911
|
+
* { value: 'active', label: 'Active' },
|
|
912
|
+
* { value: 'invited', label: 'Invited' },
|
|
913
|
+
* ],
|
|
914
|
+
* },
|
|
915
|
+
* ]}
|
|
916
|
+
* enableRowSelection
|
|
917
|
+
* bulkActions={(rows) => <Button variant="destructive">Delete ({rows.length})</Button>}
|
|
918
|
+
* />
|
|
919
|
+
* ```
|
|
920
|
+
*
|
|
921
|
+
* @example With localized labels
|
|
922
|
+
* ```tsx
|
|
923
|
+
* <ListPage
|
|
924
|
+
* {...props}
|
|
925
|
+
* labels={{
|
|
926
|
+
* searchPlaceholder: 'ابحث…',
|
|
927
|
+
* reset: 'إعادة الفلاتر',
|
|
928
|
+
* emptyTitle: 'لا توجد نتائج',
|
|
929
|
+
* emptyDescription: 'حاول مسح البحث أو تغيير الفلاتر.',
|
|
930
|
+
* }}
|
|
931
|
+
* />
|
|
932
|
+
* ```
|
|
933
|
+
*/
|
|
934
|
+
declare function ListPage<T>({ title, description, bordered, actions, data, columns, getRowId, searchKeys, filters, enableRowSelection, bulkActions, emptyState, labels: labelsProp, className, }: ListPageProps<T>): react_jsx_runtime.JSX.Element;
|
|
935
|
+
|
|
936
|
+
type PageHeaderHeadingLevel = 'h1' | 'h2' | 'h3' | 'h4';
|
|
937
|
+
/** Props passed to the routing-library `render` slot of the back button. */
|
|
938
|
+
interface PageHeaderBackRenderProps {
|
|
939
|
+
to?: LinkProps['to'];
|
|
940
|
+
className?: string;
|
|
941
|
+
children: ReactNode;
|
|
942
|
+
onClick?: () => void;
|
|
943
|
+
}
|
|
944
|
+
interface PageHeaderBackProps {
|
|
945
|
+
/** Visible label next to the arrow. Defaults to `"Back"`. */
|
|
946
|
+
label?: ReactNode;
|
|
947
|
+
/** Target to — renders a React Router `<Link>`. */
|
|
948
|
+
to?: LinkProps['to'];
|
|
949
|
+
/** Click handler — renders a `<button>` (or wraps the `render` element). */
|
|
950
|
+
onClick?: () => void;
|
|
951
|
+
/** Routing-library render prop (e.g. wrap a different link component). Wins over `to`. */
|
|
952
|
+
render?: (props: PageHeaderBackRenderProps) => ReactElement;
|
|
953
|
+
}
|
|
954
|
+
interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
955
|
+
/** Page title (required). */
|
|
956
|
+
title: ReactNode;
|
|
957
|
+
/** Optional secondary text under the title. */
|
|
958
|
+
description?: ReactNode;
|
|
959
|
+
/** Slot above the title for breadcrumbs (e.g. `<Breadcrumbs items={…} />` or your own JSX). */
|
|
960
|
+
breadcrumbs?: ReactNode;
|
|
961
|
+
/** Optional back button rendered above the title row. */
|
|
962
|
+
back?: PageHeaderBackProps;
|
|
963
|
+
/** Slot on the trailing side of the title row — buttons, dropdowns, etc. */
|
|
964
|
+
actions?: ReactNode;
|
|
965
|
+
/** Heading level for the title element. Defaults to `'h1'`. */
|
|
966
|
+
as?: PageHeaderHeadingLevel;
|
|
967
|
+
/** Add a bottom border separator. Default: `false`. */
|
|
968
|
+
bordered?: boolean;
|
|
969
|
+
}
|
|
970
|
+
/**
|
|
971
|
+
* Top-of-page header — title, optional description, breadcrumbs, back button,
|
|
972
|
+
* and actions slot. The first thing a user sees on any list / detail / form
|
|
973
|
+
* page in a dashboard.
|
|
974
|
+
*
|
|
975
|
+
* Designed to drop directly into `<DashboardContent>` (or any padded page
|
|
976
|
+
* container). Has no outer padding of its own — the surrounding layout owns
|
|
977
|
+
* spacing.
|
|
978
|
+
*
|
|
979
|
+
* @example List page header with primary action
|
|
980
|
+
* ```tsx
|
|
981
|
+
* <PageHeader
|
|
982
|
+
* title="Users"
|
|
983
|
+
* description="Manage your team members and their roles."
|
|
984
|
+
* actions={<Button onClick={openCreate}>Add user</Button>}
|
|
985
|
+
* bordered
|
|
986
|
+
* />
|
|
987
|
+
* ```
|
|
988
|
+
*
|
|
989
|
+
* @example Detail page header with back button
|
|
990
|
+
* ```tsx
|
|
991
|
+
* <PageHeader
|
|
992
|
+
* title={user.name}
|
|
993
|
+
* description={user.email}
|
|
994
|
+
* back={{
|
|
995
|
+
* label: 'Users',
|
|
996
|
+
* to: '/users',
|
|
997
|
+
* }}
|
|
998
|
+
* actions={
|
|
999
|
+
* <>
|
|
1000
|
+
* <Button variant="outline">Edit</Button>
|
|
1001
|
+
* <Button variant="destructive">Delete</Button>
|
|
1002
|
+
* </>
|
|
1003
|
+
* }
|
|
1004
|
+
* />
|
|
1005
|
+
* ```
|
|
1006
|
+
*
|
|
1007
|
+
* @example With breadcrumbs slot
|
|
1008
|
+
* ```tsx
|
|
1009
|
+
* <PageHeader
|
|
1010
|
+
* breadcrumbs={
|
|
1011
|
+
* <nav aria-label="Breadcrumb">
|
|
1012
|
+
* <ol className="flex items-center gap-1">
|
|
1013
|
+
* <li><Link to="/">Home</Link></li>
|
|
1014
|
+
* <li>/</li>
|
|
1015
|
+
* <li>Users</li>
|
|
1016
|
+
* </ol>
|
|
1017
|
+
* </nav>
|
|
1018
|
+
* }
|
|
1019
|
+
* title="Users"
|
|
1020
|
+
* />
|
|
1021
|
+
* ```
|
|
1022
|
+
*/
|
|
1023
|
+
declare const PageHeader: react.ForwardRefExoticComponent<PageHeaderProps & react.RefAttributes<HTMLElement>>;
|
|
1024
|
+
|
|
1025
|
+
declare const pageHeaderBaseClass = "flex w-full flex-col gap-3";
|
|
1026
|
+
/** Adds a bottom border separator below the header. */
|
|
1027
|
+
declare const pageHeaderBorderedClass = "border-b border-border pb-4";
|
|
1028
|
+
declare const pageHeaderTitleRowClass = "flex flex-wrap items-start justify-between gap-3 sm:gap-4";
|
|
1029
|
+
declare const pageHeaderTitleBlockClass = "min-w-0 flex-1 space-y-1";
|
|
1030
|
+
declare const pageHeaderTitleClass = "text-2xl font-semibold tracking-tight text-foreground";
|
|
1031
|
+
declare const pageHeaderDescriptionClass = "text-sm text-muted-foreground";
|
|
1032
|
+
declare const pageHeaderActionsClass = "flex shrink-0 flex-wrap items-center gap-2";
|
|
1033
|
+
declare const pageHeaderBackClass = "inline-flex items-center gap-1.5 self-start text-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-md";
|
|
1034
|
+
declare const pageHeaderBackIconClass = "size-4 shrink-0 rtl:rotate-180";
|
|
1035
|
+
declare const pageHeaderBreadcrumbsClass = "text-xs text-muted-foreground";
|
|
1036
|
+
|
|
1037
|
+
type RadioGroupSize = 'sm' | 'md' | 'lg';
|
|
1038
|
+
/** Outer circle (radio button itself) — sized + bordered. */
|
|
1039
|
+
declare const radioItemSizeClass: Record<RadioGroupSize, string>;
|
|
1040
|
+
/** Inner indicator (the filled dot when selected). Centred via flex on the parent. */
|
|
1041
|
+
declare const radioIndicatorSizeClass: Record<RadioGroupSize, string>;
|
|
1042
|
+
/** Label text size that pairs naturally with each radio size. */
|
|
1043
|
+
declare const radioLabelSizeClass: Record<RadioGroupSize, string>;
|
|
1044
|
+
declare const radioItemBaseClass = "aspect-square shrink-0 rounded-full border border-input bg-background text-primary outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background hover:border-ring disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 data-[state=checked]:border-primary";
|
|
1045
|
+
declare const radioIndicatorBaseClass = "flex h-full w-full items-center justify-center";
|
|
1046
|
+
declare const radioIndicatorDotClass = "rounded-full bg-primary";
|
|
1047
|
+
/** Each option row: radio + label + optional description. */
|
|
1048
|
+
declare const radioOptionRowClass = "flex cursor-pointer items-start gap-2 has-[button:disabled]:cursor-not-allowed";
|
|
1049
|
+
/** The group container — vertical stack by default, horizontal row when orientation="horizontal". */
|
|
1050
|
+
declare const radioGroupBaseClass = "flex gap-3";
|
|
1051
|
+
declare const radioGroupOrientationClass: {
|
|
1052
|
+
readonly vertical: "flex-col";
|
|
1053
|
+
readonly horizontal: "flex-row flex-wrap";
|
|
1054
|
+
};
|
|
1055
|
+
|
|
1056
|
+
interface RadioGroupOption {
|
|
1057
|
+
value: string;
|
|
1058
|
+
/** Visible label rendered next to the radio button. */
|
|
1059
|
+
label: ReactNode;
|
|
1060
|
+
/** Optional secondary text rendered below the label (e.g. plan description). */
|
|
1061
|
+
description?: ReactNode;
|
|
1062
|
+
disabled?: boolean;
|
|
1063
|
+
}
|
|
1064
|
+
type RadioGroupOrientation = 'vertical' | 'horizontal';
|
|
1065
|
+
interface RadioGroupProps {
|
|
1066
|
+
/** Visual size of each radio + label. */
|
|
1067
|
+
radioSize?: RadioGroupSize;
|
|
1068
|
+
/** Layout direction within the group. `'vertical'` (default) stacks options; `'horizontal'` lays them out in a row. */
|
|
1069
|
+
orientation?: RadioGroupOrientation;
|
|
1070
|
+
/** Controlled selected value (Radix-style). */
|
|
1071
|
+
value?: string;
|
|
1072
|
+
/** Initial selected value for uncontrolled usage. */
|
|
1073
|
+
defaultValue?: string;
|
|
1074
|
+
/** Radix-style change handler — receives the new value directly. */
|
|
1075
|
+
onValueChange?: (value: string) => void;
|
|
1076
|
+
/** Synthetic-event handler for `react-hook-form`'s `field.onChange` and other consumers. */
|
|
1077
|
+
onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
1078
|
+
/** Called when focus leaves the group. */
|
|
1079
|
+
onBlur?: () => void;
|
|
1080
|
+
/** Form name (for native form submission). */
|
|
1081
|
+
name?: string;
|
|
1082
|
+
/** Disables the entire group. */
|
|
1083
|
+
disabled?: boolean;
|
|
1084
|
+
/** Marks the group as required. */
|
|
1085
|
+
required?: boolean;
|
|
1086
|
+
/** Override id (otherwise auto-generated via useId). */
|
|
1087
|
+
id?: string;
|
|
1088
|
+
/** Declarative options. When `children` is provided it wins (escape hatch for custom content). */
|
|
1089
|
+
options?: RadioGroupOption[];
|
|
1090
|
+
/** Class on the outer group container. */
|
|
1091
|
+
className?: string;
|
|
1092
|
+
'aria-label'?: string;
|
|
1093
|
+
'aria-labelledby'?: string;
|
|
1094
|
+
'aria-describedby'?: string;
|
|
1095
|
+
'aria-invalid'?: boolean | 'true' | 'false';
|
|
1096
|
+
/** Radix children — used for advanced composition (custom RadioGroupItem layouts). */
|
|
1097
|
+
children?: ReactNode;
|
|
1098
|
+
}
|
|
1099
|
+
/**
|
|
1100
|
+
* Group of mutually-exclusive radio buttons built on `@radix-ui/react-radio-group`.
|
|
1101
|
+
* Use for **3–5 options** where Select would be overkill (pricing tier, privacy
|
|
1102
|
+
* level, single-choice settings). Bare component — wrap in `<Field label="…">`
|
|
1103
|
+
* for the GROUP label, helper, and error rendering.
|
|
1104
|
+
*
|
|
1105
|
+
* Each option carries its own per-radio `label` (and optional `description`).
|
|
1106
|
+
* The Field's outer label names the group; the option labels name each choice.
|
|
1107
|
+
*
|
|
1108
|
+
* @example Inside a Field (RHF + Zod)
|
|
1109
|
+
* ```tsx
|
|
1110
|
+
* <Field name="plan" label="Subscription plan" description="You can change anytime.">
|
|
1111
|
+
* <RadioGroup
|
|
1112
|
+
* options={[
|
|
1113
|
+
* { value: 'free', label: 'Free', description: 'Up to 3 projects' },
|
|
1114
|
+
* { value: 'pro', label: 'Pro', description: 'Unlimited projects' },
|
|
1115
|
+
* { value: 'enterprise', label: 'Enterprise', description: 'Custom limits' },
|
|
1116
|
+
* ]}
|
|
1117
|
+
* />
|
|
1118
|
+
* </Field>
|
|
1119
|
+
* ```
|
|
1120
|
+
*
|
|
1121
|
+
* @example Horizontal row in a settings card
|
|
1122
|
+
* ```tsx
|
|
1123
|
+
* <Field label="Visibility" orientation="horizontal">
|
|
1124
|
+
* <RadioGroup
|
|
1125
|
+
* orientation="horizontal"
|
|
1126
|
+
* value={visibility}
|
|
1127
|
+
* onValueChange={setVisibility}
|
|
1128
|
+
* options={[
|
|
1129
|
+
* { value: 'public', label: 'Public' },
|
|
1130
|
+
* { value: 'private', label: 'Private' },
|
|
1131
|
+
* ]}
|
|
1132
|
+
* />
|
|
1133
|
+
* </Field>
|
|
1134
|
+
* ```
|
|
1135
|
+
*/
|
|
1136
|
+
declare const RadioGroup: react.ForwardRefExoticComponent<RadioGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
1137
|
+
/**
|
|
1138
|
+
* `<RadioGroupItem>` — re-exported for consumers building custom option layouts
|
|
1139
|
+
* (icons, badges, etc.) via the `children` escape hatch.
|
|
1140
|
+
*
|
|
1141
|
+
* @example
|
|
1142
|
+
* ```tsx
|
|
1143
|
+
* <RadioGroup value={plan} onValueChange={setPlan}>
|
|
1144
|
+
* {plans.map((p) => (
|
|
1145
|
+
* <label key={p.value} htmlFor={p.value} className="flex items-center gap-2">
|
|
1146
|
+
* <RadioGroupItem id={p.value} value={p.value} />
|
|
1147
|
+
* <PlanCard {...p} />
|
|
1148
|
+
* </label>
|
|
1149
|
+
* ))}
|
|
1150
|
+
* </RadioGroup>
|
|
1151
|
+
* ```
|
|
1152
|
+
*/
|
|
1153
|
+
declare const RadioGroupItem: react.ForwardRefExoticComponent<Omit<RadixRadioGroup.RadioGroupItemProps & react.RefAttributes<HTMLButtonElement>, "ref"> & {
|
|
1154
|
+
radioSize?: RadioGroupSize;
|
|
1155
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
1156
|
+
|
|
1157
|
+
type SwitchSize = 'sm' | 'md' | 'lg';
|
|
1158
|
+
/**
|
|
1159
|
+
* Each size is a tuple: track dimensions + thumb size + thumb travel distance.
|
|
1160
|
+
* Track is `w` x `h`; thumb is `w/h size-X`; travel is the translation distance
|
|
1161
|
+
* when checked (= track width − thumb size − padding).
|
|
1162
|
+
*/
|
|
1163
|
+
declare const switchTrackClass: Record<SwitchSize, string>;
|
|
1164
|
+
declare const switchThumbClass: Record<SwitchSize, string>;
|
|
1165
|
+
declare const switchTrackBaseClass = "relative inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-input transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-destructive/40";
|
|
1166
|
+
declare const switchThumbBaseClass = "pointer-events-none block rounded-full bg-background shadow-sm ring-0 transition-transform";
|
|
1167
|
+
|
|
1168
|
+
interface SwitchProps {
|
|
1169
|
+
/** Visual size. */
|
|
1170
|
+
switchSize?: SwitchSize;
|
|
1171
|
+
/** Controlled checked state (Radix-style). */
|
|
1172
|
+
checked?: boolean;
|
|
1173
|
+
/** Initial checked state for uncontrolled usage. */
|
|
1174
|
+
defaultChecked?: boolean;
|
|
1175
|
+
/** Radix-style change handler — receives the new boolean directly. */
|
|
1176
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
1177
|
+
/**
|
|
1178
|
+
* Form-library compatibility props. `value` mirrors what `<Field>` injects
|
|
1179
|
+
* (RHF passes `field.value` as a boolean). `onChange` fires alongside
|
|
1180
|
+
* `onCheckedChange` with a synthetic event so `field.onChange` works too.
|
|
1181
|
+
*/
|
|
1182
|
+
value?: boolean | string | number;
|
|
1183
|
+
onChange?: (event: ChangeEvent<HTMLButtonElement>) => void;
|
|
1184
|
+
onBlur?: () => void;
|
|
1185
|
+
/** Form name for native form submission. */
|
|
1186
|
+
name?: string;
|
|
1187
|
+
/** Disable interaction. */
|
|
1188
|
+
disabled?: boolean;
|
|
1189
|
+
/** Mark required for form validation. */
|
|
1190
|
+
required?: boolean;
|
|
1191
|
+
/** Override id (otherwise auto-generated via useId). */
|
|
1192
|
+
id?: string;
|
|
1193
|
+
/** Class on the track (the switch itself). */
|
|
1194
|
+
className?: string;
|
|
1195
|
+
'aria-label'?: string;
|
|
1196
|
+
'aria-describedby'?: string;
|
|
1197
|
+
'aria-invalid'?: boolean | 'true' | 'false';
|
|
1198
|
+
}
|
|
1199
|
+
/**
|
|
1200
|
+
* Boolean toggle built on `@radix-ui/react-switch`. Renders only the track +
|
|
1201
|
+
* thumb — wrap it in `<Field orientation="horizontal" label="…">` to add a
|
|
1202
|
+
* label, helper text, error, and aria wiring without duplicating that logic
|
|
1203
|
+
* inside every form control.
|
|
1204
|
+
*
|
|
1205
|
+
* @example Inside a Field (RHF + Zod)
|
|
1206
|
+
* ```tsx
|
|
1207
|
+
* <Field name="darkMode" label="Dark mode" orientation="horizontal">
|
|
1208
|
+
* <Switch />
|
|
1209
|
+
* </Field>
|
|
1210
|
+
* ```
|
|
1211
|
+
*
|
|
1212
|
+
* @example Bare in a settings list (custom layout)
|
|
1213
|
+
* ```tsx
|
|
1214
|
+
* <ul className="divide-y divide-border">
|
|
1215
|
+
* <li className="flex items-center justify-between py-3">
|
|
1216
|
+
* <span>Email digest</span>
|
|
1217
|
+
* <Switch checked={digest} onCheckedChange={setDigest} aria-label="Email digest" />
|
|
1218
|
+
* </li>
|
|
1219
|
+
* </ul>
|
|
1220
|
+
* ```
|
|
1221
|
+
*
|
|
1222
|
+
* @example Standalone controlled
|
|
1223
|
+
* ```tsx
|
|
1224
|
+
* <Switch
|
|
1225
|
+
* checked={enabled}
|
|
1226
|
+
* onCheckedChange={setEnabled}
|
|
1227
|
+
* aria-label="Enable notifications"
|
|
1228
|
+
* />
|
|
1229
|
+
* ```
|
|
1230
|
+
*/
|
|
1231
|
+
declare const Switch: react.ForwardRefExoticComponent<SwitchProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1232
|
+
|
|
828
1233
|
type TextareaVariant = 'default' | 'filled' | 'ghost';
|
|
829
1234
|
type TextareaSize = 'sm' | 'md' | 'lg';
|
|
830
1235
|
type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
|
|
@@ -868,4 +1273,4 @@ declare function useDirection(): Direction;
|
|
|
868
1273
|
|
|
869
1274
|
declare function cn(...inputs: ClassValue[]): string;
|
|
870
1275
|
|
|
871
|
-
export { AppShell, type AppShellBrand, type AppShellNavGroup, type AppShellNavItem, type AppShellProps, Avatar, type AvatarProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Checkbox, type CheckboxProps, type CheckboxSize, type Column, type ColumnAlign, DashboardContent, type DashboardContentProps, DashboardHeader, type DashboardHeaderProps, DashboardLayout, type DashboardLayoutContextValue, type DashboardLayoutProps, DashboardMain, type DashboardMainProps, type Direction, Field, type FieldOrientation, type FieldProps, type FieldRHFProps, HeaderActions, type HeaderActionsProps, HeaderCollapseTrigger, type HeaderCollapseTriggerProps, HeaderMobileTrigger, type HeaderMobileTriggerProps, HeaderSearch, type HeaderSearchProps, HeaderTitle, type HeaderTitleProps, Input, type InputProps, type InputSize, type InputVariant, type LanguageOption, LanguageSwitcher, type LanguageSwitcherProps, type PaginationState, RadioGroup, RadioGroupItem, type RadioGroupOption, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupSize, type RowSelectionState, Select, type SelectOption, type SelectProps, type SelectSize, type SelectVariant, Sidebar, SidebarFooter, type SidebarFooterProps, SidebarGroup, type SidebarGroupProps, SidebarHeader, type SidebarHeaderProps, SidebarNav, SidebarNavGroup, type SidebarNavGroupProps, SidebarNavItem, type SidebarNavItemProps, type SidebarNavItemRenderProps, type SidebarNavProps, type SidebarProps, type SortDirection, type SortState, type SortableValue, Switch, type SwitchProps, type SwitchSize, Table, type TableProps, type TableSize, type TableSizeClasses, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type TextareaVariant, buttonBaseClass, buttonSizeClass, buttonVariantClass, cn, inputBaseClass, inputSizeClass, inputVariantClass, radioGroupBaseClass, radioGroupOrientationClass, radioIndicatorBaseClass, radioIndicatorDotClass, radioIndicatorSizeClass, radioItemBaseClass, radioItemSizeClass, radioLabelSizeClass, radioOptionRowClass, selectBaseClass, selectSizeClass, selectVariantClass, switchThumbBaseClass, switchThumbClass, switchTrackBaseClass, switchTrackClass, alignClass as tableAlignClass, tableBaseClass, selectedRowClass as tableSelectedRowClass, tableSizeClass, sortIconClass as tableSortIconClass, textareaBaseClass, textareaResizeClass, textareaSizeClass, textareaVariantClass, useDashboardLayout, useDirection };
|
|
1276
|
+
export { AppShell, type AppShellBrand, type AppShellNavGroup, type AppShellNavItem, type AppShellProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BadgeSize, type BadgeVariant, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Checkbox, type CheckboxProps, type CheckboxSize, type Column, type ColumnAlign, DashboardContent, type DashboardContentProps, DashboardHeader, type DashboardHeaderProps, DashboardLayout, type DashboardLayoutContextValue, type DashboardLayoutProps, DashboardMain, type DashboardMainProps, type Direction, DropdownMenu, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, type DropdownMenuItemVariant, DropdownMenuLabel, type DropdownMenuLabelProps, DropdownMenuPortal, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuShortcut, type DropdownMenuShortcutProps, DropdownMenuTrigger, EmptyState, type EmptyStateProps, type EmptyStateSize, Field, type FieldOrientation, type FieldProps, type FieldRHFProps, HeaderActions, type HeaderActionsProps, HeaderCollapseTrigger, type HeaderCollapseTriggerProps, HeaderMobileTrigger, type HeaderMobileTriggerProps, HeaderSearch, type HeaderSearchProps, HeaderTitle, type HeaderTitleProps, Input, type InputProps, type InputSize, type InputVariant, type LanguageOption, LanguageSwitcher, type LanguageSwitcherProps, ListPage, type ListPageEmptyState, type ListPageFilter, type ListPageLabels, type ListPageProps, PageHeader, type PageHeaderBackProps, type PageHeaderBackRenderProps, type PageHeaderHeadingLevel, type PageHeaderProps, type PaginationState, RadioGroup, RadioGroupItem, type RadioGroupOption, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupSize, type RowSelectionState, Select, type SelectOption, type SelectProps, type SelectSize, type SelectVariant, Sidebar, SidebarFooter, type SidebarFooterProps, SidebarGroup, type SidebarGroupProps, SidebarHeader, type SidebarHeaderProps, SidebarNav, SidebarNavGroup, type SidebarNavGroupProps, SidebarNavItem, type SidebarNavItemProps, type SidebarNavItemRenderProps, type SidebarNavProps, type SidebarProps, type SortDirection, type SortState, type SortableValue, Switch, type SwitchProps, type SwitchSize, Table, type TableProps, type TableSize, type TableSizeClasses, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type TextareaVariant, badgeBaseClass, badgeDotSizeClass, badgeSizeClass, badgeVariantClass, buttonBaseClass, buttonSizeClass, buttonVariantClass, cn, dropdownMenuContentClass, dropdownMenuItemBaseClass, dropdownMenuItemInsetClass, dropdownMenuItemVariantClass, dropdownMenuLabelClass, dropdownMenuSeparatorClass, dropdownMenuShortcutClass, emptyStateActionsSpacingClass, emptyStateBaseClass, emptyStateContainerSizeClass, emptyStateDescriptionSizeClass, emptyStateIconWrapperBaseClass, emptyStateIconWrapperSizeClass, emptyStateTitleSizeClass, inputBaseClass, inputSizeClass, inputVariantClass, pageHeaderActionsClass, pageHeaderBackClass, pageHeaderBackIconClass, pageHeaderBaseClass, pageHeaderBorderedClass, pageHeaderBreadcrumbsClass, pageHeaderDescriptionClass, pageHeaderTitleBlockClass, pageHeaderTitleClass, pageHeaderTitleRowClass, radioGroupBaseClass, radioGroupOrientationClass, radioIndicatorBaseClass, radioIndicatorDotClass, radioIndicatorSizeClass, radioItemBaseClass, radioItemSizeClass, radioLabelSizeClass, radioOptionRowClass, selectBaseClass, selectSizeClass, selectVariantClass, switchThumbBaseClass, switchThumbClass, switchTrackBaseClass, switchTrackClass, alignClass as tableAlignClass, tableBaseClass, selectedRowClass as tableSelectedRowClass, tableSizeClass, sortIconClass as tableSortIconClass, textareaBaseClass, textareaResizeClass, textareaSizeClass, textareaVariantClass, useDashboardLayout, useDirection };
|