@helloworldqq/react-modal 1.0.0 → 1.0.2

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # React Hook Disclosure Modal
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/@vnquang24/react-modal.svg)](https://www.npmjs.com/package/@vnquang24/react-modal)
3
+ [![npm version](https://img.shields.io/npm/v/@helloworldqq/react-modal.svg)](https://www.npmjs.com/package/@helloworldqq/react-modal)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
6
  Thư viện React hook mạnh mẽ và linh hoạt để quản lý modal với API khai báo rõ ràng. Hoàn hảo cho các ứng dụng cần quản lý nhiều modal với khả năng truyền dữ liệu.
@@ -36,11 +36,11 @@ Thư viện React hook mạnh mẽ và linh hoạt để quản lý modal với
36
36
  ## Cài Đặt
37
37
 
38
38
  ```bash
39
- npm install @vnquang24/react-modal
39
+ npm install @helloworldqq/react-modal
40
40
  # hoặc
41
- yarn add @vnquang24/react-modal
41
+ yarn add @helloworldqq/react-modal
42
42
  # hoặc
43
- pnpm add @vnquang24/react-modal
43
+ pnpm add @helloworldqq/react-modal
44
44
  ```
45
45
 
46
46
  ---
@@ -49,7 +49,7 @@ pnpm add @vnquang24/react-modal
49
49
 
50
50
  ```tsx
51
51
  import React from 'react'
52
- import { ReactHookModalProvider, useDisclosure } from '@vnquang24/react-modal'
52
+ import { ReactHookModalProvider, useDisclosure } from '@helloworldqq/react-modal'
53
53
  import { Modal, Button } from 'antd'
54
54
 
55
55
  // 1. Định nghĩa component modal của bạn
@@ -97,7 +97,7 @@ Component provider quản lý tất cả các modal đã đăng ký.
97
97
  | `children` | `React.ReactNode` | ✅ | Các component con của ứng dụng |
98
98
 
99
99
  ---
100
- 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
100
+
101
101
  ### useDisclosure Hook
102
102
 
103
103
  Hook chính để điều khiển trạng thái modal.
@@ -324,7 +324,7 @@ onOpen({ wrong: 'data' }) // ❌ Lỗi kiểu
324
324
 
325
325
  ```tsx
326
326
  import { Modal, Button } from 'antd'
327
- import { useDisclosure } from '@vnquang24/react-modal'
327
+ import { useDisclosure } from '@helloworldqq/react-modal'
328
328
 
329
329
  const BasicModal = () => {
330
330
  const { isOpen, onClose } = useDisclosure({ tag: 'BasicModal' })
@@ -480,7 +480,7 @@ Ví dụ hoàn chỉnh với Ant Design 6:
480
480
  ```tsx
481
481
  import React from 'react'
482
482
  import { Modal, Button, Space, Form, Input, message } from 'antd'
483
- import { ReactHookModalProvider, useDisclosure } from '@vnquang24/react-modal'
483
+ import { ReactHookModalProvider, useDisclosure } from '@helloworldqq/react-modal'
484
484
 
485
485
  // Các Component Modal
486
486
  const WelcomeModal = () => {
package/dist/index.js CHANGED
@@ -92,20 +92,20 @@ var ModalWrapper = React.memo(function ModalWrapper(_ref) {
92
92
  var modalTags = useModalStore(function (state) {
93
93
  return state.modalTags;
94
94
  });
95
- var modalOpened = React.useMemo(function () {
96
- return Object.entries(modals).filter(function (_ref2) {
97
- var _modalTags$tag;
98
- var tag = _ref2[0];
99
- return !!((_modalTags$tag = modalTags[tag]) !== null && _modalTags$tag !== void 0 && _modalTags$tag.input);
100
- }).map(function (_ref3) {
101
- var tag = _ref3[0],
102
- Modal = _ref3[1];
103
- return React__default.createElement(Modal, {
104
- key: tag
105
- });
95
+ var allModals = React.useMemo(function () {
96
+ return Object.entries(modals).map(function (_ref2) {
97
+ var tag = _ref2[0],
98
+ Modal = _ref2[1];
99
+ try {
100
+ return React__default.createElement(Modal, {
101
+ key: tag
102
+ });
103
+ } catch (error) {
104
+ return null;
105
+ }
106
106
  });
107
- }, [modals, modalTags]);
108
- return React__default.createElement(React__default.Fragment, null, modalOpened);
107
+ }, [modals]);
108
+ return React__default.createElement(React__default.Fragment, null, allModals);
109
109
  });
110
110
 
111
111
  var useDisclosure = function useDisclosure(disclosureHook) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/store/index.ts","../src/provider/index.tsx","../src/hook/index.ts","../src/index.tsx"],"sourcesContent":["import { Store, useStore } from \"@tanstack/react-store\";\n\n// You can instantiate the store outside of React components too!\n\nimport { Any } from '../hook'\n\nexport type State = {\n modalTags: {\n [tag: string]: {\n input?: Any\n output?: Any\n }\n }\n}\n\nexport type Action = {\n openModal: (tag: string, input?: Any) => void\n okModal: (tag: string, output?: Any) => void\n closeModal: (tag: string) => void\n toggleModal: (tag: string) => void\n clearModalTag: (tag: string) => void\n clearAllModalTags: () => void\n}\nexport const store = new Store<State>({\n modalTags: {}\n});\n\n\nconst openModal = (tag: string, input?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: input ?? true // Default to true if no input is provided\n }\n }\n }))\n}\nconst okModal = (tag: string, output?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n output\n }\n }\n }))\n}\nconst closeModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: { input: false }\n }\n }))\n}\nconst toggleModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: !state.modalTags[tag]?.input\n }\n }\n }))\n}\nconst clearModalTag = (tag: string) => {\n store.setState((state) => {\n const newModalTags = { ...state.modalTags };\n delete newModalTags[tag];\n return { modalTags: newModalTags };\n })\n}\nconst clearAllModalTags = () => {\n store.setState(() => ({ modalTags: {} }))\n}\n\nexport const useModalStore = <T>(\n stateCallback: (state: State) => T,\n): T => {\n return useStore(store, stateCallback)\n}\n\nexport const useModalActions = <T>(\n actionCallback: (action: Action) => T\n): T => {\n return actionCallback(\n {\n openModal,\n okModal,\n closeModal,\n toggleModal,\n clearModalTag,\n clearAllModalTags\n }\n )\n}","import React, { useMemo, memo } from 'react'\nimport { useModalStore, State } from '../store'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport interface ModalWrapperProps {\n modals: Record<string, ModalComponent>\n}\n\nexport const ModalWrapper = memo(function ModalWrapper({\n modals\n}: ModalWrapperProps) {\n const modalTags = useModalStore((state: State) => state.modalTags)\n \n const modalOpened = useMemo(() => {\n return Object.entries(modals)\n .filter(([tag]) => !!modalTags[tag]?.input)\n .map(([tag, Modal]) => <Modal key={tag} />)\n }, [modals, modalTags])\n \n return <React.Fragment>{modalOpened}</React.Fragment>\n})\n","import { useEffect, useCallback, useRef } from 'react'\nimport { TagType } from './tag'\nimport { useModalStore, useModalActions, store } from '../store'\n\nexport type Any = string | number | boolean | object | undefined | Record<string, any>\n\nexport interface DisclosureHookProps<O> {\n tag: TagType\n isOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n onToggle?: () => void\n onChange?: (isOpen: boolean) => void\n onOk?: (output?: O) => void\n onCancel?: () => void\n}\n\nexport const useDisclosure = <Input = Any, Output = Any>(\n disclosureHook: DisclosureHookProps<Output>\n) => {\n const tag = disclosureHook.tag\n \n // Use refs to store callbacks to avoid stale closures\n const disclosureHookRef = useRef(disclosureHook)\n disclosureHookRef.current = disclosureHook\n\n const inputState = useModalStore(\n (state) => state.modalTags[tag]?.input\n ) as Input\n const outputState = useModalStore(\n (state) => state.modalTags[tag]?.output\n ) as Output\n const clearDisclosureTag = useModalActions(\n (actions) => actions.clearModalTag\n )\n\n const onOpenAction = useModalActions((actions) => actions.openModal)\n const okAction = useModalActions((actions) => actions.okModal)\n const onCloseAction = useModalActions((actions) => actions.closeModal)\n const onToggleAction = useModalActions((actions) => actions.toggleModal)\n\n const updateInput = useCallback((input?: Input) => {\n // If input is a function, call it and set the result as input\n let processedInput = input\n if (processedInput && typeof processedInput == 'object' && 'preventDefault' in processedInput) {\n processedInput = undefined\n }\n onOpenAction(tag, processedInput as Any)\n }, [tag, onOpenAction])\n\n const onOpen = useCallback((input?: Input) => {\n updateInput(input)\n disclosureHookRef.current?.onOpen?.()\n }, [updateInput])\n\n const onClose = useCallback(() => {\n onCloseAction(tag)\n disclosureHookRef.current?.onClose?.()\n }, [tag, onCloseAction])\n\n const onToggle = useCallback(() => {\n onToggleAction(tag)\n disclosureHookRef.current?.onToggle?.()\n }, [tag, onToggleAction])\n\n const onOk = useCallback((output?: Output) => {\n disclosureHookRef.current?.onOk?.(output)\n okAction(tag, output as Any)\n }, [tag, okAction])\n\n const onChange = useCallback((isOpen: boolean) => {\n if (isOpen) {\n onOpen()\n } else {\n onClose()\n }\n disclosureHookRef.current?.onChange?.(isOpen)\n }, [onOpen, onClose])\n\n useEffect(() => {\n return () => {\n clearDisclosureTag(tag)\n }\n }, [tag, clearDisclosureTag])\n\n useEffect(() => {\n if (outputState) {\n onOk(outputState as Output)\n }\n }, [outputState, onOk])\n\n return {\n isOpen: !!inputState,\n input: typeof inputState === 'boolean' ? undefined : inputState,\n onOpen,\n onClose,\n onToggle,\n onOk,\n onChange,\n updateInput,\n store\n }\n}\n","import * as React from 'react'\nimport { ModalWrapper } from './provider'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport type ReactHookModalProviderProps = {\n children: React.ReactNode\n modals: Record<string, ModalComponent>\n}\n\nexport const ReactHookModalProvider = ({\n children,\n modals\n}: ReactHookModalProviderProps) => {\n return (\n <React.Fragment>\n <ModalWrapper modals={modals} />\n {children}\n </React.Fragment>\n )\n}\n\nexport * from './hook'\nexport * from './provider'\n"],"names":["store","Store","modalTags","openModal","tag","input","setState","state","_extends2","_extends","okModal","output","_extends3","closeModal","_extends4","toggleModal","_state$modalTags$tag","_extends5","clearModalTag","newModalTags","clearAllModalTags","useModalStore","stateCallback","useStore","useModalActions","actionCallback","ModalWrapper","memo","_ref","modals","modalOpened","useMemo","Object","entries","filter","_ref2","_modalTags$tag","map","_ref3","Modal","React","key","Fragment","useDisclosure","disclosureHook","disclosureHookRef","useRef","current","inputState","outputState","_state$modalTags$tag2","clearDisclosureTag","actions","onOpenAction","okAction","onCloseAction","onToggleAction","updateInput","useCallback","processedInput","undefined","onOpen","_disclosureHookRef$cu","_disclosureHookRef$cu2","call","onClose","_disclosureHookRef$cu3","_disclosureHookRef$cu4","onToggle","_disclosureHookRef$cu5","_disclosureHookRef$cu6","onOk","_disclosureHookRef$cu7","_disclosureHookRef$cu8","onChange","isOpen","_disclosureHookRef$cu9","_disclosureHookRef$cu0","useEffect","ReactHookModalProvider","children"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/store/index.ts","../src/provider/index.tsx","../src/hook/index.ts","../src/index.tsx"],"sourcesContent":["import { Store, useStore } from \"@tanstack/react-store\";\n\n// You can instantiate the store outside of React components too!\n\nimport { Any } from '../hook'\n\nexport type State = {\n modalTags: {\n [tag: string]: {\n input?: Any\n output?: Any\n }\n }\n}\n\nexport type Action = {\n openModal: (tag: string, input?: Any) => void\n okModal: (tag: string, output?: Any) => void\n closeModal: (tag: string) => void\n toggleModal: (tag: string) => void\n clearModalTag: (tag: string) => void\n clearAllModalTags: () => void\n}\nexport const store = new Store<State>({\n modalTags: {}\n});\n\n\nconst openModal = (tag: string, input?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: input ?? true // Default to true if no input is provided\n }\n }\n }))\n}\nconst okModal = (tag: string, output?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n output\n }\n }\n }))\n}\nconst closeModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: { input: false }\n }\n }))\n}\nconst toggleModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: !state.modalTags[tag]?.input\n }\n }\n }))\n}\nconst clearModalTag = (tag: string) => {\n store.setState((state) => {\n const newModalTags = { ...state.modalTags };\n delete newModalTags[tag];\n return { modalTags: newModalTags };\n })\n}\nconst clearAllModalTags = () => {\n store.setState(() => ({ modalTags: {} }))\n}\n\nexport const useModalStore = <T>(\n stateCallback: (state: State) => T,\n): T => {\n return useStore(store, stateCallback)\n}\n\nexport const useModalActions = <T>(\n actionCallback: (action: Action) => T\n): T => {\n return actionCallback(\n {\n openModal,\n okModal,\n closeModal,\n toggleModal,\n clearModalTag,\n clearAllModalTags\n }\n )\n}","import React, { useMemo, memo } from 'react'\nimport { useModalStore, State } from '../store'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport interface ModalWrapperProps {\n modals: Record<string, ModalComponent>\n}\n\nexport const ModalWrapper = memo(function ModalWrapper({\n modals\n}: ModalWrapperProps) {\n const modalTags = useModalStore((state: State) => state.modalTags)\n \n // LUÔN render tất cả modals - KHÔNG conditional render\n // Modal components tự control hiển thị qua isOpen prop\n const allModals = useMemo(() => {\n return Object.entries(modals).map(([tag, Modal]) => {\n try {\n return <Modal key={tag} />\n } catch (error) {\n return null\n }\n })\n }, [modals]) // Chỉ phụ thuộc vào modals object, KHÔNG phụ thuộc modalTags\n \n return <React.Fragment>{allModals}</React.Fragment>\n})\n","import { useEffect, useCallback, useRef } from 'react'\nimport { TagType } from './tag'\nimport { useModalStore, useModalActions, store } from '../store'\n\nexport type Any = string | number | boolean | object | undefined | Record<string, any>\n\nexport interface DisclosureHookProps<O> {\n tag: TagType\n isOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n onToggle?: () => void\n onChange?: (isOpen: boolean) => void\n onOk?: (output?: O) => void\n onCancel?: () => void\n}\n\nexport const useDisclosure = <Input = Any, Output = Any>(\n disclosureHook: DisclosureHookProps<Output>\n) => {\n const tag = disclosureHook.tag\n \n // Use refs to store callbacks to avoid stale closures\n const disclosureHookRef = useRef(disclosureHook)\n disclosureHookRef.current = disclosureHook\n\n const inputState = useModalStore(\n (state) => state.modalTags[tag]?.input\n ) as Input\n const outputState = useModalStore(\n (state) => state.modalTags[tag]?.output\n ) as Output\n const clearDisclosureTag = useModalActions(\n (actions) => actions.clearModalTag\n )\n\n const onOpenAction = useModalActions((actions) => actions.openModal)\n const okAction = useModalActions((actions) => actions.okModal)\n const onCloseAction = useModalActions((actions) => actions.closeModal)\n const onToggleAction = useModalActions((actions) => actions.toggleModal)\n\n const updateInput = useCallback((input?: Input) => {\n // If input is a function, call it and set the result as input\n let processedInput = input\n if (processedInput && typeof processedInput == 'object' && 'preventDefault' in processedInput) {\n processedInput = undefined\n }\n onOpenAction(tag, processedInput as Any)\n }, [tag, onOpenAction])\n\n const onOpen = useCallback((input?: Input) => {\n updateInput(input)\n disclosureHookRef.current?.onOpen?.()\n }, [updateInput])\n\n const onClose = useCallback(() => {\n onCloseAction(tag)\n disclosureHookRef.current?.onClose?.()\n }, [tag, onCloseAction])\n\n const onToggle = useCallback(() => {\n onToggleAction(tag)\n disclosureHookRef.current?.onToggle?.()\n }, [tag, onToggleAction])\n\n const onOk = useCallback((output?: Output) => {\n disclosureHookRef.current?.onOk?.(output)\n okAction(tag, output as Any)\n }, [tag, okAction])\n\n const onChange = useCallback((isOpen: boolean) => {\n if (isOpen) {\n onOpen()\n } else {\n onClose()\n }\n disclosureHookRef.current?.onChange?.(isOpen)\n }, [onOpen, onClose])\n\n useEffect(() => {\n return () => {\n clearDisclosureTag(tag)\n }\n }, [tag, clearDisclosureTag])\n\n useEffect(() => {\n if (outputState) {\n onOk(outputState as Output)\n }\n }, [outputState, onOk])\n\n return {\n isOpen: !!inputState,\n input: typeof inputState === 'boolean' ? undefined : inputState,\n onOpen,\n onClose,\n onToggle,\n onOk,\n onChange,\n updateInput,\n store\n }\n}\n","import * as React from 'react'\nimport { ModalWrapper } from './provider'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport type ReactHookModalProviderProps = {\n children: React.ReactNode\n modals: Record<string, ModalComponent>\n}\n\nexport const ReactHookModalProvider = ({\n children,\n modals\n}: ReactHookModalProviderProps) => {\n return (\n <React.Fragment>\n <ModalWrapper modals={modals} />\n {children}\n </React.Fragment>\n )\n}\n\nexport * from './hook'\nexport * from './provider'\n"],"names":["store","Store","modalTags","openModal","tag","input","setState","state","_extends2","_extends","okModal","output","_extends3","closeModal","_extends4","toggleModal","_state$modalTags$tag","_extends5","clearModalTag","newModalTags","clearAllModalTags","useModalStore","stateCallback","useStore","useModalActions","actionCallback","ModalWrapper","memo","_ref","modals","allModals","useMemo","Object","entries","map","_ref2","Modal","React","key","error","Fragment","useDisclosure","disclosureHook","disclosureHookRef","useRef","current","inputState","outputState","_state$modalTags$tag2","clearDisclosureTag","actions","onOpenAction","okAction","onCloseAction","onToggleAction","updateInput","useCallback","processedInput","undefined","onOpen","_disclosureHookRef$cu","_disclosureHookRef$cu2","call","onClose","_disclosureHookRef$cu3","_disclosureHookRef$cu4","onToggle","_disclosureHookRef$cu5","_disclosureHookRef$cu6","onOk","_disclosureHookRef$cu7","_disclosureHookRef$cu8","onChange","isOpen","_disclosureHookRef$cu9","_disclosureHookRef$cu0","useEffect","ReactHookModalProvider","children"],"mappings":"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"}
@@ -89,20 +89,20 @@ var ModalWrapper = memo(function ModalWrapper(_ref) {
89
89
  var modalTags = useModalStore(function (state) {
90
90
  return state.modalTags;
91
91
  });
92
- var modalOpened = useMemo(function () {
93
- return Object.entries(modals).filter(function (_ref2) {
94
- var _modalTags$tag;
95
- var tag = _ref2[0];
96
- return !!((_modalTags$tag = modalTags[tag]) !== null && _modalTags$tag !== void 0 && _modalTags$tag.input);
97
- }).map(function (_ref3) {
98
- var tag = _ref3[0],
99
- Modal = _ref3[1];
100
- return React__default.createElement(Modal, {
101
- key: tag
102
- });
92
+ var allModals = useMemo(function () {
93
+ return Object.entries(modals).map(function (_ref2) {
94
+ var tag = _ref2[0],
95
+ Modal = _ref2[1];
96
+ try {
97
+ return React__default.createElement(Modal, {
98
+ key: tag
99
+ });
100
+ } catch (error) {
101
+ return null;
102
+ }
103
103
  });
104
- }, [modals, modalTags]);
105
- return React__default.createElement(React__default.Fragment, null, modalOpened);
104
+ }, [modals]);
105
+ return React__default.createElement(React__default.Fragment, null, allModals);
106
106
  });
107
107
 
108
108
  var useDisclosure = function useDisclosure(disclosureHook) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/store/index.ts","../src/provider/index.tsx","../src/hook/index.ts","../src/index.tsx"],"sourcesContent":["import { Store, useStore } from \"@tanstack/react-store\";\n\n// You can instantiate the store outside of React components too!\n\nimport { Any } from '../hook'\n\nexport type State = {\n modalTags: {\n [tag: string]: {\n input?: Any\n output?: Any\n }\n }\n}\n\nexport type Action = {\n openModal: (tag: string, input?: Any) => void\n okModal: (tag: string, output?: Any) => void\n closeModal: (tag: string) => void\n toggleModal: (tag: string) => void\n clearModalTag: (tag: string) => void\n clearAllModalTags: () => void\n}\nexport const store = new Store<State>({\n modalTags: {}\n});\n\n\nconst openModal = (tag: string, input?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: input ?? true // Default to true if no input is provided\n }\n }\n }))\n}\nconst okModal = (tag: string, output?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n output\n }\n }\n }))\n}\nconst closeModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: { input: false }\n }\n }))\n}\nconst toggleModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: !state.modalTags[tag]?.input\n }\n }\n }))\n}\nconst clearModalTag = (tag: string) => {\n store.setState((state) => {\n const newModalTags = { ...state.modalTags };\n delete newModalTags[tag];\n return { modalTags: newModalTags };\n })\n}\nconst clearAllModalTags = () => {\n store.setState(() => ({ modalTags: {} }))\n}\n\nexport const useModalStore = <T>(\n stateCallback: (state: State) => T,\n): T => {\n return useStore(store, stateCallback)\n}\n\nexport const useModalActions = <T>(\n actionCallback: (action: Action) => T\n): T => {\n return actionCallback(\n {\n openModal,\n okModal,\n closeModal,\n toggleModal,\n clearModalTag,\n clearAllModalTags\n }\n )\n}","import React, { useMemo, memo } from 'react'\nimport { useModalStore, State } from '../store'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport interface ModalWrapperProps {\n modals: Record<string, ModalComponent>\n}\n\nexport const ModalWrapper = memo(function ModalWrapper({\n modals\n}: ModalWrapperProps) {\n const modalTags = useModalStore((state: State) => state.modalTags)\n \n const modalOpened = useMemo(() => {\n return Object.entries(modals)\n .filter(([tag]) => !!modalTags[tag]?.input)\n .map(([tag, Modal]) => <Modal key={tag} />)\n }, [modals, modalTags])\n \n return <React.Fragment>{modalOpened}</React.Fragment>\n})\n","import { useEffect, useCallback, useRef } from 'react'\nimport { TagType } from './tag'\nimport { useModalStore, useModalActions, store } from '../store'\n\nexport type Any = string | number | boolean | object | undefined | Record<string, any>\n\nexport interface DisclosureHookProps<O> {\n tag: TagType\n isOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n onToggle?: () => void\n onChange?: (isOpen: boolean) => void\n onOk?: (output?: O) => void\n onCancel?: () => void\n}\n\nexport const useDisclosure = <Input = Any, Output = Any>(\n disclosureHook: DisclosureHookProps<Output>\n) => {\n const tag = disclosureHook.tag\n \n // Use refs to store callbacks to avoid stale closures\n const disclosureHookRef = useRef(disclosureHook)\n disclosureHookRef.current = disclosureHook\n\n const inputState = useModalStore(\n (state) => state.modalTags[tag]?.input\n ) as Input\n const outputState = useModalStore(\n (state) => state.modalTags[tag]?.output\n ) as Output\n const clearDisclosureTag = useModalActions(\n (actions) => actions.clearModalTag\n )\n\n const onOpenAction = useModalActions((actions) => actions.openModal)\n const okAction = useModalActions((actions) => actions.okModal)\n const onCloseAction = useModalActions((actions) => actions.closeModal)\n const onToggleAction = useModalActions((actions) => actions.toggleModal)\n\n const updateInput = useCallback((input?: Input) => {\n // If input is a function, call it and set the result as input\n let processedInput = input\n if (processedInput && typeof processedInput == 'object' && 'preventDefault' in processedInput) {\n processedInput = undefined\n }\n onOpenAction(tag, processedInput as Any)\n }, [tag, onOpenAction])\n\n const onOpen = useCallback((input?: Input) => {\n updateInput(input)\n disclosureHookRef.current?.onOpen?.()\n }, [updateInput])\n\n const onClose = useCallback(() => {\n onCloseAction(tag)\n disclosureHookRef.current?.onClose?.()\n }, [tag, onCloseAction])\n\n const onToggle = useCallback(() => {\n onToggleAction(tag)\n disclosureHookRef.current?.onToggle?.()\n }, [tag, onToggleAction])\n\n const onOk = useCallback((output?: Output) => {\n disclosureHookRef.current?.onOk?.(output)\n okAction(tag, output as Any)\n }, [tag, okAction])\n\n const onChange = useCallback((isOpen: boolean) => {\n if (isOpen) {\n onOpen()\n } else {\n onClose()\n }\n disclosureHookRef.current?.onChange?.(isOpen)\n }, [onOpen, onClose])\n\n useEffect(() => {\n return () => {\n clearDisclosureTag(tag)\n }\n }, [tag, clearDisclosureTag])\n\n useEffect(() => {\n if (outputState) {\n onOk(outputState as Output)\n }\n }, [outputState, onOk])\n\n return {\n isOpen: !!inputState,\n input: typeof inputState === 'boolean' ? undefined : inputState,\n onOpen,\n onClose,\n onToggle,\n onOk,\n onChange,\n updateInput,\n store\n }\n}\n","import * as React from 'react'\nimport { ModalWrapper } from './provider'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport type ReactHookModalProviderProps = {\n children: React.ReactNode\n modals: Record<string, ModalComponent>\n}\n\nexport const ReactHookModalProvider = ({\n children,\n modals\n}: ReactHookModalProviderProps) => {\n return (\n <React.Fragment>\n <ModalWrapper modals={modals} />\n {children}\n </React.Fragment>\n )\n}\n\nexport * from './hook'\nexport * from './provider'\n"],"names":["store","Store","modalTags","openModal","tag","input","setState","state","_extends2","_extends","okModal","output","_extends3","closeModal","_extends4","toggleModal","_state$modalTags$tag","_extends5","clearModalTag","newModalTags","clearAllModalTags","useModalStore","stateCallback","useStore","useModalActions","actionCallback","ModalWrapper","memo","_ref","modals","modalOpened","useMemo","Object","entries","filter","_ref2","_modalTags$tag","map","_ref3","Modal","React","key","Fragment","useDisclosure","disclosureHook","disclosureHookRef","useRef","current","inputState","outputState","_state$modalTags$tag2","clearDisclosureTag","actions","onOpenAction","okAction","onCloseAction","onToggleAction","updateInput","useCallback","processedInput","undefined","onOpen","_disclosureHookRef$cu","_disclosureHookRef$cu2","call","onClose","_disclosureHookRef$cu3","_disclosureHookRef$cu4","onToggle","_disclosureHookRef$cu5","_disclosureHookRef$cu6","onOk","_disclosureHookRef$cu7","_disclosureHookRef$cu8","onChange","isOpen","_disclosureHookRef$cu9","_disclosureHookRef$cu0","useEffect","ReactHookModalProvider","children"],"mappings":";;;;;;;;;;;;;AAuBO,IAAMA,KAAK,GAAG,IAAIC,KAAK,CAAQ;EACpCC,SAAS,EAAE;CACZ,CAAC;AAGF,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAIC,GAAW,EAAEC,KAAW;EACzCL,KAAK,CAACM,QAAQ,CAAC,UAACC,KAAK;IAAA,IAAAC,SAAA;IAAA,OAAM;MACzBN,SAAS,EAAAO,QAAA,KACJF,KAAK,CAACL,SAAS,GAAAM,SAAA,OAAAA,SAAA,CACjBJ,GAAG,IAAAK,QAAA,KACCF,KAAK,CAACL,SAAS,CAACE,GAAG,CAAC;QACvBC,KAAK,EAAEA,KAAK,WAALA,KAAK,GAAI;UAAIG,SAAA;KAGzB;GAAC,CAAC;AACL,CAAC;AACD,IAAME,OAAO,GAAG,SAAVA,OAAOA,CAAIN,GAAW,EAAEO,MAAY;EACxCX,KAAK,CAACM,QAAQ,CAAC,UAACC,KAAK;IAAA,IAAAK,SAAA;IAAA,OAAM;MACzBV,SAAS,EAAAO,QAAA,KACJF,KAAK,CAACL,SAAS,GAAAU,SAAA,OAAAA,SAAA,CACjBR,GAAG,IAAAK,QAAA,KACCF,KAAK,CAACL,SAAS,CAACE,GAAG,CAAC;QACvBO,MAAM,EAANA;UAAMC,SAAA;KAGX;GAAC,CAAC;AACL,CAAC;AACD,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIT,GAAW;EAC7BJ,KAAK,CAACM,QAAQ,CAAC,UAACC,KAAK;IAAA,IAAAO,SAAA;IAAA,OAAM;MACzBZ,SAAS,EAAAO,QAAA,KACJF,KAAK,CAACL,SAAS,GAAAY,SAAA,OAAAA,SAAA,CACjBV,GAAG,IAAG;QAAEC,KAAK,EAAE;OAAO,EAAAS,SAAA;KAE1B;GAAC,CAAC;AACL,CAAC;AACD,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIX,GAAW;EAC9BJ,KAAK,CAACM,QAAQ,CAAC,UAACC,KAAK;IAAA,IAAAS,oBAAA,EAAAC,SAAA;IAAA,OAAM;MACzBf,SAAS,EAAAO,QAAA,KACJF,KAAK,CAACL,SAAS,GAAAe,SAAA,OAAAA,SAAA,CACjBb,GAAG,IAAAK,QAAA,KACCF,KAAK,CAACL,SAAS,CAACE,GAAG,CAAC;QACvBC,KAAK,EAAE,GAAAW,oBAAA,GAACT,KAAK,CAACL,SAAS,CAACE,GAAG,CAAC,cAAAY,oBAAA,eAApBA,oBAAA,CAAsBX,KAAK;UAAAY,SAAA;KAGxC;GAAC,CAAC;AACL,CAAC;AACD,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAId,GAAW;EAChCJ,KAAK,CAACM,QAAQ,CAAC,UAACC,KAAK;IACnB,IAAMY,YAAY,GAAAV,QAAA,KAAQF,KAAK,CAACL,SAAS,CAAE;IAC3C,OAAOiB,YAAY,CAACf,GAAG,CAAC;IACxB,OAAO;MAAEF,SAAS,EAAEiB;KAAc;GACnC,CAAC;AACJ,CAAC;AACD,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA;EACrBpB,KAAK,CAACM,QAAQ,CAAC;IAAA,OAAO;MAAEJ,SAAS,EAAE;KAAI;GAAC,CAAC;AAC3C,CAAC;AAEM,IAAMmB,aAAa,GAAG,SAAhBA,aAAaA,CACxBC,aAAkC;EAElC,OAAOC,QAAQ,CAACvB,KAAK,EAAEsB,aAAa,CAAC;AACvC,CAAC;AAEM,IAAME,eAAe,GAAG,SAAlBA,eAAeA,CAC1BC,cAAqC;EAErC,OAAOA,cAAc,CACnB;IACEtB,SAAS,EAATA,SAAS;IACTO,OAAO,EAAPA,OAAO;IACPG,UAAU,EAAVA,UAAU;IACVE,WAAW,EAAXA,WAAW;IACXG,aAAa,EAAbA,aAAa;IACbE,iBAAiB,EAAjBA;GACD,CACF;AACH,CAAC;;IC1FYM,YAAY,GAAGC,IAAI,CAAC,SAASD,YAAYA,CAAAE,IAAA;MACpDC,MAAM,GAAAD,IAAA,CAANC,MAAM;EAEN,IAAM3B,SAAS,GAAGmB,aAAa,CAAC,UAACd,KAAY;IAAA,OAAKA,KAAK,CAACL,SAAS;IAAC;EAElE,IAAM4B,WAAW,GAAGC,OAAO,CAAC;IAC1B,OAAOC,MAAM,CAACC,OAAO,CAACJ,MAAM,CAAC,CAC1BK,MAAM,CAAC,UAAAC,KAAA;MAAA,IAAAC,cAAA;MAAA,IAAEhC,GAAG,GAAA+B,KAAA;MAAA,OAAM,CAAC,GAAAC,cAAA,GAAClC,SAAS,CAACE,GAAG,CAAC,cAAAgC,cAAA,eAAdA,cAAA,CAAgB/B,KAAK;MAAC,CAC1CgC,GAAG,CAAC,UAAAC,KAAA;MAAA,IAAElC,GAAG,GAAAkC,KAAA;QAAEC,KAAK,GAAAD,KAAA;MAAA,OAAME,6BAACD,KAAK;QAACE,GAAG,EAAErC;QAAO;MAAC;GAC9C,EAAE,CAACyB,MAAM,EAAE3B,SAAS,CAAC,CAAC;EAEvB,OAAOsC,6BAACA,cAAK,CAACE,QAAQ,QAAEZ,WAAW,CAAkB;AACvD,CAAC,CAAC;;ICJWa,aAAa,GAAG,SAAhBA,aAAaA,CACxBC,cAA2C;EAE3C,IAAMxC,GAAG,GAAGwC,cAAc,CAACxC,GAAG;EAG9B,IAAMyC,iBAAiB,GAAGC,MAAM,CAACF,cAAc,CAAC;EAChDC,iBAAiB,CAACE,OAAO,GAAGH,cAAc;EAE1C,IAAMI,UAAU,GAAG3B,aAAa,CAC9B,UAACd,KAAK;IAAA,IAAAS,oBAAA;IAAA,QAAAA,oBAAA,GAAKT,KAAK,CAACL,SAAS,CAACE,GAAG,CAAC,cAAAY,oBAAA,uBAApBA,oBAAA,CAAsBX,KAAK;IAC9B;EACV,IAAM4C,WAAW,GAAG5B,aAAa,CAC/B,UAACd,KAAK;IAAA,IAAA2C,qBAAA;IAAA,QAAAA,qBAAA,GAAK3C,KAAK,CAACL,SAAS,CAACE,GAAG,CAAC,cAAA8C,qBAAA,uBAApBA,qBAAA,CAAsBvC,MAAM;IAC9B;EACX,IAAMwC,kBAAkB,GAAG3B,eAAe,CACxC,UAAC4B,OAAO;IAAA,OAAKA,OAAO,CAAClC,aAAa;IACnC;EAED,IAAMmC,YAAY,GAAG7B,eAAe,CAAC,UAAC4B,OAAO;IAAA,OAAKA,OAAO,CAACjD,SAAS;IAAC;EACpE,IAAMmD,QAAQ,GAAG9B,eAAe,CAAC,UAAC4B,OAAO;IAAA,OAAKA,OAAO,CAAC1C,OAAO;IAAC;EAC9D,IAAM6C,aAAa,GAAG/B,eAAe,CAAC,UAAC4B,OAAO;IAAA,OAAKA,OAAO,CAACvC,UAAU;IAAC;EACtE,IAAM2C,cAAc,GAAGhC,eAAe,CAAC,UAAC4B,OAAO;IAAA,OAAKA,OAAO,CAACrC,WAAW;IAAC;EAExE,IAAM0C,WAAW,GAAGC,WAAW,CAAC,UAACrD,KAAa;IAE5C,IAAIsD,cAAc,GAAGtD,KAAK;IAC1B,IAAIsD,cAAc,IAAI,OAAOA,cAAc,IAAI,QAAQ,IAAI,gBAAgB,IAAIA,cAAc,EAAE;MAC7FA,cAAc,GAAGC,SAAS;;IAE5BP,YAAY,CAACjD,GAAG,EAAEuD,cAAqB,CAAC;GACzC,EAAE,CAACvD,GAAG,EAAEiD,YAAY,CAAC,CAAC;EAEvB,IAAMQ,MAAM,GAAGH,WAAW,CAAC,UAACrD,KAAa;;IACvCoD,WAAW,CAACpD,KAAK,CAAC;IAClB,CAAAyD,qBAAA,GAAAjB,iBAAiB,CAACE,OAAO,cAAAe,qBAAA,wBAAAC,sBAAA,GAAzBD,qBAAA,CAA2BD,MAAM,cAAAE,sBAAA,uBAAjCA,sBAAA,CAAAC,IAAA,CAAAF,sBAAqC;GACtC,EAAE,CAACL,WAAW,CAAC,CAAC;EAEjB,IAAMQ,OAAO,GAAGP,WAAW,CAAC;;IAC1BH,aAAa,CAACnD,GAAG,CAAC;IAClB,CAAA8D,sBAAA,GAAArB,iBAAiB,CAACE,OAAO,cAAAmB,sBAAA,wBAAAC,sBAAA,GAAzBD,sBAAA,CAA2BD,OAAO,cAAAE,sBAAA,uBAAlCA,sBAAA,CAAAH,IAAA,CAAAE,uBAAsC;GACvC,EAAE,CAAC9D,GAAG,EAAEmD,aAAa,CAAC,CAAC;EAExB,IAAMa,QAAQ,GAAGV,WAAW,CAAC;;IAC3BF,cAAc,CAACpD,GAAG,CAAC;IACnB,CAAAiE,sBAAA,GAAAxB,iBAAiB,CAACE,OAAO,cAAAsB,sBAAA,wBAAAC,sBAAA,GAAzBD,sBAAA,CAA2BD,QAAQ,cAAAE,sBAAA,uBAAnCA,sBAAA,CAAAN,IAAA,CAAAK,uBAAuC;GACxC,EAAE,CAACjE,GAAG,EAAEoD,cAAc,CAAC,CAAC;EAEzB,IAAMe,IAAI,GAAGb,WAAW,CAAC,UAAC/C,MAAe;;IACvC,CAAA6D,sBAAA,GAAA3B,iBAAiB,CAACE,OAAO,cAAAyB,sBAAA,wBAAAC,sBAAA,GAAzBD,sBAAA,CAA2BD,IAAI,cAAAE,sBAAA,uBAA/BA,sBAAA,CAAAT,IAAA,CAAAQ,sBAAA,EAAkC7D,MAAM,CAAC;IACzC2C,QAAQ,CAAClD,GAAG,EAAEO,MAAa,CAAC;GAC7B,EAAE,CAACP,GAAG,EAAEkD,QAAQ,CAAC,CAAC;EAEnB,IAAMoB,QAAQ,GAAGhB,WAAW,CAAC,UAACiB,MAAe;;IAC3C,IAAIA,MAAM,EAAE;MACVd,MAAM,EAAE;KACT,MAAM;MACLI,OAAO,EAAE;;IAEX,CAAAW,sBAAA,GAAA/B,iBAAiB,CAACE,OAAO,cAAA6B,sBAAA,wBAAAC,sBAAA,GAAzBD,sBAAA,CAA2BF,QAAQ,cAAAG,sBAAA,uBAAnCA,sBAAA,CAAAb,IAAA,CAAAY,sBAAA,EAAsCD,MAAM,CAAC;GAC9C,EAAE,CAACd,MAAM,EAAEI,OAAO,CAAC,CAAC;EAErBa,SAAS,CAAC;IACR,OAAO;MACL3B,kBAAkB,CAAC/C,GAAG,CAAC;KACxB;GACF,EAAE,CAACA,GAAG,EAAE+C,kBAAkB,CAAC,CAAC;EAE7B2B,SAAS,CAAC;IACR,IAAI7B,WAAW,EAAE;MACfsB,IAAI,CAACtB,WAAqB,CAAC;;GAE9B,EAAE,CAACA,WAAW,EAAEsB,IAAI,CAAC,CAAC;EAEvB,OAAO;IACLI,MAAM,EAAE,CAAC,CAAC3B,UAAU;IACpB3C,KAAK,EAAE,OAAO2C,UAAU,KAAK,SAAS,GAAGY,SAAS,GAAGZ,UAAU;IAC/Da,MAAM,EAANA,MAAM;IACNI,OAAO,EAAPA,OAAO;IACPG,QAAQ,EAARA,QAAQ;IACRG,IAAI,EAAJA,IAAI;IACJG,QAAQ,EAARA,QAAQ;IACRjB,WAAW,EAAXA,WAAW;IACXzD,KAAK,EAALA;GACD;AACH,CAAC;;IC5FY+E,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAAnD,IAAA;MACjCoD,QAAQ,GAAApD,IAAA,CAARoD,QAAQ;IACRnD,MAAM,GAAAD,IAAA,CAANC,MAAM;EAEN,OACEW,cAACA,QAAc,QACbA,cAACd,YAAY;IAACG,MAAM,EAAEA;IAAU,EAC/BmD,QAAQ,CACM;AAErB,CAAC;;;;"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/store/index.ts","../src/provider/index.tsx","../src/hook/index.ts","../src/index.tsx"],"sourcesContent":["import { Store, useStore } from \"@tanstack/react-store\";\n\n// You can instantiate the store outside of React components too!\n\nimport { Any } from '../hook'\n\nexport type State = {\n modalTags: {\n [tag: string]: {\n input?: Any\n output?: Any\n }\n }\n}\n\nexport type Action = {\n openModal: (tag: string, input?: Any) => void\n okModal: (tag: string, output?: Any) => void\n closeModal: (tag: string) => void\n toggleModal: (tag: string) => void\n clearModalTag: (tag: string) => void\n clearAllModalTags: () => void\n}\nexport const store = new Store<State>({\n modalTags: {}\n});\n\n\nconst openModal = (tag: string, input?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: input ?? true // Default to true if no input is provided\n }\n }\n }))\n}\nconst okModal = (tag: string, output?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n output\n }\n }\n }))\n}\nconst closeModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: { input: false }\n }\n }))\n}\nconst toggleModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: !state.modalTags[tag]?.input\n }\n }\n }))\n}\nconst clearModalTag = (tag: string) => {\n store.setState((state) => {\n const newModalTags = { ...state.modalTags };\n delete newModalTags[tag];\n return { modalTags: newModalTags };\n })\n}\nconst clearAllModalTags = () => {\n store.setState(() => ({ modalTags: {} }))\n}\n\nexport const useModalStore = <T>(\n stateCallback: (state: State) => T,\n): T => {\n return useStore(store, stateCallback)\n}\n\nexport const useModalActions = <T>(\n actionCallback: (action: Action) => T\n): T => {\n return actionCallback(\n {\n openModal,\n okModal,\n closeModal,\n toggleModal,\n clearModalTag,\n clearAllModalTags\n }\n )\n}","import React, { useMemo, memo } from 'react'\nimport { useModalStore, State } from '../store'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport interface ModalWrapperProps {\n modals: Record<string, ModalComponent>\n}\n\nexport const ModalWrapper = memo(function ModalWrapper({\n modals\n}: ModalWrapperProps) {\n const modalTags = useModalStore((state: State) => state.modalTags)\n \n // LUÔN render tất cả modals - KHÔNG conditional render\n // Modal components tự control hiển thị qua isOpen prop\n const allModals = useMemo(() => {\n return Object.entries(modals).map(([tag, Modal]) => {\n try {\n return <Modal key={tag} />\n } catch (error) {\n return null\n }\n })\n }, [modals]) // Chỉ phụ thuộc vào modals object, KHÔNG phụ thuộc modalTags\n \n return <React.Fragment>{allModals}</React.Fragment>\n})\n","import { useEffect, useCallback, useRef } from 'react'\nimport { TagType } from './tag'\nimport { useModalStore, useModalActions, store } from '../store'\n\nexport type Any = string | number | boolean | object | undefined | Record<string, any>\n\nexport interface DisclosureHookProps<O> {\n tag: TagType\n isOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n onToggle?: () => void\n onChange?: (isOpen: boolean) => void\n onOk?: (output?: O) => void\n onCancel?: () => void\n}\n\nexport const useDisclosure = <Input = Any, Output = Any>(\n disclosureHook: DisclosureHookProps<Output>\n) => {\n const tag = disclosureHook.tag\n \n // Use refs to store callbacks to avoid stale closures\n const disclosureHookRef = useRef(disclosureHook)\n disclosureHookRef.current = disclosureHook\n\n const inputState = useModalStore(\n (state) => state.modalTags[tag]?.input\n ) as Input\n const outputState = useModalStore(\n (state) => state.modalTags[tag]?.output\n ) as Output\n const clearDisclosureTag = useModalActions(\n (actions) => actions.clearModalTag\n )\n\n const onOpenAction = useModalActions((actions) => actions.openModal)\n const okAction = useModalActions((actions) => actions.okModal)\n const onCloseAction = useModalActions((actions) => actions.closeModal)\n const onToggleAction = useModalActions((actions) => actions.toggleModal)\n\n const updateInput = useCallback((input?: Input) => {\n // If input is a function, call it and set the result as input\n let processedInput = input\n if (processedInput && typeof processedInput == 'object' && 'preventDefault' in processedInput) {\n processedInput = undefined\n }\n onOpenAction(tag, processedInput as Any)\n }, [tag, onOpenAction])\n\n const onOpen = useCallback((input?: Input) => {\n updateInput(input)\n disclosureHookRef.current?.onOpen?.()\n }, [updateInput])\n\n const onClose = useCallback(() => {\n onCloseAction(tag)\n disclosureHookRef.current?.onClose?.()\n }, [tag, onCloseAction])\n\n const onToggle = useCallback(() => {\n onToggleAction(tag)\n disclosureHookRef.current?.onToggle?.()\n }, [tag, onToggleAction])\n\n const onOk = useCallback((output?: Output) => {\n disclosureHookRef.current?.onOk?.(output)\n okAction(tag, output as Any)\n }, [tag, okAction])\n\n const onChange = useCallback((isOpen: boolean) => {\n if (isOpen) {\n onOpen()\n } else {\n onClose()\n }\n disclosureHookRef.current?.onChange?.(isOpen)\n }, [onOpen, onClose])\n\n useEffect(() => {\n return () => {\n clearDisclosureTag(tag)\n }\n }, [tag, clearDisclosureTag])\n\n useEffect(() => {\n if (outputState) {\n onOk(outputState as Output)\n }\n }, [outputState, onOk])\n\n return {\n isOpen: !!inputState,\n input: typeof inputState === 'boolean' ? undefined : inputState,\n onOpen,\n onClose,\n onToggle,\n onOk,\n onChange,\n updateInput,\n store\n }\n}\n","import * as React from 'react'\nimport { ModalWrapper } from './provider'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport type ReactHookModalProviderProps = {\n children: React.ReactNode\n modals: Record<string, ModalComponent>\n}\n\nexport const ReactHookModalProvider = ({\n children,\n modals\n}: ReactHookModalProviderProps) => {\n return (\n <React.Fragment>\n <ModalWrapper modals={modals} />\n {children}\n </React.Fragment>\n )\n}\n\nexport * from './hook'\nexport * from './provider'\n"],"names":["store","Store","modalTags","openModal","tag","input","setState","state","_extends2","_extends","okModal","output","_extends3","closeModal","_extends4","toggleModal","_state$modalTags$tag","_extends5","clearModalTag","newModalTags","clearAllModalTags","useModalStore","stateCallback","useStore","useModalActions","actionCallback","ModalWrapper","memo","_ref","modals","allModals","useMemo","Object","entries","map","_ref2","Modal","React","key","error","Fragment","useDisclosure","disclosureHook","disclosureHookRef","useRef","current","inputState","outputState","_state$modalTags$tag2","clearDisclosureTag","actions","onOpenAction","okAction","onCloseAction","onToggleAction","updateInput","useCallback","processedInput","undefined","onOpen","_disclosureHookRef$cu","_disclosureHookRef$cu2","call","onClose","_disclosureHookRef$cu3","_disclosureHookRef$cu4","onToggle","_disclosureHookRef$cu5","_disclosureHookRef$cu6","onOk","_disclosureHookRef$cu7","_disclosureHookRef$cu8","onChange","isOpen","_disclosureHookRef$cu9","_disclosureHookRef$cu0","useEffect","ReactHookModalProvider","children"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/provider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAG5C,aAAK,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;AAE7E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CACvC;AAED,eAAO,MAAM,YAAY,+CAYvB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/provider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAG5C,aAAK,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;AAE7E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CACvC;AAED,eAAO,MAAM,YAAY,+CAkBvB,CAAA"}
@@ -0,0 +1,21 @@
1
+ export declare type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'none';
2
+ export interface LoggerConfig {
3
+ enabled: boolean;
4
+ level: LogLevel;
5
+ prefix: string;
6
+ }
7
+ export declare const logger: {
8
+ configure: (newConfig: Partial<LoggerConfig>) => void;
9
+ getConfig: () => {
10
+ enabled: boolean;
11
+ level: LogLevel;
12
+ prefix: string;
13
+ };
14
+ debug: (message: string, ...args: any[]) => void;
15
+ info: (message: string, ...args: any[]) => void;
16
+ warn: (message: string, ...args: any[]) => void;
17
+ error: (message: string, ...args: any[]) => void;
18
+ group: (label: string) => void;
19
+ groupEnd: () => void;
20
+ };
21
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/utils/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAEnE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,QAAQ,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAuBD,eAAO,MAAM,MAAM;2BACM,OAAO,CAAC,YAAY,CAAC;;iBA3BnC,OAAO;eACT,QAAQ;gBACP,MAAM;;qBA+BG,MAAM,WAAW,GAAG,EAAE;oBAMvB,MAAM,WAAW,GAAG,EAAE;oBAMtB,MAAM,WAAW,GAAG,EAAE;qBAMrB,MAAM,WAAW,GAAG,EAAE;mBAMxB,MAAM;;CAWtB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helloworldqq/react-modal",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "React hook disclosure modal - A powerful and flexible React hook library for managing modals",
5
5
  "author": "helloworldqq",
6
6
  "license": "MIT",
@@ -48,6 +48,9 @@
48
48
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
49
49
  },
50
50
  "devDependencies": {
51
+ "@babel/core": "^7.28.5",
52
+ "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
53
+ "@babel/plugin-transform-unicode-property-regex": "^7.27.1",
51
54
  "@testing-library/jest-dom": "^6.4.2",
52
55
  "@testing-library/react": "^14.2.1",
53
56
  "@testing-library/user-event": "^14.5.2",
@@ -79,4 +82,4 @@
79
82
  "@tanstack/react-store": "^0.7.3"
80
83
  },
81
84
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
82
- }
85
+ }