UNPKG

@carbon/react

Version:

React components for the Carbon Design System

64 lines (62 loc) 2.61 kB
/** * Copyright IBM Corp. 2016, 2026 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ const require_runtime = require("../../_virtual/_rolldown/runtime.js"); const require_usePresenceContext = require("../../internal/usePresenceContext.js"); const require_useComposedModalState = require("./useComposedModalState.js"); let react = require("react"); react = require_runtime.__toESM(react); let react_jsx_runtime = require("react/jsx-runtime"); //#region src/components/ComposedModal/ComposedModalPresence.tsx /** * Copyright IBM Corp. 2016, 2025 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ const ComposedModalPresence = ({ open, _presenceId: presenceId, _autoEnablePresence: autoEnablePresence = true, children }) => { const modalState = require_useComposedModalState.useComposedModalState(open); const [isOpen] = modalState; const [isPresent, context] = require_usePresenceContext.usePresenceContext(isOpen, presenceId); const presenceContextValue = (0, react.useMemo)(() => ({ modalState, autoEnablePresence, ...context }), [ modalState, autoEnablePresence, context ]); if (!isPresent) return null; return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ComposedModalPresenceContext, { value: presenceContextValue, children }); }; const ComposedModalPresenceContext = (0, react.createContext)(void 0); /** * Handles occurrences where only a single composed modal must consume a context. */ const useExclusiveComposedModalPresenceContext = (id) => { const ctx = (0, react.useContext)(ComposedModalPresenceContext); return ctx?.isPresenceExclusive(id) ? ctx : void 0; }; /** * Higher-order function that wraps a component with ComposedModalPresence */ const withComposedModalPresence = (Component) => { const WithComposedModalPresence = ({ open, ...componentProps }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ComposedModalPresence, { open, children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Component, { ...componentProps }) }); WithComposedModalPresence.displayName = `withComposedModalPresence(${Component.displayName || Component.name || "Component"})`; return WithComposedModalPresence; }; //#endregion exports.ComposedModalPresence = ComposedModalPresence; exports.ComposedModalPresenceContext = ComposedModalPresenceContext; exports.useExclusiveComposedModalPresenceContext = useExclusiveComposedModalPresenceContext; exports.withComposedModalPresence = withComposedModalPresence;