@olundot/ui 0.19.0 → 0.20.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # @olundot/ui
2
2
 
3
+ ## 0.20.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 213086c: `ActionMenu`를 추가한다. 같은 `items`를 900px 이상에서는 DropdownMenu로, 미만에서는 메뉴 시트로 그린다. 모양은 열 때 한 번 정하고, 열린 동안 폭이 바뀌어도 그대로 둔다. 항목을 고르면 메뉴가 닫히고 포커스가 트리거로 돌아온 뒤 `onSelect`가 실행된다. `groups`를 주면 묶음 사이에 구분선을 넣는다. `open`과 `onOpenChange`로 제어할 수도 있다.
8
+
9
+ `ActionSheet`는 사용 중단 예정이다. `ActionMenu`로 옮긴다. props는 그대로이고 모양이 바뀐다.
10
+
11
+ - 위에 손잡이가 생기고, 끌어내리면 닫힌다.
12
+ - 머리의 X가 없어지고 스크린 리더용 닫기 버튼만 남는다. `closeLabel`은 그 버튼의 이름이다.
13
+ - 표면 톤이 0.20 오버레이와 같아진다(`--bg-raised`, `--border-subtle`, 윗선 하이라이트).
14
+ - 열면 첫 번째 활성 행에 포커스가 간다.
15
+ - `data-slot`이 `action-menu-sheet`, `action-menu-item`으로 바뀐다.
16
+
17
+ - 213086c: 확인 창 `AlertDialog`를 추가한다. 확인 모드는 `[취소][확인]`, 알림 모드는 버튼 하나이고, `tone`은 `neutral`과 `danger`다. 실행이 실패하면 `onError`로 받고 창은 열어 둔다. `ConfirmDialog`와 `InfoModal`은 `AlertDialog` 위의 래퍼가 되었고 사용 중단 예정이다. 동작이 바뀐다. InfoModal의 역할은 `alertdialog`가 되고, 바깥 클릭으로 닫히지 않으며, 900px 미만에서도 가운데에 고정된다. `mobilePresentation`과 InfoModal `width`는 무시한다.
18
+ - 213086c: 오버레이 scrim 프리셋을 고를 수 있다. 앱 기본값은 루트에 `<html data-scrim="blur|dim">`으로 정하고, 한 오버레이만 바꿀 때는 `scrim` prop을 쓴다. prop이 루트 값보다 우선한다. `DialogContent`, `DialogOverlay`, `SheetContent`, `ConfirmDialog`가 `scrim`을 받는다. `dim`은 블러 없는 딤이고, `blur`는 옅은 딤에 `--scrim-blur`를 더한다. 둘 다 없으면 지금처럼 `--scrim`이다. 프리셋 타입 `OverlayScrim`을 내보낸다.
19
+ - 213086c: `Dialog`에 `title`을 주면 구조형 다이얼로그가 된다. 머리의 X와 `footer`, 본문 스크롤, 푸터 위 선 1줄을 갖춘다. 바깥 클릭으로는 닫히지 않고 Escape와 X로 닫힌다. 폭은 `size` `sm`·`md`·`lg`(420·560·720)만 받고, `className`은 본문 배치에만 쓴다. 900px 미만에서는 손잡이가 있는 아래쪽 시트가 된다. `onSubmit`을 주면 폼 모드가 되어 `[취소][저장]` 푸터를 그리고, 제출 중에는 닫기를 막는다. `onError`를 주면 제출 실패를 넘겨받고 다시 던지지 않는다. `title` 없이 `DialogContent`로 조립한 다이얼로그는 모양과 동작이 그대로다.
20
+
21
+ `FormModal`은 사용 중단 예정이다(`Dialog`의 `onSubmit`을 쓴다). 이제 구조형 다이얼로그 폼 모드로 그린다. 그래서 900px 미만에서 아래쪽 시트가 되고, 표면 톤(`--bg-raised`, `--border-subtle`, `--shadow-16`)과 머리의 X를 갖는다. 바깥 클릭으로는 더 이상 닫히지 않는다. `wide`는 `size="lg"`로 옮겨지고, `mobilePresentation`은 무시된다.
22
+
23
+ 옛 조각 `DialogContent`, `DialogHeader`, `DialogFooter`, `DialogTitle`, `DialogDescription`, `DialogEyebrow`, `DialogRawContent`와 `mobilePresentation`은 사용 중단 예정이다. 동작은 바뀌지 않는다.
24
+
25
+ - 213086c: `Sheet`에 `title`을 주면 구조형 시트가 된다. 머리에는 `caption`, 제목, `description`, `headerActions`, 닫기 X가 들어가고, 본문만 스크롤하며, `footer`가 있으면 그 위에 선을 하나 긋는다. 바깥 클릭과 Escape로 닫힌다. 900px 이상에서는 `side`(`right`, `left`) 가장자리 패널이고 `size`는 `md` 480px, `lg` 720px, `full`이다. `motion`은 `SheetContent`와 같다. 900px 미만에서는 아래쪽 시트가 되고, 손잡이나 머리를 끌어내리면 닫힌다. 모션 감소 설정에서는 시트가 손가락을 따라 움직이지 않고 닫기 판정만 한다.
26
+
27
+ `SheetDrawer`는 사용 중단 예정이다. 이제 구조형 `Sheet`의 래퍼이고, `width`는 `size`로, `expanded`는 `full`로, 확장 버튼은 `headerActions`로 넘긴다. 모양이 바뀐다. 머리 아래 선이 없어지고, 푸터 위 선이 옅은 선(`--border-subtle`)이 되며, 표면 톤(`--bg-raised`, 윗선 하이라이트)을 쓰고, 900px 미만에서 손잡이가 보인다. 옛 조각 `SheetContent`, `SheetHeader`, `SheetBody`, `SheetFooter`, `SheetTitle`, `SheetDescription`과 `mobileSide`에도 사용 중단 표시를 붙였다. 동작은 그대로다.
28
+
29
+ ### Patch Changes
30
+
31
+ - Updated dependencies [213086c]
32
+ - @olundot/tokens@0.18.0-next.0
33
+
34
+ ## 0.19.1
35
+
36
+ ### Patch Changes
37
+
38
+ - a1c795c: 오버레이 7종(Dialog·ConfirmDialog·FormModal·InfoModal·Sheet·SheetDrawer·ActionSheet)의 중복 코드를 내부 모듈로 모았습니다. 공개 API와 기본값은 그대로이고, 화면에 보이는 변화는 아래뿐입니다.
39
+
40
+ - **닫기 버튼 통일** — Dialog·Sheet의 `showCloseButton`, SheetDrawer, ActionSheet의 닫기 버튼이 모두 `IconButton` ghost md(32px, 터치 영역 44px)입니다. hover는 `--action-hover`이고, 접근 가능한 이름은 '닫기'(SheetDrawer·ActionSheet는 `closeLabel`)입니다. Sheet 닫기 버튼의 이름이 영어 'Close'에서 '닫기'로 바뀌었습니다. ActionSheet는 버튼이 28px에서 32px로 커져 설명이 없는 헤더가 4px 높아집니다. SheetDrawer 닫기 버튼의 `data-slot="sheet-drawer-close"`는 `data-slot="icon-button"`이 됩니다.
41
+ - **SheetDescription** 글자색이 `text-text-secondary`입니다.
42
+ - **Dialog 포커스 복귀** — `DialogTrigger` 없이 `open`만으로 연 `DialogContent`도 닫으면 연 요소로 포커스를 돌려줍니다. 닫을 때 포커스를 직접 옮기는 화면은 `onCloseAutoFocus`에서 `preventDefault()`를 부르면 지금처럼 동작합니다.
43
+ - **Sheet 쌓임** — Sheet 계열의 오버레이가 `z-modal` 층에 그려집니다. 다른 오버레이 위에서 연 Sheet가 그 오버레이를 어둡게 덮습니다.
44
+
3
45
  ## 0.19.0
4
46
 
5
47
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -684,6 +684,14 @@ interface FormLayoutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "ch
684
684
  declare const FormLayout: React.ForwardRefExoticComponent<FormLayoutProps & React.RefAttributes<HTMLDivElement>>;
685
685
 
686
686
  /**
687
+ * Scrim preset. `"dim"`: a plain dim (no backdrop blur). `"blur"`: a lighter dim over a backdrop
688
+ * blur (`--scrim-blur`). Without a preset (no prop, no `<html data-scrim>`) the scrim is `--scrim`.
689
+ */
690
+ type OverlayScrim = "blur" | "dim";
691
+
692
+ /**
693
+ * @deprecated The structured Dialog (`title`) is a bottom sheet below 900px on its own.
694
+ *
687
695
  * Where a dialog sits below 900px (the DS mobile band, same as Sheet `mobileSide`).
688
696
  * - `"center"` (default): the centered card at every width.
689
697
  * - `"sheet"`: a bottom sheet below 900px — pinned to the bottom edge, full width, top corners
@@ -691,33 +699,95 @@ declare const FormLayout: React.ForwardRefExoticComponent<FormLayoutProps & Reac
691
699
  * Pure CSS, so SSR and hydration render the same tree at every width (no matchMedia swap).
692
700
  */
693
701
  type DialogMobilePresentation = "center" | "sheet";
694
- declare const Dialog: React.FC<Dialog$1.DialogProps>;
702
+ /** Structured Dialog width: 420 · 560 · 720. */
703
+ type DialogSize = "sm" | "md" | "lg";
704
+ /**
705
+ * Structured Dialog (spec §3.2): a center window for forms, pickers and long content. X + footer,
706
+ * 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).
708
+ */
709
+ interface DialogProps {
710
+ open: boolean;
711
+ onOpenChange: (open: boolean) => void;
712
+ /** Heading, also the dialog's accessible name. Its presence selects the structured mode. */
713
+ title: string;
714
+ /** Line under the title, also the accessible description. */
715
+ description?: string;
716
+ /** Box width: 420 · 560 · 720. Default `"md"`. Other widths are not supported. */
717
+ size?: DialogSize;
718
+ /** Body. Scrolls inside the box's max height. */
719
+ children: React.ReactNode;
720
+ /** Footer content (buttons). Ignored in form mode, which renders `[cancel][submit]`. */
721
+ footer?: React.ReactNode;
722
+ /**
723
+ * Form mode: wraps body and footer in a `<form>` and runs this on submit. While it runs, Escape,
724
+ * cancel and the X do nothing; when it resolves the dialog closes; when it rejects it stays open.
725
+ */
726
+ onSubmit?: () => void | Promise<void>;
727
+ /** Form mode: receives a rejection of `onSubmit` instead of rethrowing it. */
728
+ onError?: (error: unknown) => void;
729
+ /** Form mode submit label. Default '저장'. */
730
+ submitLabel?: string;
731
+ /** Form mode cancel label. Default '취소'. */
732
+ cancelLabel?: string;
733
+ /** Form mode: shows submit busy and blocks closing, for a submit run outside `onSubmit`. */
734
+ loading?: boolean;
735
+ /** Accessible name of the X. Default '닫기'. */
736
+ closeLabel?: string;
737
+ /** Scrim preset; wins over `<html data-scrim>`. */
738
+ scrim?: OverlayScrim;
739
+ /** Layout of the body content only. It never reaches the box: width comes from `size`. */
740
+ className?: string;
741
+ }
742
+ /** Legacy root: the Radix Dialog Root for `DialogContent` composition (no `title`). */
743
+ type DialogRootProps = React.ComponentProps<typeof Dialog$1.Root> & {
744
+ title?: never;
745
+ };
746
+ declare function Dialog(props: DialogProps | DialogRootProps): react_jsx_runtime.JSX.Element;
695
747
  declare const DialogTrigger: React.ForwardRefExoticComponent<Dialog$1.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
696
748
  declare const DialogPortal: React.FC<Dialog$1.DialogPortalProps>;
697
749
  declare const DialogClose: React.ForwardRefExoticComponent<Dialog$1.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
698
- declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<Dialog$1.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
750
+ declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<Dialog$1.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
751
+ /** Scrim preset; wins over `<html data-scrim>`. Default: the root preset, else `--scrim`. */
752
+ scrim?: OverlayScrim;
753
+ } & React.RefAttributes<HTMLDivElement>>;
754
+ /** @deprecated Pass `title` to `Dialog` for the structured dialog. */
699
755
  declare const DialogContent: React.ForwardRefExoticComponent<Omit<Dialog$1.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
700
756
  showCloseButton?: boolean;
701
- /** Below 900px: `"center"` card (default) or `"sheet"` — see {@link DialogMobilePresentation}. */
757
+ /**
758
+ * @deprecated The structured Dialog (`title`) is a bottom sheet below 900px on its own.
759
+ *
760
+ * Below 900px: `"center"` card (default) or `"sheet"` — see {@link DialogMobilePresentation}.
761
+ */
702
762
  mobilePresentation?: DialogMobilePresentation;
763
+ /** Scrim preset; wins over `<html data-scrim>`. Default: the root preset, else `--scrim`. */
764
+ scrim?: OverlayScrim;
703
765
  } & React.RefAttributes<HTMLDivElement>>;
766
+ /** @deprecated The structured Dialog renders the header from `title` and `description`. */
704
767
  declare const DialogHeader: {
705
768
  ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
706
769
  displayName: string;
707
770
  };
771
+ /** @deprecated Use the structured Dialog `footer` prop. */
708
772
  declare const DialogFooter: {
709
773
  ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
710
774
  displayName: string;
711
775
  };
776
+ /** @deprecated Use the structured Dialog `title` prop. */
712
777
  declare const DialogTitle: React.ForwardRefExoticComponent<Omit<Dialog$1.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
778
+ /** @deprecated Use the structured Dialog `description` prop. */
713
779
  declare const DialogDescription: React.ForwardRefExoticComponent<Omit<Dialog$1.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
714
780
  /**
781
+ * @deprecated The structured Dialog has no eyebrow; put the context in `title` or `description`.
782
+ *
715
783
  * DialogEyebrow — 제목 위 카테고리 overline(eyebrow). 2026 editorial 헤더 위계의 최상단.
716
784
  * DialogHeader 안에서 DialogTitle '위'에 둔다(예: "시간 제어" / "시험 제어").
717
785
  * 작은 uppercase + tracking + muted 색으로 title(bold)과 대비.
718
786
  */
719
787
  declare const DialogEyebrow: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
720
788
  /**
789
+ * @deprecated Use the structured Dialog (`title`, `footer`, `size`).
790
+ *
721
791
  * DialogRawContent — shadcn 기본 스타일 없는 순수 radix Content.
722
792
  * 자체 head/body/foot 슬롯을 가진 ModalShell 등 커스텀 구현용.
723
793
  * DialogPortal + DialogOverlay와 함께 수동으로 조합해서 사용.
@@ -733,13 +803,24 @@ interface FormModalProps {
733
803
  onSubmit: () => void | Promise<void>;
734
804
  submitLabel?: string;
735
805
  cancelLabel?: string;
806
+ /** Dialog `size="lg"` (720). Default: `"md"` (560). */
736
807
  wide?: boolean;
737
808
  loading?: boolean;
809
+ /** Rendered at the top of the body. */
738
810
  status?: React.ReactNode;
739
- /** Below 900px: `"center"` card (default) or `"sheet"` bottom sheet — see Dialog `mobilePresentation`. */
811
+ /**
812
+ * @deprecated Ignored. Dialog is a bottom sheet below 900px on its own.
813
+ */
740
814
  mobilePresentation?: DialogMobilePresentation;
741
815
  }
742
- declare function FormModal({ open, onOpenChange, title, description, children, onSubmit, submitLabel, cancelLabel, wide, loading, status, mobilePresentation, }: FormModalProps): react_jsx_runtime.JSX.Element;
816
+ /**
817
+ * @deprecated Use Dialog with onSubmit.
818
+ *
819
+ * A thin wrapper over the structured Dialog's form mode: `wide` → `size="lg"`, `status` at the top
820
+ * of the body. The submit guard is Dialog's: one submit at a time, no closing while it runs, one
821
+ * close on success, open on failure (the rejection propagates).
822
+ */
823
+ declare function FormModal({ open, onOpenChange, title, description, children, onSubmit, submitLabel, cancelLabel, wide, loading, status, }: FormModalProps): react_jsx_runtime.JSX.Element;
743
824
 
744
825
  interface InfoModalProps {
745
826
  open: boolean;
@@ -748,12 +829,17 @@ interface InfoModalProps {
748
829
  description?: string;
749
830
  children: React.ReactNode;
750
831
  closeLabel?: string;
832
+ /** @deprecated Ignored. Content that needs the wide box belongs in Dialog. */
751
833
  width?: "default" | "wide";
752
834
  footer?: React.ReactNode;
753
- /** Below 900px: `"center"` card (default) or `"sheet"` bottom sheet — see Dialog `mobilePresentation`. */
835
+ /** @deprecated Ignored. AlertDialog stays a centered card below 900px. */
754
836
  mobilePresentation?: DialogMobilePresentation;
755
837
  }
756
- declare function InfoModal({ open, onOpenChange, title, description, children, closeLabel, width, footer, mobilePresentation, }: InfoModalProps): react_jsx_runtime.JSX.Element;
838
+ /**
839
+ * @deprecated Use AlertDialog (short) or Dialog (long content). InfoModal is a thin wrapper over
840
+ * AlertDialog's acknowledge mode: role `alertdialog`, outside click does not close it.
841
+ */
842
+ declare function InfoModal({ open, onOpenChange, title, description, children, closeLabel, footer, }: InfoModalProps): react_jsx_runtime.JSX.Element;
757
843
 
758
844
  type FilterToolbarCollapseBelow = "sm" | "md" | "lg" | "never";
759
845
  interface FilterToolbarProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -1002,10 +1088,69 @@ interface ConfirmDialogProps {
1002
1088
  children?: React.ReactNode;
1003
1089
  /** Keeps the confirm button disabled (e.g. until the typed count matches). */
1004
1090
  confirmDisabled?: boolean;
1005
- /** Below 900px: `"center"` card (default) or `"sheet"` bottom sheet — see Dialog `mobilePresentation`. */
1091
+ /**
1092
+ * @deprecated Ignored. AlertDialog stays a centered card below 900px.
1093
+ */
1006
1094
  mobilePresentation?: DialogMobilePresentation;
1095
+ /** Scrim preset; wins over `<html data-scrim>`. Default: the root preset, else `--scrim`. */
1096
+ scrim?: OverlayScrim;
1007
1097
  }
1008
- declare function ConfirmDialog({ open, onOpenChange, title, description, tone, confirmLabel, cancelLabel, onConfirm, loading, children, confirmDisabled, mobilePresentation, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
1098
+ /**
1099
+ * @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.
1101
+ */
1102
+ declare function ConfirmDialog({ open, onOpenChange, title, description, tone, confirmLabel, cancelLabel, onConfirm, loading, children, confirmDisabled, scrim, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
1103
+
1104
+ /** Confirm button tone. Same words as Button `tone`. */
1105
+ type AlertDialogTone = "neutral" | "danger";
1106
+ interface AlertDialogBaseProps {
1107
+ open: boolean;
1108
+ onOpenChange: (open: boolean) => void;
1109
+ /** Heading, also the dialog's accessible name. */
1110
+ title: string;
1111
+ /** One or two sentences under the title, also the accessible description. */
1112
+ description?: string;
1113
+ /**
1114
+ * Short body between the description and the footer: one input for a typed confirmation, or a
1115
+ * short list. When it holds an input, that input gets the initial focus.
1116
+ */
1117
+ children?: React.ReactNode;
1118
+ /** Scrim preset; wins over `<html data-scrim>`. Default: the root preset, else `--scrim`. */
1119
+ scrim?: OverlayScrim;
1120
+ }
1121
+ interface AlertDialogConfirmProps {
1122
+ /** Confirm button label. Its presence selects confirm mode (`[cancel][confirm]`). */
1123
+ confirmLabel: string;
1124
+ /**
1125
+ * Runs on confirm. While it runs, Escape and cancel do nothing; when it resolves the dialog
1126
+ * closes. When it rejects the dialog stays open (see `onError`).
1127
+ */
1128
+ onConfirm: () => void | Promise<void>;
1129
+ /** Receives a rejection of `onConfirm` instead of rethrowing it. Without it the rejection propagates. */
1130
+ onError?: (error: unknown) => void;
1131
+ /** Cancel button label. Default '취소'. Initial focus is on it unless the body holds an input. */
1132
+ cancelLabel?: string;
1133
+ /** Confirm button tone. Default `"neutral"`. */
1134
+ tone?: AlertDialogTone;
1135
+ /** Keeps the confirm button disabled (e.g. until the typed count matches). */
1136
+ confirmDisabled?: boolean;
1137
+ /** Shows the confirm button busy and blocks closing, for an action run outside `onConfirm`. */
1138
+ loading?: boolean;
1139
+ acknowledgeLabel?: never;
1140
+ }
1141
+ interface AlertDialogAcknowledgeProps {
1142
+ /** Label of the single button that closes (acknowledge mode). Default '확인'. Initial focus is on it. */
1143
+ acknowledgeLabel?: string;
1144
+ confirmLabel?: never;
1145
+ onConfirm?: never;
1146
+ onError?: never;
1147
+ cancelLabel?: never;
1148
+ tone?: never;
1149
+ confirmDisabled?: never;
1150
+ loading?: never;
1151
+ }
1152
+ type AlertDialogProps = AlertDialogBaseProps & (AlertDialogConfirmProps | AlertDialogAcknowledgeProps);
1153
+ declare function AlertDialog({ open, onOpenChange, title, description, children, scrim, confirmLabel, onConfirm, onError, cancelLabel, tone, confirmDisabled, loading, acknowledgeLabel, }: AlertDialogProps): React.ReactElement;
1009
1154
 
1010
1155
  declare function Separator({ className, orientation, decorative, ...props }: React.ComponentProps<typeof Separator$1.Root>): react_jsx_runtime.JSX.Element;
1011
1156
 
@@ -1031,19 +1176,72 @@ type SheetMotionConfig = {
1031
1176
  duration?: SheetMotionDuration;
1032
1177
  easing?: SheetMotionEasing;
1033
1178
  };
1034
- declare function Sheet({ ...props }: React.ComponentProps<typeof Dialog$1.Root>): react_jsx_runtime.JSX.Element;
1179
+ /** Structured Sheet width from 900px: 480 · 720 · viewport minus `--space-8`. */
1180
+ type SheetSize = "md" | "lg" | "full";
1181
+ /**
1182
+ * 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).
1184
+ */
1185
+ interface SheetProps {
1186
+ open: boolean;
1187
+ onOpenChange: (open: boolean) => void;
1188
+ /** Heading, also the sheet's accessible name. Its presence selects the structured mode. */
1189
+ title: string;
1190
+ /** Line under the title, also the accessible description. */
1191
+ description?: string;
1192
+ /** Above the title: a path or status badges. */
1193
+ caption?: React.ReactNode;
1194
+ /** Header controls before the X, e.g. an expand toggle. */
1195
+ headerActions?: React.ReactNode;
1196
+ /** Edge from 900px. Default `"right"`. Below 900px it is a bottom sheet. */
1197
+ side?: "right" | "left";
1198
+ /** Width from 900px. Default `"md"`. */
1199
+ size?: SheetSize;
1200
+ /** Body. Scrolls inside the sheet. */
1201
+ children: React.ReactNode;
1202
+ /** Footer content (buttons), under one line. No footer, no line. */
1203
+ footer?: React.ReactNode;
1204
+ /** Accessible name of the X. Default '닫기'. */
1205
+ closeLabel?: string;
1206
+ /** Side panel motion from 900px (`false`: none). Same as SheetContent `motion`. */
1207
+ motion?: SheetMotionConfig | false;
1208
+ /** Scrim preset; wins over `<html data-scrim>`. */
1209
+ scrim?: OverlayScrim;
1210
+ /** Body content layout only (not the box). */
1211
+ className?: string;
1212
+ }
1213
+ /** Legacy root: the Radix Dialog Root for `SheetContent` composition (no `title`). */
1214
+ type SheetRootProps = React.ComponentProps<typeof Dialog$1.Root> & {
1215
+ title?: never;
1216
+ };
1217
+ declare function Sheet(props: SheetProps | SheetRootProps): react_jsx_runtime.JSX.Element;
1035
1218
  declare function SheetTrigger({ ...props }: React.ComponentProps<typeof Dialog$1.Trigger>): react_jsx_runtime.JSX.Element;
1036
1219
  declare function SheetClose({ ...props }: React.ComponentProps<typeof Dialog$1.Close>): react_jsx_runtime.JSX.Element;
1037
- declare function SheetContent({ className, children, side, mobileSide, motion, showCloseButton, style, onOpenAutoFocus, onCloseAutoFocus, ...props }: React.ComponentProps<typeof Dialog$1.Content> & {
1220
+ /**
1221
+ * @deprecated Legacy composition, removed in 0.21. Use `Sheet` with `title` (the structured Sheet).
1222
+ */
1223
+ declare function SheetContent({ className, children, side, mobileSide, motion, showCloseButton, scrim, style, onOpenAutoFocus, onCloseAutoFocus, ...props }: React.ComponentProps<typeof Dialog$1.Content> & {
1224
+ /**
1225
+ * Edge. `"top"` and `"bottom"` are deprecated: the structured Sheet takes `"right"` or `"left"`
1226
+ * from 900px and is a bottom sheet below.
1227
+ */
1038
1228
  side?: "top" | "right" | "bottom" | "left";
1229
+ /** @deprecated The structured Sheet is a bottom sheet below 900px by rule. */
1039
1230
  mobileSide?: "top" | "right" | "bottom" | "left";
1040
1231
  motion?: SheetMotionConfig | false;
1041
1232
  showCloseButton?: boolean;
1233
+ /** Scrim preset; wins over `<html data-scrim>`. Default: the root preset, else `--scrim`. */
1234
+ scrim?: OverlayScrim;
1042
1235
  }): react_jsx_runtime.JSX.Element;
1236
+ /** @deprecated Legacy composition, removed in 0.21. Use `Sheet` with `title` (the structured Sheet): the body is the Sheet's children. */
1043
1237
  declare function SheetBody({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
1238
+ /** @deprecated Legacy composition, removed in 0.21. Use `Sheet` with `title` (the structured Sheet): `title`, `description`, `caption`, `headerActions`. */
1044
1239
  declare function SheetHeader({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
1240
+ /** @deprecated Legacy composition, removed in 0.21. Use `Sheet` with `title` (the structured Sheet): `footer`. */
1045
1241
  declare function SheetFooter({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
1242
+ /** @deprecated Legacy composition, removed in 0.21. Use `Sheet` with `title` (the structured Sheet): `title`. */
1046
1243
  declare function SheetTitle({ className, ...props }: React.ComponentProps<typeof Dialog$1.Title>): react_jsx_runtime.JSX.Element;
1244
+ /** @deprecated Legacy composition, removed in 0.21. Use `Sheet` with `title` (the structured Sheet): `description`. */
1047
1245
  declare function SheetDescription({ className, ...props }: React.ComponentProps<typeof Dialog$1.Description>): react_jsx_runtime.JSX.Element;
1048
1246
 
1049
1247
  interface SheetDrawerProps {
@@ -1068,6 +1266,11 @@ interface SheetDrawerProps {
1068
1266
  motion?: SheetMotionConfig | false;
1069
1267
  closeLabel?: string;
1070
1268
  }
1269
+ /**
1270
+ * @deprecated Use `Sheet` with `title` (the structured Sheet). SheetDrawer is now a thin wrapper:
1271
+ * `width` default/wide/full → `size` md/lg/full, `expanded` → `full`, and the expand toggle goes to
1272
+ * `headerActions`.
1273
+ */
1071
1274
  declare function SheetDrawer({ open, onOpenChange, caption, title, description, children, expandHref, onExpand, expandLabel, expanded, onExpandedChange, collapseLabel, footer, width, motion, closeLabel, }: SheetDrawerProps): react_jsx_runtime.JSX.Element;
1072
1275
 
1073
1276
  type ActionSheetIconProps = {
@@ -1093,11 +1296,64 @@ interface ActionSheetProps {
1093
1296
  title: string;
1094
1297
  description?: string;
1095
1298
  items: ActionSheetItem[];
1096
- /** Accessible name of the header close button. */
1299
+ /** Accessible name of the screen-reader-only close button (D9). */
1097
1300
  closeLabel?: string;
1098
1301
  }
1302
+ /**
1303
+ * @deprecated Use ActionMenu: the same items become a DropdownMenu from 900px and this menu sheet
1304
+ * below, from one trigger.
1305
+ */
1099
1306
  declare function ActionSheet({ open, onOpenChange, title, description, items, closeLabel, }: ActionSheetProps): react_jsx_runtime.JSX.Element;
1100
1307
 
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
+
1101
1357
  declare function TooltipProvider({ delayDuration, ...props }: React.ComponentProps<typeof Tooltip$1.Provider>): react_jsx_runtime.JSX.Element;
1102
1358
  interface TooltipProps extends React.ComponentProps<typeof Tooltip$1.Root> {
1103
1359
  /**
@@ -1828,4 +2084,4 @@ interface OrganizationLogoProps extends Omit<SVGProps<SVGSVGElement>, "width" |
1828
2084
  }
1829
2085
  declare function OrganizationLogo({ organization, size, className, style, role, "aria-label": ariaLabel, "aria-hidden": ariaHidden, ...props }: OrganizationLogoProps): react_jsx_runtime.JSX.Element;
1830
2086
 
1831
- export { ActionFooter, type ActionFooterAction, type ActionFooterProps, type ActionFooterStatus, ActionSheet, type ActionSheetIconProps, type ActionSheetItem, type ActionSheetProps, Alert, 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, DialogRawContent, 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, 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, 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, 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 };
2087
+ 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, 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 };