@xex/ui 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/README.md +12 -2
- package/dist/chunk-3M3PAPT3.js +215 -0
- package/dist/font-picker.d.ts +16 -0
- package/dist/font-picker.js +325 -0
- package/dist/index.d.ts +390 -0
- package/dist/index.js +1458 -0
- package/package.json +64 -4
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ButtonHTMLAttributes, ReactNode, SelectHTMLAttributes, InputHTMLAttributes, KeyboardEvent, RefObject, ComponentType, SVGProps } from 'react';
|
|
3
|
+
import { Theme, FontChoice } from '@xex/tokens';
|
|
4
|
+
|
|
5
|
+
type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'outline';
|
|
6
|
+
type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
7
|
+
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
8
|
+
variant?: ButtonVariant;
|
|
9
|
+
size?: ButtonSize;
|
|
10
|
+
loading?: boolean;
|
|
11
|
+
icon?: ReactNode;
|
|
12
|
+
iconRight?: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
declare function Button({ variant, size, loading, icon, iconRight, disabled, className, children, type, ...rest }: ButtonProps): react.JSX.Element;
|
|
15
|
+
|
|
16
|
+
type BadgeVariant = 'default' | 'success' | 'warning' | 'danger' | 'info' | 'purple' | 'gray';
|
|
17
|
+
interface BadgeProps {
|
|
18
|
+
variant?: BadgeVariant;
|
|
19
|
+
dot?: boolean;
|
|
20
|
+
className?: string;
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
}
|
|
23
|
+
declare function Badge({ variant, dot, className, children }: BadgeProps): react.JSX.Element;
|
|
24
|
+
|
|
25
|
+
type ModalSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
26
|
+
interface ModalProps {
|
|
27
|
+
open: boolean;
|
|
28
|
+
onClose: () => void;
|
|
29
|
+
title?: ReactNode;
|
|
30
|
+
footer?: ReactNode;
|
|
31
|
+
size?: ModalSize;
|
|
32
|
+
/** Accessible name when there is no visible `title`. */
|
|
33
|
+
ariaLabel?: string;
|
|
34
|
+
children: ReactNode;
|
|
35
|
+
}
|
|
36
|
+
declare function Modal({ open, onClose, title, footer, size, ariaLabel, children }: ModalProps): react.JSX.Element | null;
|
|
37
|
+
|
|
38
|
+
interface ConfirmDialogProps {
|
|
39
|
+
open: boolean;
|
|
40
|
+
title: string;
|
|
41
|
+
message: string;
|
|
42
|
+
confirmLabel?: string;
|
|
43
|
+
cancelLabel?: string;
|
|
44
|
+
loading?: boolean;
|
|
45
|
+
onConfirm: () => void;
|
|
46
|
+
onCancel: () => void;
|
|
47
|
+
}
|
|
48
|
+
declare function ConfirmDialog({ open, title, message, confirmLabel, cancelLabel, loading, onConfirm, onCancel, }: ConfirmDialogProps): react.JSX.Element;
|
|
49
|
+
|
|
50
|
+
interface SelectOption {
|
|
51
|
+
value: string | number;
|
|
52
|
+
label: string;
|
|
53
|
+
}
|
|
54
|
+
interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'children'> {
|
|
55
|
+
label?: string;
|
|
56
|
+
options: SelectOption[];
|
|
57
|
+
/** Renders a blank first option with this text. */
|
|
58
|
+
placeholder?: string;
|
|
59
|
+
error?: string;
|
|
60
|
+
hint?: string;
|
|
61
|
+
}
|
|
62
|
+
declare function Select({ label, options, placeholder, error, hint, className, id, disabled, ...rest }: SelectProps): react.JSX.Element;
|
|
63
|
+
|
|
64
|
+
interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
|
|
65
|
+
label?: string;
|
|
66
|
+
error?: string;
|
|
67
|
+
hint?: string;
|
|
68
|
+
/** Leading icon, absolutely positioned inside the field. */
|
|
69
|
+
icon?: ReactNode;
|
|
70
|
+
}
|
|
71
|
+
declare function Input({ label, error, hint, icon, className, id, ...rest }: InputProps): react.JSX.Element;
|
|
72
|
+
|
|
73
|
+
type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
74
|
+
/** Rotating palette, deliberately independent of the brand theme. */
|
|
75
|
+
declare const AVATAR_COLORS: string[];
|
|
76
|
+
declare function initialsOf(name: string): string;
|
|
77
|
+
declare function colorFor(seed: string): string;
|
|
78
|
+
interface AvatarProps {
|
|
79
|
+
name: string;
|
|
80
|
+
size?: AvatarSize;
|
|
81
|
+
/** Any hex; defaults to a stable color derived from the name. */
|
|
82
|
+
color?: string;
|
|
83
|
+
className?: string;
|
|
84
|
+
}
|
|
85
|
+
declare function Avatar({ name, size, color, className }: AvatarProps): react.JSX.Element;
|
|
86
|
+
|
|
87
|
+
interface PaginationBarProps {
|
|
88
|
+
page: number;
|
|
89
|
+
totalPages: number;
|
|
90
|
+
total: number;
|
|
91
|
+
pageSize: number;
|
|
92
|
+
onPageChange: (page: number) => void;
|
|
93
|
+
pageSizeOptions?: number[];
|
|
94
|
+
onPageSizeChange?: (size: number) => void;
|
|
95
|
+
/**
|
|
96
|
+
* Where the bar sits relative to its table: 'above' / 'below' draw only the edge facing the
|
|
97
|
+
* table (so two bars can share one table); the default draws both edges.
|
|
98
|
+
*/
|
|
99
|
+
placement?: 'above' | 'below';
|
|
100
|
+
/** Extra controls on the right (e.g. a density toggle), divided by a "|". */
|
|
101
|
+
right?: ReactNode;
|
|
102
|
+
}
|
|
103
|
+
/** 1 … 4 5 [6] 7 8 … 20 — null entries are ellipses. */
|
|
104
|
+
declare function pageWindow(page: number, totalPages: number): (number | null)[];
|
|
105
|
+
declare function PaginationBar({ page, totalPages, total, pageSize, onPageChange, pageSizeOptions, onPageSizeChange, right, placement, }: PaginationBarProps): react.JSX.Element;
|
|
106
|
+
|
|
107
|
+
/** Three staggered fading dots; inherits currentColor. Animation lives in index.css. */
|
|
108
|
+
declare function LoadingDots({ className }: {
|
|
109
|
+
className?: string;
|
|
110
|
+
}): react.JSX.Element;
|
|
111
|
+
|
|
112
|
+
interface SegmentedOption<T extends string> {
|
|
113
|
+
value: T;
|
|
114
|
+
label: string;
|
|
115
|
+
}
|
|
116
|
+
interface SegmentedControlProps<T extends string> {
|
|
117
|
+
options: SegmentedOption<T>[];
|
|
118
|
+
value: T;
|
|
119
|
+
onChange: (value: T) => void;
|
|
120
|
+
/** Accessible name for the group, e.g. "Row density". */
|
|
121
|
+
label: string;
|
|
122
|
+
className?: string;
|
|
123
|
+
}
|
|
124
|
+
/** Mutually exclusive options shown side by side, with the active one raised. Arrow keys move the choice. */
|
|
125
|
+
declare function SegmentedControl<T extends string>({ options, value, onChange, label, className }: SegmentedControlProps<T>): react.JSX.Element;
|
|
126
|
+
|
|
127
|
+
interface DataTableColumn<T> {
|
|
128
|
+
id: string;
|
|
129
|
+
header: string;
|
|
130
|
+
/** Plain value used for sorting, searching and filtering. */
|
|
131
|
+
accessor: (row: T) => string | number;
|
|
132
|
+
/** Custom cell content; defaults to the accessor's value. `dense` mirrors the density toggle. */
|
|
133
|
+
cell?: (row: T, ctx: {
|
|
134
|
+
dense: boolean;
|
|
135
|
+
}) => ReactNode;
|
|
136
|
+
/** Click-to-sort header. Default: true. */
|
|
137
|
+
sortable?: boolean;
|
|
138
|
+
/** Adds a multi-select dropdown listing this column's distinct values (OR within a column, AND across columns). Default: false. */
|
|
139
|
+
filter?: boolean;
|
|
140
|
+
/** Placeholder for that dropdown, e.g. "All roles". */
|
|
141
|
+
filterLabel?: string;
|
|
142
|
+
align?: 'left' | 'right';
|
|
143
|
+
/** Default width as a relative weight (a column with 2 starts twice as wide as one with 1). Default: 1. */
|
|
144
|
+
width?: number;
|
|
145
|
+
}
|
|
146
|
+
interface DataTableProps<T> {
|
|
147
|
+
columns: DataTableColumn<T>[];
|
|
148
|
+
rows: T[];
|
|
149
|
+
rowKey: (row: T) => string | number;
|
|
150
|
+
/** Accessible name for the table. */
|
|
151
|
+
label: string;
|
|
152
|
+
/** Search box (matches any column). Default: true. */
|
|
153
|
+
searchable?: boolean;
|
|
154
|
+
searchPlaceholder?: string;
|
|
155
|
+
pageSizeOptions?: number[];
|
|
156
|
+
defaultPageSize?: number;
|
|
157
|
+
initialSort?: {
|
|
158
|
+
columnId: string;
|
|
159
|
+
direction: 'asc' | 'desc';
|
|
160
|
+
};
|
|
161
|
+
emptyMessage?: string;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Standard table: click-to-sort headers, global search, per-column dropdown filters,
|
|
165
|
+
* pagination (above and below) and a density toggle. Switch parts off per column or via props.
|
|
166
|
+
*/
|
|
167
|
+
declare function DataTable<T>({ columns, rows, rowKey, label, searchable, searchPlaceholder, pageSizeOptions, defaultPageSize, initialSort, emptyMessage, }: DataTableProps<T>): react.JSX.Element;
|
|
168
|
+
|
|
169
|
+
interface MultiSelectOption {
|
|
170
|
+
value: string;
|
|
171
|
+
label: string;
|
|
172
|
+
/** Optional count shown beside the label. */
|
|
173
|
+
count?: number;
|
|
174
|
+
}
|
|
175
|
+
interface MultiSelectProps {
|
|
176
|
+
options: MultiSelectOption[];
|
|
177
|
+
value: string[];
|
|
178
|
+
onChange: (value: string[]) => void;
|
|
179
|
+
/** Text shown (and used as the accessible name) when nothing is selected, e.g. "All roles". */
|
|
180
|
+
label: string;
|
|
181
|
+
className?: string;
|
|
182
|
+
}
|
|
183
|
+
/** Dropdown with a checkbox per option. Esc / outside click / tabbing away closes it. */
|
|
184
|
+
declare function MultiSelect({ options, value, onChange, label, className }: MultiSelectProps): react.JSX.Element;
|
|
185
|
+
|
|
186
|
+
type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
187
|
+
interface SpinnerProps {
|
|
188
|
+
size?: SpinnerSize;
|
|
189
|
+
/** Accessible name; ignored when `decorative`. */
|
|
190
|
+
label?: string;
|
|
191
|
+
/** Hide from assistive tech (use when the surrounding text already says "loading"). */
|
|
192
|
+
decorative?: boolean;
|
|
193
|
+
className?: string;
|
|
194
|
+
}
|
|
195
|
+
/** Rotating ring. Inherits currentColor, so colour it with a text-* class. */
|
|
196
|
+
declare function Spinner({ size, label, decorative, className }: SpinnerProps): react.JSX.Element;
|
|
197
|
+
|
|
198
|
+
type ProgressTone = 'brand' | 'success' | 'warning' | 'danger';
|
|
199
|
+
declare const heights: {
|
|
200
|
+
sm: string;
|
|
201
|
+
md: string;
|
|
202
|
+
lg: string;
|
|
203
|
+
};
|
|
204
|
+
interface ProgressBarProps {
|
|
205
|
+
/** 0–100. Omit for an indeterminate ("working, no idea how long") bar. */
|
|
206
|
+
value?: number;
|
|
207
|
+
/** Accessible name (also shown above the bar when `showLabel`). */
|
|
208
|
+
label: string;
|
|
209
|
+
showLabel?: boolean;
|
|
210
|
+
tone?: ProgressTone;
|
|
211
|
+
size?: keyof typeof heights;
|
|
212
|
+
className?: string;
|
|
213
|
+
}
|
|
214
|
+
declare function ProgressBar({ value, label, showLabel, tone, size, className }: ProgressBarProps): react.JSX.Element;
|
|
215
|
+
interface ProgressRingProps {
|
|
216
|
+
/** 0–100. Omit for an indeterminate spinning arc. */
|
|
217
|
+
value?: number;
|
|
218
|
+
label: string;
|
|
219
|
+
/** Diameter in px. */
|
|
220
|
+
size?: number;
|
|
221
|
+
tone?: ProgressTone;
|
|
222
|
+
/** Show the percentage in the middle (determinate only). */
|
|
223
|
+
showValue?: boolean;
|
|
224
|
+
}
|
|
225
|
+
declare function ProgressRing({ value, label, size, tone, showValue }: ProgressRingProps): react.JSX.Element;
|
|
226
|
+
|
|
227
|
+
interface SkeletonProps {
|
|
228
|
+
shape?: 'text' | 'circle' | 'rect';
|
|
229
|
+
/** Size via Tailwind classes, e.g. "h-10 w-10". Text defaults to a full-width line. */
|
|
230
|
+
className?: string;
|
|
231
|
+
}
|
|
232
|
+
/** Grey placeholder block that pulses. Decorative: put `aria-busy` on the region being loaded. */
|
|
233
|
+
declare function Skeleton({ shape, className }: SkeletonProps): react.JSX.Element;
|
|
234
|
+
/** A paragraph of skeleton lines; the last one is shorter. */
|
|
235
|
+
declare function SkeletonText({ lines, className }: {
|
|
236
|
+
lines?: number;
|
|
237
|
+
className?: string;
|
|
238
|
+
}): react.JSX.Element;
|
|
239
|
+
|
|
240
|
+
interface LoadingOverlayProps {
|
|
241
|
+
loading: boolean;
|
|
242
|
+
/** Shown beside the spinner and used as its accessible name. */
|
|
243
|
+
label?: string;
|
|
244
|
+
children: ReactNode;
|
|
245
|
+
className?: string;
|
|
246
|
+
}
|
|
247
|
+
/** Dims and blocks its content while loading, with a centred spinner. Content stays mounted. */
|
|
248
|
+
declare function LoadingOverlay({ loading, label, children, className }: LoadingOverlayProps): react.JSX.Element;
|
|
249
|
+
|
|
250
|
+
type FetchState = 'idle' | 'loading' | 'success' | 'error';
|
|
251
|
+
interface FetchStatusProps {
|
|
252
|
+
state: FetchState;
|
|
253
|
+
/** Override the default message for any state. */
|
|
254
|
+
messages?: Partial<Record<FetchState, string>>;
|
|
255
|
+
onRetry?: () => void;
|
|
256
|
+
}
|
|
257
|
+
/** One-line status for a data request: idle → loading → success | error (with retry). Announced politely. */
|
|
258
|
+
declare function FetchStatus({ state, messages, onRetry }: FetchStatusProps): react.JSX.Element;
|
|
259
|
+
|
|
260
|
+
interface TabItem {
|
|
261
|
+
id: string;
|
|
262
|
+
label: ReactNode;
|
|
263
|
+
icon?: ReactNode;
|
|
264
|
+
/** Small trailing count or tag, e.g. 12. */
|
|
265
|
+
badge?: ReactNode;
|
|
266
|
+
disabled?: boolean;
|
|
267
|
+
/** Panel content. Omit if you render panels yourself and only use the tab strip. */
|
|
268
|
+
content?: ReactNode;
|
|
269
|
+
}
|
|
270
|
+
interface TabsProps {
|
|
271
|
+
items: TabItem[];
|
|
272
|
+
/** Controlled selection. Pair with `onChange`. */
|
|
273
|
+
value?: string;
|
|
274
|
+
/** Initial selection when uncontrolled. Defaults to the first enabled tab. */
|
|
275
|
+
defaultValue?: string;
|
|
276
|
+
onChange?: (id: string) => void;
|
|
277
|
+
/** `underline` (default) slides a line under the active tab; `pills` fills it. */
|
|
278
|
+
variant?: 'underline' | 'pills';
|
|
279
|
+
size?: 'sm' | 'md';
|
|
280
|
+
/** `auto`: arrow keys select as they move focus. `manual`: arrows only move focus; Enter/Space select. */
|
|
281
|
+
activation?: 'auto' | 'manual';
|
|
282
|
+
/** Keep inactive panels mounted (hidden) so their state survives switching. Default: unmount. */
|
|
283
|
+
keepMounted?: boolean;
|
|
284
|
+
/** Stretch tabs to share the full width. */
|
|
285
|
+
fullWidth?: boolean;
|
|
286
|
+
/** Accessible name for the tab list. */
|
|
287
|
+
label: string;
|
|
288
|
+
className?: string;
|
|
289
|
+
}
|
|
290
|
+
declare function Tabs({ items, value, defaultValue, onChange, variant, size, activation, keepMounted, fullWidth, label, className, }: TabsProps): react.JSX.Element;
|
|
291
|
+
|
|
292
|
+
declare const focusablesIn: (root: HTMLElement) => HTMLElement[];
|
|
293
|
+
/**
|
|
294
|
+
* Keyboard handling for a `role="radiogroup"` container: arrows (and Home/End)
|
|
295
|
+
* move focus AND selection, wrapping at the ends. Pair with roving tabindex on
|
|
296
|
+
* the items (`tabIndex={selected ? 0 : -1}`) so the group is a single Tab stop.
|
|
297
|
+
*/
|
|
298
|
+
declare function radioGroupKeyDown(e: KeyboardEvent<HTMLElement>): void;
|
|
299
|
+
/**
|
|
300
|
+
* Dialog focus management: scroll lock, move focus in on open, restore it to the
|
|
301
|
+
* opener on close, and a Tab trap. Spread the returned handler on the panel.
|
|
302
|
+
*/
|
|
303
|
+
declare function useDialogFocus(open: boolean, panelRef: RefObject<HTMLElement | null>, options?: {
|
|
304
|
+
initialFocus?: () => HTMLElement | null | undefined;
|
|
305
|
+
lockScroll?: boolean;
|
|
306
|
+
}): (e: KeyboardEvent<HTMLElement>) => void;
|
|
307
|
+
|
|
308
|
+
interface HeaderProps {
|
|
309
|
+
title: string;
|
|
310
|
+
subtitle?: string;
|
|
311
|
+
actions?: ReactNode;
|
|
312
|
+
/** Opens the navigation drawer; the button only shows below lg. */
|
|
313
|
+
onMenu?: () => void;
|
|
314
|
+
}
|
|
315
|
+
declare function Header({ title, subtitle, actions, onMenu }: HeaderProps): react.JSX.Element;
|
|
316
|
+
|
|
317
|
+
/** One entry in a page's "On this page" guide. */
|
|
318
|
+
interface PageSection {
|
|
319
|
+
id: string;
|
|
320
|
+
label: string;
|
|
321
|
+
}
|
|
322
|
+
declare function Section({ id, title, description, children }: {
|
|
323
|
+
id: string;
|
|
324
|
+
title: string;
|
|
325
|
+
description?: string;
|
|
326
|
+
children: ReactNode;
|
|
327
|
+
}): react.JSX.Element;
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Floating "On this page" guide (xl+ only). The marker's position is a continuous function of
|
|
331
|
+
* the page's scroll position, so it glides with the page instead of hopping between items.
|
|
332
|
+
* The rail itself is a pointer scrubber: press or drag it to scroll the page. It is hidden from
|
|
333
|
+
* assistive tech and the tab order; the links below it are the keyboard / screen-reader route.
|
|
334
|
+
*/
|
|
335
|
+
declare function PageGuide({ sections }: {
|
|
336
|
+
sections: PageSection[];
|
|
337
|
+
}): react.JSX.Element;
|
|
338
|
+
|
|
339
|
+
interface NavEntry {
|
|
340
|
+
id: string;
|
|
341
|
+
label: string;
|
|
342
|
+
icon: ComponentType<SVGProps<SVGSVGElement>>;
|
|
343
|
+
}
|
|
344
|
+
interface SidebarProps {
|
|
345
|
+
items: NavEntry[];
|
|
346
|
+
active: string;
|
|
347
|
+
onSelect: (id: string) => void;
|
|
348
|
+
/** Mobile drawer state; ignored at lg+, where the sidebar is always visible. */
|
|
349
|
+
open: boolean;
|
|
350
|
+
onClose: () => void;
|
|
351
|
+
}
|
|
352
|
+
/** App navigation: persistent at lg+, slide-over drawer below. */
|
|
353
|
+
declare function Sidebar({ items, active, onSelect, open, onClose }: SidebarProps): react.JSX.Element;
|
|
354
|
+
|
|
355
|
+
type ColorMode = 'light' | 'dark';
|
|
356
|
+
interface ThemeContextValue {
|
|
357
|
+
theme: Theme;
|
|
358
|
+
themes: Theme[];
|
|
359
|
+
setThemeId: (id: string) => void;
|
|
360
|
+
mode: ColorMode;
|
|
361
|
+
setMode: (mode: ColorMode) => void;
|
|
362
|
+
toggleMode: () => void;
|
|
363
|
+
font: FontChoice;
|
|
364
|
+
/** Most recently used fonts, newest first (max 5). */
|
|
365
|
+
recentFonts: FontChoice[];
|
|
366
|
+
setFont: (font: FontChoice) => void;
|
|
367
|
+
}
|
|
368
|
+
interface ThemeProviderProps {
|
|
369
|
+
children: ReactNode;
|
|
370
|
+
/**
|
|
371
|
+
* Prefix for the localStorage keys (`<prefix>-theme`, `<prefix>-mode`, `<prefix>-font`, …).
|
|
372
|
+
* Give every app its own prefix: apps on one domain would otherwise overwrite each other's choices.
|
|
373
|
+
*/
|
|
374
|
+
storagePrefix?: string;
|
|
375
|
+
/** Themes to offer. Defaults to the built-in XeX presets. */
|
|
376
|
+
themes?: Theme[];
|
|
377
|
+
/** Theme used until the user picks one. */
|
|
378
|
+
defaultThemeId?: string;
|
|
379
|
+
/** Font used until the user picks one. */
|
|
380
|
+
defaultFont?: FontChoice;
|
|
381
|
+
}
|
|
382
|
+
declare function ThemeProvider({ children, storagePrefix, themes, defaultThemeId, defaultFont, }: ThemeProviderProps): react.JSX.Element;
|
|
383
|
+
declare function useTheme(): ThemeContextValue;
|
|
384
|
+
|
|
385
|
+
/** Swatch per theme + light/dark toggle. */
|
|
386
|
+
declare function ThemeSwitcher({ showLabels }: {
|
|
387
|
+
showLabels?: boolean;
|
|
388
|
+
}): react.JSX.Element;
|
|
389
|
+
|
|
390
|
+
export { AVATAR_COLORS, Avatar, type AvatarProps, type AvatarSize, Badge, type BadgeProps, type BadgeVariant, Button, type ButtonProps, type ButtonSize, type ButtonVariant, type ColorMode, ConfirmDialog, type ConfirmDialogProps, DataTable, type DataTableColumn, type DataTableProps, type FetchState, FetchStatus, type FetchStatusProps, Header, Input, type InputProps, LoadingDots, LoadingOverlay, type LoadingOverlayProps, Modal, type ModalProps, type ModalSize, MultiSelect, type MultiSelectOption, type MultiSelectProps, type NavEntry, PageGuide, type PageSection, PaginationBar, type PaginationBarProps, ProgressBar, type ProgressBarProps, ProgressRing, type ProgressRingProps, type ProgressTone, Section, SegmentedControl, type SegmentedControlProps, type SegmentedOption, Select, type SelectOption, type SelectProps, Sidebar, Skeleton, type SkeletonProps, SkeletonText, Spinner, type SpinnerProps, type SpinnerSize, type TabItem, Tabs, type TabsProps, type ThemeContextValue, ThemeProvider, type ThemeProviderProps, ThemeSwitcher, colorFor, focusablesIn, initialsOf, pageWindow, radioGroupKeyDown, useDialogFocus, useTheme };
|