@lerx/promise-modal 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -0
  3. package/dist/app/ModalManager.d.ts +9 -0
  4. package/dist/app/ModalManager.d.ts.map +1 -0
  5. package/dist/app/constant.d.ts +3 -0
  6. package/dist/app/constant.d.ts.map +1 -0
  7. package/dist/components/Anchor/Anchor.d.ts +2 -0
  8. package/dist/components/Anchor/Anchor.d.ts.map +1 -0
  9. package/dist/components/Anchor/index.d.ts +2 -0
  10. package/dist/components/Anchor/index.d.ts.map +1 -0
  11. package/dist/components/Background/Background.d.ts +3 -0
  12. package/dist/components/Background/Background.d.ts.map +1 -0
  13. package/dist/components/Background/index.d.ts +2 -0
  14. package/dist/components/Background/index.d.ts.map +1 -0
  15. package/dist/components/FallbackComponents/FallbackContent.d.ts +3 -0
  16. package/dist/components/FallbackComponents/FallbackContent.d.ts.map +1 -0
  17. package/dist/components/FallbackComponents/FallbackFooter.d.ts +3 -0
  18. package/dist/components/FallbackComponents/FallbackFooter.d.ts.map +1 -0
  19. package/dist/components/FallbackComponents/FallbackForegroundFrame.d.ts +5 -0
  20. package/dist/components/FallbackComponents/FallbackForegroundFrame.d.ts.map +1 -0
  21. package/dist/components/FallbackComponents/FallbackSubtitle.d.ts +3 -0
  22. package/dist/components/FallbackComponents/FallbackSubtitle.d.ts.map +1 -0
  23. package/dist/components/FallbackComponents/FallbackTitle.d.ts +3 -0
  24. package/dist/components/FallbackComponents/FallbackTitle.d.ts.map +1 -0
  25. package/dist/components/FallbackComponents/index.d.ts +6 -0
  26. package/dist/components/FallbackComponents/index.d.ts.map +1 -0
  27. package/dist/components/Foreground/Foreground.d.ts +3 -0
  28. package/dist/components/Foreground/Foreground.d.ts.map +1 -0
  29. package/dist/components/Foreground/components/AlertInner.d.ts +9 -0
  30. package/dist/components/Foreground/components/AlertInner.d.ts.map +1 -0
  31. package/dist/components/Foreground/components/ConfirmInner.d.ts +9 -0
  32. package/dist/components/Foreground/components/ConfirmInner.d.ts.map +1 -0
  33. package/dist/components/Foreground/components/PromptInner.d.ts +9 -0
  34. package/dist/components/Foreground/components/PromptInner.d.ts.map +1 -0
  35. package/dist/components/Foreground/components/index.d.ts +4 -0
  36. package/dist/components/Foreground/components/index.d.ts.map +1 -0
  37. package/dist/components/Foreground/index.d.ts +2 -0
  38. package/dist/components/Foreground/index.d.ts.map +1 -0
  39. package/dist/components/Presenter/Presenter.d.ts +3 -0
  40. package/dist/components/Presenter/Presenter.d.ts.map +1 -0
  41. package/dist/components/Presenter/index.d.ts +2 -0
  42. package/dist/components/Presenter/index.d.ts.map +1 -0
  43. package/dist/core/handle/alert.d.ts +15 -0
  44. package/dist/core/handle/alert.d.ts.map +1 -0
  45. package/dist/core/handle/confirm.d.ts +15 -0
  46. package/dist/core/handle/confirm.d.ts.map +1 -0
  47. package/dist/core/handle/index.d.ts +4 -0
  48. package/dist/core/handle/index.d.ts.map +1 -0
  49. package/dist/core/handle/prompt.d.ts +18 -0
  50. package/dist/core/handle/prompt.d.ts.map +1 -0
  51. package/dist/core/index.d.ts +3 -0
  52. package/dist/core/index.d.ts.map +1 -0
  53. package/dist/core/node/ModalNode/AbstractBaseNode.d.ts +26 -0
  54. package/dist/core/node/ModalNode/AbstractBaseNode.d.ts.map +1 -0
  55. package/dist/core/node/ModalNode/AlertNode.d.ts +15 -0
  56. package/dist/core/node/ModalNode/AlertNode.d.ts.map +1 -0
  57. package/dist/core/node/ModalNode/ConfirmNode.d.ts +15 -0
  58. package/dist/core/node/ModalNode/ConfirmNode.d.ts.map +1 -0
  59. package/dist/core/node/ModalNode/PromptNode.d.ts +20 -0
  60. package/dist/core/node/ModalNode/PromptNode.d.ts.map +1 -0
  61. package/dist/core/node/ModalNode/index.d.ts +4 -0
  62. package/dist/core/node/ModalNode/index.d.ts.map +1 -0
  63. package/dist/core/node/index.d.ts +3 -0
  64. package/dist/core/node/index.d.ts.map +1 -0
  65. package/dist/core/node/nodeFactory.d.ts +4 -0
  66. package/dist/core/node/nodeFactory.d.ts.map +1 -0
  67. package/dist/core/node/type.d.ts +4 -0
  68. package/dist/core/node/type.d.ts.map +1 -0
  69. package/dist/helpers/getMillisecondsFromDuration.d.ts +2 -0
  70. package/dist/helpers/getMillisecondsFromDuration.d.ts.map +1 -0
  71. package/dist/hooks/useActiveModalCount.d.ts +2 -0
  72. package/dist/hooks/useActiveModalCount.d.ts.map +1 -0
  73. package/dist/hooks/useDefaultPathname.d.ts +4 -0
  74. package/dist/hooks/useDefaultPathname.d.ts.map +1 -0
  75. package/dist/hooks/useDestroyAfter.d.ts +3 -0
  76. package/dist/hooks/useDestroyAfter.d.ts.map +1 -0
  77. package/dist/hooks/useSubscribeModal.d.ts +3 -0
  78. package/dist/hooks/useSubscribeModal.d.ts.map +1 -0
  79. package/dist/hooks/useWindowSize.d.ts +5 -0
  80. package/dist/hooks/useWindowSize.d.ts.map +1 -0
  81. package/dist/index.cjs.js +18 -0
  82. package/dist/index.cjs.js.map +1 -0
  83. package/dist/index.d.ts +6 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.esm.js +18 -0
  86. package/dist/index.esm.js.map +1 -0
  87. package/dist/providers/ModalContext/ModalContext.d.ts +18 -0
  88. package/dist/providers/ModalContext/ModalContext.d.ts.map +1 -0
  89. package/dist/providers/ModalContext/ModalContextProvider.d.ts +22 -0
  90. package/dist/providers/ModalContext/ModalContextProvider.d.ts.map +1 -0
  91. package/dist/providers/ModalContext/index.d.ts +3 -0
  92. package/dist/providers/ModalContext/index.d.ts.map +1 -0
  93. package/dist/providers/ModalContext/useModalContext.d.ts +13 -0
  94. package/dist/providers/ModalContext/useModalContext.d.ts.map +1 -0
  95. package/dist/providers/ModalDataContext/ModalDataContext.d.ts +10 -0
  96. package/dist/providers/ModalDataContext/ModalDataContext.d.ts.map +1 -0
  97. package/dist/providers/ModalDataContext/ModalDataContextProvider.d.ts +7 -0
  98. package/dist/providers/ModalDataContext/ModalDataContextProvider.d.ts.map +1 -0
  99. package/dist/providers/ModalDataContext/index.d.ts +3 -0
  100. package/dist/providers/ModalDataContext/index.d.ts.map +1 -0
  101. package/dist/providers/ModalDataContext/useModalDataContext.d.ts +4 -0
  102. package/dist/providers/ModalDataContext/useModalDataContext.d.ts.map +1 -0
  103. package/dist/providers/index.d.ts +3 -0
  104. package/dist/providers/index.d.ts.map +1 -0
  105. package/dist/types/alert.d.ts +13 -0
  106. package/dist/types/alert.d.ts.map +1 -0
  107. package/dist/types/background.d.ts +4 -0
  108. package/dist/types/background.d.ts.map +1 -0
  109. package/dist/types/base.d.ts +30 -0
  110. package/dist/types/base.d.ts.map +1 -0
  111. package/dist/types/confirm.d.ts +14 -0
  112. package/dist/types/confirm.d.ts.map +1 -0
  113. package/dist/types/function.d.ts +16 -0
  114. package/dist/types/index.d.ts +7 -0
  115. package/dist/types/index.d.ts.map +1 -0
  116. package/dist/types/modal.d.ts +46 -0
  117. package/dist/types/modal.d.ts.map +1 -0
  118. package/dist/types/object.d.ts +14 -0
  119. package/dist/types/prompt.d.ts +26 -0
  120. package/dist/types/prompt.d.ts.map +1 -0
  121. package/dist/types/styles.d.ts +4 -0
  122. package/dist/types/units.d.ts +21 -0
  123. package/dist/types/utility.d.ts +45 -0
  124. package/package.json +97 -0
@@ -0,0 +1,22 @@
1
+ import { type ComponentType, type PropsWithChildren } from 'react';
2
+ import type { FooterComponentProps, ModalFrameProps } from '../../types';
3
+ interface ModalContextProviderProps {
4
+ BackgroundComponent?: ComponentType<ModalFrameProps>;
5
+ ForegroundComponent?: ComponentType<ModalFrameProps>;
6
+ TitleComponent?: ComponentType<PropsWithChildren>;
7
+ SubtitleComponent?: ComponentType<PropsWithChildren>;
8
+ ContentComponent?: ComponentType<PropsWithChildren>;
9
+ FooterComponent?: ComponentType<FooterComponentProps>;
10
+ options?: {
11
+ duration?: Duration;
12
+ backdrop?: Color;
13
+ manualDestroy?: boolean;
14
+ closeOnBackdropClick?: boolean;
15
+ };
16
+ usePathname?: () => {
17
+ pathname: string;
18
+ };
19
+ }
20
+ export declare const ModalContextProvider: import("react").MemoExoticComponent<({ ForegroundComponent, BackgroundComponent, TitleComponent, SubtitleComponent, ContentComponent, FooterComponent, options, usePathname, children, }: PropsWithChildren<ModalContextProviderProps>) => import("react/jsx-runtime").JSX.Element>;
21
+ export {};
22
+ //# sourceMappingURL=ModalContextProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalContextProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalContext/ModalContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAIvB,MAAM,OAAO,CAAC;AAoBf,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAK/B,UAAU,yBAAyB;IACjC,mBAAmB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACrD,mBAAmB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAClD,iBAAiB,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACrD,gBAAgB,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE;QAER,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAEpB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAEjB,aAAa,CAAC,EAAE,OAAO,CAAC;QAExB,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,WAAW,CAAC,EAAE,MAAM;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,eAAO,MAAM,oBAAoB,4LAW5B,iBAAiB,CAAC,yBAAyB,CAAC,6CAuDhD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ModalContextProvider } from './ModalContextProvider';
2
+ export { useModalContext, useModalOptions, useModalDuration, useModalBackdrop, } from './useModalContext';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalContext/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EACL,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare const useModalContext: () => import("./ModalContext").ModalContextProps;
2
+ export declare const useModalOptions: () => {
3
+ duration: Duration;
4
+ backdrop: Color;
5
+ manualDestroy: boolean;
6
+ closeOnBackdropClick: boolean;
7
+ };
8
+ export declare const useModalDuration: () => {
9
+ duration: Duration;
10
+ milliseconds: number;
11
+ };
12
+ export declare const useModalBackdrop: () => Color;
13
+ //# sourceMappingURL=useModalContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModalContext.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalContext/useModalContext.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,kDAAiC,CAAC;AAE9D,eAAO,MAAM,eAAe;;;;;CAG3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,aAG5B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ModalNode } from '../../core';
2
+ import type { ModalActions, ModalHandlersWithId } from '../../types';
3
+ export interface ModalDataContextProps extends ModalHandlersWithId {
4
+ modalIds: ModalNode['id'][];
5
+ getModal: Fn<[id: ModalNode['id']], ModalActions>;
6
+ getModalNode: Fn<[id: ModalNode['id']], ModalNode | undefined>;
7
+ setUpdater: Fn<[updater: Fn]>;
8
+ }
9
+ export declare const ModalDataContext: import("react").Context<ModalDataContextProps>;
10
+ //# sourceMappingURL=ModalDataContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalDataContext.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalDataContext/ModalDataContext.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5B,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAClD,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAC/D,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;CAC/B;AAED,eAAO,MAAM,gBAAgB,gDAe3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type PropsWithChildren } from 'react';
2
+ interface ModalDataContextProviderProps {
3
+ pathname: string;
4
+ }
5
+ export declare const ModalDataContextProvider: import("react").MemoExoticComponent<({ pathname, children, }: PropsWithChildren<ModalDataContextProviderProps>) => import("react/jsx-runtime").JSX.Element>;
6
+ export {};
7
+ //# sourceMappingURL=ModalDataContextProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalDataContextProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalDataContext/ModalDataContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAOvB,MAAM,OAAO,CAAC;AAYf,UAAU,6BAA6B;IACrC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,wBAAwB,gEAIhC,iBAAiB,CAAC,6BAA6B,CAAC,6CAsKpD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ModalDataContextProvider } from './ModalDataContextProvider';
2
+ export { useModalDataContext, useModal } from './useModalDataContext';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalDataContext/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ManagedModal } from '../../types';
2
+ export declare const useModalDataContext: () => import("./ModalDataContext").ModalDataContextProps;
3
+ export declare const useModal: (id: ManagedModal["id"]) => import("../../types").ModalActions;
4
+ //# sourceMappingURL=useModalDataContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModalDataContext.d.ts","sourceRoot":"","sources":["../../../src/providers/ModalDataContext/useModalDataContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,eAAO,MAAM,mBAAmB,0DAAqC,CAAC;AAEtE,eAAO,MAAM,QAAQ,OAAQ,YAAY,CAAC,IAAI,CAAC,iDAG9C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ModalContextProvider, useModalContext, useModalOptions, useModalDuration, useModalBackdrop, } from './ModalContext';
2
+ export { ModalDataContextProvider, useModalDataContext, useModal, } from './ModalDataContext';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,QAAQ,GACT,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ComponentType, ReactNode } from 'react';
2
+ import type { BaseModal, ContentComponentProps, FooterOptions } from './base';
3
+ export type AlertFooterRender = (props: {
4
+ onConfirm: VoidFunction;
5
+ }) => ReactNode;
6
+ export type AlertContentProps = Pick<ContentComponentProps, 'onConfirm'>;
7
+ export interface AlertModal<B> extends BaseModal<void, B> {
8
+ type: 'alert';
9
+ subtype?: 'info' | 'success' | 'warning' | 'error';
10
+ content?: ReactNode | ComponentType<AlertContentProps>;
11
+ footer?: AlertFooterRender | Pick<FooterOptions, 'confirm' | 'hideConfirm'> | false;
12
+ }
13
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/types/alert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE9E,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,YAAY,CAAC;CACzB,KAAK,SAAS,CAAC;AAEhB,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;AAEzE,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,CAAC,EACH,iBAAiB,GACjB,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,aAAa,CAAC,GAC9C,KAAK,CAAC;CACX"}
@@ -0,0 +1,4 @@
1
+ export interface ModalBackground<B> {
2
+ data?: B;
3
+ }
4
+ //# sourceMappingURL=background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/types/background.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,CAAC;CACV"}
@@ -0,0 +1,30 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ModalBackground } from './background';
3
+ export interface BaseModal<T, B> {
4
+ title?: ReactNode;
5
+ subtitle?: ReactNode;
6
+ background?: ModalBackground<B>;
7
+ manualDestroy?: boolean;
8
+ closeOnBackdropClick?: boolean;
9
+ resolve: (result: T | null) => void;
10
+ }
11
+ export interface ContentComponentProps {
12
+ onConfirm: VoidFunction;
13
+ onCancel: VoidFunction;
14
+ }
15
+ export interface FooterOptions {
16
+ confirm?: string;
17
+ hideConfirm?: boolean;
18
+ cancel?: string;
19
+ hideCancel?: boolean;
20
+ }
21
+ export type FooterComponentProps = {
22
+ confirmLabel?: string;
23
+ hideConfirm?: boolean;
24
+ cancelLabel?: string;
25
+ hideCancel?: boolean;
26
+ disabled?: boolean;
27
+ onConfirm: VoidFunction;
28
+ onCancel?: VoidFunction;
29
+ };
30
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/types/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,SAAS,CAAC,CAAC,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ComponentType, ReactNode } from 'react';
2
+ import type { BaseModal, ContentComponentProps, FooterOptions } from './base';
3
+ export type ConfirmFooterRender = (props: {
4
+ onConfirm: VoidFunction;
5
+ onCancel: VoidFunction;
6
+ }) => ReactNode;
7
+ export type ConfirmContentProps = ContentComponentProps;
8
+ export interface ConfirmModal<B> extends BaseModal<boolean, B> {
9
+ type: 'confirm';
10
+ subtype?: 'info' | 'success' | 'warning' | 'error';
11
+ content?: ReactNode | ComponentType<ConfirmContentProps>;
12
+ footer?: ConfirmFooterRender | FooterOptions | false;
13
+ }
14
+ //# sourceMappingURL=confirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/types/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;CACxB,KAAK,SAAS,CAAC;AAEhB,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAExD,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,mBAAmB,GAAG,aAAa,GAAG,KAAK,CAAC;CACtD"}
@@ -0,0 +1,16 @@
1
+ declare interface Fn<Params extends Array<any> = [], Return = void> {
2
+ (...props: Params): Return;
3
+ }
4
+
5
+ declare interface AsyncFn<Params extends Array<any>, Return = void> {
6
+ (...props: Params): Promise<Return>;
7
+ }
8
+
9
+ declare type SetStateFn<S = unknown> = (
10
+ value: S | ((prevState: S) => S),
11
+ ) => void;
12
+
13
+ declare type Parameter<
14
+ F extends Fn<[any]> | SetStateFn<any> | undefined,
15
+ I extends number = 0,
16
+ > = Parameters<NonNullable<F>>[I];
@@ -0,0 +1,7 @@
1
+ export * from './alert';
2
+ export * from './base';
3
+ export * from './confirm';
4
+ export * from './modal';
5
+ export * from './prompt';
6
+ export * from './background';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { ModalNode } from '../core';
2
+ import type { AlertModal } from './alert';
3
+ import type { ModalBackground } from './background';
4
+ import type { ConfirmModal } from './confirm';
5
+ import type { PromptModal } from './prompt';
6
+ export type Modal<T = any, B = any> = AlertModal<B> | ConfirmModal<B> | PromptModal<T, B>;
7
+ export type ManagedEntity = {
8
+ id: number;
9
+ initiator: string;
10
+ };
11
+ export type ManagedModal<T = any, B = any> = ManagedEntity & Modal<T, B>;
12
+ export type ModalFrameProps<B = any> = {
13
+ id: number;
14
+ type: 'alert' | 'confirm' | 'prompt';
15
+ alive: boolean;
16
+ visible: boolean;
17
+ initiator: string;
18
+ manualDestroy: boolean;
19
+ closeOnBackdropClick: boolean;
20
+ background?: ModalBackground<B>;
21
+ onConfirm: () => void;
22
+ onClose: () => void;
23
+ onChange: (value: any) => void;
24
+ onDestroy: () => void;
25
+ onChangeOrder: Fn;
26
+ };
27
+ export interface ModalIdProps {
28
+ modalId: ModalNode['id'];
29
+ }
30
+ export interface ModalLayerProps extends ModalIdProps {
31
+ onChangeOrder: Fn;
32
+ }
33
+ export interface ModalHandlersWithId {
34
+ onConfirm: (modalId: ModalNode['id']) => void;
35
+ onClose: (modalId: ModalNode['id']) => void;
36
+ onChange: (modalId: ModalNode['id'], value: any) => void;
37
+ onDestroy: (modalId: ModalNode['id']) => void;
38
+ }
39
+ export type ModalActions = {
40
+ modal: ModalNode | undefined;
41
+ onConfirm: () => void;
42
+ onClose: () => void;
43
+ onChange: (value: any) => void;
44
+ onDestroy: () => void;
45
+ };
46
+ //# sourceMappingURL=modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../src/types/modal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,IAC9B,UAAU,CAAC,CAAC,CAAC,GACb,YAAY,CAAC,CAAC,CAAC,GACf,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtB,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,aAAa,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzE,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,GAAG,IAAI;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,aAAa,EAAE,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,aAAa,EAAE,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC9C,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACzD,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC"}
@@ -0,0 +1,14 @@
1
+ declare type PropertyKey = string | number | symbol;
2
+
3
+ declare type Dictionary<T = any> = Record<string, T>;
4
+
5
+ declare type StringDictionary = Dictionary<string>;
6
+
7
+ /** 중첩된 객체 구조를 가진 타입 T를 입력받아서 내부 필드들이 모두 필수인 타입을 반환 */
8
+ declare type DeepRequired<T> = {
9
+ [P in keyof T]-?: NonNullable<T[P]> extends object
10
+ ? NonNullable<T[P]> extends any[]
11
+ ? DeepRequired<NonNullable<T[P]>[number]>[]
12
+ : DeepRequired<NonNullable<T[P]>>
13
+ : T[P];
14
+ };
@@ -0,0 +1,26 @@
1
+ import type { ComponentType, ReactNode } from 'react';
2
+ import type { BaseModal, ContentComponentProps, FooterOptions } from './base';
3
+ export type PromptFooterRender<T> = (props: {
4
+ onConfirm: VoidFunction;
5
+ onCancel: VoidFunction;
6
+ value: T | undefined;
7
+ onChange: SetStateFn<T | undefined>;
8
+ disabled: boolean;
9
+ }) => ReactNode;
10
+ export interface PromptInputProps<T> {
11
+ value?: T;
12
+ defaultValue?: T;
13
+ onChange: SetStateFn<T | undefined>;
14
+ onConfirm?: VoidFunction;
15
+ }
16
+ export type PromptContentProps = ContentComponentProps;
17
+ export interface PromptModal<T = any, B = any> extends BaseModal<T, B> {
18
+ type: 'prompt';
19
+ content?: ReactNode | ComponentType<PromptContentProps>;
20
+ defaultValue?: T;
21
+ Input: (props: PromptInputProps<T>) => ReactNode;
22
+ disabled?: (value: T | undefined) => boolean;
23
+ returnOnCancel?: boolean;
24
+ footer?: PromptFooterRender<T> | FooterOptions | false;
25
+ }
26
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/types/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE9E,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACpC,QAAQ,EAAE,OAAO,CAAC;CACnB,KAAK,SAAS,CAAC;AAEhB,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B;AAED,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEvD,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAE,SAAQ,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACxD,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC;CACxD"}
@@ -0,0 +1,4 @@
1
+ declare module '*.module.css' {
2
+ const styles: Record<string, string>;
3
+ export default styles;
4
+ }
@@ -0,0 +1,21 @@
1
+ declare type DomSize =
2
+ | number
3
+ | `${number}%`
4
+ | `${number}px`
5
+ | `${number}rem`
6
+ | `${number}em`
7
+ | `${number}vh`
8
+ | `${number}vw`
9
+ | `calc(${string})`;
10
+
11
+ declare type Color =
12
+ | `#${string}`
13
+ | `rgb(${number}, ${number}, ${number})`
14
+ | `rgba(${number}, ${number}, ${number}, ${number})`
15
+ | `var(--${string})`;
16
+
17
+ declare type Duration = `${number}ms` | `${number}s`;
18
+
19
+ declare type Params<T extends Array<string>> = Record<T[number], string>;
20
+
21
+ declare type Roll<T> = { [K in keyof T]: T[K] };
@@ -0,0 +1,45 @@
1
+ declare type Nullish<T> = T | null | undefined;
2
+
3
+ /** T에서 key in K를 추출하고, 이를 Required로 설정 */
4
+ declare type PickRequired<T, K extends keyof T> = Required<Pick<T, K>>;
5
+
6
+ /** T에서 key in K를 추출하고, 이를 Partial로 설정 */
7
+ declare type PickPartial<T, K extends keyof T> = Partial<Pick<T, K>>;
8
+
9
+ /** T에서 key in K를 제거하고, 나머지를 Required로 설정 */
10
+ declare type OmitRequired<T, K extends keyof T> = Required<Omit<T, K>>;
11
+
12
+ /** T에서 key in K를 제거하고, 나머지를 Partial로 설정 */
13
+ declare type OmitPartial<T, K extends keyof T> = Partial<Omit<T, K>>;
14
+
15
+ /** T에서 key in K는 Required로 설정하고, 나머지는 Partial로 설정 */
16
+ declare type PickAndPartial<T, K extends keyof T> = PickRequired<T, K> &
17
+ OmitPartial<T, K>;
18
+
19
+ /** T에서 K를 Required로 설정하고, 나머지는 유지 */
20
+ declare type RequiredBy<T, K extends keyof T> = PickRequired<T, K> & T;
21
+
22
+ /** T에서 K를 Partial로 설정하고, 나머지는 유지 */
23
+ declare type PartialBy<T, K extends keyof T> = PickPartial<T, K> & Omit<T, K>;
24
+
25
+ declare type Roll<T> = { [K in keyof T]: T[K] };
26
+
27
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
28
+
29
+ type ExpandRecursively<T> = T extends object
30
+ ? T extends infer O
31
+ ? { [K in keyof O]: ExpandRecursively<O[K]> }
32
+ : never
33
+ : T;
34
+
35
+ declare type WithKey<T> = T & { key: string };
36
+
37
+ declare type ElementOf<T extends any[]> = T[number];
38
+
39
+ declare type DeepRequired<T> = {
40
+ [P in keyof T]-?: NonNullable<T[P]> extends object
41
+ ? NonNullable<T[P]> extends any[]
42
+ ? DeepRequired<NonNullable<T[P]>[number]>[]
43
+ : DeepRequired<NonNullable<T[P]>>
44
+ : T[P];
45
+ };
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "@lerx/promise-modal",
3
+ "version": "0.0.1",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/vincent-kk/aileron.git",
7
+ "directory": "packages/promise-modal"
8
+ },
9
+ "license": "MIT",
10
+ "author": {
11
+ "name": "Vincent K. Kelvin",
12
+ "email": "lunox273@gmail.com"
13
+ },
14
+ "main": "dist/index.cjs.js",
15
+ "module": "dist/index.esm.js",
16
+ "types": "dist/index.d.ts",
17
+ "files": [
18
+ "dist",
19
+ "README.md"
20
+ ],
21
+ "sideEffects": false,
22
+ "scripts": {
23
+ "format": "prettier --write \"src/**/*.ts\" \"src/**/*.tsx\"",
24
+ "clean": "rm -rf dist",
25
+ "dependencies:build": "yarn workspace @winglet/common-utils build && yarn workspace @winglet/react-utils build:only",
26
+ "test": "yarn dependencies:build && vitest",
27
+ "build:only": "yarn clean && rollup -c && tsc-alias",
28
+ "build": "yarn dependencies:build && yarn build:only",
29
+ "build:watch": "yarn clean && yarn build:only -w",
30
+ "start": "yarn build && yarn storybook",
31
+ "lint": "eslint \"src/**/*.{ts,tsx}\" --report-unused-disable-directives --max-warnings 0",
32
+ "size-limit": "size-limit",
33
+ "make-dependency-graph": "npx depcruise src --config .dependency-cruiser.js --output-type dot > dependency-graph.dot && dot -Tpng dependency-graph.dot -o dependency-graph.png",
34
+ "storybook": "storybook dev -p 6006",
35
+ "build-storybook": "storybook build",
36
+ "publish:npm": "yarn build && yarn npm publish --access public"
37
+ },
38
+ "dependencies": {
39
+ "@winglet/common-utils": "0.0.1",
40
+ "@winglet/react-utils": "0.0.1",
41
+ "clsx": "^2.0.0"
42
+ },
43
+ "devDependencies": {
44
+ "@chromatic-com/storybook": "^3.2.2",
45
+ "@rollup/plugin-commonjs": "^28.0.1",
46
+ "@rollup/plugin-node-resolve": "^15.3.0",
47
+ "@rollup/plugin-replace": "^6.0.1",
48
+ "@size-limit/preset-app": "^11.1.6",
49
+ "@size-limit/preset-big-lib": "^11.1.6",
50
+ "@size-limit/preset-small-lib": "^11.1.6",
51
+ "@storybook/addon-essentials": "^8.4.7",
52
+ "@storybook/addon-interactions": "^8.4.7",
53
+ "@storybook/blocks": "^8.4.7",
54
+ "@storybook/react": "^8.4.7",
55
+ "@storybook/react-vite": "^8.4.7",
56
+ "@storybook/test": "^8.4.7",
57
+ "@testing-library/jest-dom": "^6.6.3",
58
+ "@testing-library/react": "^16.0.1",
59
+ "@trivago/prettier-plugin-sort-imports": "^4.3.0",
60
+ "@types/react": "^18.3.12",
61
+ "@types/react-dom": "^18.3.1",
62
+ "@types/rollup-plugin-peer-deps-external": "^2.2.5",
63
+ "@typescript-eslint/eslint-plugin": "^8.14.0",
64
+ "@typescript-eslint/parser": "^8.14.0",
65
+ "antd": "^5.22.5",
66
+ "autoprefixer": "^10.4.20",
67
+ "cssnano": "^7.0.6",
68
+ "dependency-cruiser": "^16.7.0",
69
+ "eslint": "^8.56.0",
70
+ "eslint-plugin-react": "^7.37.2",
71
+ "eslint-plugin-react-hooks": "^5.0.0",
72
+ "eslint-plugin-react-refresh": "^0.4.14",
73
+ "eslint-plugin-storybook": "^0.11.1",
74
+ "jsdom": "^25.0.1",
75
+ "prettier": "^3.3.3",
76
+ "react": "^18.3.1",
77
+ "react-dom": "^18.3.1",
78
+ "rollup": "^4.27.4",
79
+ "rollup-plugin-copy": "^3.5.0",
80
+ "rollup-plugin-peer-deps-external": "^2.2.4",
81
+ "rollup-plugin-postcss": "^4.0.2",
82
+ "rollup-plugin-terser": "^7.0.2",
83
+ "rollup-plugin-typescript2": "^0.36.0",
84
+ "rollup-plugin-visualizer": "^5.12.0",
85
+ "sass-embedded": "^1.83.0",
86
+ "size-limit": "^11.1.6",
87
+ "storybook": "^8.4.7",
88
+ "tsc-alias": "^1.8.10",
89
+ "typescript": "^5.7.2",
90
+ "vite": "^5.4.11",
91
+ "vitest": "^2.1.5"
92
+ },
93
+ "peerDependencies": {
94
+ "react": ">=16 <19",
95
+ "react-dom": ">=16 <19"
96
+ }
97
+ }