@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
76 lines (75 loc) • 2.47 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { useId, useMemo, useState } from "react";
import { context } from "./context.js";
import { useControlled } from "@1771technologies/lytenyte-core/internal";
export const DialogRoot = ({ open: openProp, onOpenChange: onOpenChangeProp, onOpenChangeComplete, openInitial, id: idProvided, descriptionId: descIdProvider, titleId: titleIdProvided, children, focusCanReturn, focusCanTrap, focusFallback, focusInitial, focusPreventScroll, focusReturn, focusTrap, lightDismiss, modal, hide, lockScroll = modal ?? true, anchor = null, placement = "bottom", shiftPadding = 8, inline = false, sideOffset = 8, alignOffset = 0, }) => {
const [open, onOpenChange] = useControlled({ controlled: openProp, default: openInitial });
const [arrow, setArrow] = useState(null);
const id = useId();
const descriptionId = useId();
const titleId = useId();
const value = useMemo(() => {
return {
open,
onOpenChange: (b) => {
onOpenChange(b);
onOpenChangeProp?.(b);
},
onOpenChangeComplete: (b) => {
onOpenChangeComplete?.(b);
},
id: idProvided ?? id,
descriptionId: descIdProvider ?? descriptionId,
titleId: titleIdProvided ?? titleId,
hide,
lightDismiss,
focusCanReturn,
focusCanTrap,
focusFallback,
focusInitial,
focusPreventScroll,
focusReturn,
focusTrap,
lockScroll,
modal,
anchor,
placement,
shiftPadding,
inline,
sideOffset,
alignOffset,
arrow,
setArrow,
};
}, [
alignOffset,
anchor,
arrow,
descIdProvider,
descriptionId,
focusCanReturn,
focusCanTrap,
focusFallback,
focusInitial,
focusPreventScroll,
focusReturn,
focusTrap,
hide,
id,
idProvided,
inline,
lightDismiss,
lockScroll,
modal,
onOpenChange,
onOpenChangeComplete,
onOpenChangeProp,
open,
placement,
shiftPadding,
sideOffset,
titleId,
titleIdProvided,
]);
return _jsx(context.Provider, { value: value, children: children });
};