react-modal-port 0.1.3 → 0.1.4
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.
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.modern.mjs.map +1 -0
- package/dist/index.umd.js.map +1 -0
- package/package.json +11 -11
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/index.modern.mjs.map +0 -1
- package/dist/umd/index.umd.js.map +0 -1
- /package/dist/{cjs/index.cjs → index.cjs} +0 -0
- /package/dist/{esm/index.mjs → index.mjs} +0 -0
- /package/dist/{esm/index.modern.mjs → index.modern.mjs} +0 -0
- /package/dist/{umd/index.umd.js → index.umd.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/context.tsx","../src/modal-port.tsx"],"sourcesContent":["import { \n createContext, \n useContext, \n useState, \n type SyntheticEvent \n} from 'react';\nimport { \n type ModalStackItem,\n type ModalContextProperties,\n type LaunchModal,\n type LaunchModalResolvers,\n type ModalState,\n type UpdateModalState,\n} from '../types';\n\nexport const ModalContext = createContext<ModalContextProperties>({\n stack: [],\n launchModal: () => {},\n updateStack: () => {},\n updateState: () => {},\n});\n\nexport const ModalContextProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {\n\n const [ stack, updateStack ] = useState<ModalStackItem[]>([]);\n\n const launchModal: LaunchModal = (render, resolvers, onBackdropClickUse) => {\n // Wrap resolvers to update the stack\n const wrappedResovers = Object.keys(resolvers).reduce((acc, key) => {\n const resolver = resolvers[key];\n acc[key] = async (ev?: SyntheticEvent) => {\n const result = await resolver(ev);\n updateStack(stack.slice(0, -1));\n return result;\n };\n return acc;\n }, {} as LaunchModalResolvers);\n updateStack([\n ...stack,\n {\n render,\n resolvers: wrappedResovers,\n onBackdropClickUse,\n state: {},\n },\n ]);\n };\n\n const updateState = (newState: ModalState) => {\n const updatedStack = [\n ...stack,\n ];\n updatedStack[stack.length - 1].state = { ...newState };\n updateStack(updatedStack);\n };\n\n const contextProperties: ModalContextProperties = {\n stack,\n launchModal,\n updateStack,\n updateState,\n };\n\n return <ModalContext.Provider value={contextProperties}>{children}</ModalContext.Provider>;\n\n};\n\n/**\n * Get properties from the modal context\n * @returns {ModalContextProperties} Object with the modal context properties\n */\nexport function useModalContext(): ModalContextProperties {\n return useContext(ModalContext);\n}\n\n/**\n * Short-hand for `useModalContext().launchModal`\n * @returns {LaunchModal} The launchModal function\n */\nexport function useModal(): LaunchModal {\n const { launchModal } = useModalContext();\n return launchModal;\n}\n\n/**\n * Get access to the current modal state and a function to update it\n * @returns {[ ModalState, UpdateModalState ]} A tuple with the current modal state and a function to update it\n */\nexport function useModalState(): [ ModalState, UpdateModalState ] {\n const { stack, updateState } = useModalContext();\n if (stack.length === 0) \n throw new Error('Trying to access modal state while no modal is open');\n const state = stack[stack.length - 1].state;\n return [ state, updateState ];\n}\n","import { \n type ModalPortProps, \n type ModalStackItem \n} from \"../types\";\nimport { useModalContext } from \"./context\";\nimport { \n type SyntheticEvent, \n useCallback, \n useEffect, \n useMemo\n} from \"react\";\n\nconst ModalPort: React.FC<ModalPortProps> = ({\n onModalLaunch,\n onModalClose,\n render: Backdrop\n}) => {\n\n const { stack } = useModalContext();\n const currentModal: ModalStackItem | null = useMemo(\n () => stack.length > 0 ? stack[stack.length - 1] : null,\n [ stack ]\n );\n const onBackdropClick = useCallback((ev: SyntheticEvent) => {\n if (ev.currentTarget !== ev.target) return;\n currentModal?.onBackdropClickUse &&\n currentModal.resolvers[currentModal.onBackdropClickUse](ev);\n }, [ currentModal ]);\n\n useEffect(() => {\n if (currentModal) {\n onModalLaunch && onModalLaunch();\n } else {\n onModalClose && onModalClose();\n }\n }, [ currentModal, onModalLaunch, onModalClose ]);\n\n return currentModal && (\n <Backdrop onBackdropClick={onBackdropClick}>\n {currentModal.render(currentModal.resolvers)}\n </Backdrop>\n ) || null;\n};\n\nexport default ModalPort;\n"],"names":["ModalContext","createContext","stack","launchModal","updateStack","updateState","useModalContext","useContext","_ref","children","_useState","useState","_jsx","jsx","Provider","value","render","resolvers","onBackdropClickUse","wrappedResovers","Object","keys","reduce","acc","key","resolver","ev","Promise","resolve","then","result","slice","e","reject","concat","state","newState","updatedStack","length","_extends","onModalLaunch","onModalClose","Backdrop","currentModal","useMemo","onBackdropClick","useCallback","currentTarget","target","useEffect","_useModalContext2","Error"],"mappings":"0RAea,IAAAA,EAAeC,EAAAA,cAAsC,CAChEC,MAAO,GACPC,YAAa,WAAK,EAClBC,YAAa,aACbC,YAAa,WACd,IAmDe,SAAAC,IACd,OAAOC,aAAWP,EACpB,8BAnDoC,SAAHQ,GAA6D,IAAvDC,EAAQD,EAARC,SAErCC,EAA+BC,EAAQA,SAAmB,IAAlDT,EAAKQ,EAAEN,GAAAA,EAAWM,EAAA,GAuC1B,OAAOE,EAAAC,IAACb,EAAac,SAAQ,CAACC,MAPoB,CAChDb,MAAAA,EACAC,YAhC+B,SAACa,EAAQC,EAAWC,GAEnD,IAAMC,EAAkBC,OAAOC,KAAKJ,GAAWK,OAAO,SAACC,EAAKC,GAC1D,IAAMC,EAAWR,EAAUO,GAM3B,OALAD,EAAIC,YAAcE,GAAmB,WAAIC,QAAAC,QAClBH,EAASC,IAAGG,KAA3BC,SAAAA,GAEN,OADA1B,EAAYF,EAAM6B,MAAM,GAAI,IACrBD,CAAO,EAChB,CAAC,MAAAE,GAAA,OAAAL,QAAAM,OAAAD,EAAA,CAAA,EACMT,CACT,EAAG,CAAA,GACHnB,KAAW8B,OACNhC,EACH,CAAA,CACEc,OAAAA,EACAC,UAAWE,EACXD,mBAAAA,EACAiB,MAAO,MAGb,EAaE/B,YAAAA,EACAC,YAZkB,SAAC+B,GACnB,IAAMC,KAAYH,OACbhC,GAELmC,EAAanC,EAAMoC,OAAS,GAAGH,MAAKI,EAAA,CAAA,EAAQH,GAC5ChC,EAAYiC,EACd,GASsD5B,SAAGA,GAE3D,oBCrD4C,SAA7BD,GAIV,IAHHgC,EAAahC,EAAbgC,cACAC,EAAYjC,EAAZiC,aACQC,EAAQlC,EAAhBQ,OAGQd,EAAUI,IAAVJ,MACFyC,EAAsCC,EAAOA,QACjD,WAAA,OAAM1C,EAAMoC,OAAS,EAAIpC,EAAMA,EAAMoC,OAAS,GAAK,IAAI,EACvD,CAAEpC,IAEE2C,EAAkBC,EAAWA,YAAC,SAACpB,GAC/BA,EAAGqB,gBAAkBrB,EAAGsB,SAChB,MAAZL,OAAY,EAAZA,EAAczB,qBACdyB,EAAa1B,UAAU0B,EAAazB,oBAAoBQ,EAC1D,EAAG,CAAEiB,IAUL,OARAM,EAAAA,UAAU,WACJN,EACFH,GAAiBA,IAEjBC,GAAgBA,GAEpB,EAAG,CAAEE,EAAcH,EAAeC,IAE3BE,GACL/B,EAAAA,IAAC8B,EAAS,CAAAG,gBAAiBA,EACxBpC,SAAAkC,EAAa3B,OAAO2B,EAAa1B,cAEjC,IACP,8BDuCE,OADwBX,IAAhBH,WAEV,6DAOE,IAAA+C,EAA+B5C,IAAvBJ,EAAKgD,EAALhD,MAAOG,EAAW6C,EAAX7C,YACf,GAAqB,IAAjBH,EAAMoC,OACR,MAAM,IAAIa,MAAM,uDAElB,MAAO,CADOjD,EAAMA,EAAMoC,OAAS,GAAGH,MACtB9B,EAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/context.tsx","../src/modal-port.tsx"],"sourcesContent":["import { \n createContext, \n useContext, \n useState, \n type SyntheticEvent \n} from 'react';\nimport { \n type ModalStackItem,\n type ModalContextProperties,\n type LaunchModal,\n type LaunchModalResolvers,\n type ModalState,\n type UpdateModalState,\n} from '../types';\n\nexport const ModalContext = createContext<ModalContextProperties>({\n stack: [],\n launchModal: () => {},\n updateStack: () => {},\n updateState: () => {},\n});\n\nexport const ModalContextProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {\n\n const [ stack, updateStack ] = useState<ModalStackItem[]>([]);\n\n const launchModal: LaunchModal = (render, resolvers, onBackdropClickUse) => {\n // Wrap resolvers to update the stack\n const wrappedResovers = Object.keys(resolvers).reduce((acc, key) => {\n const resolver = resolvers[key];\n acc[key] = async (ev?: SyntheticEvent) => {\n const result = await resolver(ev);\n updateStack(stack.slice(0, -1));\n return result;\n };\n return acc;\n }, {} as LaunchModalResolvers);\n updateStack([\n ...stack,\n {\n render,\n resolvers: wrappedResovers,\n onBackdropClickUse,\n state: {},\n },\n ]);\n };\n\n const updateState = (newState: ModalState) => {\n const updatedStack = [\n ...stack,\n ];\n updatedStack[stack.length - 1].state = { ...newState };\n updateStack(updatedStack);\n };\n\n const contextProperties: ModalContextProperties = {\n stack,\n launchModal,\n updateStack,\n updateState,\n };\n\n return <ModalContext.Provider value={contextProperties}>{children}</ModalContext.Provider>;\n\n};\n\n/**\n * Get properties from the modal context\n * @returns {ModalContextProperties} Object with the modal context properties\n */\nexport function useModalContext(): ModalContextProperties {\n return useContext(ModalContext);\n}\n\n/**\n * Short-hand for `useModalContext().launchModal`\n * @returns {LaunchModal} The launchModal function\n */\nexport function useModal(): LaunchModal {\n const { launchModal } = useModalContext();\n return launchModal;\n}\n\n/**\n * Get access to the current modal state and a function to update it\n * @returns {[ ModalState, UpdateModalState ]} A tuple with the current modal state and a function to update it\n */\nexport function useModalState(): [ ModalState, UpdateModalState ] {\n const { stack, updateState } = useModalContext();\n if (stack.length === 0) \n throw new Error('Trying to access modal state while no modal is open');\n const state = stack[stack.length - 1].state;\n return [ state, updateState ];\n}\n","import { \n type ModalPortProps, \n type ModalStackItem \n} from \"../types\";\nimport { useModalContext } from \"./context\";\nimport { \n type SyntheticEvent, \n useCallback, \n useEffect, \n useMemo\n} from \"react\";\n\nconst ModalPort: React.FC<ModalPortProps> = ({\n onModalLaunch,\n onModalClose,\n render: Backdrop\n}) => {\n\n const { stack } = useModalContext();\n const currentModal: ModalStackItem | null = useMemo(\n () => stack.length > 0 ? stack[stack.length - 1] : null,\n [ stack ]\n );\n const onBackdropClick = useCallback((ev: SyntheticEvent) => {\n if (ev.currentTarget !== ev.target) return;\n currentModal?.onBackdropClickUse &&\n currentModal.resolvers[currentModal.onBackdropClickUse](ev);\n }, [ currentModal ]);\n\n useEffect(() => {\n if (currentModal) {\n onModalLaunch && onModalLaunch();\n } else {\n onModalClose && onModalClose();\n }\n }, [ currentModal, onModalLaunch, onModalClose ]);\n\n return currentModal && (\n <Backdrop onBackdropClick={onBackdropClick}>\n {currentModal.render(currentModal.resolvers)}\n </Backdrop>\n ) || null;\n};\n\nexport default ModalPort;\n"],"names":["ModalContext","createContext","stack","launchModal","updateStack","updateState","ModalContextProvider","_ref","children","_useState","useState","_jsx","Provider","value","render","resolvers","onBackdropClickUse","wrappedResovers","Object","keys","reduce","acc","key","resolver","ev","Promise","resolve","then","result","slice","e","reject","concat","state","newState","updatedStack","length","_extends","useModalContext","useContext","useModal","useModalState","_useModalContext2","Error","ModalPort","onModalLaunch","onModalClose","Backdrop","currentModal","useMemo","onBackdropClick","useCallback","currentTarget","target","useEffect"],"mappings":"6XAea,IAAAA,EAAeC,EAAsC,CAChEC,MAAO,GACPC,YAAa,WAAK,EAClBC,YAAa,aACbC,YAAa,WACd,IAEYC,EAAuB,SAAHC,GAA6D,IAAvDC,EAAQD,EAARC,SAErCC,EAA+BC,EAA2B,IAAlDR,EAAKO,EAAEL,GAAAA,EAAWK,EAAA,GAuC1B,OAAOE,EAACX,EAAaY,SAAQ,CAACC,MAPoB,CAChDX,MAAAA,EACAC,YAhC+B,SAACW,EAAQC,EAAWC,GAEnD,IAAMC,EAAkBC,OAAOC,KAAKJ,GAAWK,OAAO,SAACC,EAAKC,GAC1D,IAAMC,EAAWR,EAAUO,GAM3B,OALAD,EAAIC,YAAcE,GAAmB,WAAIC,QAAAC,QAClBH,EAASC,IAAGG,KAA3BC,SAAAA,GAEN,OADAxB,EAAYF,EAAM2B,MAAM,GAAI,IACrBD,CAAO,EAChB,CAAC,MAAAE,GAAA,OAAAL,QAAAM,OAAAD,EAAA,CAAA,EACMT,CACT,EAAG,CAAA,GACHjB,KAAW4B,OACN9B,EACH,CAAA,CACEY,OAAAA,EACAC,UAAWE,EACXD,mBAAAA,EACAiB,MAAO,MAGb,EAaE7B,YAAAA,EACAC,YAZkB,SAAC6B,GACnB,IAAMC,KAAYH,OACb9B,GAELiC,EAAajC,EAAMkC,OAAS,GAAGH,MAAKI,EAAA,CAAA,EAAQH,GAC5C9B,EAAY+B,EACd,GASsD3B,SAAGA,GAE3D,EAMgB,SAAA8B,IACd,OAAOC,EAAWvC,EACpB,UAMgBwC,IAEd,OADwBF,IAAhBnC,WAEV,UAMgBsC,IACd,IAAAC,EAA+BJ,IAAvBpC,EAAKwC,EAALxC,MAAOG,EAAWqC,EAAXrC,YACf,GAAqB,IAAjBH,EAAMkC,OACR,MAAM,IAAIO,MAAM,uDAElB,MAAO,CADOzC,EAAMA,EAAMkC,OAAS,GAAGH,MACtB5B,EAClB,CClFM,IAAAuC,EAAsC,SAA7BrC,GAIV,IAHHsC,EAAatC,EAAbsC,cACAC,EAAYvC,EAAZuC,aACQC,EAAQxC,EAAhBO,OAGQZ,EAAUoC,IAAVpC,MACF8C,EAAsCC,EAC1C,WAAA,OAAM/C,EAAMkC,OAAS,EAAIlC,EAAMA,EAAMkC,OAAS,GAAK,IAAI,EACvD,CAAElC,IAEEgD,EAAkBC,EAAY,SAAC3B,GAC/BA,EAAG4B,gBAAkB5B,EAAG6B,SAChB,MAAZL,OAAY,EAAZA,EAAchC,qBACdgC,EAAajC,UAAUiC,EAAahC,oBAAoBQ,EAC1D,EAAG,CAAEwB,IAUL,OARAM,EAAU,WACJN,EACFH,GAAiBA,IAEjBC,GAAgBA,GAEpB,EAAG,CAAEE,EAAcH,EAAeC,IAE3BE,GACLrC,EAACoC,EAAS,CAAAG,gBAAiBA,EACxB1C,SAAAwC,EAAalC,OAAOkC,EAAajC,cAEjC,IACP"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.modern.mjs","sources":["../src/context.tsx","../src/modal-port.tsx"],"sourcesContent":["import { \n createContext, \n useContext, \n useState, \n type SyntheticEvent \n} from 'react';\nimport { \n type ModalStackItem,\n type ModalContextProperties,\n type LaunchModal,\n type LaunchModalResolvers,\n type ModalState,\n type UpdateModalState,\n} from '../types';\n\nexport const ModalContext = createContext<ModalContextProperties>({\n stack: [],\n launchModal: () => {},\n updateStack: () => {},\n updateState: () => {},\n});\n\nexport const ModalContextProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {\n\n const [ stack, updateStack ] = useState<ModalStackItem[]>([]);\n\n const launchModal: LaunchModal = (render, resolvers, onBackdropClickUse) => {\n // Wrap resolvers to update the stack\n const wrappedResovers = Object.keys(resolvers).reduce((acc, key) => {\n const resolver = resolvers[key];\n acc[key] = async (ev?: SyntheticEvent) => {\n const result = await resolver(ev);\n updateStack(stack.slice(0, -1));\n return result;\n };\n return acc;\n }, {} as LaunchModalResolvers);\n updateStack([\n ...stack,\n {\n render,\n resolvers: wrappedResovers,\n onBackdropClickUse,\n state: {},\n },\n ]);\n };\n\n const updateState = (newState: ModalState) => {\n const updatedStack = [\n ...stack,\n ];\n updatedStack[stack.length - 1].state = { ...newState };\n updateStack(updatedStack);\n };\n\n const contextProperties: ModalContextProperties = {\n stack,\n launchModal,\n updateStack,\n updateState,\n };\n\n return <ModalContext.Provider value={contextProperties}>{children}</ModalContext.Provider>;\n\n};\n\n/**\n * Get properties from the modal context\n * @returns {ModalContextProperties} Object with the modal context properties\n */\nexport function useModalContext(): ModalContextProperties {\n return useContext(ModalContext);\n}\n\n/**\n * Short-hand for `useModalContext().launchModal`\n * @returns {LaunchModal} The launchModal function\n */\nexport function useModal(): LaunchModal {\n const { launchModal } = useModalContext();\n return launchModal;\n}\n\n/**\n * Get access to the current modal state and a function to update it\n * @returns {[ ModalState, UpdateModalState ]} A tuple with the current modal state and a function to update it\n */\nexport function useModalState(): [ ModalState, UpdateModalState ] {\n const { stack, updateState } = useModalContext();\n if (stack.length === 0) \n throw new Error('Trying to access modal state while no modal is open');\n const state = stack[stack.length - 1].state;\n return [ state, updateState ];\n}\n","import { \n type ModalPortProps, \n type ModalStackItem \n} from \"../types\";\nimport { useModalContext } from \"./context\";\nimport { \n type SyntheticEvent, \n useCallback, \n useEffect, \n useMemo\n} from \"react\";\n\nconst ModalPort: React.FC<ModalPortProps> = ({\n onModalLaunch,\n onModalClose,\n render: Backdrop\n}) => {\n\n const { stack } = useModalContext();\n const currentModal: ModalStackItem | null = useMemo(\n () => stack.length > 0 ? stack[stack.length - 1] : null,\n [ stack ]\n );\n const onBackdropClick = useCallback((ev: SyntheticEvent) => {\n if (ev.currentTarget !== ev.target) return;\n currentModal?.onBackdropClickUse &&\n currentModal.resolvers[currentModal.onBackdropClickUse](ev);\n }, [ currentModal ]);\n\n useEffect(() => {\n if (currentModal) {\n onModalLaunch && onModalLaunch();\n } else {\n onModalClose && onModalClose();\n }\n }, [ currentModal, onModalLaunch, onModalClose ]);\n\n return currentModal && (\n <Backdrop onBackdropClick={onBackdropClick}>\n {currentModal.render(currentModal.resolvers)}\n </Backdrop>\n ) || null;\n};\n\nexport default ModalPort;\n"],"names":["ModalContext","createContext","stack","launchModal","updateStack","updateState","ModalContextProvider","children","useState","_jsx","Provider","value","render","resolvers","onBackdropClickUse","wrappedResovers","Object","keys","reduce","acc","key","resolver","async","result","ev","slice","state","newState","updatedStack","length","_extends","useModalContext","useContext","useModal","useModalState","Error","ModalPort","onModalLaunch","onModalClose","Backdrop","currentModal","useMemo","onBackdropClick","useCallback","currentTarget","target","useEffect"],"mappings":"6XAea,MAAAA,EAAeC,EAAsC,CAChEC,MAAO,GACPC,YAAaA,OACbC,YAAaA,OACbC,YAAaA,SAGFC,EAAuBA,EAAGC,eAErC,MAAQL,EAAOE,GAAgBI,EAA2B,IAuC1D,OAAOC,EAACT,EAAaU,SAAQ,CAACC,MAPoB,CAChDT,QACAC,YAhC+BA,CAACS,EAAQC,EAAWC,KAEnD,MAAMC,EAAkBC,OAAOC,KAAKJ,GAAWK,OAAO,CAACC,EAAKC,KAC1D,MAAMC,EAAWR,EAAUO,GAM3B,OALAD,EAAIC,GAAOE,UACT,MAAMC,QAAeF,EAASG,GAE9B,OADApB,EAAYF,EAAMuB,MAAM,GAAI,IACrBF,GAEFJ,GACN,IACHf,EAAY,IACPF,EACH,CACEU,SACAC,UAAWE,EACXD,qBACAY,MAAO,CACR,IACF,EAcDtB,cACAC,YAZmBsB,IACnB,MAAMC,EAAe,IAChB1B,GAEL0B,EAAa1B,EAAM2B,OAAS,GAAGH,MAAKI,EAAA,CAAA,EAAQH,GAC5CvB,EAAYwB,EAAY,GAU4BrB,SAAGA,GAAQ,EAQnD,SAAAwB,IACd,OAAOC,EAAWhC,EACpB,CAMgB,SAAAiC,IACd,MAAM9B,YAAEA,GAAgB4B,IACxB,OAAO5B,CACT,UAMgB+B,IACd,MAAMhC,MAAEA,EAAKG,YAAEA,GAAgB0B,IAC/B,GAAqB,IAAjB7B,EAAM2B,OACR,MAAM,IAAIM,MAAM,uDAElB,MAAO,CADOjC,EAAMA,EAAM2B,OAAS,GAAGH,MACtBrB,EAClB,CClFM,MAAA+B,EAAsCA,EAC1CC,gBACAC,eACA1B,OAAQ2B,MAGR,MAAMrC,MAAEA,GAAU6B,IACZS,EAAsCC,EAC1C,IAAMvC,EAAM2B,OAAS,EAAI3B,EAAMA,EAAM2B,OAAS,GAAK,KACnD,CAAE3B,IAEEwC,EAAkBC,EAAanB,IAC/BA,EAAGoB,gBAAkBpB,EAAGqB,eAC5BL,SAAAA,EAAc1B,qBACd0B,EAAa3B,UAAU2B,EAAa1B,oBAAoBU,EAAE,EACzD,CAAEgB,IAUL,OARAM,EAAU,KACJN,EACFH,GAAiBA,IAEjBC,GAAgBA,GAClB,EACC,CAAEE,EAAcH,EAAeC,IAE3BE,GACL/B,EAAC8B,EAAS,CAAAG,gBAAiBA,EACxBnC,SAAAiC,EAAa5B,OAAO4B,EAAa3B,cAEjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/context.tsx","../src/modal-port.tsx"],"sourcesContent":["import { \n createContext, \n useContext, \n useState, \n type SyntheticEvent \n} from 'react';\nimport { \n type ModalStackItem,\n type ModalContextProperties,\n type LaunchModal,\n type LaunchModalResolvers,\n type ModalState,\n type UpdateModalState,\n} from '../types';\n\nexport const ModalContext = createContext<ModalContextProperties>({\n stack: [],\n launchModal: () => {},\n updateStack: () => {},\n updateState: () => {},\n});\n\nexport const ModalContextProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {\n\n const [ stack, updateStack ] = useState<ModalStackItem[]>([]);\n\n const launchModal: LaunchModal = (render, resolvers, onBackdropClickUse) => {\n // Wrap resolvers to update the stack\n const wrappedResovers = Object.keys(resolvers).reduce((acc, key) => {\n const resolver = resolvers[key];\n acc[key] = async (ev?: SyntheticEvent) => {\n const result = await resolver(ev);\n updateStack(stack.slice(0, -1));\n return result;\n };\n return acc;\n }, {} as LaunchModalResolvers);\n updateStack([\n ...stack,\n {\n render,\n resolvers: wrappedResovers,\n onBackdropClickUse,\n state: {},\n },\n ]);\n };\n\n const updateState = (newState: ModalState) => {\n const updatedStack = [\n ...stack,\n ];\n updatedStack[stack.length - 1].state = { ...newState };\n updateStack(updatedStack);\n };\n\n const contextProperties: ModalContextProperties = {\n stack,\n launchModal,\n updateStack,\n updateState,\n };\n\n return <ModalContext.Provider value={contextProperties}>{children}</ModalContext.Provider>;\n\n};\n\n/**\n * Get properties from the modal context\n * @returns {ModalContextProperties} Object with the modal context properties\n */\nexport function useModalContext(): ModalContextProperties {\n return useContext(ModalContext);\n}\n\n/**\n * Short-hand for `useModalContext().launchModal`\n * @returns {LaunchModal} The launchModal function\n */\nexport function useModal(): LaunchModal {\n const { launchModal } = useModalContext();\n return launchModal;\n}\n\n/**\n * Get access to the current modal state and a function to update it\n * @returns {[ ModalState, UpdateModalState ]} A tuple with the current modal state and a function to update it\n */\nexport function useModalState(): [ ModalState, UpdateModalState ] {\n const { stack, updateState } = useModalContext();\n if (stack.length === 0) \n throw new Error('Trying to access modal state while no modal is open');\n const state = stack[stack.length - 1].state;\n return [ state, updateState ];\n}\n","import { \n type ModalPortProps, \n type ModalStackItem \n} from \"../types\";\nimport { useModalContext } from \"./context\";\nimport { \n type SyntheticEvent, \n useCallback, \n useEffect, \n useMemo\n} from \"react\";\n\nconst ModalPort: React.FC<ModalPortProps> = ({\n onModalLaunch,\n onModalClose,\n render: Backdrop\n}) => {\n\n const { stack } = useModalContext();\n const currentModal: ModalStackItem | null = useMemo(\n () => stack.length > 0 ? stack[stack.length - 1] : null,\n [ stack ]\n );\n const onBackdropClick = useCallback((ev: SyntheticEvent) => {\n if (ev.currentTarget !== ev.target) return;\n currentModal?.onBackdropClickUse &&\n currentModal.resolvers[currentModal.onBackdropClickUse](ev);\n }, [ currentModal ]);\n\n useEffect(() => {\n if (currentModal) {\n onModalLaunch && onModalLaunch();\n } else {\n onModalClose && onModalClose();\n }\n }, [ currentModal, onModalLaunch, onModalClose ]);\n\n return currentModal && (\n <Backdrop onBackdropClick={onBackdropClick}>\n {currentModal.render(currentModal.resolvers)}\n </Backdrop>\n ) || null;\n};\n\nexport default ModalPort;\n"],"names":["ModalContext","createContext","stack","launchModal","updateStack","updateState","useModalContext","useContext","_ref","children","_useState","useState","_jsx","jsx","Provider","value","render","resolvers","onBackdropClickUse","wrappedResovers","Object","keys","reduce","acc","key","resolver","ev","Promise","resolve","then","result","slice","e","reject","concat","state","newState","updatedStack","length","_extends","onModalLaunch","onModalClose","Backdrop","currentModal","useMemo","onBackdropClick","useCallback","currentTarget","target","useEffect","_useModalContext2","Error"],"mappings":"+iBAea,IAAAA,EAAeC,EAAAA,cAAsC,CAChEC,MAAO,GACPC,YAAa,WAAK,EAClBC,YAAa,aACbC,YAAa,WACd,IAmDe,SAAAC,IACd,OAAOC,aAAWP,EACpB,wBAnDoC,SAAHQ,GAA6D,IAAvDC,EAAQD,EAARC,SAErCC,EAA+BC,EAAQA,SAAmB,IAAlDT,EAAKQ,EAAEN,GAAAA,EAAWM,EAAA,GAuC1B,OAAOE,EAAAC,IAACb,EAAac,SAAQ,CAACC,MAPoB,CAChDb,MAAAA,EACAC,YAhC+B,SAACa,EAAQC,EAAWC,GAEnD,IAAMC,EAAkBC,OAAOC,KAAKJ,GAAWK,OAAO,SAACC,EAAKC,GAC1D,IAAMC,EAAWR,EAAUO,GAM3B,OALAD,EAAIC,YAAcE,GAAmB,WAAIC,QAAAC,QAClBH,EAASC,IAAGG,KAA3BC,SAAAA,GAEN,OADA1B,EAAYF,EAAM6B,MAAM,GAAI,IACrBD,CAAO,EAChB,CAAC,MAAAE,GAAA,OAAAL,QAAAM,OAAAD,EAAA,CAAA,EACMT,CACT,EAAG,CAAA,GACHnB,KAAW8B,OACNhC,EACH,CAAA,CACEc,OAAAA,EACAC,UAAWE,EACXD,mBAAAA,EACAiB,MAAO,MAGb,EAaE/B,YAAAA,EACAC,YAZkB,SAAC+B,GACnB,IAAMC,KAAYH,OACbhC,GAELmC,EAAanC,EAAMoC,OAAS,GAAGH,MAAKI,EAAA,CAAA,EAAQH,GAC5ChC,EAAYiC,EACd,GASsD5B,SAAGA,GAE3D,cCrD4C,SAA7BD,GAIV,IAHHgC,EAAahC,EAAbgC,cACAC,EAAYjC,EAAZiC,aACQC,EAAQlC,EAAhBQ,OAGQd,EAAUI,IAAVJ,MACFyC,EAAsCC,EAAOA,QACjD,WAAA,OAAM1C,EAAMoC,OAAS,EAAIpC,EAAMA,EAAMoC,OAAS,GAAK,IAAI,EACvD,CAAEpC,IAEE2C,EAAkBC,EAAWA,YAAC,SAACpB,GAC/BA,EAAGqB,gBAAkBrB,EAAGsB,SAChB,MAAZL,OAAY,EAAZA,EAAczB,qBACdyB,EAAa1B,UAAU0B,EAAazB,oBAAoBQ,EAC1D,EAAG,CAAEiB,IAUL,OARAM,EAAAA,UAAU,WACJN,EACFH,GAAiBA,IAEjBC,GAAgBA,GAEpB,EAAG,CAAEE,EAAcH,EAAeC,IAE3BE,GACL/B,EAAAA,IAAC8B,EAAS,CAAAG,gBAAiBA,EACxBpC,SAAAkC,EAAa3B,OAAO2B,EAAa1B,cAEjC,IACP,wBDuCE,OADwBX,IAAhBH,WAEV,iDAOE,IAAA+C,EAA+B5C,IAAvBJ,EAAKgD,EAALhD,MAAOG,EAAW6C,EAAX7C,YACf,GAAqB,IAAjBH,EAAMoC,OACR,MAAM,IAAIa,MAAM,uDAElB,MAAO,CADOjD,EAAMA,EAAMoC,OAAS,GAAGH,MACtB9B,EAClB"}
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-modal-port",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Launch modals from any React component.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"source": "src/index.ts",
|
|
7
7
|
"types": "types/index.d.ts",
|
|
8
|
-
"main": "dist/
|
|
9
|
-
"main:umd": "dist/
|
|
10
|
-
"module": "dist/
|
|
8
|
+
"main": "dist/index.cjs",
|
|
9
|
+
"main:umd": "dist/index.umd.js",
|
|
10
|
+
"module": "dist/index.mjs",
|
|
11
11
|
"exports": {
|
|
12
|
-
"import": "./dist/
|
|
13
|
-
"require": "./dist/
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.cjs",
|
|
14
14
|
"types": "./types/index.d.ts",
|
|
15
|
-
"default": "./dist/
|
|
15
|
+
"default": "./dist/index.modern.mjs"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "npm run build:esm && npm run build:esm-modern && npm run build:cjs && npm run build:umd",
|
|
23
|
-
"build:esm": "microbundle -o dist/
|
|
24
|
-
"build:esm-modern": "microbundle -o dist/
|
|
25
|
-
"build:cjs": "microbundle -o dist/
|
|
26
|
-
"build:umd": "microbundle -o dist/
|
|
23
|
+
"build:esm": "microbundle -o dist/index.mjs --format esm",
|
|
24
|
+
"build:esm-modern": "microbundle -o dist/index.modern.mjs --format modern",
|
|
25
|
+
"build:cjs": "microbundle -o dist/index.cjs --format cjs",
|
|
26
|
+
"build:umd": "microbundle -o dist/index.umd.js --format umd",
|
|
27
27
|
"prepare": "npm run build",
|
|
28
28
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
29
29
|
},
|
package/dist/cjs/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/context.tsx","../../src/modal-port.tsx"],"sourcesContent":["import { \n createContext, \n useContext, \n useState, \n type SyntheticEvent \n} from 'react';\nimport { \n type ModalStackItem,\n type ModalContextProperties,\n type LaunchModal,\n type LaunchModalResolvers,\n type ModalState,\n type UpdateModalState,\n} from '../types';\n\nexport const ModalContext = createContext<ModalContextProperties>({\n stack: [],\n launchModal: () => {},\n updateStack: () => {},\n updateState: () => {},\n});\n\nexport const ModalContextProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {\n\n const [ stack, updateStack ] = useState<ModalStackItem[]>([]);\n\n const launchModal: LaunchModal = (render, resolvers, onBackdropClickUse) => {\n // Wrap resolvers to update the stack\n const wrappedResovers = Object.keys(resolvers).reduce((acc, key) => {\n const resolver = resolvers[key];\n acc[key] = async (ev?: SyntheticEvent) => {\n const result = await resolver(ev);\n updateStack(stack.slice(0, -1));\n return result;\n };\n return acc;\n }, {} as LaunchModalResolvers);\n updateStack([\n ...stack,\n {\n render,\n resolvers: wrappedResovers,\n onBackdropClickUse,\n state: {},\n },\n ]);\n };\n\n const updateState = (newState: ModalState) => {\n const updatedStack = [\n ...stack,\n ];\n updatedStack[stack.length - 1].state = { ...newState };\n updateStack(updatedStack);\n };\n\n const contextProperties: ModalContextProperties = {\n stack,\n launchModal,\n updateStack,\n updateState,\n };\n\n return <ModalContext.Provider value={contextProperties}>{children}</ModalContext.Provider>;\n\n};\n\n/**\n * Get properties from the modal context\n * @returns {ModalContextProperties} Object with the modal context properties\n */\nexport function useModalContext(): ModalContextProperties {\n return useContext(ModalContext);\n}\n\n/**\n * Short-hand for `useModalContext().launchModal`\n * @returns {LaunchModal} The launchModal function\n */\nexport function useModal(): LaunchModal {\n const { launchModal } = useModalContext();\n return launchModal;\n}\n\n/**\n * Get access to the current modal state and a function to update it\n * @returns {[ ModalState, UpdateModalState ]} A tuple with the current modal state and a function to update it\n */\nexport function useModalState(): [ ModalState, UpdateModalState ] {\n const { stack, updateState } = useModalContext();\n if (stack.length === 0) \n throw new Error('Trying to access modal state while no modal is open');\n const state = stack[stack.length - 1].state;\n return [ state, updateState ];\n}\n","import { \n type ModalPortProps, \n type ModalStackItem \n} from \"../types\";\nimport { useModalContext } from \"./context\";\nimport { \n type SyntheticEvent, \n useCallback, \n useEffect, \n useMemo\n} from \"react\";\n\nconst ModalPort: React.FC<ModalPortProps> = ({\n onModalLaunch,\n onModalClose,\n render: Backdrop\n}) => {\n\n const { stack } = useModalContext();\n const currentModal: ModalStackItem | null = useMemo(\n () => stack.length > 0 ? stack[stack.length - 1] : null,\n [ stack ]\n );\n const onBackdropClick = useCallback((ev: SyntheticEvent) => {\n if (ev.currentTarget !== ev.target) return;\n currentModal?.onBackdropClickUse &&\n currentModal.resolvers[currentModal.onBackdropClickUse](ev);\n }, [ currentModal ]);\n\n useEffect(() => {\n if (currentModal) {\n onModalLaunch && onModalLaunch();\n } else {\n onModalClose && onModalClose();\n }\n }, [ currentModal, onModalLaunch, onModalClose ]);\n\n return currentModal && (\n <Backdrop onBackdropClick={onBackdropClick}>\n {currentModal.render(currentModal.resolvers)}\n </Backdrop>\n ) || null;\n};\n\nexport default ModalPort;\n"],"names":["ModalContext","createContext","stack","launchModal","updateStack","updateState","useModalContext","useContext","_ref","children","_useState","useState","_jsx","jsx","Provider","value","render","resolvers","onBackdropClickUse","wrappedResovers","Object","keys","reduce","acc","key","resolver","ev","Promise","resolve","then","result","slice","e","reject","concat","state","newState","updatedStack","length","_extends","onModalLaunch","onModalClose","Backdrop","currentModal","useMemo","onBackdropClick","useCallback","currentTarget","target","useEffect","_useModalContext2","Error"],"mappings":"0RAea,IAAAA,EAAeC,EAAAA,cAAsC,CAChEC,MAAO,GACPC,YAAa,WAAK,EAClBC,YAAa,aACbC,YAAa,WACd,IAmDe,SAAAC,IACd,OAAOC,aAAWP,EACpB,8BAnDoC,SAAHQ,GAA6D,IAAvDC,EAAQD,EAARC,SAErCC,EAA+BC,EAAQA,SAAmB,IAAlDT,EAAKQ,EAAEN,GAAAA,EAAWM,EAAA,GAuC1B,OAAOE,EAAAC,IAACb,EAAac,SAAQ,CAACC,MAPoB,CAChDb,MAAAA,EACAC,YAhC+B,SAACa,EAAQC,EAAWC,GAEnD,IAAMC,EAAkBC,OAAOC,KAAKJ,GAAWK,OAAO,SAACC,EAAKC,GAC1D,IAAMC,EAAWR,EAAUO,GAM3B,OALAD,EAAIC,YAAcE,GAAmB,WAAIC,QAAAC,QAClBH,EAASC,IAAGG,KAA3BC,SAAAA,GAEN,OADA1B,EAAYF,EAAM6B,MAAM,GAAI,IACrBD,CAAO,EAChB,CAAC,MAAAE,GAAA,OAAAL,QAAAM,OAAAD,EAAA,CAAA,EACMT,CACT,EAAG,CAAA,GACHnB,KAAW8B,OACNhC,EACH,CAAA,CACEc,OAAAA,EACAC,UAAWE,EACXD,mBAAAA,EACAiB,MAAO,MAGb,EAaE/B,YAAAA,EACAC,YAZkB,SAAC+B,GACnB,IAAMC,KAAYH,OACbhC,GAELmC,EAAanC,EAAMoC,OAAS,GAAGH,MAAKI,EAAA,CAAA,EAAQH,GAC5ChC,EAAYiC,EACd,GASsD5B,SAAGA,GAE3D,oBCrD4C,SAA7BD,GAIV,IAHHgC,EAAahC,EAAbgC,cACAC,EAAYjC,EAAZiC,aACQC,EAAQlC,EAAhBQ,OAGQd,EAAUI,IAAVJ,MACFyC,EAAsCC,EAAOA,QACjD,WAAA,OAAM1C,EAAMoC,OAAS,EAAIpC,EAAMA,EAAMoC,OAAS,GAAK,IAAI,EACvD,CAAEpC,IAEE2C,EAAkBC,EAAWA,YAAC,SAACpB,GAC/BA,EAAGqB,gBAAkBrB,EAAGsB,SAChB,MAAZL,OAAY,EAAZA,EAAczB,qBACdyB,EAAa1B,UAAU0B,EAAazB,oBAAoBQ,EAC1D,EAAG,CAAEiB,IAUL,OARAM,EAAAA,UAAU,WACJN,EACFH,GAAiBA,IAEjBC,GAAgBA,GAEpB,EAAG,CAAEE,EAAcH,EAAeC,IAE3BE,GACL/B,EAAAA,IAAC8B,EAAS,CAAAG,gBAAiBA,EACxBpC,SAAAkC,EAAa3B,OAAO2B,EAAa1B,cAEjC,IACP,8BDuCE,OADwBX,IAAhBH,WAEV,6DAOE,IAAA+C,EAA+B5C,IAAvBJ,EAAKgD,EAALhD,MAAOG,EAAW6C,EAAX7C,YACf,GAAqB,IAAjBH,EAAMoC,OACR,MAAM,IAAIa,MAAM,uDAElB,MAAO,CADOjD,EAAMA,EAAMoC,OAAS,GAAGH,MACtB9B,EAClB"}
|
package/dist/esm/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/context.tsx","../../src/modal-port.tsx"],"sourcesContent":["import { \n createContext, \n useContext, \n useState, \n type SyntheticEvent \n} from 'react';\nimport { \n type ModalStackItem,\n type ModalContextProperties,\n type LaunchModal,\n type LaunchModalResolvers,\n type ModalState,\n type UpdateModalState,\n} from '../types';\n\nexport const ModalContext = createContext<ModalContextProperties>({\n stack: [],\n launchModal: () => {},\n updateStack: () => {},\n updateState: () => {},\n});\n\nexport const ModalContextProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {\n\n const [ stack, updateStack ] = useState<ModalStackItem[]>([]);\n\n const launchModal: LaunchModal = (render, resolvers, onBackdropClickUse) => {\n // Wrap resolvers to update the stack\n const wrappedResovers = Object.keys(resolvers).reduce((acc, key) => {\n const resolver = resolvers[key];\n acc[key] = async (ev?: SyntheticEvent) => {\n const result = await resolver(ev);\n updateStack(stack.slice(0, -1));\n return result;\n };\n return acc;\n }, {} as LaunchModalResolvers);\n updateStack([\n ...stack,\n {\n render,\n resolvers: wrappedResovers,\n onBackdropClickUse,\n state: {},\n },\n ]);\n };\n\n const updateState = (newState: ModalState) => {\n const updatedStack = [\n ...stack,\n ];\n updatedStack[stack.length - 1].state = { ...newState };\n updateStack(updatedStack);\n };\n\n const contextProperties: ModalContextProperties = {\n stack,\n launchModal,\n updateStack,\n updateState,\n };\n\n return <ModalContext.Provider value={contextProperties}>{children}</ModalContext.Provider>;\n\n};\n\n/**\n * Get properties from the modal context\n * @returns {ModalContextProperties} Object with the modal context properties\n */\nexport function useModalContext(): ModalContextProperties {\n return useContext(ModalContext);\n}\n\n/**\n * Short-hand for `useModalContext().launchModal`\n * @returns {LaunchModal} The launchModal function\n */\nexport function useModal(): LaunchModal {\n const { launchModal } = useModalContext();\n return launchModal;\n}\n\n/**\n * Get access to the current modal state and a function to update it\n * @returns {[ ModalState, UpdateModalState ]} A tuple with the current modal state and a function to update it\n */\nexport function useModalState(): [ ModalState, UpdateModalState ] {\n const { stack, updateState } = useModalContext();\n if (stack.length === 0) \n throw new Error('Trying to access modal state while no modal is open');\n const state = stack[stack.length - 1].state;\n return [ state, updateState ];\n}\n","import { \n type ModalPortProps, \n type ModalStackItem \n} from \"../types\";\nimport { useModalContext } from \"./context\";\nimport { \n type SyntheticEvent, \n useCallback, \n useEffect, \n useMemo\n} from \"react\";\n\nconst ModalPort: React.FC<ModalPortProps> = ({\n onModalLaunch,\n onModalClose,\n render: Backdrop\n}) => {\n\n const { stack } = useModalContext();\n const currentModal: ModalStackItem | null = useMemo(\n () => stack.length > 0 ? stack[stack.length - 1] : null,\n [ stack ]\n );\n const onBackdropClick = useCallback((ev: SyntheticEvent) => {\n if (ev.currentTarget !== ev.target) return;\n currentModal?.onBackdropClickUse &&\n currentModal.resolvers[currentModal.onBackdropClickUse](ev);\n }, [ currentModal ]);\n\n useEffect(() => {\n if (currentModal) {\n onModalLaunch && onModalLaunch();\n } else {\n onModalClose && onModalClose();\n }\n }, [ currentModal, onModalLaunch, onModalClose ]);\n\n return currentModal && (\n <Backdrop onBackdropClick={onBackdropClick}>\n {currentModal.render(currentModal.resolvers)}\n </Backdrop>\n ) || null;\n};\n\nexport default ModalPort;\n"],"names":["ModalContext","createContext","stack","launchModal","updateStack","updateState","ModalContextProvider","_ref","children","_useState","useState","_jsx","Provider","value","render","resolvers","onBackdropClickUse","wrappedResovers","Object","keys","reduce","acc","key","resolver","ev","Promise","resolve","then","result","slice","e","reject","concat","state","newState","updatedStack","length","_extends","useModalContext","useContext","useModal","useModalState","_useModalContext2","Error","ModalPort","onModalLaunch","onModalClose","Backdrop","currentModal","useMemo","onBackdropClick","useCallback","currentTarget","target","useEffect"],"mappings":"6XAea,IAAAA,EAAeC,EAAsC,CAChEC,MAAO,GACPC,YAAa,WAAK,EAClBC,YAAa,aACbC,YAAa,WACd,IAEYC,EAAuB,SAAHC,GAA6D,IAAvDC,EAAQD,EAARC,SAErCC,EAA+BC,EAA2B,IAAlDR,EAAKO,EAAEL,GAAAA,EAAWK,EAAA,GAuC1B,OAAOE,EAACX,EAAaY,SAAQ,CAACC,MAPoB,CAChDX,MAAAA,EACAC,YAhC+B,SAACW,EAAQC,EAAWC,GAEnD,IAAMC,EAAkBC,OAAOC,KAAKJ,GAAWK,OAAO,SAACC,EAAKC,GAC1D,IAAMC,EAAWR,EAAUO,GAM3B,OALAD,EAAIC,YAAcE,GAAmB,WAAIC,QAAAC,QAClBH,EAASC,IAAGG,KAA3BC,SAAAA,GAEN,OADAxB,EAAYF,EAAM2B,MAAM,GAAI,IACrBD,CAAO,EAChB,CAAC,MAAAE,GAAA,OAAAL,QAAAM,OAAAD,EAAA,CAAA,EACMT,CACT,EAAG,CAAA,GACHjB,KAAW4B,OACN9B,EACH,CAAA,CACEY,OAAAA,EACAC,UAAWE,EACXD,mBAAAA,EACAiB,MAAO,MAGb,EAaE7B,YAAAA,EACAC,YAZkB,SAAC6B,GACnB,IAAMC,KAAYH,OACb9B,GAELiC,EAAajC,EAAMkC,OAAS,GAAGH,MAAKI,EAAA,CAAA,EAAQH,GAC5C9B,EAAY+B,EACd,GASsD3B,SAAGA,GAE3D,EAMgB,SAAA8B,IACd,OAAOC,EAAWvC,EACpB,UAMgBwC,IAEd,OADwBF,IAAhBnC,WAEV,UAMgBsC,IACd,IAAAC,EAA+BJ,IAAvBpC,EAAKwC,EAALxC,MAAOG,EAAWqC,EAAXrC,YACf,GAAqB,IAAjBH,EAAMkC,OACR,MAAM,IAAIO,MAAM,uDAElB,MAAO,CADOzC,EAAMA,EAAMkC,OAAS,GAAGH,MACtB5B,EAClB,CClFM,IAAAuC,EAAsC,SAA7BrC,GAIV,IAHHsC,EAAatC,EAAbsC,cACAC,EAAYvC,EAAZuC,aACQC,EAAQxC,EAAhBO,OAGQZ,EAAUoC,IAAVpC,MACF8C,EAAsCC,EAC1C,WAAA,OAAM/C,EAAMkC,OAAS,EAAIlC,EAAMA,EAAMkC,OAAS,GAAK,IAAI,EACvD,CAAElC,IAEEgD,EAAkBC,EAAY,SAAC3B,GAC/BA,EAAG4B,gBAAkB5B,EAAG6B,SAChB,MAAZL,OAAY,EAAZA,EAAchC,qBACdgC,EAAajC,UAAUiC,EAAahC,oBAAoBQ,EAC1D,EAAG,CAAEwB,IAUL,OARAM,EAAU,WACJN,EACFH,GAAiBA,IAEjBC,GAAgBA,GAEpB,EAAG,CAAEE,EAAcH,EAAeC,IAE3BE,GACLrC,EAACoC,EAAS,CAAAG,gBAAiBA,EACxB1C,SAAAwC,EAAalC,OAAOkC,EAAajC,cAEjC,IACP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.mjs","sources":["../../src/context.tsx","../../src/modal-port.tsx"],"sourcesContent":["import { \n createContext, \n useContext, \n useState, \n type SyntheticEvent \n} from 'react';\nimport { \n type ModalStackItem,\n type ModalContextProperties,\n type LaunchModal,\n type LaunchModalResolvers,\n type ModalState,\n type UpdateModalState,\n} from '../types';\n\nexport const ModalContext = createContext<ModalContextProperties>({\n stack: [],\n launchModal: () => {},\n updateStack: () => {},\n updateState: () => {},\n});\n\nexport const ModalContextProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {\n\n const [ stack, updateStack ] = useState<ModalStackItem[]>([]);\n\n const launchModal: LaunchModal = (render, resolvers, onBackdropClickUse) => {\n // Wrap resolvers to update the stack\n const wrappedResovers = Object.keys(resolvers).reduce((acc, key) => {\n const resolver = resolvers[key];\n acc[key] = async (ev?: SyntheticEvent) => {\n const result = await resolver(ev);\n updateStack(stack.slice(0, -1));\n return result;\n };\n return acc;\n }, {} as LaunchModalResolvers);\n updateStack([\n ...stack,\n {\n render,\n resolvers: wrappedResovers,\n onBackdropClickUse,\n state: {},\n },\n ]);\n };\n\n const updateState = (newState: ModalState) => {\n const updatedStack = [\n ...stack,\n ];\n updatedStack[stack.length - 1].state = { ...newState };\n updateStack(updatedStack);\n };\n\n const contextProperties: ModalContextProperties = {\n stack,\n launchModal,\n updateStack,\n updateState,\n };\n\n return <ModalContext.Provider value={contextProperties}>{children}</ModalContext.Provider>;\n\n};\n\n/**\n * Get properties from the modal context\n * @returns {ModalContextProperties} Object with the modal context properties\n */\nexport function useModalContext(): ModalContextProperties {\n return useContext(ModalContext);\n}\n\n/**\n * Short-hand for `useModalContext().launchModal`\n * @returns {LaunchModal} The launchModal function\n */\nexport function useModal(): LaunchModal {\n const { launchModal } = useModalContext();\n return launchModal;\n}\n\n/**\n * Get access to the current modal state and a function to update it\n * @returns {[ ModalState, UpdateModalState ]} A tuple with the current modal state and a function to update it\n */\nexport function useModalState(): [ ModalState, UpdateModalState ] {\n const { stack, updateState } = useModalContext();\n if (stack.length === 0) \n throw new Error('Trying to access modal state while no modal is open');\n const state = stack[stack.length - 1].state;\n return [ state, updateState ];\n}\n","import { \n type ModalPortProps, \n type ModalStackItem \n} from \"../types\";\nimport { useModalContext } from \"./context\";\nimport { \n type SyntheticEvent, \n useCallback, \n useEffect, \n useMemo\n} from \"react\";\n\nconst ModalPort: React.FC<ModalPortProps> = ({\n onModalLaunch,\n onModalClose,\n render: Backdrop\n}) => {\n\n const { stack } = useModalContext();\n const currentModal: ModalStackItem | null = useMemo(\n () => stack.length > 0 ? stack[stack.length - 1] : null,\n [ stack ]\n );\n const onBackdropClick = useCallback((ev: SyntheticEvent) => {\n if (ev.currentTarget !== ev.target) return;\n currentModal?.onBackdropClickUse &&\n currentModal.resolvers[currentModal.onBackdropClickUse](ev);\n }, [ currentModal ]);\n\n useEffect(() => {\n if (currentModal) {\n onModalLaunch && onModalLaunch();\n } else {\n onModalClose && onModalClose();\n }\n }, [ currentModal, onModalLaunch, onModalClose ]);\n\n return currentModal && (\n <Backdrop onBackdropClick={onBackdropClick}>\n {currentModal.render(currentModal.resolvers)}\n </Backdrop>\n ) || null;\n};\n\nexport default ModalPort;\n"],"names":["ModalContext","createContext","stack","launchModal","updateStack","updateState","ModalContextProvider","children","useState","_jsx","Provider","value","render","resolvers","onBackdropClickUse","wrappedResovers","Object","keys","reduce","acc","key","resolver","async","result","ev","slice","state","newState","updatedStack","length","_extends","useModalContext","useContext","useModal","useModalState","Error","ModalPort","onModalLaunch","onModalClose","Backdrop","currentModal","useMemo","onBackdropClick","useCallback","currentTarget","target","useEffect"],"mappings":"6XAea,MAAAA,EAAeC,EAAsC,CAChEC,MAAO,GACPC,YAAaA,OACbC,YAAaA,OACbC,YAAaA,SAGFC,EAAuBA,EAAGC,eAErC,MAAQL,EAAOE,GAAgBI,EAA2B,IAuC1D,OAAOC,EAACT,EAAaU,SAAQ,CAACC,MAPoB,CAChDT,QACAC,YAhC+BA,CAACS,EAAQC,EAAWC,KAEnD,MAAMC,EAAkBC,OAAOC,KAAKJ,GAAWK,OAAO,CAACC,EAAKC,KAC1D,MAAMC,EAAWR,EAAUO,GAM3B,OALAD,EAAIC,GAAOE,UACT,MAAMC,QAAeF,EAASG,GAE9B,OADApB,EAAYF,EAAMuB,MAAM,GAAI,IACrBF,GAEFJ,GACN,IACHf,EAAY,IACPF,EACH,CACEU,SACAC,UAAWE,EACXD,qBACAY,MAAO,CACR,IACF,EAcDtB,cACAC,YAZmBsB,IACnB,MAAMC,EAAe,IAChB1B,GAEL0B,EAAa1B,EAAM2B,OAAS,GAAGH,MAAKI,EAAA,CAAA,EAAQH,GAC5CvB,EAAYwB,EAAY,GAU4BrB,SAAGA,GAAQ,EAQnD,SAAAwB,IACd,OAAOC,EAAWhC,EACpB,CAMgB,SAAAiC,IACd,MAAM9B,YAAEA,GAAgB4B,IACxB,OAAO5B,CACT,UAMgB+B,IACd,MAAMhC,MAAEA,EAAKG,YAAEA,GAAgB0B,IAC/B,GAAqB,IAAjB7B,EAAM2B,OACR,MAAM,IAAIM,MAAM,uDAElB,MAAO,CADOjC,EAAMA,EAAM2B,OAAS,GAAGH,MACtBrB,EAClB,CClFM,MAAA+B,EAAsCA,EAC1CC,gBACAC,eACA1B,OAAQ2B,MAGR,MAAMrC,MAAEA,GAAU6B,IACZS,EAAsCC,EAC1C,IAAMvC,EAAM2B,OAAS,EAAI3B,EAAMA,EAAM2B,OAAS,GAAK,KACnD,CAAE3B,IAEEwC,EAAkBC,EAAanB,IAC/BA,EAAGoB,gBAAkBpB,EAAGqB,eAC5BL,SAAAA,EAAc1B,qBACd0B,EAAa3B,UAAU2B,EAAa1B,oBAAoBU,EAAE,EACzD,CAAEgB,IAUL,OARAM,EAAU,KACJN,EACFH,GAAiBA,IAEjBC,GAAgBA,GAClB,EACC,CAAEE,EAAcH,EAAeC,IAE3BE,GACL/B,EAAC8B,EAAS,CAAAG,gBAAiBA,EACxBnC,SAAAiC,EAAa5B,OAAO4B,EAAa3B,cAEjC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../../src/context.tsx","../../src/modal-port.tsx"],"sourcesContent":["import { \n createContext, \n useContext, \n useState, \n type SyntheticEvent \n} from 'react';\nimport { \n type ModalStackItem,\n type ModalContextProperties,\n type LaunchModal,\n type LaunchModalResolvers,\n type ModalState,\n type UpdateModalState,\n} from '../types';\n\nexport const ModalContext = createContext<ModalContextProperties>({\n stack: [],\n launchModal: () => {},\n updateStack: () => {},\n updateState: () => {},\n});\n\nexport const ModalContextProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {\n\n const [ stack, updateStack ] = useState<ModalStackItem[]>([]);\n\n const launchModal: LaunchModal = (render, resolvers, onBackdropClickUse) => {\n // Wrap resolvers to update the stack\n const wrappedResovers = Object.keys(resolvers).reduce((acc, key) => {\n const resolver = resolvers[key];\n acc[key] = async (ev?: SyntheticEvent) => {\n const result = await resolver(ev);\n updateStack(stack.slice(0, -1));\n return result;\n };\n return acc;\n }, {} as LaunchModalResolvers);\n updateStack([\n ...stack,\n {\n render,\n resolvers: wrappedResovers,\n onBackdropClickUse,\n state: {},\n },\n ]);\n };\n\n const updateState = (newState: ModalState) => {\n const updatedStack = [\n ...stack,\n ];\n updatedStack[stack.length - 1].state = { ...newState };\n updateStack(updatedStack);\n };\n\n const contextProperties: ModalContextProperties = {\n stack,\n launchModal,\n updateStack,\n updateState,\n };\n\n return <ModalContext.Provider value={contextProperties}>{children}</ModalContext.Provider>;\n\n};\n\n/**\n * Get properties from the modal context\n * @returns {ModalContextProperties} Object with the modal context properties\n */\nexport function useModalContext(): ModalContextProperties {\n return useContext(ModalContext);\n}\n\n/**\n * Short-hand for `useModalContext().launchModal`\n * @returns {LaunchModal} The launchModal function\n */\nexport function useModal(): LaunchModal {\n const { launchModal } = useModalContext();\n return launchModal;\n}\n\n/**\n * Get access to the current modal state and a function to update it\n * @returns {[ ModalState, UpdateModalState ]} A tuple with the current modal state and a function to update it\n */\nexport function useModalState(): [ ModalState, UpdateModalState ] {\n const { stack, updateState } = useModalContext();\n if (stack.length === 0) \n throw new Error('Trying to access modal state while no modal is open');\n const state = stack[stack.length - 1].state;\n return [ state, updateState ];\n}\n","import { \n type ModalPortProps, \n type ModalStackItem \n} from \"../types\";\nimport { useModalContext } from \"./context\";\nimport { \n type SyntheticEvent, \n useCallback, \n useEffect, \n useMemo\n} from \"react\";\n\nconst ModalPort: React.FC<ModalPortProps> = ({\n onModalLaunch,\n onModalClose,\n render: Backdrop\n}) => {\n\n const { stack } = useModalContext();\n const currentModal: ModalStackItem | null = useMemo(\n () => stack.length > 0 ? stack[stack.length - 1] : null,\n [ stack ]\n );\n const onBackdropClick = useCallback((ev: SyntheticEvent) => {\n if (ev.currentTarget !== ev.target) return;\n currentModal?.onBackdropClickUse &&\n currentModal.resolvers[currentModal.onBackdropClickUse](ev);\n }, [ currentModal ]);\n\n useEffect(() => {\n if (currentModal) {\n onModalLaunch && onModalLaunch();\n } else {\n onModalClose && onModalClose();\n }\n }, [ currentModal, onModalLaunch, onModalClose ]);\n\n return currentModal && (\n <Backdrop onBackdropClick={onBackdropClick}>\n {currentModal.render(currentModal.resolvers)}\n </Backdrop>\n ) || null;\n};\n\nexport default ModalPort;\n"],"names":["ModalContext","createContext","stack","launchModal","updateStack","updateState","useModalContext","useContext","_ref","children","_useState","useState","_jsx","jsx","Provider","value","render","resolvers","onBackdropClickUse","wrappedResovers","Object","keys","reduce","acc","key","resolver","ev","Promise","resolve","then","result","slice","e","reject","concat","state","newState","updatedStack","length","_extends","onModalLaunch","onModalClose","Backdrop","currentModal","useMemo","onBackdropClick","useCallback","currentTarget","target","useEffect","_useModalContext2","Error"],"mappings":"+iBAea,IAAAA,EAAeC,EAAAA,cAAsC,CAChEC,MAAO,GACPC,YAAa,WAAK,EAClBC,YAAa,aACbC,YAAa,WACd,IAmDe,SAAAC,IACd,OAAOC,aAAWP,EACpB,wBAnDoC,SAAHQ,GAA6D,IAAvDC,EAAQD,EAARC,SAErCC,EAA+BC,EAAQA,SAAmB,IAAlDT,EAAKQ,EAAEN,GAAAA,EAAWM,EAAA,GAuC1B,OAAOE,EAAAC,IAACb,EAAac,SAAQ,CAACC,MAPoB,CAChDb,MAAAA,EACAC,YAhC+B,SAACa,EAAQC,EAAWC,GAEnD,IAAMC,EAAkBC,OAAOC,KAAKJ,GAAWK,OAAO,SAACC,EAAKC,GAC1D,IAAMC,EAAWR,EAAUO,GAM3B,OALAD,EAAIC,YAAcE,GAAmB,WAAIC,QAAAC,QAClBH,EAASC,IAAGG,KAA3BC,SAAAA,GAEN,OADA1B,EAAYF,EAAM6B,MAAM,GAAI,IACrBD,CAAO,EAChB,CAAC,MAAAE,GAAA,OAAAL,QAAAM,OAAAD,EAAA,CAAA,EACMT,CACT,EAAG,CAAA,GACHnB,KAAW8B,OACNhC,EACH,CAAA,CACEc,OAAAA,EACAC,UAAWE,EACXD,mBAAAA,EACAiB,MAAO,MAGb,EAaE/B,YAAAA,EACAC,YAZkB,SAAC+B,GACnB,IAAMC,KAAYH,OACbhC,GAELmC,EAAanC,EAAMoC,OAAS,GAAGH,MAAKI,EAAA,CAAA,EAAQH,GAC5ChC,EAAYiC,EACd,GASsD5B,SAAGA,GAE3D,cCrD4C,SAA7BD,GAIV,IAHHgC,EAAahC,EAAbgC,cACAC,EAAYjC,EAAZiC,aACQC,EAAQlC,EAAhBQ,OAGQd,EAAUI,IAAVJ,MACFyC,EAAsCC,EAAOA,QACjD,WAAA,OAAM1C,EAAMoC,OAAS,EAAIpC,EAAMA,EAAMoC,OAAS,GAAK,IAAI,EACvD,CAAEpC,IAEE2C,EAAkBC,EAAWA,YAAC,SAACpB,GAC/BA,EAAGqB,gBAAkBrB,EAAGsB,SAChB,MAAZL,OAAY,EAAZA,EAAczB,qBACdyB,EAAa1B,UAAU0B,EAAazB,oBAAoBQ,EAC1D,EAAG,CAAEiB,IAUL,OARAM,EAAAA,UAAU,WACJN,EACFH,GAAiBA,IAEjBC,GAAgBA,GAEpB,EAAG,CAAEE,EAAcH,EAAeC,IAE3BE,GACL/B,EAAAA,IAAC8B,EAAS,CAAAG,gBAAiBA,EACxBpC,SAAAkC,EAAa3B,OAAO2B,EAAa1B,cAEjC,IACP,wBDuCE,OADwBX,IAAhBH,WAEV,iDAOE,IAAA+C,EAA+B5C,IAAvBJ,EAAKgD,EAALhD,MAAOG,EAAW6C,EAAX7C,YACf,GAAqB,IAAjBH,EAAMoC,OACR,MAAM,IAAIa,MAAM,uDAElB,MAAO,CADOjD,EAAMA,EAAMoC,OAAS,GAAGH,MACtB9B,EAClB"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|