@wow-two-beta/ui 0.0.61 → 0.0.63
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/actions/index.js +3 -2
- package/dist/actions/toggleButton/ToggleButton.d.ts +1 -0
- package/dist/{chunk-BMSE2X2G.js → chunk-3IVQNIHV.js} +4 -4
- package/dist/{chunk-BMSE2X2G.js.map → chunk-3IVQNIHV.js.map} +1 -1
- package/dist/chunk-4QQLJOGP.js +95 -0
- package/dist/chunk-4QQLJOGP.js.map +1 -0
- package/dist/{chunk-QDECMXNB.js → chunk-5JYRZ5PA.js} +5 -5
- package/dist/{chunk-QDECMXNB.js.map → chunk-5JYRZ5PA.js.map} +1 -1
- package/dist/{chunk-5LFMQORR.js → chunk-BLU5JZAB.js} +7 -7
- package/dist/{chunk-5LFMQORR.js.map → chunk-BLU5JZAB.js.map} +1 -1
- package/dist/{chunk-DJJOQWOG.js → chunk-EQNTG53H.js} +3 -3
- package/dist/{chunk-DJJOQWOG.js.map → chunk-EQNTG53H.js.map} +1 -1
- package/dist/{chunk-VQF4QTBD.js → chunk-H4P5MAGS.js} +5 -5
- package/dist/{chunk-VQF4QTBD.js.map → chunk-H4P5MAGS.js.map} +1 -1
- package/dist/{chunk-FHMZM3CE.js → chunk-MYLSXVIS.js} +4 -4
- package/dist/{chunk-FHMZM3CE.js.map → chunk-MYLSXVIS.js.map} +1 -1
- package/dist/{chunk-FNSC4LAL.js → chunk-NOOKDXIZ.js} +3 -3
- package/dist/{chunk-FNSC4LAL.js.map → chunk-NOOKDXIZ.js.map} +1 -1
- package/dist/{chunk-QGHQDFQN.js → chunk-WIXKLDTN.js} +4 -4
- package/dist/{chunk-QGHQDFQN.js.map → chunk-WIXKLDTN.js.map} +1 -1
- package/dist/{chunk-DUWEP5T3.js → chunk-XB4TU643.js} +29 -9
- package/dist/chunk-XB4TU643.js.map +1 -0
- package/dist/{chunk-TTSJZEL7.js → chunk-XLYJF3HC.js} +41 -3
- package/dist/chunk-XLYJF3HC.js.map +1 -0
- package/dist/{chunk-XN5B3B6Z.js → chunk-XPUKDLD3.js} +7 -4
- package/dist/chunk-XPUKDLD3.js.map +1 -0
- package/dist/{chunk-GDJMPYPU.js → chunk-YNC2CIJR.js} +7 -92
- package/dist/chunk-YNC2CIJR.js.map +1 -0
- package/dist/display/index.js +3 -2
- package/dist/feedback/index.js +3 -3
- package/dist/forms/InputStyles.d.ts +100 -2
- package/dist/forms/index.js +7 -7
- package/dist/forms/select/Select.variants.d.ts +128 -2
- package/dist/index.js +13 -12
- package/dist/layout/index.js +5 -5
- package/dist/nav/index.js +5 -5
- package/dist/overlays/index.js +6 -6
- package/dist/primitives/colorModeProvider/ColorModeProvider.d.ts +22 -0
- package/dist/primitives/colorModeProvider/index.d.ts +1 -0
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-DUWEP5T3.js.map +0 -1
- package/dist/chunk-GDJMPYPU.js.map +0 -1
- package/dist/chunk-TTSJZEL7.js.map +0 -1
- package/dist/chunk-XN5B3B6Z.js.map +0 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { useControlled, useEscape } from './chunk-V267IMBH.js';
|
|
2
|
+
import { Portal, AnchoredPositioner } from './chunk-XLYJF3HC.js';
|
|
3
|
+
import { useId } from './chunk-LGTGZ3RW.js';
|
|
4
|
+
import { composeRefs, cn } from './chunk-X2MYOHOB.js';
|
|
5
|
+
import { useState, useRef, useEffect, isValidElement, cloneElement } from 'react';
|
|
6
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
function Tooltip({
|
|
9
|
+
content,
|
|
10
|
+
children,
|
|
11
|
+
placement = "top",
|
|
12
|
+
openDelay = 700,
|
|
13
|
+
closeDelay = 0,
|
|
14
|
+
open: openProp,
|
|
15
|
+
defaultOpen = false,
|
|
16
|
+
onOpenChange,
|
|
17
|
+
isDisabled
|
|
18
|
+
}) {
|
|
19
|
+
const [open, setOpen] = useControlled({
|
|
20
|
+
controlled: openProp,
|
|
21
|
+
default: defaultOpen,
|
|
22
|
+
onChange: onOpenChange
|
|
23
|
+
});
|
|
24
|
+
const [anchor, setAnchor] = useState(null);
|
|
25
|
+
const tooltipId = useId("tooltip");
|
|
26
|
+
const openTimer = useRef(null);
|
|
27
|
+
const closeTimer = useRef(null);
|
|
28
|
+
const clear = () => {
|
|
29
|
+
if (openTimer.current) clearTimeout(openTimer.current);
|
|
30
|
+
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
31
|
+
openTimer.current = null;
|
|
32
|
+
closeTimer.current = null;
|
|
33
|
+
};
|
|
34
|
+
const show = () => {
|
|
35
|
+
clear();
|
|
36
|
+
openTimer.current = setTimeout(() => setOpen(true), openDelay);
|
|
37
|
+
};
|
|
38
|
+
const hide = () => {
|
|
39
|
+
clear();
|
|
40
|
+
closeTimer.current = setTimeout(() => setOpen(false), closeDelay);
|
|
41
|
+
};
|
|
42
|
+
useEffect(
|
|
43
|
+
() => () => {
|
|
44
|
+
if (openTimer.current) clearTimeout(openTimer.current);
|
|
45
|
+
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
46
|
+
},
|
|
47
|
+
[]
|
|
48
|
+
);
|
|
49
|
+
useEscape(() => {
|
|
50
|
+
clear();
|
|
51
|
+
setOpen(false);
|
|
52
|
+
}, open);
|
|
53
|
+
const visible = !isDisabled && open && !!content;
|
|
54
|
+
if (!isValidElement(children)) return children;
|
|
55
|
+
const trigger = children;
|
|
56
|
+
const cloned = cloneElement(trigger, {
|
|
57
|
+
ref: composeRefs(setAnchor, trigger.ref),
|
|
58
|
+
"aria-describedby": visible ? [trigger.props["aria-describedby"], tooltipId].filter(Boolean).join(" ") : trigger.props["aria-describedby"],
|
|
59
|
+
onPointerEnter: (e) => {
|
|
60
|
+
trigger.props.onPointerEnter?.(e);
|
|
61
|
+
show();
|
|
62
|
+
},
|
|
63
|
+
onPointerLeave: (e) => {
|
|
64
|
+
trigger.props.onPointerLeave?.(e);
|
|
65
|
+
hide();
|
|
66
|
+
},
|
|
67
|
+
onFocus: (e) => {
|
|
68
|
+
trigger.props.onFocus?.(e);
|
|
69
|
+
show();
|
|
70
|
+
},
|
|
71
|
+
onBlur: (e) => {
|
|
72
|
+
trigger.props.onBlur?.(e);
|
|
73
|
+
hide();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
77
|
+
cloned,
|
|
78
|
+
visible && /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(AnchoredPositioner, { anchor, placement, offset: 6, children: /* @__PURE__ */ jsx(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
id: tooltipId,
|
|
82
|
+
role: "tooltip",
|
|
83
|
+
className: cn(
|
|
84
|
+
"z-tooltip rounded-md bg-inverse px-2.5 py-1.5 text-xs text-inverse-foreground shadow-md",
|
|
85
|
+
"animate-in fade-in-0 zoom-in-95"
|
|
86
|
+
),
|
|
87
|
+
children: content
|
|
88
|
+
}
|
|
89
|
+
) }) })
|
|
90
|
+
] });
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { Tooltip };
|
|
94
|
+
//# sourceMappingURL=chunk-4QQLJOGP.js.map
|
|
95
|
+
//# sourceMappingURL=chunk-4QQLJOGP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/display/tooltip/Tooltip.tsx"],"names":[],"mappings":"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","file":"chunk-4QQLJOGP.js","sourcesContent":["import {\n cloneElement,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled, useEscape, useId } from '../../hooks';\nimport {\n AnchoredPositioner,\n Portal,\n type AnchoredPositionerProps,\n} from '../../primitives';\n\nexport interface TooltipProps {\n /** Tooltip body. */\n content: ReactNode;\n /** Single child element — the trigger. Receives event handlers + ref. */\n children: ReactElement;\n /** Floating UI placement. Default `top`. */\n placement?: AnchoredPositionerProps['placement'];\n /** Delay before opening on hover, in ms. Default 700. */\n openDelay?: number;\n /** Delay before closing on leave, in ms. Default 0. */\n closeDelay?: number;\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state when uncontrolled. Default `false`. */\n defaultOpen?: boolean;\n /** Fires on every open-state change (hover, focus, Escape). */\n onOpenChange?: (open: boolean) => void;\n /** Disable rendering even on hover (e.g. when content is empty). */\n isDisabled?: boolean;\n}\n\n/**\n * Hover-/focus-triggered tooltip. Wraps a single child as the trigger; the\n * tooltip body renders into a Portal positioned by Floating UI. Default\n * delays mirror the OS pattern (700ms in, 0 out). Escape dismisses without\n * moving focus (WCAG 1.4.13); the trigger is described by the tooltip via\n * `aria-describedby` while open.\n */\nexport function Tooltip({\n content,\n children,\n placement = 'top',\n openDelay = 700,\n closeDelay = 0,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n isDisabled,\n}: TooltipProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n const tooltipId = useId('tooltip');\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = null;\n closeTimer.current = null;\n };\n const show = () => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n };\n const hide = () => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n };\n\n /* Clear pending timers on unmount. */\n useEffect(\n () => () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n },\n [],\n );\n\n /* WCAG 1.4.13 — Escape dismisses immediately, without moving focus. */\n useEscape(() => {\n clear();\n setOpen(false);\n }, open);\n\n const visible = !isDisabled && open && !!content;\n\n if (!isValidElement(children)) return children;\n const trigger = children as ReactElement<{\n ref?: Ref<HTMLElement>;\n 'aria-describedby'?: string;\n onPointerEnter?: (e: React.PointerEvent) => void;\n onPointerLeave?: (e: React.PointerEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n }> & { ref?: Ref<HTMLElement> };\n\n const cloned = cloneElement(trigger, {\n ref: composeRefs(setAnchor, trigger.ref),\n 'aria-describedby': visible\n ? [trigger.props['aria-describedby'], tooltipId].filter(Boolean).join(' ')\n : trigger.props['aria-describedby'],\n onPointerEnter: (e: React.PointerEvent) => {\n trigger.props.onPointerEnter?.(e);\n show();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n trigger.props.onPointerLeave?.(e);\n hide();\n },\n onFocus: (e: React.FocusEvent) => {\n trigger.props.onFocus?.(e);\n show();\n },\n onBlur: (e: React.FocusEvent) => {\n trigger.props.onBlur?.(e);\n hide();\n },\n });\n\n return (\n <>\n {cloned}\n {visible && (\n <Portal>\n <AnchoredPositioner anchor={anchor} placement={placement} offset={6}>\n <div\n id={tooltipId}\n role=\"tooltip\"\n className={cn(\n 'z-tooltip rounded-md bg-inverse px-2.5 py-1.5 text-xs text-inverse-foreground shadow-md',\n 'animate-in fade-in-0 zoom-in-95',\n )}\n >\n {content}\n </div>\n </AnchoredPositioner>\n </Portal>\n )}\n </>\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { OverlayChromeProvider, OverlayBody, OverlayCloseButton, OverlayDescription, OverlayFooter, OverlayHeader, OverlayTitle } from './chunk-
|
|
2
|
-
import { Backdrop } from './chunk-
|
|
1
|
+
import { OverlayChromeProvider, OverlayBody, OverlayCloseButton, OverlayDescription, OverlayFooter, OverlayHeader, OverlayTitle } from './chunk-NOOKDXIZ.js';
|
|
2
|
+
import { Backdrop } from './chunk-EQNTG53H.js';
|
|
3
3
|
import { useControlled } from './chunk-V267IMBH.js';
|
|
4
4
|
import { surfaceVariants } from './chunk-DX7FYAKY.js';
|
|
5
|
-
import { Slot, Portal, ScrollLockProvider, DismissableLayer } from './chunk-
|
|
5
|
+
import { Slot, Portal, ScrollLockProvider, DismissableLayer } from './chunk-XLYJF3HC.js';
|
|
6
6
|
import { composeRefs, cn } from './chunk-X2MYOHOB.js';
|
|
7
7
|
import { createContext, forwardRef, useCallback, useMemo, useContext, useRef, useId } from 'react';
|
|
8
8
|
import { FocusScope } from '@radix-ui/react-focus-scope';
|
|
@@ -180,5 +180,5 @@ Drawer.Footer = DrawerFooter;
|
|
|
180
180
|
Drawer.Close = DrawerClose;
|
|
181
181
|
|
|
182
182
|
export { Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger };
|
|
183
|
-
//# sourceMappingURL=chunk-
|
|
184
|
-
//# sourceMappingURL=chunk-
|
|
183
|
+
//# sourceMappingURL=chunk-5JYRZ5PA.js.map
|
|
184
|
+
//# sourceMappingURL=chunk-5JYRZ5PA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/overlays/drawer/Drawer.tsx"],"names":["DrawerTrigger","DrawerContent"],"mappings":";;;;;;;;;;AAyCA,IAAM,aAAA,GAAgB,cAAyC,IAAI,CAAA;AAEnE,SAAS,gBAAA,GAAmB;AAC1B,EAAA,MAAM,GAAA,GAAM,WAAW,aAAa,CAAA;AACpC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACjE,EAAA,OAAO,GAAA;AACT;AAYO,SAAS,MAAA,CAAO;AAAA,EACrB,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,IAAA,GAAO,OAAA;AAAA,EACP,qBAAA,GAAwB,IAAA;AAAA,EACxB,eAAA,GAAkB,IAAA;AAAA,EAClB;AACF,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,aAAA,CAAc;AAAA,IACpC,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,WAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AACD,EAAA,MAAM,UAAA,GAAa,OAA2B,IAAI,CAAA;AAClD,EAAA,MAAM,UAAU,KAAA,EAAM;AACtB,EAAA,MAAM,gBAAgB,KAAA,EAAM;AAE5B,EAAA,MAAM,GAAA,GAAM,OAAA;AAAA,IACV,OAAO;AAAA,MACL,IAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACA,IAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,OAAA,EAAS,SAAS,aAAA,EAAe,IAAA,EAAM,uBAAuB,eAAe;AAAA,GACtF;AAEA,EAAA,2BAAQ,aAAA,CAAc,QAAA,EAAd,EAAuB,KAAA,EAAO,KAAM,QAAA,EAAS,CAAA;AACvD;AAQO,IAAM,aAAA,GAAgB,UAAA;AAAA,EAC3B,SAASA,eAAc,EAAE,OAAA,EAAS,SAAS,QAAA,EAAU,GAAG,IAAA,EAAK,EAAG,YAAA,EAAc;AAC5E,IAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,IAAA,MAAM,SAAA,GAAY,UAAU,IAAA,GAAO,QAAA;AACnC,IAAA,uBACE,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,WAAA,CAAY,YAAA,EAAc,GAAA,CAAI,UAA8D,CAAA;AAAA,QACjG,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAc,QAAA;AAAA,QACd,iBAAe,GAAA,CAAI,IAAA;AAAA,QACnB,YAAA,EAAY,GAAA,CAAI,IAAA,GAAO,MAAA,GAAS,QAAA;AAAA,QAChC,OAAA,EAAS,CAAC,CAAA,KAA2C;AACnD,UAAA,OAAA,GAAU,CAAC,CAAA;AACX,UAAA,IAAI,EAAE,gBAAA,EAAkB;AACxB,UAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,QAClB,CAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAIA,IAAM,SAAA,GAAwC;AAAA,EAC5C,KAAA,EAAO,yEAAA;AAAA,EACP,IAAA,EAAM,uEAAA;AAAA,EACN,GAAA,EAAK,8DAAA;AAAA,EACL,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,eAAA,GAA8C;AAAA,EAClD,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,aAAA,GAA4C;AAAA,EAChD,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM;AACR,CAAA;AAWO,IAAM,aAAA,GAAgB,UAAA;AAAA,EAC3B,SAASC,cAAAA,CACP;AAAA,IACE,YAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA,GAAO,IAAA;AAAA,IACP,SAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,YAAA,EACA;AACA,IAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,IAAA,MAAM,YAAA,GAAe,GAAA,CAAI,IAAA,KAAS,OAAA,IAAW,IAAI,IAAA,KAAS,MAAA;AAC1D,IAAA,MAAM,YAAY,YAAA,GAAe,eAAA,CAAgB,IAAI,CAAA,GAAI,cAAc,IAAI,CAAA;AAE3E,IAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,MAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACjB,MAAA,qBAAA,CAAsB,MAAM,GAAA,CAAI,UAAA,CAAW,OAAA,EAAS,OAAO,CAAA;AAAA,IAC7D,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,IAAA,MAAM,SAAA,GAAY,OAAA;AAAA,MAChB,OAAO,EAAE,OAAA,EAAS,GAAA,CAAI,SAAS,aAAA,EAAe,GAAA,CAAI,eAAe,KAAA,EAAM,CAAA;AAAA,MACvE,CAAC,GAAA,CAAI,OAAA,EAAS,GAAA,CAAI,eAAe,KAAK;AAAA,KACxC;AAEA,IAAA,IAAI,CAAC,GAAA,CAAI,IAAA,EAAM,OAAO,IAAA;AACtB,IAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,kBAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,CAAC,YAAA,oBACA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAQ,IAAA;AAAA,UACR,SAAA;AAAA,UACA,SAAS,MAAM;AACb,YAAA,IAAI,GAAA,CAAI,qBAAA,EAAuB,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,UAClD;AAAA;AAAA,OACF;AAAA,0BAED,UAAA,EAAA,EAAW,OAAA,EAAO,MAAC,OAAA,EAAO,IAAA,EAAC,MAAI,IAAA,EAC9B,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,gBAAA,EAAkB,CAAC,GAAA,CAAI,eAAA;AAAA,UACvB,QAAA,EAAU,MAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,UACjC,sBAAA,EAAsB,IAAA;AAAA,UAEtB,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,YAAA;AAAA,cACL,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAW,MAAA;AAAA,cACX,mBAAiB,GAAA,CAAI,OAAA;AAAA,cACrB,oBAAkB,GAAA,CAAI,aAAA;AAAA,cACtB,YAAA,EAAW,MAAA;AAAA,cACX,aAAW,GAAA,CAAI,IAAA;AAAA,cACf,SAAA,EAAW,EAAA;AAAA,gBACT,gDAAA;AAAA,gBACA,eAAA,CAAgB;AAAA,kBACd,SAAS,OAAA,IAAW,UAAA;AAAA,kBACpB,IAAA;AAAA,kBACA,QAAQ,MAAA,IAAU,MAAA;AAAA,kBAClB,SAAS,OAAA,IAAW,IAAA;AAAA,kBACpB,WAAW,SAAA,IAAa;AAAA,iBACzB,CAAA;AAAA,gBACD,SAAA,CAAU,IAAI,IAAI,CAAA;AAAA,gBAClB,SAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACC,GAAG,IAAA;AAAA,cAEJ,QAAA,kBAAA,GAAA,CAAC,qBAAA,EAAA,EAAsB,KAAA,EAAO,SAAA,EAAY,QAAA,EAAS;AAAA;AAAA;AACrD;AAAA,OACF,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAGO,IAAM,YAAA,GAAe;AACrB,IAAM,WAAA,GAAc;AACpB,IAAM,iBAAA,GAAoB;AAC1B,IAAM,UAAA,GAAa;AACnB,IAAM,YAAA,GAAe;AACrB,IAAM,WAAA,GAAc;AAa1B,MAAA,CAA2B,OAAA,GAAU,aAAA;AACrC,MAAA,CAA2B,OAAA,GAAU,aAAA;AACrC,MAAA,CAA2B,MAAA,GAAS,YAAA;AACpC,MAAA,CAA2B,KAAA,GAAQ,WAAA;AACnC,MAAA,CAA2B,WAAA,GAAc,iBAAA;AACzC,MAAA,CAA2B,IAAA,GAAO,UAAA;AAClC,MAAA,CAA2B,MAAA,GAAS,YAAA;AACpC,MAAA,CAA2B,KAAA,GAAQ,WAAA","file":"chunk-QDECMXNB.js","sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\nexport type DrawerSide = 'top' | 'right' | 'bottom' | 'left';\n\ninterface DrawerContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n side: DrawerSide;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null);\n\nfunction useDrawerContext() {\n const ctx = useContext(DrawerContext);\n if (!ctx) throw new Error('Drawer.* must be used inside <Drawer>');\n return ctx;\n}\n\nexport interface DrawerProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n side?: DrawerSide;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Drawer({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n side = 'right',\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: DrawerProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DrawerContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n side,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, side, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DrawerContext.Provider value={ctx}>{children}</DrawerContext.Provider>;\n}\n\nexport interface DrawerTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DrawerTrigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n function DrawerTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDrawerContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nconst SIDE_BASE: Record<DrawerSide, string> = {\n right: 'inset-y-0 right-0 h-full w-full border-l animate-in slide-in-from-right',\n left: 'inset-y-0 left-0 h-full w-full border-r animate-in slide-in-from-left',\n top: 'inset-x-0 top-0 w-full border-b animate-in slide-in-from-top',\n bottom: 'inset-x-0 bottom-0 w-full border-t animate-in slide-in-from-bottom',\n};\n\nconst HORIZONTAL_SIZE: Record<DrawerSize, string> = {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-2xl',\n full: '',\n};\n\nconst VERTICAL_SIZE: Record<DrawerSize, string> = {\n sm: 'max-h-[40vh]',\n md: 'max-h-[60vh]',\n lg: 'max-h-[75vh]',\n xl: 'max-h-[85vh]',\n full: 'max-h-screen',\n};\n\n/** Represents the prop surface of `Drawer.Content`. */\nexport interface DrawerContentProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n hideBackdrop?: boolean;\n isBlurred?: boolean;\n /** Per-side max-size token. Default `md` (preserves prior behavior for right/left at `sm`-ish width via `sm:max-w-md`). */\n size?: DrawerSize;\n children: ReactNode;\n}\n\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n function DrawerContent(\n {\n hideBackdrop,\n isBlurred,\n variant,\n tone,\n radius,\n padding,\n elevation,\n size = 'md',\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useDrawerContext();\n const isHorizontal = ctx.side === 'right' || ctx.side === 'left';\n const sizeClass = isHorizontal ? HORIZONTAL_SIZE[size] : VERTICAL_SIZE[size];\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n if (!ctx.open) return null;\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && (\n <Backdrop\n isInline\n isBlurred={isBlurred}\n onClick={() => {\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n />\n )}\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n isOutsideClickDisabled\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state=\"open\"\n data-side={ctx.side}\n className={cn(\n 'fixed z-modal flex flex-col gap-4 outline-none',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'none',\n padding: padding ?? 'xl',\n elevation: elevation ?? 3,\n }),\n SIDE_BASE[ctx.side],\n sizeClass,\n className,\n )}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockProvider>\n </Portal>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Drawer namespace.\nexport const DrawerHeader = OverlayHeader;\nexport const DrawerTitle = OverlayTitle;\nexport const DrawerDescription = OverlayDescription;\nexport const DrawerBody = OverlayBody;\nexport const DrawerFooter = OverlayFooter;\nexport const DrawerClose = OverlayCloseButton;\n\ntype DrawerComponent = typeof Drawer & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Title: typeof DrawerTitle;\n Description: typeof DrawerDescription;\n Body: typeof DrawerBody;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n(Drawer as DrawerComponent).Trigger = DrawerTrigger;\n(Drawer as DrawerComponent).Content = DrawerContent;\n(Drawer as DrawerComponent).Header = DrawerHeader;\n(Drawer as DrawerComponent).Title = DrawerTitle;\n(Drawer as DrawerComponent).Description = DrawerDescription;\n(Drawer as DrawerComponent).Body = DrawerBody;\n(Drawer as DrawerComponent).Footer = DrawerFooter;\n(Drawer as DrawerComponent).Close = DrawerClose;\n\nexport default Drawer as DrawerComponent;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/overlays/drawer/Drawer.tsx"],"names":["DrawerTrigger","DrawerContent"],"mappings":"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","file":"chunk-5JYRZ5PA.js","sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\nexport type DrawerSide = 'top' | 'right' | 'bottom' | 'left';\n\ninterface DrawerContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n side: DrawerSide;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null);\n\nfunction useDrawerContext() {\n const ctx = useContext(DrawerContext);\n if (!ctx) throw new Error('Drawer.* must be used inside <Drawer>');\n return ctx;\n}\n\nexport interface DrawerProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n side?: DrawerSide;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Drawer({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n side = 'right',\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: DrawerProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DrawerContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n side,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, side, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DrawerContext.Provider value={ctx}>{children}</DrawerContext.Provider>;\n}\n\nexport interface DrawerTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DrawerTrigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n function DrawerTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDrawerContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nconst SIDE_BASE: Record<DrawerSide, string> = {\n right: 'inset-y-0 right-0 h-full w-full border-l animate-in slide-in-from-right',\n left: 'inset-y-0 left-0 h-full w-full border-r animate-in slide-in-from-left',\n top: 'inset-x-0 top-0 w-full border-b animate-in slide-in-from-top',\n bottom: 'inset-x-0 bottom-0 w-full border-t animate-in slide-in-from-bottom',\n};\n\nconst HORIZONTAL_SIZE: Record<DrawerSize, string> = {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-2xl',\n full: '',\n};\n\nconst VERTICAL_SIZE: Record<DrawerSize, string> = {\n sm: 'max-h-[40vh]',\n md: 'max-h-[60vh]',\n lg: 'max-h-[75vh]',\n xl: 'max-h-[85vh]',\n full: 'max-h-screen',\n};\n\n/** Represents the prop surface of `Drawer.Content`. */\nexport interface DrawerContentProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n hideBackdrop?: boolean;\n isBlurred?: boolean;\n /** Per-side max-size token. Default `md` (preserves prior behavior for right/left at `sm`-ish width via `sm:max-w-md`). */\n size?: DrawerSize;\n children: ReactNode;\n}\n\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n function DrawerContent(\n {\n hideBackdrop,\n isBlurred,\n variant,\n tone,\n radius,\n padding,\n elevation,\n size = 'md',\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useDrawerContext();\n const isHorizontal = ctx.side === 'right' || ctx.side === 'left';\n const sizeClass = isHorizontal ? HORIZONTAL_SIZE[size] : VERTICAL_SIZE[size];\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n if (!ctx.open) return null;\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && (\n <Backdrop\n isInline\n isBlurred={isBlurred}\n onClick={() => {\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n />\n )}\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n isOutsideClickDisabled\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state=\"open\"\n data-side={ctx.side}\n className={cn(\n 'fixed z-modal flex flex-col gap-4 outline-none',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'none',\n padding: padding ?? 'xl',\n elevation: elevation ?? 3,\n }),\n SIDE_BASE[ctx.side],\n sizeClass,\n className,\n )}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockProvider>\n </Portal>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Drawer namespace.\nexport const DrawerHeader = OverlayHeader;\nexport const DrawerTitle = OverlayTitle;\nexport const DrawerDescription = OverlayDescription;\nexport const DrawerBody = OverlayBody;\nexport const DrawerFooter = OverlayFooter;\nexport const DrawerClose = OverlayCloseButton;\n\ntype DrawerComponent = typeof Drawer & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Title: typeof DrawerTitle;\n Description: typeof DrawerDescription;\n Body: typeof DrawerBody;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n(Drawer as DrawerComponent).Trigger = DrawerTrigger;\n(Drawer as DrawerComponent).Content = DrawerContent;\n(Drawer as DrawerComponent).Header = DrawerHeader;\n(Drawer as DrawerComponent).Title = DrawerTitle;\n(Drawer as DrawerComponent).Description = DrawerDescription;\n(Drawer as DrawerComponent).Body = DrawerBody;\n(Drawer as DrawerComponent).Footer = DrawerFooter;\n(Drawer as DrawerComponent).Close = DrawerClose;\n\nexport default Drawer as DrawerComponent;\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Drawer, DrawerContent, DrawerTitle, DrawerDescription } from './chunk-
|
|
2
|
-
import { DialogContent, DialogClose, Dialog, DialogTrigger, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter } from './chunk-
|
|
3
|
-
import { OverlayChromeProvider, OverlayTitle, OverlayDescription } from './chunk-
|
|
4
|
-
import { Backdrop } from './chunk-
|
|
1
|
+
import { Drawer, DrawerContent, DrawerTitle, DrawerDescription } from './chunk-5JYRZ5PA.js';
|
|
2
|
+
import { DialogContent, DialogClose, Dialog, DialogTrigger, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter } from './chunk-H4P5MAGS.js';
|
|
3
|
+
import { OverlayChromeProvider, OverlayTitle, OverlayDescription } from './chunk-NOOKDXIZ.js';
|
|
4
|
+
import { Backdrop } from './chunk-EQNTG53H.js';
|
|
5
5
|
import { useControlled, useEscape } from './chunk-V267IMBH.js';
|
|
6
6
|
import { surfaceVariants } from './chunk-DX7FYAKY.js';
|
|
7
|
-
import { Slot, Portal, AnchoredPositioner, DismissableLayer, ScrollLockProvider, OverlayArrow } from './chunk-
|
|
7
|
+
import { Slot, Portal, AnchoredPositioner, DismissableLayer, ScrollLockProvider, OverlayArrow } from './chunk-XLYJF3HC.js';
|
|
8
8
|
import { cn, composeRefs } from './chunk-X2MYOHOB.js';
|
|
9
9
|
import { forwardRef, createContext, useMemo, useState, useRef, useId, useEffect, useContext, useCallback, isValidElement, cloneElement } from 'react';
|
|
10
10
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -594,5 +594,5 @@ BottomSheet.Title = BottomSheetTitle;
|
|
|
594
594
|
BottomSheet.Description = BottomSheetDescription;
|
|
595
595
|
|
|
596
596
|
export { ActionSheet, ActionSheetAction, ActionSheetCancel, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, BottomSheet, BottomSheetDescription, BottomSheetTitle, HoverCard, HoverCardArrow, HoverCardContent, HoverCardTrigger, Popover, PopoverArrow, PopoverContent, PopoverTrigger, useBottomSheet };
|
|
597
|
-
//# sourceMappingURL=chunk-
|
|
598
|
-
//# sourceMappingURL=chunk-
|
|
597
|
+
//# sourceMappingURL=chunk-BLU5JZAB.js.map
|
|
598
|
+
//# sourceMappingURL=chunk-BLU5JZAB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/overlays/alertDialog/AlertDialog.tsx","../src/overlays/popover/Popover.tsx","../src/overlays/hoverCard/HoverCard.tsx","../src/overlays/actionSheet/ActionSheet.tsx","../src/overlays/bottomSheet/BottomSheet.tsx"],"names":["AlertDialogContent","AlertDialogAction","AlertDialogCancel","jsx","forwardRef","PopoverTrigger","PopoverContent","createContext","useContext","useRef","useMemo","HoverCardContent","ActionSheetAction","ActionSheetCancel","BottomSheet","useState","useEffect","jsxs","FocusScope"],"mappings":"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","file":"chunk-5LFMQORR.js","sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n DialogClose,\n type DialogProps,\n type DialogContentProps,\n} from '../dialog';\n\nexport type AlertDialogProps = Omit<DialogProps, 'role' | 'dismissOnOutsideClick'>;\n\nexport function AlertDialog(props: AlertDialogProps) {\n return <Dialog {...props} role=\"alertdialog\" dismissOnOutsideClick={false} />;\n}\n\nexport const AlertDialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function AlertDialogContent(props, ref) {\n return <DialogContent ref={ref} {...props} />;\n },\n);\n\nexport interface AlertDialogActionProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Runs before the dialog closes. */\n onAction?: () => void;\n children: ReactNode;\n}\n\nexport const AlertDialogAction = forwardRef<HTMLButtonElement, AlertDialogActionProps>(\n function AlertDialogAction({ onAction, onClick, className, children, ...rest }, ref) {\n return (\n <DialogClose\n ref={ref}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onAction?.();\n }}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </DialogClose>\n );\n },\n);\n\nexport interface AlertDialogCancelProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const AlertDialogCancel = forwardRef<HTMLButtonElement, AlertDialogCancelProps>(\n function AlertDialogCancel({ className, children, ...rest }, ref) {\n return (\n <DialogClose\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-md border border-border bg-background px-4 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </DialogClose>\n );\n },\n);\n\ntype AlertDialogComponent = typeof AlertDialog & {\n Trigger: typeof DialogTrigger;\n Content: typeof AlertDialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Action: typeof AlertDialogAction;\n Cancel: typeof AlertDialogCancel;\n};\n\n(AlertDialog as AlertDialogComponent).Trigger = DialogTrigger;\n(AlertDialog as AlertDialogComponent).Content = AlertDialogContent;\n(AlertDialog as AlertDialogComponent).Header = DialogHeader;\n(AlertDialog as AlertDialogComponent).Title = DialogTitle;\n(AlertDialog as AlertDialogComponent).Description = DialogDescription;\n(AlertDialog as AlertDialogComponent).Body = DialogBody;\n(AlertDialog as AlertDialogComponent).Footer = DialogFooter;\n(AlertDialog as AlertDialogComponent).Action = AlertDialogAction;\n(AlertDialog as AlertDialogComponent).Cancel = AlertDialogCancel;\n\nexport default AlertDialog as AlertDialogComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n AnchoredPositioner,\n DismissableLayer,\n OverlayArrow,\n Portal,\n Slot,\n type AnchoredPositionerProps,\n type OverlayArrowProps,\n} from '../../primitives';\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n /** Trigger node held in state so an initially-open popover re-renders anchored. */\n triggerNode: HTMLElement | null;\n onTriggerChange: (node: HTMLElement | null) => void;\n placement: AnchoredPositionerProps['placement'];\n offset: number;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nfunction usePopoverContext() {\n const ctx = useContext(PopoverContext);\n if (!ctx) throw new Error('Popover.* must be used inside <Popover>');\n return ctx;\n}\n\nexport interface PopoverProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: AnchoredPositionerProps['placement'];\n offset?: number;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Popover({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom',\n offset = 8,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: PopoverProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const [triggerNode, setTriggerNode] = useState<HTMLElement | null>(null);\n\n const ctx = useMemo<PopoverContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n triggerNode,\n onTriggerChange: setTriggerNode,\n placement,\n offset,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, triggerNode, placement, offset, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <PopoverContext.Provider value={ctx}>{children}</PopoverContext.Provider>;\n}\n\nexport interface PopoverTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n function PopoverTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = usePopoverContext();\n const { triggerRef, onTriggerChange } = ctx;\n const Component = asChild ? Slot : 'button';\n // Memoized so the callback ref isn't re-invoked (null → node) every render.\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLButtonElement>(\n forwardedRef,\n triggerRef as React.MutableRefObject<HTMLButtonElement | null>,\n onTriggerChange,\n ),\n [forwardedRef, triggerRef, onTriggerChange],\n );\n return (\n <Component\n ref={composedRef as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\n/** Represents the prop surface of the `Popover.Content`. */\nexport interface PopoverContentProps\n extends HTMLAttributes<HTMLDivElement>,\n SurfaceVariants {\n /** Skips the surface chrome (bg/border/shadow); keeps only z-index + animation. */\n isBare?: boolean;\n children: ReactNode;\n}\n\n/** Contains the default chrome width that preserves the historical look. */\nconst DEFAULT_WIDTH = 'w-72';\n\nexport const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n function PopoverContent(\n { isBare, variant, tone, radius, padding, elevation, className, children, ...rest },\n forwardedRef,\n ) {\n const ctx = usePopoverContext();\n if (!ctx.open) return null;\n /* Default to lg padding when chrome is on (matches old `p-4`); consumer can override. */\n const resolvedPadding = padding ?? (isBare ? 'none' : 'lg');\n return (\n <Portal>\n {/* z-popover (80) on the SC root (transform makes the stacking context) so a\n popover from a Dialog (z-modal, 70) paints above it — both portal to body. */}\n <AnchoredPositioner\n anchor={ctx.triggerNode}\n placement={ctx.placement}\n offset={ctx.offset}\n className=\"z-popover\"\n >\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!ctx.dismissOnEscape}\n onEscape={() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n isOutsideClickDisabled={!ctx.dismissOnOutsideClick}\n onOutsidePointerDown={(e) => {\n if (ctx.triggerRef.current?.contains(e.target as Node)) return;\n ctx.setOpen(false);\n }}\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n data-state=\"open\"\n className={cn(\n 'outline-none animate-in fade-in-0 zoom-in-95',\n !isBare &&\n cn(\n DEFAULT_WIDTH,\n surfaceVariants({\n variant,\n tone,\n radius,\n padding: resolvedPadding,\n elevation,\n }),\n ),\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </DismissableLayer>\n </FocusScope>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\nexport function PopoverArrow({ className, ...rest }: OverlayArrowProps) {\n return <OverlayArrow className={cn('text-popover', className)} {...rest} />;\n}\n\ntype PopoverComponent = typeof Popover & {\n Trigger: typeof PopoverTrigger;\n Content: typeof PopoverContent;\n Arrow: typeof PopoverArrow;\n};\n\n(Popover as PopoverComponent).Trigger = PopoverTrigger;\n(Popover as PopoverComponent).Content = PopoverContent;\n(Popover as PopoverComponent).Arrow = PopoverArrow;\n\nexport default Popover as PopoverComponent;\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled, useEscape } from '../../hooks';\nimport {\n AnchoredPositioner,\n OverlayArrow,\n Portal,\n type AnchoredPositionerProps,\n type OverlayArrowProps,\n} from '../../primitives';\n\ninterface HoverCardContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n show: () => void;\n hide: () => void;\n cancelHide: () => void;\n placement: AnchoredPositionerProps['placement'];\n offset: number;\n}\n\nconst HoverCardContext = createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext() {\n const ctx = useContext(HoverCardContext);\n if (!ctx) throw new Error('HoverCard.* must be used inside <HoverCard>');\n return ctx;\n}\n\nexport interface HoverCardProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n openDelay?: number;\n closeDelay?: number;\n placement?: AnchoredPositionerProps['placement'];\n offset?: number;\n children: ReactNode;\n}\n\nexport function HoverCard({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n openDelay = 700,\n closeDelay = 300,\n placement = 'bottom',\n offset = 8,\n children,\n}: HoverCardProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = null;\n closeTimer.current = null;\n }, []);\n\n const show = useCallback(() => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n }, [clear, openDelay, setOpen]);\n\n const hide = useCallback(() => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n }, [clear, closeDelay, setOpen]);\n\n const cancelHide = useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n\n // Clear pending timers on unmount — avoids setState-after-unmount.\n useEffect(() => clear, [clear]);\n\n // WCAG 1.4.13 — hover content must be dismissible without moving the pointer.\n useEscape(() => {\n clear();\n setOpen(false);\n }, open);\n\n const ctx = useMemo<HoverCardContextValue>(\n () => ({ open, setOpen, triggerRef, show, hide, cancelHide, placement, offset }),\n [open, setOpen, show, hide, cancelHide, placement, offset],\n );\n\n return <HoverCardContext.Provider value={ctx}>{children}</HoverCardContext.Provider>;\n}\n\nexport interface HoverCardTriggerProps {\n asChild?: boolean;\n children: ReactElement;\n}\n\nexport function HoverCardTrigger({ children }: HoverCardTriggerProps) {\n const ctx = useHoverCardContext();\n if (!isValidElement(children)) return children;\n const trigger = children as ReactElement<{\n ref?: Ref<HTMLElement>;\n onPointerEnter?: (e: React.PointerEvent) => void;\n onPointerLeave?: (e: React.PointerEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n }> & { ref?: Ref<HTMLElement> };\n\n return cloneElement(trigger, {\n ref: composeRefs((node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }, trigger.ref),\n onPointerEnter: (e: React.PointerEvent) => {\n trigger.props.onPointerEnter?.(e);\n ctx.show();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n trigger.props.onPointerLeave?.(e);\n ctx.hide();\n },\n onFocus: (e: React.FocusEvent) => {\n trigger.props.onFocus?.(e);\n ctx.show();\n },\n onBlur: (e: React.FocusEvent) => {\n trigger.props.onBlur?.(e);\n ctx.hide();\n },\n });\n}\n\nexport interface HoverCardContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const HoverCardContent = forwardRef<HTMLDivElement, HoverCardContentProps>(\n function HoverCardContent({ className, children, onPointerEnter, onPointerLeave, ...rest }, forwardedRef) {\n const ctx = useHoverCardContext();\n if (!ctx.open) return null;\n return (\n <Portal>\n <AnchoredPositioner\n anchor={ctx.triggerRef.current}\n placement={ctx.placement}\n offset={ctx.offset}\n className=\"z-dropdown\"\n >\n <div\n ref={forwardedRef}\n data-state=\"open\"\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n ctx.cancelHide();\n }}\n onPointerLeave={(e) => {\n onPointerLeave?.(e);\n ctx.hide();\n }}\n className={cn(\n 'w-64 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none animate-in fade-in-0 zoom-in-95',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\nexport function HoverCardArrow({ className, ...rest }: OverlayArrowProps) {\n return <OverlayArrow className={cn('text-popover', className)} {...rest} />;\n}\n\ntype HoverCardComponent = typeof HoverCard & {\n Trigger: typeof HoverCardTrigger;\n Content: typeof HoverCardContent;\n Arrow: typeof HoverCardArrow;\n};\n\n(HoverCard as HoverCardComponent).Trigger = HoverCardTrigger;\n(HoverCard as HoverCardComponent).Content = HoverCardContent;\n(HoverCard as HoverCardComponent).Arrow = HoverCardArrow;\n\nexport default HoverCard as HoverCardComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from '../drawer';\n\ninterface ActionSheetContextValue {\n setOpen: (open: boolean) => void;\n}\n\nconst ActionSheetContext = createContext<ActionSheetContextValue | null>(null);\n\nfunction useActionSheetContext() {\n const ctx = useContext(ActionSheetContext);\n if (!ctx) throw new Error('ActionSheet.* must be used inside <ActionSheet>');\n return ctx;\n}\n\nexport interface ActionSheetProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title?: ReactNode;\n description?: ReactNode;\n className?: string;\n children: ReactNode;\n}\n\n/**\n * iOS-style action sheet — opinionated bottom Drawer with stacked button rows\n * and a separated Cancel.\n */\nexport function ActionSheet({\n open,\n defaultOpen,\n onOpenChange,\n title,\n description,\n className,\n children,\n}: ActionSheetProps) {\n // ActionSheet owns open state + drives Drawer fully controlled, so `ctx.setOpen`\n // works in both controlled and uncontrolled modes (Drawer's context isn't interceptable).\n const [resolvedOpen, setOpen] = useControlled({\n controlled: open,\n default: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const ctx = useMemo<ActionSheetContextValue>(() => ({ setOpen }), [setOpen]);\n\n return (\n <ActionSheetContext.Provider value={ctx}>\n <Drawer open={resolvedOpen} onOpenChange={setOpen} side=\"bottom\">\n <DrawerContent\n className={cn(\n 'mx-auto max-w-md rounded-t-xl bg-card p-2 text-card-foreground',\n className,\n )}\n >\n {(title || description) && (\n <div className=\"px-3 py-2 text-center\">\n {title && (\n <DrawerTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </DrawerTitle>\n )}\n {description && (\n <DrawerDescription className=\"mt-1 text-xs text-muted-foreground\">\n {description}\n </DrawerDescription>\n )}\n </div>\n )}\n <div className=\"flex flex-col gap-px overflow-hidden rounded-lg bg-border\">\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n </ActionSheetContext.Provider>\n );\n}\n\nexport interface ActionSheetActionProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n onSelect?: () => void;\n isDestructive?: boolean;\n}\n\nexport const ActionSheetAction = forwardRef<HTMLButtonElement, ActionSheetActionProps>(\n function ActionSheetAction(\n { className, onSelect, isDestructive, onClick, children, type = 'button', ...rest },\n ref,\n ) {\n const ctx = useActionSheetContext();\n return (\n <button\n ref={ref}\n type={type}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onSelect?.();\n ctx.setOpen(false);\n }}\n className={cn(\n 'flex h-12 w-full items-center justify-center bg-card px-4 text-base font-medium transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n isDestructive ? 'text-destructive' : 'text-foreground',\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\nexport type ActionSheetCancelProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionSheetCancel = forwardRef<HTMLButtonElement, ActionSheetCancelProps>(\n function ActionSheetCancel({ className, onClick, children = 'Cancel', type = 'button', ...rest }, ref) {\n const ctx = useActionSheetContext();\n return (\n <button\n ref={ref}\n type={type}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(false);\n }}\n className={cn(\n 'mt-2 flex h-12 w-full items-center justify-center rounded-lg bg-card text-base font-semibold text-foreground shadow-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\ntype ActionSheetComponent = typeof ActionSheet & {\n Action: typeof ActionSheetAction;\n Cancel: typeof ActionSheetCancel;\n};\n\n(ActionSheet as ActionSheetComponent).Action = ActionSheetAction;\n(ActionSheet as ActionSheetComponent).Cancel = ActionSheetCancel;\n\nexport default ActionSheet as ActionSheetComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayChromeProvider,\n OverlayDescription,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\ntype SnapPoint = number | string;\n\ninterface BottomSheetContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n currentSnap: number;\n setCurrentSnap: (i: number) => void;\n snapPoints: SnapPoint[];\n}\n\nconst BottomSheetContext = createContext<BottomSheetContextValue | null>(null);\n\nexport function useBottomSheet() {\n const ctx = useContext(BottomSheetContext);\n if (!ctx) throw new Error('useBottomSheet must be used inside <BottomSheet>');\n return ctx;\n}\n\nfunction resolveSnapPx(point: SnapPoint, viewport: number): number {\n if (typeof point === 'number') return point;\n const trimmed = point.trim();\n if (trimmed.endsWith('vh')) return (parseFloat(trimmed) / 100) * viewport;\n if (trimmed.endsWith('px')) return parseFloat(trimmed);\n if (trimmed.endsWith('%')) return (parseFloat(trimmed) / 100) * viewport;\n // Fallback: try parseFloat as px.\n const n = parseFloat(trimmed);\n return Number.isFinite(n) ? n : 0;\n}\n\n/** Represents the prop surface of `BottomSheet`. */\nexport interface BottomSheetProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n snapPoints?: SnapPoint[];\n initialSnap?: number;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n dragToDismiss?: boolean;\n children: ReactNode;\n}\n\n/**\n * Mobile bottom sheet with drag handle + snap points. Pointer-event drag\n * between heights; releasing snaps to the nearest point. Past the lowest\n * snap with `dragToDismiss`, the sheet closes.\n */\nexport const BottomSheet = forwardRef<HTMLDivElement, BottomSheetProps>(function BottomSheet(\n {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n snapPoints = ['40vh', '90vh'],\n initialSnap = 0,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n dragToDismiss = true,\n variant,\n tone,\n radius,\n padding,\n elevation,\n className,\n children,\n ...rest\n },\n forwardedRef,\n) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [currentSnap, setCurrentSnap] = useState(\n Math.min(initialSnap, snapPoints.length - 1),\n );\n const sheetRef = useRef<HTMLDivElement | null>(null);\n const startYRef = useRef<number | null>(null);\n const startHeightRef = useRef(0);\n const [dragHeight, setDragHeight] = useState<number | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n // Reset to initialSnap each time we re-open.\n useEffect(() => {\n if (open) setCurrentSnap(Math.min(initialSnap, snapPoints.length - 1));\n }, [open, initialSnap, snapPoints.length]);\n\n const ctx = useMemo<BottomSheetContextValue>(\n () => ({ open, setOpen, currentSnap, setCurrentSnap, snapPoints }),\n [open, setOpen, currentSnap, snapPoints],\n );\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId, descriptionId, close: () => setOpen(false) }),\n [titleId, descriptionId, setOpen],\n );\n\n const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n startYRef.current = e.clientY;\n const rect = sheetRef.current?.getBoundingClientRect();\n startHeightRef.current = rect ? rect.height : 0;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const handlePointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startYRef.current == null) return;\n const dy = e.clientY - startYRef.current;\n setDragHeight(Math.max(0, startHeightRef.current - dy));\n };\n\n const handlePointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startYRef.current == null) return;\n startYRef.current = null;\n (e.currentTarget as HTMLElement).releasePointerCapture?.(e.pointerId);\n\n const viewport = typeof window !== 'undefined' ? window.innerHeight : 800;\n const heights = snapPoints.map((p) => resolveSnapPx(p, viewport));\n const liveHeight = dragHeight ?? heights[currentSnap] ?? 0;\n setDragHeight(null);\n\n // Below lowest snap by 60px → dismiss.\n if (dragToDismiss && liveHeight < (heights[0] ?? 0) - 60) {\n setOpen(false);\n return;\n }\n // Snap to nearest.\n let bestIdx = 0;\n let bestDist = Number.POSITIVE_INFINITY;\n heights.forEach((h, i) => {\n const d = Math.abs(h - liveHeight);\n if (d < bestDist) {\n bestDist = d;\n bestIdx = i;\n }\n });\n setCurrentSnap(bestIdx);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowUp' && currentSnap < snapPoints.length - 1) {\n e.preventDefault();\n setCurrentSnap(currentSnap + 1);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (currentSnap > 0) setCurrentSnap(currentSnap - 1);\n else if (dragToDismiss) setOpen(false);\n }\n };\n\n if (!open) return null;\n\n const heightStyle: string | number = (() => {\n if (dragHeight != null) return `${dragHeight}px`;\n const point = snapPoints[currentSnap];\n if (typeof point === 'number') return `${point}px`;\n return point ?? '40vh';\n })();\n\n return (\n <BottomSheetContext.Provider value={ctx}>\n <Portal>\n <ScrollLockProvider>\n <Backdrop\n isInline\n onClick={() => {\n if (dismissOnOutsideClick) setOpen(false);\n }}\n />\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!dismissOnEscape}\n onEscape={() => setOpen(false)}\n isOutsideClickDisabled\n >\n <div\n ref={(el) => {\n sheetRef.current = el;\n if (typeof forwardedRef === 'function') forwardedRef(el);\n else if (forwardedRef) (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={{\n height: heightStyle,\n transition: dragHeight == null ? 'height 220ms ease-out' : 'none',\n }}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-modal flex flex-col rounded-t-xl border-t outline-none',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'none',\n padding: padding ?? 'none',\n elevation: elevation ?? 5,\n }),\n className,\n )}\n {...rest}\n >\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n aria-valuenow={currentSnap}\n aria-valuemin={0}\n aria-valuemax={snapPoints.length - 1}\n tabIndex={0}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n onKeyDown={handleKeyDown}\n className=\"flex h-7 cursor-ns-resize items-center justify-center focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n <span className=\"h-1 w-10 rounded-full bg-border-strong\" aria-hidden=\"true\" />\n </div>\n <div className=\"flex-1 overflow-y-auto px-4 pb-4\">\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </div>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockProvider>\n </Portal>\n </BottomSheetContext.Provider>\n );\n});\n\n// Re-export shared chrome under the BottomSheet namespace — they wire\n// `id={titleId}`/`id={descriptionId}` so the sheet's aria-labelledby/describedby resolve.\nexport const BottomSheetTitle = OverlayTitle;\nexport const BottomSheetDescription = OverlayDescription;\n\ntype BottomSheetComponent = typeof BottomSheet & {\n Title: typeof BottomSheetTitle;\n Description: typeof BottomSheetDescription;\n};\n\n(BottomSheet as BottomSheetComponent).Title = BottomSheetTitle;\n(BottomSheet as BottomSheetComponent).Description = BottomSheetDescription;\n\nexport default BottomSheet as BottomSheetComponent;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/overlays/alertDialog/AlertDialog.tsx","../src/overlays/popover/Popover.tsx","../src/overlays/hoverCard/HoverCard.tsx","../src/overlays/actionSheet/ActionSheet.tsx","../src/overlays/bottomSheet/BottomSheet.tsx"],"names":["AlertDialogContent","AlertDialogAction","AlertDialogCancel","jsx","forwardRef","PopoverTrigger","PopoverContent","createContext","useContext","useRef","useMemo","HoverCardContent","ActionSheetAction","ActionSheetCancel","BottomSheet","useState","useEffect","jsxs","FocusScope"],"mappings":"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","file":"chunk-BLU5JZAB.js","sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n DialogClose,\n type DialogProps,\n type DialogContentProps,\n} from '../dialog';\n\nexport type AlertDialogProps = Omit<DialogProps, 'role' | 'dismissOnOutsideClick'>;\n\nexport function AlertDialog(props: AlertDialogProps) {\n return <Dialog {...props} role=\"alertdialog\" dismissOnOutsideClick={false} />;\n}\n\nexport const AlertDialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function AlertDialogContent(props, ref) {\n return <DialogContent ref={ref} {...props} />;\n },\n);\n\nexport interface AlertDialogActionProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Runs before the dialog closes. */\n onAction?: () => void;\n children: ReactNode;\n}\n\nexport const AlertDialogAction = forwardRef<HTMLButtonElement, AlertDialogActionProps>(\n function AlertDialogAction({ onAction, onClick, className, children, ...rest }, ref) {\n return (\n <DialogClose\n ref={ref}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onAction?.();\n }}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </DialogClose>\n );\n },\n);\n\nexport interface AlertDialogCancelProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const AlertDialogCancel = forwardRef<HTMLButtonElement, AlertDialogCancelProps>(\n function AlertDialogCancel({ className, children, ...rest }, ref) {\n return (\n <DialogClose\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-md border border-border bg-background px-4 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </DialogClose>\n );\n },\n);\n\ntype AlertDialogComponent = typeof AlertDialog & {\n Trigger: typeof DialogTrigger;\n Content: typeof AlertDialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Action: typeof AlertDialogAction;\n Cancel: typeof AlertDialogCancel;\n};\n\n(AlertDialog as AlertDialogComponent).Trigger = DialogTrigger;\n(AlertDialog as AlertDialogComponent).Content = AlertDialogContent;\n(AlertDialog as AlertDialogComponent).Header = DialogHeader;\n(AlertDialog as AlertDialogComponent).Title = DialogTitle;\n(AlertDialog as AlertDialogComponent).Description = DialogDescription;\n(AlertDialog as AlertDialogComponent).Body = DialogBody;\n(AlertDialog as AlertDialogComponent).Footer = DialogFooter;\n(AlertDialog as AlertDialogComponent).Action = AlertDialogAction;\n(AlertDialog as AlertDialogComponent).Cancel = AlertDialogCancel;\n\nexport default AlertDialog as AlertDialogComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n AnchoredPositioner,\n DismissableLayer,\n OverlayArrow,\n Portal,\n Slot,\n type AnchoredPositionerProps,\n type OverlayArrowProps,\n} from '../../primitives';\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n /** Trigger node held in state so an initially-open popover re-renders anchored. */\n triggerNode: HTMLElement | null;\n onTriggerChange: (node: HTMLElement | null) => void;\n placement: AnchoredPositionerProps['placement'];\n offset: number;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nfunction usePopoverContext() {\n const ctx = useContext(PopoverContext);\n if (!ctx) throw new Error('Popover.* must be used inside <Popover>');\n return ctx;\n}\n\nexport interface PopoverProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: AnchoredPositionerProps['placement'];\n offset?: number;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Popover({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom',\n offset = 8,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: PopoverProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const [triggerNode, setTriggerNode] = useState<HTMLElement | null>(null);\n\n const ctx = useMemo<PopoverContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n triggerNode,\n onTriggerChange: setTriggerNode,\n placement,\n offset,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, triggerNode, placement, offset, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <PopoverContext.Provider value={ctx}>{children}</PopoverContext.Provider>;\n}\n\nexport interface PopoverTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n function PopoverTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = usePopoverContext();\n const { triggerRef, onTriggerChange } = ctx;\n const Component = asChild ? Slot : 'button';\n // Memoized so the callback ref isn't re-invoked (null → node) every render.\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLButtonElement>(\n forwardedRef,\n triggerRef as React.MutableRefObject<HTMLButtonElement | null>,\n onTriggerChange,\n ),\n [forwardedRef, triggerRef, onTriggerChange],\n );\n return (\n <Component\n ref={composedRef as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\n/** Represents the prop surface of the `Popover.Content`. */\nexport interface PopoverContentProps\n extends HTMLAttributes<HTMLDivElement>,\n SurfaceVariants {\n /** Skips the surface chrome (bg/border/shadow); keeps only z-index + animation. */\n isBare?: boolean;\n children: ReactNode;\n}\n\n/** Contains the default chrome width that preserves the historical look. */\nconst DEFAULT_WIDTH = 'w-72';\n\nexport const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n function PopoverContent(\n { isBare, variant, tone, radius, padding, elevation, className, children, ...rest },\n forwardedRef,\n ) {\n const ctx = usePopoverContext();\n if (!ctx.open) return null;\n /* Default to lg padding when chrome is on (matches old `p-4`); consumer can override. */\n const resolvedPadding = padding ?? (isBare ? 'none' : 'lg');\n return (\n <Portal>\n {/* z-popover (80) on the SC root (transform makes the stacking context) so a\n popover from a Dialog (z-modal, 70) paints above it — both portal to body. */}\n <AnchoredPositioner\n anchor={ctx.triggerNode}\n placement={ctx.placement}\n offset={ctx.offset}\n className=\"z-popover\"\n >\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!ctx.dismissOnEscape}\n onEscape={() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n isOutsideClickDisabled={!ctx.dismissOnOutsideClick}\n onOutsidePointerDown={(e) => {\n if (ctx.triggerRef.current?.contains(e.target as Node)) return;\n ctx.setOpen(false);\n }}\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n data-state=\"open\"\n className={cn(\n 'outline-none animate-in fade-in-0 zoom-in-95',\n !isBare &&\n cn(\n DEFAULT_WIDTH,\n surfaceVariants({\n variant,\n tone,\n radius,\n padding: resolvedPadding,\n elevation,\n }),\n ),\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </DismissableLayer>\n </FocusScope>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\nexport function PopoverArrow({ className, ...rest }: OverlayArrowProps) {\n return <OverlayArrow className={cn('text-popover', className)} {...rest} />;\n}\n\ntype PopoverComponent = typeof Popover & {\n Trigger: typeof PopoverTrigger;\n Content: typeof PopoverContent;\n Arrow: typeof PopoverArrow;\n};\n\n(Popover as PopoverComponent).Trigger = PopoverTrigger;\n(Popover as PopoverComponent).Content = PopoverContent;\n(Popover as PopoverComponent).Arrow = PopoverArrow;\n\nexport default Popover as PopoverComponent;\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled, useEscape } from '../../hooks';\nimport {\n AnchoredPositioner,\n OverlayArrow,\n Portal,\n type AnchoredPositionerProps,\n type OverlayArrowProps,\n} from '../../primitives';\n\ninterface HoverCardContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n show: () => void;\n hide: () => void;\n cancelHide: () => void;\n placement: AnchoredPositionerProps['placement'];\n offset: number;\n}\n\nconst HoverCardContext = createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext() {\n const ctx = useContext(HoverCardContext);\n if (!ctx) throw new Error('HoverCard.* must be used inside <HoverCard>');\n return ctx;\n}\n\nexport interface HoverCardProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n openDelay?: number;\n closeDelay?: number;\n placement?: AnchoredPositionerProps['placement'];\n offset?: number;\n children: ReactNode;\n}\n\nexport function HoverCard({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n openDelay = 700,\n closeDelay = 300,\n placement = 'bottom',\n offset = 8,\n children,\n}: HoverCardProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = null;\n closeTimer.current = null;\n }, []);\n\n const show = useCallback(() => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n }, [clear, openDelay, setOpen]);\n\n const hide = useCallback(() => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n }, [clear, closeDelay, setOpen]);\n\n const cancelHide = useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n\n // Clear pending timers on unmount — avoids setState-after-unmount.\n useEffect(() => clear, [clear]);\n\n // WCAG 1.4.13 — hover content must be dismissible without moving the pointer.\n useEscape(() => {\n clear();\n setOpen(false);\n }, open);\n\n const ctx = useMemo<HoverCardContextValue>(\n () => ({ open, setOpen, triggerRef, show, hide, cancelHide, placement, offset }),\n [open, setOpen, show, hide, cancelHide, placement, offset],\n );\n\n return <HoverCardContext.Provider value={ctx}>{children}</HoverCardContext.Provider>;\n}\n\nexport interface HoverCardTriggerProps {\n asChild?: boolean;\n children: ReactElement;\n}\n\nexport function HoverCardTrigger({ children }: HoverCardTriggerProps) {\n const ctx = useHoverCardContext();\n if (!isValidElement(children)) return children;\n const trigger = children as ReactElement<{\n ref?: Ref<HTMLElement>;\n onPointerEnter?: (e: React.PointerEvent) => void;\n onPointerLeave?: (e: React.PointerEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n }> & { ref?: Ref<HTMLElement> };\n\n return cloneElement(trigger, {\n ref: composeRefs((node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }, trigger.ref),\n onPointerEnter: (e: React.PointerEvent) => {\n trigger.props.onPointerEnter?.(e);\n ctx.show();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n trigger.props.onPointerLeave?.(e);\n ctx.hide();\n },\n onFocus: (e: React.FocusEvent) => {\n trigger.props.onFocus?.(e);\n ctx.show();\n },\n onBlur: (e: React.FocusEvent) => {\n trigger.props.onBlur?.(e);\n ctx.hide();\n },\n });\n}\n\nexport interface HoverCardContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const HoverCardContent = forwardRef<HTMLDivElement, HoverCardContentProps>(\n function HoverCardContent({ className, children, onPointerEnter, onPointerLeave, ...rest }, forwardedRef) {\n const ctx = useHoverCardContext();\n if (!ctx.open) return null;\n return (\n <Portal>\n <AnchoredPositioner\n anchor={ctx.triggerRef.current}\n placement={ctx.placement}\n offset={ctx.offset}\n className=\"z-dropdown\"\n >\n <div\n ref={forwardedRef}\n data-state=\"open\"\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n ctx.cancelHide();\n }}\n onPointerLeave={(e) => {\n onPointerLeave?.(e);\n ctx.hide();\n }}\n className={cn(\n 'w-64 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none animate-in fade-in-0 zoom-in-95',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\nexport function HoverCardArrow({ className, ...rest }: OverlayArrowProps) {\n return <OverlayArrow className={cn('text-popover', className)} {...rest} />;\n}\n\ntype HoverCardComponent = typeof HoverCard & {\n Trigger: typeof HoverCardTrigger;\n Content: typeof HoverCardContent;\n Arrow: typeof HoverCardArrow;\n};\n\n(HoverCard as HoverCardComponent).Trigger = HoverCardTrigger;\n(HoverCard as HoverCardComponent).Content = HoverCardContent;\n(HoverCard as HoverCardComponent).Arrow = HoverCardArrow;\n\nexport default HoverCard as HoverCardComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from '../drawer';\n\ninterface ActionSheetContextValue {\n setOpen: (open: boolean) => void;\n}\n\nconst ActionSheetContext = createContext<ActionSheetContextValue | null>(null);\n\nfunction useActionSheetContext() {\n const ctx = useContext(ActionSheetContext);\n if (!ctx) throw new Error('ActionSheet.* must be used inside <ActionSheet>');\n return ctx;\n}\n\nexport interface ActionSheetProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title?: ReactNode;\n description?: ReactNode;\n className?: string;\n children: ReactNode;\n}\n\n/**\n * iOS-style action sheet — opinionated bottom Drawer with stacked button rows\n * and a separated Cancel.\n */\nexport function ActionSheet({\n open,\n defaultOpen,\n onOpenChange,\n title,\n description,\n className,\n children,\n}: ActionSheetProps) {\n // ActionSheet owns open state + drives Drawer fully controlled, so `ctx.setOpen`\n // works in both controlled and uncontrolled modes (Drawer's context isn't interceptable).\n const [resolvedOpen, setOpen] = useControlled({\n controlled: open,\n default: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const ctx = useMemo<ActionSheetContextValue>(() => ({ setOpen }), [setOpen]);\n\n return (\n <ActionSheetContext.Provider value={ctx}>\n <Drawer open={resolvedOpen} onOpenChange={setOpen} side=\"bottom\">\n <DrawerContent\n className={cn(\n 'mx-auto max-w-md rounded-t-xl bg-card p-2 text-card-foreground',\n className,\n )}\n >\n {(title || description) && (\n <div className=\"px-3 py-2 text-center\">\n {title && (\n <DrawerTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </DrawerTitle>\n )}\n {description && (\n <DrawerDescription className=\"mt-1 text-xs text-muted-foreground\">\n {description}\n </DrawerDescription>\n )}\n </div>\n )}\n <div className=\"flex flex-col gap-px overflow-hidden rounded-lg bg-border\">\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n </ActionSheetContext.Provider>\n );\n}\n\nexport interface ActionSheetActionProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n onSelect?: () => void;\n isDestructive?: boolean;\n}\n\nexport const ActionSheetAction = forwardRef<HTMLButtonElement, ActionSheetActionProps>(\n function ActionSheetAction(\n { className, onSelect, isDestructive, onClick, children, type = 'button', ...rest },\n ref,\n ) {\n const ctx = useActionSheetContext();\n return (\n <button\n ref={ref}\n type={type}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onSelect?.();\n ctx.setOpen(false);\n }}\n className={cn(\n 'flex h-12 w-full items-center justify-center bg-card px-4 text-base font-medium transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n isDestructive ? 'text-destructive' : 'text-foreground',\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\nexport type ActionSheetCancelProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionSheetCancel = forwardRef<HTMLButtonElement, ActionSheetCancelProps>(\n function ActionSheetCancel({ className, onClick, children = 'Cancel', type = 'button', ...rest }, ref) {\n const ctx = useActionSheetContext();\n return (\n <button\n ref={ref}\n type={type}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(false);\n }}\n className={cn(\n 'mt-2 flex h-12 w-full items-center justify-center rounded-lg bg-card text-base font-semibold text-foreground shadow-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\ntype ActionSheetComponent = typeof ActionSheet & {\n Action: typeof ActionSheetAction;\n Cancel: typeof ActionSheetCancel;\n};\n\n(ActionSheet as ActionSheetComponent).Action = ActionSheetAction;\n(ActionSheet as ActionSheetComponent).Cancel = ActionSheetCancel;\n\nexport default ActionSheet as ActionSheetComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayChromeProvider,\n OverlayDescription,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\ntype SnapPoint = number | string;\n\ninterface BottomSheetContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n currentSnap: number;\n setCurrentSnap: (i: number) => void;\n snapPoints: SnapPoint[];\n}\n\nconst BottomSheetContext = createContext<BottomSheetContextValue | null>(null);\n\nexport function useBottomSheet() {\n const ctx = useContext(BottomSheetContext);\n if (!ctx) throw new Error('useBottomSheet must be used inside <BottomSheet>');\n return ctx;\n}\n\nfunction resolveSnapPx(point: SnapPoint, viewport: number): number {\n if (typeof point === 'number') return point;\n const trimmed = point.trim();\n if (trimmed.endsWith('vh')) return (parseFloat(trimmed) / 100) * viewport;\n if (trimmed.endsWith('px')) return parseFloat(trimmed);\n if (trimmed.endsWith('%')) return (parseFloat(trimmed) / 100) * viewport;\n // Fallback: try parseFloat as px.\n const n = parseFloat(trimmed);\n return Number.isFinite(n) ? n : 0;\n}\n\n/** Represents the prop surface of `BottomSheet`. */\nexport interface BottomSheetProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n snapPoints?: SnapPoint[];\n initialSnap?: number;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n dragToDismiss?: boolean;\n children: ReactNode;\n}\n\n/**\n * Mobile bottom sheet with drag handle + snap points. Pointer-event drag\n * between heights; releasing snaps to the nearest point. Past the lowest\n * snap with `dragToDismiss`, the sheet closes.\n */\nexport const BottomSheet = forwardRef<HTMLDivElement, BottomSheetProps>(function BottomSheet(\n {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n snapPoints = ['40vh', '90vh'],\n initialSnap = 0,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n dragToDismiss = true,\n variant,\n tone,\n radius,\n padding,\n elevation,\n className,\n children,\n ...rest\n },\n forwardedRef,\n) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [currentSnap, setCurrentSnap] = useState(\n Math.min(initialSnap, snapPoints.length - 1),\n );\n const sheetRef = useRef<HTMLDivElement | null>(null);\n const startYRef = useRef<number | null>(null);\n const startHeightRef = useRef(0);\n const [dragHeight, setDragHeight] = useState<number | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n // Reset to initialSnap each time we re-open.\n useEffect(() => {\n if (open) setCurrentSnap(Math.min(initialSnap, snapPoints.length - 1));\n }, [open, initialSnap, snapPoints.length]);\n\n const ctx = useMemo<BottomSheetContextValue>(\n () => ({ open, setOpen, currentSnap, setCurrentSnap, snapPoints }),\n [open, setOpen, currentSnap, snapPoints],\n );\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId, descriptionId, close: () => setOpen(false) }),\n [titleId, descriptionId, setOpen],\n );\n\n const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n startYRef.current = e.clientY;\n const rect = sheetRef.current?.getBoundingClientRect();\n startHeightRef.current = rect ? rect.height : 0;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const handlePointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startYRef.current == null) return;\n const dy = e.clientY - startYRef.current;\n setDragHeight(Math.max(0, startHeightRef.current - dy));\n };\n\n const handlePointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startYRef.current == null) return;\n startYRef.current = null;\n (e.currentTarget as HTMLElement).releasePointerCapture?.(e.pointerId);\n\n const viewport = typeof window !== 'undefined' ? window.innerHeight : 800;\n const heights = snapPoints.map((p) => resolveSnapPx(p, viewport));\n const liveHeight = dragHeight ?? heights[currentSnap] ?? 0;\n setDragHeight(null);\n\n // Below lowest snap by 60px → dismiss.\n if (dragToDismiss && liveHeight < (heights[0] ?? 0) - 60) {\n setOpen(false);\n return;\n }\n // Snap to nearest.\n let bestIdx = 0;\n let bestDist = Number.POSITIVE_INFINITY;\n heights.forEach((h, i) => {\n const d = Math.abs(h - liveHeight);\n if (d < bestDist) {\n bestDist = d;\n bestIdx = i;\n }\n });\n setCurrentSnap(bestIdx);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowUp' && currentSnap < snapPoints.length - 1) {\n e.preventDefault();\n setCurrentSnap(currentSnap + 1);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (currentSnap > 0) setCurrentSnap(currentSnap - 1);\n else if (dragToDismiss) setOpen(false);\n }\n };\n\n if (!open) return null;\n\n const heightStyle: string | number = (() => {\n if (dragHeight != null) return `${dragHeight}px`;\n const point = snapPoints[currentSnap];\n if (typeof point === 'number') return `${point}px`;\n return point ?? '40vh';\n })();\n\n return (\n <BottomSheetContext.Provider value={ctx}>\n <Portal>\n <ScrollLockProvider>\n <Backdrop\n isInline\n onClick={() => {\n if (dismissOnOutsideClick) setOpen(false);\n }}\n />\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!dismissOnEscape}\n onEscape={() => setOpen(false)}\n isOutsideClickDisabled\n >\n <div\n ref={(el) => {\n sheetRef.current = el;\n if (typeof forwardedRef === 'function') forwardedRef(el);\n else if (forwardedRef) (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={{\n height: heightStyle,\n transition: dragHeight == null ? 'height 220ms ease-out' : 'none',\n }}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-modal flex flex-col rounded-t-xl border-t outline-none',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'none',\n padding: padding ?? 'none',\n elevation: elevation ?? 5,\n }),\n className,\n )}\n {...rest}\n >\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n aria-valuenow={currentSnap}\n aria-valuemin={0}\n aria-valuemax={snapPoints.length - 1}\n tabIndex={0}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n onKeyDown={handleKeyDown}\n className=\"flex h-7 cursor-ns-resize items-center justify-center focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n <span className=\"h-1 w-10 rounded-full bg-border-strong\" aria-hidden=\"true\" />\n </div>\n <div className=\"flex-1 overflow-y-auto px-4 pb-4\">\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </div>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockProvider>\n </Portal>\n </BottomSheetContext.Provider>\n );\n});\n\n// Re-export shared chrome under the BottomSheet namespace — they wire\n// `id={titleId}`/`id={descriptionId}` so the sheet's aria-labelledby/describedby resolve.\nexport const BottomSheetTitle = OverlayTitle;\nexport const BottomSheetDescription = OverlayDescription;\n\ntype BottomSheetComponent = typeof BottomSheet & {\n Title: typeof BottomSheetTitle;\n Description: typeof BottomSheetDescription;\n};\n\n(BottomSheet as BottomSheetComponent).Title = BottomSheetTitle;\n(BottomSheet as BottomSheetComponent).Description = BottomSheetDescription;\n\nexport default BottomSheet as BottomSheetComponent;\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Portal } from './chunk-
|
|
1
|
+
import { Portal } from './chunk-XLYJF3HC.js';
|
|
2
2
|
import { cn } from './chunk-X2MYOHOB.js';
|
|
3
3
|
import { forwardRef } from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -23,5 +23,5 @@ var Backdrop = forwardRef(function Backdrop2({ open = true, isBlurred, pointerEv
|
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
export { Backdrop };
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
26
|
+
//# sourceMappingURL=chunk-EQNTG53H.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-EQNTG53H.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/overlays/backdrop/Backdrop.tsx"],"names":["Backdrop"],"mappings":";;;;;AAgBO,IAAM,WAAW,UAAA,CAA0C,SAASA,SAAAA,CACzE,EAAE,OAAO,IAAA,EAAM,SAAA,EAAW,aAAA,GAAgB,MAAA,EAAQ,UAAU,SAAA,EAAW,KAAA,EAAO,GAAG,IAAA,IACjF,GAAA,EACA;AACA,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,IAAA,mBACJ,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,MAC5B,KAAA,EAAO,EAAE,aAAA,EAAe,GAAG,KAAA,EAAM;AAAA,MACjC,SAAA,EAAW,EAAA;AAAA,QACT,0DAAA;AAAA,QACA,SAAA,IAAa,kBAAA;AAAA,QACb;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEF,EAAA,OAAO,QAAA,GAAW,IAAA,mBAAO,GAAA,CAAC,MAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,EAAK,CAAA;AACzC,CAAC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/overlays/backdrop/Backdrop.tsx"],"names":["Backdrop"],"mappings":";;;;;AAgBO,IAAM,WAAW,UAAA,CAA0C,SAASA,SAAAA,CACzE,EAAE,OAAO,IAAA,EAAM,SAAA,EAAW,aAAA,GAAgB,MAAA,EAAQ,UAAU,SAAA,EAAW,KAAA,EAAO,GAAG,IAAA,IACjF,GAAA,EACA;AACA,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,IAAA,mBACJ,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,MAC5B,KAAA,EAAO,EAAE,aAAA,EAAe,GAAG,KAAA,EAAM;AAAA,MACjC,SAAA,EAAW,EAAA;AAAA,QACT,0DAAA;AAAA,QACA,SAAA,IAAa,kBAAA;AAAA,QACb;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEF,EAAA,OAAO,QAAA,GAAW,IAAA,mBAAO,GAAA,CAAC,MAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,EAAK,CAAA;AACzC,CAAC","file":"chunk-EQNTG53H.js","sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { Portal } from '../../primitives';\n\nexport interface BackdropProps extends HTMLAttributes<HTMLDivElement> {\n /** Mount state. Default `true`. */\n open?: boolean;\n /** Apply backdrop-blur. */\n isBlurred?: boolean;\n /** When `'none'`, clicks pass through. Default `'auto'`. */\n pointerEvents?: 'auto' | 'none';\n /** Skip the Portal wrap — render in place. */\n isInline?: boolean;\n}\n\n/** Fixed-position scrim. Used by Dialog / Drawer / LoadingOverlay; also public for custom overlay surfaces. */\nexport const Backdrop = forwardRef<HTMLDivElement, BackdropProps>(function Backdrop(\n { open = true, isBlurred, pointerEvents = 'auto', isInline, className, style, ...rest },\n ref,\n) {\n if (!open) return null;\n const node = (\n <div\n ref={ref}\n data-state={open ? 'open' : 'closed'}\n style={{ pointerEvents, ...style }}\n className={cn(\n 'fixed inset-0 z-overlay bg-black/50 animate-in fade-in-0',\n isBlurred && 'backdrop-blur-sm',\n className,\n )}\n {...rest}\n />\n );\n return isInline ? node : <Portal>{node}</Portal>;\n});\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { OverlayChromeProvider, OverlayBody, OverlayCloseButton, OverlayDescription, OverlayFooter, OverlayHeader, OverlayTitle } from './chunk-
|
|
2
|
-
import { Backdrop } from './chunk-
|
|
1
|
+
import { OverlayChromeProvider, OverlayBody, OverlayCloseButton, OverlayDescription, OverlayFooter, OverlayHeader, OverlayTitle } from './chunk-NOOKDXIZ.js';
|
|
2
|
+
import { Backdrop } from './chunk-EQNTG53H.js';
|
|
3
3
|
import { useControlled } from './chunk-V267IMBH.js';
|
|
4
4
|
import { surfaceVariants } from './chunk-DX7FYAKY.js';
|
|
5
|
-
import { Slot, Portal, ScrollLockProvider, DismissableLayer } from './chunk-
|
|
5
|
+
import { Slot, Portal, ScrollLockProvider, DismissableLayer } from './chunk-XLYJF3HC.js';
|
|
6
6
|
import { composeRefs, cn } from './chunk-X2MYOHOB.js';
|
|
7
7
|
import { createContext, forwardRef, useCallback, useMemo, useContext, useRef, useId } from 'react';
|
|
8
8
|
import { FocusScope } from '@radix-ui/react-focus-scope';
|
|
@@ -155,5 +155,5 @@ Dialog.Footer = DialogFooter;
|
|
|
155
155
|
Dialog.Close = DialogClose;
|
|
156
156
|
|
|
157
157
|
export { Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger };
|
|
158
|
-
//# sourceMappingURL=chunk-
|
|
159
|
-
//# sourceMappingURL=chunk-
|
|
158
|
+
//# sourceMappingURL=chunk-H4P5MAGS.js.map
|
|
159
|
+
//# sourceMappingURL=chunk-H4P5MAGS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/overlays/dialog/Dialog.tsx"],"names":["DialogTrigger","DialogContent"],"mappings":"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","file":"chunk-VQF4QTBD.js","sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n role: 'dialog' | 'alertdialog';\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nfunction useDialogContext() {\n const ctx = useContext(DialogContext);\n if (!ctx) throw new Error('Dialog.* must be used inside <Dialog>');\n return ctx;\n}\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n /** Internal — `AlertDialog` overrides this. */\n role?: 'dialog' | 'alertdialog';\n children: ReactNode;\n}\n\nexport function Dialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n role = 'dialog',\n children,\n}: DialogProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DialogContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n role,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, role, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DialogContext.Provider value={ctx}>{children}</DialogContext.Provider>;\n}\n\nexport interface DialogTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DialogTrigger = forwardRef<HTMLButtonElement, DialogTriggerProps>(\n function DialogTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDialogContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\n/** Represents the prop surface of `Dialog.Content`. */\nexport interface DialogContentProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n /** Disables the default backdrop when true. */\n hideBackdrop?: boolean;\n /** Applies a backdrop blur. */\n isBlurred?: boolean;\n children: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function DialogContent(\n {\n hideBackdrop,\n isBlurred,\n variant,\n tone,\n radius,\n padding,\n elevation,\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useDialogContext();\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n if (!ctx.open) return null;\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && <Backdrop isInline isBlurred={isBlurred} />}\n {/* Outside-click dismissal lives on the centering wrapper (it covers the\n backdrop): a click on the padding (target === currentTarget) = outside. */}\n <div\n className=\"fixed inset-0 z-modal grid place-items-center overflow-y-auto p-4\"\n onClick={(e) => {\n if (e.target !== e.currentTarget) return;\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n >\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n isOutsideClickDisabled\n >\n <div\n ref={forwardedRef}\n role={ctx.role}\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state=\"open\"\n className={cn(\n 'relative w-full max-w-lg animate-in fade-in-0 zoom-in-95',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'lg',\n padding: padding ?? 'xl',\n elevation,\n }),\n className,\n )}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </div>\n </ScrollLockProvider>\n </Portal>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Dialog namespace.\nexport const DialogHeader = OverlayHeader;\nexport const DialogTitle = OverlayTitle;\nexport const DialogDescription = OverlayDescription;\nexport const DialogBody = OverlayBody;\nexport const DialogFooter = OverlayFooter;\nexport const DialogClose = OverlayCloseButton;\n\ntype DialogComponent = typeof Dialog & {\n Trigger: typeof DialogTrigger;\n Content: typeof DialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Close: typeof DialogClose;\n};\n\n(Dialog as DialogComponent).Trigger = DialogTrigger;\n(Dialog as DialogComponent).Content = DialogContent;\n(Dialog as DialogComponent).Header = DialogHeader;\n(Dialog as DialogComponent).Title = DialogTitle;\n(Dialog as DialogComponent).Description = DialogDescription;\n(Dialog as DialogComponent).Body = DialogBody;\n(Dialog as DialogComponent).Footer = DialogFooter;\n(Dialog as DialogComponent).Close = DialogClose;\n\nexport default Dialog as DialogComponent;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/overlays/dialog/Dialog.tsx"],"names":["DialogTrigger","DialogContent"],"mappings":"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","file":"chunk-H4P5MAGS.js","sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n role: 'dialog' | 'alertdialog';\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nfunction useDialogContext() {\n const ctx = useContext(DialogContext);\n if (!ctx) throw new Error('Dialog.* must be used inside <Dialog>');\n return ctx;\n}\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n /** Internal — `AlertDialog` overrides this. */\n role?: 'dialog' | 'alertdialog';\n children: ReactNode;\n}\n\nexport function Dialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n role = 'dialog',\n children,\n}: DialogProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DialogContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n role,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, role, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DialogContext.Provider value={ctx}>{children}</DialogContext.Provider>;\n}\n\nexport interface DialogTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DialogTrigger = forwardRef<HTMLButtonElement, DialogTriggerProps>(\n function DialogTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDialogContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\n/** Represents the prop surface of `Dialog.Content`. */\nexport interface DialogContentProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n /** Disables the default backdrop when true. */\n hideBackdrop?: boolean;\n /** Applies a backdrop blur. */\n isBlurred?: boolean;\n children: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function DialogContent(\n {\n hideBackdrop,\n isBlurred,\n variant,\n tone,\n radius,\n padding,\n elevation,\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useDialogContext();\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n if (!ctx.open) return null;\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && <Backdrop isInline isBlurred={isBlurred} />}\n {/* Outside-click dismissal lives on the centering wrapper (it covers the\n backdrop): a click on the padding (target === currentTarget) = outside. */}\n <div\n className=\"fixed inset-0 z-modal grid place-items-center overflow-y-auto p-4\"\n onClick={(e) => {\n if (e.target !== e.currentTarget) return;\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n >\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n isOutsideClickDisabled\n >\n <div\n ref={forwardedRef}\n role={ctx.role}\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state=\"open\"\n className={cn(\n 'relative w-full max-w-lg animate-in fade-in-0 zoom-in-95',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'lg',\n padding: padding ?? 'xl',\n elevation,\n }),\n className,\n )}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </div>\n </ScrollLockProvider>\n </Portal>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Dialog namespace.\nexport const DialogHeader = OverlayHeader;\nexport const DialogTitle = OverlayTitle;\nexport const DialogDescription = OverlayDescription;\nexport const DialogBody = OverlayBody;\nexport const DialogFooter = OverlayFooter;\nexport const DialogClose = OverlayCloseButton;\n\ntype DialogComponent = typeof Dialog & {\n Trigger: typeof DialogTrigger;\n Content: typeof DialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Close: typeof DialogClose;\n};\n\n(Dialog as DialogComponent).Trigger = DialogTrigger;\n(Dialog as DialogComponent).Content = DialogContent;\n(Dialog as DialogComponent).Header = DialogHeader;\n(Dialog as DialogComponent).Title = DialogTitle;\n(Dialog as DialogComponent).Description = DialogDescription;\n(Dialog as DialogComponent).Body = DialogBody;\n(Dialog as DialogComponent).Footer = DialogFooter;\n(Dialog as DialogComponent).Close = DialogClose;\n\nexport default Dialog as DialogComponent;\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { listboxItemVariants, listboxEmptyVariants, listboxGroupLabelVariants, listboxSeparatorVariants } from './chunk-FMTBJJP6.js';
|
|
2
|
-
import { DialogContent, Dialog } from './chunk-
|
|
2
|
+
import { DialogContent, Dialog } from './chunk-H4P5MAGS.js';
|
|
3
3
|
import { useControlled } from './chunk-V267IMBH.js';
|
|
4
4
|
import { Icon } from './chunk-MVMDDGW7.js';
|
|
5
5
|
import { dataAttr, tv, surfaceVariants } from './chunk-DX7FYAKY.js';
|
|
6
|
-
import { Slot, RovingFocusGroup, useRovingFocusItem, Portal, AnchoredPositioner, DismissableLayer } from './chunk-
|
|
6
|
+
import { Slot, RovingFocusGroup, useRovingFocusItem, Portal, AnchoredPositioner, DismissableLayer } from './chunk-XLYJF3HC.js';
|
|
7
7
|
import { cn, composeRefs } from './chunk-X2MYOHOB.js';
|
|
8
8
|
import { forwardRef, Fragment, createContext, useId, useRef, useEffect, useCallback, useMemo, useState, useContext } from 'react';
|
|
9
9
|
import { ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight, ChevronDown, Search } from 'lucide-react';
|
|
@@ -1428,5 +1428,5 @@ var TableOfContents = forwardRef(
|
|
|
1428
1428
|
);
|
|
1429
1429
|
|
|
1430
1430
|
export { Breadcrumb, CommandPalette, CommandPaletteContent, CommandPaletteEmpty, CommandPaletteGroup, CommandPaletteInput, CommandPaletteItem, CommandPaletteList, CommandPaletteSeparator, ContextMenu, ContextMenuContent, ContextMenuTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, Menu, MenuGroup, MenuItem, MenuLabel, MenuSeparator, Menubar, MenubarContent, MenubarMenu, MenubarTrigger, NavItem, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, Pagination, ScrollSpy, TableOfContents, menuItemVariants, menuLabelVariants, menuSeparatorVariants, menuVariants, useScrollSpy };
|
|
1431
|
-
//# sourceMappingURL=chunk-
|
|
1432
|
-
//# sourceMappingURL=chunk-
|
|
1431
|
+
//# sourceMappingURL=chunk-MYLSXVIS.js.map
|
|
1432
|
+
//# sourceMappingURL=chunk-MYLSXVIS.js.map
|