UNPKG

@ariakit/react

Version:

Toolkit for building accessible web apps with React

269 lines (220 loc) 11.5 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _5FQZLBJ7cjs = require('./5FQZLBJ7.cjs'); var _LZ6L3ECGcjs = require('./LZ6L3ECG.cjs'); // ../ariakit-react-components/dist/disclosure/disclosure-context.js var ctx = _LZ6L3ECGcjs.createStoreContext.call(void 0, ); var useDisclosureContext = ctx.useContext; var useDisclosureScopedContext = ctx.useScopedContext; var useDisclosureProviderContext = ctx.useProviderContext; var DisclosureContextProvider = ctx.ContextProvider; var DisclosureScopedContextProvider = ctx.ScopedContextProvider; // ../ariakit-react-components/dist/dialog/dialog-context.js var _react = require('react'); var ctx2 = _LZ6L3ECGcjs.createStoreContext.call(void 0, [DisclosureContextProvider], [DisclosureScopedContextProvider]); var useDialogContext = ctx2.useContext; var useDialogScopedContext = ctx2.useScopedContext; var useDialogProviderContext = ctx2.useProviderContext; var DialogContextProvider = ctx2.ContextProvider; var DialogScopedContextProvider = ctx2.ScopedContextProvider; var DialogHeadingContext = _react.createContext.call(void 0, void 0); var DialogDescriptionContext = _react.createContext.call(void 0, void 0); // ../ariakit-react-components/dist/disclosure/disclosure-content.js var _jsxruntime = require('react/jsx-runtime'); var _reactdom = require('react-dom'); var TagName = "div"; function afterTimeout(timeoutMs, cb) { const timeoutId = setTimeout(cb, timeoutMs); return () => clearTimeout(timeoutId); } function parseCSSTime(time) { const value = (time == null ? void 0 : time.trim()) || "0s"; const multiplier = value.endsWith("ms") ? 1 : 1e3; const parsed = Number.parseFloat(value) * multiplier; return Number.isNaN(parsed) ? 0 : parsed; } function getEndTime(names, delays, durations) { const nameList = names.split(","); const delayList = delays.split(","); const durationList = durations.split(","); let endTime = 0; for (const [index, name] of nameList.entries()) { if (name.trim() === "none") continue; const delay = parseCSSTime(delayList[index % delayList.length]); const duration = parseCSSTime(durationList[index % durationList.length]); endTime = Math.max(endTime, delay + duration); } return endTime; } function getElementEndTime(element) { const { transitionProperty, transitionDuration, transitionDelay, animationName, animationDuration, animationDelay } = getComputedStyle(element); return Math.max(getEndTime(transitionProperty, transitionDelay, transitionDuration), getEndTime(animationName, animationDelay, animationDuration)); } function isHidden(mounted, hidden, alwaysVisible) { return !alwaysVisible && hidden !== false && (!mounted || !!hidden); } var useDisclosureContent = _LZ6L3ECGcjs.createHook.call(void 0, function useDisclosureContent2({ store, alwaysVisible, unstable_otherElementRef: otherElementRef, ...props }) { const context = useDisclosureProviderContext(); store = store || context; _LZ6L3ECGcjs.invariant.call(void 0, store, process.env.NODE_ENV !== "production" && "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component."); const ref = _react.useRef.call(void 0, null); const id = _LZ6L3ECGcjs.useId.call(void 0, props.id); const [transition, setTransition] = _react.useState.call(void 0, null); const open = _5FQZLBJ7cjs.useStoreState.call(void 0, store, "open"); const mounted = _5FQZLBJ7cjs.useStoreState.call(void 0, store, "mounted"); const animated = _5FQZLBJ7cjs.useStoreState.call(void 0, store, "animated"); const contentElement = _5FQZLBJ7cjs.useStoreState.call(void 0, store, "contentElement"); const otherElement = _5FQZLBJ7cjs.useStoreState.call(void 0, store.disclosure, "contentElement"); const hasClosedRef = _react.useRef.call(void 0, false); _LZ6L3ECGcjs.useSafeLayoutEffect.call(void 0, () => { if (!ref.current) return; store == null ? void 0 : store.setContentElement(ref.current); }, [store]); _LZ6L3ECGcjs.useSafeLayoutEffect.call(void 0, () => { let previousAnimated; store == null ? void 0 : store.setState("animated", (animated2) => { previousAnimated = animated2; return true; }); return () => { if (previousAnimated === void 0) return; store == null ? void 0 : store.setState("animated", previousAnimated); }; }, [store]); _LZ6L3ECGcjs.useSafeLayoutEffect.call(void 0, () => { if (!animated) { if (!open) { hasClosedRef.current = true; setTransition(null); } else if (hasClosedRef.current) { hasClosedRef.current = false; setTransition("enter"); } return; } if (!(contentElement == null ? void 0 : contentElement.isConnected)) { setTransition(null); return; } return _LZ6L3ECGcjs.afterPaint.call(void 0, () => { setTransition(open ? "enter" : mounted ? "leave" : null); }); }, [ animated, contentElement, open, mounted ]); _LZ6L3ECGcjs.useSafeLayoutEffect.call(void 0, () => { if (!store) return; if (!animated) return; if (!transition) return; if (!contentElement) return; const stopAnimation = () => store == null ? void 0 : store.setState("animating", false); const stopAnimationSync = () => _reactdom.flushSync.call(void 0, stopAnimation); if (transition === "leave" && open) return; if (transition === "enter" && !open) return; if (typeof animated === "number") return afterTimeout(animated, stopAnimationSync); const elements = [contentElement]; if (otherElement) elements.push(otherElement); const relatedElement = otherElementRef == null ? void 0 : otherElementRef.current; if (relatedElement) elements.push(relatedElement); const timeout = Math.max(...elements.map(getElementEndTime)); if (!timeout) { if (transition === "enter") store.setState("animated", false); stopAnimation(); return; } return afterTimeout(Math.max(timeout - 1e3 / 60, 0), stopAnimationSync); }, [ store, animated, contentElement, otherElement, otherElementRef, open, transition ]); props = _LZ6L3ECGcjs.useWrapElement.call(void 0, props, (element) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DialogScopedContextProvider, { value: store, children: element }), [store]); const hidden = isHidden(mounted, props.hidden, alwaysVisible); const styleProp = props.style; const style = _react.useMemo.call(void 0, () => { if (hidden) return { ...styleProp, display: "none" }; return styleProp; }, [hidden, styleProp]); props = { "data-open": open || void 0, "data-enter": transition === "enter" || void 0, "data-leave": transition === "leave" || void 0, hidden, ...props, id, ref: _LZ6L3ECGcjs.useMergeRefs.call(void 0, id ? store.setContentElement : null, ref, props.ref), style }; return _LZ6L3ECGcjs.removeUndefinedValues.call(void 0, props); }); var DisclosureContentImpl = _LZ6L3ECGcjs.forwardRef.call(void 0, function DisclosureContentImpl2(props) { return _LZ6L3ECGcjs.createElement.call(void 0, TagName, useDisclosureContent(props)); }); var DisclosureContent = _LZ6L3ECGcjs.forwardRef.call(void 0, function DisclosureContent2({ unmountOnHide, ...props }) { const context = useDisclosureProviderContext(); if (_5FQZLBJ7cjs.useStoreState.call(void 0, props.store || context, (state) => !unmountOnHide || (state == null ? void 0 : state.mounted)) === false) return null; return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DisclosureContentImpl, { ...props }); }); // ../ariakit-components/dist/disclosure/disclosure-store.js function createDisclosureStore(props = {}) { const store = _5FQZLBJ7cjs.mergeStore.call(void 0, props.store, _5FQZLBJ7cjs.omit.call(void 0, props.disclosure, ["contentElement", "disclosureElement"])); _5FQZLBJ7cjs.throwOnConflictingProps.call(void 0, props, store); const syncState = store == null ? void 0 : store.getState(); const open = _LZ6L3ECGcjs.defaultValue.call(void 0, props.open, syncState == null ? void 0 : syncState.open, props.defaultOpen, false); const animated = _LZ6L3ECGcjs.defaultValue.call(void 0, props.animated, syncState == null ? void 0 : syncState.animated, false); const disclosure = _5FQZLBJ7cjs.createStore.call(void 0, { open, animated, animating: !!animated && open, mounted: open, contentElement: _LZ6L3ECGcjs.defaultValue.call(void 0, syncState == null ? void 0 : syncState.contentElement, null), disclosureElement: _LZ6L3ECGcjs.defaultValue.call(void 0, syncState == null ? void 0 : syncState.disclosureElement, null) }, store); _5FQZLBJ7cjs.setup.call(void 0, disclosure, () => _5FQZLBJ7cjs.sync.call(void 0, disclosure, ["animated", "animating"], (state) => { if (state.animated) return; disclosure.setState("animating", false); })); _5FQZLBJ7cjs.setup.call(void 0, disclosure, () => _5FQZLBJ7cjs.subscribe.call(void 0, disclosure, ["open"], () => { if (!disclosure.getState().animated) return; disclosure.setState("animating", true); })); _5FQZLBJ7cjs.setup.call(void 0, disclosure, () => _5FQZLBJ7cjs.sync.call(void 0, disclosure, ["open", "animating"], (state) => { disclosure.setState("mounted", state.open || state.animating); })); return { ...disclosure, disclosure: props.disclosure, setOpen: (value) => disclosure.setState("open", value), show: () => disclosure.setState("open", true), hide: () => disclosure.setState("open", false), toggle: () => disclosure.setState("open", (open2) => !open2), stopAnimation: () => disclosure.setState("animating", false), setContentElement: (value) => disclosure.setState("contentElement", value), setDisclosureElement: (value) => disclosure.setState("disclosureElement", value) }; } // ../ariakit-react-components/dist/disclosure/disclosure-store.js function useDisclosureStoreProps(store, update, props) { _LZ6L3ECGcjs.useUpdateEffect.call(void 0, update, [props.store, props.disclosure]); _5FQZLBJ7cjs.useStoreProps.call(void 0, store, props, "open", "setOpen"); _5FQZLBJ7cjs.useStoreProps.call(void 0, store, props, "mounted", "setMounted"); _5FQZLBJ7cjs.useStoreProps.call(void 0, store, props, "animated"); return Object.assign(store, { disclosure: props.disclosure }); } function useDisclosureStore(props = {}) { const [store, update] = _5FQZLBJ7cjs.useStore.call(void 0, createDisclosureStore, props); return useDisclosureStoreProps(store, update, props); } exports.useDisclosureContext = useDisclosureContext; exports.useDisclosureProviderContext = useDisclosureProviderContext; exports.DisclosureContextProvider = DisclosureContextProvider; exports.useDialogContext = useDialogContext; exports.useDialogScopedContext = useDialogScopedContext; exports.useDialogProviderContext = useDialogProviderContext; exports.DialogContextProvider = DialogContextProvider; exports.DialogScopedContextProvider = DialogScopedContextProvider; exports.DialogHeadingContext = DialogHeadingContext; exports.DialogDescriptionContext = DialogDescriptionContext; exports.isHidden = isHidden; exports.useDisclosureContent = useDisclosureContent; exports.DisclosureContent = DisclosureContent; exports.createDisclosureStore = createDisclosureStore; exports.useDisclosureStoreProps = useDisclosureStoreProps; exports.useDisclosureStore = useDisclosureStore;