@campfire-interactive/ui 0.6.0 → 0.8.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.
Files changed (3) hide show
  1. package/dist/index.d.ts +307 -18
  2. package/dist/index.js +328 -99
  3. package/package.json +56 -55
package/dist/index.d.ts CHANGED
@@ -29,6 +29,23 @@ type ButtonSize = 'sm' | 'md' | 'lg' | 'icon';
29
29
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
30
30
  variant?: ButtonVariant;
31
31
  size?: ButtonSize;
32
+ /**
33
+ * Renders the CHILD element with this button's styling, instead of a
34
+ * `button`.
35
+ *
36
+ * For the button that is really a link — "New part", "Import", "Back to
37
+ * Quotes". Those have to be anchors: an onClick navigation loses
38
+ * middle-click, open-in-new-tab, copy-link-address and the status bar, and
39
+ * a screen reader announces a destination as a button. Every app was
40
+ * choosing between correct markup and correct styling, and the router-based
41
+ * ones mostly chose styling. This is the spelling the fleet's vendored
42
+ * shadcn buttons already use, so it needs no explaining at a call site.
43
+ *
44
+ * The child must be a single element that accepts a ref. `leadingIcon`,
45
+ * `trailingIcon` and `loading` are ignored, because the child owns its own
46
+ * content — put the icon inside it.
47
+ */
48
+ asChild?: boolean;
32
49
  /**
33
50
  * Renders a spinner in place of any leading icon and blocks activation.
34
51
  * Kept distinct from `disabled` so the caller can tell "working" apart from
@@ -715,6 +732,17 @@ interface ComboboxProps<T extends string = string> {
715
732
  disabled?: boolean;
716
733
  id?: string;
717
734
  name?: string;
735
+ /**
736
+ * Labelling, forwarded to the trigger.
737
+ *
738
+ * `Select` grew these when pm found 33 call sites labelling a control by its
739
+ * table column header; `Combobox` was written later and did not get them,
740
+ * which left every picker whose label is a column heading or a filter-bar
741
+ * position announcing only its placeholder. master-data's plant and scope
742
+ * pickers are both that shape.
743
+ */
744
+ 'aria-label'?: string;
745
+ 'aria-labelledby'?: string;
718
746
  'aria-describedby'?: string;
719
747
  className?: string;
720
748
  /**
@@ -924,6 +952,118 @@ interface CountBadgeProps extends Omit<BadgeProps, 'children' | 'dot' | 'icon'>
924
952
  /** A numeric count — unread items, filters applied, rows selected. */
925
953
  declare const CountBadge: react.ForwardRefExoticComponent<CountBadgeProps & react.RefAttributes<HTMLSpanElement>>;
926
954
 
955
+ type AlertTone = 'info' | 'success' | 'warning' | 'error' | 'neutral';
956
+ interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
957
+ tone?: AlertTone;
958
+ /** Bold first line. Omit it for a one-sentence alert — a title that merely restates the body is noise. */
959
+ title?: ReactNode;
960
+ /**
961
+ * Replaces the tone's default icon. Pass `null` to render no icon at all —
962
+ * worth it in a dense form where a row of icons is more decoration than signal.
963
+ */
964
+ icon?: ReactNode | null;
965
+ /** Trailing controls — a retry, a "Create it", a link out. */
966
+ actions?: ReactNode;
967
+ /** Renders a close button. The caller owns the dismissed state. */
968
+ onDismiss?: () => void;
969
+ dismissLabel?: string;
970
+ /** `subtle` drops the fill and keeps a left rule — for an alert inside a card that already has a ground. */
971
+ variant?: 'soft' | 'subtle';
972
+ }
973
+ /**
974
+ * AN INLINE MESSAGE ABOUT THE THING ON THE SCREEN.
975
+ *
976
+ * ── Why this exists ───────────────────────────────────────────────────────
977
+ *
978
+ * This package shipped `PageState` (the screen is loading / failed / empty)
979
+ * and `Toast` (something just happened, elsewhere) and nothing for the case
980
+ * between them: a message that belongs to a region of a page and stays there.
981
+ * Seven apps hand-rolled it — `CampfireSeedBanner`, `OwnershipBanner`, two
982
+ * vendored shadcn `alert`s, and a spread of one-off `<div>`s — and the
983
+ * one-offs are where the contrast defects were: the fleet's common pattern is
984
+ * a mid-tone on a 10%-alpha wash of itself, which lands near 2:1.
985
+ *
986
+ * ── The distinction to get right ──────────────────────────────────────────
987
+ *
988
+ * Use `Alert` when the message is ABOUT something the user can see and should
989
+ * persist while that remains true — "SAP is the source of truth for Plants",
990
+ * "this quote is awarded and can no longer be edited". Use `Toast` for the
991
+ * result of an action the user just took. Use `ErrorState` when the message
992
+ * REPLACES the content because there is no content to show.
993
+ *
994
+ * ── Accessibility ─────────────────────────────────────────────────────────
995
+ *
996
+ * `error` and `warning` announce as `role="alert"`; the quieter tones use
997
+ * `role="status"`. Both are live regions, so an alert that appears in
998
+ * response to a save is heard, not just seen. Tone is never carried by color
999
+ * alone — every tone has its own icon, which survives greyscale and every
1000
+ * color vision deficiency.
1001
+ */
1002
+ declare function Alert({ tone, title, icon, actions, onDismiss, dismissLabel, variant, className, children, ...rest }: AlertProps): react.JSX.Element;
1003
+
1004
+ interface DataListProps extends Omit<React.HTMLAttributes<HTMLDListElement>, 'children'> {
1005
+ /**
1006
+ * `label` — label left, value right, in a two-column grid. The scanning
1007
+ * layout for a record's own fields.
1008
+ * `stack` — label above value. Right when the values are long (an address,
1009
+ * a description) or when the list sits in a narrow column.
1010
+ * `inline` — label and value on one line, wrapping as a run. For a meta
1011
+ * strip under a page title, not for a record's fields.
1012
+ */
1013
+ layout?: 'label' | 'stack' | 'inline';
1014
+ /** Columns of pairs. `label` layout only; ignored otherwise. */
1015
+ columns?: 1 | 2 | 3;
1016
+ /** Width of the label column in `label` layout. Default `12rem`. */
1017
+ labelWidth?: string;
1018
+ /** Rules between rows. Worth it past about eight pairs, where the eye loses the row. */
1019
+ divided?: boolean;
1020
+ size?: 'sm' | 'md';
1021
+ children?: ReactNode;
1022
+ }
1023
+ /**
1024
+ * A RECORD'S FIELDS: the label/value grid every detail page in the suite draws.
1025
+ *
1026
+ * ── Why this exists ───────────────────────────────────────────────────────
1027
+ *
1028
+ * Nine of the twelve frontends have their own `__label` / `__value` pair CSS,
1029
+ * and they disagree about nearly everything: four render a real `<dl>` and
1030
+ * five use nested `<div>`s, the label column is 140px / 180px / 200px / 40%,
1031
+ * and the empty value is `—`, `-`, `N/A`, an empty string, or the literal
1032
+ * `null`. That last one is not cosmetic — a blank cell and a missing field
1033
+ * look identical, so a reader cannot tell "we don't know" from "nothing here".
1034
+ *
1035
+ * ── The decisions this makes ──────────────────────────────────────────────
1036
+ *
1037
+ * A real `<dl>`, so the pairing is in the accessibility tree and not only in
1038
+ * the visual grid. One empty marker — an em dash, with the pair still rendered
1039
+ * and still announced, because a field that vanishes when empty makes two
1040
+ * records with different data look like the same record. And the label column
1041
+ * collapses to stacked at phone width, where a 200px label beside a value
1042
+ * leaves the value about forty pixels.
1043
+ *
1044
+ * ── Empty values ─────────────────────────────────────────────────────────
1045
+ *
1046
+ * `DataListItem` renders `—` for `null`, `undefined` and `''`. It does NOT do
1047
+ * that for `0` or `false`, which are answers. Pass `empty` to say something
1048
+ * more specific ("Not set", "Inherited from the part type") — a screen where
1049
+ * the reason is knowable should say the reason.
1050
+ */
1051
+ declare function DataList({ layout, columns, labelWidth, divided, size, className, style, children, ...rest }: DataListProps): react.JSX.Element;
1052
+ interface DataListItemProps {
1053
+ label: ReactNode;
1054
+ /** `null`, `undefined` and `''` all render the empty marker. `0` and `false` do not. */
1055
+ children?: ReactNode;
1056
+ /** What to show when the value is empty. Defaults to an em dash. */
1057
+ empty?: ReactNode;
1058
+ /** Spans every column in a multi-column list — for the one long field among short ones. */
1059
+ full?: boolean;
1060
+ /** Renders the value in the mono face. For ids, codes, SKUs. */
1061
+ mono?: boolean;
1062
+ className?: string;
1063
+ }
1064
+ /** One label/value pair. Always renders, empty or not — see `DataList`. */
1065
+ declare function DataListItem({ label, children, empty, full, mono, className, }: DataListItemProps): react.JSX.Element;
1066
+
927
1067
  interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {
928
1068
  /** Tightens row height for dense data screens. */
929
1069
  density?: 'comfortable' | 'compact';
@@ -997,8 +1137,20 @@ interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {
997
1137
  numeric?: boolean;
998
1138
  /** Truncates with an ellipsis instead of wrapping. Pair it with a `title`. */
999
1139
  truncate?: boolean;
1140
+ /**
1141
+ * Renders the cell in the mono face.
1142
+ *
1143
+ * For an identifier rather than a word — a part number, a plant code, an
1144
+ * external system's id. It is not decoration: in the proportional face the
1145
+ * digit 1, lowercase l and capital I are near-identical, and a column of
1146
+ * codes is exactly where someone reads a character at a time and copies it
1147
+ * somewhere that has to match. master-data's reference lists are the case
1148
+ * that forced it; every app with a code column had wrapped the value in a
1149
+ * `<code>` by hand and picked its own size.
1150
+ */
1151
+ mono?: boolean;
1000
1152
  }
1001
- declare function TableCell({ numeric, truncate, className, ...rest }: TableCellProps): react.JSX.Element;
1153
+ declare function TableCell({ numeric, truncate, mono, className, ...rest }: TableCellProps): react.JSX.Element;
1002
1154
  interface TableEmptyProps {
1003
1155
  /** Must match the table's column count, or the message will not span the width. */
1004
1156
  colSpan: number;
@@ -1016,20 +1168,27 @@ declare function TableCaption({ className, ...rest }: React.HTMLAttributes<HTMLT
1016
1168
  declare const Tabs: react.ForwardRefExoticComponent<RadixTabs.TabsProps & react.RefAttributes<HTMLDivElement>>;
1017
1169
  /** @deprecated Use `Tabs`. Kept so existing imports keep working. */
1018
1170
  declare const TabsRoot: react.ForwardRefExoticComponent<RadixTabs.TabsProps & react.RefAttributes<HTMLDivElement>>;
1019
- interface TabsListProps extends React.ComponentPropsWithoutRef<typeof RadixTabs.List> {
1020
- /**
1021
- * `pill` is a segmented control — a rounded tray with the active tab raised.
1022
- * `underline` is the page-level look: a row of tabs under a heading with the
1023
- * active one underscored.
1024
- *
1025
- * Defaults to `pill` because that is what the vendored shadcn TabsList
1026
- * rendered, and eleven apps use `<TabsList>` bare. Defaulting to `underline`
1027
- * would restyle every tab row in the fleet on adoption — a design decision
1028
- * dressed up as a migration. Opt into `underline` per call site.
1029
- */
1030
- variant?: 'pill' | 'underline';
1031
- }
1032
- declare const TabsList: react.ForwardRefExoticComponent<TabsListProps & react.RefAttributes<HTMLDivElement>>;
1171
+ /**
1172
+ * THERE IS ONE TAB LOOK: the segmented pill tray, with the active tab raised
1173
+ * on white.
1174
+ *
1175
+ * There were two. `underline` — a row of tabs under a heading with the active
1176
+ * one underscored — shipped alongside it as an opt-in for page-level strips,
1177
+ * and the fleet answered by never opting in. A sweep found exactly one caller
1178
+ * in one app (pm's Timeline sub-tabs), where its only effect was to make two
1179
+ * of the four strips on those pages disagree with the other two. Nine repos
1180
+ * are not on this package and carry their own vendored pill-only tabs;
1181
+ * master-data's twelve `TabSet` call sites and analytics' two all took the
1182
+ * default. A variant that one screen in the fleet used, and used to look
1183
+ * inconsistent with its neighbours, is not a variant — it is a way to get the
1184
+ * design wrong, so it is gone rather than deprecated.
1185
+ *
1186
+ * `data-variant="pill"` stays on the element. Nothing reads it as a choice any
1187
+ * more, but the stylesheet still selects on it, and rewriting every selector
1188
+ * to drop one attribute would risk the look this change is meant to preserve.
1189
+ */
1190
+ type TabsListProps = React.ComponentPropsWithoutRef<typeof RadixTabs.List>;
1191
+ declare const TabsList: react.ForwardRefExoticComponent<Omit<RadixTabs.TabsListProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
1033
1192
  interface TabsTriggerProps extends React.ComponentPropsWithoutRef<typeof RadixTabs.Trigger> {
1034
1193
  icon?: React.ReactNode;
1035
1194
  /** A count beside the label — rows in the tab, unread items. Hidden at zero. */
@@ -1050,7 +1209,6 @@ interface TabSetProps {
1050
1209
  value?: string;
1051
1210
  onValueChange?: (value: string) => void;
1052
1211
  defaultValue?: string;
1053
- variant?: 'pill' | 'underline';
1054
1212
  className?: string;
1055
1213
  }
1056
1214
  /**
@@ -1063,7 +1221,7 @@ interface TabSetProps {
1063
1221
  * `defaultValue` falls back to the first tab: Radix renders no panel at all
1064
1222
  * when neither is set, which reads as a blank screen.
1065
1223
  */
1066
- declare function TabSet({ tabs, value, onValueChange, defaultValue, variant, className }: TabSetProps): react.JSX.Element;
1224
+ declare function TabSet({ tabs, value, onValueChange, defaultValue, className }: TabSetProps): react.JSX.Element;
1067
1225
 
1068
1226
  interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {
1069
1227
  orientation?: 'horizontal' | 'vertical';
@@ -1425,6 +1583,137 @@ interface ListToolbarProps {
1425
1583
  */
1426
1584
  declare function ListToolbar({ search, filters, actions, className }: ListToolbarProps): react.JSX.Element;
1427
1585
 
1586
+ interface Breadcrumb {
1587
+ label: ReactNode;
1588
+ /**
1589
+ * Rendered as an `<a href>`. In a router app pass `render` instead — an
1590
+ * anchor inside a SPA reloads the document and throws away the client state
1591
+ * the crumb was supposed to return you to.
1592
+ */
1593
+ href?: string;
1594
+ /** Wraps the crumb's label — `(node) => <Link to="/parts">{node}</Link>`. */
1595
+ render?: (label: ReactNode) => ReactNode;
1596
+ }
1597
+ interface PageHeaderProps {
1598
+ title: ReactNode;
1599
+ /**
1600
+ * The line under the title. Named `description` because it is what the
1601
+ * majority of the fleet's copies called it; `subtitle` and `subhead` were
1602
+ * the same prop under other names.
1603
+ */
1604
+ description?: ReactNode;
1605
+ /** Right-aligned page actions. Never wraps under the title. */
1606
+ actions?: ReactNode;
1607
+ /** Trail above the title. Omit it on a top-level list — a one-crumb trail is noise. */
1608
+ breadcrumbs?: Breadcrumb[];
1609
+ /**
1610
+ * Renders a back control above the title. Router-free by construction: this
1611
+ * package takes no router dependency, so the caller supplies the navigation.
1612
+ */
1613
+ onBack?: () => void;
1614
+ backLabel?: ReactNode;
1615
+ /**
1616
+ * The heading level. `1` is right for a page; drop to `2` when the header
1617
+ * sits inside a page that already has an `<h1>` (a tab panel, a wizard step).
1618
+ * The rendered SIZE does not change with it — level is document structure,
1619
+ * not typography.
1620
+ */
1621
+ level?: 1 | 2 | 3;
1622
+ /** A meta row under the title — status badges, an id, a last-updated stamp. */
1623
+ children?: ReactNode;
1624
+ /** Draws the rule under the header. Off by default. */
1625
+ bordered?: boolean;
1626
+ className?: string;
1627
+ }
1628
+ /**
1629
+ * THE FIRST THING A USER SEES ON EVERY SCREEN, and the fleet had seven of it.
1630
+ *
1631
+ * ── Why this exists ───────────────────────────────────────────────────────
1632
+ *
1633
+ * The cross-repo audit found `PageHeader` implemented separately in six apps
1634
+ * plus an inline copy in a seventh, with **three different prop names for the
1635
+ * same subtitle** (`subtitle` / `description` / `rightSlot`), three heading
1636
+ * levels, four type sizes and three font weights. Two of them also portalled
1637
+ * their actions into the shell toolbar and two rendered them beside the title,
1638
+ * so "the actions" meant different places in different apps.
1639
+ *
1640
+ * Nothing about a title row is app-specific. It drifted because it was never
1641
+ * anybody's to own.
1642
+ *
1643
+ * ── The decisions this makes for a caller ─────────────────────────────────
1644
+ *
1645
+ * One size (`--cfi-ui-text-xl`, semibold), one description treatment, actions
1646
+ * right and `flex: none` so a long title never squeezes them onto a second
1647
+ * line, and the heading level decoupled from the size — a header inside a tab
1648
+ * panel should be an `<h2>` in the document outline and still look like the
1649
+ * page title, which is exactly the tradeoff the per-app copies got wrong in
1650
+ * both directions.
1651
+ *
1652
+ * ── What it deliberately does not do ──────────────────────────────────────
1653
+ *
1654
+ * It does not navigate. `onBack` is a callback and a breadcrumb takes a
1655
+ * `render` wrapper, because `ui` has no router dependency and should not
1656
+ * acquire one to draw a link. It does not portal: analytics and cpq teleport
1657
+ * their actions into the shell header, which is a shell concern and belongs in
1658
+ * whatever Tier 3 eventually owns `AppShell`, not in a title row.
1659
+ */
1660
+ declare function PageHeader({ title, description, actions, breadcrumbs, onBack, backLabel, level, children, bordered, className, }: PageHeaderProps): react.JSX.Element;
1661
+
1662
+ interface SelectionBarProps {
1663
+ /** How many rows are selected. At `0` the bar renders nothing — see below. */
1664
+ count: number;
1665
+ /**
1666
+ * The bulk actions. Normally `Button`s at `size="sm"`, left at the default
1667
+ * `variant="secondary"`; a destructive one takes `variant="danger"`.
1668
+ */
1669
+ children?: ReactNode;
1670
+ /** Clears the selection. The bar always offers this, on the right. */
1671
+ onClear?: () => void;
1672
+ clearLabel?: string;
1673
+ /**
1674
+ * How the count reads. Defaults to "{n} selected". Pass a function in an
1675
+ * i18n app, or to name the thing — `(n) => \`${n} parts selected\``.
1676
+ */
1677
+ label?: (count: number) => ReactNode;
1678
+ /** Greys out the whole bar while a bulk action is in flight. */
1679
+ busy?: boolean;
1680
+ /** `bar` sits inline above the table. `floating` docks at the bottom of the viewport. */
1681
+ variant?: 'bar' | 'floating';
1682
+ className?: string;
1683
+ }
1684
+ /**
1685
+ * WHAT YOU CAN DO WITH THE ROWS YOU TICKED.
1686
+ *
1687
+ * ── Why this exists ───────────────────────────────────────────────────────
1688
+ *
1689
+ * Six apps grew one: `BulkArchiveBar`, `BulkActions`, an inline
1690
+ * `{selected.size} selected` strip, and three variants that only appear once
1691
+ * the selection is non-empty but each decide that differently. The count
1692
+ * phrasing, the position of Clear, and whether the bar pushes the table down
1693
+ * or floats over it were all separate guesses.
1694
+ *
1695
+ * ── Self-hiding, deliberately ─────────────────────────────────────────────
1696
+ *
1697
+ * `count === 0` renders `null`, so a page mounts it unconditionally instead of
1698
+ * writing `{selected.size > 0 && <Bar/>}` on every list. That is not just
1699
+ * terser: the conditional is what drifts. Two of the six apps rendered an
1700
+ * empty bar at zero and reserved its height, so the table jumped by 44px the
1701
+ * first time anyone ticked a box.
1702
+ *
1703
+ * ── Clear is not an action ────────────────────────────────────────────────
1704
+ *
1705
+ * It sits apart from the bulk actions, on the right, because it is the only
1706
+ * control here that changes what is selected rather than what happens to it —
1707
+ * and because a Clear adjacent to Archive is a mis-click that is not undoable.
1708
+ *
1709
+ * ── Announcing ────────────────────────────────────────────────────────────
1710
+ *
1711
+ * `role="status"` with `aria-live="polite"`: a selection count that only
1712
+ * updates visually leaves a screen-reader user ticking boxes with no feedback
1713
+ * that anything is accumulating.
1714
+ */
1715
+ declare function SelectionBar({ count, children, onClear, clearLabel, label, busy, variant, className, }: SelectionBarProps): react.JSX.Element | null;
1716
+
1428
1717
  interface PagedRows<T> {
1429
1718
  /** The slice to render. */
1430
1719
  rows: T[];
@@ -1507,4 +1796,4 @@ declare function formatNumber(value: number | null | undefined, decimals?: numbe
1507
1796
  */
1508
1797
  declare function formatPercent(value: number | null | undefined, decimals?: number): string;
1509
1798
 
1510
- export { Accordion, AccordionContent, AccordionItem, type AccordionProps, AccordionRoot, type AccordionSection, AccordionTrigger, type AccordionTriggerProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, Badge, type BadgeProps, type BadgeTone, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, Card, CardBody, CardDescription, CardFooter, CardHeader, type CardHeaderProps, type CardProps, CardTitle, type CardTitleProps, Checkbox, type CheckboxProps, type ClassValue, Combobox, type ComboboxOption, type ComboboxProps, ComingSoon, type ComingSoonProps, ConfirmDialog, type ConfirmDialogProps, CountBadge, type CountBadgeProps, CreatableSelect, type CreatableSelectProps, Dialog, DialogBody, DialogClose, DialogContent, type DialogContentProps, DialogDescription, DialogFooter, DialogHeader, DialogPortal, DialogRoot, type DialogSize, DialogTitle, DialogTrigger, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, type FieldProps, Fieldset, type FieldsetProps, FilterBar, type FilterBarProps, type FilterSelect, type FilterToggle, type FilterValue, IconButton, type IconButtonProps, Input, type InputProps, type InputSize, Label, type LabelProps, ListToolbar, type ListToolbarProps, LoadingState, type LoadingStateProps, Menu, type MenuAction, MenuCheckboxItem, MenuContent, MenuGroup, MenuItem, type MenuItemProps, MenuLabel, type MenuProps, MenuRadioGroup, MenuRadioItem, MenuRoot, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, Modal, type ModalProps, type MoneyOptions, type PagedRows, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverClose, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverRoot, PopoverTrigger, Progress, type ProgressProps, ScrollArea, type ScrollAreaProps, SearchInput, type SearchInputProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, type SelectOption, type SelectProps, SelectRoot, SelectSeparator, SelectTrigger, type SelectTriggerProps, SelectValue, Separator, type SeparatorProps, Sheet, SheetBody, SheetClose, SheetContent, type SheetContentProps, SheetDescription, SheetFooter, SheetHeader, SheetPortal, SheetTitle, SheetTrigger, SideModal, Skeleton, type SkeletonProps, Slider, type SliderProps, type SortDirection, type SortState, SplitButton, type SplitButtonProps, Switch, type SwitchProps, type TabDefinition, TabSet, type TabSetProps, Table, TableBody, TableCaption, TableCell, type TableCellProps, TableEmpty, TableFoot, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, TableScroller, Tabs, TabsContent, TabsList, type TabsListProps, TabsRoot, TabsTrigger, type TabsTriggerProps, Textarea, type TextareaProps, type ToastOptions, ToastProvider, type ToastProviderProps, type ToastTone, ToggleGroup, type ToggleGroupProps, type ToggleOption, Tooltip, TooltipContent, type TooltipContentProps, type TooltipProps, TooltipProvider, TooltipRoot, TooltipTrigger, type UseSortStateResult, cn, formatDate, formatDateTime, formatMoney, formatNumber, formatPercent, useFieldControl, usePagedRows, useSortState, useToast };
1799
+ export { Accordion, AccordionContent, AccordionItem, type AccordionProps, AccordionRoot, type AccordionSection, AccordionTrigger, type AccordionTriggerProps, Alert, type AlertProps, type AlertTone, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, Badge, type BadgeProps, type BadgeTone, type Breadcrumb, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, Card, CardBody, CardDescription, CardFooter, CardHeader, type CardHeaderProps, type CardProps, CardTitle, type CardTitleProps, Checkbox, type CheckboxProps, type ClassValue, Combobox, type ComboboxOption, type ComboboxProps, ComingSoon, type ComingSoonProps, ConfirmDialog, type ConfirmDialogProps, CountBadge, type CountBadgeProps, CreatableSelect, type CreatableSelectProps, DataList, DataListItem, type DataListItemProps, type DataListProps, Dialog, DialogBody, DialogClose, DialogContent, type DialogContentProps, DialogDescription, DialogFooter, DialogHeader, DialogPortal, DialogRoot, type DialogSize, DialogTitle, DialogTrigger, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, type FieldProps, Fieldset, type FieldsetProps, FilterBar, type FilterBarProps, type FilterSelect, type FilterToggle, type FilterValue, IconButton, type IconButtonProps, Input, type InputProps, type InputSize, Label, type LabelProps, ListToolbar, type ListToolbarProps, LoadingState, type LoadingStateProps, Menu, type MenuAction, MenuCheckboxItem, MenuContent, MenuGroup, MenuItem, type MenuItemProps, MenuLabel, type MenuProps, MenuRadioGroup, MenuRadioItem, MenuRoot, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, Modal, type ModalProps, type MoneyOptions, PageHeader, type PageHeaderProps, type PagedRows, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverClose, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverRoot, PopoverTrigger, Progress, type ProgressProps, ScrollArea, type ScrollAreaProps, SearchInput, type SearchInputProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, type SelectOption, type SelectProps, SelectRoot, SelectSeparator, SelectTrigger, type SelectTriggerProps, SelectValue, SelectionBar, type SelectionBarProps, Separator, type SeparatorProps, Sheet, SheetBody, SheetClose, SheetContent, type SheetContentProps, SheetDescription, SheetFooter, SheetHeader, SheetPortal, SheetTitle, SheetTrigger, SideModal, Skeleton, type SkeletonProps, Slider, type SliderProps, type SortDirection, type SortState, SplitButton, type SplitButtonProps, Switch, type SwitchProps, type TabDefinition, TabSet, type TabSetProps, Table, TableBody, TableCaption, TableCell, type TableCellProps, TableEmpty, TableFoot, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, TableScroller, Tabs, TabsContent, TabsList, type TabsListProps, TabsRoot, TabsTrigger, type TabsTriggerProps, Textarea, type TextareaProps, type ToastOptions, ToastProvider, type ToastProviderProps, type ToastTone, ToggleGroup, type ToggleGroupProps, type ToggleOption, Tooltip, TooltipContent, type TooltipContentProps, type TooltipProps, TooltipProvider, TooltipRoot, TooltipTrigger, type UseSortStateResult, cn, formatDate, formatDateTime, formatMoney, formatNumber, formatPercent, useFieldControl, usePagedRows, useSortState, useToast };