modalio 0.9.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters.ts","../src/core.ts","../src/types.ts","../src/api.ts","../src/context.tsx","../src/hooks.ts","../src/hoc.tsx","../src/modal-manager.ts"],"names":["createContext","useContext","jsx","useReducer","jsxs","useEffect","useRef","useCallback","useMemo","openModal"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n\tModalHandler,\n\tRadixDialogContentProps,\n\tRadixDialogProps,\n\tShadcnDialogProps,\n} from \"./types\";\n\n/**\n * Options for adapter behavior\n */\nexport interface AdapterOptions {\n\t/** Prevent closing via escape key or clicking outside */\n\tdisableClose?: boolean;\n}\n\n// ============================================\n// Radix UI adapters\n// ============================================\n\n/**\n * Adapter for Radix UI Dialog root component\n */\nexport const radixUiDialog = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): RadixDialogProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n/**\n * Adapter for Radix UI Dialog.Content component\n */\nexport const radixUiDialogContent = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): RadixDialogContentProps => ({\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n\tonEscapeKeyDown: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonPointerDownOutside: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n/**\n * Adapter for Radix UI AlertDialog root component\n */\nexport const radixUiAlertDialog = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): RadixDialogProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n/**\n * Adapter for Radix UI AlertDialog.Content component\n */\nexport const radixUiAlertDialogContent = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): RadixDialogContentProps => ({\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n\tonEscapeKeyDown: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonPointerDownOutside: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n// ============================================\n// Shadcn UI adapters\n// ============================================\n\n/**\n * Adapter for Shadcn UI Dialog\n */\nexport const shadcnUiDialog = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): ShadcnDialogProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonClose: () => {\n\t\tif (!options?.disableClose) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n});\n\n/**\n * Adapter for Shadcn UI DialogContent\n */\nexport const shadcnUiDialogContent = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): RadixDialogContentProps => ({\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n\tonEscapeKeyDown: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonPointerDownOutside: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n/**\n * Adapter for Shadcn UI AlertDialog\n */\nexport const shadcnUiAlertDialog = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): ShadcnDialogProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonClose: () => {\n\t\tif (!options?.disableClose) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n});\n\n/**\n * Adapter for Shadcn UI AlertDialogContent\n */\nexport const shadcnUiAlertDialogContent = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): RadixDialogContentProps => ({\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n\tonEscapeKeyDown: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonPointerDownOutside: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n/**\n * Adapter for Shadcn UI Sheet\n */\nexport const shadcnUiSheet = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): ShadcnDialogProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonClose: () => {\n\t\tif (!options?.disableClose) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n});\n\n/**\n * Adapter for Shadcn UI SheetContent\n */\nexport const shadcnUiSheetContent = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): RadixDialogContentProps => ({\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n\tonEscapeKeyDown: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonPointerDownOutside: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n/**\n * Adapter for Shadcn UI Popover\n */\nexport const shadcnUiPopover = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): { open: boolean; onOpenChange: (open: boolean) => void } => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t\tmodal.onAnimationEnd();\n\t\t}\n\t},\n});\n\n/**\n * Props returned by Shadcn UI Drawer adapters\n */\nexport interface ShadcnUiDrawerRootProps {\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tdismissible?: boolean;\n}\n\n/**\n * Props for Shadcn UI DrawerContent component\n */\nexport interface ShadcnUiDrawerContentProps {\n\tonAnimationEnd: () => void;\n}\n\n/**\n * Adapter for Shadcn UI Drawer\n */\nexport const shadcnUiDrawer = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): ShadcnUiDrawerRootProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tdismissible: !options?.disableClose,\n});\n\n/**\n * Adapter for Shadcn UI DrawerContent component\n */\nexport const shadcnUiDrawerContent = (\n\tmodal: ModalHandler,\n): ShadcnUiDrawerContentProps => ({\n\tonAnimationEnd: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n});\n\n// ============================================\n// Radix UI Sheet adapters\n// ============================================\n\n/**\n * Adapter for Radix UI Sheet root component\n */\nexport const radixUiSheet = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): { open: boolean; onOpenChange: (open: boolean) => void } => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n/**\n * Adapter for Radix UI Sheet.Content component\n */\nexport const radixUiSheetContent = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): RadixDialogContentProps => ({\n\tonAnimationEndCapture: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n\tonEscapeKeyDown: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tonPointerDownOutside: (e?: Event) => {\n\t\tif (options?.disableClose) {\n\t\t\te?.preventDefault();\n\t\t} else {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n// ============================================\n// Radix UI Popover adapter\n// ============================================\n\n/**\n * Adapter for Radix UI Popover\n */\nexport const radixUiPopover = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): { open: boolean; onOpenChange: (open: boolean) => void } => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t\tmodal.onAnimationEnd();\n\t\t}\n\t},\n});\n\n// ============================================\n// Base UI adapters (v1+)\n// ============================================\n\n/**\n * Props returned by Base UI dialog adapters\n */\nexport interface BaseUiDialogRootProps {\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tdismissible?: boolean;\n}\n\n/**\n * Props for Base UI Dialog.Portal component\n */\nexport interface BaseUiDialogPortalProps {\n\tkeepMounted?: boolean;\n}\n\n/**\n * Props for Base UI Dialog.Popup component\n */\nexport interface BaseUiDialogPopupProps {\n\tonAnimationEnd: () => void;\n}\n\n/**\n * Adapter for Base UI Dialog.Root component\n */\nexport const baseUiDialog = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): BaseUiDialogRootProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tdismissible: !options?.disableClose,\n});\n\n/**\n * Adapter for Base UI Dialog.Portal component\n */\nexport const baseUiDialogPortal = (\n\tmodal: ModalHandler,\n): BaseUiDialogPortalProps => ({\n\tkeepMounted: modal.keepMounted,\n});\n\n/**\n * Adapter for Base UI Dialog.Popup component\n */\nexport const baseUiDialogPopup = (\n\tmodal: ModalHandler,\n): BaseUiDialogPopupProps => ({\n\tonAnimationEnd: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n});\n\n/**\n * Adapter for Base UI AlertDialog root component\n */\nexport const baseUiAlertDialog = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): BaseUiDialogRootProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tdismissible: !options?.disableClose,\n});\n\n/**\n * Adapter for Base UI AlertDialog.Portal component\n */\nexport const baseUiAlertDialogPortal = (\n\tmodal: ModalHandler,\n): BaseUiDialogPortalProps => ({\n\tkeepMounted: modal.keepMounted,\n});\n\n/**\n * Adapter for Base UI AlertDialog.Popup component\n */\nexport const baseUiAlertDialogPopup = (\n\tmodal: ModalHandler,\n): BaseUiDialogPopupProps => ({\n\tonAnimationEnd: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n});\n\n/**\n * Props returned by Base UI popover adapters\n */\nexport interface BaseUiPopoverRootProps {\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n}\n\n/**\n * Props for Base UI Popover.Portal component\n */\nexport interface BaseUiPopoverPortalProps {\n\tkeepMounted?: boolean;\n}\n\n/**\n * Props for Base UI Popover.Popup component\n */\nexport interface BaseUiPopoverPopupProps {\n\tonAnimationEnd: () => void;\n}\n\n/**\n * Adapter for Base UI Popover.Root component\n */\nexport const baseUiPopover = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): BaseUiPopoverRootProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n});\n\n/**\n * Adapter for Base UI Popover.Portal component\n */\nexport const baseUiPopoverPortal = (\n\tmodal: ModalHandler,\n): BaseUiPopoverPortalProps => ({\n\tkeepMounted: modal.keepMounted,\n});\n\n/**\n * Adapter for Base UI Popover.Popup component\n */\nexport const baseUiPopoverPopup = (\n\tmodal: ModalHandler,\n): BaseUiPopoverPopupProps => ({\n\tonAnimationEnd: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n});\n\n/**\n * Adapter for Base UI Sheet root component\n */\nexport const baseUiSheet = (\n\tmodal: ModalHandler,\n\toptions?: AdapterOptions,\n): BaseUiDialogRootProps => ({\n\topen: modal.isOpen,\n\tonOpenChange: (open: boolean) => {\n\t\tif (!(open || options?.disableClose)) {\n\t\t\tmodal.dismiss();\n\t\t}\n\t},\n\tdismissible: !options?.disableClose,\n});\n\n/**\n * Adapter for Base UI Sheet.Portal component\n */\nexport const baseUiSheetPortal = (\n\tmodal: ModalHandler,\n): BaseUiDialogPortalProps => ({\n\tkeepMounted: modal.keepMounted,\n});\n\n/**\n * Adapter for Base UI Sheet.Popup component\n */\nexport const baseUiSheetPopup = (\n\tmodal: ModalHandler,\n): BaseUiDialogPopupProps => ({\n\tonAnimationEnd: () => {\n\t\tmodal.onAnimationEnd();\n\t},\n});\n","import type { ComponentType, Dispatch } from \"react\";\nimport type {\n\tDeferredPromise,\n\tModalAction,\n\tModalHocProps,\n\tModalRegistryEntry,\n\tModalStore,\n} from \"./types\";\n\n/** Symbol for storing modal IDs on component functions */\nconst symModalId: unique symbol = Symbol(\"ModalManagerId\");\n\n/** Type for components with attached modal ID */\ntype ComponentWithModalId = ComponentType<Record<string, unknown>> & {\n\t[symModalId]?: string;\n};\n\n// Initial empty state\nexport const initialState: ModalStore = {};\n\n// Modal registry - maps IDs to component definitions\nexport const MODAL_REGISTRY: Record<string, ModalRegistryEntry> = {};\n\n// Track already mounted modals for delayed visibility\nexport const ALREADY_MOUNTED: Record<string, boolean> = {};\n\n/** Promise callbacks for modal open/close resolution */\nexport const modalCallbacks: Record<string, DeferredPromise<unknown>> = {};\nexport const hideModalCallbacks: Record<string, DeferredPromise<unknown>> = {};\n\n/**\n * Cleanup all callbacks for a modal (prevents memory leaks)\n */\nexport const cleanupCallbacks = (modalId: string): void => {\n\tdelete modalCallbacks[modalId];\n\tdelete hideModalCallbacks[modalId];\n};\n\n/**\n * Cleanup all callbacks (useful for testing or full reset)\n */\nexport const cleanupAllCallbacks = (): void => {\n\tfor (const key of Object.keys(modalCallbacks)) {\n\t\tdelete modalCallbacks[key];\n\t}\n\tfor (const key of Object.keys(hideModalCallbacks)) {\n\t\tdelete hideModalCallbacks[key];\n\t}\n};\n\n// UID counter for generating unique IDs\nlet uidSeed = 0;\n\n/**\n * Reset the UID seed (useful for SSR to prevent hydration mismatches)\n * Call this on the server before rendering to ensure consistent IDs\n * @internal\n */\nexport const resetUidSeed = (): void => {\n\tuidSeed = 0;\n};\n\n// Note: If you need external store subscriptions, implement useSyncExternalStore support here\n\n// Global dispatch function - set by Provider\nlet dispatchFn: Dispatch<ModalAction> = () => {\n\tthrow new Error(\n\t\t\"No dispatch method detected. Did you wrap your app with ModalManager.Provider?\",\n\t);\n};\n\n/**\n * Generate a unique modal ID\n */\nexport const getUid = (): string => `_modal_${uidSeed++}`;\n\n/**\n * Get the modal ID from a string or component\n */\nexport const getModalId = (\n\tmodal: string | ComponentType<Record<string, unknown>>,\n): string => {\n\tif (typeof modal === \"string\") {\n\t\treturn modal;\n\t}\n\tconst modalWithId = modal as ComponentWithModalId;\n\tif (!modalWithId[symModalId]) {\n\t\tmodalWithId[symModalId] = getUid();\n\t}\n\treturn modalWithId[symModalId];\n};\n\n/**\n * Get a registered modal component by ID\n */\nexport const getModal = (\n\tmodalId: string,\n): ComponentType<ModalHocProps & Record<string, unknown>> | undefined => {\n\treturn MODAL_REGISTRY[modalId]?.comp;\n};\n\n/**\n * Set the global dispatch function\n */\nexport const setDispatch = (fn: Dispatch<ModalAction>): void => {\n\tdispatchFn = fn;\n};\n\n/**\n * Get the current dispatch function\n */\nexport const getDispatch = (): Dispatch<ModalAction> => dispatchFn;\n\n/**\n * Action creators\n */\nexport const actions = {\n\topen: (modalId: string, data?: Record<string, unknown>): ModalAction => ({\n\t\ttype: \"modalio/show\",\n\t\tpayload: { modalId, data },\n\t}),\n\n\tclose: (modalId: string): ModalAction => ({\n\t\ttype: \"modalio/hide\",\n\t\tpayload: { modalId },\n\t}),\n\n\tremove: (modalId: string): ModalAction => ({\n\t\ttype: \"modalio/remove\",\n\t\tpayload: { modalId },\n\t}),\n\n\tsetFlags: (modalId: string, flags: Record<string, unknown>): ModalAction => ({\n\t\ttype: \"modalio/set-flags\",\n\t\tpayload: { modalId, flags },\n\t}),\n};\n\n/**\n * Reducer for modal state management\n */\nexport const reducer = (state: ModalStore, action: ModalAction): ModalStore => {\n\tswitch (action.type) {\n\t\tcase \"modalio/show\": {\n\t\t\tconst { modalId, data } = action.payload;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[modalId]: {\n\t\t\t\t\t...state[modalId],\n\t\t\t\t\tmodalId,\n\t\t\t\t\tdata,\n\t\t\t\t\t// If already mounted, show immediately; otherwise delay\n\t\t\t\t\tisOpen: !!ALREADY_MOUNTED[modalId],\n\t\t\t\t\tdelayOpen: !ALREADY_MOUNTED[modalId],\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tcase \"modalio/hide\": {\n\t\t\tconst { modalId } = action.payload;\n\t\t\tconst modalState = state[modalId];\n\t\t\tif (!modalState) {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[modalId]: {\n\t\t\t\t\t...modalState,\n\t\t\t\t\tisOpen: false,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tcase \"modalio/remove\": {\n\t\t\tconst { modalId } = action.payload;\n\t\t\tconst newState = { ...state };\n\t\t\tdelete newState[modalId];\n\t\t\treturn newState;\n\t\t}\n\n\t\tcase \"modalio/set-flags\": {\n\t\t\tconst { modalId, flags } = action.payload;\n\t\t\tconst existingState = state[modalId];\n\t\t\t// Only set flags if the modal exists\n\t\t\tif (!existingState) {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[modalId]: {\n\t\t\t\t\t...existingState,\n\t\t\t\t\t...flags,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\n/**\n * Register a modal component\n */\nexport const register = (\n\tid: string,\n\t// biome-ignore lint/suspicious/noExplicitAny: component props vary\n\tcomp: ComponentType<any>,\n\tprops?: Record<string, unknown>,\n): void => {\n\tif (MODAL_REGISTRY[id]) {\n\t\tMODAL_REGISTRY[id].props = props;\n\t} else {\n\t\tMODAL_REGISTRY[id] = {\n\t\t\tcomp: comp as ComponentType<ModalHocProps & Record<string, unknown>>,\n\t\t\tprops,\n\t\t};\n\t}\n};\n\n/**\n * Unregister a modal component\n */\nexport const unregister = (id: string): void => {\n\tdelete MODAL_REGISTRY[id];\n};\n","import type {\n\tComponentType,\n\tDispatch,\n\tJSXElementConstructor,\n\tReactNode,\n} from \"react\";\n\n// =============================================================================\n// Internal Types\n// =============================================================================\n\n/** Internal key for modal configuration stored in data */\nexport const MODAL_CONFIG_KEY = \"__modalConfig\" as const;\n\n/** Internal modal configuration shape */\nexport interface InternalModalConfig {\n\tdisableClose?: boolean;\n\tkeepMounted?: boolean;\n}\n\n// =============================================================================\n// State Types\n// =============================================================================\n\n/**\n * State for a single modal instance\n */\nexport interface ModalState {\n\tmodalId: string;\n\tdata?: Record<string, unknown>;\n\tisOpen?: boolean;\n\tdelayOpen?: boolean;\n\tkeepMounted?: boolean;\n}\n\n/**\n * Global modal store - maps modal IDs to their state\n */\nexport interface ModalStore {\n\t[key: string]: ModalState | undefined;\n}\n\n/**\n * Modal lifecycle state\n */\nexport type ModalLifecycleState = \"open\" | \"closing\" | \"closed\";\n\n// =============================================================================\n// Action Types (for Redux/external state management)\n// =============================================================================\n\nexport type ModalActionType = \"show\" | \"hide\" | \"remove\" | \"set-flags\";\n\nexport interface ModalAction {\n\ttype: `modalio/${ModalActionType}`;\n\tpayload: {\n\t\tmodalId: string;\n\t\tdata?: Record<string, unknown>;\n\t\tflags?: Record<string, unknown>;\n\t};\n}\n\n// =============================================================================\n// Promise/Callback Types\n// =============================================================================\n\n/**\n * Deferred promise with exposed resolve/reject handlers\n */\nexport interface DeferredPromise<T = unknown> {\n\tresolve: (value: T) => void;\n\treject: (reason: unknown) => void;\n\tpromise: Promise<T>;\n}\n\n// =============================================================================\n// Modal Handler Types (returned by useModal)\n// =============================================================================\n\n/**\n * Read-only state of a modal instance\n */\nexport interface ModalReadState<TData = Record<string, unknown>> {\n\t/** The modal's unique identifier */\n\treadonly modalId: string;\n\t/** Data passed to the modal via open() */\n\treadonly data: TData | undefined;\n\t/** Whether the modal is currently open */\n\treadonly isOpen: boolean;\n\t/** Whether to keep the modal mounted after closing */\n\treadonly keepMounted: boolean;\n}\n\n/**\n * Methods for controlling a modal\n */\nexport interface ModalControls<TData = Record<string, unknown>> {\n\t/** Open the modal with optional data */\n\topen: (data?: TData) => Promise<unknown>;\n\t/** Close the modal and resolve with a result */\n\tclose: (result?: unknown) => void;\n\t/** Dismiss the modal (close without result, resolves undefined) */\n\tdismiss: () => void;\n\t/** Remove the modal from the DOM immediately */\n\tremove: () => void;\n}\n\n/**\n * Internal methods for animation lifecycle (used by adapters)\n * @internal\n */\nexport interface ModalAnimationHandlers {\n\t/** Called when closing animation completes */\n\tonAnimationEnd: () => void;\n}\n\n/**\n * Complete modal handler returned by useModal hook\n * Combines state, controls, and animation handlers\n */\nexport interface ModalHandler<TData = Record<string, unknown>>\n\textends ModalReadState<TData>,\n\t\tModalControls<TData>,\n\t\tModalAnimationHandlers {}\n\n// =============================================================================\n// HOC Types\n// =============================================================================\n\n/**\n * Props injected into HOC-wrapped modal components\n * Note: Uses `modalId` instead of `id` to avoid conflicts with common props\n */\nexport interface ModalHocProps {\n\tmodalId: string;\n\tdefaultOpen?: boolean;\n\tkeepMounted?: boolean;\n}\n\n/**\n * Registry entry for a modal component\n */\nexport interface ModalRegistryEntry<\n\tTProps extends Record<string, unknown> = Record<string, unknown>,\n> {\n\tcomp: ComponentType<ModalHocProps & TProps>;\n\tprops?: TProps;\n}\n\n/**\n * Extract props from a component type, excluding HOC props\n */\nexport type ModalProps<T> =\n\tT extends JSXElementConstructor<infer P>\n\t\t? Omit<P, keyof ModalHocProps>\n\t\t: Record<string, unknown>;\n\n// =============================================================================\n// Provider Types\n// =============================================================================\n\n/**\n * Props for the ModalProvider component\n */\nexport interface ModalProviderProps {\n\tchildren?: ReactNode;\n\t/** Optional external dispatch for state management integration */\n\tdispatch?: Dispatch<ModalAction>;\n\t/** Optional external modal store */\n\tmodals?: ModalStore;\n}\n\n// =============================================================================\n// Modal Reference Type (returned by open())\n// =============================================================================\n\n/**\n * Modal reference for programmatic control\n * Provides lifecycle promises and control methods\n */\nexport interface ModalRef<TResult = unknown, TData = unknown> {\n\t/** Unique identifier for this modal instance */\n\treadonly modalId: string;\n\t/** Data passed to the modal */\n\treadonly data: TData | undefined;\n\t/** Whether the user is allowed to close the modal (via escape/outside click) */\n\tdisableClose: boolean;\n\t/** Close the modal with an optional result */\n\tclose: (result?: TResult) => void;\n\t/** Promise that resolves when the modal opening animation completes */\n\tafterOpened: () => Promise<void>;\n\t/** Promise that resolves with the result when the modal closing animation completes */\n\tafterClosed: () => Promise<TResult | undefined>;\n\t/** Promise that resolves when the modal starts closing (before animation) */\n\tbeforeClosed: () => Promise<TResult | undefined>;\n\t/** Update the data passed to the modal */\n\tupdateData: (data: Partial<TData>) => void;\n\t/** Get the current lifecycle state of the modal */\n\tgetState: () => ModalLifecycleState;\n}\n\n/**\n * Configuration for opening a modal\n */\nexport interface ModalConfig<TData = unknown> {\n\t/** Data to pass to the modal component */\n\treadonly data?: TData;\n\t/** Keep the modal mounted in DOM after closing (for animation performance) */\n\treadonly keepMounted?: boolean;\n\t/** Custom ID for the modal (auto-generated if not provided) */\n\treadonly modalId?: string;\n\t/** Whether clicking outside/escape closes the modal */\n\treadonly disableClose?: boolean;\n}\n\n// =============================================================================\n// Adapter Types (for UI library integration)\n// =============================================================================\n\n/**\n * Props for Radix UI Dialog root component\n */\nexport interface RadixDialogProps {\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n}\n\n/**\n * Props for Radix UI Dialog content component\n */\nexport interface RadixDialogContentProps {\n\tonAnimationEndCapture: () => void;\n\tonEscapeKeyDown: (e?: Event) => void;\n\tonPointerDownOutside: (e?: Event) => void;\n}\n\n/**\n * Combined props for Shadcn Dialog\n */\nexport interface ShadcnDialogProps extends RadixDialogProps {\n\tonClose: () => void;\n\tonAnimationEndCapture: () => void;\n}\n","import {\n\tactions,\n\tgetDispatch,\n\tgetModalId,\n\thideModalCallbacks,\n\tMODAL_REGISTRY,\n\tmodalCallbacks,\n\tregister,\n} from \"./core\";\nimport type {\n\tDeferredPromise,\n\tModalConfig,\n\tModalHocProps,\n\tModalLifecycleState,\n\tModalRef,\n} from \"./types\";\nimport { type InternalModalConfig, MODAL_CONFIG_KEY } from \"./types\";\n\n/** Delay before cleaning up closed modal state (allows getState() calls) */\nconst CLEANUP_DELAY_MS = 5000;\n\n/** Creates a deferred promise with exposed resolve/reject handlers */\nfunction createDeferredPromise<T = unknown>(): DeferredPromise<T> {\n\tlet resolve!: (value: T) => void;\n\tlet reject!: (reason: unknown) => void;\n\tconst promise = new Promise<T>((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\treturn { resolve, reject, promise };\n}\n\n// Store for opened promises (afterOpened callbacks)\nconst openedCallbacks: Record<\n\tstring,\n\t{ resolve: () => void; promise: Promise<void> }\n> = {};\n\n// Store for beforeClosed promises\nconst beforeClosedCallbacks: Record<\n\tstring,\n\t{ resolve: (result: unknown) => void; promise: Promise<unknown> }\n> = {};\n\n// Track modal lifecycle states\nconst modalStates: Record<string, ModalLifecycleState> = {};\n\n// Store promises separately so they persist after close() deletes callbacks\n// This ensures afterClosed() returns the correct promise even after close() is called\nconst closedPromises: Record<string, Promise<unknown>> = {};\n\n/**\n * Clean up all internal state for a modal to prevent memory leaks\n */\nexport const cleanupModal = (modalId: string): void => {\n\tdelete modalCallbacks[modalId];\n\tdelete hideModalCallbacks[modalId];\n\tdelete openedCallbacks[modalId];\n\tdelete beforeClosedCallbacks[modalId];\n\tdelete modalStates[modalId];\n\tdelete closedPromises[modalId];\n};\n\n/**\n * Clean up all modal state (useful for testing)\n */\nexport const cleanupAllModals = (): void => {\n\tconst allIds = new Set([\n\t\t...Object.keys(modalCallbacks),\n\t\t...Object.keys(hideModalCallbacks),\n\t\t...Object.keys(openedCallbacks),\n\t\t...Object.keys(beforeClosedCallbacks),\n\t\t...Object.keys(modalStates),\n\t\t...Object.keys(closedPromises),\n\t]);\n\tfor (const id of allIds) {\n\t\tcleanupModal(id);\n\t}\n};\n\n/**\n * Close a modal and return a promise that resolves when the animation completes\n *\n * @example\n * ```tsx\n * await closeModal(MyModal);\n * await closeModal('my-modal');\n * ```\n */\nexport function closeModal<TResult = unknown>(\n\t// biome-ignore lint/suspicious/noExplicitAny: implementation signature needs flexibility\n\tmodal: string | React.ComponentType<any>,\n): Promise<TResult>;\n\nexport function closeModal(\n\t// biome-ignore lint/suspicious/noExplicitAny: implementation signature needs flexibility\n\tmodal: string | React.ComponentType<any>,\n): Promise<unknown> {\n\tconst modalId = getModalId(modal);\n\n\t// Update state\n\tmodalStates[modalId] = \"closing\";\n\n\t// Dispatch close action\n\tgetDispatch()(actions.close(modalId));\n\n\t// Resolve open promise with undefined when closing directly\n\tif (modalCallbacks[modalId]) {\n\t\tmodalCallbacks[modalId].resolve(undefined);\n\t\tdelete modalCallbacks[modalId];\n\t}\n\n\t// Create close promise if it doesn't exist\n\tif (!hideModalCallbacks[modalId]) {\n\t\thideModalCallbacks[modalId] = createDeferredPromise();\n\t}\n\n\treturn hideModalCallbacks[modalId].promise;\n}\n\n/**\n * Remove a modal from the DOM completely\n *\n * @example\n * ```tsx\n * removeModal(MyModal);\n * removeModal('my-modal');\n * ```\n */\nexport const removeModal = (\n\tmodal: string | React.ComponentType<Record<string, unknown>>,\n): void => {\n\tconst modalId = getModalId(modal);\n\n\t// Dispatch remove action\n\tgetDispatch()(actions.remove(modalId));\n\n\t// Resolve any pending promises before cleanup\n\tmodalCallbacks[modalId]?.resolve(undefined);\n\thideModalCallbacks[modalId]?.resolve(undefined);\n\tbeforeClosedCallbacks[modalId]?.resolve(undefined);\n\topenedCallbacks[modalId]?.resolve();\n\n\t// Clean up all callbacks to prevent memory leaks\n\tcleanupModal(modalId);\n};\n\n/**\n * Set flags on a modal (internal use)\n */\nexport const setFlags = (\n\tmodalId: string,\n\tflags: Record<string, unknown>,\n): void => {\n\tgetDispatch()(actions.setFlags(modalId, flags));\n};\n\n/**\n * Open a modal and return a ModalRef for controlling it\n *\n * @example\n * ```tsx\n * // Open a modal with typed data\n * const modalRef = openModal<{ confirmed: boolean }, { userId: string }>(\n * ConfirmModal,\n * { data: { userId: '123' } }\n * );\n *\n * // Wait for it to close\n * const result = await modalRef.afterClosed();\n * if (result?.confirmed) {\n * // User confirmed\n * }\n *\n * // Or close it programmatically\n * modalRef.close({ confirmed: false });\n *\n * // Check lifecycle state\n * if (modalRef.getState() === 'open') {\n * modalRef.close();\n * }\n * ```\n */\nexport function openModal<\n\tTResult = unknown,\n\tTData = Record<string, unknown>,\n\tTProps extends Record<string, unknown> = Record<string, unknown>,\n>(\n\tmodal: React.ComponentType<TProps & ModalHocProps>,\n\tconfig?: ModalConfig<TData>,\n): ModalRef<TResult, TData>;\n\nexport function openModal<TResult = unknown, TData = Record<string, unknown>>(\n\tmodal: string,\n\tconfig?: ModalConfig<TData>,\n): ModalRef<TResult, TData>;\n\nexport function openModal<TResult = unknown, TData = Record<string, unknown>>(\n\tmodal: React.ComponentType<Record<string, unknown>> | string,\n\tconfig: ModalConfig<TData> = {},\n): ModalRef<TResult, TData> {\n\tconst modalId = config.modalId ?? getModalId(modal);\n\n\t// Auto-register if it's a component and not already registered\n\tif (typeof modal !== \"string\" && !MODAL_REGISTRY[modalId]) {\n\t\tregister(modalId, modal);\n\t}\n\n\t// Track disableClose state for the ref\n\tlet disableClose = config.disableClose ?? false;\n\n\t// Prepare data with internal config\n\tconst modalConfig: InternalModalConfig = {\n\t\tdisableClose,\n\t\tkeepMounted: config.keepMounted,\n\t};\n\tconst data: Record<string, unknown> = {\n\t\t...(config.data as Record<string, unknown>),\n\t\t[MODAL_CONFIG_KEY]: modalConfig,\n\t};\n\n\t// Set initial state\n\tmodalStates[modalId] = \"open\";\n\n\t// Dispatch open action\n\tgetDispatch()(actions.open(modalId, data));\n\n\t// Set keepMounted flag if specified\n\tif (config.keepMounted) {\n\t\tgetDispatch()(actions.setFlags(modalId, { keepMounted: true }));\n\t}\n\n\t// Create show promise\n\tconst mainCallbacks = createDeferredPromise();\n\tmodalCallbacks[modalId] = mainCallbacks;\n\n\t// Store promise reference that persists after close() for afterClosed()\n\tclosedPromises[modalId] = mainCallbacks.promise;\n\n\t// Create opened promise\n\tconst openedDeferred = createDeferredPromise<void>();\n\topenedCallbacks[modalId] = {\n\t\tresolve: openedDeferred.resolve,\n\t\tpromise: openedDeferred.promise,\n\t};\n\n\t// Create beforeClosed promise\n\tconst beforeClosedDeferred = createDeferredPromise();\n\tbeforeClosedCallbacks[modalId] = {\n\t\tresolve: beforeClosedDeferred.resolve,\n\t\tpromise: beforeClosedDeferred.promise,\n\t};\n\n\t// Return the ModalRef\n\tconst modalRef: ModalRef<TResult, TData> = {\n\t\tmodalId,\n\t\tdata: config.data,\n\n\t\tget disableClose() {\n\t\t\treturn disableClose;\n\t\t},\n\t\tset disableClose(value: boolean) {\n\t\t\tdisableClose = value;\n\t\t\t// Update the modal config\n\t\t\tconst currentConfig =\n\t\t\t\t(data[MODAL_CONFIG_KEY] as InternalModalConfig) ?? {};\n\t\t\tconst updatedData = {\n\t\t\t\t...data,\n\t\t\t\t[MODAL_CONFIG_KEY]: {\n\t\t\t\t\t...currentConfig,\n\t\t\t\t\tdisableClose: value,\n\t\t\t\t},\n\t\t\t};\n\t\t\tgetDispatch()(actions.setFlags(modalId, { data: updatedData }));\n\t\t},\n\n\t\tclose: (result?: TResult) => {\n\t\t\tif (modalStates[modalId] === \"closed\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Trigger beforeClosed\n\t\t\tmodalStates[modalId] = \"closing\";\n\t\t\tbeforeClosedCallbacks[modalId]?.resolve(result);\n\t\t\tdelete beforeClosedCallbacks[modalId];\n\n\t\t\t// Resolve the main promise\n\t\t\tmodalCallbacks[modalId]?.resolve(result);\n\t\t\tdelete modalCallbacks[modalId];\n\n\t\t\tcloseModal(modalId);\n\t\t},\n\n\t\tafterOpened: () => {\n\t\t\treturn openedCallbacks[modalId]?.promise ?? Promise.resolve();\n\t\t},\n\n\t\tafterClosed: () => {\n\t\t\t// Return stored promise that persists even after close() is called\n\t\t\treturn (closedPromises[modalId] ?? Promise.resolve(undefined)) as Promise<\n\t\t\t\tTResult | undefined\n\t\t\t>;\n\t\t},\n\n\t\tbeforeClosed: () => {\n\t\t\treturn (beforeClosedCallbacks[modalId]?.promise ??\n\t\t\t\tPromise.resolve(undefined)) as Promise<TResult | undefined>;\n\t\t},\n\n\t\tupdateData: (newData: Partial<TData>) => {\n\t\t\tObject.assign(data, newData as Record<string, unknown>);\n\t\t\tgetDispatch()(actions.open(modalId, data));\n\t\t},\n\n\t\tgetState: () => {\n\t\t\treturn modalStates[modalId] ?? \"closed\";\n\t\t},\n\t};\n\n\treturn modalRef;\n}\n\n/**\n * Mark a modal as fully closed (called after animation completes)\n * @internal\n */\nexport const markClosed = (modalId: string): void => {\n\tmodalStates[modalId] = \"closed\";\n\t// Clean up state after a delay to allow getState() calls\n\tsetTimeout(() => {\n\t\tif (modalStates[modalId] === \"closed\") {\n\t\t\tdelete modalStates[modalId];\n\t\t\tdelete closedPromises[modalId];\n\t\t}\n\t}, CLEANUP_DELAY_MS);\n};\n\n/**\n * Get all currently open modal IDs\n *\n * @example\n * ```tsx\n * const openModals = ModalManager.getOpenModals();\n * console.log(`${openModals.length} modals are open`);\n * ```\n */\nexport const getOpenModals = (): string[] => {\n\treturn Object.entries(modalStates)\n\t\t.filter(([_, state]) => state === \"open\" || state === \"closing\")\n\t\t.map(([id]) => id);\n};\n\n/**\n * Close all open modals\n * Useful for navigation, logout, or error handling scenarios\n * Returns a promise that resolves when all modals are hidden\n *\n * @example\n * ```tsx\n * // Close all modals when navigating away\n * useEffect(() => {\n * return () => {\n * closeAllModals();\n * };\n * }, []);\n *\n * // Close all modals on logout\n * const handleLogout = async () => {\n * await closeAllModals();\n * logout();\n * };\n * ```\n */\nexport const closeAllModals = async (): Promise<void> => {\n\tconst openModals = getOpenModals();\n\n\t// Collect all close promises to await them\n\tconst closePromises: Promise<unknown>[] = [];\n\n\tfor (const modalId of openModals) {\n\t\t// Trigger beforeClosed\n\t\tmodalStates[modalId] = \"closing\";\n\t\tbeforeClosedCallbacks[modalId]?.resolve(undefined);\n\t\tdelete beforeClosedCallbacks[modalId];\n\n\t\t// Resolve the main promise with undefined\n\t\tmodalCallbacks[modalId]?.resolve(undefined);\n\t\tdelete modalCallbacks[modalId];\n\n\t\t// Close the modal and collect the promise\n\t\tclosePromises.push(closeModal(modalId));\n\t}\n\n\t// Wait for all close animations to complete\n\tawait Promise.all(closePromises);\n};\n\n/**\n * Check if any modals are currently open\n *\n * @example\n * ```tsx\n * if (ModalManager.hasOpenModals()) {\n * // Prevent navigation or show warning\n * }\n * ```\n */\nexport const hasOpenModals = (): boolean => {\n\treturn getOpenModals().length > 0;\n};\n\n/**\n * Notify that a modal has been opened (called internally after mount/animation)\n */\nexport const notifyOpened = (modalId: string): void => {\n\topenedCallbacks[modalId]?.resolve();\n\tdelete openedCallbacks[modalId];\n};\n","import {\n\ttype ComponentType,\n\tcreateContext,\n\ttype ReactNode,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseReducer,\n} from \"react\";\nimport { closeModal, openModal } from \"./api\";\nimport {\n\tALREADY_MOUNTED,\n\tgetUid,\n\tinitialState,\n\tMODAL_REGISTRY,\n\treducer,\n\tregister,\n\tsetDispatch,\n\tunregister,\n} from \"./core\";\nimport type { ModalProviderProps, ModalStore } from \"./types\";\n\n/**\n * Context for the modal store\n */\nexport const ModalContext = createContext<ModalStore>(initialState);\n\n/**\n * Context for the current modal ID (used in HOC-wrapped components)\n */\nexport const ModalIdContext = createContext<string | null>(null);\n\n/**\n * Component that renders all currently visible modals from the registry\n */\nfunction ModalPlaceholder(): ReactNode {\n\tconst modals = useContext(ModalContext);\n\tconst visibleModalIds = Object.keys(modals).filter(\n\t\t(id) => modals[id] !== undefined,\n\t);\n\n\t// Build render list and warn about unregistered modals in single pass\n\tconst toRender: Array<{\n\t\tid: string;\n\t\tcomp: (typeof MODAL_REGISTRY)[string][\"comp\"];\n\t\tprops: (typeof MODAL_REGISTRY)[string][\"props\"];\n\t}> = [];\n\n\tfor (const id of visibleModalIds) {\n\t\tconst entry = MODAL_REGISTRY[id];\n\t\tif (entry) {\n\t\t\ttoRender.push({ id, comp: entry.comp, props: entry.props });\n\t\t} else if (!ALREADY_MOUNTED[id]) {\n\t\t\tconsole.warn(\n\t\t\t\t`[ModalManager] No modal found for id: ${id}. ` +\n\t\t\t\t\t\"Please check if it is registered or declared via JSX.\",\n\t\t\t);\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{toRender.map(({ id, comp: Comp, props }) => (\n\t\t\t\t<Comp key={id} modalId={id} {...props} />\n\t\t\t))}\n\t\t</>\n\t);\n}\n\n/**\n * Internal provider that creates its own reducer\n */\nfunction InnerContextProvider({\n\tchildren,\n}: {\n\tchildren: ReactNode;\n}): ReactNode {\n\tconst [modals, dispatch] = useReducer(reducer, initialState);\n\tsetDispatch(dispatch);\n\n\treturn (\n\t\t<ModalContext.Provider value={modals}>\n\t\t\t{children}\n\t\t\t<ModalPlaceholder />\n\t\t</ModalContext.Provider>\n\t);\n}\n\n/**\n * Modal Provider - wrap your app with this to enable modal management\n *\n * @example\n * ```tsx\n * // Basic usage\n * <ModalProvider>\n * <App />\n * </ModalProvider>\n *\n * // With external state management (Redux, etc.)\n * <ModalProvider dispatch={dispatch} modals={modals}>\n * <App />\n * </ModalProvider>\n * ```\n */\nexport function ModalProvider({\n\tchildren,\n\tdispatch: givenDispatch,\n\tmodals: givenModals,\n}: ModalProviderProps): ReactNode {\n\t// If external state management is provided, use it\n\tif (givenDispatch && givenModals) {\n\t\tsetDispatch(givenDispatch);\n\t\treturn (\n\t\t\t<ModalContext.Provider value={givenModals}>\n\t\t\t\t{children}\n\t\t\t\t<ModalPlaceholder />\n\t\t\t</ModalContext.Provider>\n\t\t);\n\t}\n\n\t// Otherwise, use internal state management\n\treturn <InnerContextProvider>{children}</InnerContextProvider>;\n}\n\n/**\n * Declarative modal definition component\n *\n * @example\n * ```tsx\n * <ModalDef id=\"my-modal\" component={MyModal} />\n * ```\n */\nexport function ModalDef({\n\tid,\n\tcomponent,\n}: {\n\tid: string;\n\t// biome-ignore lint/suspicious/noExplicitAny: component props vary\n\tcomponent: ComponentType<any>;\n}): ReactNode {\n\tuseEffect(() => {\n\t\tregister(id, component);\n\t\treturn () => {\n\t\t\tunregister(id);\n\t\t};\n\t}, [id, component]);\n\n\treturn null;\n}\n\n/**\n * Imperative modal holder - useful for controlled scenarios\n *\n * @example\n * ```tsx\n * const handler = useRef<{ open?: Function; close?: Function }>({});\n *\n * <ModalHolder modal={MyModal} handler={handler.current} />\n *\n * // Later:\n * handler.current.open?.({ title: 'Hello' });\n * ```\n */\nexport function ModalHolder({\n\tmodal,\n\thandler,\n\t...restProps\n}: {\n\t// biome-ignore lint/suspicious/noExplicitAny: component props vary\n\tmodal: string | ComponentType<any>;\n\thandler: {\n\t\topen?: (data?: Record<string, unknown>) => Promise<unknown>;\n\t\tclose?: () => Promise<unknown>;\n\t};\n\t[key: string]: unknown;\n}): ReactNode {\n\tconst mid = useMemo(() => getUid(), []);\n\n\t// biome-ignore lint/suspicious/noExplicitAny: component props vary\n\tconst ModalComp: ComponentType<any> | undefined =\n\t\ttypeof modal === \"string\" ? MODAL_REGISTRY[modal]?.comp : modal;\n\n\tif (!handler) {\n\t\tthrow new Error(\"[ModalManager] No handler found in ModalHolder.\");\n\t}\n\n\tif (!ModalComp) {\n\t\tthrow new Error(\n\t\t\t`[ModalManager] No modal found for id: ${String(modal)} in ModalHolder.`,\n\t\t);\n\t}\n\n\t// Attach open/close methods to handler after mount\n\tuseEffect(() => {\n\t\thandler.open = (data?: Record<string, unknown>) => {\n\t\t\tconst ref = openModal(mid, { data });\n\t\t\treturn ref.afterClosed();\n\t\t};\n\n\t\thandler.close = () => {\n\t\t\treturn closeModal(mid);\n\t\t};\n\t}, [mid, handler]);\n\n\treturn <ModalComp modalId={mid} {...restProps} />;\n}\n","import { useCallback, useContext, useEffect, useMemo, useRef } from \"react\";\nimport {\n\tcloseModal,\n\tmarkClosed,\n\tnotifyOpened,\n\topenModal,\n\tremoveModal,\n} from \"./api\";\nimport { ModalContext, ModalIdContext } from \"./context\";\nimport {\n\tgetModalId,\n\thideModalCallbacks,\n\tMODAL_REGISTRY,\n\tmodalCallbacks,\n\tregister,\n} from \"./core\";\nimport type { ModalHandler, ModalHocProps, ModalProps } from \"./types\";\nimport { type InternalModalConfig, MODAL_CONFIG_KEY } from \"./types\";\n\n/**\n * Hook to control a modal from within the modal component or from anywhere.\n * Returns an enhanced handler with state and control methods.\n *\n * @example\n * ```tsx\n * // Inside a modal component (uses context)\n * const modal = useModal();\n *\n * return (\n * <Dialog open={modal.open} onOpenChange={(open) => !open && modal.dismiss()}>\n * <DialogContent onAnimationEnd={modal.onAnimationEnd}>\n * <Button onClick={() => modal.close(result)}>Save</Button>\n * <Button onClick={modal.dismiss}>Cancel</Button>\n * </DialogContent>\n * </Dialog>\n * );\n *\n * // With a specific modal component\n * const modal = useModal(MyModal);\n * modal.open({ userId: '123' });\n *\n * // With a string ID\n * const modal = useModal('my-modal');\n * ```\n */\n\nexport function useModal(\n\tmodal?: string,\n\tdata?: Record<string, unknown>,\n): ModalHandler;\n\nexport function useModal<\n\tTProps extends Record<string, unknown>,\n\tP extends Partial<ModalProps<React.ComponentType<TProps & ModalHocProps>>>,\n>(\n\tmodal: React.ComponentType<TProps & ModalHocProps>,\n\tdata?: P,\n): ModalHandler<TProps>;\n\nexport function useModal(\n\t// biome-ignore lint/suspicious/noExplicitAny: component props vary\n\tmodal?: React.ComponentType<any> | string,\n\tinitialData?: Record<string, unknown>,\n): ModalHandler {\n\tconst modals = useContext(ModalContext);\n\tconst contextModalId = useContext(ModalIdContext);\n\n\t// Determine modal ID - from argument or context\n\tconst modalId = modal ? getModalId(modal) : contextModalId;\n\n\tif (!modalId) {\n\t\tthrow new Error(\n\t\t\t\"[ModalManager] No modal id found in useModal. \" +\n\t\t\t\t\"Either pass a modal component/id or use inside a modal component.\",\n\t\t);\n\t}\n\n\t// Check if modal argument is a component reference (not a string ID)\n\t// Note: ForwardRefExoticComponent is an object, not a function\n\tconst isComponentRef = modal !== undefined && typeof modal !== \"string\";\n\n\t// Register component if passed and not already registered\n\tuseEffect(() => {\n\t\tif (isComponentRef && !MODAL_REGISTRY[modalId]) {\n\t\t\tregister(\n\t\t\t\tmodalId,\n\t\t\t\tmodal as React.ComponentType<Record<string, unknown>>,\n\t\t\t\tinitialData,\n\t\t\t);\n\t\t}\n\t}, [isComponentRef, modalId, modal, initialData]);\n\n\tconst modalInfo = modals[modalId];\n\n\t// Use refs to avoid stale closures in animation handlers\n\tconst modalInfoRef = useRef(modalInfo);\n\tuseEffect(() => {\n\t\tmodalInfoRef.current = modalInfo;\n\t}, [modalInfo]);\n\n\t// Memoized control methods\n\tconst openCallback = useCallback(\n\t\t(data?: Record<string, unknown>) => {\n\t\t\tconst ref = openModal(modalId, { data });\n\t\t\treturn ref.afterClosed();\n\t\t},\n\t\t[modalId],\n\t);\n\n\tconst closeCallback = useCallback(\n\t\t(result?: unknown) => {\n\t\t\tmodalCallbacks[modalId]?.resolve(result);\n\t\t\tdelete modalCallbacks[modalId];\n\t\t\tcloseModal(modalId);\n\t\t},\n\t\t[modalId],\n\t);\n\n\tconst dismissCallback = useCallback(() => {\n\t\tmodalCallbacks[modalId]?.resolve(undefined);\n\t\tdelete modalCallbacks[modalId];\n\t\tcloseModal(modalId);\n\t}, [modalId]);\n\n\tconst removeCallback = useCallback(() => removeModal(modalId), [modalId]);\n\n\t// Animation completion handler\n\tconst onAnimationEnd = useCallback(() => {\n\t\tconst current = modalInfoRef.current;\n\n\t\tif (current?.isOpen) {\n\t\t\t// Modal is opening - notify afterOpened promise\n\t\t\tnotifyOpened(modalId);\n\t\t} else {\n\t\t\t// Modal is closing - mark as fully closed\n\t\t\tmarkClosed(modalId);\n\n\t\t\t// Resolve close promise when closing animation completes\n\t\t\thideModalCallbacks[modalId]?.resolve(undefined);\n\t\t\tdelete hideModalCallbacks[modalId];\n\n\t\t\t// Remove if not keepMounted (use ref for latest value)\n\t\t\tif (!current?.keepMounted) {\n\t\t\t\tremoveModal(modalId);\n\t\t\t}\n\t\t}\n\t}, [modalId]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\t// State\n\t\t\tmodalId,\n\t\t\tdata: modalInfo?.data,\n\t\t\tisOpen: !!modalInfo?.isOpen,\n\t\t\tkeepMounted: !!modalInfo?.keepMounted,\n\t\t\t// Controls\n\t\t\topen: openCallback,\n\t\t\tclose: closeCallback,\n\t\t\tdismiss: dismissCallback,\n\t\t\tremove: removeCallback,\n\t\t\t// Animation handler\n\t\t\tonAnimationEnd,\n\t\t}),\n\t\t[\n\t\t\tmodalId,\n\t\t\tmodalInfo?.data,\n\t\t\tmodalInfo?.isOpen,\n\t\t\tmodalInfo?.keepMounted,\n\t\t\topenCallback,\n\t\t\tcloseCallback,\n\t\t\tdismissCallback,\n\t\t\tremoveCallback,\n\t\t\tonAnimationEnd,\n\t\t],\n\t);\n}\n\n/**\n * Hook to get typed data passed to a modal\n * Must be used inside a modal component (within ModalIdContext)\n *\n * @example\n * ```tsx\n * interface MyModalData {\n * userId: string;\n * userName: string;\n * }\n *\n * const MyModal = createModal(() => {\n * const data = useModalData<MyModalData>();\n * const modal = useModal();\n *\n * return (\n * <Dialog open={modal.open}>\n * <DialogContent>\n * <p>User: {data?.userName}</p>\n * </DialogContent>\n * </Dialog>\n * );\n * });\n *\n * // Usage:\n * open(MyModal, { data: { userId: '123', userName: 'John' } });\n * ```\n */\nexport function useModalData<TData = Record<string, unknown>>():\n\t| TData\n\t| undefined {\n\tconst modals = useContext(ModalContext);\n\tconst modalId = useContext(ModalIdContext);\n\n\tif (!modalId) {\n\t\tthrow new Error(\n\t\t\t\"[ModalManager] useModalData must be used inside a modal component. \" +\n\t\t\t\t\"Make sure you're using createModal() to wrap your modal.\",\n\t\t);\n\t}\n\n\tconst modalInfo = modals[modalId];\n\tconst data = modalInfo?.data;\n\n\t// Filter out internal modal config from user data\n\tif (!data) {\n\t\treturn undefined;\n\t}\n\tconst { [MODAL_CONFIG_KEY]: _, ...userData } = data;\n\treturn userData as TData;\n}\n\n/**\n * Hook to get the modal config options (disableClose, keepMounted, etc.)\n * Must be used inside a modal component\n */\nexport function useModalConfig(): InternalModalConfig {\n\tconst modals = useContext(ModalContext);\n\tconst modalId = useContext(ModalIdContext);\n\n\tif (!modalId) {\n\t\tthrow new Error(\n\t\t\t\"[ModalManager] useModalConfig must be used inside a modal component.\",\n\t\t);\n\t}\n\n\tconst modalInfo = modals[modalId];\n\tconst config = modalInfo?.data?.[MODAL_CONFIG_KEY] as\n\t\t| InternalModalConfig\n\t\t| undefined;\n\n\treturn config ?? {};\n}\n","import { type ComponentType, type Ref, useContext, useEffect } from \"react\";\nimport { setFlags } from \"./api\";\nimport { ModalContext, ModalIdContext } from \"./context\";\nimport { ALREADY_MOUNTED } from \"./core\";\nimport { useModal } from \"./hooks\";\nimport type { ModalHocProps } from \"./types\";\n\n/** Props passed directly to the HOC wrapper */\ntype HocOwnProps = ModalHocProps;\n\n/** Props for components that accept a ref (React 19+ style) */\nexport interface RefProp<T> {\n\tref?: Ref<T>;\n}\n\n/**\n * HOC to create a modal component with automatic registration and lifecycle management.\n * Uses React 19's ref-as-prop pattern (no forwardRef needed).\n *\n * @example\n * ```tsx\n * interface MyModalProps {\n * title: string;\n * onSave: () => void;\n * }\n *\n * const MyModal = createModal<MyModalProps>(({ title, onSave }) => {\n * const modal = useModal();\n *\n * return (\n * <Dialog open={modal.open} onOpenChange={(open) => !open && modal.dismiss()}>\n * <DialogContent onAnimationEnd={modal.onAnimationEnd}>\n * <h2>{title}</h2>\n * <Button onClick={() => { onSave(); modal.close(); }}>Save</Button>\n * </DialogContent>\n * </Dialog>\n * );\n * });\n *\n * // Usage\n * open(MyModal, { data: { title: 'Edit Item', onSave: handleSave } });\n * ```\n */\nexport const createModal = <\n\tTProps extends Record<string, unknown> = Record<string, unknown>,\n\tTRef = unknown,\n>(\n\tComp: ComponentType<TProps & RefProp<TRef>>,\n): ComponentType<TProps & HocOwnProps & RefProp<TRef>> => {\n\tfunction WrappedComponent(allProps: TProps & HocOwnProps & RefProp<TRef>) {\n\t\t// Extract HOC props\n\t\tconst { defaultOpen, keepMounted, modalId, ref, ...restProps } =\n\t\t\tallProps as HocOwnProps & RefProp<TRef> & Record<string, unknown>;\n\t\tconst componentProps = restProps as TProps;\n\n\t\tconst { data, open: openModal } = useModal(modalId);\n\t\tconst modals = useContext(ModalContext);\n\n\t\t// Only mount if this modal exists in the store\n\t\tconst shouldMount = modalId in modals;\n\n\t\t// Handle default visibility and track mounted state\n\t\tuseEffect(() => {\n\t\t\tif (defaultOpen) {\n\t\t\t\topenModal();\n\t\t\t}\n\n\t\t\tALREADY_MOUNTED[modalId] = true;\n\n\t\t\treturn () => {\n\t\t\t\tdelete ALREADY_MOUNTED[modalId];\n\t\t\t};\n\t\t}, [modalId, openModal, defaultOpen]);\n\n\t\t// Handle keepMounted flag\n\t\tuseEffect(() => {\n\t\t\tif (keepMounted) {\n\t\t\t\tsetFlags(modalId, { keepMounted: true });\n\t\t\t}\n\t\t}, [modalId, keepMounted]);\n\n\t\t// Handle delayed visibility (for modals shown before mount)\n\t\tconst delayOpen = modals[modalId]?.delayOpen;\n\t\tuseEffect(() => {\n\t\t\tif (delayOpen) {\n\t\t\t\topenModal(data);\n\t\t\t}\n\t\t}, [delayOpen, data, openModal]);\n\n\t\tif (!shouldMount) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Merge static props with dynamic data from open()\n\t\tconst mergedProps: TProps & RefProp<TRef> = {\n\t\t\t...componentProps,\n\t\t\t...(data as Partial<TProps>),\n\t\t\tref,\n\t\t};\n\n\t\treturn (\n\t\t\t<ModalIdContext.Provider value={modalId}>\n\t\t\t\t<Comp {...mergedProps} />\n\t\t\t</ModalIdContext.Provider>\n\t\t);\n\t}\n\n\t// Copy display name for debugging\n\tWrappedComponent.displayName = `ModalManager(${\n\t\tComp.displayName || Comp.name || \"Component\"\n\t})`;\n\n\treturn WrappedComponent;\n};\n","import {\n\tcleanupAllModals,\n\tcleanupModal,\n\tcloseAllModals,\n\tcloseModal,\n\tgetOpenModals,\n\thasOpenModals,\n\topenModal,\n\tremoveModal,\n} from \"./api\";\nimport { ModalDef, ModalProvider } from \"./context\";\nimport { register, unregister } from \"./core\";\nimport { createModal } from \"./hoc\";\n\n/**\n * ModalManager namespace - the primary API for managing modals.\n *\n * @example\n * ```tsx\n * import { ModalManager } from \"modalio\";\n *\n * // Create a modal\n * const MyModal = ModalManager.create<{ message: string }>(({ message }) => {\n * const modal = useModal();\n * return (\n * <Dialog {...radixDialog(modal)}>\n * <DialogContent {...radixDialogContent(modal)}>\n * <p>{message}</p>\n * <button onClick={() => modal.close(true)}>Confirm</button>\n * </DialogContent>\n * </Dialog>\n * );\n * });\n *\n * // Open it\n * const result = await ModalManager.open(MyModal, {\n * data: { message: \"Hello!\" }\n * }).afterClosed();\n *\n * // Close it\n * ModalManager.close(MyModal);\n *\n * // Close all modals\n * ModalManager.closeAll();\n * ```\n */\nexport const ModalManager = {\n\t/**\n\t * Create a modal component with lifecycle management.\n\t * Wraps your component with automatic registration and state handling.\n\t */\n\tcreate: createModal,\n\n\t/**\n\t * Open a modal and return a ModalRef for controlling it.\n\t * @returns ModalRef with afterOpened(), afterClosed(), beforeClosed() promises\n\t */\n\topen: openModal,\n\n\t/**\n\t * Close a specific modal by component or ID.\n\t * @returns Promise that resolves when the close animation completes\n\t */\n\tclose: closeModal,\n\n\t/**\n\t * Close all open modals.\n\t * @returns Promise that resolves when all close animations complete\n\t */\n\tcloseAll: closeAllModals,\n\n\t/**\n\t * Remove a modal from the DOM completely.\n\t */\n\tremove: removeModal,\n\n\t/**\n\t * Check if any modals are currently open.\n\t */\n\thasOpen: hasOpenModals,\n\n\t/**\n\t * Get array of currently open modal IDs.\n\t */\n\tgetOpen: getOpenModals,\n\n\t/**\n\t * Register a modal component with an ID for later use.\n\t */\n\tregister,\n\n\t/**\n\t * Unregister a previously registered modal.\n\t */\n\tunregister,\n\n\t/**\n\t * Clean up all internal state for a specific modal.\n\t */\n\tcleanup: cleanupModal,\n\n\t/**\n\t * Clean up all modal state (useful for testing).\n\t */\n\tcleanupAll: cleanupAllModals,\n\n\t/**\n\t * Context provider for modal management.\n\t * Must wrap your application.\n\t *\n\t * @example\n\t * ```tsx\n\t * function App() {\n\t * return (\n\t * <ModalManager.Provider>\n\t * <YourApp />\n\t * </ModalManager.Provider>\n\t * );\n\t * }\n\t * ```\n\t */\n\tProvider: ModalProvider,\n\n\t/**\n\t * Declaratively define a modal in JSX.\n\t *\n\t * @example\n\t * ```tsx\n\t * <ModalManager.Def component={MyModal} id=\"my-modal\" />\n\t *\n\t * // Later: open by ID\n\t * ModalManager.open(\"my-modal\");\n\t * ```\n\t */\n\tDef: ModalDef,\n} as const;\n"]}