@olundot/ui 0.20.0-next.1 → 0.20.0-next.10

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
@@ -3,9 +3,9 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
3
3
  import * as React from 'react';
4
4
  import { HTMLAttributes, ReactNode, SVGProps } from 'react';
5
5
  import { VariantProps } from 'class-variance-authority';
6
- import { LucideIcon } from 'lucide-react';
7
6
  import { Select as Select$1, Label as Label$1, Switch as Switch$1, Tabs as Tabs$1, Dialog as Dialog$1, DropdownMenu as DropdownMenu$1, Separator as Separator$1, Avatar as Avatar$1, Tooltip as Tooltip$1, Popover as Popover$1, Checkbox as Checkbox$1, RadioGroup as RadioGroup$1, ScrollArea as ScrollArea$1 } from 'radix-ui';
8
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
8
+ import { LucideIcon } from 'lucide-react';
9
9
 
10
10
  declare function cn(...inputs: ClassValue[]): string;
11
11
 
@@ -31,80 +31,74 @@ declare function useOlunTheme(): UseOlunThemeValue;
31
31
 
32
32
  type SurfaceLevel = "surface" | "canvas" | "raised";
33
33
 
34
- type ActionAppearance = 'filled' | 'outline' | 'ghost';
35
34
  type ActionTone = 'primary' | 'neutral' | 'danger';
36
35
  type FilledDefaultActionStyle = {
37
36
  appearance?: 'filled';
38
37
  tone?: ActionTone;
39
38
  } | {
40
- appearance: 'outline' | 'ghost';
39
+ appearance: 'outline';
40
+ tone?: 'neutral' | 'danger';
41
+ } | {
42
+ appearance: 'ghost';
41
43
  tone?: 'neutral';
42
44
  };
43
- type GhostDefaultActionStyle = {
45
+ type OutlineDefaultActionStyle = {
44
46
  appearance: 'filled';
45
47
  tone?: ActionTone;
46
48
  } | {
47
- appearance: 'outline' | 'ghost';
49
+ appearance?: 'outline';
50
+ tone?: 'neutral' | 'danger';
51
+ } | {
52
+ appearance: 'ghost';
48
53
  tone?: 'neutral';
54
+ };
55
+ type GhostDefaultActionStyle = {
56
+ appearance: 'filled';
57
+ tone?: ActionTone;
49
58
  } | {
50
- appearance?: never;
51
- tone: 'neutral';
59
+ appearance: 'outline';
60
+ tone?: 'neutral' | 'danger';
61
+ } | {
62
+ appearance?: 'ghost';
63
+ tone?: 'neutral';
52
64
  };
53
65
 
54
66
  declare const buttonCva: (props?: ({
55
- size?: "default" | "md" | "xs" | "sm" | "lg" | "xl" | "icon" | "icon-xs" | null | undefined;
56
- appearance?: "filled" | "outline" | "ghost" | null | undefined;
67
+ appearance?: "filled" | "outline" | "ghost" | "link" | null | undefined;
57
68
  tone?: "primary" | "neutral" | "danger" | null | undefined;
58
- variant?: "default" | "outline" | "ghost" | "primary" | "danger" | "emergency" | "subtle" | "destructive" | "secondary" | "link" | null | undefined;
69
+ size?: "default" | "md" | "xs" | "sm" | "lg" | "xl" | null | undefined;
59
70
  } & class_variance_authority_types.ClassProp) | undefined) => string;
60
71
  type ButtonVariantsOptions = Parameters<typeof buttonCva>[0];
61
72
  declare function buttonVariants(options?: ButtonVariantsOptions): string;
62
- type ButtonVariant = NonNullable<VariantProps<typeof buttonVariants>['variant']>;
63
73
  type ButtonSize = NonNullable<VariantProps<typeof buttonVariants>['size']>;
64
- type ButtonStyleProps = (FilledDefaultActionStyle & {
65
- /**
66
- * @deprecated Use `appearance` × `tone` instead. Removed in 0.20.
67
- */
68
- variant?: never;
69
- }) | {
70
- /**
71
- * @deprecated Use `appearance` × `tone`: `primary`/`default` → filled + primary ·
72
- * `secondary`/`outline`/`subtle` → outline + neutral · `ghost` → ghost + neutral ·
73
- * `danger`/`destructive`/`emergency` → filled + danger · `link` → no Button replacement
74
- * (a link component is planned). Removed in 0.20.
75
- */
76
- variant?: ButtonVariant | null;
74
+ type ButtonStyleProps = FilledDefaultActionStyle | {
75
+ appearance: 'link';
76
+ tone?: 'primary' | 'danger';
77
77
  };
78
78
  type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & ButtonStyleProps & {
79
- /** `icon`·`icon-xs` are deprecated — use IconButton (`lg`·`md`). */
80
79
  size?: ButtonSize | null;
80
+ /**
81
+ * Renders the single child element (e.g. Next `Link`) instead of a `<button>`. Ref, `href` and
82
+ * anchor-typed events belong on that child; Button's own ref and handlers stay typed for
83
+ * `HTMLButtonElement`. Disabled or loading, the child stays in place with its `href` but takes
84
+ * `aria-disabled`, leaves the tab order and swallows clicks.
85
+ */
81
86
  asChild?: boolean;
82
- /** @deprecated Use IconButton with `label` (or children). Removed in 0.20. */
83
- leadingIcon?: LucideIcon;
84
- /** @deprecated Use IconButton with `label` and `iconPosition="end"`. Removed in 0.20. */
85
- trailingIcon?: LucideIcon;
86
87
  loading?: boolean;
88
+ /** Trailing ▾ for a menu trigger. The trigger (DropdownMenu etc.) supplies `aria-haspopup`. */
89
+ menuIndicator?: boolean;
87
90
  };
88
91
  declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
89
92
 
90
- type CopyButtonProps = Omit<ButtonProps, 'children' | 'leadingIcon' | 'loading' | 'size' | 'trailingIcon' | 'variant'> & {
93
+ type CopyButtonProps = Omit<ButtonProps, 'appearance' | 'children' | 'loading' | 'size' | 'tone' | 'variant'> & OutlineDefaultActionStyle & {
91
94
  value: string;
92
95
  label?: React.ReactNode;
93
96
  copiedLabel?: React.ReactNode;
94
97
  onCopied?: () => void;
95
98
  size?: ButtonSize;
96
- variant?: ButtonVariant;
97
99
  duration?: number;
98
100
  };
99
- declare const CopyButton: React.ForwardRefExoticComponent<Omit<ButtonProps, "size" | "variant" | "children" | "leadingIcon" | "trailingIcon" | "loading"> & {
100
- value: string;
101
- label?: React.ReactNode;
102
- copiedLabel?: React.ReactNode;
103
- onCopied?: () => void;
104
- size?: ButtonSize;
105
- variant?: ButtonVariant;
106
- duration?: number;
107
- } & React.RefAttributes<HTMLButtonElement>>;
101
+ declare const CopyButton: React.ForwardRefExoticComponent<CopyButtonProps & React.RefAttributes<HTMLButtonElement>>;
108
102
 
109
103
  declare const inputVariants: (props?: ({
110
104
  size?: "md" | "sm" | "lg" | null | undefined;
@@ -185,19 +179,25 @@ declare const FileUploadZone: React.ForwardRefExoticComponent<FileUploadZoneProp
185
179
 
186
180
  type AlertVariant = 'info' | 'success' | 'warning' | 'error';
187
181
  type AlertEmphasis = 'subtle' | 'strong';
188
- type InlineAlertSurface = 'filled' | 'plain';
182
+ type AlertMarker = 'icon' | 'dot';
189
183
  interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {
190
184
  variant?: AlertVariant;
185
+ /** `subtle` (default) or `strong` (status-colored surface). */
191
186
  emphasis?: AlertEmphasis;
192
- title?: ReactNode;
193
- children: ReactNode;
187
+ /** Status mark before the title. `icon` (default) is the status icon, `dot` a small status dot. */
188
+ marker?: AlertMarker;
189
+ title: ReactNode;
190
+ /** Description under the title. Without it the alert is one line, centered. */
191
+ children?: ReactNode;
192
+ /** Control at the end of the title line, before the dismiss button. Narrow alerts put it under the text. */
193
+ action?: ReactNode;
194
194
  onDismiss?: () => void;
195
195
  }
196
196
  declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
197
197
  interface InlineAlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
198
198
  variant?: AlertVariant;
199
- emphasis?: AlertEmphasis;
200
- surface?: InlineAlertSurface;
199
+ /** Status mark before the text. `icon` (default) is the status icon, `dot` a small status dot. */
200
+ marker?: AlertMarker;
201
201
  children: ReactNode;
202
202
  }
203
203
  declare const InlineAlert: React.ForwardRefExoticComponent<InlineAlertProps & React.RefAttributes<HTMLDivElement>>;
@@ -285,6 +285,8 @@ interface SelectProps extends Omit<React.ComponentPropsWithoutRef<typeof Select$
285
285
  className?: string;
286
286
  id?: string;
287
287
  label?: React.ReactNode;
288
+ /** Label position: above the field by default, or inside the trigger before its value. */
289
+ labelPlacement?: "top" | "inline";
288
290
  /**
289
291
  * Pre-input hint text (always visible in default state). Hidden when
290
292
  * `state` is "error" or "success" — `message` takes over.
@@ -337,7 +339,8 @@ interface SelectProps extends Omit<React.ComponentPropsWithoutRef<typeof Select$
337
339
  selectVariant?: SelectVariant;
338
340
  /**
339
341
  * When `true`, prepends a reset option to the dropdown. Selecting it fires
340
- * `onValueChange("")` and restores the trigger placeholder. Default `false`.
342
+ * `onValueChange("")` and restores the trigger placeholder. Default `true`,
343
+ * or `false` when `labelPlacement="inline"`. An explicit value takes precedence.
341
344
  *
342
345
  * Eliminates the need for callers to manage a sentinel value themselves —
343
346
  * use `value=""` + `onValueChange` with `clearable` for the standard pattern.
@@ -422,6 +425,13 @@ interface SwitchProps extends Omit<React.ComponentPropsWithoutRef<typeof Switch$
422
425
  * Use for pending async preference changes (e.g., saving remote setting).
423
426
  */
424
427
  loading?: boolean;
428
+ /**
429
+ * Where the label sits relative to the track. `end` (default) puts the track first,
430
+ * `start` puts the label first and pushes the track to the row's right edge.
431
+ */
432
+ labelPlacement?: "end" | "start";
433
+ /** Fills the parent's width. With `labelPlacement="start"` the track ends at the right edge. */
434
+ fullWidth?: boolean;
425
435
  }
426
436
  declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
427
437
 
@@ -554,8 +564,9 @@ declare const Breadcrumb: React.ForwardRefExoticComponent<BreadcrumbProps & Reac
554
564
 
555
565
  interface DataLayoutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
556
566
  /** Top block — typically a PageHeader. Owns the page's single heading and
557
- * page-level actions. */
558
- header: React.ReactNode;
567
+ * page-level actions. Omit when the app shell already renders the page
568
+ * header; no header block or gap is rendered then. */
569
+ header?: React.ReactNode;
559
570
  /** Filter row — typically a FilterToolbar (search · filters · result summary). */
560
571
  toolbar?: React.ReactNode;
561
572
  /** The list body — typically a DataTable or any list/grid. */
@@ -612,6 +623,7 @@ declare const tabsBadgeVariants: (props?: class_variance_authority_types.ClassPr
612
623
  interface TabItem {
613
624
  key: string;
614
625
  label: string;
626
+ /** 라벨 뒤 건수 알약입니다. 0도 보이고, 1000부터는 `999+`로 보입니다. 접근 이름에는 실제 수가 들어갑니다. */
615
627
  badge?: number;
616
628
  disabled?: boolean;
617
629
  }
@@ -690,11 +702,11 @@ declare const FormLayout: React.ForwardRefExoticComponent<FormLayoutProps & Reac
690
702
  type OverlayScrim = "blur" | "dim";
691
703
 
692
704
  /**
693
- * @deprecated The structured Dialog (`title`) is a bottom sheet below 900px on its own.
705
+ * @deprecated The structured Dialog (`title`) is a bottom sheet below 1024px on its own.
694
706
  *
695
- * Where a dialog sits below 900px (the DS mobile band, same as Sheet `mobileSide`).
707
+ * Where a dialog sits below 1024px (the DS mobile band, same as Sheet `mobileSide`).
696
708
  * - `"center"` (default): the centered card at every width.
697
- * - `"sheet"`: a bottom sheet below 900px — pinned to the bottom edge, full width, top corners
709
+ * - `"sheet"`: a bottom sheet below 1024px — pinned to the bottom edge, full width, top corners
698
710
  * rounded, height capped with its own scroll, sliding in on the Sheet bottom keyframes.
699
711
  * Pure CSS, so SSR and hydration render the same tree at every width (no matchMedia swap).
700
712
  */
@@ -704,7 +716,7 @@ type DialogSize = "sm" | "md" | "lg";
704
716
  /**
705
717
  * Structured Dialog (spec §3.2): a center window for forms, pickers and long content. X + footer,
706
718
  * outside click does not close, Escape does (not while submitting), the body scrolls inside the max
707
- * height, a bottom sheet below 900px (OVERLAY_POLICY.dialog).
719
+ * height, a bottom sheet below 1024px (OVERLAY_POLICY.dialog).
708
720
  */
709
721
  interface DialogProps {
710
722
  open: boolean;
@@ -745,7 +757,7 @@ type DialogRootProps = React.ComponentProps<typeof Dialog$1.Root> & {
745
757
  };
746
758
  declare function Dialog(props: DialogProps | DialogRootProps): react_jsx_runtime.JSX.Element;
747
759
  declare const DialogTrigger: React.ForwardRefExoticComponent<Dialog$1.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
748
- declare const DialogPortal: React.FC<Dialog$1.DialogPortalProps>;
760
+ declare function DialogPortal(props: React.ComponentProps<typeof Dialog$1.Portal>): react_jsx_runtime.JSX.Element;
749
761
  declare const DialogClose: React.ForwardRefExoticComponent<Dialog$1.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
750
762
  declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<Dialog$1.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
751
763
  /** Scrim preset; wins over `<html data-scrim>`. Default: the root preset, else `--scrim`. */
@@ -755,9 +767,9 @@ declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<Dialog$1.Dialo
755
767
  declare const DialogContent: React.ForwardRefExoticComponent<Omit<Dialog$1.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
756
768
  showCloseButton?: boolean;
757
769
  /**
758
- * @deprecated The structured Dialog (`title`) is a bottom sheet below 900px on its own.
770
+ * @deprecated The structured Dialog (`title`) is a bottom sheet below 1024px on its own.
759
771
  *
760
- * Below 900px: `"center"` card (default) or `"sheet"` — see {@link DialogMobilePresentation}.
772
+ * Below 1024px: `"center"` card (default) or `"sheet"` — see {@link DialogMobilePresentation}.
761
773
  */
762
774
  mobilePresentation?: DialogMobilePresentation;
763
775
  /** Scrim preset; wins over `<html data-scrim>`. Default: the root preset, else `--scrim`. */
@@ -792,7 +804,7 @@ declare const DialogEyebrow: React.ForwardRefExoticComponent<React.HTMLAttribute
792
804
  * 자체 head/body/foot 슬롯을 가진 ModalShell 등 커스텀 구현용.
793
805
  * DialogPortal + DialogOverlay와 함께 수동으로 조합해서 사용.
794
806
  */
795
- declare const DialogRawContent: React.ForwardRefExoticComponent<Dialog$1.DialogContentProps & React.RefAttributes<HTMLDivElement>>;
807
+ declare const DialogRawContent: React.ForwardRefExoticComponent<Omit<Dialog$1.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
796
808
 
797
809
  interface FormModalProps {
798
810
  open: boolean;
@@ -809,7 +821,7 @@ interface FormModalProps {
809
821
  /** Rendered at the top of the body. */
810
822
  status?: React.ReactNode;
811
823
  /**
812
- * @deprecated Ignored. Dialog is a bottom sheet below 900px on its own.
824
+ * @deprecated Ignored. Dialog is a bottom sheet below 1024px on its own.
813
825
  */
814
826
  mobilePresentation?: DialogMobilePresentation;
815
827
  }
@@ -832,7 +844,7 @@ interface InfoModalProps {
832
844
  /** @deprecated Ignored. Content that needs the wide box belongs in Dialog. */
833
845
  width?: "default" | "wide";
834
846
  footer?: React.ReactNode;
835
- /** @deprecated Ignored. AlertDialog stays a centered card below 900px. */
847
+ /** @deprecated Ignored. AlertDialog stays a centered card below 1024px. */
836
848
  mobilePresentation?: DialogMobilePresentation;
837
849
  }
838
850
  /**
@@ -856,6 +868,103 @@ interface FilterToolbarProps extends React.HTMLAttributes<HTMLDivElement> {
856
868
  }
857
869
  declare const FilterToolbar: React.ForwardRefExoticComponent<FilterToolbarProps & React.RefAttributes<HTMLDivElement>>;
858
870
 
871
+ /** Props an item icon receives: a Lucide icon or any component taking `size` and `strokeWidth`. */
872
+ type ActionMenuIconProps = {
873
+ size?: number | string;
874
+ strokeWidth?: number | string;
875
+ className?: string;
876
+ "aria-hidden"?: boolean;
877
+ };
878
+ interface ActionMenuItem {
879
+ id: string;
880
+ label: string;
881
+ /** Leading icon. */
882
+ icon?: React.ComponentType<ActionMenuIconProps>;
883
+ /** Secondary line under the label (menu sheet only). */
884
+ description?: string;
885
+ /** Danger color (DropdownMenuItem `variant="destructive"`, the sheet row's error color). */
886
+ destructive?: boolean;
887
+ /** Not focusable and runs nothing. */
888
+ disabled?: boolean;
889
+ /**
890
+ * Why the item cannot run now. The item shows faded but stays in the focus order like the other
891
+ * items, named by its label alone; this line sits under the label at every width as its
892
+ * description (`aria-describedby`), and choosing the item runs nothing and leaves the menu open.
893
+ * Shown instead of `description`; wins over `disabled`.
894
+ */
895
+ disabledReason?: string;
896
+ /** Runs after the menu has closed and focus is back on the trigger. */
897
+ onSelect: () => void;
898
+ }
899
+ interface ActionMenuGroup {
900
+ id: string;
901
+ /** Group heading. */
902
+ label?: string;
903
+ items: ActionMenuItem[];
904
+ }
905
+ interface ActionMenuBaseProps {
906
+ /** The button that opens the menu, e.g. an IconButton with an `aria-label`. */
907
+ trigger: React.ReactElement;
908
+ /** Heading of the menu sheet below 1024px (also its accessible name). The dropdown shows none. */
909
+ title?: string;
910
+ /** Line under the heading, menu sheet only (from ActionSheet). */
911
+ description?: string;
912
+ /** Controlled open state (optional). */
913
+ open?: boolean;
914
+ onOpenChange?: (open: boolean) => void;
915
+ /** Accessible name of the menu sheet's screen-reader-only close button. Default '닫기'. */
916
+ closeLabel?: string;
917
+ }
918
+ type ActionMenuProps = ActionMenuBaseProps & ({
919
+ items: ActionMenuItem[];
920
+ groups?: never;
921
+ } | {
922
+ /** Items in groups, with a separator between groups. Use instead of `items`. */
923
+ groups: ActionMenuGroup[];
924
+ items?: never;
925
+ });
926
+ declare function ActionMenu({ trigger, title, description, open: openProp, onOpenChange, closeLabel, items, groups, }: ActionMenuProps): react_jsx_runtime.JSX.Element;
927
+
928
+ /** The card's ⋮ menu: the same items as the desktop row menu. */
929
+ interface ListCardActions {
930
+ items: readonly ActionMenuItem[];
931
+ /** Accessible name of the ⋮ button, e.g. the desktop ⋮ label. */
932
+ label: string;
933
+ }
934
+ interface ListCardProps {
935
+ title: React.ReactNode;
936
+ /**
937
+ * Up to two meta groups; each is one node or a list of values. A group is one line with its
938
+ * values 12px apart; values wrap to the next line whole.
939
+ */
940
+ meta?: readonly [React.ReactNode, React.ReactNode?];
941
+ /** One status badge at the bottom row's left. */
942
+ status?: React.ReactNode;
943
+ /** On the bottom row, after `status` or alone at its left. */
944
+ caption?: React.ReactNode;
945
+ leading?: React.ReactNode;
946
+ /** Optional value (score, count) at the right of the top line, before the ⋮ or the chevron. */
947
+ value?: React.ReactNode;
948
+ /**
949
+ * The icon at the top right. With `actions` it moves to the bottom right and the card is at
950
+ * least 84px tall, so the two 44px hit areas do not overlap.
951
+ */
952
+ trailing?: 'chevron' | 'none' | React.ReactNode;
953
+ /**
954
+ * ⋮ menu at the top right. With `href` or `onClick` the title becomes the link or button and
955
+ * its ::after covers the card, so the ⋮ button is never inside it.
956
+ */
957
+ actions?: ListCardActions;
958
+ href?: string;
959
+ linkComponent?: React.ElementType;
960
+ linkProps?: Record<string, unknown>;
961
+ onClick?: () => void;
962
+ /** Prefix for the `data-slot` of each part (`<slot>-title`, `<slot>-meta1`, …). */
963
+ slot?: string;
964
+ className?: string;
965
+ }
966
+ declare function ListCard({ title, meta, status, caption, leading, value, trailing, actions, href, linkComponent, linkProps, onClick, slot, className, }: ListCardProps): react_jsx_runtime.JSX.Element;
967
+
859
968
  declare const dataTableVariants: (props?: ({
860
969
  density?: "compact" | "standard" | null | undefined;
861
970
  surface?: SurfaceLevel | null | undefined;
@@ -866,12 +975,20 @@ declare const dataTableRowVariants: (props?: ({
866
975
  } & class_variance_authority_types.ClassProp) | undefined) => string;
867
976
  interface DataTableColumn<T> {
868
977
  key: string;
869
- header: React.ReactNode;
978
+ /** Column name as text. It is also the name of the column's cells for screen readers. */
979
+ header: string;
980
+ /** Hides the header text on screen and keeps it as the accessible name. */
981
+ hideHeader?: boolean;
870
982
  width?: string;
871
983
  align?: 'left' | 'right' | 'center';
872
984
  render?: (row: T) => React.ReactNode;
873
985
  tabular?: boolean;
874
986
  sortable?: boolean;
987
+ /**
988
+ * Cells of this column wrap onto several lines (at word boundaries) instead of being cut with
989
+ * an ellipsis; the row grows to its tallest cell. Not with `virtual`: virtual rows share one height.
990
+ */
991
+ wrap?: boolean;
875
992
  }
876
993
  interface DataTableLinkProps {
877
994
  href: string;
@@ -908,11 +1025,61 @@ interface DataTableSort {
908
1025
  key: string;
909
1026
  dir: 'asc' | 'desc';
910
1027
  }
911
- interface DataTableProps<T> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof dataTableVariants> {
1028
+ /** One card meta group: up to two values on one line, 12px apart. */
1029
+ type DataTableMobileMetaLine = readonly [React.ReactNode, React.ReactNode?];
1030
+ type DataTableMobileCardName = {
1031
+ title: string | number;
1032
+ /** Accessible name of the card (`listitem`). Defaults to the title text. */
1033
+ ariaLabel?: string;
1034
+ } | {
1035
+ title: React.ReactNode;
1036
+ /** Accessible name of the card (`listitem`). */
1037
+ ariaLabel: string;
1038
+ };
1039
+ /** What one row shows as a card below the table breakpoint. */
1040
+ type DataTableMobileCardContent = DataTableMobileCardName & {
1041
+ leading?: React.ReactNode;
1042
+ /** Up to two meta groups under the title, one line each. */
1043
+ meta?: readonly [DataTableMobileMetaLine, DataTableMobileMetaLine?];
1044
+ /** One status badge at the bottom row's left. */
1045
+ status?: React.ReactNode;
1046
+ /** On the bottom row, after `status` or alone at its left. */
1047
+ date?: React.ReactNode;
1048
+ /** Optional value at the right of the card's top line, before the ⋮ or the chevron. */
1049
+ value?: React.ReactNode;
1050
+ /**
1051
+ * ⋮ menu at the card's top right (a menu sheet below 1024px). `label` names the ⋮ button —
1052
+ * pass the desktop ⋮ label. On a navigating card the chevron moves to the bottom right.
1053
+ * With the table's `rowActions` the card takes that menu instead and this is ignored.
1054
+ */
1055
+ actions?: ListCardActions;
1056
+ };
1057
+ /** A row's menu: items, or groups with a separator between them. An empty list draws no ⋮. */
1058
+ type DataTableRowActions = readonly ActionMenuItem[] | readonly ActionMenuGroup[];
1059
+ interface DataTableBaseProps<T> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>, Omit<VariantProps<typeof dataTableVariants>, 'density'> {
1060
+ /**
1061
+ * @deprecated No effect: rows and header look the same for every value. Remove it; it will be
1062
+ * dropped in a breaking release.
1063
+ */
1064
+ density?: VariantProps<typeof dataTableVariants>['density'];
912
1065
  columns: DataTableColumn<T>[];
913
1066
  data: T[];
914
1067
  keyField: keyof T;
1068
+ /**
1069
+ * Maps a row to its card below the table breakpoint. Navigation, expanding, selection and
1070
+ * the chevron come from the table (`rowHref`, `linkComponent`, `onRowClick`,
1071
+ * `renderExpanded`, `selectable`): the card title becomes the link or button and its ::after
1072
+ * covers the card, so the checkbox and the ⋮ stay beside it, never inside.
1073
+ * With `virtual`, keep it stable (module function or `useCallback`) like `columns`.
1074
+ */
1075
+ getMobileCardContent: (row: T) => DataTableMobileCardContent;
915
1076
  selectable?: boolean;
1077
+ /**
1078
+ * With `selectable`, `false` blocks a row's selection: its checkbox is disabled, it is never
1079
+ * drawn selected or passed to `onSelectionChange`, and select-all counts only the other rows.
1080
+ * Navigating, expanding and the row menu still work.
1081
+ */
1082
+ isRowSelectable?: (row: T) => boolean;
916
1083
  selectedIds?: Set<string>;
917
1084
  onSelectionChange?: (ids: Set<string>) => void;
918
1085
  /** Unit in the screen-reader selection message — `12명 선택됨`. Defaults to `개`. */
@@ -925,11 +1092,30 @@ interface DataTableProps<T> extends Omit<React.HTMLAttributes<HTMLDivElement>, '
925
1092
  */
926
1093
  announceSelection?: boolean;
927
1094
  activeRowId?: string;
928
- onRowContextMenu?: (rowId: string, event: React.MouseEvent) => void;
929
1095
  sortBy?: DataTableSort;
1096
+ /**
1097
+ * The order the rows fall back to when the sort is cleared. Clicking its column
1098
+ * flips between its direction and the opposite one, never to a clear that looks
1099
+ * the same. Without `sortBy`, the header and the sort button show this sort.
1100
+ */
1101
+ defaultSort?: DataTableSort;
930
1102
  onSortChange?: (key: string, dir: 'asc' | 'desc' | null) => void;
931
1103
  loading?: boolean;
932
1104
  emptyState?: React.ReactNode;
1105
+ skeletonRowCount?: number;
1106
+ /**
1107
+ * Background level for the table container. Header, selected rows, loading,
1108
+ * and empty states keep their own state styling.
1109
+ */
1110
+ surface?: SurfaceLevel;
1111
+ /**
1112
+ * Bottom of the table frame, under the rows or cards in both layouts — a `TablePagination`.
1113
+ * The line above it is drawn only when the footer renders something.
1114
+ */
1115
+ footer?: React.ReactNode;
1116
+ }
1117
+ /** Rows that navigate, or a long virtual list. No expanded rows. */
1118
+ interface DataTableNavigationProps<T> {
933
1119
  rowHref?: (row: T) => string;
934
1120
  /**
935
1121
  * Renders `rowHref` as a real link — e.g. Next `Link` — instead of
@@ -944,22 +1130,60 @@ interface DataTableProps<T> extends Omit<React.HTMLAttributes<HTMLDivElement>, '
944
1130
  * `rowHref` full-page `window.location.assign` — e.g. `router.push`.
945
1131
  */
946
1132
  onRowClick?: (row: T, event: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>) => void;
947
- skeletonRowCount?: number;
948
1133
  /**
949
- * Virtual scrolling for long, continuously loaded lists (opt-in). Rows must
950
- * share one fixed height (measured from the first rendered row). Only the
951
- * visible layout — table or cards — renders rows, and only those near the
952
- * viewport; rows are memoized. Works with any scroll container (window or an
1134
+ * Virtual scrolling for long, continuously loaded lists (opt-in). Table rows must
1135
+ * share one fixed height (measured from the first rendered row); cards are
1136
+ * measured one by one, and unmeasured cards are estimated from the measured
1137
+ * average. Only the visible layout — table or cards — renders rows, and only
1138
+ * those near the viewport; rows are memoized. Works with any scroll container (window or an
953
1139
  * app-shell `overflow-y-auto` main). Header "select all" still covers every
954
- * loaded row. Browser find (Ctrl+F) cannot see rows outside the window.
1140
+ * loaded row that can be selected. Browser find (Ctrl+F) cannot see rows outside the window.
955
1141
  */
956
1142
  virtual?: boolean | DataTableVirtualOptions;
1143
+ renderExpanded?: never;
1144
+ getExpandLabel?: never;
1145
+ expandedIds?: never;
1146
+ onExpandedChange?: never;
1147
+ }
1148
+ /**
1149
+ * Rows that expand in place. Not with navigation (`rowHref`, `linkComponent`, `onRowClick`) or
1150
+ * `virtual`: virtual rows share one fixed height.
1151
+ */
1152
+ interface DataTableExpandProps<T> {
957
1153
  /**
958
- * Background level for the table container. Header, selected rows, loading,
959
- * and empty states keep their own state styling.
1154
+ * Content drawn under the row, full width — below the row from 1024px, inside the card below
1155
+ * it. Giving it turns on expanding: a 32px button column at the table's end, and the card
1156
+ * title as the toggle. Rendered on first open and kept, so closing animates.
960
1157
  */
961
- surface?: SurfaceLevel;
1158
+ renderExpanded: (row: T) => React.ReactNode;
1159
+ /** Accessible name of the expand button and of the card title button, e.g. `3번 펼치기`. */
1160
+ getExpandLabel: (row: T) => string;
1161
+ /** Expanded row ids (`keyField` values), several at once. Without it the table keeps the state. */
1162
+ expandedIds?: Set<string>;
1163
+ onExpandedChange?: (ids: Set<string>) => void;
1164
+ rowHref?: never;
1165
+ linkComponent?: never;
1166
+ onRowClick?: never;
1167
+ virtual?: never;
962
1168
  }
1169
+ /**
1170
+ * The row menu, one list for the ⋮ column from 1024px, the card ⋮ below it, and a right click
1171
+ * on the row. Not with `onRowContextMenu`: the table opens the right-click menu itself.
1172
+ */
1173
+ interface DataTableRowActionsProps<T> {
1174
+ /** Items or groups of the row's menu. An empty list draws no ⋮ and keeps the column. */
1175
+ rowActions: (row: T) => DataTableRowActions;
1176
+ /** Accessible name of the row's ⋮ button, e.g. `김지수 더보기`. */
1177
+ getRowActionsLabel: (row: T) => string;
1178
+ onRowContextMenu?: never;
1179
+ }
1180
+ /** No row menu from the table; a right click is the consumer's (`onRowContextMenu`). */
1181
+ interface DataTableOwnContextMenuProps {
1182
+ rowActions?: never;
1183
+ getRowActionsLabel?: never;
1184
+ onRowContextMenu?: (rowId: string, event: React.MouseEvent) => void;
1185
+ }
1186
+ type DataTableProps<T> = DataTableBaseProps<T> & (DataTableNavigationProps<T> | DataTableExpandProps<T>) & (DataTableRowActionsProps<T> | DataTableOwnContextMenuProps);
963
1187
  type DataTableComponent = (<T>(props: DataTableProps<T> & React.RefAttributes<HTMLDivElement>) => React.ReactElement | null) & {
964
1188
  displayName?: string;
965
1189
  };
@@ -1020,9 +1244,10 @@ interface BulkActionBarProps extends React.HTMLAttributes<HTMLDivElement> {
1020
1244
  onClear: () => void;
1021
1245
  emptyHint?: React.ReactNode;
1022
1246
  /**
1023
- * `floating` (default) — pill stuck to the bottom of the list, as before.
1247
+ * `floating` (default) — pill stuck to the bottom of the list.
1024
1248
  * `inline` — full-width band stuck to the top, placed where the status line sits
1025
1249
  * under the toolbar. Render it BEFORE the list so it comes first in tab order.
1250
+ * Deprecated: `inline` is removed in the next minor.
1026
1251
  */
1027
1252
  placement?: "floating" | "inline";
1028
1253
  /** Count unit — `12명 선택됨`. Defaults to `개`. */
@@ -1032,6 +1257,8 @@ interface BulkActionBarProps extends React.HTMLAttributes<HTMLDivElement> {
1032
1257
  /**
1033
1258
  * Inline only: a shorter `summary` (e.g. "모두 선택") swapped in when the band is too
1034
1259
  * narrow to show `summary` on one line. Without it, `summary` is clipped, never wrapped.
1260
+ *
1261
+ * @deprecated Only `placement="inline"` uses it; removed together with `inline` in the next minor.
1035
1262
  */
1036
1263
  compactSummary?: React.ReactNode;
1037
1264
  /**
@@ -1089,7 +1316,7 @@ interface ConfirmDialogProps {
1089
1316
  /** Keeps the confirm button disabled (e.g. until the typed count matches). */
1090
1317
  confirmDisabled?: boolean;
1091
1318
  /**
1092
- * @deprecated Ignored. AlertDialog stays a centered card below 900px.
1319
+ * @deprecated Ignored. AlertDialog stays a centered card below 1024px.
1093
1320
  */
1094
1321
  mobilePresentation?: DialogMobilePresentation;
1095
1322
  /** Scrim preset; wins over `<html data-scrim>`. Default: the root preset, else `--scrim`. */
@@ -1097,7 +1324,7 @@ interface ConfirmDialogProps {
1097
1324
  }
1098
1325
  /**
1099
1326
  * @deprecated Use AlertDialog. ConfirmDialog is a thin wrapper over it: the surface has role
1100
- * `alertdialog`, an outside click does not close it, and it stays a centered card below 900px.
1327
+ * `alertdialog`, an outside click does not close it, and it stays a centered card below 1024px.
1101
1328
  */
1102
1329
  declare function ConfirmDialog({ open, onOpenChange, title, description, tone, confirmLabel, cancelLabel, onConfirm, loading, children, confirmDisabled, scrim, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
1103
1330
 
@@ -1176,11 +1403,11 @@ type SheetMotionConfig = {
1176
1403
  duration?: SheetMotionDuration;
1177
1404
  easing?: SheetMotionEasing;
1178
1405
  };
1179
- /** Structured Sheet width from 900px: 480 · 720 · viewport minus `--space-8`. */
1406
+ /** Structured Sheet width from 1024px: 480 · 720 · viewport minus `--space-8`. */
1180
1407
  type SheetSize = "md" | "lg" | "full";
1181
1408
  /**
1182
1409
  * Structured Sheet (spec §3.3): a side surface for supporting work without leaving the page. X,
1183
- * outside click and Escape close, the body scrolls, a bottom sheet below 900px (OVERLAY_POLICY.sheet).
1410
+ * outside click and Escape close, the body scrolls, a bottom sheet below 1024px (OVERLAY_POLICY.sheet).
1184
1411
  */
1185
1412
  interface SheetProps {
1186
1413
  open: boolean;
@@ -1193,9 +1420,9 @@ interface SheetProps {
1193
1420
  caption?: React.ReactNode;
1194
1421
  /** Header controls before the X, e.g. an expand toggle. */
1195
1422
  headerActions?: React.ReactNode;
1196
- /** Edge from 900px. Default `"right"`. Below 900px it is a bottom sheet. */
1423
+ /** Edge from 1024px. Default `"right"`. Below 1024px it is a bottom sheet. */
1197
1424
  side?: "right" | "left";
1198
- /** Width from 900px. Default `"md"`. */
1425
+ /** Width from 1024px. Default `"md"`. */
1199
1426
  size?: SheetSize;
1200
1427
  /** Body. Scrolls inside the sheet. */
1201
1428
  children: React.ReactNode;
@@ -1203,7 +1430,7 @@ interface SheetProps {
1203
1430
  footer?: React.ReactNode;
1204
1431
  /** Accessible name of the X. Default '닫기'. */
1205
1432
  closeLabel?: string;
1206
- /** Side panel motion from 900px (`false`: none). Same as SheetContent `motion`. */
1433
+ /** Side panel motion from 1024px (`false`: none). Same as SheetContent `motion`. */
1207
1434
  motion?: SheetMotionConfig | false;
1208
1435
  /** Scrim preset; wins over `<html data-scrim>`. */
1209
1436
  scrim?: OverlayScrim;
@@ -1223,10 +1450,10 @@ declare function SheetClose({ ...props }: React.ComponentProps<typeof Dialog$1.C
1223
1450
  declare function SheetContent({ className, children, side, mobileSide, motion, showCloseButton, scrim, style, onOpenAutoFocus, onCloseAutoFocus, ...props }: React.ComponentProps<typeof Dialog$1.Content> & {
1224
1451
  /**
1225
1452
  * Edge. `"top"` and `"bottom"` are deprecated: the structured Sheet takes `"right"` or `"left"`
1226
- * from 900px and is a bottom sheet below.
1453
+ * from 1024px and is a bottom sheet below.
1227
1454
  */
1228
1455
  side?: "top" | "right" | "bottom" | "left";
1229
- /** @deprecated The structured Sheet is a bottom sheet below 900px by rule. */
1456
+ /** @deprecated The structured Sheet is a bottom sheet below 1024px by rule. */
1230
1457
  mobileSide?: "top" | "right" | "bottom" | "left";
1231
1458
  motion?: SheetMotionConfig | false;
1232
1459
  showCloseButton?: boolean;
@@ -1288,6 +1515,8 @@ interface ActionSheetItem {
1288
1515
  onSelect: () => void;
1289
1516
  destructive?: boolean;
1290
1517
  disabled?: boolean;
1518
+ /** Why the row cannot run now: focusable, runs nothing, keeps the sheet open (see ActionMenuItem). */
1519
+ disabledReason?: string;
1291
1520
  }
1292
1521
  interface ActionSheetProps {
1293
1522
  open: boolean;
@@ -1300,60 +1529,11 @@ interface ActionSheetProps {
1300
1529
  closeLabel?: string;
1301
1530
  }
1302
1531
  /**
1303
- * @deprecated Use ActionMenu: the same items become a DropdownMenu from 900px and this menu sheet
1532
+ * @deprecated Use ActionMenu: the same items become a DropdownMenu from 1024px and this menu sheet
1304
1533
  * below, from one trigger.
1305
1534
  */
1306
1535
  declare function ActionSheet({ open, onOpenChange, title, description, items, closeLabel, }: ActionSheetProps): react_jsx_runtime.JSX.Element;
1307
1536
 
1308
- /** Props an item icon receives: a Lucide icon or any component taking `size` and `strokeWidth`. */
1309
- type ActionMenuIconProps = {
1310
- size?: number | string;
1311
- strokeWidth?: number | string;
1312
- className?: string;
1313
- "aria-hidden"?: boolean;
1314
- };
1315
- interface ActionMenuItem {
1316
- id: string;
1317
- label: string;
1318
- /** Leading icon. */
1319
- icon?: React.ComponentType<ActionMenuIconProps>;
1320
- /** Secondary line under the label (menu sheet only). */
1321
- description?: string;
1322
- /** Danger color (DropdownMenuItem `variant="destructive"`, the sheet row's error color). */
1323
- destructive?: boolean;
1324
- disabled?: boolean;
1325
- /** Runs after the menu has closed and focus is back on the trigger. */
1326
- onSelect: () => void;
1327
- }
1328
- interface ActionMenuGroup {
1329
- id: string;
1330
- /** Group heading. */
1331
- label?: string;
1332
- items: ActionMenuItem[];
1333
- }
1334
- interface ActionMenuBaseProps {
1335
- /** The button that opens the menu, e.g. an IconButton with an `aria-label`. */
1336
- trigger: React.ReactElement;
1337
- /** Heading of the menu sheet below 900px (also its accessible name). The dropdown shows none. */
1338
- title?: string;
1339
- /** Line under the heading, menu sheet only (from ActionSheet). */
1340
- description?: string;
1341
- /** Controlled open state (optional). */
1342
- open?: boolean;
1343
- onOpenChange?: (open: boolean) => void;
1344
- /** Accessible name of the menu sheet's screen-reader-only close button. Default '닫기'. */
1345
- closeLabel?: string;
1346
- }
1347
- type ActionMenuProps = ActionMenuBaseProps & ({
1348
- items: ActionMenuItem[];
1349
- groups?: never;
1350
- } | {
1351
- /** Items in groups, with a separator between groups. Use instead of `items`. */
1352
- groups: ActionMenuGroup[];
1353
- items?: never;
1354
- });
1355
- declare function ActionMenu({ trigger, title, description, open: openProp, onOpenChange, closeLabel, items, groups, }: ActionMenuProps): react_jsx_runtime.JSX.Element;
1356
-
1357
1537
  declare function TooltipProvider({ delayDuration, ...props }: React.ComponentProps<typeof Tooltip$1.Provider>): react_jsx_runtime.JSX.Element;
1358
1538
  interface TooltipProps extends React.ComponentProps<typeof Tooltip$1.Root> {
1359
1539
  /**
@@ -1512,6 +1692,7 @@ declare const emptyStateBaseVariants: (props?: ({
1512
1692
  bordered?: boolean | null | undefined;
1513
1693
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1514
1694
  type EmptyStateTone = "neutral" | "muted" | "raised";
1695
+ type EmptyStateLayout = "inline" | "page";
1515
1696
  interface EmptyStateVariantOptions extends VariantProps<typeof emptyStateBaseVariants> {
1516
1697
  tone?: EmptyStateTone;
1517
1698
  surface?: SurfaceLevel;
@@ -1524,6 +1705,13 @@ declare const emptyStateIconVariants: (props?: ({
1524
1705
  type EmptyStateSize = NonNullable<VariantProps<typeof emptyStateBaseVariants>["size"]>;
1525
1706
  interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof emptyStateBaseVariants> {
1526
1707
  tone?: EmptyStateTone;
1708
+ /**
1709
+ * `inline` (default) takes its content height. `page` stands in for a whole page body: it
1710
+ * fills the parent's width, and at >= 768px grows to the free height of the nearest scroll
1711
+ * container and centers its content there. Below 768px it stays top-aligned with a
1712
+ * `--space-12` top gap.
1713
+ */
1714
+ layout?: EmptyStateLayout;
1527
1715
  /**
1528
1716
  * Background level for the empty-state container. When provided, this
1529
1717
  * overrides the legacy `tone` background mapping.
@@ -1591,28 +1779,17 @@ interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {
1591
1779
  declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLSpanElement>>;
1592
1780
 
1593
1781
  declare const iconButtonCva: (props?: ({
1594
- size?: "md" | "sm" | "lg" | null | undefined;
1782
+ size?: "md" | "xs" | "sm" | "lg" | "xl" | null | undefined;
1595
1783
  pressed?: boolean | null | undefined;
1596
1784
  appearance?: "filled" | "outline" | "ghost" | null | undefined;
1597
1785
  tone?: "primary" | "neutral" | "danger" | null | undefined;
1598
- variant?: "outline" | "ghost" | "danger" | "subtle" | null | undefined;
1599
1786
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1600
- type IconButtonAxisSize = "xs" | "sm" | "md" | "lg" | "xl";
1601
- type IconButtonCvaOptions = NonNullable<Parameters<typeof iconButtonCva>[0]>;
1602
- type IconButtonVariantsOptions = (IconButtonCvaOptions & {
1603
- appearance?: null;
1604
- tone?: null;
1605
- }) | (Omit<IconButtonCvaOptions, "size"> & {
1606
- appearance?: ActionAppearance | null;
1607
- tone?: ActionTone | null;
1608
- size?: IconButtonAxisSize | null;
1609
- });
1787
+ type IconButtonSize = NonNullable<VariantProps<typeof iconButtonCva>["size"]>;
1788
+ type IconButtonVariantsOptions = NonNullable<Parameters<typeof iconButtonCva>[0]>;
1610
1789
  declare function iconButtonVariants(options?: IconButtonVariantsOptions): string;
1611
1790
  declare const iconButtonBadgeVariants: (props?: ({
1612
1791
  tone?: "error" | "info" | null | undefined;
1613
1792
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1614
- type IconButtonVariant = NonNullable<VariantProps<typeof iconButtonCva>["variant"]>;
1615
- type IconButtonSize = NonNullable<VariantProps<typeof iconButtonCva>["size"]>;
1616
1793
  type IconButtonBadgeTone = NonNullable<VariantProps<typeof iconButtonBadgeVariants>["tone"]>;
1617
1794
  type IconButtonIcon = React.ComponentType<React.SVGProps<SVGSVGElement> & {
1618
1795
  size?: number | string;
@@ -1629,34 +1806,26 @@ type IconButtonOptionalName = {
1629
1806
  "aria-label"?: string;
1630
1807
  "aria-labelledby"?: string;
1631
1808
  };
1809
+ type IconButtonTextEnd = {
1810
+ iconPosition?: "start" | "end";
1811
+ menuIndicator?: false;
1812
+ } | {
1813
+ iconPosition?: "start";
1814
+ menuIndicator: true;
1815
+ };
1632
1816
  type IconButtonContent = (IconButtonAccessibleName & {
1633
1817
  label?: never;
1634
1818
  children?: never;
1819
+ menuIndicator?: never;
1635
1820
  }) | (IconButtonOptionalName & {
1636
1821
  label: React.ReactNode;
1637
1822
  children?: never;
1638
- }) | (IconButtonOptionalName & {
1823
+ } & IconButtonTextEnd) | (IconButtonOptionalName & {
1639
1824
  children: React.ReactNode;
1640
1825
  label?: never;
1641
- });
1642
- type IconButtonStyleProps = (GhostDefaultActionStyle & {
1643
- /**
1644
- * @deprecated Use `appearance` × `tone` instead. Removed in 0.20.
1645
- */
1646
- variant?: never;
1826
+ } & IconButtonTextEnd);
1827
+ type IconButtonStyleProps = GhostDefaultActionStyle & {
1647
1828
  /** Button's scale: `xs` 28 · `sm` 30 · `md` 32 · `lg` 36 · `xl` 40. */
1648
- size?: IconButtonAxisSize | null;
1649
- }) | {
1650
- /**
1651
- * @deprecated Use `appearance` × `tone`: `ghost` → ghost + neutral · `outline` →
1652
- * outline + neutral · `subtle` → filled + neutral · `danger` → filled + danger
1653
- * (solid red; `danger` keeps its light red until removal). When moving to the new axes,
1654
- * `size` follows Button's scale: `sm` → `xs`, `lg` → `xl` (`md` stays). Removed in 0.20.
1655
- */
1656
- variant?: IconButtonVariant | null;
1657
- appearance?: never;
1658
- tone?: never;
1659
- /** Legacy scale without `appearance`/`tone`: `sm` 28 · `md` 32 · `lg` 40. */
1660
1829
  size?: IconButtonSize | null;
1661
1830
  };
1662
1831
  type IconButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "aria-label" | "aria-labelledby" | "children" | "color"> & IconButtonStyleProps & IconButtonContent & {
@@ -1666,6 +1835,13 @@ type IconButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "aria
1666
1835
  badgeTone?: IconButtonBadgeTone;
1667
1836
  /** Icon side when the button has text. */
1668
1837
  iconPosition?: "start" | "end";
1838
+ /** Like Button: the spinner takes the icon's place and the button is disabled. */
1839
+ loading?: boolean;
1840
+ /**
1841
+ * Trailing ▾ for a menu trigger, with text and a start icon only. The trigger (DropdownMenu
1842
+ * etc.) supplies `aria-haspopup`.
1843
+ */
1844
+ menuIndicator?: boolean;
1669
1845
  };
1670
1846
  declare const IconButton: React.ForwardRefExoticComponent<IconButtonProps & React.RefAttributes<HTMLButtonElement>>;
1671
1847
 
@@ -1732,6 +1908,43 @@ interface PageSizeSelectProps {
1732
1908
  */
1733
1909
  declare function PageSizeSelect({ value, onChange, options, label, unit, size, disabled, id, 'aria-label': ariaLabel, className, }: PageSizeSelectProps): react_jsx_runtime.JSX.Element;
1734
1910
 
1911
+ declare const TABLE_PAGE_SIZE_OPTIONS: readonly [20, 50, 100];
1912
+ interface TablePaginationProps {
1913
+ pageSize: number;
1914
+ /** The caller sends the list back to the first page when the page size changes. */
1915
+ onPageSizeChange: (pageSize: number) => void;
1916
+ /** Default `TABLE_PAGE_SIZE_OPTIONS` (20, 50, 100). */
1917
+ pageSizeOptions?: readonly number[];
1918
+ /** First row number on this page, from 1. 0 when there are no rows. */
1919
+ rangeStart: number;
1920
+ /** Last row number on this page. */
1921
+ rangeEnd: number;
1922
+ /** Total count. Leave it out when the API has none: only the range shows. */
1923
+ total?: number;
1924
+ /** Unit after the total — `명` for people. Default `개`. */
1925
+ unit?: string;
1926
+ hasPrev: boolean;
1927
+ hasNext: boolean;
1928
+ onPrev: () => void;
1929
+ onNext: () => void;
1930
+ /** While the next page loads, ◀ ▶ are disabled. */
1931
+ loading?: boolean;
1932
+ 'aria-label'?: string;
1933
+ }
1934
+ type TablePaginationVisibility = Pick<TablePaginationProps, 'rangeEnd' | 'total' | 'hasPrev' | 'hasNext' | 'pageSizeOptions'>;
1935
+ /**
1936
+ * Hide the panel when there are no rows, or when everything fits in the smallest choice
1937
+ * (nothing to pick). Without `total`, the first page with no next page decides by its row count.
1938
+ */
1939
+ declare function shouldHideTablePagination({ rangeEnd, total, hasPrev, hasNext, pageSizeOptions, }: TablePaginationVisibility): boolean;
1940
+ /**
1941
+ * Page panel at the bottom of a table — page size on the left, the range (`1–100 / 총 N개`)
1942
+ * and ◀ ▶ on the right. Put it in `DataTable`'s `footer`, which draws the line above it.
1943
+ * Below 1024px the `페이지당` label hides (the select keeps its name), and below 400px of
1944
+ * panel width the total hides. Both are CSS, so nothing flashes on hydration or paging.
1945
+ */
1946
+ declare function TablePagination({ pageSize, onPageSizeChange, pageSizeOptions, rangeStart, rangeEnd, total, unit, hasPrev, hasNext, onPrev, onNext, loading, 'aria-label': ariaLabel, }: TablePaginationProps): react_jsx_runtime.JSX.Element | null;
1947
+
1735
1948
  declare const modeToggleVariants: (props?: class_variance_authority_types.ClassProp | undefined) => string;
1736
1949
  declare const modeToggleItemVariants: (props?: class_variance_authority_types.ClassProp | undefined) => string;
1737
1950
  interface ModeToggleOption<T extends string> {
@@ -1746,7 +1959,7 @@ interface ModeToggleProps<T extends string> extends Omit<React.HTMLAttributes<HT
1746
1959
  onChange: (value: T) => void;
1747
1960
  itemClassName?: string;
1748
1961
  }
1749
- declare function ModeToggle<T extends string>({ className, itemClassName, options, value, onChange, ...props }: ModeToggleProps<T>): react_jsx_runtime.JSX.Element;
1962
+ declare function ModeToggle<T extends string>({ className, itemClassName, options, value, onChange, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, ...props }: ModeToggleProps<T>): react_jsx_runtime.JSX.Element;
1750
1963
 
1751
1964
  declare const actionFooterVariants: (props?: ({
1752
1965
  position?: "fixed" | "static" | "sticky" | null | undefined;
@@ -1759,16 +1972,15 @@ interface ActionFooterStatus {
1759
1972
  kind: 'saving' | 'saved' | 'error';
1760
1973
  lastSavedAt?: Date;
1761
1974
  }
1762
- interface ActionFooterAction {
1975
+ type ActionFooterAction = FilledDefaultActionStyle & {
1763
1976
  id?: string;
1764
1977
  label: string;
1765
- variant?: ButtonVariant;
1766
1978
  onClick: () => void;
1767
1979
  disabled?: boolean;
1768
1980
  loading?: boolean;
1769
1981
  permission?: string;
1770
1982
  leadingIcon?: LucideIcon;
1771
- }
1983
+ };
1772
1984
  interface ActionFooterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof actionFooterVariants> {
1773
1985
  status?: ActionFooterStatus;
1774
1986
  actions: ActionFooterAction[];
@@ -1904,11 +2116,11 @@ declare const checkboxBoxVariants: (props?: ({
1904
2116
  size?: "md" | "sm" | null | undefined;
1905
2117
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1906
2118
  declare const checkboxGroupItemVariants: (props?: ({
1907
- appearance?: "plain" | "card" | null | undefined;
2119
+ appearance?: "card" | "plain" | null | undefined;
1908
2120
  density?: "compact" | "comfortable" | null | undefined;
1909
2121
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1910
2122
  declare const checkboxGroupBoxVariants: (props?: ({
1911
- appearance?: "plain" | "card" | null | undefined;
2123
+ appearance?: "card" | "plain" | null | undefined;
1912
2124
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1913
2125
  type CheckboxSize = NonNullable<VariantProps<typeof checkboxBoxVariants>["size"]>;
1914
2126
  type CheckboxCheckedState = React.ComponentProps<typeof Checkbox$1.Root>["checked"];
@@ -1917,6 +2129,7 @@ type CheckboxGroupDensity = NonNullable<VariantProps<typeof checkboxGroupItemVar
1917
2129
  type CheckboxGroupContextValue = {
1918
2130
  appearance: CheckboxGroupAppearance;
1919
2131
  density: CheckboxGroupDensity;
2132
+ orientation?: "vertical" | "horizontal";
1920
2133
  disabled?: boolean;
1921
2134
  name?: string;
1922
2135
  selectedValues: Set<string>;
@@ -1933,7 +2146,7 @@ interface CheckboxProps extends Omit<React.ComponentPropsWithoutRef<typeof Check
1933
2146
  declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLButtonElement>>;
1934
2147
 
1935
2148
  declare const checkboxGroupVariants: (props?: ({
1936
- appearance?: "plain" | "card" | null | undefined;
2149
+ appearance?: "card" | "plain" | null | undefined;
1937
2150
  orientation?: "horizontal" | "vertical" | null | undefined;
1938
2151
  columns?: "one" | "two" | "three" | null | undefined;
1939
2152
  } & class_variance_authority_types.ClassProp) | undefined) => string;
@@ -1954,16 +2167,16 @@ interface CheckboxGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
1954
2167
  declare const CheckboxGroup: React.ForwardRefExoticComponent<CheckboxGroupProps & React.RefAttributes<HTMLDivElement>>;
1955
2168
 
1956
2169
  declare const radioGroupVariants: (props?: ({
1957
- appearance?: "plain" | "card" | null | undefined;
2170
+ appearance?: "card" | "plain" | null | undefined;
1958
2171
  orientation?: "horizontal" | "vertical" | null | undefined;
1959
2172
  columns?: "one" | "two" | "three" | null | undefined;
1960
2173
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1961
2174
  declare const radioVariants: (props?: ({
1962
- appearance?: "plain" | "card" | null | undefined;
2175
+ appearance?: "card" | "plain" | null | undefined;
1963
2176
  density?: "compact" | "comfortable" | null | undefined;
1964
2177
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1965
2178
  declare const radioControlVariants: (props?: ({
1966
- appearance?: "plain" | "card" | null | undefined;
2179
+ appearance?: "card" | "plain" | null | undefined;
1967
2180
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1968
2181
  type RadioGroupAppearance = NonNullable<VariantProps<typeof radioGroupVariants>["appearance"]>;
1969
2182
  type RadioGroupColumns = NonNullable<VariantProps<typeof radioGroupVariants>["columns"]>;
@@ -2055,11 +2268,11 @@ declare function TreeView<T extends TreeNode>({ nodes, selectedId, selectionAria
2055
2268
  /**
2056
2269
  * OLUN 브랜드 로고.
2057
2270
  *
2058
- * - symbol: O 원형 테두리 + 우하단 accent-pop 작은 circle (32px 초과/이하 두 비율)
2059
- * - wordmark: "OLUN" + 마지막 "." 은 accent 색상
2060
- * - 조합: symbol과 함께 쓰면 wordmark의 "."를 뺀다. 궤도 점은 symbol이 맡는다(점 두 개 경쟁 방지).
2271
+ * - symbol: O 링 + 우하단 accent-pop 궤도 점 (32px 초과/이하 두 광학 비율)
2272
+ * - wordmark: Montserrat 700 윤곽 `OLUN` + 단독일 때 accent-pop 마침표
2273
+ * - MASTER: symbol과 함께 쓰면 wordmark의 "."를 뺀다. 궤도 점이 마침표를 맡는다(점 두 개 경쟁 방지).
2061
2274
  *
2062
- * 레퍼런스: apps/web/docs/wireframes/ref/shell-wireframe.html Topbar 브랜드 영역.
2275
+ * 기하는 `@olundot/tokens/brand`의 정본 데이터(scripts/brand/build-brand-svg.mjs가 생성)에서만 온다.
2063
2276
  */
2064
2277
  interface OlunSymbolProps {
2065
2278
  /** 심볼 크기 px (기본 28) */
@@ -2068,9 +2281,15 @@ interface OlunSymbolProps {
2068
2281
  }
2069
2282
  declare function OlunSymbol({ size, className }: OlunSymbolProps): react_jsx_runtime.JSX.Element;
2070
2283
  interface OlunLogoProps {
2071
- /** 심볼 크기 px (기본 28) */
2284
+ /**
2285
+ * MASTER 크기. 심볼 240 상자 기준 px (기본 28).
2286
+ * 워드마크와 간격은 고정 비율로 함께 커진다. 32px 이하는 아이콘 비율 심볼을 쓴다.
2287
+ */
2072
2288
  symbolSize?: number;
2073
- /** wordmark font-size px (기본 18) */
2289
+ /**
2290
+ * 워드마크만 쓸 때(`showSymbol={false}`) 글자 크기 px (기본 18).
2291
+ * MASTER에서는 쓰지 않는다. MASTER 크기는 `symbolSize` 하나로 정한다.
2292
+ */
2074
2293
  fontSize?: number;
2075
2294
  /** 심볼 표시 여부 (기본 true) */
2076
2295
  showSymbol?: boolean;
@@ -2101,4 +2320,4 @@ interface OrganizationLogoProps extends Omit<SVGProps<SVGSVGElement>, "width" |
2101
2320
  }
2102
2321
  declare function OrganizationLogo({ organization, size, className, style, role, "aria-label": ariaLabel, "aria-hidden": ariaHidden, ...props }: OrganizationLogoProps): react_jsx_runtime.JSX.Element;
2103
2322
 
2104
- export { ActionFooter, type ActionFooterAction, type ActionFooterProps, type ActionFooterStatus, ActionMenu, type ActionMenuGroup, type ActionMenuItem, type ActionMenuProps, ActionSheet, type ActionSheetIconProps, type ActionSheetItem, type ActionSheetProps, Alert, AlertDialog, type AlertDialogProps, type AlertDialogTone, type AlertEmphasis, type AlertProps, type AlertVariant, Avatar, AvatarFallback, type AvatarFallbackProps, AvatarImage, Badge, type BadgeProps, type BadgeTone, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, BulkActionBar, type BulkActionBarAction, type BulkActionBarProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardProse, CardTitle, type CardVariant, type CardVariantOptions, Checkbox, type CheckboxCheckedState, CheckboxGroup, type CheckboxGroupAppearance, type CheckboxGroupColumns, CheckboxGroupContext, type CheckboxGroupContextValue, type CheckboxGroupDensity, type CheckboxGroupOrientation, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, Chip, type ChipProps, type ChipSize, type ChipTone, type ChipVariant, ConfirmDialog, type ConfirmDialogProps, ContextMenu, type ContextMenuPosition, type ContextMenuProps, CopyButton, type CopyButtonProps, DataLayout, type DataLayoutProps, DataTable, type DataTableColumn, type DataTableLinkProps, type DataTableProps, type DataTableSort, type DataTableVirtualHandle, type DataTableVirtualOptions, type DataTableVirtualRange, DetailLayout, type DetailLayoutProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogEyebrow, DialogFooter, DialogHeader, type DialogMobilePresentation, DialogOverlay, DialogPortal, type DialogProps, DialogRawContent, type DialogSize, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, type EmptyStateSize, type EmptyStateTone, type EmptyStateVariantOptions, ErrorState, type ErrorStateProps, FileUploadZone, type FileUploadZoneProps, FilterToolbar, type FilterToolbarCollapseBelow, type FilterToolbarProps, FormField, type FormFieldProps, type FormFieldRenderProps, FormLayout, type FormLayoutProps, type FormLayoutSection, FormModal, type FormModalProps, IconButton, type IconButtonBadgeTone, type IconButtonProps, type IconButtonSize, type IconButtonVariant, InfoModal, type InfoModalProps, InlineAlert, type InlineAlertProps, type InlineAlertSurface, Input, type InputProps, type InputSize, type InputSizeLegacy, type InputState, Label, type LabelProps, ModeToggle, type ModeToggleOption, type ModeToggleProps, NotificationBadge, type NotificationBadgePlacement, type NotificationBadgeProps, type NotificationBadgeSize, OTPField, type OTPFieldProps, type OTPFieldSize, OlunLogo, OlunSymbol, type OlunTheme, type OlunThemeDuration, type OlunThemeState, OrganizationLogo, type OrganizationLogoId, type OrganizationLogoProps, type OverlayScrim, PageHeader, type PageHeaderProps, PageSizeSelect, type PageSizeSelectProps, type PageSizeSelectSize, Pagination, type PaginationProps, type PaginationSize, PermissionContext, type PermissionEvaluator, type PermissionFallback, PermissionGuard, type PermissionGuardProps, PermissionProvider, type PermissionProviderProps, type PermissionScope, type PermissionState, Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, Progress, type ProgressProps, type ProgressStatus, Radio, RadioGroup, type RadioGroupAppearance, type RadioGroupColumns, type RadioGroupDensity, type RadioGroupOrientation, type RadioGroupProps, type RadioProps, ScrollArea, ScrollBar, SearchField, type SearchFieldProps, type SearchFieldSize, Select, type SelectAppearance, type SelectOption, type SelectProps, type SelectSize, type SelectState, type SelectVariant, type SemanticRole, Separator, type SetOlunThemeOptions, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetDrawer, type SheetDrawerProps, SheetFooter, SheetHeader, type SheetMotionConfig, type SheetMotionDuration, type SheetMotionEasing, type SheetMotionType, type SheetProps, type SheetSize, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, SkeletonRow, type SkeletonRowColumn, type SkeletonRowProps, SkeletonText, type SkeletonTextProps, Spinner, type SpinnerProps, StatusBadge, type StatusBadgeEmphasis, type StatusBadgeProps, type StatusBadgeSize, type StatusBadgeStatus, StatusDot, type StatusDotProps, type StatusDotTone, type SurfaceLevel, Switch, type SwitchProps, type TabItem, Tabs, TabsContent, type TabsProps, type TabsVariant, Textarea, type TextareaProps, type TextareaSize, type TextareaSizeLegacy, type TextareaState, ThemeFab, type ThemeFabProps, ThemeToggle, Toast, type ToastAction, type ToastItem, type ToastOptions, ToastProvider, ToastRoot, type ToastVariant, ToastViewport, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TreeItemRowVariantProps, type TreeItemState, type TreeNode, TreeView, type TreeViewProps, TwoTierBadge, type TwoTierBadgeEmphasis, type TwoTierBadgeProps, type TwoTierBadgeSize, type TwoTierBadgeTone, type UseOlunThemeValue, WizardLayout, type WizardLayoutProps, type WizardStep, type WizardStepState, actionFooterStatusVariants, actionFooterVariants, buttonVariants, cardVariants, checkboxBoxVariants, checkboxFieldVariants, checkboxGroupBoxVariants, checkboxGroupItemVariants, checkboxGroupVariants, checkboxRootVariants, checkboxVariants, chipCountVariants, chipVariants, cn, dataTableRowVariants, dataTableVariants, emptyStateIconVariants, emptyStateVariants, errorStateVariants, evaluatePermission, fileUploadIconVariants, fileUploadZoneVariants, formFieldControlStackClassName, formFieldDescriptionClassName, formFieldErrorClassName, formFieldLabelClassName, formFieldRequiredClassName, formFieldVariants, getOlunThemeState, getToastDuration, iconButtonBadgeVariants, iconButtonVariants, inputMessageVariants, inputVariants, limitToasts, modeToggleItemVariants, modeToggleVariants, notificationBadgeVariants, otpCellVariants, otpFieldGroupVariants, otpFieldMessageVariants, otpFieldVariants, paginationControlVariants, paginationVariants, radioControlVariants, radioGroupVariants, radioVariants, searchFieldInputVariants, searchFieldVariants, selectMessageVariants, selectVariants, setOlunTheme, skeletonVariants, spinnerVariants, tabsBadgeVariants, tabsListVariants, tabsRootVariants, tabsTriggerVariants, textareaMessageVariants, textareaVariants, toast, toastVariants, toastViewportVariants, treeItemRowVariants, treeViewVariants, useOlunTheme, usePermission };
2323
+ export { ActionFooter, type ActionFooterAction, type ActionFooterProps, type ActionFooterStatus, ActionMenu, type ActionMenuGroup, type ActionMenuItem, type ActionMenuProps, ActionSheet, type ActionSheetIconProps, type ActionSheetItem, type ActionSheetProps, Alert, AlertDialog, type AlertDialogProps, type AlertDialogTone, type AlertEmphasis, type AlertMarker, type AlertProps, type AlertVariant, Avatar, AvatarFallback, type AvatarFallbackProps, AvatarImage, Badge, type BadgeProps, type BadgeTone, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, BulkActionBar, type BulkActionBarAction, type BulkActionBarProps, Button, type ButtonProps, type ButtonSize, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardProse, CardTitle, type CardVariant, type CardVariantOptions, Checkbox, type CheckboxCheckedState, CheckboxGroup, type CheckboxGroupAppearance, type CheckboxGroupColumns, CheckboxGroupContext, type CheckboxGroupContextValue, type CheckboxGroupDensity, type CheckboxGroupOrientation, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, Chip, type ChipProps, type ChipSize, type ChipTone, type ChipVariant, ConfirmDialog, type ConfirmDialogProps, ContextMenu, type ContextMenuPosition, type ContextMenuProps, CopyButton, type CopyButtonProps, DataLayout, type DataLayoutProps, DataTable, type DataTableColumn, type DataTableLinkProps, type DataTableMobileCardContent, type DataTableMobileMetaLine, type DataTableProps, type DataTableRowActions, type DataTableSort, type DataTableVirtualHandle, type DataTableVirtualOptions, type DataTableVirtualRange, DetailLayout, type DetailLayoutProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogEyebrow, DialogFooter, DialogHeader, type DialogMobilePresentation, DialogOverlay, DialogPortal, type DialogProps, DialogRawContent, type DialogSize, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateLayout, type EmptyStateProps, type EmptyStateSize, type EmptyStateTone, type EmptyStateVariantOptions, ErrorState, type ErrorStateProps, FileUploadZone, type FileUploadZoneProps, FilterToolbar, type FilterToolbarCollapseBelow, type FilterToolbarProps, FormField, type FormFieldProps, type FormFieldRenderProps, FormLayout, type FormLayoutProps, type FormLayoutSection, FormModal, type FormModalProps, IconButton, type IconButtonBadgeTone, type IconButtonProps, type IconButtonSize, InfoModal, type InfoModalProps, InlineAlert, type InlineAlertProps, Input, type InputProps, type InputSize, type InputSizeLegacy, type InputState, Label, type LabelProps, ListCard, type ListCardActions, type ListCardProps, ModeToggle, type ModeToggleOption, type ModeToggleProps, NotificationBadge, type NotificationBadgePlacement, type NotificationBadgeProps, type NotificationBadgeSize, OTPField, type OTPFieldProps, type OTPFieldSize, OlunLogo, OlunSymbol, type OlunTheme, type OlunThemeDuration, type OlunThemeState, OrganizationLogo, type OrganizationLogoId, type OrganizationLogoProps, type OverlayScrim, PageHeader, type PageHeaderProps, PageSizeSelect, type PageSizeSelectProps, type PageSizeSelectSize, Pagination, type PaginationProps, type PaginationSize, PermissionContext, type PermissionEvaluator, type PermissionFallback, PermissionGuard, type PermissionGuardProps, PermissionProvider, type PermissionProviderProps, type PermissionScope, type PermissionState, Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, Progress, type ProgressProps, type ProgressStatus, Radio, RadioGroup, type RadioGroupAppearance, type RadioGroupColumns, type RadioGroupDensity, type RadioGroupOrientation, type RadioGroupProps, type RadioProps, ScrollArea, ScrollBar, SearchField, type SearchFieldProps, type SearchFieldSize, Select, type SelectAppearance, type SelectOption, type SelectProps, type SelectSize, type SelectState, type SelectVariant, type SemanticRole, Separator, type SetOlunThemeOptions, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetDrawer, type SheetDrawerProps, SheetFooter, SheetHeader, type SheetMotionConfig, type SheetMotionDuration, type SheetMotionEasing, type SheetMotionType, type SheetProps, type SheetSize, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, SkeletonRow, type SkeletonRowColumn, type SkeletonRowProps, SkeletonText, type SkeletonTextProps, Spinner, type SpinnerProps, StatusBadge, type StatusBadgeEmphasis, type StatusBadgeProps, type StatusBadgeSize, type StatusBadgeStatus, StatusDot, type StatusDotProps, type StatusDotTone, type SurfaceLevel, Switch, type SwitchProps, TABLE_PAGE_SIZE_OPTIONS, type TabItem, TablePagination, type TablePaginationProps, type TablePaginationVisibility, Tabs, TabsContent, type TabsProps, type TabsVariant, Textarea, type TextareaProps, type TextareaSize, type TextareaSizeLegacy, type TextareaState, ThemeFab, type ThemeFabProps, ThemeToggle, Toast, type ToastAction, type ToastItem, type ToastOptions, ToastProvider, ToastRoot, type ToastVariant, ToastViewport, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TreeItemRowVariantProps, type TreeItemState, type TreeNode, TreeView, type TreeViewProps, TwoTierBadge, type TwoTierBadgeEmphasis, type TwoTierBadgeProps, type TwoTierBadgeSize, type TwoTierBadgeTone, type UseOlunThemeValue, WizardLayout, type WizardLayoutProps, type WizardStep, type WizardStepState, actionFooterStatusVariants, actionFooterVariants, buttonVariants, cardVariants, checkboxBoxVariants, checkboxFieldVariants, checkboxGroupBoxVariants, checkboxGroupItemVariants, checkboxGroupVariants, checkboxRootVariants, checkboxVariants, chipCountVariants, chipVariants, cn, dataTableRowVariants, dataTableVariants, emptyStateIconVariants, emptyStateVariants, errorStateVariants, evaluatePermission, fileUploadIconVariants, fileUploadZoneVariants, formFieldControlStackClassName, formFieldDescriptionClassName, formFieldErrorClassName, formFieldLabelClassName, formFieldRequiredClassName, formFieldVariants, getOlunThemeState, getToastDuration, iconButtonBadgeVariants, iconButtonVariants, inputMessageVariants, inputVariants, limitToasts, modeToggleItemVariants, modeToggleVariants, notificationBadgeVariants, otpCellVariants, otpFieldGroupVariants, otpFieldMessageVariants, otpFieldVariants, paginationControlVariants, paginationVariants, radioControlVariants, radioGroupVariants, radioVariants, searchFieldInputVariants, searchFieldVariants, selectMessageVariants, selectVariants, setOlunTheme, shouldHideTablePagination, skeletonVariants, spinnerVariants, tabsBadgeVariants, tabsListVariants, tabsRootVariants, tabsTriggerVariants, textareaMessageVariants, textareaVariants, toast, toastVariants, toastViewportVariants, treeItemRowVariants, treeViewVariants, useOlunTheme, usePermission };