@bug-on/m3-expressive 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/README.md +110 -0
  3. package/dist/assets/fonts/GoogleSansFlex-VariableFont.woff2 +0 -0
  4. package/dist/assets/fonts/MaterialSymbolsOutlined-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  5. package/dist/assets/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  6. package/dist/assets/fonts/MaterialSymbolsSharp-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  7. package/dist/assets/loading-indicator.svg +19 -0
  8. package/dist/assets/material-symbols-cdn.css +65 -0
  9. package/dist/assets/material-symbols-self-hosted.css +94 -0
  10. package/dist/buttons.d.mts +180 -0
  11. package/dist/buttons.d.ts +180 -0
  12. package/dist/buttons.js +4282 -0
  13. package/dist/buttons.js.map +1 -0
  14. package/dist/buttons.mjs +4227 -0
  15. package/dist/buttons.mjs.map +1 -0
  16. package/dist/core.d.mts +422 -0
  17. package/dist/core.d.ts +422 -0
  18. package/dist/core.js +2581 -0
  19. package/dist/core.js.map +1 -0
  20. package/dist/core.mjs +2547 -0
  21. package/dist/core.mjs.map +1 -0
  22. package/dist/feedback.d.mts +600 -0
  23. package/dist/feedback.d.ts +600 -0
  24. package/dist/feedback.js +2357 -0
  25. package/dist/feedback.js.map +1 -0
  26. package/dist/feedback.mjs +2321 -0
  27. package/dist/feedback.mjs.map +1 -0
  28. package/dist/forms.d.mts +40 -0
  29. package/dist/forms.d.ts +40 -0
  30. package/dist/forms.js +4263 -0
  31. package/dist/forms.js.map +1 -0
  32. package/dist/forms.mjs +4228 -0
  33. package/dist/forms.mjs.map +1 -0
  34. package/dist/icon-button-D-gs0gfj.d.mts +136 -0
  35. package/dist/icon-button-D-gs0gfj.d.ts +136 -0
  36. package/dist/index.css +309 -0
  37. package/dist/index.css.d.ts +2 -0
  38. package/dist/index.d.mts +24 -0
  39. package/dist/index.d.ts +24 -0
  40. package/dist/index.js +23972 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/index.mjs +23668 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/layout.d.mts +610 -0
  45. package/dist/layout.d.ts +610 -0
  46. package/dist/layout.js +5091 -0
  47. package/dist/layout.js.map +1 -0
  48. package/dist/layout.mjs +5042 -0
  49. package/dist/layout.mjs.map +1 -0
  50. package/dist/material-symbols-cdn.css +65 -0
  51. package/dist/material-symbols-cdn.css.d.ts +2 -0
  52. package/dist/material-symbols-self-hosted.css +94 -0
  53. package/dist/material-symbols-self-hosted.css.d.ts +2 -0
  54. package/dist/md3-DFhj-NZj.d.mts +17 -0
  55. package/dist/md3-DFhj-NZj.d.ts +17 -0
  56. package/dist/navigation.d.mts +2766 -0
  57. package/dist/navigation.d.ts +2766 -0
  58. package/dist/navigation.js +6684 -0
  59. package/dist/navigation.js.map +1 -0
  60. package/dist/navigation.mjs +6573 -0
  61. package/dist/navigation.mjs.map +1 -0
  62. package/dist/overlays.d.mts +161 -0
  63. package/dist/overlays.d.ts +161 -0
  64. package/dist/overlays.js +3298 -0
  65. package/dist/overlays.js.map +1 -0
  66. package/dist/overlays.mjs +3244 -0
  67. package/dist/overlays.mjs.map +1 -0
  68. package/dist/pickers.d.mts +1074 -0
  69. package/dist/pickers.d.ts +1074 -0
  70. package/dist/pickers.js +4240 -0
  71. package/dist/pickers.js.map +1 -0
  72. package/dist/pickers.mjs +4200 -0
  73. package/dist/pickers.mjs.map +1 -0
  74. package/dist/plugin.d.mts +1 -0
  75. package/dist/plugin.d.ts +1 -0
  76. package/dist/plugin.js +13 -0
  77. package/dist/plugin.js.map +1 -0
  78. package/dist/plugin.mjs +3 -0
  79. package/dist/plugin.mjs.map +1 -0
  80. package/dist/scroll-area-CVS6HyLl.d.mts +33 -0
  81. package/dist/scroll-area-CVS6HyLl.d.ts +33 -0
  82. package/dist/shapes.d.mts +1119 -0
  83. package/dist/shapes.d.ts +1119 -0
  84. package/dist/shapes.js +2941 -0
  85. package/dist/shapes.js.map +1 -0
  86. package/dist/shapes.mjs +2889 -0
  87. package/dist/shapes.mjs.map +1 -0
  88. package/dist/side-sheet-modal-BY6VCC8p.d.mts +553 -0
  89. package/dist/side-sheet-modal-CglP6KYA.d.ts +553 -0
  90. package/dist/split-button-trailing-uncheckable-C5CLCIKP.d.ts +731 -0
  91. package/dist/split-button-trailing-uncheckable-MXj_kyNt.d.mts +731 -0
  92. package/dist/text-field-eAIpz9z1.d.mts +1038 -0
  93. package/dist/text-field-eAIpz9z1.d.ts +1038 -0
  94. package/dist/typography-339RV6v7.d.mts +486 -0
  95. package/dist/typography-339RV6v7.d.ts +486 -0
  96. package/dist/typography.css +22 -0
  97. package/dist/typography.css.d.ts +2 -0
  98. package/package.json +207 -0
@@ -0,0 +1,553 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as RadixDialog from '@radix-ui/react-dialog';
3
+ import * as React$1 from 'react';
4
+ import { MotionStyle, useMotionValue, useTransform } from 'motion/react';
5
+ import { b as ScrollAreaProps } from './scroll-area-CVS6HyLl.js';
6
+
7
+ /**
8
+ * Thuộc tính của cội gốc Root `Dialog`. Chức năng làm gương phản hồi của Radix `Dialog.Root` qua dạng controlled state đóng hay mở.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const [open, setOpen] = React.useState(false);
13
+ *
14
+ * <Dialog open={open} onOpenChange={setOpen}>
15
+ * <DialogTrigger asChild>
16
+ * <Button>Bấm Mở Dialog</Button>
17
+ * </DialogTrigger>
18
+ * <DialogContent>
19
+ * <DialogHeader>
20
+ * <DialogTitle>Bạn có muốn phiêu lưu không?</DialogTitle>
21
+ * </DialogHeader>
22
+ * <DialogBody>Chuẩn bị lên đồ rời khỏi hang nào.</DialogBody>
23
+ * <DialogFooter>
24
+ * <Button onClick={() => setOpen(false)} variant="text">Đóng</Button>
25
+ * </DialogFooter>
26
+ * </DialogContent>
27
+ * </Dialog>
28
+ * ```
29
+ */
30
+ interface DialogProps {
31
+ /** Whether the dialog is open (controlled). Omit for uncontrolled. */
32
+ open?: boolean;
33
+ /** Called when the open state should change. */
34
+ onOpenChange?: (open: boolean) => void;
35
+ /** Dialog trigger + content. */
36
+ children: React$1.ReactNode;
37
+ }
38
+ /**
39
+ * Các props được tiêm vào component bao ngoài Container `DialogContent` thuộc dạng Normal Standard.
40
+ *
41
+ * @see {@link DialogContent}
42
+ */
43
+ interface DialogContentProps extends React$1.ComponentPropsWithoutRef<typeof RadixDialog.Content> {
44
+ /** Vô hình đi đi nút Close dấu (X) góc phải trên. @default false */
45
+ hideCloseButton?: boolean;
46
+ className?: string;
47
+ }
48
+ /**
49
+ * Thuộc tính Props của biến thể `DialogFullScreenContent` chuyên dụng dành riêng cho Mode Full-Screen tràn màn hình.
50
+ *
51
+ * @remarks
52
+ * Những hộp thoại Full-screen có biệt tài tự nới rộng và xâm chiếm cả bề ngang dọc nguyên thiết bị. Nó còn thiết lập một đường Top App bar (thanh ngang đỉnh)
53
+ * kẹp chung cả 1 nhãn title mô tả đỉnh, một nút icon X dẹp ở rìa, thêm luôn hẳn cái nút Confirm cực xịn xò.
54
+ *
55
+ * @see {@link DialogFullScreenContent}
56
+ * @see https://m3.material.io/components/dialogs/guidelines#full-screen
57
+ */
58
+ interface DialogFullScreenContentProps extends React$1.ComponentPropsWithoutRef<typeof RadixDialog.Content> {
59
+ /** Nhãn Title nằm vùng khu vực thanh ngang Top Bar. */
60
+ title?: string;
61
+ /** Chữ viết đính kèm bên trong cục Nút nhấn thao tác ngay trên góc Top App bar đó (VD: "Lưu lại", "Save"). */
62
+ actionLabel?: string;
63
+ /** Hàm handler phát động cờ để kích chạy tính năng lưu, xác nhận kia. */
64
+ onAction?: () => void;
65
+ /** Rạch một làn kẻ chia cách thân body nội dung cuộn bên dưới và dòng App bar cố thủ bên trên. @default false */
66
+ showDivider?: boolean;
67
+ className?: string;
68
+ }
69
+ /**
70
+ * Gốc rễ Root của Component Dialog — trạc lấp lên cái module `Dialog.Root` của nhà Radix.
71
+ *
72
+ * @remarks Cơ năng hoạt động ở chế độ Controlled (kiểm soát vòng đời ở Client) xài mảng `open`/`onOpenChange`.
73
+ * Tuy thế bạn nếu không thích thì đừng có xài truyền mấy cái Props tay đôi trên, mà bỏ xài kiểu Untracked thông qua cái cục `DialogTrigger` là đủ.
74
+ */
75
+ declare const Dialog: {
76
+ ({ open, onOpenChange, children }: DialogProps): react_jsx_runtime.JSX.Element;
77
+ displayName: string;
78
+ };
79
+ /** Bộ Trigger gieo phát đà giúp tắt bật cờ State đóng mở của Dialog con, dùng kèm kĩ năng nhét thông qua cái cầu `asChild`. */
80
+ declare const DialogTrigger: React$1.ForwardRefExoticComponent<RadixDialog.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
81
+ declare const DialogPortal: {
82
+ ({ open, children, }: {
83
+ open?: boolean;
84
+ children: React$1.ReactNode;
85
+ }): react_jsx_runtime.JSX.Element;
86
+ displayName: string;
87
+ };
88
+ declare const DialogOverlay: React$1.ForwardRefExoticComponent<Omit<RadixDialog.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
89
+ declare const DialogContent: React$1.ForwardRefExoticComponent<DialogContentProps & React$1.RefAttributes<HTMLDivElement>>;
90
+ declare const DialogIcon: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
91
+ declare const DialogHeader: {
92
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
93
+ displayName: string;
94
+ };
95
+ declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<RadixDialog.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
96
+ declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<RadixDialog.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
97
+ declare const DialogBody: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
98
+ declare const DialogFooter: {
99
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
100
+ displayName: string;
101
+ };
102
+ declare const DialogClose: React$1.ForwardRefExoticComponent<RadixDialog.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
103
+ declare const DialogFullScreenContent: React$1.ForwardRefExoticComponent<DialogFullScreenContentProps & React$1.RefAttributes<HTMLDivElement>>;
104
+
105
+ interface DrawerProps {
106
+ open?: boolean;
107
+ onOpenChange?: (open: boolean) => void;
108
+ children: React$1.ReactNode;
109
+ }
110
+ interface DrawerContentProps extends Omit<React$1.ComponentPropsWithoutRef<typeof RadixDialog.Content>, "asChild"> {
111
+ /** Chiều cao tối đa (vh). Mặc định 90vh */
112
+ maxHeight?: string;
113
+ /** Ẩn drag handle */
114
+ hideHandle?: boolean;
115
+ /** Ẩn nút đóng */
116
+ hideCloseButton?: boolean;
117
+ className?: string;
118
+ }
119
+ declare const Drawer: {
120
+ ({ open, onOpenChange, children }: DrawerProps): react_jsx_runtime.JSX.Element;
121
+ displayName: string;
122
+ };
123
+ declare const DrawerTrigger: React$1.ForwardRefExoticComponent<RadixDialog.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
124
+ declare const DrawerClose: React$1.ForwardRefExoticComponent<RadixDialog.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
125
+ declare const DrawerPortal: ({ open, children, }: {
126
+ open?: boolean;
127
+ children: React$1.ReactNode;
128
+ }) => react_jsx_runtime.JSX.Element;
129
+ declare const DrawerOverlay: React$1.ForwardRefExoticComponent<Omit<RadixDialog.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
130
+ declare const DrawerContent: React$1.ForwardRefExoticComponent<DrawerContentProps & React$1.RefAttributes<HTMLDivElement>>;
131
+ declare const DrawerHeader: {
132
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
133
+ displayName: string;
134
+ };
135
+ declare const DrawerFooter: {
136
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
137
+ displayName: string;
138
+ };
139
+ declare const DrawerTitle: React$1.ForwardRefExoticComponent<Omit<RadixDialog.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
140
+ declare const DrawerDescription: React$1.ForwardRefExoticComponent<Omit<RadixDialog.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
141
+
142
+ /**
143
+ * @file sheets/shared/types.ts
144
+ *
145
+ * Shared TypeScript type definitions for Bottom Sheet and Side Sheet components.
146
+ *
147
+ * @see https://m3.material.io/components/sheets-bottom/overview
148
+ * @see https://m3.material.io/components/side-sheets/overview
149
+ */
150
+
151
+ /**
152
+ * Discrete states of a Bottom Sheet, mirroring Android's `SheetValue` enum.
153
+ *
154
+ * - `hidden` — Sheet is fully off-screen (below viewport).
155
+ * - `partiallyExpanded` — Sheet is visible at ≤ 50% of screen height.
156
+ * - `expanded` — Sheet is fully expanded (full screen height).
157
+ */
158
+ type SheetValue = "hidden" | "partiallyExpanded" | "expanded";
159
+ /**
160
+ * Lifecycle state of a Sheet component.
161
+ *
162
+ * - `closed` — Fully hidden, not in the DOM.
163
+ * - `opening` — Animating into view.
164
+ * - `open` — Fully visible and interactive.
165
+ * - `dragging` — User is actively dragging (bottom sheet only).
166
+ * - `closing` — Animating out of view.
167
+ */
168
+ type SheetState = "closed" | "opening" | "open" | "dragging" | "closing";
169
+ /**
170
+ * Screen edge a Side Sheet slides in from.
171
+ * Supports RTL layouts.
172
+ *
173
+ * - `start` — Logical start edge (left in LTR, right in RTL).
174
+ * - `end` — Logical end edge (right in LTR, left in RTL).
175
+ */
176
+ type SheetEdge = "start" | "end";
177
+ /**
178
+ * Base props shared across all Sheet component variants.
179
+ */
180
+ interface BaseSheetProps {
181
+ /** Controls whether the sheet is visible. */
182
+ isOpen: boolean;
183
+ /** Called when the sheet should close (drag-dismiss, Escape key, scrim click). */
184
+ onClose: () => void;
185
+ /** Content rendered inside the sheet. */
186
+ children: React$1.ReactNode;
187
+ /** Additional CSS classes applied to the sheet container. */
188
+ className?: string;
189
+ /** ID of the element labelling this sheet (`aria-labelledby`). */
190
+ "aria-labelledby"?: string;
191
+ /** Accessible label when no visible heading is present (`aria-label`). */
192
+ "aria-label"?: string;
193
+ /**
194
+ * Whether to render the sheet inside a React Portal (at `document.body`).
195
+ * Defaults to `true` for standard sheets. Modals always use portals.
196
+ */
197
+ portal?: boolean;
198
+ /** Fixed header slot rendered above the scrollable content area. */
199
+ header?: React$1.ReactNode;
200
+ /** Fixed footer slot rendered below the scrollable content area. */
201
+ footer?: React$1.ReactNode;
202
+ /**
203
+ * Controls divider visibility between header/footer and the scroll area.
204
+ * - `true` (default) — Show divider when header/footer is present.
205
+ * - `false` — Hide all dividers.
206
+ * - `{ header?, footer? }` — Toggle each position independently.
207
+ */
208
+ divider?: boolean | {
209
+ header?: boolean;
210
+ footer?: boolean;
211
+ };
212
+ /** Props forwarded to the inner `ScrollArea` component. */
213
+ scrollAreaProps?: Omit<ScrollAreaProps, "children">;
214
+ /**
215
+ * Snap points for the Bottom Sheet.
216
+ * @example `['fit', '70%', 'full']`
217
+ */
218
+ snapPoints?: BottomSheetSnapPoint[];
219
+ /**
220
+ * Initial snap point when the Bottom Sheet opens.
221
+ * Defaults to the first entry in `snapPoints`.
222
+ */
223
+ defaultSnapPoint?: BottomSheetSnapPoint;
224
+ /** Called when the Bottom Sheet moves to a new snap point. */
225
+ onSnapChange?: (snapPoint: BottomSheetSnapPoint) => void;
226
+ /**
227
+ * When `false`, skip the `partiallyExpanded` state and open directly to full height.
228
+ * Mirrors `skipPartiallyExpanded` in Android's `SheetState`.
229
+ * @default false
230
+ */
231
+ skipPartiallyExpanded?: boolean;
232
+ /**
233
+ * Whether drag/swipe gestures are enabled on this sheet.
234
+ * When `false`, the sheet can only be dismissed programmatically.
235
+ * Mirrors `sheetGesturesEnabled` in Android's `ModalBottomSheet`.
236
+ * @default true
237
+ */
238
+ gesturesEnabled?: boolean;
239
+ /**
240
+ * Override the background color of the sheet container.
241
+ * Accepts any CSS color value. Defaults to `surfaceContainerLow` token.
242
+ */
243
+ containerColor?: string;
244
+ /**
245
+ * Max width of the sheet. On viewports wider than this value, the sheet
246
+ * is centered with equal margins on both sides.
247
+ * Accepts any CSS length. Defaults to `var(--m3-bottom-sheet-max-width, 640px)`.
248
+ */
249
+ sheetMaxWidth?: string | number;
250
+ }
251
+ /** Valid snap point values for Bottom Sheet. */
252
+ type BottomSheetSnapPoint = "fit" | "max-content" | "full" | string | number;
253
+ /**
254
+ * Imperative handle exposed on the Bottom Sheet's DOM node.
255
+ * Allows programmatic snapping via `ref.current.snapTo(snapPoint)`.
256
+ *
257
+ * @example
258
+ * ```tsx
259
+ * const sheetRef = useRef<HTMLDivElement & BottomSheetHandle>(null);
260
+ * sheetRef.current?.snapTo('full');
261
+ * ```
262
+ */
263
+ interface BottomSheetHandle {
264
+ /** Programmatically animate the sheet to a specific snap point. */
265
+ snapTo: (snapPoint: BottomSheetSnapPoint) => void;
266
+ }
267
+ /** Props for the `DragHandle` component used in Bottom Sheets. */
268
+ interface DragHandleProps {
269
+ /** Additional CSS classes. */
270
+ className?: string;
271
+ /**
272
+ * Called when the drag handle is activated via click, Space, or Enter.
273
+ * Should cycle the sheet through its available snap points / dismiss.
274
+ * When provided, the handle becomes keyboard-interactive with `role="button"`.
275
+ */
276
+ onCycle?: () => void;
277
+ /** Accessible label for the drag handle button. */
278
+ "aria-label"?: string;
279
+ }
280
+ /** Props for the `Scrim` backdrop overlay component. */
281
+ interface ScrimProps {
282
+ /** Called when the scrim is clicked — typically closes the sheet. */
283
+ onClick: () => void;
284
+ /** Additional CSS classes. */
285
+ className?: string;
286
+ /** Motion style (supports MotionValue for animated opacity). */
287
+ style?: MotionStyle;
288
+ }
289
+
290
+ /**
291
+ * @file sheets/bottom-sheet/bottom-sheet.tsx
292
+ *
293
+ * Standard (non-modal) Bottom Sheet following MD3 specification.
294
+ *
295
+ * - Slide-up animation with DEFAULT_SPATIAL_SPRING
296
+ * - Drag-to-dismiss with seamless nested scroll handling
297
+ * - Visual Viewport API for mobile keyboard resize
298
+ * - WAI-ARIA: `role="dialog"`, `aria-modal="false"`
299
+ * - SSR-safe portal rendering
300
+ *
301
+ * @see https://m3.material.io/components/sheets-bottom/overview
302
+ */
303
+
304
+ /**
305
+ * Props for the standard (non-modal) Bottom Sheet.
306
+ */
307
+ interface BottomSheetProps extends BaseSheetProps {
308
+ /**
309
+ * Maximum height of the sheet.
310
+ * @default "90dvh"
311
+ */
312
+ maxHeight?: string;
313
+ /**
314
+ * Hide the drag handle visual indicator.
315
+ * @default false
316
+ */
317
+ hideHandle?: boolean;
318
+ }
319
+ /**
320
+ * Standard (non-modal) Bottom Sheet that slides up from the bottom edge.
321
+ *
322
+ * Does NOT trap focus or block background interaction. Use `BottomSheetModal`
323
+ * for blocking behaviour.
324
+ *
325
+ * @example
326
+ * ```tsx
327
+ * <BottomSheet isOpen={isOpen} onClose={() => setIsOpen(false)}>
328
+ * <p>Sheet content</p>
329
+ * </BottomSheet>
330
+ * ```
331
+ */
332
+ declare const BottomSheet: React$1.ForwardRefExoticComponent<BottomSheetProps & React$1.RefAttributes<HTMLDivElement>>;
333
+
334
+ /**
335
+ * @file sheets/bottom-sheet/bottom-sheet-modal.tsx
336
+ *
337
+ * Modal Bottom Sheet — blocks background interaction.
338
+ *
339
+ * Android Jetpack Compose parity:
340
+ * - Entry animation: slides up from y=100% (GAP 6 fix)
341
+ * - PartiallyExpanded default: opens at 50% screen (GAP 1 via isModal flag)
342
+ * - sheetMaxWidth: max-width 640px centered (GAP 2 fix)
343
+ * - Scrim opacity linked to drag position via MotionValue (GAP 8 fix)
344
+ * - DragHandle keyboard-accessible with cycle (GAP 3 fix)
345
+ * - gesturesEnabled prop to disable all drag (GAP 7 fix)
346
+ * - containerColor / contentColor props (GAP 9 fix)
347
+ * - IME / Visual Viewport handled by hook (GAP 11 fix)
348
+ *
349
+ * @see https://m3.material.io/components/sheets-bottom/guidelines#modal
350
+ */
351
+
352
+ /**
353
+ * Props for the modal Bottom Sheet.
354
+ */
355
+ interface BottomSheetModalProps extends BaseSheetProps {
356
+ /**
357
+ * Maximum height of the sheet.
358
+ * @default "90dvh"
359
+ */
360
+ maxHeight?: string;
361
+ /**
362
+ * Hide the drag handle visual indicator.
363
+ * @default false
364
+ */
365
+ hideHandle?: boolean;
366
+ }
367
+ /**
368
+ * Modal Bottom Sheet that slides up from the bottom edge.
369
+ *
370
+ * Renders into a portal, traps focus, locks body scroll, and blocks
371
+ * background interaction with an animated Scrim.
372
+ *
373
+ * Dismiss by: swiping down, clicking the Scrim, or pressing Escape.
374
+ *
375
+ * @example
376
+ * ```tsx
377
+ * <BottomSheetModal isOpen={isOpen} onClose={() => setIsOpen(false)} aria-labelledby="sheet-title">
378
+ * <h2 id="sheet-title">Title</h2>
379
+ * <p>Modal sheet content</p>
380
+ * </BottomSheetModal>
381
+ * ```
382
+ */
383
+ declare const BottomSheetModal: React$1.ForwardRefExoticComponent<BottomSheetModalProps & React$1.RefAttributes<HTMLDivElement>>;
384
+
385
+ /**
386
+ * @file sheets/bottom-sheet/use-bottom-sheet.ts
387
+ *
388
+ * Custom hook encapsulating drag-to-dismiss and snap point gesture logic
389
+ * for Bottom Sheet components, using manual touch/pointer events to allow
390
+ * seamless scroll-to-drag handoffs without locking native nested scrolling.
391
+ */
392
+
393
+ interface UseBottomSheetOptions {
394
+ isOpen: boolean;
395
+ onClose: () => void;
396
+ snapPoints?: BottomSheetSnapPoint[];
397
+ defaultSnapPoint?: BottomSheetSnapPoint;
398
+ onSnapChange?: (snapPoint: BottomSheetSnapPoint) => void;
399
+ gesturesEnabled?: boolean;
400
+ isModal?: boolean;
401
+ maxHeight?: string;
402
+ }
403
+ interface UseBottomSheetReturn {
404
+ scope: React.RefCallback<HTMLDivElement | null>;
405
+ y: ReturnType<typeof useMotionValue<number>>;
406
+ scrimOpacity: ReturnType<typeof useTransform<number, number>>;
407
+ activeSnapPoint: BottomSheetSnapPoint;
408
+ isContentScrollable: boolean;
409
+ snapTo: (snapPoint: BottomSheetSnapPoint) => void;
410
+ cycleSnapPoint: () => void;
411
+ dragConstraints: {
412
+ top: number;
413
+ bottom: number;
414
+ };
415
+ }
416
+ declare function useBottomSheet({ isOpen, onClose, snapPoints, defaultSnapPoint, onSnapChange, gesturesEnabled, isModal, maxHeight, }: UseBottomSheetOptions): UseBottomSheetReturn;
417
+
418
+ /**
419
+ * @file sheets/shared/drag-handle.tsx
420
+ *
421
+ * Visual drag handle for Bottom Sheet components.
422
+ *
423
+ * MD3 spec:
424
+ * - Padding top/bottom: 22dp ("Drag handle padding top/bottom: 22dp")
425
+ * - Width: 32dp, Height: 4dp, corner-full radius
426
+ * - Color: on-surface-variant @ 40% opacity
427
+ * - Touch target: top 48dp of sheet is interactive (py-[22px])
428
+ * - When interactive: renders as `<button>`, Tab-focusable, Space/Enter cycles snap points
429
+ * - When decorative: purely visual, no semantics
430
+ *
431
+ * @see https://m3.material.io/components/sheets-bottom/guidelines#handle
432
+ * @see https://m3.material.io/components/sheets-bottom/accessibility
433
+ */
434
+
435
+ declare const DragHandle: React$1.ForwardRefExoticComponent<DragHandleProps & React$1.RefAttributes<HTMLDivElement>>;
436
+
437
+ /**
438
+ * @file sheets/shared/scrim.tsx
439
+ *
440
+ * Animated backdrop overlay (Scrim) for Modal Sheet variants.
441
+ *
442
+ * Supports animated opacity via `style.opacity` (MotionValue) so the scrim
443
+ * fades in real-time as the user drags the sheet toward dismiss position.
444
+ *
445
+ * @see https://m3.material.io/components/sheets-bottom/guidelines#b0025900-5e5b-4c4a-9a76-e0d09d63afdb
446
+ */
447
+
448
+ /**
449
+ * Translucent backdrop rendered behind modal sheet variants.
450
+ * Clicking the scrim triggers `onClick`.
451
+ * Pass `style.opacity` as a MotionValue to link scrim opacity with sheet drag position.
452
+ */
453
+ declare const Scrim: React$1.ForwardRefExoticComponent<ScrimProps & React$1.RefAttributes<HTMLDivElement>>;
454
+
455
+ /**
456
+ * @file sheets/side-sheet/side-sheet.tsx
457
+ *
458
+ * Standard (non-modal) Side Sheet following MD3 specification.
459
+ *
460
+ * - Slides from `start` (left in LTR) or `end` (right in LTR) edge
461
+ * - Coplanar sibling support via `coplanarSiblingRef` — animates adjacent
462
+ * content's margin using a CSS transition
463
+ * - Inline rendering (no portal) — does not block background interaction
464
+ * - WAI-ARIA: `role="complementary"`
465
+ *
466
+ * @see https://m3.material.io/components/side-sheets/overview
467
+ */
468
+
469
+ /**
470
+ * Props for the standard (non-modal) Side Sheet.
471
+ */
472
+ interface SideSheetProps extends BaseSheetProps {
473
+ /**
474
+ * Which edge the sheet slides in from.
475
+ * - `start` — left in LTR, right in RTL
476
+ * - `end` — right in LTR, left in RTL
477
+ * @default "end"
478
+ */
479
+ edge?: SheetEdge;
480
+ /**
481
+ * Width of the sheet.
482
+ * @default "360px"
483
+ */
484
+ width?: string;
485
+ /**
486
+ * Ref to the sibling element that should animate its margin when the
487
+ * sheet opens/closes (coplanar layout).
488
+ *
489
+ * @example
490
+ * ```tsx
491
+ * const mainRef = useRef<HTMLDivElement>(null);
492
+ * <main ref={mainRef}>...</main>
493
+ * <SideSheet coplanarSiblingRef={mainRef} isOpen={open} onClose={handleClose}>
494
+ * ...
495
+ * </SideSheet>
496
+ * ```
497
+ */
498
+ coplanarSiblingRef?: React$1.RefObject<HTMLElement | null>;
499
+ }
500
+ /**
501
+ * Standard (non-modal) Side Sheet that slides in from a screen edge.
502
+ *
503
+ * Does NOT block background interaction. Pass `coplanarSiblingRef` to
504
+ * enable automatic margin animation on an adjacent element.
505
+ */
506
+ declare const SideSheet: React$1.ForwardRefExoticComponent<SideSheetProps & React$1.RefAttributes<HTMLElement>>;
507
+
508
+ /**
509
+ * @file sheets/side-sheet/side-sheet-modal.tsx
510
+ *
511
+ * Modal Side Sheet — blocks background interaction with a Scrim overlay.
512
+ *
513
+ * Differences from `SideSheet` (standard):
514
+ * - Uses `@radix-ui/react-dialog` for focus trap & scroll lock
515
+ * - Portal rendering outside current DOM tree
516
+ * - Scrim blocks background; clicking it calls `onClose`
517
+ * - Escape key calls `onClose` (Radix built-in)
518
+ * - `aria-modal="true"`
519
+ *
520
+ * @see https://m3.material.io/components/side-sheets/guidelines#modal
521
+ */
522
+
523
+ /**
524
+ * Props for the modal Side Sheet.
525
+ */
526
+ interface SideSheetModalProps extends BaseSheetProps {
527
+ /**
528
+ * Which edge the sheet slides in from.
529
+ * @default "end"
530
+ */
531
+ edge?: SheetEdge;
532
+ /**
533
+ * Width of the sheet.
534
+ * @default "360px"
535
+ */
536
+ width?: string;
537
+ }
538
+ /**
539
+ * Modal Side Sheet that slides in from a screen edge and blocks background interaction.
540
+ *
541
+ * Dismiss by: clicking the Scrim or pressing Escape.
542
+ *
543
+ * @example
544
+ * ```tsx
545
+ * <SideSheetModal isOpen={isOpen} onClose={() => setIsOpen(false)} edge="end" aria-labelledby="panel-title">
546
+ * <h2 id="panel-title">Panel</h2>
547
+ * <p>Modal side content</p>
548
+ * </SideSheetModal>
549
+ * ```
550
+ */
551
+ declare const SideSheetModal: React$1.ForwardRefExoticComponent<SideSheetModalProps & React$1.RefAttributes<HTMLDivElement>>;
552
+
553
+ export { type DrawerContentProps as A, type BaseSheetProps as B, DrawerDescription as C, Dialog as D, DrawerFooter as E, DrawerHeader as F, DrawerOverlay as G, DrawerPortal as H, type DrawerProps as I, DrawerTitle as J, DrawerTrigger as K, type ScrimProps as L, type SheetEdge as M, type SheetState as N, SideSheet as O, SideSheetModal as P, type SideSheetModalProps as Q, type SideSheetProps as R, Scrim as S, type UseBottomSheetReturn as T, type UseBottomSheetOptions as U, useBottomSheet as V, type SheetValue as W, BottomSheet as a, type BottomSheetHandle as b, BottomSheetModal as c, type BottomSheetModalProps as d, type BottomSheetProps as e, type BottomSheetSnapPoint as f, DialogBody as g, DialogClose as h, DialogContent as i, type DialogContentProps as j, DialogDescription as k, DialogFooter as l, DialogFullScreenContent as m, type DialogFullScreenContentProps as n, DialogHeader as o, DialogIcon as p, DialogOverlay as q, DialogPortal as r, type DialogProps as s, DialogTitle as t, DialogTrigger as u, DragHandle as v, type DragHandleProps as w, Drawer as x, DrawerClose as y, DrawerContent as z };