@hexdspace/react 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +54 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1553,7 +1553,7 @@ var dialogPanelVariants = cva2(
|
|
|
1553
1553
|
"w-[min(92vw,var(--dialog-width))]",
|
|
1554
1554
|
"pointer-events-auto",
|
|
1555
1555
|
"data-[state=open]:animate-[dialog-fade-in_var(--motion-med)_cubic-bezier(0.16,1,0.3,1)]",
|
|
1556
|
-
"data-[state=closed]:animate-[dialog-fade-out_var(--motion-
|
|
1556
|
+
"data-[state=closed]:animate-[dialog-fade-out_var(--motion-med)_cubic-bezier(0.4,0,1,1)]",
|
|
1557
1557
|
"motion-reduce:animate-none",
|
|
1558
1558
|
"data-[state=closed]:pointer-events-none"
|
|
1559
1559
|
)
|
|
@@ -1561,7 +1561,7 @@ var dialogPanelVariants = cva2(
|
|
|
1561
1561
|
var dialogOverlayClass = cn(
|
|
1562
1562
|
"fixed inset-0 bg-[color:var(--overlay)]",
|
|
1563
1563
|
"data-[state=open]:animate-[dialog-overlay-in_var(--motion-med)_cubic-bezier(0.16,1,0.3,1)]",
|
|
1564
|
-
"data-[state=closed]:animate-[dialog-overlay-out_var(--motion-
|
|
1564
|
+
"data-[state=closed]:animate-[dialog-overlay-out_var(--motion-med)_cubic-bezier(0.4,0,1,1)]",
|
|
1565
1565
|
"motion-reduce:animate-none",
|
|
1566
1566
|
"data-[state=closed]:pointer-events-none"
|
|
1567
1567
|
);
|
|
@@ -1662,7 +1662,7 @@ function Dialog({
|
|
|
1662
1662
|
"DialogContent",
|
|
1663
1663
|
dialogPanelVariants(),
|
|
1664
1664
|
"data-[state=open]:[&_.dialog-surface]:animate-[dialog-surface-in_var(--motion-med)_cubic-bezier(0.16,1,0.3,1)]",
|
|
1665
|
-
"data-[state=closed]:[&_.dialog-surface]:animate-[dialog-surface-out_var(--motion-
|
|
1665
|
+
"data-[state=closed]:[&_.dialog-surface]:animate-[dialog-surface-out_var(--motion-med)_cubic-bezier(0.4,0,1,1)]",
|
|
1666
1666
|
"motion-reduce:[&_.dialog-surface]:animate-none",
|
|
1667
1667
|
className
|
|
1668
1668
|
),
|
|
@@ -1905,13 +1905,52 @@ var dialogController = new DialogController(registry, open, resolve, dismiss, cl
|
|
|
1905
1905
|
import { Fragment as Fragment2, jsx as jsx11 } from "react/jsx-runtime";
|
|
1906
1906
|
var DialogHost = () => {
|
|
1907
1907
|
const [state, setState] = React3.useState(dialogController.handleGetRegistry().getState());
|
|
1908
|
+
const [closingIds, setClosingIds] = React3.useState(() => /* @__PURE__ */ new Set());
|
|
1909
|
+
const closeTimers = React3.useRef(/* @__PURE__ */ new Map());
|
|
1910
|
+
const [closeDelayMs, setCloseDelayMs] = React3.useState(160);
|
|
1908
1911
|
React3.useEffect(() => dialogController.handleGetRegistry().subscribe(setState), []);
|
|
1912
|
+
React3.useEffect(() => {
|
|
1913
|
+
if (typeof window === "undefined") return;
|
|
1914
|
+
const raw = getComputedStyle(document.documentElement).getPropertyValue("--motion-fast").trim();
|
|
1915
|
+
const parsed = parseDurationMs(raw);
|
|
1916
|
+
if (parsed) setCloseDelayMs(parsed);
|
|
1917
|
+
}, []);
|
|
1918
|
+
React3.useEffect(() => {
|
|
1919
|
+
return () => {
|
|
1920
|
+
for (const timer of closeTimers.current.values()) {
|
|
1921
|
+
window.clearTimeout(timer);
|
|
1922
|
+
}
|
|
1923
|
+
closeTimers.current.clear();
|
|
1924
|
+
};
|
|
1925
|
+
}, []);
|
|
1926
|
+
const scheduleClose = React3.useCallback(
|
|
1927
|
+
(id, action, result) => {
|
|
1928
|
+
if (closingIds.has(id)) return;
|
|
1929
|
+
setClosingIds((prev) => new Set(prev).add(id));
|
|
1930
|
+
const timer = window.setTimeout(() => {
|
|
1931
|
+
if (action === "resolve") {
|
|
1932
|
+
dialogController.handleResolve(id, result);
|
|
1933
|
+
} else {
|
|
1934
|
+
dialogController.handleDismiss(id);
|
|
1935
|
+
}
|
|
1936
|
+
setClosingIds((prev) => {
|
|
1937
|
+
const next = new Set(prev);
|
|
1938
|
+
next.delete(id);
|
|
1939
|
+
return next;
|
|
1940
|
+
});
|
|
1941
|
+
closeTimers.current.delete(id);
|
|
1942
|
+
}, closeDelayMs);
|
|
1943
|
+
closeTimers.current.set(id, timer);
|
|
1944
|
+
},
|
|
1945
|
+
[closeDelayMs, closingIds]
|
|
1946
|
+
);
|
|
1909
1947
|
return /* @__PURE__ */ jsx11(Fragment2, { children: state.stack.map((dialog, index) => {
|
|
1910
1948
|
const template = getDialogTemplate(dialog.templateKey);
|
|
1911
1949
|
if (!template) {
|
|
1912
1950
|
console.error(`Missing dialog template: ${dialog.templateKey}`);
|
|
1913
1951
|
return null;
|
|
1914
1952
|
}
|
|
1953
|
+
const isClosing = closingIds.has(dialog.id);
|
|
1915
1954
|
return /* @__PURE__ */ jsx11(
|
|
1916
1955
|
Dialog,
|
|
1917
1956
|
{
|
|
@@ -1921,14 +1960,23 @@ var DialogHost = () => {
|
|
|
1921
1960
|
modal: dialog.options.modal,
|
|
1922
1961
|
dismissible: dialog.options.dismissible,
|
|
1923
1962
|
zIndex: dialog.options.zIndex + index,
|
|
1924
|
-
|
|
1925
|
-
onResolve: (result) =>
|
|
1926
|
-
onDismiss: () =>
|
|
1963
|
+
open: !isClosing,
|
|
1964
|
+
onResolve: (result) => scheduleClose(dialog.id, "resolve", result),
|
|
1965
|
+
onDismiss: () => scheduleClose(dialog.id, "dismiss")
|
|
1927
1966
|
},
|
|
1928
1967
|
dialog.id
|
|
1929
1968
|
);
|
|
1930
1969
|
}) });
|
|
1931
1970
|
};
|
|
1971
|
+
function parseDurationMs(value) {
|
|
1972
|
+
if (!value) return null;
|
|
1973
|
+
const trimmed = value.trim();
|
|
1974
|
+
const asNumber = Number(trimmed.replace(/ms|s/g, ""));
|
|
1975
|
+
if (Number.isNaN(asNumber)) return null;
|
|
1976
|
+
if (trimmed.endsWith("ms")) return asNumber;
|
|
1977
|
+
if (trimmed.endsWith("s")) return asNumber * 1e3;
|
|
1978
|
+
return asNumber;
|
|
1979
|
+
}
|
|
1932
1980
|
|
|
1933
1981
|
// src/feature/dialog/infra/web/react/useDialog.tsx
|
|
1934
1982
|
import { useMemo as useMemo3 } from "react";
|