@apliteni/apliteni-ui 0.76.1 → 0.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/guidelines/file-drop.md +87 -0
- package/guidelines/state-set.md +1 -1
- package/package.json +1 -1
- package/react/README.md +28 -0
- package/react/dist/index.css +135 -0
- package/react/dist/index.d.ts +42 -1
- package/react/dist/index.js +281 -129
- package/src/index.css +1 -0
- package/src/inline.js +2 -0
- package/src/styles/card.css +6 -0
- package/src/styles/command-palette.css +8 -0
- package/src/styles/confirm.css +12 -1
- package/src/styles/drawer.css +6 -0
- package/src/styles/dropdown.css +6 -0
- package/src/styles/file-drop.css +83 -0
- package/src/styles/table.css +7 -1
- package/src/styles/tap-zone.css +9 -0
- package/src/tokens/tokens.css +10 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# File drop
|
|
2
|
+
|
|
3
|
+
## Spend one row at rest
|
|
4
|
+
|
|
5
|
+
<!-- rule: one-row -->
|
|
6
|
+
|
|
7
|
+
**Rule:** At rest, a file drop is one row: the button that opens the picker and the accepted types beside it.
|
|
8
|
+
|
|
9
|
+
**Why:** A tall box holds the page's best space open for a file that arrives once a month.
|
|
10
|
+
|
|
11
|
+
**Do:** Put an Upload button and “PDF or CSV, up to 10 MB” on one line above the list they feed.
|
|
12
|
+
|
|
13
|
+
**Don't:** Draw a tall dashed box with a glyph, an invitation and a button stacked inside it.
|
|
14
|
+
|
|
15
|
+
**Except:** A page whose whole purpose is receiving one file may use the field-sized picker, which carries a label of its own.
|
|
16
|
+
|
|
17
|
+
## Paint the target only while a file is over it
|
|
18
|
+
|
|
19
|
+
<!-- rule: on-drag -->
|
|
20
|
+
|
|
21
|
+
**Rule:** Show the drop target while a file is over the region that accepts it, and nowhere else.
|
|
22
|
+
|
|
23
|
+
**Why:** A target drawn before there is a file to catch covers content the reader still needs.
|
|
24
|
+
|
|
25
|
+
**Do:** Cover the panel that accepts the file the moment the file crosses it.
|
|
26
|
+
|
|
27
|
+
**Don't:** Cover the whole window when one panel accepts the file.
|
|
28
|
+
|
|
29
|
+
## Keep the file in the row it arrived in
|
|
30
|
+
|
|
31
|
+
<!-- rule: in-the-row -->
|
|
32
|
+
|
|
33
|
+
**Rule:** After the drop, the file's name, size and progress take the place the button was in, with remove on the name's line.
|
|
34
|
+
|
|
35
|
+
**Why:** A row that changes in place keeps the page still while the file uploads.
|
|
36
|
+
|
|
37
|
+
**Do:** Give the name a line with remove at its end, put the size under it, and run the progress track the full width below both.
|
|
38
|
+
|
|
39
|
+
**Don't:** Push the list down with a progress card, or open a dialog over the page.
|
|
40
|
+
|
|
41
|
+
## Fail in place
|
|
42
|
+
|
|
43
|
+
<!-- rule: failure -->
|
|
44
|
+
|
|
45
|
+
**Rule:** A refused file keeps its place, says what it did wrong under its name, and offers Retry beside Remove.
|
|
46
|
+
|
|
47
|
+
**Why:** A row that drops the file sends the reader back to choosing one. The reason is the one string here that has to be read in full, so it gets a line rather than a share of one.
|
|
48
|
+
|
|
49
|
+
**Do:** Keep the name on its line and say “Larger than 10 MB” under it, with Retry.
|
|
50
|
+
|
|
51
|
+
**Don't:** Replace the row with “Upload failed”, losing both the file and the retry.
|
|
52
|
+
|
|
53
|
+
## Offer a button, not only a drag
|
|
54
|
+
|
|
55
|
+
<!-- rule: button-path -->
|
|
56
|
+
|
|
57
|
+
**Rule:** Give the reader a button that opens the picker, and let dragging be the shortcut.
|
|
58
|
+
|
|
59
|
+
**Why:** A keyboard cannot drag a file.
|
|
60
|
+
|
|
61
|
+
**Do:** Make the Upload button the control, reachable by keyboard and showing the focus ring.
|
|
62
|
+
|
|
63
|
+
**Don't:** Write “Drag a file here” with nothing to press.
|
|
64
|
+
|
|
65
|
+
## State the limits once
|
|
66
|
+
|
|
67
|
+
<!-- rule: limits-once -->
|
|
68
|
+
|
|
69
|
+
**Rule:** Name the accepted types and the size limit once, beside the button, in the product's own words.
|
|
70
|
+
|
|
71
|
+
**Why:** Repeated limits teach the reader to skip them.
|
|
72
|
+
|
|
73
|
+
**Do:** Write “PDF or CSV, up to 10 MB” beside the button, and let a failure say what this file did wrong.
|
|
74
|
+
|
|
75
|
+
**Don't:** Repeat the limits under the button, in a tooltip and again in the error.
|
|
76
|
+
|
|
77
|
+
## Choose the row, the region or the dialog
|
|
78
|
+
|
|
79
|
+
<!-- rule: which-shape -->
|
|
80
|
+
|
|
81
|
+
**Rule:** Use a row where the file joins a list on the page, a region when one panel owns the file, and a dialog only when the upload needs answers of its own.
|
|
82
|
+
|
|
83
|
+
**Why:** A dialog that asks nothing is one more thing to dismiss. The rule picks between three containers, so a drawing would show one of them and not the choice.
|
|
84
|
+
|
|
85
|
+
**Do:** Take a statement into the row under the statements it joins, and a replacement logo into the panel that shows it.
|
|
86
|
+
|
|
87
|
+
**Don't:** Open a dialog for one file that the row behind it could have taken.
|
package/guidelines/state-set.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
**Don't:** Give the input a separate muted outline while the button uses `--ring`.
|
|
14
14
|
|
|
15
|
-
**Except:** Text-entry controls may match `:focus-visible` on mouse focus. Surface backgrounds set the gap colour and recompose `--ring`; adjust width and colour at the root.
|
|
15
|
+
**Except:** A scroll region inside a surface takes `--ring-scroll`: the same 1px gap and 2px band, drawn inward, without the halo. `--ring` is drawn for a 32px control, where the halo is a glint; around a 400px region it spreads 14px past the band and lights the surface instead of the box that scrolls. A box that is itself the outermost surface — a panel, a card — keeps `--ring`. Text-entry controls may match `:focus-visible` on mouse focus. Surface backgrounds set the gap colour and recompose `--ring`; adjust width and colour at the root.
|
|
16
16
|
|
|
17
17
|
## Busy controls
|
|
18
18
|
|
package/package.json
CHANGED
package/react/README.md
CHANGED
|
@@ -493,6 +493,34 @@ places a decorative kit glyph with `icon` — the same glyph names `Button` and
|
|
|
493
493
|
`onFileChange`. Use `accept` and `hint` to describe allowed file types and size.
|
|
494
494
|
Your application must validate files before upload.
|
|
495
495
|
|
|
496
|
+
## File drop
|
|
497
|
+
|
|
498
|
+
`FileDrop` is the compact drop: one row with the button that opens the picker and
|
|
499
|
+
the accepted types beside it, and a drop target painted only while a file is over
|
|
500
|
+
the region. Use it where a file joins a list on the page; use `FileField` where a
|
|
501
|
+
labelled, field-sized picker belongs. The guideline page states when to use a row,
|
|
502
|
+
a region or a dialog.
|
|
503
|
+
|
|
504
|
+
```tsx
|
|
505
|
+
<FileDrop note="PDF or CSV, up to 10 MB" accept=".pdf,.csv"
|
|
506
|
+
file={upload} onFile={send} onRemove={clear} onRetry={send} />
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
Your application owns the upload and supplies the `file` it is holding: the
|
|
510
|
+
name, the `size` already written for a reader, `progress` while it uploads, and
|
|
511
|
+
the `error` when it failed. A file with no `status` is uploading, so a file
|
|
512
|
+
handed over before the request starts never reads as uploaded. A status the row
|
|
513
|
+
draws shows a mark and a word; where you give `progress` the track says it
|
|
514
|
+
instead, and the word goes to the track's accessible name. The file reads as a
|
|
515
|
+
stack: the name on top with the actions at its end, the size — or the failure
|
|
516
|
+
message — under it, and the track the full width below. No tier takes a second
|
|
517
|
+
line. The name truncates its stem and keeps its extension, with the whole name in
|
|
518
|
+
a `title`, and nothing is hidden or moved at any width. `Remove` is the icon-only
|
|
519
|
+
`x`, named by `removeLabel`; `Retry` keeps its word. Both appear only when you
|
|
520
|
+
handle them. Children render above the row, inside the region the target covers;
|
|
521
|
+
pass `dragging` to drive that target from a parent. `accept` filters the system
|
|
522
|
+
picker only — validate type and size yourself.
|
|
523
|
+
|
|
496
524
|
Use `Field` when an existing labelled control needs the kit frame. Spread its
|
|
497
525
|
render-prop attributes onto one labelable control, and apply the existing control
|
|
498
526
|
class and invalid styling as appropriate:
|
package/react/dist/index.css
CHANGED
|
@@ -82,6 +82,14 @@
|
|
|
82
82
|
.ui-table__act .ui-btn + .ui-btn {
|
|
83
83
|
margin-inline-start: var(--tap-gap) !important;
|
|
84
84
|
}
|
|
85
|
+
.ui-drop__row {
|
|
86
|
+
--tap-clear-y: var(--tap-gap);
|
|
87
|
+
}
|
|
88
|
+
.ui-drop__actions {
|
|
89
|
+
gap: var(--tap-gap) !important;
|
|
90
|
+
--tap-clear-x: var(--tap-gap);
|
|
91
|
+
--tap-clear-y: var(--tap-gap);
|
|
92
|
+
}
|
|
85
93
|
.ui-table__act {
|
|
86
94
|
--tap-clear-x: var(--tap-gap);
|
|
87
95
|
--tap-clear-y: 0px;
|
|
@@ -216,6 +224,10 @@
|
|
|
216
224
|
min-height: 0;
|
|
217
225
|
overflow: auto;
|
|
218
226
|
}
|
|
227
|
+
.rx-modal__body:focus-visible {
|
|
228
|
+
outline: var(--ring-scroll);
|
|
229
|
+
outline-offset: var(--ring-scroll-offset);
|
|
230
|
+
}
|
|
219
231
|
.rx-modal__body > * {
|
|
220
232
|
flex-shrink: 0;
|
|
221
233
|
}
|
|
@@ -494,6 +506,129 @@
|
|
|
494
506
|
cursor: not-allowed;
|
|
495
507
|
}
|
|
496
508
|
|
|
509
|
+
/* ../src/styles/file-drop.css */
|
|
510
|
+
.ui-drop {
|
|
511
|
+
position: relative;
|
|
512
|
+
}
|
|
513
|
+
.ui-drop > * + .ui-drop__row {
|
|
514
|
+
margin-top: var(--space-3);
|
|
515
|
+
}
|
|
516
|
+
.ui-drop__row {
|
|
517
|
+
display: flex;
|
|
518
|
+
flex-wrap: wrap;
|
|
519
|
+
align-items: center;
|
|
520
|
+
min-height: var(--space-8);
|
|
521
|
+
gap: var(--space-2) var(--space-3);
|
|
522
|
+
font-size: var(--text-sm);
|
|
523
|
+
color: var(--text);
|
|
524
|
+
overflow-wrap: anywhere;
|
|
525
|
+
}
|
|
526
|
+
.ui-drop__note {
|
|
527
|
+
margin: 0;
|
|
528
|
+
}
|
|
529
|
+
.ui-drop__file {
|
|
530
|
+
display: grid;
|
|
531
|
+
flex: 1 1 auto;
|
|
532
|
+
gap: var(--space-2);
|
|
533
|
+
min-width: 0;
|
|
534
|
+
}
|
|
535
|
+
.ui-drop__line {
|
|
536
|
+
display: flex;
|
|
537
|
+
flex-wrap: nowrap;
|
|
538
|
+
align-items: center;
|
|
539
|
+
gap: var(--space-3);
|
|
540
|
+
min-width: 0;
|
|
541
|
+
}
|
|
542
|
+
.ui-drop__name {
|
|
543
|
+
display: flex;
|
|
544
|
+
flex: 1 1 auto;
|
|
545
|
+
min-width: var(--space-10);
|
|
546
|
+
color: var(--strong);
|
|
547
|
+
font-weight: var(--weight-medium);
|
|
548
|
+
}
|
|
549
|
+
.ui-drop__stem {
|
|
550
|
+
overflow: hidden;
|
|
551
|
+
text-overflow: ellipsis;
|
|
552
|
+
white-space: nowrap;
|
|
553
|
+
}
|
|
554
|
+
.ui-drop__ext {
|
|
555
|
+
flex: none;
|
|
556
|
+
}
|
|
557
|
+
.ui-drop__facts {
|
|
558
|
+
display: flex;
|
|
559
|
+
flex-wrap: nowrap;
|
|
560
|
+
align-items: center;
|
|
561
|
+
gap: var(--space-3);
|
|
562
|
+
min-width: 0;
|
|
563
|
+
}
|
|
564
|
+
.ui-drop__size {
|
|
565
|
+
flex: none;
|
|
566
|
+
white-space: nowrap;
|
|
567
|
+
}
|
|
568
|
+
.ui-drop__word {
|
|
569
|
+
overflow: hidden;
|
|
570
|
+
text-overflow: ellipsis;
|
|
571
|
+
white-space: nowrap;
|
|
572
|
+
flex: 0 1 auto;
|
|
573
|
+
min-width: 0;
|
|
574
|
+
}
|
|
575
|
+
.ui-drop__state {
|
|
576
|
+
display: inline-flex;
|
|
577
|
+
flex: 0 1 auto;
|
|
578
|
+
align-items: center;
|
|
579
|
+
gap: var(--space-2);
|
|
580
|
+
min-width: 0;
|
|
581
|
+
}
|
|
582
|
+
.ui-drop__state svg {
|
|
583
|
+
width: 16px;
|
|
584
|
+
height: 16px;
|
|
585
|
+
flex: none;
|
|
586
|
+
stroke-width: 2.4;
|
|
587
|
+
}
|
|
588
|
+
.ui-drop__error {
|
|
589
|
+
color: var(--pink);
|
|
590
|
+
}
|
|
591
|
+
.ui-drop__actions {
|
|
592
|
+
display: flex;
|
|
593
|
+
flex: none;
|
|
594
|
+
align-items: center;
|
|
595
|
+
gap: var(--space-2);
|
|
596
|
+
margin-left: auto;
|
|
597
|
+
}
|
|
598
|
+
.ui-drop__bar {
|
|
599
|
+
display: block;
|
|
600
|
+
width: 100%;
|
|
601
|
+
height: 6px;
|
|
602
|
+
border-radius: var(--radius-pill);
|
|
603
|
+
background: var(--surface-2);
|
|
604
|
+
overflow: hidden;
|
|
605
|
+
}
|
|
606
|
+
.ui-drop__bar span {
|
|
607
|
+
display: block;
|
|
608
|
+
height: 100%;
|
|
609
|
+
background: var(--accent);
|
|
610
|
+
}
|
|
611
|
+
.ui-drop__target {
|
|
612
|
+
position: absolute;
|
|
613
|
+
inset: 0;
|
|
614
|
+
display: flex;
|
|
615
|
+
align-items: center;
|
|
616
|
+
justify-content: center;
|
|
617
|
+
padding: var(--space-3);
|
|
618
|
+
border: 1px dashed var(--accent);
|
|
619
|
+
border-radius: var(--radius-md);
|
|
620
|
+
background: var(--surface);
|
|
621
|
+
color: var(--strong);
|
|
622
|
+
font-size: var(--text-sm);
|
|
623
|
+
text-align: center;
|
|
624
|
+
}
|
|
625
|
+
.ui-drop.is-disabled .ui-drop__row {
|
|
626
|
+
color: var(--disabled-ink);
|
|
627
|
+
}
|
|
628
|
+
.ui-drop.is-disabled .ui-drop__name {
|
|
629
|
+
color: var(--disabled-ink);
|
|
630
|
+
}
|
|
631
|
+
|
|
497
632
|
/* src/Toast.css */
|
|
498
633
|
.rx-toast-stack {
|
|
499
634
|
position: fixed;
|
package/react/dist/index.d.ts
CHANGED
|
@@ -607,6 +607,47 @@ type FileFieldProps = FieldMessage & Omit<InputHTMLAttributes<HTMLInputElement>,
|
|
|
607
607
|
};
|
|
608
608
|
declare function FileField({ label, hint, error, required, disabled, onFileChange, className, ...props }: FileFieldProps): react.JSX.Element;
|
|
609
609
|
|
|
610
|
+
type FileDropStatus = 'uploading' | 'done' | 'error';
|
|
611
|
+
/** The file the consumer is uploading. */
|
|
612
|
+
type FileDropFile = {
|
|
613
|
+
name: string;
|
|
614
|
+
/** Already written for a reader; the kit picks no unit. */
|
|
615
|
+
size?: string;
|
|
616
|
+
/** Left out, the file is uploading: the kit never reports a success nobody claimed. */
|
|
617
|
+
status?: FileDropStatus;
|
|
618
|
+
/** 0 to 100. Left out, the word stands without a bar. */
|
|
619
|
+
progress?: number;
|
|
620
|
+
/** What this file did wrong, when the status is an error. */
|
|
621
|
+
error?: string;
|
|
622
|
+
/** Replaces the word the status carries. */
|
|
623
|
+
state?: string;
|
|
624
|
+
};
|
|
625
|
+
type FileDropProps = {
|
|
626
|
+
/** The button that opens the picker. */
|
|
627
|
+
label?: string;
|
|
628
|
+
/** The accepted types and the size limit, stated once beside the button. */
|
|
629
|
+
note?: string;
|
|
630
|
+
/** Filters the system picker only; the consumer still validates the file. */
|
|
631
|
+
accept?: string;
|
|
632
|
+
/** The words on the drop target. */
|
|
633
|
+
dropLabel?: string;
|
|
634
|
+
/** Names the icon-only remove button; it carries no visible word. */
|
|
635
|
+
removeLabel?: string;
|
|
636
|
+
retryLabel?: string;
|
|
637
|
+
/** The file the consumer is holding. Left out, the row is at rest. */
|
|
638
|
+
file?: FileDropFile | null;
|
|
639
|
+
/** Drives the target from a parent that owns the drag region. */
|
|
640
|
+
dragging?: boolean;
|
|
641
|
+
disabled?: boolean;
|
|
642
|
+
onFile?: (file: File) => void;
|
|
643
|
+
onRemove?: () => void;
|
|
644
|
+
onRetry?: () => void;
|
|
645
|
+
/** What the region accepts the file for; the target covers it while dragging. */
|
|
646
|
+
children?: ReactNode;
|
|
647
|
+
className?: string;
|
|
648
|
+
};
|
|
649
|
+
declare function FileDrop({ label, note, accept, dropLabel, removeLabel, retryLabel, file, dragging, disabled, onFile, onRemove, onRetry, children, className, }: FileDropProps): react.JSX.Element;
|
|
650
|
+
|
|
610
651
|
type SearchFieldProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'aria-label'> & {
|
|
611
652
|
/** The control's name. A toolbar search box shows no label, so this is the
|
|
612
653
|
only name it has. */
|
|
@@ -827,4 +868,4 @@ declare const SidebarNav: react.ForwardRefExoticComponent<Omit<Omit<react.Detail
|
|
|
827
868
|
declare const PAGE_SIZES: readonly number[];
|
|
828
869
|
declare const DEFAULT_PAGE_SIZE: number;
|
|
829
870
|
|
|
830
|
-
export { AppShell, type AppShellProps, type AppShellSection, BackLink, type BackLinkOwnProps, type BackLinkProps, Badge, BusyRegion, type BusyRegionProps, Button, type ButtonLinkProps, type ButtonProps, Callout, type CalloutProps, type CalloutVariant, Card, Checkbox, type CheckboxProps, type Column, type CommandGroup, type CommandItem, CommandPalette, type CommandPaletteProps, Confirm, type ConfirmProps, DEFAULT_PAGE_SIZE, DataTable, type DataTableProps, DeltaValue, type DeltaValueProps, Denied, type DeniedProps, Drawer, type DrawerProps, DrawerSection, type DrawerSectionProps, Dropdown, type DropdownBadge, type DropdownEntry, type DropdownItem, type DropdownProps, type DropdownRowProps, type DropdownSearch, type DropdownSection, type DropdownSeparator, EmptyState, type EmptyStateProps, type EmptyStateVariant, Field, type FieldControlProps, type FieldProps, FileField, type FileFieldProps, type Filter, FilterBar, type FilterBarProps, Icon, KeyValueList, type KeyValueListProps, type KeyValueRow, Modal, type ModalProps, type NativeButtonProps, NumericValue, type NumericValueProps, PAGE_SIZES, Pagination, type PaginationProps, Pill, type PillProps, RowIdentity, type RowIdentityProps, SearchField, type SearchFieldProps, type SegmentOption, Segmented, type SegmentedProps, SelectField, type SelectFieldProps, SidebarNav, type SidebarNavBadge, type SidebarNavItem, type SidebarNavLeaf, type SidebarNavProps, type SidebarNavSection, Skeleton, type SkeletonProps, SkeletonTable, type SkeletonTableProps, Snippet, type SnippetProps, StatBand, type StatBandProps, type StatDelta, type StatFigure, type StatTone, type StatVariant, StatusDot, type StatusDotProps, Success, SuccessCheck, type SuccessCheckProps, type SuccessCountdown, SuccessPanel, type SuccessPanelProps, type SuccessProps, Switch, type SwitchProps, THEME_INIT_SCRIPT, type TabItem, type TableSort, Tabs, type TabsProps, TextArea, type TextAreaProps, TextField, type TextFieldProps, ThemeToggle, type ThemeToggleProps, Timeline, type TimelineEvent, type TimelineEventKind, type TimelineProps, Toast, type ToastNotice, type ToastProps, Tooltip, type TooltipProps, sortTableRows, useToast };
|
|
871
|
+
export { AppShell, type AppShellProps, type AppShellSection, BackLink, type BackLinkOwnProps, type BackLinkProps, Badge, BusyRegion, type BusyRegionProps, Button, type ButtonLinkProps, type ButtonProps, Callout, type CalloutProps, type CalloutVariant, Card, Checkbox, type CheckboxProps, type Column, type CommandGroup, type CommandItem, CommandPalette, type CommandPaletteProps, Confirm, type ConfirmProps, DEFAULT_PAGE_SIZE, DataTable, type DataTableProps, DeltaValue, type DeltaValueProps, Denied, type DeniedProps, Drawer, type DrawerProps, DrawerSection, type DrawerSectionProps, Dropdown, type DropdownBadge, type DropdownEntry, type DropdownItem, type DropdownProps, type DropdownRowProps, type DropdownSearch, type DropdownSection, type DropdownSeparator, EmptyState, type EmptyStateProps, type EmptyStateVariant, Field, type FieldControlProps, type FieldProps, FileDrop, type FileDropFile, type FileDropProps, type FileDropStatus, FileField, type FileFieldProps, type Filter, FilterBar, type FilterBarProps, Icon, KeyValueList, type KeyValueListProps, type KeyValueRow, Modal, type ModalProps, type NativeButtonProps, NumericValue, type NumericValueProps, PAGE_SIZES, Pagination, type PaginationProps, Pill, type PillProps, RowIdentity, type RowIdentityProps, SearchField, type SearchFieldProps, type SegmentOption, Segmented, type SegmentedProps, SelectField, type SelectFieldProps, SidebarNav, type SidebarNavBadge, type SidebarNavItem, type SidebarNavLeaf, type SidebarNavProps, type SidebarNavSection, Skeleton, type SkeletonProps, SkeletonTable, type SkeletonTableProps, Snippet, type SnippetProps, StatBand, type StatBandProps, type StatDelta, type StatFigure, type StatTone, type StatVariant, StatusDot, type StatusDotProps, Success, SuccessCheck, type SuccessCheckProps, type SuccessCountdown, SuccessPanel, type SuccessPanelProps, type SuccessProps, Switch, type SwitchProps, THEME_INIT_SCRIPT, type TabItem, type TableSort, Tabs, type TabsProps, TextArea, type TextAreaProps, TextField, type TextFieldProps, ThemeToggle, type ThemeToggleProps, Timeline, type TimelineEvent, type TimelineEventKind, type TimelineProps, Toast, type ToastNotice, type ToastProps, Tooltip, type TooltipProps, sortTableRows, useToast };
|