@manhphi1309/dialog 0.1.2 → 0.3.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/dist/index.cjs CHANGED
@@ -1,35 +1,124 @@
1
- "use client";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region \0rolldown/runtime.js
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
+ get: ((k) => from[k]).bind(null, key),
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
+ value: mod,
21
+ enumerable: true
22
+ }) : target, mod));
23
+ //#endregion
24
+ let react = require("react");
25
+ react = __toESM(react);
3
26
  let lucide_react = require("lucide-react");
4
27
  let radix_ui = require("radix-ui");
5
28
  let _manhphi1309_button = require("@manhphi1309/button");
6
29
  let _manhphi1309_utils = require("@manhphi1309/utils");
7
30
  let react_jsx_runtime = require("react/jsx-runtime");
8
- //#region index.tsx
31
+ let _manhphi1309_drawer = require("@manhphi1309/drawer");
32
+ let _manhphi1309_hooks = require("@manhphi1309/hooks");
33
+ //#region src/dialog.tsx
34
+ /**
35
+ * Root dialog component. Controls open/close state and provides context
36
+ * to all child primitives via Radix `Dialog.Root`.
37
+ *
38
+ * Can be used as **uncontrolled** (via `defaultOpen`) or **controlled**
39
+ * (via `open` + `onOpenChange`).
40
+ *
41
+ * @example
42
+ * // Uncontrolled
43
+ * <Dialog>
44
+ * <DialogTrigger>Open</DialogTrigger>
45
+ * <DialogContent>...</DialogContent>
46
+ * </Dialog>
47
+ *
48
+ * @example
49
+ * // Controlled
50
+ * const [open, setOpen] = useState(false)
51
+ * <Dialog open={open} onOpenChange={setOpen}>
52
+ * <DialogContent>...</DialogContent>
53
+ * </Dialog>
54
+ */
9
55
  function Dialog({ ...props }) {
10
56
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Dialog.Root, {
11
57
  "data-slot": "dialog",
12
58
  ...props
13
59
  });
14
60
  }
61
+ /**
62
+ * The element that opens the dialog when activated (clicked / keyboard).
63
+ * Thin wrapper around Radix `Dialog.Trigger`.
64
+ *
65
+ * Use `asChild` to compose with your own element instead of the default button.
66
+ *
67
+ * @example
68
+ * <DialogTrigger asChild>
69
+ * <Button variant="outline">Open</Button>
70
+ * </DialogTrigger>
71
+ */
15
72
  function DialogTrigger({ ...props }) {
16
73
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Dialog.Trigger, {
17
74
  "data-slot": "dialog-trigger",
18
75
  ...props
19
76
  });
20
77
  }
78
+ /**
79
+ * Renders its children into a **portal** appended to `document.body`,
80
+ * outside the current DOM tree. This ensures the dialog always appears
81
+ * above other content and is never clipped by parent `overflow` or `z-index`.
82
+ *
83
+ * You rarely need to use this directly — `DialogContent` already wraps its
84
+ * output in a portal automatically.
85
+ */
21
86
  function DialogPortal({ ...props }) {
22
87
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Dialog.Portal, {
23
88
  "data-slot": "dialog-portal",
24
89
  ...props
25
90
  });
26
91
  }
92
+ /**
93
+ * A primitive close trigger. Closes the dialog when activated.
94
+ * Use `asChild` to compose with a custom element.
95
+ *
96
+ * Prefer the built-in `showCloseButton` prop on `DialogContent` or
97
+ * `DialogFooter` for standard close affordances. Use this component
98
+ * when you need a completely custom close action inside the dialog body.
99
+ *
100
+ * @example
101
+ * <DialogClose asChild>
102
+ * <Button variant="ghost">Cancel</Button>
103
+ * </DialogClose>
104
+ */
27
105
  function DialogClose({ ...props }) {
28
106
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Dialog.Close, {
29
107
  "data-slot": "dialog-close",
30
108
  ...props
31
109
  });
32
110
  }
111
+ /**
112
+ * The semi-transparent **backdrop** rendered behind the dialog panel.
113
+ * Covers the full viewport (`fixed inset-0`) with a slight blur and dark tint.
114
+ *
115
+ * Animates:
116
+ * - **Open** → `fade-in-0`
117
+ * - **Close** → `fade-out-0`
118
+ *
119
+ * You rarely need to use this directly — `DialogContent` renders it
120
+ * automatically via `DialogPortal`.
121
+ */
33
122
  function DialogOverlay({ className, ...props }) {
34
123
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Dialog.Overlay, {
35
124
  "data-slot": "dialog-overlay",
@@ -37,6 +126,29 @@ function DialogOverlay({ className, ...props }) {
37
126
  ...props
38
127
  });
39
128
  }
129
+ /**
130
+ * The **visible panel** of the dialog. Rendered centred on screen via
131
+ * `position: fixed; top: 50%; left: 50%; translate(-50%, -50%)`.
132
+ * Automatically wraps itself in `DialogPortal` and renders `DialogOverlay`
133
+ * behind it.
134
+ *
135
+ * By default a ghost ✕ button is positioned in the top-right corner.
136
+ * Pass `showCloseButton={false}` to remove it when you want to control
137
+ * close behaviour exclusively from the footer.
138
+ *
139
+ * Animates:
140
+ * - **Open** → `fade-in-0 + zoom-in-95`
141
+ * - **Close** → `fade-out-0 + zoom-out-95`
142
+ *
143
+ * @param showCloseButton - Whether to render the ✕ ghost button in the
144
+ * top-right corner. Defaults to `true`.
145
+ *
146
+ * @example
147
+ * <DialogContent showCloseButton={false}>
148
+ * <DialogHeader>...</DialogHeader>
149
+ * <DialogFooter showCloseButton>...</DialogFooter>
150
+ * </DialogContent>
151
+ */
40
152
  function DialogContent({ className, children, showCloseButton = true, ...props }) {
41
153
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DialogPortal, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogOverlay, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(radix_ui.Dialog.Content, {
42
154
  "data-slot": "dialog-content",
@@ -58,6 +170,17 @@ function DialogContent({ className, children, showCloseButton = true, ...props }
58
170
  })]
59
171
  })] });
60
172
  }
173
+ /**
174
+ * Layout wrapper for the **top section** of a dialog.
175
+ * Stacks children vertically with `gap-2`. Typically contains
176
+ * `DialogTitle` and optionally `DialogDescription`.
177
+ *
178
+ * @example
179
+ * <DialogHeader>
180
+ * <DialogTitle>Confirm deletion</DialogTitle>
181
+ * <DialogDescription>This action is irreversible.</DialogDescription>
182
+ * </DialogHeader>
183
+ */
61
184
  function DialogHeader({ className, ...props }) {
62
185
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
63
186
  "data-slot": "dialog-header",
@@ -65,6 +188,20 @@ function DialogHeader({ className, ...props }) {
65
188
  ...props
66
189
  });
67
190
  }
191
+ /**
192
+ * Layout wrapper for the **bottom action area** of a dialog.
193
+ * Bleeds to the content panel edges (`-mx-4 -mb-4`), adds a top border
194
+ * and a subtle muted background tint. Actions stack vertically on mobile
195
+ * and align to the right on `sm+` screens.
196
+ *
197
+ * @param showCloseButton - When `true`, appends an outline `Close` button
198
+ * wired to `DialogClose` after any provided `children`. Defaults to `false`.
199
+ *
200
+ * @example
201
+ * <DialogFooter showCloseButton>
202
+ * <Button type="submit">Save</Button>
203
+ * </DialogFooter>
204
+ */
68
205
  function DialogFooter({ className, showCloseButton = false, children, ...props }) {
69
206
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
70
207
  "data-slot": "dialog-footer",
@@ -79,6 +216,16 @@ function DialogFooter({ className, showCloseButton = false, children, ...props }
79
216
  })]
80
217
  });
81
218
  }
219
+ /**
220
+ * The **accessible title** of the dialog. Rendered as a Radix `Dialog.Title`,
221
+ * which is automatically linked to the dialog content via `aria-labelledby`.
222
+ * Screen readers announce this text when the dialog opens.
223
+ *
224
+ * Styled with the heading font token at `text-base font-medium`.
225
+ *
226
+ * @remarks Required for accessibility. Every dialog should have a title,
227
+ * even if visually hidden with `className="sr-only"`.
228
+ */
82
229
  function DialogTitle({ className, ...props }) {
83
230
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Dialog.Title, {
84
231
  "data-slot": "dialog-title",
@@ -86,6 +233,17 @@ function DialogTitle({ className, ...props }) {
86
233
  ...props
87
234
  });
88
235
  }
236
+ /**
237
+ * The **accessible description** of the dialog. Rendered as a Radix
238
+ * `Dialog.Description`, which is linked to the dialog content via
239
+ * `aria-describedby`. Screen readers read this after the title.
240
+ *
241
+ * Styled as small muted text. Anchor tags (`<a>`) inside the description
242
+ * are automatically underlined and change colour on hover.
243
+ *
244
+ * @remarks Optional but recommended. Omit only if the dialog content itself
245
+ * is sufficiently self-descriptive.
246
+ */
89
247
  function DialogDescription({ className, ...props }) {
90
248
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Dialog.Description, {
91
249
  "data-slot": "dialog-description",
@@ -94,6 +252,257 @@ function DialogDescription({ className, ...props }) {
94
252
  });
95
253
  }
96
254
  //#endregion
255
+ //#region src/responsive-dialog.tsx
256
+ const ResponsiveDialogContext = react.createContext({ snap: true });
257
+ /**
258
+ * Adaptive root component that switches between `Dialog` and `Drawer`
259
+ * depending on screen width:
260
+ * - **Desktop (≥ 768 px)** → renders `Dialog` (centred modal overlay)
261
+ * - **Mobile (< 768 px)** → renders `Drawer` (bottom-sheet panel)
262
+ *
263
+ * All props are forwarded unchanged to the active primitive, so `open`,
264
+ * `defaultOpen`, `onOpenChange`, and `modal` all behave identically to
265
+ * the standard `Dialog` root.
266
+ *
267
+ * **Drawer-Specific Props (Mobile Only)**
268
+ * You can pass Vaul-specific props like `snapPoints`. They are cleanly ignored on desktop.
269
+ * - **IMPORTANT:** If you provide `snapPoints`, you must also provide `fadeFromIndex` as a strict number.
270
+ * - **IMPORTANT:** If you pass `activeSnapPoint`, you must also pass `setActiveSnapPoint` and manage it via state (e.g. `useState`). Do not hardcode `activeSnapPoint` without a setter, otherwise the Drawer will glitch and aggressively snap back when dragged.
271
+ *
272
+ * @example
273
+ * <ResponsiveDialog>
274
+ * <ResponsiveDialogTrigger asChild>
275
+ * <Button>Open</Button>
276
+ * </ResponsiveDialogTrigger>
277
+ * <ResponsiveDialogContent>
278
+ * <ResponsiveDialogHeader>
279
+ * <ResponsiveDialogTitle>Title</ResponsiveDialogTitle>
280
+ * </ResponsiveDialogHeader>
281
+ * </ResponsiveDialogContent>
282
+ * </ResponsiveDialog>
283
+ */
284
+ function ResponsiveDialog({ children, snapPoints, activeSnapPoint, setActiveSnapPoint, fadeFromIndex, shouldScaleBackground, dismissible, snap = true, ...props }) {
285
+ const isMobile = (0, _manhphi1309_hooks.useIsMobile)();
286
+ const [internalOpen, setInternalOpen] = react.useState(props.defaultOpen ?? false);
287
+ const isControlled = props.open !== void 0;
288
+ const open = isControlled ? props.open : internalOpen;
289
+ const { onOpenChange } = props;
290
+ const handleOpenChange = react.useCallback((newOpen) => {
291
+ if (!isControlled) setInternalOpen(newOpen);
292
+ onOpenChange?.(newOpen);
293
+ }, [isControlled, onOpenChange]);
294
+ if (isMobile) {
295
+ const drawerProps = {
296
+ ...props,
297
+ open,
298
+ onOpenChange: handleOpenChange,
299
+ snapPoints: snap ? snapPoints ?? [.5, 1] : snapPoints,
300
+ activeSnapPoint,
301
+ setActiveSnapPoint,
302
+ fadeFromIndex: snap ? fadeFromIndex ?? 0 : fadeFromIndex,
303
+ shouldScaleBackground,
304
+ dismissible
305
+ };
306
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResponsiveDialogContext.Provider, {
307
+ value: { snap },
308
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_drawer.Drawer, {
309
+ ...drawerProps,
310
+ children
311
+ })
312
+ });
313
+ }
314
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResponsiveDialogContext.Provider, {
315
+ value: { snap },
316
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dialog, {
317
+ ...props,
318
+ open,
319
+ onOpenChange: handleOpenChange,
320
+ children
321
+ })
322
+ });
323
+ }
324
+ /**
325
+ * The element that opens the responsive dialog/drawer when activated.
326
+ *
327
+ * - **Desktop** → `DialogTrigger` (Radix `Dialog.Trigger`)
328
+ * - **Mobile** → `DrawerTrigger` (Vaul `Drawer.Trigger`)
329
+ *
330
+ * Use `asChild` to render your own element as the trigger instead of
331
+ * the default button wrapper.
332
+ *
333
+ * @example
334
+ * <ResponsiveDialogTrigger asChild>
335
+ * <Button variant="outline">Open</Button>
336
+ * </ResponsiveDialogTrigger>
337
+ */
338
+ function ResponsiveDialogTrigger({ children, ...props }) {
339
+ if ((0, _manhphi1309_hooks.useIsMobile)()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_drawer.DrawerTrigger, {
340
+ ...props,
341
+ children
342
+ });
343
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogTrigger, {
344
+ ...props,
345
+ children
346
+ });
347
+ }
348
+ /**
349
+ * A close trigger that targets the correct primitive for the current
350
+ * viewport:
351
+ * - **Desktop** → `DialogClose` (Radix `Dialog.Close`)
352
+ * - **Mobile** → `DrawerClose` (Vaul `Drawer.Close`)
353
+ *
354
+ * Use `asChild` to wrap a custom element.
355
+ *
356
+ * @example
357
+ * <ResponsiveDialogClose asChild>
358
+ * <Button variant="ghost">Cancel</Button>
359
+ * </ResponsiveDialogClose>
360
+ */
361
+ function ResponsiveDialogClose({ children, ...props }) {
362
+ if ((0, _manhphi1309_hooks.useIsMobile)()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_drawer.DrawerClose, {
363
+ ...props,
364
+ children
365
+ });
366
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogClose, {
367
+ ...props,
368
+ children
369
+ });
370
+ }
371
+ /**
372
+ * The visible panel of the responsive dialog. Delegates to the
373
+ * appropriate primitive:
374
+ * - **Desktop** → `DialogContent` — centred modal with fade + zoom animations.
375
+ * The ✕ close button is shown by default (`showCloseButton={true}`).
376
+ * - **Mobile** → `DrawerContent` — bottom-sheet panel with a drag handle.
377
+ * `showCloseButton` has **no effect** on mobile; the drawer is closed
378
+ * via swipe gesture or the drag handle.
379
+ *
380
+ * @param showCloseButton - Show/hide the ✕ button in the top-right corner
381
+ * on desktop. Has no effect on mobile. Defaults to `true`.
382
+ *
383
+ * @example
384
+ * // Hide the ✕ button and force close via footer only (desktop)
385
+ * <ResponsiveDialogContent showCloseButton={false}>
386
+ * ...
387
+ * </ResponsiveDialogContent>
388
+ */
389
+ function ResponsiveDialogContent({ className, children, showCloseButton = true, ...props }) {
390
+ const isMobile = (0, _manhphi1309_hooks.useIsMobile)();
391
+ const { snap } = react.useContext(ResponsiveDialogContext);
392
+ if (isMobile) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_drawer.DrawerContent, {
393
+ className: (0, _manhphi1309_utils.cn)(snap && "h-[96dvh] !max-h-[96dvh]", className),
394
+ ...props,
395
+ children
396
+ });
397
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogContent, {
398
+ className,
399
+ showCloseButton,
400
+ ...props,
401
+ children
402
+ });
403
+ }
404
+ /**
405
+ * Layout wrapper for the **top section** of the responsive dialog/drawer.
406
+ *
407
+ * - **Desktop** → `DialogHeader` — vertical stack with `gap-2`
408
+ * - **Mobile** → `DrawerHeader` — vertically centred text for bottom/top
409
+ * drawers, left-aligned for side drawers
410
+ *
411
+ * Typically contains `ResponsiveDialogTitle` and optionally
412
+ * `ResponsiveDialogDescription`.
413
+ */
414
+ function ResponsiveDialogHeader({ className, leftNode, rightNode, children, ...props }) {
415
+ if ((0, _manhphi1309_hooks.useIsMobile)()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_drawer.DrawerHeader, {
416
+ leftNode,
417
+ rightNode,
418
+ className,
419
+ ...props,
420
+ children
421
+ });
422
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogHeader, {
423
+ className,
424
+ ...props,
425
+ children
426
+ });
427
+ }
428
+ /**
429
+ * Layout wrapper for the **bottom action area** of the responsive
430
+ * dialog/drawer.
431
+ *
432
+ * - **Desktop** → `DialogFooter` — bleeds to panel edges, top border,
433
+ * actions aligned right on `sm+`
434
+ * - **Mobile** → `DrawerFooter` — `mt-auto` stacked column at the bottom
435
+ * of the drawer
436
+ *
437
+ * @param showCloseButton - When `true`, appends a close button after
438
+ * `children`. On **desktop** this is a `DialogClose`-wrapped outline
439
+ * button; on **mobile** this is a `DrawerClose`-wrapped outline button.
440
+ * Defaults to `false`.
441
+ *
442
+ * @example
443
+ * <ResponsiveDialogFooter showCloseButton>
444
+ * <Button type="submit">Save</Button>
445
+ * </ResponsiveDialogFooter>
446
+ */
447
+ function ResponsiveDialogFooter({ className, children, showCloseButton = false, ...props }) {
448
+ if ((0, _manhphi1309_hooks.useIsMobile)()) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_manhphi1309_drawer.DrawerFooter, {
449
+ className,
450
+ ...props,
451
+ children: [children, showCloseButton && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_drawer.DrawerClose, {
452
+ asChild: true,
453
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_button.Button, {
454
+ variant: "outline",
455
+ children: "Close"
456
+ })
457
+ })]
458
+ });
459
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogFooter, {
460
+ className,
461
+ showCloseButton,
462
+ ...props,
463
+ children
464
+ });
465
+ }
466
+ /**
467
+ * The **accessible title** of the responsive dialog/drawer.
468
+ *
469
+ * - **Desktop** → `DialogTitle` (linked via `aria-labelledby`)
470
+ * - **Mobile** → `DrawerTitle` (linked via `aria-labelledby`)
471
+ *
472
+ * Screen readers announce this text when the panel opens.
473
+ *
474
+ * @remarks Required for accessibility on both desktop and mobile.
475
+ */
476
+ function ResponsiveDialogTitle({ className, ...props }) {
477
+ if ((0, _manhphi1309_hooks.useIsMobile)()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_drawer.DrawerTitle, {
478
+ className,
479
+ ...props
480
+ });
481
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogTitle, {
482
+ className,
483
+ ...props
484
+ });
485
+ }
486
+ /**
487
+ * The **accessible description** of the responsive dialog/drawer.
488
+ *
489
+ * - **Desktop** → `DialogDescription` (linked via `aria-describedby`)
490
+ * - **Mobile** → `DrawerDescription` (linked via `aria-describedby`)
491
+ *
492
+ * @remarks Optional but recommended. Provides supplementary context for
493
+ * screen reader users after the title is announced.
494
+ */
495
+ function ResponsiveDialogDescription({ className, ...props }) {
496
+ if ((0, _manhphi1309_hooks.useIsMobile)()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_manhphi1309_drawer.DrawerDescription, {
497
+ className,
498
+ ...props
499
+ });
500
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogDescription, {
501
+ className,
502
+ ...props
503
+ });
504
+ }
505
+ //#endregion
97
506
  exports.Dialog = Dialog;
98
507
  exports.DialogClose = DialogClose;
99
508
  exports.DialogContent = DialogContent;
@@ -104,3 +513,11 @@ exports.DialogOverlay = DialogOverlay;
104
513
  exports.DialogPortal = DialogPortal;
105
514
  exports.DialogTitle = DialogTitle;
106
515
  exports.DialogTrigger = DialogTrigger;
516
+ exports.ResponsiveDialog = ResponsiveDialog;
517
+ exports.ResponsiveDialogClose = ResponsiveDialogClose;
518
+ exports.ResponsiveDialogContent = ResponsiveDialogContent;
519
+ exports.ResponsiveDialogDescription = ResponsiveDialogDescription;
520
+ exports.ResponsiveDialogFooter = ResponsiveDialogFooter;
521
+ exports.ResponsiveDialogHeader = ResponsiveDialogHeader;
522
+ exports.ResponsiveDialogTitle = ResponsiveDialogTitle;
523
+ exports.ResponsiveDialogTrigger = ResponsiveDialogTrigger;