@lerx/promise-modal 0.0.33 → 0.0.35

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.
Files changed (63) hide show
  1. package/dist/app/ModalManager.d.ts +15 -7
  2. package/dist/app/ModalManager.d.ts.map +1 -1
  3. package/dist/bootstrap/BootstrapProvider/BootstrapProvider.d.ts +11 -0
  4. package/dist/bootstrap/BootstrapProvider/BootstrapProvider.d.ts.map +1 -0
  5. package/dist/bootstrap/BootstrapProvider/index.d.ts +3 -0
  6. package/dist/bootstrap/BootstrapProvider/index.d.ts.map +1 -0
  7. package/dist/bootstrap/BootstrapProvider/type.d.ts +13 -0
  8. package/dist/bootstrap/BootstrapProvider/type.d.ts.map +1 -0
  9. package/dist/bootstrap/bootstrap.d.ts +12 -0
  10. package/dist/bootstrap/bootstrap.d.ts.map +1 -0
  11. package/dist/bootstrap/index.d.ts +3 -0
  12. package/dist/bootstrap/index.d.ts.map +1 -0
  13. package/dist/components/Anchor/Anchor.d.ts.map +1 -1
  14. package/dist/components/Background/Background.d.ts.map +1 -1
  15. package/dist/components/Foreground/Foreground.d.ts.map +1 -1
  16. package/dist/components/Foreground/components/AlertInner.d.ts.map +1 -1
  17. package/dist/components/Foreground/components/ConfirmInner.d.ts.map +1 -1
  18. package/dist/components/Foreground/components/PromptInner.d.ts.map +1 -1
  19. package/dist/core/handle/prompt.d.ts.map +1 -1
  20. package/dist/hooks/useActiveModalCount.d.ts.map +1 -1
  21. package/dist/hooks/useDestroyAfter.d.ts.map +1 -1
  22. package/dist/index.cjs.js +2 -2
  23. package/dist/index.cjs.js.map +1 -1
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.esm.js +2 -3
  27. package/dist/index.esm.js.map +1 -1
  28. package/dist/providers/{ModalContext/ModalContext.d.ts → ConfigurationContext/ConfigurationContext.d.ts} +3 -3
  29. package/dist/providers/ConfigurationContext/ConfigurationContext.d.ts.map +1 -0
  30. package/dist/providers/{ModalContext/ModalContextProvider.d.ts → ConfigurationContext/ConfigurationContextProvider.d.ts} +4 -9
  31. package/dist/providers/ConfigurationContext/ConfigurationContextProvider.d.ts.map +1 -0
  32. package/dist/providers/ConfigurationContext/index.d.ts +3 -0
  33. package/dist/providers/ConfigurationContext/index.d.ts.map +1 -0
  34. package/dist/providers/ConfigurationContext/useConfigurationContext.d.ts +13 -0
  35. package/dist/providers/ConfigurationContext/useConfigurationContext.d.ts.map +1 -0
  36. package/dist/providers/{ModalDataContext/ModalDataContext.d.ts → ModalManagerContext/ModalManagerContext.d.ts} +3 -3
  37. package/dist/providers/ModalManagerContext/ModalManagerContext.d.ts.map +1 -0
  38. package/dist/providers/ModalManagerContext/ModalManagerContextProvider.d.ts +10 -0
  39. package/dist/providers/ModalManagerContext/ModalManagerContextProvider.d.ts.map +1 -0
  40. package/dist/providers/ModalManagerContext/index.d.ts +3 -0
  41. package/dist/providers/ModalManagerContext/index.d.ts.map +1 -0
  42. package/dist/providers/ModalManagerContext/useModalManagerContext.d.ts +4 -0
  43. package/dist/providers/ModalManagerContext/useModalManagerContext.d.ts.map +1 -0
  44. package/dist/providers/UserDefinedContext/UserDefinedContext.d.ts.map +1 -1
  45. package/dist/providers/UserDefinedContext/UserDefinedContextProvider.d.ts.map +1 -1
  46. package/dist/providers/index.d.ts +3 -2
  47. package/dist/providers/index.d.ts.map +1 -1
  48. package/package.json +3 -3
  49. package/dist/helpers/getMillisecondsFromDuration.d.ts +0 -2
  50. package/dist/helpers/getMillisecondsFromDuration.d.ts.map +0 -1
  51. package/dist/providers/ModalContext/ModalContext.d.ts.map +0 -1
  52. package/dist/providers/ModalContext/ModalContextProvider.d.ts.map +0 -1
  53. package/dist/providers/ModalContext/index.d.ts +0 -3
  54. package/dist/providers/ModalContext/index.d.ts.map +0 -1
  55. package/dist/providers/ModalContext/useModalContext.d.ts +0 -13
  56. package/dist/providers/ModalContext/useModalContext.d.ts.map +0 -1
  57. package/dist/providers/ModalDataContext/ModalDataContext.d.ts.map +0 -1
  58. package/dist/providers/ModalDataContext/ModalDataContextProvider.d.ts +0 -7
  59. package/dist/providers/ModalDataContext/ModalDataContextProvider.d.ts.map +0 -1
  60. package/dist/providers/ModalDataContext/index.d.ts +0 -3
  61. package/dist/providers/ModalDataContext/index.d.ts.map +0 -1
  62. package/dist/providers/ModalDataContext/useModalDataContext.d.ts +0 -4
  63. package/dist/providers/ModalDataContext/useModalDataContext.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/app/ModalManager.ts","../src/app/constant.ts","../src/providers/UserDefinedContext/UserDefinedContext.ts","../src/providers/UserDefinedContext/UserDefinedContextProvider.tsx","../src/providers/UserDefinedContext/useUserDefinedContext.ts","../src/components/Background/classNames.emotion.ts","../src/components/Background/Background.tsx","../src/components/Foreground/classNames.emotion.ts","../src/components/Foreground/components/AlertInner.tsx","../src/components/Foreground/components/ConfirmInner.tsx","../src/components/Foreground/components/PromptInner.tsx","../src/components/Foreground/Foreground.tsx","../src/hooks/useSubscribeModal.ts","../src/components/Presenter/classNames.emotion.ts","../src/components/Presenter/Presenter.tsx","../src/hooks/useActiveModalCount.ts","../src/core/handle/alert.ts","../src/core/handle/confirm.ts","../src/core/handle/prompt.ts","../src/core/node/ModalNode/AbstractNode.ts","../src/core/node/ModalNode/AlertNode.ts","../src/core/node/ModalNode/ConfirmNode.ts","../src/core/node/ModalNode/PromptNode.ts","../src/core/node/nodeFactory.ts","../src/helpers/getMillisecondsFromDuration.ts","../src/providers/ModalDataContext/ModalDataContext.ts","../src/providers/ModalDataContext/ModalDataContextProvider.tsx","../src/providers/ModalDataContext/useModalDataContext.ts","../src/components/Anchor/classNames.emotion.ts","../src/components/Anchor/Anchor.tsx","../src/components/FallbackComponents/classNames.emotion.ts","../src/components/FallbackComponents/FallbackTitle.tsx","../src/components/FallbackComponents/FallbackSubtitle.tsx","../src/components/FallbackComponents/FallbackContent.tsx","../src/components/FallbackComponents/FallbackFooter.tsx","../src/components/FallbackComponents/FallbackForegroundFrame.tsx","../src/hooks/useDefaultPathname.ts","../src/providers/ModalContext/ModalContext.ts","../src/providers/ModalContext/ModalContextProvider.tsx","../src/providers/ModalContext/useModalContext.ts","../src/hooks/useDestroyAfter.ts","../src/hooks/useModalAnimation.ts"],"sourcesContent":["import type { MutableRefObject } from 'react';\n\nimport { getRandomString } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { Modal } from '@/promise-modal/types';\n\nconst prerenderListRef: MutableRefObject<Modal[]> = {\n current: [],\n};\n\nconst openModalRef: MutableRefObject<Fn<[Modal], void>> = {\n current: (modal: Modal) => {\n prerenderListRef.current.push(modal);\n },\n};\n\nconst anchorRef: MutableRefObject<HTMLElement | null> = {\n current: null,\n};\n\nexport const ModalManager = {\n get prerender() {\n return prerenderListRef.current;\n },\n clearPrerender() {\n prerenderListRef.current = [];\n },\n open(modal: Modal) {\n openModalRef.current(modal);\n },\n setupOpen(open: (modal: Modal) => void) {\n openModalRef.current = open;\n },\n anchor(name: string, prefix = 'promise-modal'): HTMLElement {\n if (anchorRef.current) {\n const anchor = document.getElementById(anchorRef.current.id);\n if (anchor) return anchor;\n }\n const node = document.createElement(name);\n node.setAttribute('id', `${prefix}-${getRandomString(36)}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","import type { Color, Duration } from '@aileron/types';\n\nexport const DEFAULT_ANIMATION_DURATION: Duration = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR: Color = 'rgba(0, 0, 0, 0.5)';\n","import { createContext } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nexport interface UserDefinedContext {\n context: Dictionary;\n}\n\nexport const UserDefinedContext = createContext<UserDefinedContext>({\n context: EMPTY_OBJECT,\n});\n","import { PropsWithChildren, useMemo } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\ninterface UserDefinedContextProviderProps {\n /** 사용자 정의 컨텍스트 */\n context?: Dictionary;\n}\n\nexport const UserDefinedContextProvider = ({\n context,\n children,\n}: PropsWithChildren<UserDefinedContextProviderProps>) => {\n const contextValue = useMemo(\n () => ({ context: context || EMPTY_OBJECT }),\n [context],\n );\n return (\n <UserDefinedContext.Provider value={contextValue}>\n {children}\n </UserDefinedContext.Provider>\n );\n};\n","import { useContext } from 'react';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\nexport const useUserDefinedContext = () => {\n return useContext(UserDefinedContext);\n};\n","import { css } from '@emotion/css';\n\nexport const background = css`\n display: none;\n position: fixed;\n inset: 0;\n z-index: -999;\n pointer-events: none;\n > * {\n pointer-events: none;\n }\n`;\n\nexport const active = css`\n pointer-events: all;\n`;\n\nexport const visible = css`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n","import { type MouseEvent, useCallback, useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, background, visible } from './classNames.emotion';\n\nexport const BackgroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n const { modal, onClose, onChange, onConfirm, onDestroy } = useModal(modalId);\n\n const handleClose = useCallback(\n (event: MouseEvent) => {\n if (modal && modal.closeOnBackdropClick && modal.visible) onClose();\n event.stopPropagation();\n },\n [modal, onClose],\n );\n\n const Background = useMemo(\n () => modal?.BackgroundComponent || BackgroundComponent,\n [BackgroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(background, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.closeOnBackdropClick && modal.visible,\n })}\n onClick={handleClose}\n >\n {Background && (\n <Background\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n />\n )}\n </div>\n );\n};\n","import { css } from '@emotion/css';\n\nexport const foreground = css`\n pointer-events: none;\n display: none;\n position: fixed;\n inset: 0;\n z-index: 1;\n`;\n\nexport const active = css`\n > * {\n pointer-events: all;\n }\n`;\n\nexport const visible = css`\n display: flex !important;\n justify-content: center;\n align-items: center;\n`;\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { ConfirmNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface ConfirmInnerProps<B> {\n modal: ConfirmNode<B>;\n handlers: Pick<ModalActions, 'onConfirm' | 'onClose'>;\n}\n\nexport const ConfirmInner = memo(\n <B,>({ modal, handlers }: ConfirmInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm, onClose } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n const handleClose = useHandle(onClose);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport {\n renderComponent,\n useHandle,\n withErrorBoundary,\n} from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(withErrorBoundary(modal.Input)),\n }),\n [modal],\n );\n\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const [value, setValue] = useState<T | undefined>(defaultValue);\n\n const { onChange, onClose, onConfirm } = useMemo(\n () => handlers,\n [handlers],\n );\n\n const handleClose = useHandle(onClose);\n const handleChange = useHandle(\n (inputValue?: T | ((prevState: T | undefined) => T | undefined)) => {\n const input = isFunction(inputValue) ? inputValue(value) : inputValue;\n setValue(input);\n onChange(input);\n },\n );\n\n const handleConfirm = useCallback(() => {\n // NOTE: wait for the next tick to ensure the value is updated\n setTimeout(() => {\n onConfirm();\n });\n }, [onConfirm]);\n\n const disabled = useMemo(\n () => (value ? !!checkDisabled?.(value) : false),\n [checkDisabled, value],\n );\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n context={userDefinedContext}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n value,\n disabled,\n onChange: handleChange,\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n disabled={disabled}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, foreground, visible } from './classNames.emotion';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const ForegroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n const Foreground = useMemo(\n () => modal?.ForegroundComponent || ForegroundComponent,\n [ForegroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(foreground, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.visible,\n })}\n >\n <Foreground\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n >\n {modal.type === 'alert' && (\n <AlertInner modal={modal} handlers={{ onConfirm }} />\n )}\n {modal.type === 'confirm' && (\n <ConfirmInner modal={modal} handlers={{ onConfirm, onClose }} />\n )}\n {modal.type === 'prompt' && (\n <PromptInner\n modal={modal}\n handlers={{ onChange, onConfirm, onClose }}\n />\n )}\n </Foreground>\n </div>\n );\n};\n","import { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { ModalNode } from '@/promise-modal/core';\n\nexport const useSubscribeModal = (modal?: ModalNode) => {\n const [tick, update] = useTick();\n useOnMount(() => {\n if (!modal) return;\n const unsubscribe = modal.subscribe(update);\n return unsubscribe;\n });\n return tick;\n};\n","import { css } from '@emotion/css';\n\nexport const presenter = css`\n position: fixed;\n inset: 0;\n pointer-events: none;\n overflow: hidden;\n`;\n","import { memo, useRef } from 'react';\n\nimport { counterFactory } from '@winglet/common-utils';\nimport { useHandle } from '@winglet/react-utils';\n\nimport { Background } from '@/promise-modal/components/Background';\nimport { Foreground } from '@/promise-modal/components/Foreground';\nimport { useSubscribeModal } from '@/promise-modal/hooks/useSubscribeModal';\nimport { useModal } from '@/promise-modal/providers';\nimport type { ModalIdProps } from '@/promise-modal/types';\n\nimport { presenter } from './classNames.emotion';\n\nconst { increment } = counterFactory(1);\n\nexport const Presenter = memo(({ modalId }: ModalIdProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { modal } = useModal(modalId);\n useSubscribeModal(modal);\n const handleChangeOrder = useHandle(() => {\n if (ref.current) {\n ref.current.style.zIndex = `${increment()}`;\n }\n });\n return (\n <div ref={ref} className={presenter}>\n <Background modalId={modalId} onChangeOrder={handleChangeOrder} />\n <Foreground modalId={modalId} onChangeOrder={handleChangeOrder} />\n </div>\n );\n});\n","import { useMemo } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { ModalNode } from '../core';\nimport { useModalDataContext } from '../providers';\n\nconst defaultValidate = (modal?: ModalNode) => modal?.visible;\n\nexport const useActiveModalCount = (\n validate: Fn<[ModalNode?], boolean | undefined> = defaultValidate,\n refreshKey: string | number = 0,\n) => {\n const { modalIds, getModalNode } = useModalDataContext();\n return useMemo(() => {\n let count = 0;\n for (const id of modalIds) {\n if (validate(getModalNode(id))) count++;\n }\n return count;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getModalNode, modalIds, refreshKey]);\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n AlertContentProps,\n AlertFooterRender,\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface AlertProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<AlertContentProps>;\n background?: ModalBackground<B>;\n footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n dimmed?: boolean;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: AlertProps<B>) => {\n return new Promise<void>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'alert',\n subtype,\n resolve: () => resolve(),\n title,\n subtitle,\n content,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n BackgroundComponent,\n ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface ConfirmProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<ConfirmContentProps>;\n background?: ModalBackground<B>;\n footer?: ConfirmFooterRender | FooterOptions | false;\n dimmed?: boolean;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: ConfirmProps<B>) => {\n return new Promise<boolean>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'confirm',\n subtype,\n resolve: (result) => resolve(result ?? false),\n title,\n subtitle,\n content,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n} from '@/promise-modal/types';\n\nimport { ModalManager } from '../../app/ModalManager';\n\ninterface PromptProps<T, B = any> {\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<PromptContentProps>;\n Input: (props: PromptInputProps<T>) => ReactNode;\n defaultValue?: T;\n disabled?: (value: T) => boolean;\n returnOnCancel?: boolean;\n background?: ModalBackground<B>;\n footer?: PromptFooterRender<T> | FooterOptions | false;\n dimmed?: boolean;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const prompt = <T, B = any>({\n defaultValue,\n title,\n subtitle,\n content,\n Input,\n disabled,\n returnOnCancel,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: PromptProps<T, B>) => {\n return new Promise<T>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'prompt',\n resolve: (result) => resolve(result as T),\n title,\n subtitle,\n content,\n Input,\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ReactNode } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type {\n BackgroundComponent,\n BaseModal,\n ForegroundComponent,\n ManagedEntity,\n ModalBackground,\n} from '@/promise-modal/types';\n\ntype AbstractNodeProps<T, B> = BaseModal<T, B> & ManagedEntity;\n\nexport abstract class AbstractNode<T, B> {\n readonly id: number;\n readonly initiator: string;\n\n readonly title?: ReactNode;\n readonly subtitle?: ReactNode;\n readonly background?: ModalBackground<B>;\n\n readonly manualDestroy: boolean;\n readonly closeOnBackdropClick: boolean;\n readonly dimmed: boolean;\n\n readonly ForegroundComponent?: ForegroundComponent;\n readonly BackgroundComponent?: BackgroundComponent;\n\n #alive: boolean;\n get alive() {\n return this.#alive;\n }\n #visible: boolean;\n get visible() {\n return this.#visible;\n }\n\n #resolve: (result: T | null) => void;\n #listeners: Fn[] = [];\n\n constructor({\n id,\n initiator,\n title,\n subtitle,\n background,\n dimmed = true,\n manualDestroy = false,\n closeOnBackdropClick = true,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: AbstractNodeProps<T, B>) {\n this.id = id;\n this.initiator = initiator;\n this.title = title;\n this.subtitle = subtitle;\n this.background = background;\n\n this.dimmed = dimmed;\n this.manualDestroy = manualDestroy;\n this.closeOnBackdropClick = closeOnBackdropClick;\n\n this.ForegroundComponent = ForegroundComponent;\n this.BackgroundComponent = BackgroundComponent;\n\n this.#alive = true;\n this.#visible = true;\n this.#resolve = resolve;\n }\n\n subscribe(listener: Fn) {\n this.#listeners.push(listener);\n return () => {\n this.#listeners = this.#listeners.filter((l) => l !== listener);\n };\n }\n publish() {\n for (const listener of this.#listeners) listener();\n }\n protected resolve(result: T | null) {\n this.#resolve(result);\n }\n onDestroy() {\n const needPublish = this.#alive === true;\n this.#alive = false;\n if (this.manualDestroy && needPublish) this.publish();\n }\n onShow() {\n const needPublish = this.#visible === false;\n this.#visible = true;\n if (needPublish) this.publish();\n }\n onHide() {\n const needPublish = this.#visible === true;\n this.#visible = false;\n if (needPublish) this.publish();\n }\n abstract onClose(): void;\n abstract onConfirm(): void;\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n AlertContentProps,\n AlertFooterRender,\n AlertModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { AbstractNode } from './AbstractNode';\n\ntype AlertNodeProps<B> = AlertModal<B> & ManagedEntity;\n\nexport class AlertNode<B> extends AbstractNode<null, B> {\n readonly type: 'alert';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<AlertContentProps>;\n readonly footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(null);\n }\n onConfirm() {\n this.resolve(null);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n ConfirmContentProps,\n ConfirmFooterRender,\n ConfirmModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { AbstractNode } from './AbstractNode';\n\ntype ConfirmNodeProps<B> = ConfirmModal<B> & ManagedEntity;\n\nexport class ConfirmNode<B> extends AbstractNode<boolean, B> {\n readonly type: 'confirm';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<ConfirmContentProps>;\n readonly footer?: ConfirmFooterRender | FooterOptions | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(false);\n }\n onConfirm() {\n this.resolve(true);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\n ManagedEntity,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n PromptModal,\n} from '@/promise-modal/types';\n\nimport { AbstractNode } from './AbstractNode';\n\ntype PromptNodeProps<T, B> = PromptModal<T, B> & ManagedEntity;\n\nexport class PromptNode<T, B> extends AbstractNode<T, B> {\n readonly type: 'prompt';\n readonly content?: ReactNode | ComponentType<PromptContentProps>;\n readonly defaultValue: T | undefined;\n readonly Input: (props: PromptInputProps<T>) => ReactNode;\n readonly disabled?: (value: T) => boolean;\n readonly returnOnCancel?: boolean;\n readonly footer?: PromptFooterRender<T> | FooterOptions | false;\n #value: T | undefined;\n\n constructor({\n id,\n initiator,\n type,\n title,\n subtitle,\n content,\n defaultValue,\n Input,\n disabled,\n returnOnCancel,\n footer,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.content = content;\n this.Input = Input;\n this.defaultValue = defaultValue;\n this.#value = defaultValue;\n this.disabled = disabled;\n this.returnOnCancel = returnOnCancel;\n this.footer = footer;\n }\n\n onChange(value: T) {\n this.#value = value;\n }\n onConfirm() {\n this.resolve(this.#value ?? null);\n }\n onClose() {\n if (this.returnOnCancel) this.resolve(this.#value ?? null);\n else this.resolve(null);\n }\n}\n","import type { ManagedModal } from '@/promise-modal/types';\n\nimport { AlertNode, ConfirmNode, PromptNode } from './ModalNode';\n\nexport const nodeFactory = <T, B>(modal: ManagedModal<T, B>) => {\n switch (modal.type) {\n case 'alert':\n return new AlertNode<B>(modal);\n case 'confirm':\n return new ConfirmNode<B>(modal);\n case 'prompt':\n return new PromptNode<T, B>(modal);\n }\n // @ts-expect-error: This state is unreachable by design and should NEVER occur.\n throw new Error(`Unknown modal: ${modal.type}`, { modal });\n};\n","const DURATION_REGEX = /^\\s*(\\d+)\\s*(ms|s|m|h)\\s*$/;\n\nexport const getMillisecondsFromDuration = (input: string) => {\n const [, durationString, unit] = input.match(DURATION_REGEX) || [];\n if (!durationString || !unit) return 0;\n const duration = parseInt(durationString);\n if (unit === 'ms') return duration;\n if (unit === 's') return duration * 1000;\n if (unit === 'm') return duration * 60 * 1000;\n if (unit === 'h') return duration * 60 * 60 * 1000;\n else return 0;\n};\n","import { createContext } from 'react';\n\nimport { undefinedFunction } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport type { ModalActions, ModalHandlersWithId } from '@/promise-modal/types';\n\nexport interface ModalDataContextProps extends ModalHandlersWithId {\n modalIds: ModalNode['id'][];\n getModal: Fn<[id: ModalNode['id']], ModalActions>;\n getModalNode: Fn<[id: ModalNode['id']], ModalNode | undefined>;\n setUpdater: Fn<[updater: Fn]>;\n}\n\nexport const ModalDataContext = createContext<ModalDataContextProps>({\n modalIds: [],\n getModalNode: undefinedFunction,\n onChange: undefinedFunction,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onDestroy: undefinedFunction,\n setUpdater: undefinedFunction,\n getModal: () => ({\n modal: undefined,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onChange: undefinedFunction,\n onDestroy: undefinedFunction,\n }),\n});\n","import {\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useOnMountLayout, useReference } from '@winglet/react-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport { type ModalNode, nodeFactory } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\nimport { useModalOptions } from '@/promise-modal/providers';\nimport type { Modal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\ninterface ModalDataContextProviderProps {\n pathname: string;\n}\n\nexport const ModalDataContextProvider = memo(\n ({\n pathname,\n children,\n }: PropsWithChildren<ModalDataContextProviderProps>) => {\n const modalDictionary = useRef<Map<ModalNode['id'], ModalNode>>(new Map());\n\n const [modalIds, setModalIds] = useState<ModalNode['id'][]>([]);\n const modalIdsRef = useReference(modalIds);\n\n const initiator = useRef(pathname);\n const modalIdSequence = useRef(0);\n\n const options = useModalOptions();\n\n const duration = useMemo(\n () => getMillisecondsFromDuration(options.duration),\n [options],\n );\n\n useOnMountLayout(() => {\n const { manualDestroy, closeOnBackdropClick } = options;\n\n for (const data of ModalManager.prerender) {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => [...ids, modal.id]);\n }\n\n ModalManager.setupOpen((data: Modal) => {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => {\n const aliveIds = ids.filter((id) => {\n const destroyed = !modalDictionary.current.get(id)?.alive;\n if (destroyed) modalDictionary.current.delete(id);\n return !destroyed;\n });\n return [...aliveIds, modal.id];\n });\n });\n ModalManager.clearPrerender();\n });\n\n useLayoutEffect(() => {\n for (const id of modalIdsRef.current) {\n const modal = modalDictionary.current.get(id);\n if (!modal?.alive) continue;\n if (modal.initiator === pathname) modal.onShow();\n else modal.onHide();\n }\n initiator.current = pathname;\n }, [modalIdsRef, pathname]);\n\n const getModalNode = useCallback((modalId: ModalNode['id']) => {\n return modalDictionary.current.get(modalId);\n }, []);\n\n const onDestroy = useCallback((modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onDestroy();\n updaterRef.current?.();\n }, []);\n\n const updaterRef = useRef<Fn>();\n const hideModal = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onHide();\n updaterRef.current?.();\n if (!modal.manualDestroy)\n setTimeout(() => {\n modal.onDestroy();\n }, duration);\n },\n [duration],\n );\n\n const onChange = useCallback((modalId: ModalNode['id'], value: any) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n if (modal.type === 'prompt') modal.onChange(value);\n }, []);\n\n const onConfirm = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onConfirm();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const onClose = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onClose();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const getModal = useCallback(\n (modalId: ModalNode['id']) => ({\n modal: getModalNode(modalId),\n onConfirm: () => onConfirm(modalId),\n onClose: () => onClose(modalId),\n onChange: (value: any) => onChange(modalId, value),\n onDestroy: () => onDestroy(modalId),\n }),\n [getModalNode, onConfirm, onClose, onChange, onDestroy],\n );\n\n const value = useMemo(() => {\n return {\n modalIds,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n getModal,\n setUpdater: (updater: Fn) => {\n updaterRef.current = updater;\n },\n };\n }, [\n modalIds,\n getModal,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n ]);\n\n return (\n <ModalDataContext.Provider value={value}>\n {children}\n </ModalDataContext.Provider>\n );\n },\n);\n","import { useContext, useMemo } from 'react';\n\nimport type { ManagedModal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\nexport const useModalDataContext = () => useContext(ModalDataContext);\n\nexport const useModal = (id: ManagedModal['id']) => {\n const { getModal } = useModalDataContext();\n return useMemo(() => getModal(id), [id, getModal]);\n};\n","import { css } from '@emotion/css';\n\nexport const anchor = css`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 1000;\n transition: background-color ease-in-out;\n`;\n","import { memo, useEffect } from 'react';\n\nimport { useTick, withErrorBoundary } from '@winglet/react-utils';\n\nimport { Presenter } from '@/promise-modal/components/Presenter';\nimport type { ModalNode } from '@/promise-modal/core';\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useModalDataContext } from '@/promise-modal/providers/ModalDataContext';\n\nimport { anchor } from './classNames.emotion';\n\nconst AnchorInner = () => {\n const [refreshKey, update] = useTick();\n\n const { modalIds, setUpdater } = useModalDataContext();\n\n useEffect(() => {\n setUpdater(update);\n }, [setUpdater, update]);\n\n const { options } = useModalContext();\n\n const dimmed = useActiveModalCount(validateDimmable, refreshKey);\n\n return (\n <div\n className={anchor}\n style={{\n transitionDuration: options.duration,\n backgroundColor: dimmed ? options.backdrop : 'transparent',\n }}\n >\n {modalIds.map((id) => {\n return <Presenter key={id} modalId={id} />;\n })}\n </div>\n );\n};\n\nconst validateDimmable = (modal?: ModalNode) => modal?.visible && modal.dimmed;\n\nexport const Anchor = memo(withErrorBoundary(AnchorInner));\n","import { css } from '@emotion/css';\n\nexport const fallback = css`\n margin: unset;\n`;\n\nexport const frame = css`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: white;\n padding: 20px 80px;\n gap: 10px;\n border: 1px solid black;\n`;\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={fallback}>{children}</div>;\n};\n","import type { FooterComponentProps } from '@/promise-modal/types';\n\nexport const FallbackFooter = ({\n confirmLabel,\n hideConfirm = false,\n cancelLabel,\n hideCancel = false,\n disabled,\n onConfirm,\n onCancel,\n}: FooterComponentProps) => {\n return (\n <div>\n {!hideConfirm && (\n <button onClick={onConfirm} disabled={disabled}>\n {confirmLabel || '확인'}\n </button>\n )}\n\n {!hideCancel && typeof onCancel === 'function' && (\n <button onClick={onCancel}>{cancelLabel || '취소'}</button>\n )}\n </div>\n );\n};\n","import {\n type ForwardedRef,\n type PropsWithChildren,\n forwardRef,\n useMemo,\n} from 'react';\n\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport type { ModalFrameProps } from '@/promise-modal/types';\n\nimport { frame } from './classNames.emotion';\n\nconst MAX_MODAL_COUNT = 5;\nconst MAX_MODAL_LEVEL = 3;\n\nexport const FallbackForegroundFrame = forwardRef(\n (\n { id, onChangeOrder, children }: PropsWithChildren<ModalFrameProps>,\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const activeCount = useActiveModalCount();\n const [level, offset] = useMemo(() => {\n const stacked = activeCount > 1;\n const level = stacked\n ? (Math.floor(id / MAX_MODAL_COUNT) % MAX_MODAL_LEVEL) * 100\n : 0;\n const offset = stacked ? (id % MAX_MODAL_COUNT) * 35 : 0;\n return [level, offset];\n }, [activeCount, id]);\n\n return (\n <div\n ref={ref}\n className={frame}\n onClick={onChangeOrder}\n style={{\n marginBottom: `calc(25vh + ${level}px)`,\n marginLeft: `${level}px`,\n transform: `translate(${offset}px, ${offset}px)`,\n }}\n >\n {children}\n </div>\n );\n },\n);\n","import { useLayoutEffect, useState } from 'react';\n\nexport const usePathname = () => {\n const [pathname, setPathname] = useState(window.location.pathname);\n useLayoutEffect(() => {\n let requestId: number;\n const checkPathname = () => {\n if (requestId) cancelAnimationFrame(requestId);\n if (pathname !== window.location.pathname) {\n setPathname(window.location.pathname);\n } else {\n requestId = requestAnimationFrame(checkPathname);\n }\n };\n requestId = requestAnimationFrame(checkPathname);\n return () => {\n if (requestId) cancelAnimationFrame(requestId);\n };\n }, [pathname]);\n return { pathname };\n};\n","import { type ComponentType, createContext } from 'react';\n\nimport type { Color, Duration } from '@aileron/types';\n\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport type {\n BackgroundComponent,\n FooterComponentProps,\n ForegroundComponent,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n TitleComponent: ComponentType<WrapperComponentProps>;\n SubtitleComponent: ComponentType<WrapperComponentProps>;\n ContentComponent: ComponentType<WrapperComponentProps>;\n FooterComponent: ComponentType<FooterComponentProps>;\n options: {\n duration: Duration;\n backdrop: Color;\n manualDestroy: boolean;\n closeOnBackdropClick: boolean;\n };\n}\n\nexport const ModalContext = createContext<ModalContextProps>({\n ForegroundComponent: FallbackForegroundFrame,\n TitleComponent: FallbackTitle,\n SubtitleComponent: FallbackSubtitle,\n ContentComponent: FallbackContent,\n FooterComponent: FallbackFooter,\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n manualDestroy: false,\n closeOnBackdropClick: true,\n },\n});\n","import {\n type ComponentType,\n type PropsWithChildren,\n memo,\n useMemo,\n useRef,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { Color, Dictionary, Duration } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport { Anchor } from '@/promise-modal/components/Anchor';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport { usePathname as useDefaultPathname } from '@/promise-modal/hooks/useDefaultPathname';\nimport type {\n FooterComponentProps,\n ModalFrameProps,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { UserDefinedContextProvider } from '../UserDefinedContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<WrapperComponentProps>;\n SubtitleComponent?: ComponentType<WrapperComponentProps>;\n ContentComponent?: ComponentType<WrapperComponentProps>;\n FooterComponent?: ComponentType<FooterComponentProps>;\n options?: {\n /** Modal transition time(ms, s) */\n duration?: Duration;\n /** Modal backdrop color */\n backdrop?: Color;\n /** Whether to destroy the modal manually */\n manualDestroy?: boolean;\n /** Whether to close the modal when the backdrop is clicked */\n closeOnBackdropClick?: boolean;\n };\n context?: Dictionary;\n usePathname?: () => { pathname: string };\n}\n\nexport const ModalContextProvider = memo(\n ({\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n options,\n context,\n usePathname,\n children,\n }: PropsWithChildren<ModalContextProviderProps>) => {\n const { pathname } = (usePathname || useDefaultPathname)();\n const [, update] = useTick();\n const portalRef = useRef<HTMLElement | null>(null);\n\n useOnMount(() => {\n portalRef.current = ModalManager.anchor('div');\n update();\n return () => {\n if (portalRef.current) {\n portalRef.current.remove();\n }\n };\n });\n\n const value = useMemo(\n () => ({\n BackgroundComponent,\n ForegroundComponent: ForegroundComponent || FallbackForegroundFrame,\n TitleComponent: TitleComponent || FallbackTitle,\n SubtitleComponent: SubtitleComponent || FallbackSubtitle,\n ContentComponent: memo(ContentComponent || FallbackContent),\n FooterComponent: memo(FooterComponent || FallbackFooter),\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n closeOnBackdropClick: true,\n manualDestroy: false,\n ...options,\n } satisfies ModalContextProviderProps['options'],\n }),\n [\n ForegroundComponent,\n BackgroundComponent,\n ContentComponent,\n FooterComponent,\n SubtitleComponent,\n TitleComponent,\n options,\n ],\n );\n\n return (\n <ModalContext.Provider value={value}>\n {children}\n {portalRef.current &&\n createPortal(\n <UserDefinedContextProvider context={context}>\n <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>\n </UserDefinedContextProvider>,\n portalRef.current,\n )}\n </ModalContext.Provider>\n );\n },\n);\n","import { useContext } from 'react';\n\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { ModalContext } from './ModalContext';\n\nexport const useModalContext = () => useContext(ModalContext);\n\nexport const useModalOptions = () => {\n const { options } = useContext(ModalContext);\n return options;\n};\n\nexport const useModalDuration = () => {\n const { duration } = useModalOptions();\n return { duration, milliseconds: getMillisecondsFromDuration(duration) };\n};\n\nexport const useModalBackdrop = () => {\n const { backdrop } = useModalOptions();\n return backdrop;\n};\n","import { useEffect, useRef } from 'react';\n\nimport { isString } from '@winglet/common-utils';\n\nimport type { Duration } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { useModal } from '../providers';\nimport { useSubscribeModal } from './useSubscribeModal';\n\nexport const useDestroyAfter = (\n modalId: ModalNode['id'],\n duration: Duration | number,\n) => {\n const { modal, onDestroy } = useModal(modalId);\n const tick = useSubscribeModal(modal);\n\n const reference = useRef({\n modal,\n onDestroy,\n milliseconds: isString(duration)\n ? getMillisecondsFromDuration(duration)\n : duration,\n });\n\n useEffect(() => {\n const { modal, onDestroy, milliseconds } = reference.current;\n if (!modal || modal.visible || !modal.alive) return;\n const timer = setTimeout(() => {\n onDestroy();\n }, milliseconds);\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [tick]);\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\ninterface ModalAnimationHandler {\n onVisible?: Fn;\n onHidden?: Fn;\n}\n\nexport const useModalAnimation = (\n visible: boolean,\n handler: ModalAnimationHandler,\n) => {\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n useLayoutEffect(() => {\n if (!handlerRef.current) return;\n let frame: ReturnType<typeof requestAnimationFrame>;\n if (visible)\n frame = requestAnimationFrame(() => handlerRef.current.onVisible?.());\n else frame = requestAnimationFrame(() => handlerRef.current.onHidden?.());\n return () => {\n if (frame) cancelAnimationFrame(frame);\n };\n }, [visible]);\n};\n"],"names":["prerenderListRef","current","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","prefix","document","getElementById","id","node","createElement","setAttribute","getRandomString","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","UserDefinedContext","createContext","context","EMPTY_OBJECT","UserDefinedContextProvider","children","contextValue","useMemo","_jsx","Provider","value","useUserDefinedContext","useContext","background","css","process","env","NODE_ENV","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","active","visible","BackgroundFrame","modalId","onChangeOrder","BackgroundComponent","useModalContext","userDefinedContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","stopPropagation","Background","className","cx","visible$1","manualDestroy","alive","active$1","onClick","type","initiator","foreground","AlertInner","memo","handlers","title","subtitle","content","footer","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","withErrorBoundary","setValue","useState","handleChange","inputValue","input","isFunction","setTimeout","ForegroundFrame","ForegroundComponent","Foreground","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","presenter","increment","counterFactory","Presenter","ref","useRef","handleChangeOrder","style","zIndex","defaultValidate","useActiveModalCount","validate","refreshKey","modalIds","getModalNode","useModalDataContext","count","alert","subtype","dimmed","Promise","resolve","reject","error","result","prompt","returnOnCancel","AbstractNode","__classPrivateFieldGet","this","_AbstractNode_alive","_AbstractNode_visible","constructor","Object","defineProperty","set","_AbstractNode_resolve","_AbstractNode_listeners","__classPrivateFieldSet","listener","filter","l","publish","call","needPublish","onShow","onHide","AlertNode","super","ConfirmNode","PromptNode","_PromptNode_value","nodeFactory","Error","DURATION_REGEX","getMillisecondsFromDuration","durationString","unit","match","duration","parseInt","ModalDataContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","useOnMountLayout","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","validateDimmable","Anchor","useEffect","transitionDuration","backgroundColor","backdrop","map","fallback","frame","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","Math","floor","marginBottom","marginLeft","transform","usePathname","setPathname","window","location","requestId","checkPathname","cancelAnimationFrame","requestAnimationFrame","ModalContext","ModalContextProvider","useDefaultPathname","portalRef","remove","createPortal","useModalDuration","milliseconds","useModalBackdrop","useDestroyAfter","reference","timer","clearTimeout","useModalAnimation","handler","handlerRef","onVisible","onHidden"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/app/ModalManager.ts","../src/core/handle/alert.ts","../src/core/handle/confirm.ts","../src/core/handle/prompt.ts","../src/core/node/ModalNode/AbstractNode.ts","../src/core/node/ModalNode/AlertNode.ts","../src/core/node/ModalNode/ConfirmNode.ts","../src/core/node/ModalNode/PromptNode.ts","../src/core/node/nodeFactory.ts","../src/providers/ModalManagerContext/ModalManagerContext.ts","../src/providers/ModalManagerContext/ModalManagerContextProvider.tsx","../src/providers/ModalManagerContext/useModalManagerContext.ts","../src/components/FallbackComponents/classNames.emotion.ts","../src/components/FallbackComponents/FallbackTitle.tsx","../src/components/FallbackComponents/FallbackSubtitle.tsx","../src/components/FallbackComponents/FallbackContent.tsx","../src/components/FallbackComponents/FallbackFooter.tsx","../src/hooks/useActiveModalCount.ts","../src/components/FallbackComponents/FallbackForegroundFrame.tsx","../src/providers/ConfigurationContext/ConfigurationContext.ts","../src/providers/ConfigurationContext/ConfigurationContextProvider.tsx","../src/app/constant.ts","../src/providers/ConfigurationContext/useConfigurationContext.ts","../src/providers/UserDefinedContext/UserDefinedContext.ts","../src/providers/UserDefinedContext/UserDefinedContextProvider.tsx","../src/providers/UserDefinedContext/useUserDefinedContext.ts","../src/components/Background/classNames.emotion.ts","../src/components/Background/Background.tsx","../src/components/Foreground/classNames.emotion.ts","../src/components/Foreground/components/AlertInner.tsx","../src/components/Foreground/components/ConfirmInner.tsx","../src/components/Foreground/components/PromptInner.tsx","../src/components/Foreground/Foreground.tsx","../src/hooks/useSubscribeModal.ts","../src/components/Presenter/classNames.emotion.ts","../src/components/Presenter/Presenter.tsx","../src/components/Anchor/classNames.emotion.ts","../src/components/Anchor/Anchor.tsx","../src/bootstrap/bootstrap.tsx","../src/hooks/useDefaultPathname.ts","../src/bootstrap/BootstrapProvider/BootstrapProvider.tsx","../src/hooks/useDestroyAfter.ts","../src/hooks/useModalAnimation.ts"],"sourcesContent":["import { getRandomString } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { Modal } from '@/promise-modal/types';\n\nexport class ModalManager {\n static #active = false;\n static activate() {\n if (ModalManager.#active) return false;\n return (ModalManager.#active = true);\n }\n\n static #anchor: HTMLElement | null = null;\n static anchor(options?: {\n tag?: string;\n prefix?: string;\n root?: HTMLElement;\n }): HTMLElement {\n if (ModalManager.#anchor) {\n const anchor = document.getElementById(ModalManager.#anchor.id);\n if (anchor) return anchor;\n }\n const {\n tag = 'div',\n prefix = 'promise-modal',\n root = document.body,\n } = options || {};\n const node = document.createElement(tag);\n node.setAttribute('id', `${prefix}-${getRandomString(36)}`);\n root.appendChild(node);\n ModalManager.#anchor = node;\n return node;\n }\n\n static #prerenderList: Modal[] = [];\n static get prerender() {\n return ModalManager.#prerenderList;\n }\n\n static #openHandler: Fn<[Modal], void> = (modal: Modal) =>\n ModalManager.#prerenderList.push(modal);\n static set openHandler(handler: Fn<[Modal], void>) {\n ModalManager.#openHandler = handler;\n ModalManager.#prerenderList = [];\n }\n\n static get unanchored() {\n return !ModalManager.#anchor;\n }\n\n static reset() {\n ModalManager.#active = false;\n ModalManager.#anchor = null;\n ModalManager.#prerenderList = [];\n ModalManager.#openHandler = (modal: Modal) =>\n ModalManager.#prerenderList.push(modal);\n }\n\n static open(modal: Modal) {\n ModalManager.#openHandler(modal);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n AlertContentProps,\n AlertFooterRender,\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface AlertProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<AlertContentProps>;\n background?: ModalBackground<B>;\n footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n dimmed?: boolean;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: AlertProps<B>) => {\n return new Promise<void>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'alert',\n subtype,\n resolve: () => resolve(),\n title,\n subtitle,\n content,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n BackgroundComponent,\n ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface ConfirmProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<ConfirmContentProps>;\n background?: ModalBackground<B>;\n footer?: ConfirmFooterRender | FooterOptions | false;\n dimmed?: boolean;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: ConfirmProps<B>) => {\n return new Promise<boolean>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'confirm',\n subtype,\n resolve: (result) => resolve(result ?? false),\n title,\n subtitle,\n content,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n} from '@/promise-modal/types';\n\ninterface PromptProps<T, B = any> {\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<PromptContentProps>;\n Input: (props: PromptInputProps<T>) => ReactNode;\n defaultValue?: T;\n disabled?: (value: T) => boolean;\n returnOnCancel?: boolean;\n background?: ModalBackground<B>;\n footer?: PromptFooterRender<T> | FooterOptions | false;\n dimmed?: boolean;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const prompt = <T, B = any>({\n defaultValue,\n title,\n subtitle,\n content,\n Input,\n disabled,\n returnOnCancel,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: PromptProps<T, B>) => {\n return new Promise<T>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'prompt',\n resolve: (result) => resolve(result as T),\n title,\n subtitle,\n content,\n Input,\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ReactNode } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type {\n BackgroundComponent,\n BaseModal,\n ForegroundComponent,\n ManagedEntity,\n ModalBackground,\n} from '@/promise-modal/types';\n\ntype AbstractNodeProps<T, B> = BaseModal<T, B> & ManagedEntity;\n\nexport abstract class AbstractNode<T, B> {\n readonly id: number;\n readonly initiator: string;\n\n readonly title?: ReactNode;\n readonly subtitle?: ReactNode;\n readonly background?: ModalBackground<B>;\n\n readonly manualDestroy: boolean;\n readonly closeOnBackdropClick: boolean;\n readonly dimmed: boolean;\n\n readonly ForegroundComponent?: ForegroundComponent;\n readonly BackgroundComponent?: BackgroundComponent;\n\n #alive: boolean;\n get alive() {\n return this.#alive;\n }\n #visible: boolean;\n get visible() {\n return this.#visible;\n }\n\n #resolve: (result: T | null) => void;\n #listeners: Fn[] = [];\n\n constructor({\n id,\n initiator,\n title,\n subtitle,\n background,\n dimmed = true,\n manualDestroy = false,\n closeOnBackdropClick = true,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: AbstractNodeProps<T, B>) {\n this.id = id;\n this.initiator = initiator;\n this.title = title;\n this.subtitle = subtitle;\n this.background = background;\n\n this.dimmed = dimmed;\n this.manualDestroy = manualDestroy;\n this.closeOnBackdropClick = closeOnBackdropClick;\n\n this.ForegroundComponent = ForegroundComponent;\n this.BackgroundComponent = BackgroundComponent;\n\n this.#alive = true;\n this.#visible = true;\n this.#resolve = resolve;\n }\n\n subscribe(listener: Fn) {\n this.#listeners.push(listener);\n return () => {\n this.#listeners = this.#listeners.filter((l) => l !== listener);\n };\n }\n publish() {\n for (const listener of this.#listeners) listener();\n }\n protected resolve(result: T | null) {\n this.#resolve(result);\n }\n onDestroy() {\n const needPublish = this.#alive === true;\n this.#alive = false;\n if (this.manualDestroy && needPublish) this.publish();\n }\n onShow() {\n const needPublish = this.#visible === false;\n this.#visible = true;\n if (needPublish) this.publish();\n }\n onHide() {\n const needPublish = this.#visible === true;\n this.#visible = false;\n if (needPublish) this.publish();\n }\n abstract onClose(): void;\n abstract onConfirm(): void;\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n AlertContentProps,\n AlertFooterRender,\n AlertModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { AbstractNode } from './AbstractNode';\n\ntype AlertNodeProps<B> = AlertModal<B> & ManagedEntity;\n\nexport class AlertNode<B> extends AbstractNode<null, B> {\n readonly type: 'alert';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<AlertContentProps>;\n readonly footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(null);\n }\n onConfirm() {\n this.resolve(null);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n ConfirmContentProps,\n ConfirmFooterRender,\n ConfirmModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { AbstractNode } from './AbstractNode';\n\ntype ConfirmNodeProps<B> = ConfirmModal<B> & ManagedEntity;\n\nexport class ConfirmNode<B> extends AbstractNode<boolean, B> {\n readonly type: 'confirm';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<ConfirmContentProps>;\n readonly footer?: ConfirmFooterRender | FooterOptions | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(false);\n }\n onConfirm() {\n this.resolve(true);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\n ManagedEntity,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n PromptModal,\n} from '@/promise-modal/types';\n\nimport { AbstractNode } from './AbstractNode';\n\ntype PromptNodeProps<T, B> = PromptModal<T, B> & ManagedEntity;\n\nexport class PromptNode<T, B> extends AbstractNode<T, B> {\n readonly type: 'prompt';\n readonly content?: ReactNode | ComponentType<PromptContentProps>;\n readonly defaultValue: T | undefined;\n readonly Input: (props: PromptInputProps<T>) => ReactNode;\n readonly disabled?: (value: T) => boolean;\n readonly returnOnCancel?: boolean;\n readonly footer?: PromptFooterRender<T> | FooterOptions | false;\n #value: T | undefined;\n\n constructor({\n id,\n initiator,\n type,\n title,\n subtitle,\n content,\n defaultValue,\n Input,\n disabled,\n returnOnCancel,\n footer,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n dimmed,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.content = content;\n this.Input = Input;\n this.defaultValue = defaultValue;\n this.#value = defaultValue;\n this.disabled = disabled;\n this.returnOnCancel = returnOnCancel;\n this.footer = footer;\n }\n\n onChange(value: T) {\n this.#value = value;\n }\n onConfirm() {\n this.resolve(this.#value ?? null);\n }\n onClose() {\n if (this.returnOnCancel) this.resolve(this.#value ?? null);\n else this.resolve(null);\n }\n}\n","import type { ManagedModal } from '@/promise-modal/types';\n\nimport { AlertNode, ConfirmNode, PromptNode } from './ModalNode';\n\nexport const nodeFactory = <T, B>(modal: ManagedModal<T, B>) => {\n switch (modal.type) {\n case 'alert':\n return new AlertNode<B>(modal);\n case 'confirm':\n return new ConfirmNode<B>(modal);\n case 'prompt':\n return new PromptNode<T, B>(modal);\n }\n // @ts-expect-error: This state is unreachable by design and should NEVER occur.\n throw new Error(`Unknown modal: ${modal.type}`, { modal });\n};\n","import { createContext } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport type { ModalActions, ModalHandlersWithId } from '@/promise-modal/types';\n\nexport interface ModalManagerContextProps extends ModalHandlersWithId {\n modalIds: ModalNode['id'][];\n getModal: Fn<[id: ModalNode['id']], ModalActions>;\n getModalNode: Fn<[id: ModalNode['id']], ModalNode | undefined>;\n setUpdater: Fn<[updater: Fn]>;\n}\n\nexport const ModalManagerContext = createContext<ModalManagerContextProps>(\n {} as ModalManagerContextProps,\n);\n","import {\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { convertMsFromDuration } from '@winglet/common-utils';\nimport { useOnMountLayout, useReference } from '@winglet/react-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport { type ModalNode, nodeFactory } from '@/promise-modal/core';\nimport { useConfigurationOptions } from '@/promise-modal/providers';\nimport type { Modal } from '@/promise-modal/types';\n\nimport { ModalManagerContext } from './ModalManagerContext';\n\ninterface ModalManagerContextProviderProps {\n usePathname: Fn<[], { pathname: string }>;\n}\n\nexport const ModalManagerContextProvider = memo(\n ({\n usePathname,\n children,\n }: PropsWithChildren<ModalManagerContextProviderProps>) => {\n const modalDictionary = useRef<Map<ModalNode['id'], ModalNode>>(new Map());\n\n const [modalIds, setModalIds] = useState<ModalNode['id'][]>([]);\n const modalIdsRef = useReference(modalIds);\n const { pathname } = usePathname();\n\n const initiator = useRef(pathname);\n const modalIdSequence = useRef(0);\n\n const options = useConfigurationOptions();\n\n const duration = useMemo(\n () => convertMsFromDuration(options.duration),\n [options],\n );\n\n useOnMountLayout(() => {\n const { manualDestroy, closeOnBackdropClick } = options;\n\n for (const data of ModalManager.prerender) {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => [...ids, modal.id]);\n }\n\n ModalManager.openHandler = (data: Modal) => {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => {\n const aliveIds = ids.filter((id) => {\n const destroyed = !modalDictionary.current.get(id)?.alive;\n if (destroyed) modalDictionary.current.delete(id);\n return !destroyed;\n });\n return [...aliveIds, modal.id];\n });\n };\n return () => {\n ModalManager.reset();\n };\n });\n\n useLayoutEffect(() => {\n for (const id of modalIdsRef.current) {\n const modal = modalDictionary.current.get(id);\n if (!modal?.alive) continue;\n if (modal.initiator === pathname) modal.onShow();\n else modal.onHide();\n }\n initiator.current = pathname;\n }, [modalIdsRef, pathname]);\n\n const getModalNode = useCallback((modalId: ModalNode['id']) => {\n return modalDictionary.current.get(modalId);\n }, []);\n\n const onDestroy = useCallback((modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onDestroy();\n updaterRef.current?.();\n }, []);\n\n const updaterRef = useRef<Fn>();\n const hideModal = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onHide();\n updaterRef.current?.();\n if (!modal.manualDestroy)\n setTimeout(() => {\n modal.onDestroy();\n }, duration);\n },\n [duration],\n );\n\n const onChange = useCallback((modalId: ModalNode['id'], value: any) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n if (modal.type === 'prompt') modal.onChange(value);\n }, []);\n\n const onConfirm = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onConfirm();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const onClose = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onClose();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const getModal = useCallback(\n (modalId: ModalNode['id']) => ({\n modal: getModalNode(modalId),\n onConfirm: () => onConfirm(modalId),\n onClose: () => onClose(modalId),\n onChange: (value: any) => onChange(modalId, value),\n onDestroy: () => onDestroy(modalId),\n }),\n [getModalNode, onConfirm, onClose, onChange, onDestroy],\n );\n\n const value = useMemo(() => {\n return {\n modalIds,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n getModal,\n setUpdater: (updater: Fn) => {\n updaterRef.current = updater;\n },\n };\n }, [\n modalIds,\n getModal,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n ]);\n\n return (\n <ModalManagerContext.Provider value={value}>\n {children}\n </ModalManagerContext.Provider>\n );\n },\n);\n","import { useContext, useMemo } from 'react';\n\nimport type { ManagedModal } from '@/promise-modal/types';\n\nimport { ModalManagerContext } from './ModalManagerContext';\n\nexport const useModalManagerContext = () => useContext(ModalManagerContext);\n\nexport const useModal = (id: ManagedModal['id']) => {\n const { getModal } = useModalManagerContext();\n return useMemo(() => getModal(id), [id, getModal]);\n};\n","import { css } from '@emotion/css';\n\nexport const fallback = css`\n margin: unset;\n`;\n\nexport const frame = css`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: white;\n padding: 20px 80px;\n gap: 10px;\n border: 1px solid black;\n`;\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={fallback}>{children}</div>;\n};\n","import type { FooterComponentProps } from '@/promise-modal/types';\n\nexport const FallbackFooter = ({\n confirmLabel,\n hideConfirm = false,\n cancelLabel,\n hideCancel = false,\n disabled,\n onConfirm,\n onCancel,\n}: FooterComponentProps) => {\n return (\n <div>\n {!hideConfirm && (\n <button onClick={onConfirm} disabled={disabled}>\n {confirmLabel || '확인'}\n </button>\n )}\n\n {!hideCancel && typeof onCancel === 'function' && (\n <button onClick={onCancel}>{cancelLabel || '취소'}</button>\n )}\n </div>\n );\n};\n","import { useMemo } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport { useModalManagerContext } from '@/promise-modal/providers';\n\nconst defaultValidate = (modal?: ModalNode) => modal?.visible;\n\nexport const useActiveModalCount = (\n validate: Fn<[ModalNode?], boolean | undefined> = defaultValidate,\n refreshKey: string | number = 0,\n) => {\n const { modalIds, getModalNode } = useModalManagerContext();\n return useMemo(() => {\n let count = 0;\n for (const id of modalIds) {\n if (validate(getModalNode(id))) count++;\n }\n return count;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getModalNode, modalIds, refreshKey]);\n};\n","import {\n type ForwardedRef,\n type PropsWithChildren,\n forwardRef,\n useMemo,\n} from 'react';\n\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport type { ModalFrameProps } from '@/promise-modal/types';\n\nimport { frame } from './classNames.emotion';\n\nconst MAX_MODAL_COUNT = 5;\nconst MAX_MODAL_LEVEL = 3;\n\nexport const FallbackForegroundFrame = forwardRef(\n (\n { id, onChangeOrder, children }: PropsWithChildren<ModalFrameProps>,\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const activeCount = useActiveModalCount();\n const [level, offset] = useMemo(() => {\n const stacked = activeCount > 1;\n const level = stacked\n ? (Math.floor(id / MAX_MODAL_COUNT) % MAX_MODAL_LEVEL) * 100\n : 0;\n const offset = stacked ? (id % MAX_MODAL_COUNT) * 35 : 0;\n return [level, offset];\n }, [activeCount, id]);\n\n return (\n <div\n ref={ref}\n className={frame}\n onClick={onChangeOrder}\n style={{\n marginBottom: `calc(25vh + ${level}px)`,\n marginLeft: `${level}px`,\n transform: `translate(${offset}px, ${offset}px)`,\n }}\n >\n {children}\n </div>\n );\n },\n);\n","import { type ComponentType, createContext } from 'react';\n\nimport type { Color, Duration } from '@aileron/types';\n\nimport type {\n BackgroundComponent,\n FooterComponentProps,\n ForegroundComponent,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nexport interface ConfigurationContextProps {\n ForegroundComponent: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n TitleComponent: ComponentType<WrapperComponentProps>;\n SubtitleComponent: ComponentType<WrapperComponentProps>;\n ContentComponent: ComponentType<WrapperComponentProps>;\n FooterComponent: ComponentType<FooterComponentProps>;\n options: {\n duration: Duration;\n backdrop: Color;\n manualDestroy: boolean;\n closeOnBackdropClick: boolean;\n };\n}\n\nexport const ConfigurationContext = createContext<ConfigurationContextProps>(\n {} as ConfigurationContextProps,\n);\n","import {\n type ComponentType,\n type PropsWithChildren,\n memo,\n useMemo,\n} from 'react';\n\nimport type { Color, Duration } from '@aileron/types';\n\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport type {\n FooterComponentProps,\n ModalFrameProps,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nimport { ConfigurationContext } from './ConfigurationContext';\n\nexport interface ConfigurationContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<WrapperComponentProps>;\n SubtitleComponent?: ComponentType<WrapperComponentProps>;\n ContentComponent?: ComponentType<WrapperComponentProps>;\n FooterComponent?: ComponentType<FooterComponentProps>;\n options?: {\n /** Modal transition time(ms, s) */\n duration?: Duration;\n /** Modal backdrop color */\n backdrop?: Color;\n /** Whether to destroy the modal manually */\n manualDestroy?: boolean;\n /** Whether to close the modal when the backdrop is clicked */\n closeOnBackdropClick?: boolean;\n };\n}\n\nexport const ConfigurationContextProvider = memo(\n ({\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n options,\n children,\n }: PropsWithChildren<ConfigurationContextProviderProps>) => {\n const value = useMemo(\n () => ({\n BackgroundComponent,\n ForegroundComponent: ForegroundComponent || FallbackForegroundFrame,\n TitleComponent: TitleComponent || FallbackTitle,\n SubtitleComponent: SubtitleComponent || FallbackSubtitle,\n ContentComponent: memo(ContentComponent || FallbackContent),\n FooterComponent: memo(FooterComponent || FallbackFooter),\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n closeOnBackdropClick: true,\n manualDestroy: false,\n ...options,\n } satisfies ConfigurationContextProviderProps['options'],\n }),\n [\n ForegroundComponent,\n BackgroundComponent,\n ContentComponent,\n FooterComponent,\n SubtitleComponent,\n TitleComponent,\n options,\n ],\n );\n return (\n <ConfigurationContext.Provider value={value}>\n {children}\n </ConfigurationContext.Provider>\n );\n },\n);\n","import type { Color, Duration } from '@aileron/types';\n\nexport const DEFAULT_ANIMATION_DURATION: Duration = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR: Color = 'rgba(0, 0, 0, 0.5)';\n","import { useContext } from 'react';\n\nimport { convertMsFromDuration } from '@winglet/common-utils';\n\nimport { ConfigurationContext } from './ConfigurationContext';\n\nexport const useConfigurationContext = () => useContext(ConfigurationContext);\n\nexport const useConfigurationOptions = () => {\n const context = useContext(ConfigurationContext);\n return context.options;\n};\n\nexport const useConfigurationDuration = () => {\n const context = useConfigurationOptions();\n return {\n duration: context.duration,\n milliseconds: convertMsFromDuration(context.duration),\n };\n};\n\nexport const useConfigurationBackdrop = () => {\n const context = useConfigurationOptions();\n return context.backdrop;\n};\n","import { createContext } from 'react';\n\nimport type { Dictionary } from '@aileron/types';\n\nexport interface UserDefinedContext {\n context: Dictionary;\n}\n\nexport const UserDefinedContext = createContext<UserDefinedContext>(\n {} as UserDefinedContext,\n);\n","import { PropsWithChildren, useMemo } from 'react';\n\nimport type { Dictionary } from '@aileron/types';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\ninterface UserDefinedContextProviderProps {\n /** 사용자 정의 컨텍스트 */\n context?: Dictionary;\n}\n\nexport const UserDefinedContextProvider = ({\n context,\n children,\n}: PropsWithChildren<UserDefinedContextProviderProps>) => {\n const contextValue = useMemo(() => ({ context: context || {} }), [context]);\n return (\n <UserDefinedContext.Provider value={contextValue}>\n {children}\n </UserDefinedContext.Provider>\n );\n};\n","import { useContext } from 'react';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\nexport const useUserDefinedContext = () => {\n return useContext(UserDefinedContext);\n};\n","import { css } from '@emotion/css';\n\nexport const background = css`\n display: none;\n position: fixed;\n inset: 0;\n z-index: -999;\n pointer-events: none;\n > * {\n pointer-events: none;\n }\n`;\n\nexport const active = css`\n pointer-events: all;\n`;\n\nexport const visible = css`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n","import { type MouseEvent, useCallback, useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport {\n useConfigurationContext,\n useModal,\n useUserDefinedContext,\n} from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, background, visible } from './classNames.emotion';\n\nexport const BackgroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { BackgroundComponent } = useConfigurationContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n const { modal, onClose, onChange, onConfirm, onDestroy } = useModal(modalId);\n\n const handleClose = useCallback(\n (event: MouseEvent) => {\n if (modal && modal.closeOnBackdropClick && modal.visible) onClose();\n event.stopPropagation();\n },\n [modal, onClose],\n );\n\n const Background = useMemo(\n () => modal?.BackgroundComponent || BackgroundComponent,\n [BackgroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(background, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.closeOnBackdropClick && modal.visible,\n })}\n onClick={handleClose}\n >\n {Background && (\n <Background\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n />\n )}\n </div>\n );\n};\n","import { css } from '@emotion/css';\n\nexport const foreground = css`\n pointer-events: none;\n display: none;\n position: fixed;\n inset: 0;\n z-index: 1;\n`;\n\nexport const active = css`\n > * {\n pointer-events: all;\n }\n`;\n\nexport const visible = css`\n display: flex !important;\n justify-content: center;\n align-items: center;\n`;\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { AlertNode } from '@/promise-modal/core';\nimport {\n useConfigurationContext,\n useUserDefinedContext,\n} from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useConfigurationContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { ConfirmNode } from '@/promise-modal/core';\nimport {\n useConfigurationContext,\n useUserDefinedContext,\n} from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface ConfirmInnerProps<B> {\n modal: ConfirmNode<B>;\n handlers: Pick<ModalActions, 'onConfirm' | 'onClose'>;\n}\n\nexport const ConfirmInner = memo(\n <B,>({ modal, handlers }: ConfirmInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm, onClose } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n const handleClose = useHandle(onClose);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useConfigurationContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport {\n renderComponent,\n useHandle,\n withErrorBoundary,\n} from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport {\n useConfigurationContext,\n useUserDefinedContext,\n} from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(withErrorBoundary(modal.Input)),\n }),\n [modal],\n );\n\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const [value, setValue] = useState<T | undefined>(defaultValue);\n\n const { onChange, onClose, onConfirm } = useMemo(\n () => handlers,\n [handlers],\n );\n\n const handleClose = useHandle(onClose);\n const handleChange = useHandle(\n (inputValue?: T | ((prevState: T | undefined) => T | undefined)) => {\n const input = isFunction(inputValue) ? inputValue(value) : inputValue;\n setValue(input);\n onChange(input);\n },\n );\n\n const handleConfirm = useCallback(() => {\n // NOTE: wait for the next tick to ensure the value is updated\n setTimeout(() => {\n onConfirm();\n });\n }, [onConfirm]);\n\n const disabled = useMemo(\n () => (value ? !!checkDisabled?.(value) : false),\n [checkDisabled, value],\n );\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useConfigurationContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n context={userDefinedContext}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n value,\n disabled,\n onChange: handleChange,\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n disabled={disabled}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport {\n useConfigurationContext,\n useModal,\n useUserDefinedContext,\n} from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, foreground, visible } from './classNames.emotion';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const ForegroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { ForegroundComponent } = useConfigurationContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n const Foreground = useMemo(\n () => modal?.ForegroundComponent || ForegroundComponent,\n [ForegroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(foreground, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.visible,\n })}\n >\n <Foreground\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n >\n {modal.type === 'alert' && (\n <AlertInner modal={modal} handlers={{ onConfirm }} />\n )}\n {modal.type === 'confirm' && (\n <ConfirmInner modal={modal} handlers={{ onConfirm, onClose }} />\n )}\n {modal.type === 'prompt' && (\n <PromptInner\n modal={modal}\n handlers={{ onChange, onConfirm, onClose }}\n />\n )}\n </Foreground>\n </div>\n );\n};\n","import { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { ModalNode } from '@/promise-modal/core';\n\nexport const useSubscribeModal = (modal?: ModalNode) => {\n const [tick, update] = useTick();\n useOnMount(() => {\n if (!modal) return;\n const unsubscribe = modal.subscribe(update);\n return unsubscribe;\n });\n return tick;\n};\n","import { css } from '@emotion/css';\n\nexport const presenter = css`\n position: fixed;\n inset: 0;\n pointer-events: none;\n overflow: hidden;\n`;\n","import { memo, useRef } from 'react';\n\nimport { counterFactory } from '@winglet/common-utils';\nimport { useHandle } from '@winglet/react-utils';\n\nimport { Background } from '@/promise-modal/components/Background';\nimport { Foreground } from '@/promise-modal/components/Foreground';\nimport { useSubscribeModal } from '@/promise-modal/hooks/useSubscribeModal';\nimport { useModal } from '@/promise-modal/providers';\nimport type { ModalIdProps } from '@/promise-modal/types';\n\nimport { presenter } from './classNames.emotion';\n\nconst { increment } = counterFactory(1);\n\nexport const Presenter = memo(({ modalId }: ModalIdProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { modal } = useModal(modalId);\n useSubscribeModal(modal);\n const handleChangeOrder = useHandle(() => {\n if (ref.current) {\n ref.current.style.zIndex = `${increment()}`;\n }\n });\n return (\n <div ref={ref} className={presenter}>\n <Background modalId={modalId} onChangeOrder={handleChangeOrder} />\n <Foreground modalId={modalId} onChangeOrder={handleChangeOrder} />\n </div>\n );\n});\n","import { css } from '@emotion/css';\n\nexport const anchor = css`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 1000;\n transition: background-color ease-in-out;\n`;\n","import { memo, useEffect } from 'react';\n\nimport { useTick, withErrorBoundary } from '@winglet/react-utils';\n\nimport { Presenter } from '@/promise-modal/components/Presenter';\nimport type { ModalNode } from '@/promise-modal/core';\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport {\n useConfigurationOptions,\n useModalManagerContext,\n} from '@/promise-modal/providers';\n\nimport { anchor } from './classNames.emotion';\n\nconst AnchorInner = () => {\n const [refreshKey, update] = useTick();\n\n const { modalIds, setUpdater } = useModalManagerContext();\n\n useEffect(() => {\n setUpdater(update);\n }, [setUpdater, update]);\n\n const options = useConfigurationOptions();\n\n const dimmed = useActiveModalCount(validateDimmable, refreshKey);\n\n return (\n <div\n className={anchor}\n style={{\n transitionDuration: options.duration,\n backgroundColor: dimmed ? options.backdrop : 'transparent',\n }}\n >\n {modalIds.map((id) => {\n return <Presenter key={id} modalId={id} />;\n })}\n </div>\n );\n};\n\nconst validateDimmable = (modal?: ModalNode) => modal?.visible && modal.dimmed;\n\nexport const Anchor = memo(withErrorBoundary(AnchorInner));\n","import { createPortal } from 'react-dom';\n\nimport type { Dictionary, Fn } from '@aileron/types';\n\nimport { Anchor } from '@/promise-modal/components/Anchor';\nimport {\n ConfigurationContextProvider,\n type ConfigurationContextProviderProps,\n} from '@/promise-modal/providers/ConfigurationContext';\nimport { ModalManagerContextProvider } from '@/promise-modal/providers/ModalManagerContext';\nimport { UserDefinedContextProvider } from '@/promise-modal/providers/UserDefinedContext';\n\ninterface BootstrapProps extends ConfigurationContextProviderProps {\n usePathname: Fn<[], { pathname: string }>;\n context?: Dictionary;\n anchor: HTMLElement;\n}\n\nexport const bootstrap = ({\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n usePathname,\n options,\n context,\n anchor,\n}: BootstrapProps) =>\n createPortal(\n <UserDefinedContextProvider context={context}>\n <ConfigurationContextProvider\n ForegroundComponent={ForegroundComponent}\n BackgroundComponent={BackgroundComponent}\n TitleComponent={TitleComponent}\n SubtitleComponent={SubtitleComponent}\n ContentComponent={ContentComponent}\n FooterComponent={FooterComponent}\n options={options}\n >\n <ModalManagerContextProvider usePathname={usePathname}>\n <Anchor />\n </ModalManagerContextProvider>\n </ConfigurationContextProvider>\n </UserDefinedContextProvider>,\n anchor,\n );\n","import { useLayoutEffect, useState } from 'react';\n\nexport const usePathname = () => {\n const [pathname, setPathname] = useState(window.location.pathname);\n useLayoutEffect(() => {\n let requestId: number;\n const checkPathname = () => {\n if (requestId) cancelAnimationFrame(requestId);\n if (pathname !== window.location.pathname) {\n setPathname(window.location.pathname);\n } else {\n requestId = requestAnimationFrame(checkPathname);\n }\n };\n requestId = requestAnimationFrame(checkPathname);\n return () => {\n if (requestId) cancelAnimationFrame(requestId);\n };\n }, [pathname]);\n return { pathname };\n};\n","import {\n Fragment,\n type PropsWithChildren,\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\n\nimport { printError } from '@winglet/common-utils';\nimport { useOnMount, useTick } from '@winglet/react-utils';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport { usePathname as useDefaultPathname } from '@/promise-modal/hooks/useDefaultPathname';\n\nimport { bootstrap } from '../bootstrap';\nimport type { BootstrapProviderHandle, BootstrapProviderProps } from './type';\n\nexport const BootstrapProvider = forwardRef<\n BootstrapProviderHandle,\n PropsWithChildren<BootstrapProviderProps>\n>(\n (\n {\n usePathname: useExternalPathname,\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n options,\n context,\n children,\n },\n handleRef,\n ) => {\n const usePathname = useMemo(\n () => useExternalPathname || useDefaultPathname,\n [useExternalPathname],\n );\n const permitted = useRef(ModalManager.activate());\n const anchorRef = useRef<HTMLElement | null>(null);\n const [, update] = useTick();\n\n const handleInitialize = useCallback(\n (root?: HTMLElement) => {\n if (permitted.current) {\n anchorRef.current = ModalManager.anchor({ root });\n update();\n } else\n printError(\n 'ModalProvider is already initialized',\n [\n 'ModalProvider can only be initialized once.',\n 'Nesting ModalProvider will be ignored...',\n ],\n {\n info: 'Something is wrong with the ModalProvider initialization...',\n },\n );\n },\n [update],\n );\n\n useImperativeHandle(\n handleRef,\n () => ({\n initialize: handleInitialize,\n }),\n [handleInitialize],\n );\n\n useOnMount(() => {\n /**\n * NOTE: `handleRef` being null indicates that no `ref` was provided.\n * In this case, the `ModalProvider`(=`BootstrapProvider`) is not receiving the `ref`,\n * so it should be initialized automatically.\n */\n if (handleRef === null) handleInitialize();\n return () => {\n if (anchorRef.current) anchorRef.current.remove();\n };\n });\n\n return (\n <Fragment>\n {children}\n {anchorRef.current &&\n bootstrap({\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n usePathname,\n options,\n context,\n anchor: anchorRef.current,\n })}\n </Fragment>\n );\n },\n);\n","import { useEffect, useRef } from 'react';\n\nimport { convertMsFromDuration, isString } from '@winglet/common-utils';\n\nimport type { Duration } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport { useModal } from '@/promise-modal/providers';\n\nimport { useSubscribeModal } from './useSubscribeModal';\n\nexport const useDestroyAfter = (\n modalId: ModalNode['id'],\n duration: Duration | number,\n) => {\n const { modal, onDestroy } = useModal(modalId);\n const tick = useSubscribeModal(modal);\n\n const reference = useRef({\n modal,\n onDestroy,\n milliseconds: isString(duration)\n ? convertMsFromDuration(duration)\n : duration,\n });\n\n useEffect(() => {\n const { modal, onDestroy, milliseconds } = reference.current;\n if (!modal || modal.visible || !modal.alive) return;\n const timer = setTimeout(() => {\n onDestroy();\n }, milliseconds);\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [tick]);\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\ninterface ModalAnimationHandler {\n onVisible?: Fn;\n onHidden?: Fn;\n}\n\nexport const useModalAnimation = (\n visible: boolean,\n handler: ModalAnimationHandler,\n) => {\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n useLayoutEffect(() => {\n if (!handlerRef.current) return;\n let frame: ReturnType<typeof requestAnimationFrame>;\n if (visible)\n frame = requestAnimationFrame(() => handlerRef.current.onVisible?.());\n else frame = requestAnimationFrame(() => handlerRef.current.onHidden?.());\n return () => {\n if (frame) cancelAnimationFrame(frame);\n };\n }, [visible]);\n};\n"],"names":["ModalManager","activate","__classPrivateFieldGet","_a","_ModalManager_active","__classPrivateFieldSet","anchor","options","_ModalManager_anchor","document","getElementById","id","tag","prefix","root","body","node","createElement","setAttribute","getRandomString","appendChild","prerender","_ModalManager_prerenderList","openHandler","handler","_ModalManager_openHandler","unanchored","reset","modal","push","open","call","value","alert","subtype","title","subtitle","content","background","footer","dimmed","manualDestroy","closeOnBackdropClick","ForegroundComponent","BackgroundComponent","Promise","resolve","reject","type","error","confirm","result","prompt","defaultValue","Input","disabled","returnOnCancel","AbstractNode","alive","this","_AbstractNode_alive","visible","_AbstractNode_visible","constructor","initiator","Object","defineProperty","set","_AbstractNode_resolve","_AbstractNode_listeners","subscribe","listener","filter","l","publish","onDestroy","needPublish","onShow","onHide","AlertNode","super","onClose","onConfirm","ConfirmNode","PromptNode","_PromptNode_value","onChange","nodeFactory","Error","ModalManagerContext","createContext","ModalManagerContextProvider","memo","usePathname","children","modalDictionary","useRef","Map","modalIds","setModalIds","useState","modalIdsRef","useReference","pathname","modalIdSequence","useConfigurationOptions","duration","useMemo","convertMsFromDuration","useOnMountLayout","data","current","undefined","ids","destroyed","get","delete","useLayoutEffect","getModalNode","useCallback","modalId","updaterRef","hideModal","setTimeout","getModal","setUpdater","updater","_jsx","Provider","useModalManagerContext","useContext","useModal","fallback","css","process","env","NODE_ENV","name","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","frame","FallbackTitle","className","FallbackSubtitle","FallbackContent","FallbackFooter","confirmLabel","hideConfirm","cancelLabel","hideCancel","onCancel","_jsxs","onClick","defaultValidate","useActiveModalCount","validate","refreshKey","count","FallbackForegroundFrame","forwardRef","onChangeOrder","ref","activeCount","level","offset","stacked","Math","floor","style","marginBottom","marginLeft","transform","ConfigurationContext","ConfigurationContextProvider","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","backdrop","useConfigurationContext","useConfigurationDuration","context","milliseconds","useConfigurationBackdrop","UserDefinedContext","UserDefinedContextProvider","contextValue","useUserDefinedContext","active","BackgroundFrame","userDefinedContext","handleClose","event","stopPropagation","Background","cx","visible$1","active$1","foreground","AlertInner","handlers","handleConfirm","useHandle","Fragment","isString","renderComponent","ConfirmInner","cancel","PromptInner","checkDisabled","withErrorBoundary","setValue","handleChange","inputValue","input","isFunction","ForegroundFrame","Foreground","useSubscribeModal","tick","update","useTick","useOnMount","presenter","increment","counterFactory","Presenter","handleChangeOrder","zIndex","validateDimmable","Anchor","useEffect","transitionDuration","backgroundColor","map","bootstrap","createPortal","setPathname","window","location","requestId","checkPathname","cancelAnimationFrame","requestAnimationFrame","BootstrapProvider","useExternalPathname","handleRef","useDefaultPathname","permitted","anchorRef","handleInitialize","printError","info","useImperativeHandle","initialize","remove","useDestroyAfter","reference","timer","clearTimeout","useModalAnimation","handlerRef","onVisible","onHidden"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { type ComponentType } from 'react';
2
2
  import type { Color, Duration } from '../../@aileron/types';
3
3
  import type { BackgroundComponent, FooterComponentProps, ForegroundComponent, WrapperComponentProps } from '../../types';
4
- export interface ModalContextProps {
4
+ export interface ConfigurationContextProps {
5
5
  ForegroundComponent: ForegroundComponent;
6
6
  BackgroundComponent?: BackgroundComponent;
7
7
  TitleComponent: ComponentType<WrapperComponentProps>;
@@ -15,5 +15,5 @@ export interface ModalContextProps {
15
15
  closeOnBackdropClick: boolean;
16
16
  };
17
17
  }
18
- export declare const ModalContext: import("react").Context<ModalContextProps>;
19
- //# sourceMappingURL=ModalContext.d.ts.map
18
+ export declare const ConfigurationContext: import("react").Context<ConfigurationContextProps>;
19
+ //# sourceMappingURL=ConfigurationContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigurationContext.d.ts","sourceRoot":"","sources":["../../../src/providers/ConfigurationContext/ConfigurationContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,OAAO,CAAC;AAE1D,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,cAAc,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACrD,iBAAiB,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD,gBAAgB,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACvD,eAAe,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACrD,OAAO,EAAE;QACP,QAAQ,EAAE,QAAQ,CAAC;QACnB,QAAQ,EAAE,KAAK,CAAC;QAChB,aAAa,EAAE,OAAO,CAAC;QACvB,oBAAoB,EAAE,OAAO,CAAC;KAC/B,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB,oDAEhC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type ComponentType, type PropsWithChildren } from 'react';
2
- import type { Color, Dictionary, Duration } from '../../@aileron/types';
2
+ import type { Color, Duration } from '../../@aileron/types';
3
3
  import type { FooterComponentProps, ModalFrameProps, WrapperComponentProps } from '../../types';
4
- interface ModalContextProviderProps {
4
+ export interface ConfigurationContextProviderProps {
5
5
  BackgroundComponent?: ComponentType<ModalFrameProps>;
6
6
  ForegroundComponent?: ComponentType<ModalFrameProps>;
7
7
  TitleComponent?: ComponentType<WrapperComponentProps>;
@@ -14,11 +14,6 @@ interface ModalContextProviderProps {
14
14
  manualDestroy?: boolean;
15
15
  closeOnBackdropClick?: boolean;
16
16
  };
17
- context?: Dictionary;
18
- usePathname?: () => {
19
- pathname: string;
20
- };
21
17
  }
22
- export declare const ModalContextProvider: import("react").MemoExoticComponent<({ ForegroundComponent, BackgroundComponent, TitleComponent, SubtitleComponent, ContentComponent, FooterComponent, options, context, usePathname, children, }: PropsWithChildren<ModalContextProviderProps>) => import("react/jsx-runtime").JSX.Element>;
23
- export {};
24
- //# sourceMappingURL=ModalContextProvider.d.ts.map
18
+ export declare const ConfigurationContextProvider: import("react").MemoExoticComponent<({ ForegroundComponent, BackgroundComponent, TitleComponent, SubtitleComponent, ContentComponent, FooterComponent, options, children, }: PropsWithChildren<ConfigurationContextProviderProps>) => import("react/jsx-runtime").JSX.Element>;
19
+ //# sourceMappingURL=ConfigurationContextProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigurationContextProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/ConfigurationContext/ConfigurationContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAGvB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAatD,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,iCAAiC;IAChD,mBAAmB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACrD,mBAAmB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACtD,iBAAiB,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACzD,gBAAgB,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE;QAER,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAEpB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAEjB,aAAa,CAAC,EAAE,OAAO,CAAC;QAExB,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,4BAA4B,+KAUpC,iBAAiB,CAAC,iCAAiC,CAAC,6CAiCxD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ConfigurationContextProvider, type ConfigurationContextProviderProps, } from './ConfigurationContextProvider';
2
+ export { useConfigurationContext, useConfigurationOptions, useConfigurationDuration, useConfigurationBackdrop, } from './useConfigurationContext';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ConfigurationContext/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,KAAK,iCAAiC,GACvC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare const useConfigurationContext: () => import("./ConfigurationContext").ConfigurationContextProps;
2
+ export declare const useConfigurationOptions: () => {
3
+ duration: import("../../../@aileron/types").Duration;
4
+ backdrop: import("../../../@aileron/types").Color;
5
+ manualDestroy: boolean;
6
+ closeOnBackdropClick: boolean;
7
+ };
8
+ export declare const useConfigurationDuration: () => {
9
+ duration: `${number}ms`;
10
+ milliseconds: number;
11
+ };
12
+ export declare const useConfigurationBackdrop: () => import("../../../@aileron/types").Color;
13
+ //# sourceMappingURL=useConfigurationContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConfigurationContext.d.ts","sourceRoot":"","sources":["../../../src/providers/ConfigurationContext/useConfigurationContext.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB,kEAAyC,CAAC;AAE9E,eAAO,MAAM,uBAAuB;;;;;CAGnC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;CAMpC,CAAC;AAEF,eAAO,MAAM,wBAAwB,+CAGpC,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import type { Fn } from '../../@aileron/types';
2
2
  import type { ModalNode } from '../../core';
3
3
  import type { ModalActions, ModalHandlersWithId } from '../../types';
4
- export interface ModalDataContextProps extends ModalHandlersWithId {
4
+ export interface ModalManagerContextProps extends ModalHandlersWithId {
5
5
  modalIds: ModalNode['id'][];
6
6
  getModal: Fn<[id: ModalNode['id']], ModalActions>;
7
7
  getModalNode: Fn<[id: ModalNode['id']], ModalNode | undefined>;
8
8
  setUpdater: Fn<[updater: Fn]>;
9
9
  }
10
- export declare const ModalDataContext: import("react").Context<ModalDataContextProps>;
11
- //# sourceMappingURL=ModalDataContext.d.ts.map
10
+ export declare const ModalManagerContext: import("react").Context<ModalManagerContextProps>;
11
+ //# sourceMappingURL=ModalManagerContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalManagerContext.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalManagerContext/ModalManagerContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5B,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAClD,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAC/D,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;CAC/B;AAED,eAAO,MAAM,mBAAmB,mDAE/B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type PropsWithChildren } from 'react';
2
+ import type { Fn } from '../../@aileron/types';
3
+ interface ModalManagerContextProviderProps {
4
+ usePathname: Fn<[], {
5
+ pathname: string;
6
+ }>;
7
+ }
8
+ export declare const ModalManagerContextProvider: import("react").MemoExoticComponent<({ usePathname, children, }: PropsWithChildren<ModalManagerContextProviderProps>) => import("react/jsx-runtime").JSX.Element>;
9
+ export {};
10
+ //# sourceMappingURL=ModalManagerContextProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalManagerContextProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalManagerContext/ModalManagerContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAOvB,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AASzC,UAAU,gCAAgC;IACxC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,2BAA2B,mEAInC,iBAAiB,CAAC,gCAAgC,CAAC,6CAyKvD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ModalManagerContextProvider } from './ModalManagerContextProvider';
2
+ export { useModalManagerContext, useModal } from './useModalManagerContext';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalManagerContext/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ManagedModal } from '../../types';
2
+ export declare const useModalManagerContext: () => import("./ModalManagerContext").ModalManagerContextProps;
3
+ export declare const useModal: (id: ManagedModal["id"]) => import("../../types").ModalActions;
4
+ //# sourceMappingURL=useModalManagerContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModalManagerContext.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalManagerContext/useModalManagerContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,eAAO,MAAM,sBAAsB,gEAAwC,CAAC;AAE5E,eAAO,MAAM,QAAQ,OAAQ,YAAY,CAAC,IAAI,CAAC,iDAG9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserDefinedContext.d.ts","sourceRoot":"","sources":["../../../src/providers/UserDefinedContext/UserDefinedContext.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,6CAE7B,CAAC"}
1
+ {"version":3,"file":"UserDefinedContext.d.ts","sourceRoot":"","sources":["../../../src/providers/UserDefinedContext/UserDefinedContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,6CAE9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserDefinedContextProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/UserDefinedContext/UserDefinedContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAW,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,UAAU,+BAA+B;IAEvC,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED,eAAO,MAAM,0BAA0B,2BAGpC,iBAAiB,CAAC,+BAA+B,CAAC,4CAUpD,CAAC"}
1
+ {"version":3,"file":"UserDefinedContextProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/UserDefinedContext/UserDefinedContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAW,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,UAAU,+BAA+B;IAEvC,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED,eAAO,MAAM,0BAA0B,2BAGpC,iBAAiB,CAAC,+BAA+B,CAAC,4CAOpD,CAAC"}
@@ -1,3 +1,4 @@
1
- export { ModalContextProvider, useModalContext, useModalOptions, useModalDuration, useModalBackdrop, } from './ModalContext';
2
- export { ModalDataContextProvider, useModalDataContext, useModal, } from './ModalDataContext';
1
+ export { useModalManagerContext, useModal } from './ModalManagerContext';
2
+ export { useConfigurationContext, useConfigurationOptions, useConfigurationDuration, useConfigurationBackdrop, } from './ConfigurationContext';
3
+ export { useUserDefinedContext } from './UserDefinedContext';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,QAAQ,GACT,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lerx/promise-modal",
3
- "version": "0.0.33",
3
+ "version": "0.0.35",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/vincent-kk/albatrion.git",
@@ -41,8 +41,8 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@emotion/css": "^11.0.0",
44
- "@winglet/common-utils": "^0.0.33",
45
- "@winglet/react-utils": "^0.0.33"
44
+ "@winglet/common-utils": "^0.0.35",
45
+ "@winglet/react-utils": "^0.0.35"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@babel/core": "^7.26.0",
@@ -1,2 +0,0 @@
1
- export declare const getMillisecondsFromDuration: (input: string) => number;
2
- //# sourceMappingURL=getMillisecondsFromDuration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getMillisecondsFromDuration.d.ts","sourceRoot":"","sources":["../../src/helpers/getMillisecondsFromDuration.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,UAAW,MAAM,WASxD,CAAC"}