@mirror-physics/fractal-ui 0.2.0-next.6 → 0.2.0-next.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { ReactNode } from 'react';
2
+ import { HTMLAttributes, ReactNode, CSSProperties } from 'react';
3
3
  import { ClassValue } from 'clsx';
4
4
 
5
5
  type ButtonType = 'primary' | 'secondary' | 'ghost' | 'danger';
@@ -21,6 +21,48 @@ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
21
21
  }
22
22
  declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
23
23
 
24
+ interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onChange'> {
25
+ /** Code or structured text displayed by the component. */
26
+ value: string;
27
+ /** Language name or common alias, such as `json`, `typescript`, `python`, or `bash`. */
28
+ language?: string;
29
+ /** Optional file name. Used for display and language detection when `language` is omitted. */
30
+ fileName?: string;
31
+ /** Optional title shown in the toolbar. */
32
+ label?: ReactNode;
33
+ /** Enables editing. Read-only viewer mode is the default. */
34
+ editable?: boolean;
35
+ /** Called when an editable block changes. */
36
+ onChange?: (value: string) => void;
37
+ /** Shows line numbers and a fold gutter. */
38
+ lineNumbers?: boolean;
39
+ /** Wraps long lines instead of requiring horizontal scrolling. */
40
+ wrap?: boolean;
41
+ /** Shows a copy action in the toolbar. */
42
+ copyable?: boolean;
43
+ /** Accessible name for the editing or viewing surface. */
44
+ ariaLabel?: string;
45
+ /** CodeMirror height constraints. Any valid CSS length is accepted. */
46
+ height?: string;
47
+ minHeight?: string;
48
+ maxHeight?: string;
49
+ placeholder?: string;
50
+ autoFocus?: boolean;
51
+ }
52
+ declare function CodeBlock({ value, language, fileName, label, editable, onChange, lineNumbers, wrap, copyable, ariaLabel, height, minHeight, maxHeight, placeholder, autoFocus, className, ...props }: CodeBlockProps): React.JSX.Element;
53
+
54
+ interface BreadcrumbItem {
55
+ label: React.ReactNode;
56
+ href?: string;
57
+ onClick?: React.MouseEventHandler<HTMLAnchorElement>;
58
+ }
59
+ interface BreadcrumbsProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
60
+ items: BreadcrumbItem[];
61
+ ariaLabel?: string;
62
+ separator?: React.ReactNode;
63
+ }
64
+ declare function Breadcrumbs({ items, ariaLabel, separator, className, ...props }: BreadcrumbsProps): React.JSX.Element | null;
65
+
24
66
  declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
25
67
  declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
26
68
  declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLHeadingElement>>;
@@ -60,6 +102,25 @@ interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
60
102
  }
61
103
  declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
62
104
 
105
+ type TableSearchType = 'text' | 'glob';
106
+ interface TableSearchProps extends Omit<InputProps, 'type'> {
107
+ /** Controls the search affordance. Filtering remains controlled by the table's data owner. */
108
+ searchType?: TableSearchType;
109
+ inputClassName?: string;
110
+ }
111
+ declare const TableSearch: React.ForwardRefExoticComponent<TableSearchProps & React.RefAttributes<HTMLInputElement>>;
112
+
113
+ interface NumberInputProps extends Omit<InputProps, 'type'> {
114
+ unit?: string;
115
+ }
116
+ declare function NumberInput({ unit, className, value, defaultValue, disabled, readOnly, min, max, ...props }: NumberInputProps): React.JSX.Element;
117
+
118
+ interface PasswordInputProps extends Omit<InputProps, 'type'> {
119
+ showPasswordLabel?: string;
120
+ hidePasswordLabel?: string;
121
+ }
122
+ declare const PasswordInput: React.ForwardRefExoticComponent<PasswordInputProps & React.RefAttributes<HTMLInputElement>>;
123
+
63
124
  interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {
64
125
  }
65
126
  declare const Label: React.ForwardRefExoticComponent<LabelProps & React.RefAttributes<HTMLLabelElement>>;
@@ -94,11 +155,18 @@ interface ModalProps {
94
155
  footer?: React.ReactNode;
95
156
  /** When true, prevents closing via overlay click or Escape. */
96
157
  noClose?: boolean;
158
+ /** Keeps the close control visible but disables every dismissal route. */
159
+ closeDisabled?: boolean;
97
160
  /** Modal width: 'sm' (420px), 'md' (756px), 'lg' (near-fullscreen). */
98
161
  size?: 'sm' | 'md' | 'lg';
162
+ /** Replaces the body with a whole-surface loading state while retaining the modal chrome. */
163
+ loading?: boolean;
164
+ loadingLabel?: string;
165
+ /** Constrains the modal to the viewport, scrolls the body, and separates the fixed footer with a full-width divider. */
166
+ scrollable?: boolean;
99
167
  className?: string;
100
168
  }
101
- declare function Modal({ open, onClose, title, children, danger, warn, footer, noClose, size, className }: ModalProps): React.ReactPortal | null;
169
+ declare function Modal({ open, onClose, title, children, danger, warn, footer, noClose, closeDisabled, size, loading, loadingLabel, scrollable, className }: ModalProps): React.ReactPortal | null;
102
170
 
103
171
  interface DataTableColumn<T> {
104
172
  key: string;
@@ -129,10 +197,14 @@ interface DropdownProps {
129
197
  selectedValue: string;
130
198
  onSelect: (value: string) => void;
131
199
  triggerLabel?: string;
132
- direction?: 'up' | 'down';
200
+ direction?: 'up' | 'down' | 'left' | 'right';
133
201
  align?: 'left' | 'right';
202
+ /** Arranges the trigger content vertically without rotating the dropdown panel. */
203
+ triggerOrientation?: 'horizontal' | 'vertical';
134
204
  triggerContent?: React.ReactNode;
135
205
  label?: React.ReactNode;
206
+ /** Renders the trigger as a square icon button. Requires an accessible triggerLabel. */
207
+ iconOnly?: boolean;
136
208
  noChevron?: boolean;
137
209
  size?: 'sm' | 'md';
138
210
  triggerVariant?: 'outline' | 'tertiary';
@@ -140,8 +212,9 @@ interface DropdownProps {
140
212
  triggerClassName?: string;
141
213
  panelClassName?: string;
142
214
  closeOnSelect?: boolean;
215
+ disabled?: boolean;
143
216
  }
144
- declare function Dropdown({ items, selectedValue, onSelect, triggerLabel, direction, align, triggerContent, label, noChevron, size, triggerVariant, className, triggerClassName, panelClassName, closeOnSelect, }: DropdownProps): React.JSX.Element | null;
217
+ declare function Dropdown({ items, selectedValue, onSelect, triggerLabel, direction, align, triggerOrientation, triggerContent, label, iconOnly, noChevron, size, triggerVariant, className, triggerClassName, panelClassName, closeOnSelect, disabled, }: DropdownProps): React.JSX.Element | null;
145
218
 
146
219
  type LinkTheme = 'default' | 'muted' | 'accent';
147
220
  type LinkSize = 'sm' | 'md' | 'lg';
@@ -157,7 +230,18 @@ interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {
157
230
  }
158
231
  declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLSpanElement>>;
159
232
 
233
+ interface CheckboxProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {
234
+ checked: boolean;
235
+ indeterminate?: boolean;
236
+ onCheckedChange: (checked: boolean) => void;
237
+ }
238
+ declare function Checkbox({ checked, indeterminate, onCheckedChange, className, disabled, onClick, onKeyDown, ...props }: CheckboxProps): React.JSX.Element;
239
+
160
240
  type SortDirection = 'asc' | 'desc' | null;
241
+ interface SortableTableDefaultSort {
242
+ key: string;
243
+ direction: Exclude<SortDirection, null>;
244
+ }
161
245
  interface SortableTableColumn<T> {
162
246
  key: string;
163
247
  header: string;
@@ -167,23 +251,43 @@ interface SortableTableColumn<T> {
167
251
  render: (row: T, index: number) => ReactNode;
168
252
  align?: 'left' | 'right';
169
253
  }
254
+ interface SortableTableRowAction<T> {
255
+ label: (row: T, index: number) => string;
256
+ icon: (row: T, index: number) => ReactNode;
257
+ }
258
+ interface SortableTablePagination {
259
+ page: number;
260
+ pageSize: number;
261
+ }
170
262
  interface SortableTableProps<T> {
171
263
  columns: SortableTableColumn<T>[];
172
264
  data: T[];
173
265
  emptyMessage?: string;
174
266
  header?: ReactNode;
175
267
  size?: 'sm' | 'md' | 'lg';
268
+ /** Removes the table's outer border and radius for use inside another framed surface. */
269
+ embedded?: boolean;
176
270
  className?: string;
271
+ /** Required baseline row ordering that does not appear as an active user sort. */
272
+ defaultSort: SortableTableDefaultSort;
273
+ /** Initial visible user sort state. */
177
274
  defaultSortKey?: string;
178
275
  defaultSortDirection?: SortDirection;
179
276
  sortKey?: string | null;
180
277
  sortDirection?: SortDirection;
181
278
  onSortChange?: (key: string | null, direction: SortDirection) => void;
279
+ /**
280
+ * Slices the globally sorted dataset for display. Always pass the complete
281
+ * filtered dataset in `data`; sorting is applied before pagination.
282
+ */
283
+ pagination?: SortableTablePagination;
182
284
  highlightRow?: (row: T, index: number) => boolean;
183
285
  /** Invoked when a row is selected. Enables pointer and keyboard row activation. */
184
286
  onRowClick?: (row: T, index: number) => void;
287
+ /** Directional affordance displayed over the right edge of an interactive row. */
288
+ rowAction?: SortableTableRowAction<T>;
185
289
  }
186
- declare function SortableTable<T>({ columns, data, emptyMessage, header, size, className, defaultSortKey, defaultSortDirection, sortKey: controlledKey, sortDirection: controlledDirection, onSortChange, highlightRow, onRowClick, }: SortableTableProps<T>): React.JSX.Element;
290
+ declare function SortableTable<T>({ columns, data, emptyMessage, header, size, embedded, className, defaultSort, defaultSortKey, defaultSortDirection, sortKey: controlledKey, sortDirection: controlledDirection, onSortChange, pagination, highlightRow, onRowClick, rowAction, }: SortableTableProps<T>): React.JSX.Element;
187
291
 
188
292
  interface TabItem {
189
293
  id: string;
@@ -191,6 +295,7 @@ interface TabItem {
191
295
  content: ReactNode;
192
296
  disabled?: boolean;
193
297
  }
298
+ type TabsVariant = 'line' | 'surface';
194
299
  interface TabsProps {
195
300
  items: TabItem[];
196
301
  defaultValue?: string;
@@ -198,8 +303,27 @@ interface TabsProps {
198
303
  onValueChange?: (id: string) => void;
199
304
  className?: string;
200
305
  ariaLabel?: string;
306
+ /** Extends a subtle divider across the entire tab list. */
307
+ divider?: boolean;
308
+ /** Visual treatment. Surface tabs sit on a full-width secondary surface with the active tab connected to its panel. */
309
+ variant?: TabsVariant;
310
+ }
311
+ declare function Tabs({ items, defaultValue, value: controlledValue, onValueChange, className, ariaLabel, divider, variant, }: TabsProps): React.JSX.Element;
312
+
313
+ interface ContentSwitcherItem {
314
+ value: string;
315
+ label: React.ReactNode;
316
+ disabled?: boolean;
317
+ }
318
+ interface ContentSwitcherProps {
319
+ items: ContentSwitcherItem[];
320
+ value: string;
321
+ onValueChange: (value: string) => void;
322
+ ariaLabel: string;
323
+ fullWidth?: boolean;
324
+ className?: string;
201
325
  }
202
- declare function Tabs({ items, defaultValue, value: controlledValue, onValueChange, className, ariaLabel, }: TabsProps): React.JSX.Element;
326
+ declare function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth, className }: ContentSwitcherProps): React.JSX.Element;
203
327
 
204
328
  interface DisclosureProps {
205
329
  title: ReactNode;
@@ -208,18 +332,136 @@ interface DisclosureProps {
208
332
  defaultOpen?: boolean;
209
333
  open?: boolean;
210
334
  onOpenChange?: (open: boolean) => void;
335
+ disabled?: boolean;
211
336
  className?: string;
212
337
  variant?: 'card' | 'plain';
213
338
  }
214
- declare function Disclosure({ title, meta, children, defaultOpen, open: controlledOpen, onOpenChange, className, variant, }: DisclosureProps): React.JSX.Element;
339
+ declare function Disclosure({ title, meta, children, defaultOpen, open: controlledOpen, onOpenChange, disabled, className, variant, }: DisclosureProps): React.JSX.Element;
340
+
341
+ interface LatticeLoaderProps extends HTMLAttributes<HTMLSpanElement> {
342
+ label?: string;
343
+ }
344
+ declare function LatticeLoader({ className, label, ...props }: LatticeLoaderProps): React.JSX.Element;
345
+
346
+ type UILoaderTone = 'neutral' | 'blue' | 'green';
347
+ interface UILoaderProps {
348
+ /** Visual height. Width follows the mark's aspect ratio. */
349
+ size?: number | string;
350
+ tone?: UILoaderTone;
351
+ className?: string;
352
+ style?: CSSProperties;
353
+ label?: string;
354
+ /** Use when another nearby element already announces loading. */
355
+ ariaHidden?: boolean;
356
+ }
357
+ /** A branded shine loader for whole UI surfaces, not component-level content. */
358
+ declare function UILoader({ size, tone, className, style, label, ariaHidden }: UILoaderProps): React.JSX.Element;
359
+
360
+ type GhostLength = number | string;
361
+ interface GhostProps extends HTMLAttributes<HTMLDivElement> {
362
+ /** Width of the placeholder. Numbers are interpreted as pixels. */
363
+ width?: GhostLength;
364
+ /** Height of the placeholder. Numbers are interpreted as pixels. */
365
+ height?: GhostLength;
366
+ /** Border radius override. */
367
+ radius?: GhostLength;
368
+ }
369
+ interface GhostLineProps extends Omit<GhostProps, 'height'> {
370
+ /** Text-line size. */
371
+ size?: 'sm' | 'md' | 'lg';
372
+ }
373
+ /**
374
+ * An intentionally content-free, shimmering placeholder. Use the composed
375
+ * ghosts below for standard Fractal components; use this primitive for custom
376
+ * product layouts.
377
+ */
378
+ declare function Ghost({ className, width, height, radius, style, ...props }: GhostProps): React.JSX.Element;
379
+ declare function GhostLine({ className, size, width, ...props }: GhostLineProps): React.JSX.Element;
380
+ interface ButtonGhostProps extends Omit<GhostProps, 'height'> {
381
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
382
+ iconOnly?: boolean;
383
+ }
384
+ declare function ButtonGhost({ className, size, iconOnly, width, ...props }: ButtonGhostProps): React.JSX.Element;
385
+ interface CardGhostProps extends HTMLAttributes<HTMLDivElement> {
386
+ lines?: number;
387
+ showHeader?: boolean;
388
+ }
389
+ declare function CardGhost({ className, lines, showHeader, ...props }: CardGhostProps): React.JSX.Element;
390
+ interface DataTableGhostProps extends HTMLAttributes<HTMLDivElement> {
391
+ /** Display placeholder cells for a header that is itself still loading. */
392
+ showHeader?: boolean;
393
+ /** Static header labels to retain while only rows are loading. */
394
+ headers?: ReactNode[];
395
+ /** Number of column placeholders. */
396
+ columns?: number;
397
+ /** Number of data row placeholders. */
398
+ rows?: number;
399
+ /** Optional CSS widths mirroring the eventual table columns. */
400
+ columnWidths?: string[];
401
+ size?: 'sm' | 'md' | 'lg';
402
+ }
403
+ declare function DataTableGhost({ className, showHeader, headers, columns, rows, columnWidths, size, ...props }: DataTableGhostProps): React.JSX.Element;
404
+ interface FormFieldGhostProps extends HTMLAttributes<HTMLDivElement> {
405
+ labelWidth?: GhostLength;
406
+ multiline?: boolean;
407
+ }
408
+ declare function InputGhost({ className, labelWidth, ...props }: FormFieldGhostProps): React.JSX.Element;
409
+ declare function TextareaGhost({ className, labelWidth, ...props }: FormFieldGhostProps): React.JSX.Element;
410
+ declare function LabelGhost({ className, width, ...props }: Omit<GhostLineProps, 'size'>): React.JSX.Element;
411
+ declare function AlertGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
412
+ declare function CheckboxGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
413
+ declare const ToggleGhost: typeof CheckboxGhost;
414
+ declare function ChipGhost({ className, width, ...props }: Omit<GhostProps, 'height'>): React.JSX.Element;
415
+ declare function LinkGhost({ className, width, ...props }: Omit<GhostLineProps, 'size'>): React.JSX.Element;
416
+ declare const TextButtonGhost: typeof LinkGhost;
417
+ declare function DropdownGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
418
+ declare function ContentSwitcherGhost({ className, options, ...props }: HTMLAttributes<HTMLDivElement> & {
419
+ options?: number;
420
+ }): React.JSX.Element;
421
+ declare const TabsGhost: typeof ContentSwitcherGhost;
422
+ declare function DisclosureGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
423
+ declare function PaginationGhost({ className, pages, ...props }: HTMLAttributes<HTMLDivElement> & {
424
+ pages?: number;
425
+ }): React.JSX.Element;
426
+ declare function FileDropzoneGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
427
+ declare function PromptCardGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
428
+ type ConversationGhostProps = HTMLAttributes<HTMLDivElement>;
429
+ declare function ConversationGhost({ className, 'aria-label': ariaLabel, ...props }: ConversationGhostProps): React.JSX.Element;
430
+ declare function SortableTableGhost(props: DataTableGhostProps): React.JSX.Element;
431
+ interface SidebarGhostProps extends HTMLAttributes<HTMLDivElement> {
432
+ items?: number;
433
+ }
434
+ declare function SidebarGhost({ className, items, ...props }: SidebarGhostProps): React.JSX.Element;
435
+ interface SurfaceGhostProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
436
+ title?: ReactNode;
437
+ lines?: number;
438
+ }
439
+ declare function ModalGhost({ className, title, lines, ...props }: SurfaceGhostProps): React.JSX.Element;
440
+ declare function SidePanelGhost({ className, title, lines, ...props }: SurfaceGhostProps): React.JSX.Element;
215
441
 
216
442
  interface SidebarProps extends React.HTMLAttributes<HTMLElement> {
217
443
  /** Fixed sidebar width. Defaults to the standard application width. */
218
444
  width?: string;
445
+ /** Collapses the sidebar to an icon rail until it is hovered or receives focus. */
446
+ compact?: boolean;
219
447
  }
220
448
  declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLElement>>;
221
449
  declare const SidebarHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
222
450
  declare const SidebarBrand: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>>;
451
+ interface SidebarAccountMenuProps {
452
+ /** Person or workspace label shown in the sidebar header. */
453
+ name: string;
454
+ /** Available account actions. */
455
+ items: DropdownItem[];
456
+ /** Invoked when an account action is selected. */
457
+ onSelect: (value: string) => void;
458
+ /** Accessible label for the account actions menu. */
459
+ triggerLabel?: string;
460
+ /** Leading profile or workspace mark. */
461
+ icon?: React.ReactNode;
462
+ className?: string;
463
+ }
464
+ declare function SidebarAccountMenu({ name, items, onSelect, triggerLabel, icon, className, }: SidebarAccountMenuProps): React.JSX.Element;
223
465
  declare const SidebarNav: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
224
466
  declare const SidebarSection: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
225
467
  interface SidebarNavItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -233,14 +475,6 @@ interface SidebarNavItemProps extends React.ButtonHTMLAttributes<HTMLButtonEleme
233
475
  declare const SidebarNavItem: React.ForwardRefExoticComponent<SidebarNavItemProps & React.RefAttributes<HTMLButtonElement>>;
234
476
  declare const SidebarFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
235
477
 
236
- interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
237
- /** The page's primary title. */
238
- title: React.ReactNode;
239
- /** Right-aligned action slot. Place secondary actions before the primary action. */
240
- actions?: React.ReactNode;
241
- }
242
- declare const PageHeader: React.ForwardRefExoticComponent<PageHeaderProps & React.RefAttributes<HTMLDivElement>>;
243
-
244
478
  interface SidePanelProps {
245
479
  open: boolean;
246
480
  onClose: () => void;
@@ -248,16 +482,56 @@ interface SidePanelProps {
248
482
  description?: React.ReactNode;
249
483
  children: React.ReactNode;
250
484
  footer?: React.ReactNode;
251
- /** Panel width: sm (420px), md (540px), or lg (680px). */
252
- size?: 'sm' | 'md' | 'lg';
485
+ /** Panel width: sm (420px), md (540px), lg (680px), or xl (960px). */
486
+ size?: 'sm' | 'md' | 'lg' | 'xl';
487
+ /** Replaces the body with a whole-surface loading state while retaining the panel header. */
488
+ loading?: boolean;
489
+ loadingLabel?: string;
253
490
  className?: string;
254
491
  }
255
- declare function SidePanel({ open, onClose, title, description, children, footer, size, className }: SidePanelProps): React.ReactPortal | null;
492
+ declare function SidePanel({ open, onClose, title, description, children, footer, size, loading, loadingLabel, className }: SidePanelProps): React.ReactPortal | null;
256
493
 
257
494
  interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
258
495
  }
259
496
  declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
260
497
 
498
+ type TextButtonSize = 'sm' | 'md';
499
+ type TextButtonIconPosition = 'start' | 'end';
500
+ type TextButtonTone = 'primary' | 'secondary';
501
+ interface TextButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
502
+ icon?: React.ReactNode;
503
+ iconPosition?: TextButtonIconPosition;
504
+ size?: TextButtonSize;
505
+ tone?: TextButtonTone;
506
+ }
507
+ declare const TextButton: React.ForwardRefExoticComponent<TextButtonProps & React.RefAttributes<HTMLButtonElement>>;
508
+
509
+ interface FileDropzoneProps {
510
+ files: File[];
511
+ onFilesChange: (files: File[]) => void;
512
+ accept?: string;
513
+ multiple?: boolean;
514
+ disabled?: boolean;
515
+ title?: React.ReactNode;
516
+ description?: React.ReactNode;
517
+ className?: string;
518
+ }
519
+ declare function FileDropzone({ files, onFilesChange, accept, multiple, disabled, title, description, className, }: FileDropzoneProps): React.JSX.Element;
520
+
521
+ interface PaginationProps {
522
+ /** One-based active page. */
523
+ page: number;
524
+ pageSize: number;
525
+ totalItems: number;
526
+ onPageChange: (page: number) => void;
527
+ /** Optional page sizes, rendered as an unframed selector in the pagination footer. */
528
+ pageSizeOptions?: number[];
529
+ onPageSizeChange?: (pageSize: number) => void;
530
+ ariaLabel?: string;
531
+ className?: string;
532
+ }
533
+ declare function Pagination({ page, pageSize, totalItems, onPageChange, pageSizeOptions, onPageSizeChange, ariaLabel, className, }: PaginationProps): React.JSX.Element;
534
+
261
535
  /**
262
536
  * Register an Escape-key dismiss handler with the global priority stack.
263
537
  *
@@ -269,4 +543,4 @@ declare function useEscapeDismiss(priority: number, handler: () => void, enabled
269
543
 
270
544
  declare function cn(...inputs: ClassValue[]): string;
271
545
 
272
- export { Alert, AlertDescription, AlertTitle, Button, type ButtonColor, type ButtonProps, type ButtonSize, type ButtonType, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Chip, type ChipProps, type ChipTone, DataTable, type DataTableColumn, type DataTableProps, Disclosure, type DisclosureProps, Dropdown, type DropdownItem, type DropdownProps, FeatureCard, type FeatureCardProps, FolderCard, type FolderCardProps, Input, type InputProps, Label, type LabelProps, Link, type LinkProps, type LinkSize, type LinkTheme, Modal, type ModalProps, PageHeader, type PageHeaderProps, PromptCard, type PromptCardProps, type PromptCardTone, PromptGrid, type PromptGridProps, SidePanel, type SidePanelProps, Sidebar, SidebarBrand, SidebarFooter, SidebarHeader, SidebarNav, SidebarNavItem, type SidebarNavItemProps, type SidebarProps, SidebarSection, type SortDirection, SortableTable, type SortableTableColumn, type SortableTableProps, type TabItem, Tabs, type TabsProps, Textarea, type TextareaProps, Toggle, type ToggleProps, cn, useEscapeDismiss };
546
+ export { Alert, AlertDescription, AlertGhost, AlertTitle, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonColor, ButtonGhost, type ButtonGhostProps, type ButtonProps, type ButtonSize, type ButtonType, Card, CardContent, CardDescription, CardFooter, CardGhost, type CardGhostProps, CardHeader, CardTitle, Checkbox, CheckboxGhost, type CheckboxProps, Chip, ChipGhost, type ChipProps, type ChipTone, CodeBlock, type CodeBlockProps, ContentSwitcher, ContentSwitcherGhost, type ContentSwitcherItem, type ContentSwitcherProps, ConversationGhost, type ConversationGhostProps, DataTable, type DataTableColumn, DataTableGhost, type DataTableGhostProps, type DataTableProps, Disclosure, DisclosureGhost, type DisclosureProps, Dropdown, DropdownGhost, type DropdownItem, type DropdownProps, FeatureCard, type FeatureCardProps, FileDropzone, FileDropzoneGhost, type FileDropzoneProps, FolderCard, type FolderCardProps, type FormFieldGhostProps, Ghost, GhostLine, type GhostLineProps, type GhostProps, Input, InputGhost, type InputProps, Label, LabelGhost, type LabelProps, LatticeLoader, type LatticeLoaderProps, Link, LinkGhost, type LinkProps, type LinkSize, type LinkTheme, Modal, ModalGhost, type ModalProps, NumberInput, type NumberInputProps, Pagination, PaginationGhost, type PaginationProps, PasswordInput, type PasswordInputProps, PromptCard, PromptCardGhost, type PromptCardProps, type PromptCardTone, PromptGrid, type PromptGridProps, SidePanel, SidePanelGhost, type SidePanelProps, Sidebar, SidebarAccountMenu, type SidebarAccountMenuProps, SidebarBrand, SidebarFooter, SidebarGhost, type SidebarGhostProps, SidebarHeader, SidebarNav, SidebarNavItem, type SidebarNavItemProps, type SidebarProps, SidebarSection, type SortDirection, SortableTable, type SortableTableColumn, type SortableTableDefaultSort, SortableTableGhost, type SortableTablePagination, type SortableTableProps, type SortableTableRowAction, type SurfaceGhostProps, type TabItem, TableSearch, type TableSearchProps, type TableSearchType, Tabs, TabsGhost, type TabsProps, type TabsVariant, TextButton, TextButtonGhost, type TextButtonIconPosition, type TextButtonProps, type TextButtonSize, type TextButtonTone, Textarea, TextareaGhost, type TextareaProps, Toggle, ToggleGhost, type ToggleProps, UILoader, type UILoaderProps, type UILoaderTone, cn, useEscapeDismiss };