@lerx/promise-modal 0.0.18 → 0.0.19
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.
|
@@ -2,7 +2,7 @@ export interface Fn<Params extends Array<any> = [], Return = void> {
|
|
|
2
2
|
(...props: Params): Return;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
export interface AsyncFn<Params extends Array<any
|
|
5
|
+
export interface AsyncFn<Params extends Array<any> = [], Return = void> {
|
|
6
6
|
(...props: Params): Promise<Return>;
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Presenter.d.ts","sourceRoot":"","sources":["../../../src/components/Presenter/Presenter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Presenter.d.ts","sourceRoot":"","sources":["../../../src/components/Presenter/Presenter.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAM1D,eAAO,MAAM,SAAS,oDAAsB,YAAY,6CAetD,CAAC"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),n=require("react"),t=require("react-dom"),o=require("@winglet/react-utils"),r=require("@winglet/common-utils"),i=require("@emotion/css");const s={current:[]},a={current:e=>{s.current.push(e)}},l={current:null},c={get prerender(){return s.current},clearPrerender(){s.current=[]},open(e){a.current(e)},setupOpen(e){a.current=e},anchor(e,n="promise-modal"){if(l.current){const e=document.getElementById(l.current.id);if(e)return e}const t=document.createElement(e);return t.setAttribute("id",`${n}-${r.getRandomString(36)}`),document.body.appendChild(t),l.current=t,t}},u="300ms",d="rgba(0, 0, 0, 0.5)",m=n.createContext({context:r.EMPTY_OBJECT}),p=({context:t,children:o})=>{const i=n.useMemo((()=>({context:t||r.EMPTY_OBJECT})),[t]);return e.jsx(m.Provider,{value:i,children:o})},f=()=>n.useContext(m);function b(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const h=i.css("production"===process.env.NODE_ENV?{name:"u7uu4v",styles:"display:none;position:fixed;inset:0;z-index:-999;pointer-events:none;>*{pointer-events:none;}"}:{name:"coymdj-background",styles:"display:none;position:fixed;inset:0;z-index:-999;pointer-events:none;>*{pointer-events:none;};label:background;",toString:b}),C=i.css("production"===process.env.NODE_ENV?{name:"n07k1x",styles:"pointer-events:all"}:{name:"1hektcs-active",styles:"pointer-events:all;label:active;",toString:b}),g=i.css("production"===process.env.NODE_ENV?{name:"1wnowod",styles:"display:flex;align-items:center;justify-content:center"}:{name:"xppew7-visible",styles:"display:flex;align-items:center;justify-content:center;label:visible;",toString:b}),y=({modalId:t,onChangeOrder:o})=>{const{BackgroundComponent:r}=ue(),{context:s}=f(),{modal:a,onClose:l,onChange:c,onConfirm:u,onDestroy:d}=K(t),m=n.useCallback((e=>{a&&a.closeOnBackdropClick&&a.visible&&l(),e.stopPropagation()}),[a,l]),p=n.useMemo((()=>a?.BackgroundComponent||r),[r,a]);return a?e.jsx("div",{className:i.cx(h,{[g]:a.manualDestroy?a.alive:a.visible,[C]:a.closeOnBackdropClick&&a.visible}),onClick:m,children:p&&e.jsx(p,{id:a.id,type:a.type,alive:a.alive,visible:a.visible,initiator:a.initiator,manualDestroy:a.manualDestroy,closeOnBackdropClick:a.closeOnBackdropClick,background:a.background,onChange:c,onConfirm:u,onClose:l,onDestroy:d,onChangeOrder:o,context:s})}):null};function v(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const k=i.css("production"===process.env.NODE_ENV?{name:"12g0hx0",styles:"pointer-events:none;display:none;position:fixed;inset:0;z-index:1"}:{name:"1hcczik-foreground",styles:"pointer-events:none;display:none;position:fixed;inset:0;z-index:1;label:foreground;",toString:v}),x=i.css("production"===process.env.NODE_ENV?{name:"1g95xyq",styles:">*{pointer-events:all;}"}:{name:"123csva-active",styles:">*{pointer-events:all;};label:active;",toString:v}),j=i.css("production"===process.env.NODE_ENV?{name:"1fmljv2",styles:"display:flex!important;justify-content:center;align-items:center"}:{name:"1p4unab-visible",styles:"display:flex!important;justify-content:center;align-items:center;label:visible;",toString:v}),O=n.memo((({modal:t,handlers:i})=>{const{title:s,subtitle:a,content:l,footer:c}=n.useMemo((()=>t),[t]),{context:u}=f(),{onConfirm:d}=n.useMemo((()=>i),[i]),m=o.useHandle(d),{TitleComponent:p,SubtitleComponent:b,ContentComponent:h,FooterComponent:C}=ue();return e.jsxs(n.Fragment,{children:[s&&(r.isString(s)?e.jsx(p,{context:u,children:s}):s),a&&(r.isString(a)?e.jsx(b,{context:u,children:a}):a),l&&(r.isString(l)?e.jsx(h,{context:u,children:l}):o.renderComponent(l,{onConfirm:m})),!1!==c&&("function"==typeof c?c({onConfirm:m,context:u}):e.jsx(C,{onConfirm:m,confirmLabel:c?.confirm,hideConfirm:c?.hideConfirm,context:u}))]})})),w=n.memo((({modal:t,handlers:i})=>{const{title:s,subtitle:a,content:l,footer:c}=n.useMemo((()=>t),[t]),{context:u}=f(),{onConfirm:d,onClose:m}=n.useMemo((()=>i),[i]),p=o.useHandle(d),b=o.useHandle(m),{TitleComponent:h,SubtitleComponent:C,ContentComponent:g,FooterComponent:y}=ue();return e.jsxs(n.Fragment,{children:[s&&(r.isString(s)?e.jsx(h,{context:u,children:s}):s),a&&(r.isString(a)?e.jsx(C,{context:u,children:a}):a),l&&(r.isString(l)?e.jsx(g,{context:u,children:l}):o.renderComponent(l,{onConfirm:p,onCancel:b,context:u})),!1!==c&&("function"==typeof c?c({onConfirm:p,onCancel:b,context:u}):e.jsx(y,{onConfirm:p,onCancel:b,confirmLabel:c?.confirm,cancelLabel:c?.cancel,hideConfirm:c?.hideConfirm,hideCancel:c?.hideCancel,context:u}))]})})),D=n.memo((({modal:t,handlers:i})=>{const{Input:s,defaultValue:a,disabled:l,title:c,subtitle:u,content:d,footer:m}=n.useMemo((()=>({...t,Input:n.memo(o.withErrorBoundary(t.Input))})),[t]),{context:p}=f(),[b,h]=n.useState(a),{onChange:C,onClose:g,onConfirm:y}=n.useMemo((()=>i),[i]),v=o.useHandle(g),k=o.useHandle((e=>{const n=r.isFunction(e)?e(b):e;h(n),C(n)})),x=n.useCallback((()=>{setTimeout((()=>{y()}))}),[y]),j=n.useMemo((()=>!!b&&!!l?.(b)),[l,b]),{TitleComponent:O,SubtitleComponent:w,ContentComponent:D,FooterComponent:B}=ue();return e.jsxs(n.Fragment,{children:[c&&(r.isString(c)?e.jsx(O,{context:p,children:c}):c),u&&(r.isString(u)?e.jsx(w,{context:p,children:u}):u),d&&(r.isString(d)?e.jsx(D,{context:p,children:d}):o.renderComponent(d,{onConfirm:x,onCancel:v,context:p})),s&&e.jsx(s,{defaultValue:a,value:b,onChange:k,onConfirm:x,onCancel:v,context:p}),!1!==m&&("function"==typeof m?m({value:b,disabled:j,onChange:k,onConfirm:x,onCancel:v,context:p}):e.jsx(B,{disabled:j,onConfirm:x,onCancel:v,confirmLabel:m?.confirm,cancelLabel:m?.cancel,hideConfirm:m?.hideConfirm,hideCancel:m?.hideCancel,context:p}))]})})),B=({modalId:t,onChangeOrder:o})=>{const{ForegroundComponent:r}=ue(),{context:s}=f(),{modal:a,onChange:l,onConfirm:c,onClose:u,onDestroy:d}=K(t),m=n.useMemo((()=>a?.ForegroundComponent||r),[r,a]);return a?e.jsx("div",{className:i.cx(k,{[j]:a.manualDestroy?a.alive:a.visible,[x]:a.visible}),children:e.jsxs(m,{id:a.id,type:a.type,alive:a.alive,visible:a.visible,initiator:a.initiator,manualDestroy:a.manualDestroy,closeOnBackdropClick:a.closeOnBackdropClick,background:a.background,onChange:l,onConfirm:c,onClose:u,onDestroy:d,onChangeOrder:o,context:s,children:["alert"===a.type&&e.jsx(O,{modal:a,handlers:{onConfirm:c}}),"confirm"===a.type&&e.jsx(w,{modal:a,handlers:{onConfirm:c,onClose:u}}),"prompt"===a.type&&e.jsx(D,{modal:a,handlers:{onChange:l,onConfirm:c,onClose:u}})]})}):null},F=e=>{const[n,t]=o.useTick();return o.useOnMount((()=>{if(e)return e.subscribe(t)})),n},P=i.css("production"===process.env.NODE_ENV?{name:"13dmkf4",styles:"position:fixed;inset:0;pointer-events:none;overflow:hidden"}:{name:"yjeu12-presenter",styles:"position:fixed;inset:0;pointer-events:none;overflow:hidden;label:presenter;",toString:function(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}})
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),n=require("react"),t=require("react-dom"),o=require("@winglet/react-utils"),r=require("@winglet/common-utils"),i=require("@emotion/css");const s={current:[]},a={current:e=>{s.current.push(e)}},l={current:null},c={get prerender(){return s.current},clearPrerender(){s.current=[]},open(e){a.current(e)},setupOpen(e){a.current=e},anchor(e,n="promise-modal"){if(l.current){const e=document.getElementById(l.current.id);if(e)return e}const t=document.createElement(e);return t.setAttribute("id",`${n}-${r.getRandomString(36)}`),document.body.appendChild(t),l.current=t,t}},u="300ms",d="rgba(0, 0, 0, 0.5)",m=n.createContext({context:r.EMPTY_OBJECT}),p=({context:t,children:o})=>{const i=n.useMemo((()=>({context:t||r.EMPTY_OBJECT})),[t]);return e.jsx(m.Provider,{value:i,children:o})},f=()=>n.useContext(m);function b(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const h=i.css("production"===process.env.NODE_ENV?{name:"u7uu4v",styles:"display:none;position:fixed;inset:0;z-index:-999;pointer-events:none;>*{pointer-events:none;}"}:{name:"coymdj-background",styles:"display:none;position:fixed;inset:0;z-index:-999;pointer-events:none;>*{pointer-events:none;};label:background;",toString:b}),C=i.css("production"===process.env.NODE_ENV?{name:"n07k1x",styles:"pointer-events:all"}:{name:"1hektcs-active",styles:"pointer-events:all;label:active;",toString:b}),g=i.css("production"===process.env.NODE_ENV?{name:"1wnowod",styles:"display:flex;align-items:center;justify-content:center"}:{name:"xppew7-visible",styles:"display:flex;align-items:center;justify-content:center;label:visible;",toString:b}),y=({modalId:t,onChangeOrder:o})=>{const{BackgroundComponent:r}=ue(),{context:s}=f(),{modal:a,onClose:l,onChange:c,onConfirm:u,onDestroy:d}=K(t),m=n.useCallback((e=>{a&&a.closeOnBackdropClick&&a.visible&&l(),e.stopPropagation()}),[a,l]),p=n.useMemo((()=>a?.BackgroundComponent||r),[r,a]);return a?e.jsx("div",{className:i.cx(h,{[g]:a.manualDestroy?a.alive:a.visible,[C]:a.closeOnBackdropClick&&a.visible}),onClick:m,children:p&&e.jsx(p,{id:a.id,type:a.type,alive:a.alive,visible:a.visible,initiator:a.initiator,manualDestroy:a.manualDestroy,closeOnBackdropClick:a.closeOnBackdropClick,background:a.background,onChange:c,onConfirm:u,onClose:l,onDestroy:d,onChangeOrder:o,context:s})}):null};function v(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const k=i.css("production"===process.env.NODE_ENV?{name:"12g0hx0",styles:"pointer-events:none;display:none;position:fixed;inset:0;z-index:1"}:{name:"1hcczik-foreground",styles:"pointer-events:none;display:none;position:fixed;inset:0;z-index:1;label:foreground;",toString:v}),x=i.css("production"===process.env.NODE_ENV?{name:"1g95xyq",styles:">*{pointer-events:all;}"}:{name:"123csva-active",styles:">*{pointer-events:all;};label:active;",toString:v}),j=i.css("production"===process.env.NODE_ENV?{name:"1fmljv2",styles:"display:flex!important;justify-content:center;align-items:center"}:{name:"1p4unab-visible",styles:"display:flex!important;justify-content:center;align-items:center;label:visible;",toString:v}),O=n.memo((({modal:t,handlers:i})=>{const{title:s,subtitle:a,content:l,footer:c}=n.useMemo((()=>t),[t]),{context:u}=f(),{onConfirm:d}=n.useMemo((()=>i),[i]),m=o.useHandle(d),{TitleComponent:p,SubtitleComponent:b,ContentComponent:h,FooterComponent:C}=ue();return e.jsxs(n.Fragment,{children:[s&&(r.isString(s)?e.jsx(p,{context:u,children:s}):s),a&&(r.isString(a)?e.jsx(b,{context:u,children:a}):a),l&&(r.isString(l)?e.jsx(h,{context:u,children:l}):o.renderComponent(l,{onConfirm:m})),!1!==c&&("function"==typeof c?c({onConfirm:m,context:u}):e.jsx(C,{onConfirm:m,confirmLabel:c?.confirm,hideConfirm:c?.hideConfirm,context:u}))]})})),w=n.memo((({modal:t,handlers:i})=>{const{title:s,subtitle:a,content:l,footer:c}=n.useMemo((()=>t),[t]),{context:u}=f(),{onConfirm:d,onClose:m}=n.useMemo((()=>i),[i]),p=o.useHandle(d),b=o.useHandle(m),{TitleComponent:h,SubtitleComponent:C,ContentComponent:g,FooterComponent:y}=ue();return e.jsxs(n.Fragment,{children:[s&&(r.isString(s)?e.jsx(h,{context:u,children:s}):s),a&&(r.isString(a)?e.jsx(C,{context:u,children:a}):a),l&&(r.isString(l)?e.jsx(g,{context:u,children:l}):o.renderComponent(l,{onConfirm:p,onCancel:b,context:u})),!1!==c&&("function"==typeof c?c({onConfirm:p,onCancel:b,context:u}):e.jsx(y,{onConfirm:p,onCancel:b,confirmLabel:c?.confirm,cancelLabel:c?.cancel,hideConfirm:c?.hideConfirm,hideCancel:c?.hideCancel,context:u}))]})})),D=n.memo((({modal:t,handlers:i})=>{const{Input:s,defaultValue:a,disabled:l,title:c,subtitle:u,content:d,footer:m}=n.useMemo((()=>({...t,Input:n.memo(o.withErrorBoundary(t.Input))})),[t]),{context:p}=f(),[b,h]=n.useState(a),{onChange:C,onClose:g,onConfirm:y}=n.useMemo((()=>i),[i]),v=o.useHandle(g),k=o.useHandle((e=>{const n=r.isFunction(e)?e(b):e;h(n),C(n)})),x=n.useCallback((()=>{setTimeout((()=>{y()}))}),[y]),j=n.useMemo((()=>!!b&&!!l?.(b)),[l,b]),{TitleComponent:O,SubtitleComponent:w,ContentComponent:D,FooterComponent:B}=ue();return e.jsxs(n.Fragment,{children:[c&&(r.isString(c)?e.jsx(O,{context:p,children:c}):c),u&&(r.isString(u)?e.jsx(w,{context:p,children:u}):u),d&&(r.isString(d)?e.jsx(D,{context:p,children:d}):o.renderComponent(d,{onConfirm:x,onCancel:v,context:p})),s&&e.jsx(s,{defaultValue:a,value:b,onChange:k,onConfirm:x,onCancel:v,context:p}),!1!==m&&("function"==typeof m?m({value:b,disabled:j,onChange:k,onConfirm:x,onCancel:v,context:p}):e.jsx(B,{disabled:j,onConfirm:x,onCancel:v,confirmLabel:m?.confirm,cancelLabel:m?.cancel,hideConfirm:m?.hideConfirm,hideCancel:m?.hideCancel,context:p}))]})})),B=({modalId:t,onChangeOrder:o})=>{const{ForegroundComponent:r}=ue(),{context:s}=f(),{modal:a,onChange:l,onConfirm:c,onClose:u,onDestroy:d}=K(t),m=n.useMemo((()=>a?.ForegroundComponent||r),[r,a]);return a?e.jsx("div",{className:i.cx(k,{[j]:a.manualDestroy?a.alive:a.visible,[x]:a.visible}),children:e.jsxs(m,{id:a.id,type:a.type,alive:a.alive,visible:a.visible,initiator:a.initiator,manualDestroy:a.manualDestroy,closeOnBackdropClick:a.closeOnBackdropClick,background:a.background,onChange:l,onConfirm:c,onClose:u,onDestroy:d,onChangeOrder:o,context:s,children:["alert"===a.type&&e.jsx(O,{modal:a,handlers:{onConfirm:c}}),"confirm"===a.type&&e.jsx(w,{modal:a,handlers:{onConfirm:c,onClose:u}}),"prompt"===a.type&&e.jsx(D,{modal:a,handlers:{onChange:l,onConfirm:c,onClose:u}})]})}):null},F=e=>{const[n,t]=o.useTick();return o.useOnMount((()=>{if(e)return e.subscribe(t)})),n},P=i.css("production"===process.env.NODE_ENV?{name:"13dmkf4",styles:"position:fixed;inset:0;pointer-events:none;overflow:hidden"}:{name:"yjeu12-presenter",styles:"position:fixed;inset:0;pointer-events:none;overflow:hidden;label:presenter;",toString:function(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}}),{increment:E}=r.counterFactory(1),M=n.memo((({modalId:t})=>{const r=n.useRef(null),{modal:i}=K(t);F(i);const s=o.useHandle((()=>{r.current&&(r.current.style.zIndex=`${E()}`)}));return e.jsxs("div",{ref:r,className:P,children:[e.jsx(y,{modalId:t,onChangeOrder:s}),e.jsx(B,{modalId:t,onChangeOrder:s})]})})),N=(e=0)=>{const{modalIds:t,getModalNode:o}=G();return n.useMemo((()=>{let e=0;for(const n of t)o(n)?.visible&&e++;return e}),[o,t,e])};
|
|
2
2
|
/******************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -14,5 +14,5 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
15
|
***************************************************************************** */
|
|
16
16
|
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
|
|
17
|
-
function S(e,n,t,o){if("a"===t&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?e!==n||!o:!n.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?o:"a"===t?o.call(e):o?o.value:n.get(e)}function I(e,n,t,o,r){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?e!==n||!r:!n.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?r.call(e,t):r?r.value=t:n.set(e,t),t}var T,V,_,L,R;"function"==typeof SuppressedError&&SuppressedError;class q{get alive(){return S(this,T,"f")}get visible(){return S(this,V,"f")}constructor({id:e,initiator:n,title:t,subtitle:o,background:r,manualDestroy:i=!1,closeOnBackdropClick:s=!0,resolve:a,ForegroundComponent:l,BackgroundComponent:c}){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"initiator",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"title",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtitle",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"background",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"manualDestroy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"closeOnBackdropClick",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"ForegroundComponent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"BackgroundComponent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),T.set(this,void 0),V.set(this,void 0),_.set(this,void 0),L.set(this,[]),this.id=e,this.initiator=n,this.title=t,this.subtitle=o,this.background=r,this.manualDestroy=i,this.closeOnBackdropClick=s,this.ForegroundComponent=l,this.BackgroundComponent=c,I(this,T,!0,"f"),I(this,V,!0,"f"),I(this,_,a,"f")}subscribe(e){return S(this,L,"f").push(e),()=>{I(this,L,S(this,L,"f").filter((n=>n!==e)),"f")}}publish(){for(const e of S(this,L,"f"))e()}resolve(e){S(this,_,"f").call(this,e)}onDestroy(){const e=!0===S(this,T,"f");I(this,T,!1,"f"),this.manualDestroy&&e&&this.publish()}onShow(){const e=!1===S(this,V,"f");I(this,V,!0,"f"),e&&this.publish()}onHide(){const e=!0===S(this,V,"f");I(this,V,!1,"f"),e&&this.publish()}}T=new WeakMap,V=new WeakMap,_=new WeakMap,L=new WeakMap;class H extends q{constructor({id:e,initiator:n,type:t,subtype:o,title:r,subtitle:i,content:s,footer:a,background:l,manualDestroy:c,closeOnBackdropClick:u,resolve:d,ForegroundComponent:m,BackgroundComponent:p}){super({id:e,initiator:n,title:r,subtitle:i,background:l,manualDestroy:c,closeOnBackdropClick:u,resolve:d,ForegroundComponent:m,BackgroundComponent:p}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtype",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.type=t,this.subtype=o,this.content=s,this.footer=a}onClose(){this.resolve(null)}onConfirm(){this.resolve(null)}}class z extends q{constructor({id:e,initiator:n,type:t,subtype:o,title:r,subtitle:i,content:s,footer:a,background:l,manualDestroy:c,closeOnBackdropClick:u,resolve:d,ForegroundComponent:m,BackgroundComponent:p}){super({id:e,initiator:n,title:r,subtitle:i,background:l,manualDestroy:c,closeOnBackdropClick:u,resolve:d,ForegroundComponent:m,BackgroundComponent:p}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtype",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.type=t,this.subtype=o,this.content=s,this.footer=a}onClose(){this.resolve(!1)}onConfirm(){this.resolve(!0)}}class $ extends q{constructor({id:e,initiator:n,type:t,title:o,subtitle:r,content:i,defaultValue:s,Input:a,disabled:l,returnOnCancel:c,footer:u,background:d,manualDestroy:m,closeOnBackdropClick:p,resolve:f,ForegroundComponent:b,BackgroundComponent:h}){super({id:e,initiator:n,title:o,subtitle:r,background:d,manualDestroy:m,closeOnBackdropClick:p,resolve:f,ForegroundComponent:b,BackgroundComponent:h}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"defaultValue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"Input",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"returnOnCancel",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),R.set(this,void 0),this.type=t,this.content=i,this.Input=a,this.defaultValue=s,I(this,R,s,"f"),this.disabled=l,this.returnOnCancel=c,this.footer=u}onChange(e){I(this,R,e,"f")}onConfirm(){this.resolve(S(this,R,"f")??null)}onClose(){this.returnOnCancel?this.resolve(S(this,R,"f")??null):this.resolve(null)}}R=new WeakMap;const Y=e=>{switch(e.type){case"alert":return new H(e);case"confirm":return new z(e);case"prompt":return new $(e)}throw new Error(`Unknown modal: ${e.type}`,{modal:e})},A=/^\s*(\d+)\s*(ms|s|m|h)\s*$/,W=e=>{const[,n,t]=e.match(A)||[];if(!n||!t)return 0;const o=parseInt(n);return"ms"===t?o:"s"===t?1e3*o:"m"===t?60*o*1e3:"h"===t?60*o*60*1e3:0},U=n.createContext({modalIds:[],getModalNode:r.undefinedFunction,onChange:r.undefinedFunction,onConfirm:r.undefinedFunction,onClose:r.undefinedFunction,onDestroy:r.undefinedFunction,setUpdater:r.undefinedFunction,getModal:()=>({modal:void 0,onConfirm:r.undefinedFunction,onClose:r.undefinedFunction,onChange:r.undefinedFunction,onDestroy:r.undefinedFunction})}),J=n.memo((({pathname:t,children:r})=>{const i=n.useRef(new Map),[s,a]=n.useState([]),l=o.useReference(s),u=n.useRef(t),d=n.useRef(0),m=de(),p=n.useMemo((()=>W(m.duration)),[m]);o.useOnMountLayout((()=>{const{manualDestroy:e,closeOnBackdropClick:n}=m;for(const t of c.prerender){const o=Y({...t,id:d.current++,initiator:u.current,manualDestroy:void 0!==t.manualDestroy?t.manualDestroy:e,closeOnBackdropClick:void 0!==t.closeOnBackdropClick?t.closeOnBackdropClick:n});i.current.set(o.id,o),a((e=>[...e,o.id]))}c.setupOpen((t=>{const o=Y({...t,id:d.current++,initiator:u.current,manualDestroy:void 0!==t.manualDestroy?t.manualDestroy:e,closeOnBackdropClick:void 0!==t.closeOnBackdropClick?t.closeOnBackdropClick:n});i.current.set(o.id,o),a((e=>[...e.filter((e=>{const n=!i.current.get(e)?.alive;return n&&i.current.delete(e),!n})),o.id]))})),c.clearPrerender()})),n.useLayoutEffect((()=>{for(const e of l.current){const n=i.current.get(e);n?.alive&&(n.initiator===t?n.onShow():n.onHide())}u.current=t}),[l,t]);const f=n.useCallback((e=>i.current.get(e)),[]),b=n.useCallback((e=>{const n=i.current.get(e);n&&(n.onDestroy(),h.current?.())}),[]),h=n.useRef(),C=n.useCallback((e=>{const n=i.current.get(e);n&&(n.onHide(),h.current?.(),n.manualDestroy||setTimeout((()=>{n.onDestroy()}),p))}),[p]),g=n.useCallback(((e,n)=>{const t=i.current.get(e);t&&"prompt"===t.type&&t.onChange(n)}),[]),y=n.useCallback((e=>{const n=i.current.get(e);n&&(n.onConfirm(),C(e))}),[C]),v=n.useCallback((e=>{const n=i.current.get(e);n&&(n.onClose(),C(e))}),[C]),k=n.useCallback((e=>({modal:f(e),onConfirm:()=>y(e),onClose:()=>v(e),onChange:n=>g(e,n),onDestroy:()=>b(e)})),[f,y,v,g,b]),x=n.useMemo((()=>({modalIds:s,getModalNode:f,onChange:g,onConfirm:y,onClose:v,onDestroy:b,getModal:k,setUpdater:e=>{h.current=e}})),[s,k,f,g,y,v,b]);return e.jsx(U.Provider,{value:x,children:r})})),G=()=>n.useContext(U),K=e=>{const{getModal:t}=G();return n.useMemo((()=>t(e)),[e,t])},Q=i.css("production"===process.env.NODE_ENV?{name:"2hpasy",styles:"display:flex;align-items:center;justify-content:center;position:fixed;inset:0;pointer-events:none;z-index:1000;transition:background-color ease-in-out"}:{name:"lhj8co-anchor",styles:"display:flex;align-items:center;justify-content:center;position:fixed;inset:0;pointer-events:none;z-index:1000;transition:background-color ease-in-out;label:anchor;",toString:function(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}}),X=n.memo(o.withErrorBoundary((()=>{const[t,r]=o.useTick(),{modalIds:i,setUpdater:s}=G();n.useEffect((()=>{s(r)}),[s,r]);const{options:a}=ue(),l=N(t);return e.jsx("div",{className:Q,style:{transitionDuration:a.duration,backgroundColor:l?a.backdrop:"transparent"},children:i.map((n=>e.jsx(M,{modalId:n},n)))})})));function Z(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const ee=i.css("production"===process.env.NODE_ENV?{name:"131j9g2",styles:"margin:unset"}:{name:"1w3kbco-fallback",styles:"margin:unset;label:fallback;",toString:Z}),ne=i.css("production"===process.env.NODE_ENV?{name:"1kuk3a3",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:white;padding:20px 80px;gap:10px;border:1px solid black"}:{name:"16dbbea-frame",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:white;padding:20px 80px;gap:10px;border:1px solid black;label:frame;",toString:Z}),te=({children:n})=>e.jsx("h2",{className:ee,children:n}),oe=({children:n})=>e.jsx("h3",{className:ee,children:n}),re=({children:n})=>e.jsx("div",{className:ee,children:n}),ie=({confirmLabel:n,hideConfirm:t=!1,cancelLabel:o,hideCancel:r=!1,disabled:i,onConfirm:s,onCancel:a})=>e.jsxs("div",{children:[!t&&e.jsx("button",{onClick:s,disabled:i,children:n||"확인"}),!r&&"function"==typeof a&&e.jsx("button",{onClick:a,children:o||"취소"})]}),se=n.forwardRef((({id:t,onChangeOrder:o,children:r},i)=>{const s=N(),[a,l]=n.useMemo((()=>{const e=s>1;return[e?Math.floor(t/5)%3*100:0,e?t%5*35:0]}),[s,t]);return e.jsx("div",{ref:i,className:ne,onClick:o,style:{marginBottom:`calc(25vh + ${a}px)`,marginLeft:`${a}px`,transform:`translate(${l}px, ${l}px)`},children:r})})),ae=()=>{const[e,t]=n.useState(window.location.pathname);return n.useLayoutEffect((()=>{let n;const o=()=>{n&&cancelAnimationFrame(n),e!==window.location.pathname?t(window.location.pathname):n=requestAnimationFrame(o)};return n=requestAnimationFrame(o),()=>{n&&cancelAnimationFrame(n)}}),[e]),{pathname:e}},le=n.createContext({ForegroundComponent:se,TitleComponent:te,SubtitleComponent:oe,ContentComponent:re,FooterComponent:ie,options:{duration:u,backdrop:d,manualDestroy:!1,closeOnBackdropClick:!0}}),ce=n.memo((({ForegroundComponent:r,BackgroundComponent:i,TitleComponent:s,SubtitleComponent:a,ContentComponent:l,FooterComponent:m,options:f,context:b,usePathname:h,children:C})=>{const{pathname:g}=(h||ae)(),[,y]=o.useTick(),v=n.useRef(null);o.useOnMount((()=>(v.current=c.anchor("div"),y(),()=>{v.current&&v.current.remove()})));const k=n.useMemo((()=>({BackgroundComponent:i,ForegroundComponent:r||se,TitleComponent:s||te,SubtitleComponent:a||oe,ContentComponent:n.memo(l||re),FooterComponent:n.memo(m||ie),options:{duration:u,backdrop:d,closeOnBackdropClick:!0,manualDestroy:!1,...f}})),[r,i,l,m,a,s,f]);return e.jsxs(le.Provider,{value:k,children:[C,v.current&&t.createPortal(e.jsx(p,{context:b,children:e.jsx(J,{pathname:g,children:e.jsx(X,{})})}),v.current)]})})),ue=()=>n.useContext(le),de=()=>{const{options:e}=n.useContext(le);return e};exports.ModalProvider=ce,exports.alert=({subtype:e,title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:s,closeOnBackdropClick:a,ForegroundComponent:l,BackgroundComponent:u})=>new Promise(((d,m)=>{try{c.open({type:"alert",subtype:e,resolve:()=>d(),title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:s,closeOnBackdropClick:a,ForegroundComponent:l,BackgroundComponent:u})}catch(e){m(e)}})),exports.confirm=({subtype:e,title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:s,closeOnBackdropClick:a,ForegroundComponent:l,BackgroundComponent:u})=>new Promise(((d,m)=>{try{c.open({type:"confirm",subtype:e,resolve:e=>d(e??!1),title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:s,closeOnBackdropClick:a,ForegroundComponent:l,BackgroundComponent:u})}catch(e){m(e)}})),exports.prompt=({defaultValue:e,title:n,subtitle:t,content:o,Input:r,disabled:i,returnOnCancel:s,background:a,footer:l,manualDestroy:u,closeOnBackdropClick:d,ForegroundComponent:m,BackgroundComponent:p})=>new Promise(((f,b)=>{try{c.open({type:"prompt",resolve:e=>f(e),title:n,subtitle:t,content:o,Input:r,defaultValue:e,disabled:i,returnOnCancel:s,background:a,footer:l,manualDestroy:u,closeOnBackdropClick:d,ForegroundComponent:m,BackgroundComponent:p})}catch(e){b(e)}})),exports.useDestroyAfter=(e,t)=>{const{modal:o,onDestroy:i}=K(e),s=F(o),a=n.useRef({modal:o,onDestroy:i,milliseconds:r.isString(t)?W(t):t});n.useEffect((()=>{const{modal:e,onDestroy:n,milliseconds:t}=a.current;if(!e||e.visible||!e.alive)return;const o=setTimeout((()=>{n()}),t);return()=>{o&&clearTimeout(o)}}),[s])},exports.useModalBackdrop=()=>{const{backdrop:e}=de();return e},exports.useModalDuration=()=>{const{duration:e}=de();return{duration:e,milliseconds:W(e)}},exports.useModalOptions=de,exports.useSubscribeModal=F;
|
|
17
|
+
function S(e,n,t,o){if("a"===t&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?e!==n||!o:!n.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?o:"a"===t?o.call(e):o?o.value:n.get(e)}function I(e,n,t,o,r){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?e!==n||!r:!n.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?r.call(e,t):r?r.value=t:n.set(e,t),t}var T,V,_,L,R;"function"==typeof SuppressedError&&SuppressedError;class q{get alive(){return S(this,T,"f")}get visible(){return S(this,V,"f")}constructor({id:e,initiator:n,title:t,subtitle:o,background:r,manualDestroy:i=!1,closeOnBackdropClick:s=!0,resolve:a,ForegroundComponent:l,BackgroundComponent:c}){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"initiator",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"title",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtitle",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"background",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"manualDestroy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"closeOnBackdropClick",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"ForegroundComponent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"BackgroundComponent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),T.set(this,void 0),V.set(this,void 0),_.set(this,void 0),L.set(this,[]),this.id=e,this.initiator=n,this.title=t,this.subtitle=o,this.background=r,this.manualDestroy=i,this.closeOnBackdropClick=s,this.ForegroundComponent=l,this.BackgroundComponent=c,I(this,T,!0,"f"),I(this,V,!0,"f"),I(this,_,a,"f")}subscribe(e){return S(this,L,"f").push(e),()=>{I(this,L,S(this,L,"f").filter((n=>n!==e)),"f")}}publish(){for(const e of S(this,L,"f"))e()}resolve(e){S(this,_,"f").call(this,e)}onDestroy(){const e=!0===S(this,T,"f");I(this,T,!1,"f"),this.manualDestroy&&e&&this.publish()}onShow(){const e=!1===S(this,V,"f");I(this,V,!0,"f"),e&&this.publish()}onHide(){const e=!0===S(this,V,"f");I(this,V,!1,"f"),e&&this.publish()}}T=new WeakMap,V=new WeakMap,_=new WeakMap,L=new WeakMap;class H extends q{constructor({id:e,initiator:n,type:t,subtype:o,title:r,subtitle:i,content:s,footer:a,background:l,manualDestroy:c,closeOnBackdropClick:u,resolve:d,ForegroundComponent:m,BackgroundComponent:p}){super({id:e,initiator:n,title:r,subtitle:i,background:l,manualDestroy:c,closeOnBackdropClick:u,resolve:d,ForegroundComponent:m,BackgroundComponent:p}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtype",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.type=t,this.subtype=o,this.content=s,this.footer=a}onClose(){this.resolve(null)}onConfirm(){this.resolve(null)}}class $ extends q{constructor({id:e,initiator:n,type:t,subtype:o,title:r,subtitle:i,content:s,footer:a,background:l,manualDestroy:c,closeOnBackdropClick:u,resolve:d,ForegroundComponent:m,BackgroundComponent:p}){super({id:e,initiator:n,title:r,subtitle:i,background:l,manualDestroy:c,closeOnBackdropClick:u,resolve:d,ForegroundComponent:m,BackgroundComponent:p}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtype",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.type=t,this.subtype=o,this.content=s,this.footer=a}onClose(){this.resolve(!1)}onConfirm(){this.resolve(!0)}}class z extends q{constructor({id:e,initiator:n,type:t,title:o,subtitle:r,content:i,defaultValue:s,Input:a,disabled:l,returnOnCancel:c,footer:u,background:d,manualDestroy:m,closeOnBackdropClick:p,resolve:f,ForegroundComponent:b,BackgroundComponent:h}){super({id:e,initiator:n,title:o,subtitle:r,background:d,manualDestroy:m,closeOnBackdropClick:p,resolve:f,ForegroundComponent:b,BackgroundComponent:h}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"defaultValue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"Input",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"returnOnCancel",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),R.set(this,void 0),this.type=t,this.content=i,this.Input=a,this.defaultValue=s,I(this,R,s,"f"),this.disabled=l,this.returnOnCancel=c,this.footer=u}onChange(e){I(this,R,e,"f")}onConfirm(){this.resolve(S(this,R,"f")??null)}onClose(){this.returnOnCancel?this.resolve(S(this,R,"f")??null):this.resolve(null)}}R=new WeakMap;const Y=e=>{switch(e.type){case"alert":return new H(e);case"confirm":return new $(e);case"prompt":return new z(e)}throw new Error(`Unknown modal: ${e.type}`,{modal:e})},A=/^\s*(\d+)\s*(ms|s|m|h)\s*$/,W=e=>{const[,n,t]=e.match(A)||[];if(!n||!t)return 0;const o=parseInt(n);return"ms"===t?o:"s"===t?1e3*o:"m"===t?60*o*1e3:"h"===t?60*o*60*1e3:0},U=n.createContext({modalIds:[],getModalNode:r.undefinedFunction,onChange:r.undefinedFunction,onConfirm:r.undefinedFunction,onClose:r.undefinedFunction,onDestroy:r.undefinedFunction,setUpdater:r.undefinedFunction,getModal:()=>({modal:void 0,onConfirm:r.undefinedFunction,onClose:r.undefinedFunction,onChange:r.undefinedFunction,onDestroy:r.undefinedFunction})}),J=n.memo((({pathname:t,children:r})=>{const i=n.useRef(new Map),[s,a]=n.useState([]),l=o.useReference(s),u=n.useRef(t),d=n.useRef(0),m=de(),p=n.useMemo((()=>W(m.duration)),[m]);o.useOnMountLayout((()=>{const{manualDestroy:e,closeOnBackdropClick:n}=m;for(const t of c.prerender){const o=Y({...t,id:d.current++,initiator:u.current,manualDestroy:void 0!==t.manualDestroy?t.manualDestroy:e,closeOnBackdropClick:void 0!==t.closeOnBackdropClick?t.closeOnBackdropClick:n});i.current.set(o.id,o),a((e=>[...e,o.id]))}c.setupOpen((t=>{const o=Y({...t,id:d.current++,initiator:u.current,manualDestroy:void 0!==t.manualDestroy?t.manualDestroy:e,closeOnBackdropClick:void 0!==t.closeOnBackdropClick?t.closeOnBackdropClick:n});i.current.set(o.id,o),a((e=>[...e.filter((e=>{const n=!i.current.get(e)?.alive;return n&&i.current.delete(e),!n})),o.id]))})),c.clearPrerender()})),n.useLayoutEffect((()=>{for(const e of l.current){const n=i.current.get(e);n?.alive&&(n.initiator===t?n.onShow():n.onHide())}u.current=t}),[l,t]);const f=n.useCallback((e=>i.current.get(e)),[]),b=n.useCallback((e=>{const n=i.current.get(e);n&&(n.onDestroy(),h.current?.())}),[]),h=n.useRef(),C=n.useCallback((e=>{const n=i.current.get(e);n&&(n.onHide(),h.current?.(),n.manualDestroy||setTimeout((()=>{n.onDestroy()}),p))}),[p]),g=n.useCallback(((e,n)=>{const t=i.current.get(e);t&&"prompt"===t.type&&t.onChange(n)}),[]),y=n.useCallback((e=>{const n=i.current.get(e);n&&(n.onConfirm(),C(e))}),[C]),v=n.useCallback((e=>{const n=i.current.get(e);n&&(n.onClose(),C(e))}),[C]),k=n.useCallback((e=>({modal:f(e),onConfirm:()=>y(e),onClose:()=>v(e),onChange:n=>g(e,n),onDestroy:()=>b(e)})),[f,y,v,g,b]),x=n.useMemo((()=>({modalIds:s,getModalNode:f,onChange:g,onConfirm:y,onClose:v,onDestroy:b,getModal:k,setUpdater:e=>{h.current=e}})),[s,k,f,g,y,v,b]);return e.jsx(U.Provider,{value:x,children:r})})),G=()=>n.useContext(U),K=e=>{const{getModal:t}=G();return n.useMemo((()=>t(e)),[e,t])},Q=i.css("production"===process.env.NODE_ENV?{name:"2hpasy",styles:"display:flex;align-items:center;justify-content:center;position:fixed;inset:0;pointer-events:none;z-index:1000;transition:background-color ease-in-out"}:{name:"lhj8co-anchor",styles:"display:flex;align-items:center;justify-content:center;position:fixed;inset:0;pointer-events:none;z-index:1000;transition:background-color ease-in-out;label:anchor;",toString:function(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}}),X=n.memo(o.withErrorBoundary((()=>{const[t,r]=o.useTick(),{modalIds:i,setUpdater:s}=G();n.useEffect((()=>{s(r)}),[s,r]);const{options:a}=ue(),l=N(t);return e.jsx("div",{className:Q,style:{transitionDuration:a.duration,backgroundColor:l?a.backdrop:"transparent"},children:i.map((n=>e.jsx(M,{modalId:n},n)))})})));function Z(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const ee=i.css("production"===process.env.NODE_ENV?{name:"131j9g2",styles:"margin:unset"}:{name:"1w3kbco-fallback",styles:"margin:unset;label:fallback;",toString:Z}),ne=i.css("production"===process.env.NODE_ENV?{name:"1kuk3a3",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:white;padding:20px 80px;gap:10px;border:1px solid black"}:{name:"16dbbea-frame",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:white;padding:20px 80px;gap:10px;border:1px solid black;label:frame;",toString:Z}),te=({children:n})=>e.jsx("h2",{className:ee,children:n}),oe=({children:n})=>e.jsx("h3",{className:ee,children:n}),re=({children:n})=>e.jsx("div",{className:ee,children:n}),ie=({confirmLabel:n,hideConfirm:t=!1,cancelLabel:o,hideCancel:r=!1,disabled:i,onConfirm:s,onCancel:a})=>e.jsxs("div",{children:[!t&&e.jsx("button",{onClick:s,disabled:i,children:n||"확인"}),!r&&"function"==typeof a&&e.jsx("button",{onClick:a,children:o||"취소"})]}),se=n.forwardRef((({id:t,onChangeOrder:o,children:r},i)=>{const s=N(),[a,l]=n.useMemo((()=>{const e=s>1;return[e?Math.floor(t/5)%3*100:0,e?t%5*35:0]}),[s,t]);return e.jsx("div",{ref:i,className:ne,onClick:o,style:{marginBottom:`calc(25vh + ${a}px)`,marginLeft:`${a}px`,transform:`translate(${l}px, ${l}px)`},children:r})})),ae=()=>{const[e,t]=n.useState(window.location.pathname);return n.useLayoutEffect((()=>{let n;const o=()=>{n&&cancelAnimationFrame(n),e!==window.location.pathname?t(window.location.pathname):n=requestAnimationFrame(o)};return n=requestAnimationFrame(o),()=>{n&&cancelAnimationFrame(n)}}),[e]),{pathname:e}},le=n.createContext({ForegroundComponent:se,TitleComponent:te,SubtitleComponent:oe,ContentComponent:re,FooterComponent:ie,options:{duration:u,backdrop:d,manualDestroy:!1,closeOnBackdropClick:!0}}),ce=n.memo((({ForegroundComponent:r,BackgroundComponent:i,TitleComponent:s,SubtitleComponent:a,ContentComponent:l,FooterComponent:m,options:f,context:b,usePathname:h,children:C})=>{const{pathname:g}=(h||ae)(),[,y]=o.useTick(),v=n.useRef(null);o.useOnMount((()=>(v.current=c.anchor("div"),y(),()=>{v.current&&v.current.remove()})));const k=n.useMemo((()=>({BackgroundComponent:i,ForegroundComponent:r||se,TitleComponent:s||te,SubtitleComponent:a||oe,ContentComponent:n.memo(l||re),FooterComponent:n.memo(m||ie),options:{duration:u,backdrop:d,closeOnBackdropClick:!0,manualDestroy:!1,...f}})),[r,i,l,m,a,s,f]);return e.jsxs(le.Provider,{value:k,children:[C,v.current&&t.createPortal(e.jsx(p,{context:b,children:e.jsx(J,{pathname:g,children:e.jsx(X,{})})}),v.current)]})})),ue=()=>n.useContext(le),de=()=>{const{options:e}=n.useContext(le);return e};exports.ModalProvider=ce,exports.alert=({subtype:e,title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:s,closeOnBackdropClick:a,ForegroundComponent:l,BackgroundComponent:u})=>new Promise(((d,m)=>{try{c.open({type:"alert",subtype:e,resolve:()=>d(),title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:s,closeOnBackdropClick:a,ForegroundComponent:l,BackgroundComponent:u})}catch(e){m(e)}})),exports.confirm=({subtype:e,title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:s,closeOnBackdropClick:a,ForegroundComponent:l,BackgroundComponent:u})=>new Promise(((d,m)=>{try{c.open({type:"confirm",subtype:e,resolve:e=>d(e??!1),title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:s,closeOnBackdropClick:a,ForegroundComponent:l,BackgroundComponent:u})}catch(e){m(e)}})),exports.prompt=({defaultValue:e,title:n,subtitle:t,content:o,Input:r,disabled:i,returnOnCancel:s,background:a,footer:l,manualDestroy:u,closeOnBackdropClick:d,ForegroundComponent:m,BackgroundComponent:p})=>new Promise(((f,b)=>{try{c.open({type:"prompt",resolve:e=>f(e),title:n,subtitle:t,content:o,Input:r,defaultValue:e,disabled:i,returnOnCancel:s,background:a,footer:l,manualDestroy:u,closeOnBackdropClick:d,ForegroundComponent:m,BackgroundComponent:p})}catch(e){b(e)}})),exports.useDestroyAfter=(e,t)=>{const{modal:o,onDestroy:i}=K(e),s=F(o),a=n.useRef({modal:o,onDestroy:i,milliseconds:r.isString(t)?W(t):t});n.useEffect((()=>{const{modal:e,onDestroy:n,milliseconds:t}=a.current;if(!e||e.visible||!e.alive)return;const o=setTimeout((()=>{n()}),t);return()=>{o&&clearTimeout(o)}}),[s])},exports.useModalBackdrop=()=>{const{backdrop:e}=de();return e},exports.useModalDuration=()=>{const{duration:e}=de();return{duration:e,milliseconds:W(e)}},exports.useModalOptions=de,exports.useSubscribeModal=F;
|
|
18
18
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/app/ModalManager.ts","../src/app/constant.ts","../src/providers/UserDefinedContext/UserDefinedContext.ts","../src/providers/UserDefinedContext/UserDefinedContextProvider.tsx","../src/providers/UserDefinedContext/useUserDefinedContext.ts","../src/components/Background/classNames.emotion.ts","../src/components/Background/Background.tsx","../src/components/Foreground/classNames.emotion.ts","../src/components/Foreground/components/AlertInner.tsx","../src/components/Foreground/components/ConfirmInner.tsx","../src/components/Foreground/components/PromptInner.tsx","../src/components/Foreground/Foreground.tsx","../src/hooks/useSubscribeModal.ts","../src/components/Presenter/classNames.emotion.ts","../src/components/Presenter/Presenter.tsx","../src/hooks/useActiveModalCount.ts","../src/core/node/ModalNode/AbstractBaseNode.ts","../src/core/node/ModalNode/AlertNode.ts","../src/core/node/ModalNode/ConfirmNode.ts","../src/core/node/ModalNode/PromptNode.ts","../src/core/node/nodeFactory.ts","../src/helpers/getMillisecondsFromDuration.ts","../src/providers/ModalDataContext/ModalDataContext.ts","../src/providers/ModalDataContext/ModalDataContextProvider.tsx","../src/providers/ModalDataContext/useModalDataContext.ts","../src/components/Anchor/classNames.emotion.ts","../src/components/Anchor/Anchor.tsx","../src/components/FallbackComponents/classNames.emotion.ts","../src/components/FallbackComponents/FallbackTitle.tsx","../src/components/FallbackComponents/FallbackSubtitle.tsx","../src/components/FallbackComponents/FallbackContent.tsx","../src/components/FallbackComponents/FallbackFooter.tsx","../src/components/FallbackComponents/FallbackForegroundFrame.tsx","../src/hooks/useDefaultPathname.ts","../src/providers/ModalContext/ModalContext.ts","../src/providers/ModalContext/ModalContextProvider.tsx","../src/providers/ModalContext/useModalContext.ts","../src/core/handle/alert.ts","../src/core/handle/confirm.ts","../src/core/handle/prompt.ts","../src/hooks/useDestroyAfter.ts"],"sourcesContent":["import { MutableRefObject } from 'react';\n\nimport { getRandomString } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { Modal } from '@/promise-modal/types';\n\nconst prerenderListRef: MutableRefObject<Modal[]> = {\n current: [],\n};\n\nconst openModalRef: MutableRefObject<Fn<[Modal], void>> = {\n current: (modal: Modal) => {\n prerenderListRef.current.push(modal);\n },\n};\n\nconst anchorRef: MutableRefObject<HTMLElement | null> = {\n current: null,\n};\n\nexport const ModalManager = {\n get prerender() {\n return prerenderListRef.current;\n },\n clearPrerender() {\n prerenderListRef.current = [];\n },\n open(modal: Modal) {\n openModalRef.current(modal);\n },\n setupOpen(open: (modal: Modal) => void) {\n openModalRef.current = open;\n },\n anchor(name: string, prefix = 'promise-modal'): HTMLElement {\n if (anchorRef.current) {\n const anchor = document.getElementById(anchorRef.current.id);\n if (anchor) return anchor;\n }\n const node = document.createElement(name);\n node.setAttribute('id', `${prefix}-${getRandomString(36)}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","import type { Color, Duration } from '@aileron/types';\n\nexport const DEFAULT_ANIMATION_DURATION: Duration = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR: Color = 'rgba(0, 0, 0, 0.5)';\n","import { createContext } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nexport interface UserDefinedContext {\n context: Dictionary;\n}\n\nexport const UserDefinedContext = createContext<UserDefinedContext>({\n context: EMPTY_OBJECT,\n});\n","import { PropsWithChildren, useMemo } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\ninterface UserDefinedContextProviderProps {\n /** 사용자 정의 컨텍스트 */\n context?: Dictionary;\n}\n\nexport const UserDefinedContextProvider = ({\n context,\n children,\n}: PropsWithChildren<UserDefinedContextProviderProps>) => {\n const contextValue = useMemo(\n () => ({ context: context || EMPTY_OBJECT }),\n [context],\n );\n return (\n <UserDefinedContext.Provider value={contextValue}>\n {children}\n </UserDefinedContext.Provider>\n );\n};\n","import { useContext } from 'react';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\nexport const useUserDefinedContext = () => {\n return useContext(UserDefinedContext);\n};\n","import { css } from '@emotion/css';\n\nexport const background = css`\n display: none;\n position: fixed;\n inset: 0;\n z-index: -999;\n pointer-events: none;\n > * {\n pointer-events: none;\n }\n`;\n\nexport const active = css`\n pointer-events: all;\n`;\n\nexport const visible = css`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n","import { type MouseEvent, useCallback, useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, background, visible } from './classNames.emotion';\n\nexport const BackgroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n const { modal, onClose, onChange, onConfirm, onDestroy } = useModal(modalId);\n\n const handleClose = useCallback(\n (event: MouseEvent) => {\n if (modal && modal.closeOnBackdropClick && modal.visible) onClose();\n event.stopPropagation();\n },\n [modal, onClose],\n );\n\n const Background = useMemo(\n () => modal?.BackgroundComponent || BackgroundComponent,\n [BackgroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(background, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.closeOnBackdropClick && modal.visible,\n })}\n onClick={handleClose}\n >\n {Background && (\n <Background\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n />\n )}\n </div>\n );\n};\n","import { css } from '@emotion/css';\n\nexport const foreground = css`\n pointer-events: none;\n display: none;\n position: fixed;\n inset: 0;\n z-index: 1;\n`;\n\nexport const active = css`\n > * {\n pointer-events: all;\n }\n`;\n\nexport const visible = css`\n display: flex !important;\n justify-content: center;\n align-items: center;\n`;\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { ConfirmNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface ConfirmInnerProps<B> {\n modal: ConfirmNode<B>;\n handlers: Pick<ModalActions, 'onConfirm' | 'onClose'>;\n}\n\nexport const ConfirmInner = memo(\n <B,>({ modal, handlers }: ConfirmInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm, onClose } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n const handleClose = useHandle(onClose);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport {\n renderComponent,\n useHandle,\n withErrorBoundary,\n} from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(withErrorBoundary(modal.Input)),\n }),\n [modal],\n );\n\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const [value, setValue] = useState<T | undefined>(defaultValue);\n\n const { onChange, onClose, onConfirm } = useMemo(\n () => handlers,\n [handlers],\n );\n\n const handleClose = useHandle(onClose);\n const handleChange = useHandle(\n (inputValue?: T | ((prevState: T | undefined) => T | undefined)) => {\n const input = isFunction(inputValue) ? inputValue(value) : inputValue;\n setValue(input);\n onChange(input);\n },\n );\n\n const handleConfirm = useCallback(() => {\n // NOTE: wait for the next tick to ensure the value is updated\n setTimeout(() => {\n onConfirm();\n });\n }, [onConfirm]);\n\n const disabled = useMemo(\n () => (value ? !!checkDisabled?.(value) : false),\n [checkDisabled, value],\n );\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n context={userDefinedContext}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n value,\n disabled,\n onChange: handleChange,\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n disabled={disabled}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, foreground, visible } from './classNames.emotion';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const ForegroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n const Foreground = useMemo(\n () => modal?.ForegroundComponent || ForegroundComponent,\n [ForegroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(foreground, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.visible,\n })}\n >\n <Foreground\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n >\n {modal.type === 'alert' && (\n <AlertInner modal={modal} handlers={{ onConfirm }} />\n )}\n {modal.type === 'confirm' && (\n <ConfirmInner modal={modal} handlers={{ onConfirm, onClose }} />\n )}\n {modal.type === 'prompt' && (\n <PromptInner\n modal={modal}\n handlers={{ onChange, onConfirm, onClose }}\n />\n )}\n </Foreground>\n </div>\n );\n};\n","import { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { ModalNode } from '@/promise-modal/core';\n\nexport const useSubscribeModal = (modal?: ModalNode) => {\n const [tick, update] = useTick();\n useOnMount(() => {\n if (!modal) return;\n const unsubscribe = modal.subscribe(update);\n return unsubscribe;\n });\n return tick;\n};\n","import { css } from '@emotion/css';\n\nexport const presenter = css`\n position: fixed;\n inset: 0;\n pointer-events: none;\n overflow: hidden;\n`;\n","import { memo, useRef } from 'react';\n\nimport { useHandle } from '@winglet/react-utils';\n\nimport { Background } from '@/promise-modal/components/Background';\nimport { Foreground } from '@/promise-modal/components/Foreground';\nimport { useSubscribeModal } from '@/promise-modal/hooks/useSubscribeModal';\nimport { useModal } from '@/promise-modal/providers';\nimport type { ModalIdProps } from '@/promise-modal/types';\n\nimport { presenter } from './classNames.emotion';\n\nlet zIndex = 1;\n\nexport const Presenter = memo(({ modalId }: ModalIdProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { modal } = useModal(modalId);\n useSubscribeModal(modal);\n const handleChangeOrder = useHandle(() => {\n if (ref.current) {\n ref.current.style.zIndex = `${zIndex++}`;\n }\n });\n return (\n <div ref={ref} className={presenter}>\n <Background modalId={modalId} onChangeOrder={handleChangeOrder} />\n <Foreground modalId={modalId} onChangeOrder={handleChangeOrder} />\n </div>\n );\n});\n","import { useMemo } from 'react';\n\nimport { useModalDataContext } from '../providers';\n\nexport const useActiveModalCount = (tick: string | number = 0) => {\n const { modalIds, getModalNode } = useModalDataContext();\n return useMemo(() => {\n let count = 0;\n for (const id of modalIds) {\n if (getModalNode(id)?.visible) count++;\n }\n return count;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getModalNode, modalIds, tick]);\n};\n","import type { ReactNode } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type {\n BackgroundComponent,\n BaseModal,\n ForegroundComponent,\n ManagedEntity,\n ModalBackground,\n} from '@/promise-modal/types';\n\ntype BaseNodeProps<T, B> = BaseModal<T, B> & ManagedEntity;\n\nexport abstract class BaseNode<T, B> {\n readonly id: number;\n readonly initiator: string;\n\n readonly title?: ReactNode;\n readonly subtitle?: ReactNode;\n readonly background?: ModalBackground<B>;\n\n readonly manualDestroy: boolean;\n readonly closeOnBackdropClick: boolean;\n\n readonly ForegroundComponent?: ForegroundComponent;\n readonly BackgroundComponent?: BackgroundComponent;\n\n #alive: boolean;\n get alive() {\n return this.#alive;\n }\n #visible: boolean;\n get visible() {\n return this.#visible;\n }\n\n #resolve: (result: T | null) => void;\n #listeners: Fn[] = [];\n\n constructor({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy = false,\n closeOnBackdropClick = true,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: BaseNodeProps<T, B>) {\n this.id = id;\n this.initiator = initiator;\n this.title = title;\n this.subtitle = subtitle;\n this.background = background;\n this.manualDestroy = manualDestroy;\n this.closeOnBackdropClick = closeOnBackdropClick;\n\n this.ForegroundComponent = ForegroundComponent;\n this.BackgroundComponent = BackgroundComponent;\n\n this.#alive = true;\n this.#visible = true;\n this.#resolve = resolve;\n }\n\n subscribe(listener: Fn) {\n this.#listeners.push(listener);\n return () => {\n this.#listeners = this.#listeners.filter((l) => l !== listener);\n };\n }\n publish() {\n for (const listener of this.#listeners) listener();\n }\n protected resolve(result: T | null) {\n this.#resolve(result);\n }\n onDestroy() {\n const needPublish = this.#alive === true;\n this.#alive = false;\n if (this.manualDestroy && needPublish) this.publish();\n }\n onShow() {\n const needPublish = this.#visible === false;\n this.#visible = true;\n if (needPublish) this.publish();\n }\n onHide() {\n const needPublish = this.#visible === true;\n this.#visible = false;\n if (needPublish) this.publish();\n }\n abstract onClose(): void;\n abstract onConfirm(): void;\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n AlertContentProps,\n AlertFooterRender,\n AlertModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype AlertNodeProps<B> = AlertModal<B> & ManagedEntity;\n\nexport class AlertNode<B> extends BaseNode<null, B> {\n readonly type: 'alert';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<AlertContentProps>;\n readonly footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(null);\n }\n onConfirm() {\n this.resolve(null);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n ConfirmContentProps,\n ConfirmFooterRender,\n ConfirmModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype ConfirmNodeProps<B> = ConfirmModal<B> & ManagedEntity;\n\nexport class ConfirmNode<B> extends BaseNode<boolean, B> {\n readonly type: 'confirm';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<ConfirmContentProps>;\n readonly footer?: ConfirmFooterRender | FooterOptions | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(false);\n }\n onConfirm() {\n this.resolve(true);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\n ManagedEntity,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n PromptModal,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype PromptNodeProps<T, B> = PromptModal<T, B> & ManagedEntity;\n\nexport class PromptNode<T, B> extends BaseNode<T, B> {\n readonly type: 'prompt';\n readonly content?: ReactNode | ComponentType<PromptContentProps>;\n readonly defaultValue: T | undefined;\n readonly Input: (props: PromptInputProps<T>) => ReactNode;\n readonly disabled?: (value: T) => boolean;\n readonly returnOnCancel?: boolean;\n readonly footer?: PromptFooterRender<T> | FooterOptions | false;\n #value: T | undefined;\n\n constructor({\n id,\n initiator,\n type,\n title,\n subtitle,\n content,\n defaultValue,\n Input,\n disabled,\n returnOnCancel,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.content = content;\n this.Input = Input;\n this.defaultValue = defaultValue;\n this.#value = defaultValue;\n this.disabled = disabled;\n this.returnOnCancel = returnOnCancel;\n this.footer = footer;\n }\n\n onChange(value: T) {\n this.#value = value;\n }\n onConfirm() {\n this.resolve(this.#value ?? null);\n }\n onClose() {\n if (this.returnOnCancel) this.resolve(this.#value ?? null);\n else this.resolve(null);\n }\n}\n","import type { ManagedModal } from '@/promise-modal/types';\n\nimport { AlertNode, ConfirmNode, PromptNode } from './ModalNode';\n\nexport const nodeFactory = <T, B>(modal: ManagedModal<T, B>) => {\n switch (modal.type) {\n case 'alert':\n return new AlertNode<B>(modal);\n case 'confirm':\n return new ConfirmNode<B>(modal);\n case 'prompt':\n return new PromptNode<T, B>(modal);\n }\n // @ts-expect-error: This state is unreachable by design and should NEVER occur.\n throw new Error(`Unknown modal: ${modal.type}`, { modal });\n};\n","const DURATION_REGEX = /^\\s*(\\d+)\\s*(ms|s|m|h)\\s*$/;\n\nexport const getMillisecondsFromDuration = (input: string) => {\n const [, durationString, unit] = input.match(DURATION_REGEX) || [];\n if (!durationString || !unit) return 0;\n const duration = parseInt(durationString);\n if (unit === 'ms') return duration;\n if (unit === 's') return duration * 1000;\n if (unit === 'm') return duration * 60 * 1000;\n if (unit === 'h') return duration * 60 * 60 * 1000;\n else return 0;\n};\n","import { createContext } from 'react';\n\nimport { undefinedFunction } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport type { ModalActions, ModalHandlersWithId } from '@/promise-modal/types';\n\nexport interface ModalDataContextProps extends ModalHandlersWithId {\n modalIds: ModalNode['id'][];\n getModal: Fn<[id: ModalNode['id']], ModalActions>;\n getModalNode: Fn<[id: ModalNode['id']], ModalNode | undefined>;\n setUpdater: Fn<[updater: Fn]>;\n}\n\nexport const ModalDataContext = createContext<ModalDataContextProps>({\n modalIds: [],\n getModalNode: undefinedFunction,\n onChange: undefinedFunction,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onDestroy: undefinedFunction,\n setUpdater: undefinedFunction,\n getModal: () => ({\n modal: undefined,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onChange: undefinedFunction,\n onDestroy: undefinedFunction,\n }),\n});\n","import {\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useOnMountLayout, useReference } from '@winglet/react-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport { type ModalNode, nodeFactory } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\nimport { useModalOptions } from '@/promise-modal/providers';\nimport type { Modal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\ninterface ModalDataContextProviderProps {\n pathname: string;\n}\n\nexport const ModalDataContextProvider = memo(\n ({\n pathname,\n children,\n }: PropsWithChildren<ModalDataContextProviderProps>) => {\n const modalDictionary = useRef<Map<ModalNode['id'], ModalNode>>(new Map());\n\n const [modalIds, setModalIds] = useState<ModalNode['id'][]>([]);\n const modalIdsRef = useReference(modalIds);\n\n const initiator = useRef(pathname);\n const modalIdSequence = useRef(0);\n\n const options = useModalOptions();\n\n const duration = useMemo(\n () => getMillisecondsFromDuration(options.duration),\n [options],\n );\n\n useOnMountLayout(() => {\n const { manualDestroy, closeOnBackdropClick } = options;\n\n for (const data of ModalManager.prerender) {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => [...ids, modal.id]);\n }\n\n ModalManager.setupOpen((data: Modal) => {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => {\n const aliveIds = ids.filter((id) => {\n const destroyed = !modalDictionary.current.get(id)?.alive;\n if (destroyed) modalDictionary.current.delete(id);\n return !destroyed;\n });\n return [...aliveIds, modal.id];\n });\n });\n ModalManager.clearPrerender();\n });\n\n useLayoutEffect(() => {\n for (const id of modalIdsRef.current) {\n const modal = modalDictionary.current.get(id);\n if (!modal?.alive) continue;\n if (modal.initiator === pathname) modal.onShow();\n else modal.onHide();\n }\n initiator.current = pathname;\n }, [modalIdsRef, pathname]);\n\n const getModalNode = useCallback((modalId: ModalNode['id']) => {\n return modalDictionary.current.get(modalId);\n }, []);\n\n const onDestroy = useCallback((modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onDestroy();\n updaterRef.current?.();\n }, []);\n\n const updaterRef = useRef<Fn>();\n const hideModal = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onHide();\n updaterRef.current?.();\n if (!modal.manualDestroy)\n setTimeout(() => {\n modal.onDestroy();\n }, duration);\n },\n [duration],\n );\n\n const onChange = useCallback((modalId: ModalNode['id'], value: any) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n if (modal.type === 'prompt') modal.onChange(value);\n }, []);\n\n const onConfirm = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onConfirm();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const onClose = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onClose();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const getModal = useCallback(\n (modalId: ModalNode['id']) => ({\n modal: getModalNode(modalId),\n onConfirm: () => onConfirm(modalId),\n onClose: () => onClose(modalId),\n onChange: (value: any) => onChange(modalId, value),\n onDestroy: () => onDestroy(modalId),\n }),\n [getModalNode, onConfirm, onClose, onChange, onDestroy],\n );\n\n const value = useMemo(() => {\n return {\n modalIds,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n getModal,\n setUpdater: (updater: Fn) => {\n updaterRef.current = updater;\n },\n };\n }, [\n modalIds,\n getModal,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n ]);\n\n return (\n <ModalDataContext.Provider value={value}>\n {children}\n </ModalDataContext.Provider>\n );\n },\n);\n","import { useContext, useMemo } from 'react';\n\nimport type { ManagedModal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\nexport const useModalDataContext = () => useContext(ModalDataContext);\n\nexport const useModal = (id: ManagedModal['id']) => {\n const { getModal } = useModalDataContext();\n return useMemo(() => getModal(id), [id, getModal]);\n};\n","import { css } from '@emotion/css';\n\nexport const anchor = css`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 1000;\n transition: background-color ease-in-out;\n`;\n","import { memo, useEffect } from 'react';\n\nimport { useTick, withErrorBoundary } from '@winglet/react-utils';\n\nimport { Presenter } from '@/promise-modal/components/Presenter';\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useModalDataContext } from '@/promise-modal/providers/ModalDataContext';\n\nimport { anchor } from './classNames.emotion';\n\nconst AnchorInner = () => {\n const [key, update] = useTick();\n\n const { modalIds, setUpdater } = useModalDataContext();\n\n useEffect(() => {\n setUpdater(update);\n }, [setUpdater, update]);\n\n const { options } = useModalContext();\n\n const dimmed = useActiveModalCount(key);\n\n return (\n <div\n className={anchor}\n style={{\n transitionDuration: options.duration,\n backgroundColor: dimmed ? options.backdrop : 'transparent',\n }}\n >\n {modalIds.map((id) => {\n return <Presenter key={id} modalId={id} />;\n })}\n </div>\n );\n};\n\nexport const Anchor = memo(withErrorBoundary(AnchorInner));\n","import { css } from '@emotion/css';\n\nexport const fallback = css`\n margin: unset;\n`;\n\nexport const frame = css`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: white;\n padding: 20px 80px;\n gap: 10px;\n border: 1px solid black;\n`;\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={fallback}>{children}</div>;\n};\n","import type { FooterComponentProps } from '@/promise-modal/types';\n\nexport const FallbackFooter = ({\n confirmLabel,\n hideConfirm = false,\n cancelLabel,\n hideCancel = false,\n disabled,\n onConfirm,\n onCancel,\n}: FooterComponentProps) => {\n return (\n <div>\n {!hideConfirm && (\n <button onClick={onConfirm} disabled={disabled}>\n {confirmLabel || '확인'}\n </button>\n )}\n\n {!hideCancel && typeof onCancel === 'function' && (\n <button onClick={onCancel}>{cancelLabel || '취소'}</button>\n )}\n </div>\n );\n};\n","import {\n type ForwardedRef,\n type PropsWithChildren,\n forwardRef,\n useMemo,\n} from 'react';\n\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport type { ModalFrameProps } from '@/promise-modal/types';\n\nimport { frame } from './classNames.emotion';\n\nconst MAX_MODAL_COUNT = 5;\nconst MAX_MODAL_LEVEL = 3;\n\nexport const FallbackForegroundFrame = forwardRef(\n (\n { id, onChangeOrder, children }: PropsWithChildren<ModalFrameProps>,\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const activeCount = useActiveModalCount();\n const [level, offset] = useMemo(() => {\n const stacked = activeCount > 1;\n const level = stacked\n ? (Math.floor(id / MAX_MODAL_COUNT) % MAX_MODAL_LEVEL) * 100\n : 0;\n const offset = stacked ? (id % MAX_MODAL_COUNT) * 35 : 0;\n return [level, offset];\n }, [activeCount, id]);\n\n return (\n <div\n ref={ref}\n className={frame}\n onClick={onChangeOrder}\n style={{\n marginBottom: `calc(25vh + ${level}px)`,\n marginLeft: `${level}px`,\n transform: `translate(${offset}px, ${offset}px)`,\n }}\n >\n {children}\n </div>\n );\n },\n);\n","import { useLayoutEffect, useState } from 'react';\n\nexport const usePathname = () => {\n const [pathname, setPathname] = useState(window.location.pathname);\n\n useLayoutEffect(() => {\n let requestId: number;\n\n const checkPathname = () => {\n if (requestId) cancelAnimationFrame(requestId);\n if (pathname !== window.location.pathname) {\n setPathname(window.location.pathname);\n } else {\n requestId = requestAnimationFrame(checkPathname);\n }\n };\n\n requestId = requestAnimationFrame(checkPathname);\n\n return () => {\n if (requestId) cancelAnimationFrame(requestId);\n };\n }, [pathname]);\n\n return { pathname };\n};\n","import { type ComponentType, createContext } from 'react';\n\nimport type { Color, Duration } from '@aileron/types';\n\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport type {\n BackgroundComponent,\n FooterComponentProps,\n ForegroundComponent,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n TitleComponent: ComponentType<WrapperComponentProps>;\n SubtitleComponent: ComponentType<WrapperComponentProps>;\n ContentComponent: ComponentType<WrapperComponentProps>;\n FooterComponent: ComponentType<FooterComponentProps>;\n options: {\n duration: Duration;\n backdrop: Color;\n manualDestroy: boolean;\n closeOnBackdropClick: boolean;\n };\n}\n\nexport const ModalContext = createContext<ModalContextProps>({\n ForegroundComponent: FallbackForegroundFrame,\n TitleComponent: FallbackTitle,\n SubtitleComponent: FallbackSubtitle,\n ContentComponent: FallbackContent,\n FooterComponent: FallbackFooter,\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n manualDestroy: false,\n closeOnBackdropClick: true,\n },\n});\n","import {\n type ComponentType,\n type PropsWithChildren,\n memo,\n useMemo,\n useRef,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { Color, Dictionary, Duration } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport { Anchor } from '@/promise-modal/components/Anchor';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport { usePathname as useDefaultPathname } from '@/promise-modal/hooks/useDefaultPathname';\nimport type {\n FooterComponentProps,\n ModalFrameProps,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { UserDefinedContextProvider } from '../UserDefinedContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<WrapperComponentProps>;\n SubtitleComponent?: ComponentType<WrapperComponentProps>;\n ContentComponent?: ComponentType<WrapperComponentProps>;\n FooterComponent?: ComponentType<FooterComponentProps>;\n options?: {\n /** Modal transition time(ms, s) */\n duration?: Duration;\n /** Modal backdrop color */\n backdrop?: Color;\n /** Whether to destroy the modal manually */\n manualDestroy?: boolean;\n /** Whether to close the modal when the backdrop is clicked */\n closeOnBackdropClick?: boolean;\n };\n context?: Dictionary;\n usePathname?: () => { pathname: string };\n}\n\nexport const ModalContextProvider = memo(\n ({\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n options,\n context,\n usePathname,\n children,\n }: PropsWithChildren<ModalContextProviderProps>) => {\n const { pathname } = (usePathname || useDefaultPathname)();\n const [, update] = useTick();\n const portalRef = useRef<HTMLElement | null>(null);\n\n useOnMount(() => {\n portalRef.current = ModalManager.anchor('div');\n update();\n return () => {\n if (portalRef.current) {\n portalRef.current.remove();\n }\n };\n });\n\n const value = useMemo(\n () => ({\n BackgroundComponent,\n ForegroundComponent: ForegroundComponent || FallbackForegroundFrame,\n TitleComponent: TitleComponent || FallbackTitle,\n SubtitleComponent: SubtitleComponent || FallbackSubtitle,\n ContentComponent: memo(ContentComponent || FallbackContent),\n FooterComponent: memo(FooterComponent || FallbackFooter),\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n closeOnBackdropClick: true,\n manualDestroy: false,\n ...options,\n } satisfies ModalContextProviderProps['options'],\n }),\n [\n ForegroundComponent,\n BackgroundComponent,\n ContentComponent,\n FooterComponent,\n SubtitleComponent,\n TitleComponent,\n options,\n ],\n );\n\n return (\n <ModalContext.Provider value={value}>\n {children}\n {portalRef.current &&\n createPortal(\n <UserDefinedContextProvider context={context}>\n <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>\n </UserDefinedContextProvider>,\n portalRef.current,\n )}\n </ModalContext.Provider>\n );\n },\n);\n","import { useContext } from 'react';\n\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { ModalContext } from './ModalContext';\n\nexport const useModalContext = () => useContext(ModalContext);\n\nexport const useModalOptions = () => {\n const { options } = useContext(ModalContext);\n return options;\n};\n\nexport const useModalDuration = () => {\n const { duration } = useModalOptions();\n return { duration, milliseconds: getMillisecondsFromDuration(duration) };\n};\n\nexport const useModalBackdrop = () => {\n const { backdrop } = useModalOptions();\n return backdrop;\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n AlertContentProps,\n AlertFooterRender,\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface AlertProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<AlertContentProps>;\n background?: ModalBackground<B>;\n footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: AlertProps<B>) => {\n return new Promise<void>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'alert',\n subtype,\n resolve: () => resolve(),\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n BackgroundComponent,\n ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface ConfirmProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<ConfirmContentProps>;\n background?: ModalBackground<B>;\n footer?: ConfirmFooterRender | FooterOptions | false;\n closeOnBackdropClick?: boolean;\n manualDestroy?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: ConfirmProps<B>) => {\n return new Promise<boolean>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'confirm',\n subtype,\n resolve: (result) => resolve(result ?? false),\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n} from '@/promise-modal/types';\n\nimport { ModalManager } from '../../app/ModalManager';\n\ninterface PromptProps<T, B = any> {\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<PromptContentProps>;\n Input: (props: PromptInputProps<T>) => ReactNode;\n defaultValue?: T;\n disabled?: (value: T) => boolean;\n returnOnCancel?: boolean;\n background?: ModalBackground<B>;\n footer?: PromptFooterRender<T> | FooterOptions | false;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const prompt = <T, B = any>({\n defaultValue,\n title,\n subtitle,\n content,\n Input,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: PromptProps<T, B>) => {\n return new Promise<T>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'prompt',\n resolve: (result) => resolve(result as T),\n title,\n subtitle,\n content,\n Input,\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import { useEffect, useRef } from 'react';\n\nimport { isString } from '@winglet/common-utils';\n\nimport type { Duration } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { useModal } from '../providers';\nimport { useSubscribeModal } from './useSubscribeModal';\n\nexport const useDestroyAfter = (\n modalId: ModalNode['id'],\n duration: Duration | number,\n) => {\n const { modal, onDestroy } = useModal(modalId);\n const tick = useSubscribeModal(modal);\n\n const reference = useRef({\n modal,\n onDestroy,\n milliseconds: isString(duration)\n ? getMillisecondsFromDuration(duration)\n : duration,\n });\n\n useEffect(() => {\n const { modal, onDestroy, milliseconds } = reference.current;\n if (!modal || modal.visible || !modal.alive) return;\n const timer = setTimeout(() => {\n onDestroy();\n }, milliseconds);\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [tick]);\n};\n"],"names":["prerenderListRef","current","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","prefix","document","getElementById","id","node","createElement","setAttribute","getRandomString","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","UserDefinedContext","createContext","context","EMPTY_OBJECT","UserDefinedContextProvider","children","contextValue","useMemo","_jsx","jsx","Provider","value","useUserDefinedContext","useContext","background","css","process","env","NODE_ENV","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","active","visible","BackgroundFrame","modalId","onChangeOrder","BackgroundComponent","useModalContext","userDefinedContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","stopPropagation","Background","className","cx","visible$1","manualDestroy","alive","active$1","onClick","type","initiator","foreground","AlertInner","memo","handlers","title","subtitle","content","footer","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","withErrorBoundary","setValue","useState","handleChange","inputValue","input","isFunction","setTimeout","ForegroundFrame","ForegroundComponent","Foreground","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","presenter","zIndex","Presenter","ref","useRef","handleChangeOrder","style","useActiveModalCount","modalIds","getModalNode","useModalDataContext","count","BaseNode","__classPrivateFieldGet","this","_BaseNode_alive","_BaseNode_visible","constructor","resolve","Object","defineProperty","set","_BaseNode_resolve","_BaseNode_listeners","__classPrivateFieldSet","listener","filter","l","publish","result","call","needPublish","onShow","onHide","AlertNode","subtype","super","ConfirmNode","PromptNode","returnOnCancel","_PromptNode_value","nodeFactory","Error","DURATION_REGEX","getMillisecondsFromDuration","durationString","unit","match","duration","parseInt","ModalDataContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","useOnMountLayout","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","Anchor","key","useEffect","dimmed","transitionDuration","backgroundColor","backdrop","map","fallback","frame","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","Math","floor","marginBottom","marginLeft","transform","usePathname","setPathname","window","location","requestId","checkPathname","cancelAnimationFrame","requestAnimationFrame","ModalContext","ModalContextProvider","useDefaultPathname","portalRef","remove","jsxs","createPortal","Promise","reject","error","reference","milliseconds","timer","clearTimeout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/app/ModalManager.ts","../src/app/constant.ts","../src/providers/UserDefinedContext/UserDefinedContext.ts","../src/providers/UserDefinedContext/UserDefinedContextProvider.tsx","../src/providers/UserDefinedContext/useUserDefinedContext.ts","../src/components/Background/classNames.emotion.ts","../src/components/Background/Background.tsx","../src/components/Foreground/classNames.emotion.ts","../src/components/Foreground/components/AlertInner.tsx","../src/components/Foreground/components/ConfirmInner.tsx","../src/components/Foreground/components/PromptInner.tsx","../src/components/Foreground/Foreground.tsx","../src/hooks/useSubscribeModal.ts","../src/components/Presenter/classNames.emotion.ts","../src/components/Presenter/Presenter.tsx","../src/hooks/useActiveModalCount.ts","../src/core/node/ModalNode/AbstractBaseNode.ts","../src/core/node/ModalNode/AlertNode.ts","../src/core/node/ModalNode/ConfirmNode.ts","../src/core/node/ModalNode/PromptNode.ts","../src/core/node/nodeFactory.ts","../src/helpers/getMillisecondsFromDuration.ts","../src/providers/ModalDataContext/ModalDataContext.ts","../src/providers/ModalDataContext/ModalDataContextProvider.tsx","../src/providers/ModalDataContext/useModalDataContext.ts","../src/components/Anchor/classNames.emotion.ts","../src/components/Anchor/Anchor.tsx","../src/components/FallbackComponents/classNames.emotion.ts","../src/components/FallbackComponents/FallbackTitle.tsx","../src/components/FallbackComponents/FallbackSubtitle.tsx","../src/components/FallbackComponents/FallbackContent.tsx","../src/components/FallbackComponents/FallbackFooter.tsx","../src/components/FallbackComponents/FallbackForegroundFrame.tsx","../src/hooks/useDefaultPathname.ts","../src/providers/ModalContext/ModalContext.ts","../src/providers/ModalContext/ModalContextProvider.tsx","../src/providers/ModalContext/useModalContext.ts","../src/core/handle/alert.ts","../src/core/handle/confirm.ts","../src/core/handle/prompt.ts","../src/hooks/useDestroyAfter.ts"],"sourcesContent":["import { MutableRefObject } from 'react';\n\nimport { getRandomString } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { Modal } from '@/promise-modal/types';\n\nconst prerenderListRef: MutableRefObject<Modal[]> = {\n current: [],\n};\n\nconst openModalRef: MutableRefObject<Fn<[Modal], void>> = {\n current: (modal: Modal) => {\n prerenderListRef.current.push(modal);\n },\n};\n\nconst anchorRef: MutableRefObject<HTMLElement | null> = {\n current: null,\n};\n\nexport const ModalManager = {\n get prerender() {\n return prerenderListRef.current;\n },\n clearPrerender() {\n prerenderListRef.current = [];\n },\n open(modal: Modal) {\n openModalRef.current(modal);\n },\n setupOpen(open: (modal: Modal) => void) {\n openModalRef.current = open;\n },\n anchor(name: string, prefix = 'promise-modal'): HTMLElement {\n if (anchorRef.current) {\n const anchor = document.getElementById(anchorRef.current.id);\n if (anchor) return anchor;\n }\n const node = document.createElement(name);\n node.setAttribute('id', `${prefix}-${getRandomString(36)}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","import type { Color, Duration } from '@aileron/types';\n\nexport const DEFAULT_ANIMATION_DURATION: Duration = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR: Color = 'rgba(0, 0, 0, 0.5)';\n","import { createContext } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nexport interface UserDefinedContext {\n context: Dictionary;\n}\n\nexport const UserDefinedContext = createContext<UserDefinedContext>({\n context: EMPTY_OBJECT,\n});\n","import { PropsWithChildren, useMemo } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\ninterface UserDefinedContextProviderProps {\n /** 사용자 정의 컨텍스트 */\n context?: Dictionary;\n}\n\nexport const UserDefinedContextProvider = ({\n context,\n children,\n}: PropsWithChildren<UserDefinedContextProviderProps>) => {\n const contextValue = useMemo(\n () => ({ context: context || EMPTY_OBJECT }),\n [context],\n );\n return (\n <UserDefinedContext.Provider value={contextValue}>\n {children}\n </UserDefinedContext.Provider>\n );\n};\n","import { useContext } from 'react';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\nexport const useUserDefinedContext = () => {\n return useContext(UserDefinedContext);\n};\n","import { css } from '@emotion/css';\n\nexport const background = css`\n display: none;\n position: fixed;\n inset: 0;\n z-index: -999;\n pointer-events: none;\n > * {\n pointer-events: none;\n }\n`;\n\nexport const active = css`\n pointer-events: all;\n`;\n\nexport const visible = css`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n","import { type MouseEvent, useCallback, useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, background, visible } from './classNames.emotion';\n\nexport const BackgroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n const { modal, onClose, onChange, onConfirm, onDestroy } = useModal(modalId);\n\n const handleClose = useCallback(\n (event: MouseEvent) => {\n if (modal && modal.closeOnBackdropClick && modal.visible) onClose();\n event.stopPropagation();\n },\n [modal, onClose],\n );\n\n const Background = useMemo(\n () => modal?.BackgroundComponent || BackgroundComponent,\n [BackgroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(background, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.closeOnBackdropClick && modal.visible,\n })}\n onClick={handleClose}\n >\n {Background && (\n <Background\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n />\n )}\n </div>\n );\n};\n","import { css } from '@emotion/css';\n\nexport const foreground = css`\n pointer-events: none;\n display: none;\n position: fixed;\n inset: 0;\n z-index: 1;\n`;\n\nexport const active = css`\n > * {\n pointer-events: all;\n }\n`;\n\nexport const visible = css`\n display: flex !important;\n justify-content: center;\n align-items: center;\n`;\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { ConfirmNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface ConfirmInnerProps<B> {\n modal: ConfirmNode<B>;\n handlers: Pick<ModalActions, 'onConfirm' | 'onClose'>;\n}\n\nexport const ConfirmInner = memo(\n <B,>({ modal, handlers }: ConfirmInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm, onClose } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n const handleClose = useHandle(onClose);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport {\n renderComponent,\n useHandle,\n withErrorBoundary,\n} from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(withErrorBoundary(modal.Input)),\n }),\n [modal],\n );\n\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const [value, setValue] = useState<T | undefined>(defaultValue);\n\n const { onChange, onClose, onConfirm } = useMemo(\n () => handlers,\n [handlers],\n );\n\n const handleClose = useHandle(onClose);\n const handleChange = useHandle(\n (inputValue?: T | ((prevState: T | undefined) => T | undefined)) => {\n const input = isFunction(inputValue) ? inputValue(value) : inputValue;\n setValue(input);\n onChange(input);\n },\n );\n\n const handleConfirm = useCallback(() => {\n // NOTE: wait for the next tick to ensure the value is updated\n setTimeout(() => {\n onConfirm();\n });\n }, [onConfirm]);\n\n const disabled = useMemo(\n () => (value ? !!checkDisabled?.(value) : false),\n [checkDisabled, value],\n );\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n context={userDefinedContext}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n value,\n disabled,\n onChange: handleChange,\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n disabled={disabled}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, foreground, visible } from './classNames.emotion';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const ForegroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n const Foreground = useMemo(\n () => modal?.ForegroundComponent || ForegroundComponent,\n [ForegroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(foreground, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.visible,\n })}\n >\n <Foreground\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n >\n {modal.type === 'alert' && (\n <AlertInner modal={modal} handlers={{ onConfirm }} />\n )}\n {modal.type === 'confirm' && (\n <ConfirmInner modal={modal} handlers={{ onConfirm, onClose }} />\n )}\n {modal.type === 'prompt' && (\n <PromptInner\n modal={modal}\n handlers={{ onChange, onConfirm, onClose }}\n />\n )}\n </Foreground>\n </div>\n );\n};\n","import { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { ModalNode } from '@/promise-modal/core';\n\nexport const useSubscribeModal = (modal?: ModalNode) => {\n const [tick, update] = useTick();\n useOnMount(() => {\n if (!modal) return;\n const unsubscribe = modal.subscribe(update);\n return unsubscribe;\n });\n return tick;\n};\n","import { css } from '@emotion/css';\n\nexport const presenter = css`\n position: fixed;\n inset: 0;\n pointer-events: none;\n overflow: hidden;\n`;\n","import { memo, useRef } from 'react';\n\nimport { counterFactory } from '@winglet/common-utils';\nimport { useHandle } from '@winglet/react-utils';\n\nimport { Background } from '@/promise-modal/components/Background';\nimport { Foreground } from '@/promise-modal/components/Foreground';\nimport { useSubscribeModal } from '@/promise-modal/hooks/useSubscribeModal';\nimport { useModal } from '@/promise-modal/providers';\nimport type { ModalIdProps } from '@/promise-modal/types';\n\nimport { presenter } from './classNames.emotion';\n\nconst { increment } = counterFactory(1);\n\nexport const Presenter = memo(({ modalId }: ModalIdProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { modal } = useModal(modalId);\n useSubscribeModal(modal);\n const handleChangeOrder = useHandle(() => {\n if (ref.current) {\n ref.current.style.zIndex = `${increment()}`;\n }\n });\n return (\n <div ref={ref} className={presenter}>\n <Background modalId={modalId} onChangeOrder={handleChangeOrder} />\n <Foreground modalId={modalId} onChangeOrder={handleChangeOrder} />\n </div>\n );\n});\n","import { useMemo } from 'react';\n\nimport { useModalDataContext } from '../providers';\n\nexport const useActiveModalCount = (tick: string | number = 0) => {\n const { modalIds, getModalNode } = useModalDataContext();\n return useMemo(() => {\n let count = 0;\n for (const id of modalIds) {\n if (getModalNode(id)?.visible) count++;\n }\n return count;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getModalNode, modalIds, tick]);\n};\n","import type { ReactNode } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type {\n BackgroundComponent,\n BaseModal,\n ForegroundComponent,\n ManagedEntity,\n ModalBackground,\n} from '@/promise-modal/types';\n\ntype BaseNodeProps<T, B> = BaseModal<T, B> & ManagedEntity;\n\nexport abstract class BaseNode<T, B> {\n readonly id: number;\n readonly initiator: string;\n\n readonly title?: ReactNode;\n readonly subtitle?: ReactNode;\n readonly background?: ModalBackground<B>;\n\n readonly manualDestroy: boolean;\n readonly closeOnBackdropClick: boolean;\n\n readonly ForegroundComponent?: ForegroundComponent;\n readonly BackgroundComponent?: BackgroundComponent;\n\n #alive: boolean;\n get alive() {\n return this.#alive;\n }\n #visible: boolean;\n get visible() {\n return this.#visible;\n }\n\n #resolve: (result: T | null) => void;\n #listeners: Fn[] = [];\n\n constructor({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy = false,\n closeOnBackdropClick = true,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: BaseNodeProps<T, B>) {\n this.id = id;\n this.initiator = initiator;\n this.title = title;\n this.subtitle = subtitle;\n this.background = background;\n this.manualDestroy = manualDestroy;\n this.closeOnBackdropClick = closeOnBackdropClick;\n\n this.ForegroundComponent = ForegroundComponent;\n this.BackgroundComponent = BackgroundComponent;\n\n this.#alive = true;\n this.#visible = true;\n this.#resolve = resolve;\n }\n\n subscribe(listener: Fn) {\n this.#listeners.push(listener);\n return () => {\n this.#listeners = this.#listeners.filter((l) => l !== listener);\n };\n }\n publish() {\n for (const listener of this.#listeners) listener();\n }\n protected resolve(result: T | null) {\n this.#resolve(result);\n }\n onDestroy() {\n const needPublish = this.#alive === true;\n this.#alive = false;\n if (this.manualDestroy && needPublish) this.publish();\n }\n onShow() {\n const needPublish = this.#visible === false;\n this.#visible = true;\n if (needPublish) this.publish();\n }\n onHide() {\n const needPublish = this.#visible === true;\n this.#visible = false;\n if (needPublish) this.publish();\n }\n abstract onClose(): void;\n abstract onConfirm(): void;\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n AlertContentProps,\n AlertFooterRender,\n AlertModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype AlertNodeProps<B> = AlertModal<B> & ManagedEntity;\n\nexport class AlertNode<B> extends BaseNode<null, B> {\n readonly type: 'alert';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<AlertContentProps>;\n readonly footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(null);\n }\n onConfirm() {\n this.resolve(null);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n ConfirmContentProps,\n ConfirmFooterRender,\n ConfirmModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype ConfirmNodeProps<B> = ConfirmModal<B> & ManagedEntity;\n\nexport class ConfirmNode<B> extends BaseNode<boolean, B> {\n readonly type: 'confirm';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<ConfirmContentProps>;\n readonly footer?: ConfirmFooterRender | FooterOptions | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(false);\n }\n onConfirm() {\n this.resolve(true);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\n ManagedEntity,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n PromptModal,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype PromptNodeProps<T, B> = PromptModal<T, B> & ManagedEntity;\n\nexport class PromptNode<T, B> extends BaseNode<T, B> {\n readonly type: 'prompt';\n readonly content?: ReactNode | ComponentType<PromptContentProps>;\n readonly defaultValue: T | undefined;\n readonly Input: (props: PromptInputProps<T>) => ReactNode;\n readonly disabled?: (value: T) => boolean;\n readonly returnOnCancel?: boolean;\n readonly footer?: PromptFooterRender<T> | FooterOptions | false;\n #value: T | undefined;\n\n constructor({\n id,\n initiator,\n type,\n title,\n subtitle,\n content,\n defaultValue,\n Input,\n disabled,\n returnOnCancel,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.content = content;\n this.Input = Input;\n this.defaultValue = defaultValue;\n this.#value = defaultValue;\n this.disabled = disabled;\n this.returnOnCancel = returnOnCancel;\n this.footer = footer;\n }\n\n onChange(value: T) {\n this.#value = value;\n }\n onConfirm() {\n this.resolve(this.#value ?? null);\n }\n onClose() {\n if (this.returnOnCancel) this.resolve(this.#value ?? null);\n else this.resolve(null);\n }\n}\n","import type { ManagedModal } from '@/promise-modal/types';\n\nimport { AlertNode, ConfirmNode, PromptNode } from './ModalNode';\n\nexport const nodeFactory = <T, B>(modal: ManagedModal<T, B>) => {\n switch (modal.type) {\n case 'alert':\n return new AlertNode<B>(modal);\n case 'confirm':\n return new ConfirmNode<B>(modal);\n case 'prompt':\n return new PromptNode<T, B>(modal);\n }\n // @ts-expect-error: This state is unreachable by design and should NEVER occur.\n throw new Error(`Unknown modal: ${modal.type}`, { modal });\n};\n","const DURATION_REGEX = /^\\s*(\\d+)\\s*(ms|s|m|h)\\s*$/;\n\nexport const getMillisecondsFromDuration = (input: string) => {\n const [, durationString, unit] = input.match(DURATION_REGEX) || [];\n if (!durationString || !unit) return 0;\n const duration = parseInt(durationString);\n if (unit === 'ms') return duration;\n if (unit === 's') return duration * 1000;\n if (unit === 'm') return duration * 60 * 1000;\n if (unit === 'h') return duration * 60 * 60 * 1000;\n else return 0;\n};\n","import { createContext } from 'react';\n\nimport { undefinedFunction } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport type { ModalActions, ModalHandlersWithId } from '@/promise-modal/types';\n\nexport interface ModalDataContextProps extends ModalHandlersWithId {\n modalIds: ModalNode['id'][];\n getModal: Fn<[id: ModalNode['id']], ModalActions>;\n getModalNode: Fn<[id: ModalNode['id']], ModalNode | undefined>;\n setUpdater: Fn<[updater: Fn]>;\n}\n\nexport const ModalDataContext = createContext<ModalDataContextProps>({\n modalIds: [],\n getModalNode: undefinedFunction,\n onChange: undefinedFunction,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onDestroy: undefinedFunction,\n setUpdater: undefinedFunction,\n getModal: () => ({\n modal: undefined,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onChange: undefinedFunction,\n onDestroy: undefinedFunction,\n }),\n});\n","import {\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useOnMountLayout, useReference } from '@winglet/react-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport { type ModalNode, nodeFactory } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\nimport { useModalOptions } from '@/promise-modal/providers';\nimport type { Modal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\ninterface ModalDataContextProviderProps {\n pathname: string;\n}\n\nexport const ModalDataContextProvider = memo(\n ({\n pathname,\n children,\n }: PropsWithChildren<ModalDataContextProviderProps>) => {\n const modalDictionary = useRef<Map<ModalNode['id'], ModalNode>>(new Map());\n\n const [modalIds, setModalIds] = useState<ModalNode['id'][]>([]);\n const modalIdsRef = useReference(modalIds);\n\n const initiator = useRef(pathname);\n const modalIdSequence = useRef(0);\n\n const options = useModalOptions();\n\n const duration = useMemo(\n () => getMillisecondsFromDuration(options.duration),\n [options],\n );\n\n useOnMountLayout(() => {\n const { manualDestroy, closeOnBackdropClick } = options;\n\n for (const data of ModalManager.prerender) {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => [...ids, modal.id]);\n }\n\n ModalManager.setupOpen((data: Modal) => {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => {\n const aliveIds = ids.filter((id) => {\n const destroyed = !modalDictionary.current.get(id)?.alive;\n if (destroyed) modalDictionary.current.delete(id);\n return !destroyed;\n });\n return [...aliveIds, modal.id];\n });\n });\n ModalManager.clearPrerender();\n });\n\n useLayoutEffect(() => {\n for (const id of modalIdsRef.current) {\n const modal = modalDictionary.current.get(id);\n if (!modal?.alive) continue;\n if (modal.initiator === pathname) modal.onShow();\n else modal.onHide();\n }\n initiator.current = pathname;\n }, [modalIdsRef, pathname]);\n\n const getModalNode = useCallback((modalId: ModalNode['id']) => {\n return modalDictionary.current.get(modalId);\n }, []);\n\n const onDestroy = useCallback((modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onDestroy();\n updaterRef.current?.();\n }, []);\n\n const updaterRef = useRef<Fn>();\n const hideModal = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onHide();\n updaterRef.current?.();\n if (!modal.manualDestroy)\n setTimeout(() => {\n modal.onDestroy();\n }, duration);\n },\n [duration],\n );\n\n const onChange = useCallback((modalId: ModalNode['id'], value: any) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n if (modal.type === 'prompt') modal.onChange(value);\n }, []);\n\n const onConfirm = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onConfirm();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const onClose = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onClose();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const getModal = useCallback(\n (modalId: ModalNode['id']) => ({\n modal: getModalNode(modalId),\n onConfirm: () => onConfirm(modalId),\n onClose: () => onClose(modalId),\n onChange: (value: any) => onChange(modalId, value),\n onDestroy: () => onDestroy(modalId),\n }),\n [getModalNode, onConfirm, onClose, onChange, onDestroy],\n );\n\n const value = useMemo(() => {\n return {\n modalIds,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n getModal,\n setUpdater: (updater: Fn) => {\n updaterRef.current = updater;\n },\n };\n }, [\n modalIds,\n getModal,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n ]);\n\n return (\n <ModalDataContext.Provider value={value}>\n {children}\n </ModalDataContext.Provider>\n );\n },\n);\n","import { useContext, useMemo } from 'react';\n\nimport type { ManagedModal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\nexport const useModalDataContext = () => useContext(ModalDataContext);\n\nexport const useModal = (id: ManagedModal['id']) => {\n const { getModal } = useModalDataContext();\n return useMemo(() => getModal(id), [id, getModal]);\n};\n","import { css } from '@emotion/css';\n\nexport const anchor = css`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 1000;\n transition: background-color ease-in-out;\n`;\n","import { memo, useEffect } from 'react';\n\nimport { useTick, withErrorBoundary } from '@winglet/react-utils';\n\nimport { Presenter } from '@/promise-modal/components/Presenter';\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useModalDataContext } from '@/promise-modal/providers/ModalDataContext';\n\nimport { anchor } from './classNames.emotion';\n\nconst AnchorInner = () => {\n const [key, update] = useTick();\n\n const { modalIds, setUpdater } = useModalDataContext();\n\n useEffect(() => {\n setUpdater(update);\n }, [setUpdater, update]);\n\n const { options } = useModalContext();\n\n const dimmed = useActiveModalCount(key);\n\n return (\n <div\n className={anchor}\n style={{\n transitionDuration: options.duration,\n backgroundColor: dimmed ? options.backdrop : 'transparent',\n }}\n >\n {modalIds.map((id) => {\n return <Presenter key={id} modalId={id} />;\n })}\n </div>\n );\n};\n\nexport const Anchor = memo(withErrorBoundary(AnchorInner));\n","import { css } from '@emotion/css';\n\nexport const fallback = css`\n margin: unset;\n`;\n\nexport const frame = css`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: white;\n padding: 20px 80px;\n gap: 10px;\n border: 1px solid black;\n`;\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={fallback}>{children}</div>;\n};\n","import type { FooterComponentProps } from '@/promise-modal/types';\n\nexport const FallbackFooter = ({\n confirmLabel,\n hideConfirm = false,\n cancelLabel,\n hideCancel = false,\n disabled,\n onConfirm,\n onCancel,\n}: FooterComponentProps) => {\n return (\n <div>\n {!hideConfirm && (\n <button onClick={onConfirm} disabled={disabled}>\n {confirmLabel || '확인'}\n </button>\n )}\n\n {!hideCancel && typeof onCancel === 'function' && (\n <button onClick={onCancel}>{cancelLabel || '취소'}</button>\n )}\n </div>\n );\n};\n","import {\n type ForwardedRef,\n type PropsWithChildren,\n forwardRef,\n useMemo,\n} from 'react';\n\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport type { ModalFrameProps } from '@/promise-modal/types';\n\nimport { frame } from './classNames.emotion';\n\nconst MAX_MODAL_COUNT = 5;\nconst MAX_MODAL_LEVEL = 3;\n\nexport const FallbackForegroundFrame = forwardRef(\n (\n { id, onChangeOrder, children }: PropsWithChildren<ModalFrameProps>,\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const activeCount = useActiveModalCount();\n const [level, offset] = useMemo(() => {\n const stacked = activeCount > 1;\n const level = stacked\n ? (Math.floor(id / MAX_MODAL_COUNT) % MAX_MODAL_LEVEL) * 100\n : 0;\n const offset = stacked ? (id % MAX_MODAL_COUNT) * 35 : 0;\n return [level, offset];\n }, [activeCount, id]);\n\n return (\n <div\n ref={ref}\n className={frame}\n onClick={onChangeOrder}\n style={{\n marginBottom: `calc(25vh + ${level}px)`,\n marginLeft: `${level}px`,\n transform: `translate(${offset}px, ${offset}px)`,\n }}\n >\n {children}\n </div>\n );\n },\n);\n","import { useLayoutEffect, useState } from 'react';\n\nexport const usePathname = () => {\n const [pathname, setPathname] = useState(window.location.pathname);\n\n useLayoutEffect(() => {\n let requestId: number;\n\n const checkPathname = () => {\n if (requestId) cancelAnimationFrame(requestId);\n if (pathname !== window.location.pathname) {\n setPathname(window.location.pathname);\n } else {\n requestId = requestAnimationFrame(checkPathname);\n }\n };\n\n requestId = requestAnimationFrame(checkPathname);\n\n return () => {\n if (requestId) cancelAnimationFrame(requestId);\n };\n }, [pathname]);\n\n return { pathname };\n};\n","import { type ComponentType, createContext } from 'react';\n\nimport type { Color, Duration } from '@aileron/types';\n\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport type {\n BackgroundComponent,\n FooterComponentProps,\n ForegroundComponent,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n TitleComponent: ComponentType<WrapperComponentProps>;\n SubtitleComponent: ComponentType<WrapperComponentProps>;\n ContentComponent: ComponentType<WrapperComponentProps>;\n FooterComponent: ComponentType<FooterComponentProps>;\n options: {\n duration: Duration;\n backdrop: Color;\n manualDestroy: boolean;\n closeOnBackdropClick: boolean;\n };\n}\n\nexport const ModalContext = createContext<ModalContextProps>({\n ForegroundComponent: FallbackForegroundFrame,\n TitleComponent: FallbackTitle,\n SubtitleComponent: FallbackSubtitle,\n ContentComponent: FallbackContent,\n FooterComponent: FallbackFooter,\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n manualDestroy: false,\n closeOnBackdropClick: true,\n },\n});\n","import {\n type ComponentType,\n type PropsWithChildren,\n memo,\n useMemo,\n useRef,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { Color, Dictionary, Duration } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport { Anchor } from '@/promise-modal/components/Anchor';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport { usePathname as useDefaultPathname } from '@/promise-modal/hooks/useDefaultPathname';\nimport type {\n FooterComponentProps,\n ModalFrameProps,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { UserDefinedContextProvider } from '../UserDefinedContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<WrapperComponentProps>;\n SubtitleComponent?: ComponentType<WrapperComponentProps>;\n ContentComponent?: ComponentType<WrapperComponentProps>;\n FooterComponent?: ComponentType<FooterComponentProps>;\n options?: {\n /** Modal transition time(ms, s) */\n duration?: Duration;\n /** Modal backdrop color */\n backdrop?: Color;\n /** Whether to destroy the modal manually */\n manualDestroy?: boolean;\n /** Whether to close the modal when the backdrop is clicked */\n closeOnBackdropClick?: boolean;\n };\n context?: Dictionary;\n usePathname?: () => { pathname: string };\n}\n\nexport const ModalContextProvider = memo(\n ({\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n options,\n context,\n usePathname,\n children,\n }: PropsWithChildren<ModalContextProviderProps>) => {\n const { pathname } = (usePathname || useDefaultPathname)();\n const [, update] = useTick();\n const portalRef = useRef<HTMLElement | null>(null);\n\n useOnMount(() => {\n portalRef.current = ModalManager.anchor('div');\n update();\n return () => {\n if (portalRef.current) {\n portalRef.current.remove();\n }\n };\n });\n\n const value = useMemo(\n () => ({\n BackgroundComponent,\n ForegroundComponent: ForegroundComponent || FallbackForegroundFrame,\n TitleComponent: TitleComponent || FallbackTitle,\n SubtitleComponent: SubtitleComponent || FallbackSubtitle,\n ContentComponent: memo(ContentComponent || FallbackContent),\n FooterComponent: memo(FooterComponent || FallbackFooter),\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n closeOnBackdropClick: true,\n manualDestroy: false,\n ...options,\n } satisfies ModalContextProviderProps['options'],\n }),\n [\n ForegroundComponent,\n BackgroundComponent,\n ContentComponent,\n FooterComponent,\n SubtitleComponent,\n TitleComponent,\n options,\n ],\n );\n\n return (\n <ModalContext.Provider value={value}>\n {children}\n {portalRef.current &&\n createPortal(\n <UserDefinedContextProvider context={context}>\n <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>\n </UserDefinedContextProvider>,\n portalRef.current,\n )}\n </ModalContext.Provider>\n );\n },\n);\n","import { useContext } from 'react';\n\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { ModalContext } from './ModalContext';\n\nexport const useModalContext = () => useContext(ModalContext);\n\nexport const useModalOptions = () => {\n const { options } = useContext(ModalContext);\n return options;\n};\n\nexport const useModalDuration = () => {\n const { duration } = useModalOptions();\n return { duration, milliseconds: getMillisecondsFromDuration(duration) };\n};\n\nexport const useModalBackdrop = () => {\n const { backdrop } = useModalOptions();\n return backdrop;\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n AlertContentProps,\n AlertFooterRender,\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface AlertProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<AlertContentProps>;\n background?: ModalBackground<B>;\n footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: AlertProps<B>) => {\n return new Promise<void>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'alert',\n subtype,\n resolve: () => resolve(),\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n BackgroundComponent,\n ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface ConfirmProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<ConfirmContentProps>;\n background?: ModalBackground<B>;\n footer?: ConfirmFooterRender | FooterOptions | false;\n closeOnBackdropClick?: boolean;\n manualDestroy?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: ConfirmProps<B>) => {\n return new Promise<boolean>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'confirm',\n subtype,\n resolve: (result) => resolve(result ?? false),\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n} from '@/promise-modal/types';\n\nimport { ModalManager } from '../../app/ModalManager';\n\ninterface PromptProps<T, B = any> {\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<PromptContentProps>;\n Input: (props: PromptInputProps<T>) => ReactNode;\n defaultValue?: T;\n disabled?: (value: T) => boolean;\n returnOnCancel?: boolean;\n background?: ModalBackground<B>;\n footer?: PromptFooterRender<T> | FooterOptions | false;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const prompt = <T, B = any>({\n defaultValue,\n title,\n subtitle,\n content,\n Input,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: PromptProps<T, B>) => {\n return new Promise<T>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'prompt',\n resolve: (result) => resolve(result as T),\n title,\n subtitle,\n content,\n Input,\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import { useEffect, useRef } from 'react';\n\nimport { isString } from '@winglet/common-utils';\n\nimport type { Duration } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { useModal } from '../providers';\nimport { useSubscribeModal } from './useSubscribeModal';\n\nexport const useDestroyAfter = (\n modalId: ModalNode['id'],\n duration: Duration | number,\n) => {\n const { modal, onDestroy } = useModal(modalId);\n const tick = useSubscribeModal(modal);\n\n const reference = useRef({\n modal,\n onDestroy,\n milliseconds: isString(duration)\n ? getMillisecondsFromDuration(duration)\n : duration,\n });\n\n useEffect(() => {\n const { modal, onDestroy, milliseconds } = reference.current;\n if (!modal || modal.visible || !modal.alive) return;\n const timer = setTimeout(() => {\n onDestroy();\n }, milliseconds);\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [tick]);\n};\n"],"names":["prerenderListRef","current","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","prefix","document","getElementById","id","node","createElement","setAttribute","getRandomString","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","UserDefinedContext","createContext","context","EMPTY_OBJECT","UserDefinedContextProvider","children","contextValue","useMemo","_jsx","jsx","Provider","value","useUserDefinedContext","useContext","background","css","process","env","NODE_ENV","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","active","visible","BackgroundFrame","modalId","onChangeOrder","BackgroundComponent","useModalContext","userDefinedContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","stopPropagation","Background","className","cx","visible$1","manualDestroy","alive","active$1","onClick","type","initiator","foreground","AlertInner","memo","handlers","title","subtitle","content","footer","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","withErrorBoundary","setValue","useState","handleChange","inputValue","input","isFunction","setTimeout","ForegroundFrame","ForegroundComponent","Foreground","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","presenter","increment","counterFactory","Presenter","ref","useRef","handleChangeOrder","style","zIndex","useActiveModalCount","modalIds","getModalNode","useModalDataContext","count","BaseNode","__classPrivateFieldGet","this","_BaseNode_alive","_BaseNode_visible","constructor","resolve","Object","defineProperty","set","_BaseNode_resolve","_BaseNode_listeners","__classPrivateFieldSet","listener","filter","l","publish","result","call","needPublish","onShow","onHide","AlertNode","subtype","super","ConfirmNode","PromptNode","returnOnCancel","_PromptNode_value","nodeFactory","Error","DURATION_REGEX","getMillisecondsFromDuration","durationString","unit","match","duration","parseInt","ModalDataContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","useOnMountLayout","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","Anchor","key","useEffect","dimmed","transitionDuration","backgroundColor","backdrop","map","fallback","frame","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","Math","floor","marginBottom","marginLeft","transform","usePathname","setPathname","window","location","requestId","checkPathname","cancelAnimationFrame","requestAnimationFrame","ModalContext","ModalContextProvider","useDefaultPathname","portalRef","remove","jsxs","createPortal","Promise","reject","error","reference","milliseconds","timer","clearTimeout"],"mappings":"yLAQA,MAAMA,EAA8C,CAClDC,QAAS,IAGLC,EAAoD,CACxDD,QAAUE,IACRH,EAAiBC,QAAQG,KAAKD,EAAM,GAIlCE,EAAkD,CACtDJ,QAAS,MAGEK,EAAe,CAC1B,aAAIC,GACF,OAAOP,EAAiBC,OACzB,EACD,cAAAO,GACER,EAAiBC,QAAU,EAC5B,EACD,IAAAQ,CAAKN,GACHD,EAAaD,QAAQE,EACtB,EACD,SAAAO,CAAUD,GACRP,EAAaD,QAAUQ,CACxB,EACD,MAAAE,CAAOC,EAAcC,EAAS,iBAC5B,GAAIR,EAAUJ,QAAS,CACrB,MAAMU,EAASG,SAASC,eAAeV,EAAUJ,QAAQe,IACzD,GAAIL,EAAQ,OAAOA,EAErB,MAAMM,EAAOH,SAASI,cAAcN,GAIpC,OAHAK,EAAKE,aAAa,KAAM,GAAGN,KAAUO,EAAeA,gBAAC,OACrDN,SAASO,KAAKC,YAAYL,GAC1BZ,EAAUJ,QAAUgB,EACbA,CACR,GC3CUM,EAAuC,QAEvCC,EAAgC,qBCMhCC,EAAqBC,EAAAA,cAAkC,CAClEC,QAASC,EAAYA,eCEVC,EAA6B,EACxCF,UACAG,eAEA,MAAMC,EAAeC,WACnB,KAAA,CAASL,QAASA,GAAWC,kBAC7B,CAACD,IAEH,OACEM,EAAAC,IAACT,EAAmBU,SAAQ,CAACC,MAAOL,EAAYD,SAC7CA,GAC2B,ECpBrBO,EAAwB,IAC5BC,EAAAA,WAAWb,wPCHb,MAAMc,EAAaC,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,SAAAgC,OAAA,iGAAA,CAAAhC,KAAA,oBAAAgC,OAAA,kHAAAC,SAAAC,IAWhBC,EAASP,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,SAAAgC,OAAA,sBAAA,CAAAhC,KAAA,iBAAAgC,OAAA,mCAAAC,SAAAC,IAIZE,EAAUR,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,UAAAgC,OAAA,0DAAA,CAAAhC,KAAA,iBAAAgC,OAAA,wEAAAC,SAAAC,ICPbG,EAAkB,EAC7BC,UACAC,oBAEA,MAAMC,oBAAEA,GAAwBC,MACxB1B,QAAS2B,GAAuBjB,KAClClC,MAAEA,EAAKoD,QAAEA,EAAOC,SAAEA,EAAQC,UAAEA,EAASC,UAAEA,GAAcC,EAAST,GAE9DU,EAAcC,eACjBC,IACK3D,GAASA,EAAM4D,sBAAwB5D,EAAM6C,SAASO,IAC1DO,EAAME,iBAAiB,GAEzB,CAAC7D,EAAOoD,IAGJU,EAAajC,EAAOA,SACxB,IAAM7B,GAAOiD,qBAAuBA,GACpC,CAACA,EAAqBjD,IAGxB,OAAKA,EAGH8B,EACEC,IAAA,MAAA,CAAAgC,UAAWC,EAAAA,GAAG5B,EAAY,CACxB6B,CAACpB,GAAU7C,EAAMkE,cAAgBlE,EAAMmE,MAAQnE,EAAM6C,QACrDuB,CAACxB,GAAS5C,EAAM4D,sBAAwB5D,EAAM6C,UAEhDwB,QAASZ,EAER9B,SAAAmC,GACChC,EAAAC,IAAC+B,EAAU,CACTjD,GAAIb,EAAMa,GACVyD,KAAMtE,EAAMsE,KACZH,MAAOnE,EAAMmE,MACbtB,QAAS7C,EAAM6C,QACf0B,UAAWvE,EAAMuE,UACjBL,cAAelE,EAAMkE,cACrBN,qBAAsB5D,EAAM4D,qBAC5BxB,WAAYpC,EAAMoC,WAClBiB,SAAUA,EACVC,UAAWA,EACXF,QAASA,EACTG,UAAWA,EACXP,cAAeA,EACfxB,QAAS2B,MAzBE,IA4BX,uPCzDH,MAAMqB,EAAanC,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,UAAAgC,OAAA,qEAAA,CAAAhC,KAAA,qBAAAgC,OAAA,sFAAAC,SAAAC,IAQhBC,EAASP,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,UAAAgC,OAAA,2BAAA,CAAAhC,KAAA,iBAAAgC,OAAA,wCAAAC,SAAAC,IAMZE,EAAUR,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,UAAAgC,OAAA,oEAAA,CAAAhC,KAAA,kBAAAgC,OAAA,kFAAAC,SAAAC,ICDb8B,EAAaC,EAAAA,MACxB,EAAO1E,QAAO2E,eACZ,MAAMC,MAAEA,EAAKC,SAAEA,EAAQC,QAAEA,EAAOC,OAAEA,GAAWlD,EAAAA,SAAQ,IAAM7B,GAAO,CAACA,KAC3DwB,QAAS2B,GAAuBjB,KAClCoB,UAAEA,GAAczB,EAAAA,SAAQ,IAAM8C,GAAU,CAACA,IAEzCK,EAAgBC,EAASA,UAAC3B,IAE1B4B,eACJA,EAAcC,kBACdA,EAAiBC,iBACjBA,EAAgBC,gBAChBA,GACEnC,KAEJ,OACEoC,OAACC,EAAAA,SAAQ,CAAA5D,SAAA,CACNiD,IACEY,EAAAA,SAASZ,GACR9C,MAACoD,EAAc,CAAC1D,QAAS2B,EACtBxB,SAAAiD,OAKNC,IACEW,EAAAA,SAASX,GACR/C,MAACqD,EAAiB,CAAC3D,QAAS2B,EACzBxB,SAAAkD,OAKNC,IACEU,EAAAA,SAASV,GACRhD,EAACC,IAAAqD,EAAiB,CAAA5D,QAAS2B,EAAkBxB,SAC1CmD,IAGHW,EAAAA,gBAAgBX,EAAS,CACvBxB,UAAW0B,MAGL,IAAXD,IACoB,mBAAXA,EACNA,EAAO,CACLzB,UAAW0B,EACXxD,QAAS2B,IAGXrB,EAACC,IAAAsD,EACC,CAAA/B,UAAW0B,EACXU,aAAcX,GAAQY,QACtBC,YAAab,GAAQa,YACrBpE,QAAS2B,OAGN,ICzDJ0C,EAAenB,EAAAA,MAC1B,EAAO1E,QAAO2E,eACZ,MAAMC,MAAEA,EAAKC,SAAEA,EAAQC,QAAEA,EAAOC,OAAEA,GAAWlD,EAAAA,SAAQ,IAAM7B,GAAO,CAACA,KAC3DwB,QAAS2B,GAAuBjB,KAClCoB,UAAEA,EAASF,QAAEA,GAAYvB,EAAOA,SAAC,IAAM8C,GAAU,CAACA,IAElDK,EAAgBC,EAASA,UAAC3B,GAC1BG,EAAcwB,EAASA,UAAC7B,IAExB8B,eACJA,EAAcC,kBACdA,EAAiBC,iBACjBA,EAAgBC,gBAChBA,GACEnC,KAEJ,OACEoC,OAACC,EAAAA,SAAQ,CAAA5D,SAAA,CACNiD,IACEY,EAAAA,SAASZ,GACR9C,MAACoD,EAAc,CAAC1D,QAAS2B,EACtBxB,SAAAiD,OAKNC,IACEW,EAAAA,SAASX,GACR/C,MAACqD,EAAiB,CAAC3D,QAAS2B,EACzBxB,SAAAkD,OAKNC,IACEU,EAAAA,SAASV,GACRhD,EAACC,IAAAqD,EAAiB,CAAA5D,QAAS2B,EAAkBxB,SAC1CmD,IAGHW,EAAAA,gBAAgBX,EAAS,CACvBxB,UAAW0B,EACXc,SAAUrC,EACVjC,QAAS2B,MAGH,IAAX4B,IACoB,mBAAXA,EACNA,EAAO,CACLzB,UAAW0B,EACXc,SAAUrC,EACVjC,QAAS2B,IAGXrB,EAACC,IAAAsD,EACC,CAAA/B,UAAW0B,EACXc,SAAUrC,EACViC,aAAcX,GAAQY,QACtBI,YAAahB,GAAQiB,OACrBJ,YAAab,GAAQa,YACrBK,WAAYlB,GAAQkB,WACpBzE,QAAS2B,OAGN,IC5DJ+C,EAAcxB,EAAAA,MACzB,EAAS1E,QAAO2E,eACd,MAAMwB,MACJA,EAAKC,aACLA,EACAC,SAAUC,EAAa1B,MACvBA,EAAKC,SACLA,EAAQC,QACRA,EAAOC,OACPA,GACElD,EAAOA,SACT,KAAO,IACF7B,EACHmG,MAAOzB,EAAAA,KAAK6B,EAAAA,kBAAkBvG,EAAMmG,WAEtC,CAACnG,KAGKwB,QAAS2B,GAAuBjB,KAEjCD,EAAOuE,GAAYC,EAAAA,SAAwBL,IAE5C/C,SAAEA,EAAQD,QAAEA,EAAOE,UAAEA,GAAczB,EAAAA,SACvC,IAAM8C,GACN,CAACA,IAGGlB,EAAcwB,EAASA,UAAC7B,GACxBsD,EAAezB,aAClB0B,IACC,MAAMC,EAAQC,EAAAA,WAAWF,GAAcA,EAAW1E,GAAS0E,EAC3DH,EAASI,GACTvD,EAASuD,EAAM,IAIb5B,EAAgBtB,EAAAA,aAAY,KAEhCoD,YAAW,KACTxD,GAAW,GACX,GACD,CAACA,IAEE+C,EAAWxE,EAAAA,SACf,MAAOI,KAAUqE,IAAgBrE,IACjC,CAACqE,EAAerE,KAGZiD,eACJA,EAAcC,kBACdA,EAAiBC,iBACjBA,EAAgBC,gBAChBA,GACEnC,KAEJ,OACEoC,OAACC,EAAAA,SAAQ,CAAA5D,SAAA,CACNiD,IACEY,EAAAA,SAASZ,GACR9C,MAACoD,EAAc,CAAC1D,QAAS2B,EACtBxB,SAAAiD,OAKNC,IACEW,EAAAA,SAASX,GACR/C,MAACqD,EAAiB,CAAC3D,QAAS2B,EACzBxB,SAAAkD,OAKNC,IACEU,EAAAA,SAASV,GACRhD,EAACC,IAAAqD,EAAiB,CAAA5D,QAAS2B,EAAkBxB,SAC1CmD,IAGHW,EAAAA,gBAAgBX,EAAS,CACvBxB,UAAW0B,EACXc,SAAUrC,EACVjC,QAAS2B,KAIdgD,GACCrE,MAACqE,EACC,CAAAC,aAAcA,EACdnE,MAAOA,EACPoB,SAAUqD,EACVpD,UAAW0B,EACXc,SAAUrC,EACVjC,QAAS2B,KAID,IAAX4B,IACoB,mBAAXA,EACNA,EAAO,CACL9C,QACAoE,WACAhD,SAAUqD,EACVpD,UAAW0B,EACXc,SAAUrC,EACVjC,QAAS2B,IAGXrB,EAAAA,IAACuD,EAAe,CACdgB,SAAUA,EACV/C,UAAW0B,EACXc,SAAUrC,EACViC,aAAcX,GAAQY,QACtBI,YAAahB,GAAQiB,OACrBJ,YAAab,GAAQa,YACrBK,WAAYlB,GAAQkB,WACpBzE,QAAS2B,OAGN,IC/HJ4D,EAAkB,EAC7BhE,UACAC,oBAEA,MAAMgE,oBAAEA,GAAwB9D,MACxB1B,QAAS2B,GAAuBjB,KAElClC,MAAEA,EAAKqD,SAAEA,EAAQC,UAAEA,EAASF,QAAEA,EAAOG,UAAEA,GAAcC,EAAST,GAE9DkE,EAAapF,EAAOA,SACxB,IAAM7B,GAAOgH,qBAAuBA,GACpC,CAACA,EAAqBhH,IAGxB,OAAKA,EAGH8B,EACEC,IAAA,MAAA,CAAAgC,UAAWC,EAAAA,GAAGQ,EAAY,CACxB3B,CAACA,GAAU7C,EAAMkE,cAAgBlE,EAAMmE,MAAQnE,EAAM6C,QACrDD,CAACA,GAAS5C,EAAM6C,UAGlBlB,SAAA2D,EAAAA,KAAC2B,EAAU,CACTpG,GAAIb,EAAMa,GACVyD,KAAMtE,EAAMsE,KACZH,MAAOnE,EAAMmE,MACbtB,QAAS7C,EAAM6C,QACf0B,UAAWvE,EAAMuE,UACjBL,cAAelE,EAAMkE,cACrBN,qBAAsB5D,EAAM4D,qBAC5BxB,WAAYpC,EAAMoC,WAClBiB,SAAUA,EACVC,UAAWA,EACXF,QAASA,EACTG,UAAWA,EACXP,cAAeA,EACfxB,QAAS2B,EAERxB,SAAA,CAAe,UAAf3B,EAAMsE,MACLxC,EAAAC,IAAC0C,EAAU,CAACzE,MAAOA,EAAO2E,SAAU,CAAErB,eAExB,YAAftD,EAAMsE,MACLxC,EAAAA,IAAC+D,EAAY,CAAC7F,MAAOA,EAAO2E,SAAU,CAAErB,YAAWF,aAErC,WAAfpD,EAAMsE,MACLxC,MAACoE,EAAW,CACVlG,MAAOA,EACP2E,SAAU,CAAEtB,WAAUC,YAAWF,kBAlCxB,IAsCX,EC3DG8D,EAAqBlH,IAChC,MAAOmH,EAAMC,GAAUC,YAMvB,OALAC,EAAAA,YAAW,KACT,GAAKtH,EAEL,OADoBA,EAAMuH,UAAUH,EAClB,IAEbD,CAAI,ECTAK,EAAYnF,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,UAAAgC,OAAA,8DAAA,CAAAhC,KAAA,mBAAAgC,OAAA,8EAAAC,gQCWtB+E,UAAEA,GAAcC,EAAcA,eAAC,GAExBC,EAAYjD,EAAIA,MAAC,EAAG3B,cAC/B,MAAM6E,EAAMC,EAAMA,OAAiB,OAC7B7H,MAAEA,GAAUwD,EAAST,GAC3BmE,EAAkBlH,GAClB,MAAM8H,EAAoB7C,EAAAA,WAAU,KAC9B2C,EAAI9H,UACN8H,EAAI9H,QAAQiI,MAAMC,OAAS,GAAGP,UAGlC,OACEnC,OAAA,MAAA,CAAKsC,IAAKA,EAAK7D,UAAWyD,YACxB1F,MAACgC,EAAW,CAAAf,QAASA,EAASC,cAAe8E,IAC7ChG,EAAAA,IAACmF,GAAWlE,QAASA,EAASC,cAAe8E,MACzC,ICxBGG,EAAsB,CAACd,EAAwB,KAC1D,MAAMe,SAAEA,EAAQC,aAAEA,GAAiBC,IACnC,OAAOvG,EAAOA,SAAC,KACb,IAAIwG,EAAQ,EACZ,IAAK,MAAMxH,KAAMqH,EACXC,EAAatH,IAAKgC,SAASwF,IAEjC,OAAOA,CAAK,GAEX,CAACF,EAAcD,EAAUf,GAAM;;;;;;;;;;;;;;;;0tBCCdmB,EAepB,SAAInE,GACF,OAAOoE,EAAAC,KAAIC,EAAA,KAGb,WAAI5F,GACF,OAAO0F,EAAAC,KAAIE,EAAA,KAMb,WAAAC,EAAY9H,GACVA,EAAE0D,UACFA,EAASK,MACTA,EAAKC,SACLA,EAAQzC,WACRA,EAAU8B,cACVA,GAAgB,EAAKN,qBACrBA,GAAuB,EAAIgF,QAC3BA,EAAO5B,oBACPA,EAAmB/D,oBACnBA,IAnCO4F,OAAAC,eAAAN,KAAA,KAAA,0DACAK,OAAAC,eAAAN,KAAA,YAAA,0DAEAK,OAAAC,eAAAN,KAAA,QAAA,0DACAK,OAAAC,eAAAN,KAAA,WAAA,0DACAK,OAAAC,eAAAN,KAAA,aAAA,0DAEAK,OAAAC,eAAAN,KAAA,gBAAA,0DACAK,OAAAC,eAAAN,KAAA,uBAAA,0DAEAK,OAAAC,eAAAN,KAAA,sBAAA,0DACAK,OAAAC,eAAAN,KAAA,sBAAA,0DAETC,EAAgBM,IAAAP,UAAA,GAIhBE,EAAkBK,IAAAP,UAAA,GAKlBQ,EAAqCD,IAAAP,UAAA,GACrCS,EAAAF,IAAAP,KAAmB,IAcjBA,KAAK3H,GAAKA,EACV2H,KAAKjE,UAAYA,EACjBiE,KAAK5D,MAAQA,EACb4D,KAAK3D,SAAWA,EAChB2D,KAAKpG,WAAaA,EAClBoG,KAAKtE,cAAgBA,EACrBsE,KAAK5E,qBAAuBA,EAE5B4E,KAAKxB,oBAAsBA,EAC3BwB,KAAKvF,oBAAsBA,EAE3BiG,EAAAV,KAAIC,GAAU,EAAI,KAClBS,EAAAV,KAAIE,GAAY,EAAI,KACpBQ,EAAAV,KAAIQ,EAAYJ,EAAO,KAGzB,SAAArB,CAAU4B,GAER,OADAZ,EAAAC,KAAeS,EAAA,KAAChJ,KAAKkJ,GACd,KACLD,EAAAV,KAAkBS,EAAAV,EAAAC,KAAeS,EAAA,KAACG,QAAQC,GAAMA,IAAMF,QAAS,EAGnE,OAAAG,GACE,IAAK,MAAMH,KAAYZ,EAAAC,KAAeS,EAAA,KAAEE,IAEhC,OAAAP,CAAQW,GAChBhB,EAAAC,KAAaQ,EAAA,KAAAQ,KAAbhB,KAAce,GAEhB,SAAAhG,GACE,MAAMkG,GAA8B,IAAhBlB,EAAAC,KAAWC,EAAA,KAC/BS,EAAAV,KAAIC,GAAU,EAAK,KACfD,KAAKtE,eAAiBuF,GAAajB,KAAKc,UAE9C,MAAAI,GACE,MAAMD,GAAgC,IAAlBlB,EAAAC,KAAaE,EAAA,KACjCQ,EAAAV,KAAIE,GAAY,EAAI,KAChBe,GAAajB,KAAKc,UAExB,MAAAK,GACE,MAAMF,GAAgC,IAAlBlB,EAAAC,KAAaE,EAAA,KACjCQ,EAAAV,KAAIE,GAAY,EAAK,KACjBe,GAAajB,KAAKc,mEC/EpB,MAAOM,UAAqBtB,EAShC,WAAAK,EAAY9H,GACVA,EAAE0D,UACFA,EAASD,KACTA,EAAIuF,QACJA,EAAOjF,MACPA,EAAKC,SACLA,EAAQC,QACRA,EAAOC,OACPA,EAAM3C,WACNA,EAAU8B,cACVA,EAAaN,qBACbA,EAAoBgF,QACpBA,EAAO5B,oBACPA,EAAmB/D,oBACnBA,IAEA6G,MAAM,CACJjJ,KACA0D,YACAK,QACAC,WACAzC,aACA8B,gBACAN,uBACAgF,UACA5B,sBACA/D,wBAlCK4F,OAAAC,eAAAN,KAAA,OAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,SAAA,0DAiCPA,KAAKlE,KAAOA,EACZkE,KAAKqB,QAAUA,EACfrB,KAAK1D,QAAUA,EACf0D,KAAKzD,OAASA,EAEhB,OAAA3B,GACEoF,KAAKI,QAAQ,MAEf,SAAAtF,GACEkF,KAAKI,QAAQ,OC9CX,MAAOmB,UAAuBzB,EAMlC,WAAAK,EAAY9H,GACVA,EAAE0D,UACFA,EAASD,KACTA,EAAIuF,QACJA,EAAOjF,MACPA,EAAKC,SACLA,EAAQC,QACRA,EAAOC,OACPA,EAAM3C,WACNA,EAAU8B,cACVA,EAAaN,qBACbA,EAAoBgF,QACpBA,EAAO5B,oBACPA,EAAmB/D,oBACnBA,IAEA6G,MAAM,CACJjJ,KACA0D,YACAK,QACAC,WACAzC,aACA8B,gBACAN,uBACAgF,UACA5B,sBACA/D,wBA/BK4F,OAAAC,eAAAN,KAAA,OAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,SAAA,0DA8BPA,KAAKlE,KAAOA,EACZkE,KAAKqB,QAAUA,EACfrB,KAAK1D,QAAUA,EACf0D,KAAKzD,OAASA,EAEhB,OAAA3B,GACEoF,KAAKI,SAAQ,GAEf,SAAAtF,GACEkF,KAAKI,SAAQ,IC1CX,MAAOoB,UAAyB1B,EAUpC,WAAAK,EAAY9H,GACVA,EAAE0D,UACFA,EAASD,KACTA,EAAIM,MACJA,EAAKC,SACLA,EAAQC,QACRA,EAAOsB,aACPA,EAAYD,MACZA,EAAKE,SACLA,EAAQ4D,eACRA,EAAclF,OACdA,EAAM3C,WACNA,EAAU8B,cACVA,EAAaN,qBACbA,EAAoBgF,QACpBA,EAAO5B,oBACPA,EAAmB/D,oBACnBA,IAEA6G,MAAM,CACJjJ,KACA0D,YACAK,QACAC,WACAzC,aACA8B,gBACAN,uBACAgF,UACA5B,sBACA/D,wBAtCK4F,OAAAC,eAAAN,KAAA,OAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,eAAA,0DACAK,OAAAC,eAAAN,KAAA,QAAA,0DACAK,OAAAC,eAAAN,KAAA,WAAA,0DACAK,OAAAC,eAAAN,KAAA,iBAAA,0DACAK,OAAAC,eAAAN,KAAA,SAAA,0DACT0B,EAAsBnB,IAAAP,UAAA,GAiCpBA,KAAKlE,KAAOA,EACZkE,KAAK1D,QAAUA,EACf0D,KAAKrC,MAAQA,EACbqC,KAAKpC,aAAeA,EACpB8C,EAAAV,KAAI0B,EAAU9D,EAAY,KAC1BoC,KAAKnC,SAAWA,EAChBmC,KAAKyB,eAAiBA,EACtBzB,KAAKzD,OAASA,EAGhB,QAAA1B,CAASpB,GACPiH,EAAAV,KAAI0B,EAAUjI,EAAK,KAErB,SAAAqB,GACEkF,KAAKI,QAAQL,EAAAC,KAAW0B,EAAA,MAAI,MAE9B,OAAA9G,GACMoF,KAAKyB,eAAgBzB,KAAKI,QAAQL,EAAAC,KAAW0B,EAAA,MAAI,MAChD1B,KAAKI,QAAQ,qBCtEf,MAAMuB,EAAqBnK,IAChC,OAAQA,EAAMsE,MACZ,IAAK,QACH,OAAO,IAAIsF,EAAa5J,GAC1B,IAAK,UACH,OAAO,IAAI+J,EAAe/J,GAC5B,IAAK,SACH,OAAO,IAAIgK,EAAiBhK,GAGhC,MAAM,IAAIoK,MAAM,kBAAkBpK,EAAMsE,OAAQ,CAAEtE,SAAQ,ECdtDqK,EAAiB,6BAEVC,EAA+B1D,IAC1C,MAAM,CAAG2D,EAAgBC,GAAQ5D,EAAM6D,MAAMJ,IAAmB,GAChE,IAAKE,IAAmBC,EAAM,OAAO,EACrC,MAAME,EAAWC,SAASJ,GAC1B,MAAa,OAATC,EAAsBE,EACb,MAATF,EAAgC,IAAXE,EACZ,MAATF,EAAgC,GAAXE,EAAgB,IAC5B,MAATF,EAAgC,GAAXE,EAAgB,GAAK,IAClC,CAAC,ECMFE,EAAmBrJ,EAAAA,cAAqC,CACnE2G,SAAU,GACVC,aAAc0C,EAAiBA,kBAC/BxH,SAAUwH,EAAiBA,kBAC3BvH,UAAWuH,EAAiBA,kBAC5BzH,QAASyH,EAAiBA,kBAC1BtH,UAAWsH,EAAiBA,kBAC5BC,WAAYD,EAAiBA,kBAC7BE,SAAU,KAAO,CACf/K,WAAOgL,EACP1H,UAAWuH,EAAiBA,kBAC5BzH,QAASyH,EAAiBA,kBAC1BxH,SAAUwH,EAAiBA,kBAC3BtH,UAAWsH,EAAiBA,sBCHnBI,EAA2BvG,EAAAA,MACtC,EACEwG,WACAvJ,eAEA,MAAMwJ,EAAkBtD,EAAAA,OAAwC,IAAIuD,MAE7DlD,EAAUmD,GAAe5E,EAAAA,SAA4B,IACtD6E,EAAcC,EAAYA,aAACrD,GAE3B3D,EAAYsD,EAAMA,OAACqD,GACnBM,EAAkB3D,EAAMA,OAAC,GAEzB4D,EAAUC,KAEVhB,EAAW7I,EAAOA,SACtB,IAAMyI,EAA4BmB,EAAQf,WAC1C,CAACe,IAGHE,EAAAA,kBAAiB,KACf,MAAMzH,cAAEA,EAAaN,qBAAEA,GAAyB6H,EAEhD,IAAK,MAAMG,KAAQzL,EAAaC,UAAW,CACzC,MAAMJ,EAAQmK,EAAY,IACrByB,EACH/K,GAAI2K,EAAgB1L,UACpByE,UAAWA,EAAUzE,QACrBoE,mBACyB8G,IAAvBY,EAAK1H,cACD0H,EAAK1H,cACLA,EACNN,0BACgCoH,IAA9BY,EAAKhI,qBACDgI,EAAKhI,qBACLA,IAERuH,EAAgBrL,QAAQiJ,IAAI/I,EAAMa,GAAIb,GACtCqL,GAAaQ,GAAQ,IAAIA,EAAK7L,EAAMa,MAGtCV,EAAaI,WAAWqL,IACtB,MAAM5L,EAAQmK,EAAY,IACrByB,EACH/K,GAAI2K,EAAgB1L,UACpByE,UAAWA,EAAUzE,QACrBoE,mBACyB8G,IAAvBY,EAAK1H,cACD0H,EAAK1H,cACLA,EACNN,0BACgCoH,IAA9BY,EAAKhI,qBACDgI,EAAKhI,qBACLA,IAERuH,EAAgBrL,QAAQiJ,IAAI/I,EAAMa,GAAIb,GACtCqL,GAAaQ,GAMJ,IALUA,EAAIzC,QAAQvI,IAC3B,MAAMiL,GAAaX,EAAgBrL,QAAQiM,IAAIlL,IAAKsD,MAEpD,OADI2H,GAAWX,EAAgBrL,QAAQkM,OAAOnL,IACtCiL,CAAS,IAEE9L,EAAMa,KAC3B,IAEJV,EAAaE,gBAAgB,IAG/B4L,EAAAA,iBAAgB,KACd,IAAK,MAAMpL,KAAMyK,EAAYxL,QAAS,CACpC,MAAME,EAAQmL,EAAgBrL,QAAQiM,IAAIlL,GACrCb,GAAOmE,QACRnE,EAAMuE,YAAc2G,EAAUlL,EAAM0J,SACnC1J,EAAM2J,UAEbpF,EAAUzE,QAAUoL,CAAQ,GAC3B,CAACI,EAAaJ,IAEjB,MAAM/C,EAAezE,eAAaX,GACzBoI,EAAgBrL,QAAQiM,IAAIhJ,IAClC,IAEGQ,EAAYG,eAAaX,IAC7B,MAAM/C,EAAQmL,EAAgBrL,QAAQiM,IAAIhJ,GACrC/C,IACLA,EAAMuD,YACN2I,EAAWpM,YAAW,GACrB,IAEGoM,EAAarE,EAAAA,SACbsE,EAAYzI,eACfX,IACC,MAAM/C,EAAQmL,EAAgBrL,QAAQiM,IAAIhJ,GACrC/C,IACLA,EAAM2J,SACNuC,EAAWpM,YACNE,EAAMkE,eACT4C,YAAW,KACT9G,EAAMuD,WAAW,GAChBmH,GAAS,GAEhB,CAACA,IAGGrH,EAAWK,EAAAA,aAAY,CAACX,EAA0Bd,KACtD,MAAMjC,EAAQmL,EAAgBrL,QAAQiM,IAAIhJ,GACrC/C,GACc,WAAfA,EAAMsE,MAAmBtE,EAAMqD,SAASpB,EAAM,GACjD,IAEGqB,EAAYI,eACfX,IACC,MAAM/C,EAAQmL,EAAgBrL,QAAQiM,IAAIhJ,GACrC/C,IACLA,EAAMsD,YACN6I,EAAUpJ,GAAQ,GAEpB,CAACoJ,IAGG/I,EAAUM,eACbX,IACC,MAAM/C,EAAQmL,EAAgBrL,QAAQiM,IAAIhJ,GACrC/C,IACLA,EAAMoD,UACN+I,EAAUpJ,GAAQ,GAEpB,CAACoJ,IAGGpB,EAAWrH,eACdX,IAA8B,CAC7B/C,MAAOmI,EAAapF,GACpBO,UAAW,IAAMA,EAAUP,GAC3BK,QAAS,IAAMA,EAAQL,GACvBM,SAAWpB,GAAeoB,EAASN,EAASd,GAC5CsB,UAAW,IAAMA,EAAUR,MAE7B,CAACoF,EAAc7E,EAAWF,EAASC,EAAUE,IAGzCtB,EAAQJ,EAAAA,SAAQ,KACb,CACLqG,WACAC,eACA9E,WACAC,YACAF,UACAG,YACAwH,WACAD,WAAasB,IACXF,EAAWpM,QAAUsM,CAAO,KAG/B,CACDlE,EACA6C,EACA5C,EACA9E,EACAC,EACAF,EACAG,IAGF,OACEzB,EAAAC,IAAC6I,EAAiB5I,SAAQ,CAACC,MAAOA,EAAKN,SACpCA,GACyB,IC3LrByG,EAAsB,IAAMjG,EAAUA,WAACyI,GAEvCpH,EAAY3C,IACvB,MAAMkK,SAAEA,GAAa3C,IACrB,OAAOvG,EAAAA,SAAQ,IAAMkJ,EAASlK,IAAK,CAACA,EAAIkK,GAAU,ECRvCvK,EAAS6B,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,SAAAgC,OAAA,0JAAA,CAAAhC,KAAA,gBAAAgC,OAAA,uKAAAC,+PCqCZ2J,EAAS3H,EAAIA,KAAC6B,qBA5BP,KAClB,MAAO+F,EAAKlF,GAAUC,aAEhBa,SAAEA,EAAQ4C,WAAEA,GAAe1C,IAEjCmE,EAAAA,WAAU,KACRzB,EAAW1D,EAAO,GACjB,CAAC0D,EAAY1D,IAEhB,MAAMqE,QAAEA,GAAYvI,KAEdsJ,EAASvE,EAAoBqE,GAEnC,OACExK,EACEC,IAAA,MAAA,CAAAgC,UAAWvD,EACXuH,MAAO,CACL0E,mBAAoBhB,EAAQf,SAC5BgC,gBAAiBF,EAASf,EAAQkB,SAAW,eAC9ChL,SAEAuG,EAAS0E,KAAK/L,GACNiB,EAAAA,IAAC6F,EAAmB,CAAA5E,QAASlC,GAAbA,MAErB,0PCjCH,MAAMgM,GAAWxK,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,UAAAgC,OAAA,gBAAA,CAAAhC,KAAA,mBAAAgC,OAAA,+BAAAC,SAAAC,IAIdmK,GAAQzK,EAAAA,IAAG,eAAAC,QAAAC,IAAAC,SAAA,CAAA/B,KAAA,UAAAgC,OAAA,yJAAA,CAAAhC,KAAA,gBAAAgC,OAAA,qKAAAC,SAAAC,ICFXoK,GAAgB,EAAGpL,cACvBG,EAAAA,UAAIiC,UAAW8I,GAAWlL,SAAAA,ICDtBqL,GAAmB,EAAGrL,cAC1BG,EAAAA,UAAIiC,UAAW8I,GAAWlL,SAAAA,ICDtBsL,GAAkB,EAAGtL,cACzBG,EAAAA,WAAKiC,UAAW8I,GAAWlL,SAAAA,ICHvBuL,GAAiB,EAC5BxH,eACAE,eAAc,EACdG,cACAE,cAAa,EACbI,WACA/C,YACAwC,cAGER,EAAAA,KACG,MAAA,CAAA3D,SAAA,EAACiE,GACA9D,gBAAQuC,QAASf,EAAW+C,SAAUA,EAAQ1E,SAC3C+D,GAAgB,QAInBO,GAAkC,mBAAbH,GACrBhE,EAAQC,IAAA,SAAA,CAAAsC,QAASyB,EAAQnE,SAAGoE,GAAe,UCLtCoH,GAA0BC,EAAUA,YAC/C,EACIvM,KAAImC,gBAAerB,YACrBiG,KAEA,MAAMyF,EAAcpF,KACbqF,EAAOC,GAAU1L,EAAOA,SAAC,KAC9B,MAAM2L,EAAUH,EAAc,EAK9B,MAAO,CAJOG,EACTC,KAAKC,MAAM7M,EAZE,GACA,EAWyC,IACvD,EACW2M,EAAW3M,EAdR,EAcgC,GAAK,EACjC,GACrB,CAACwM,EAAaxM,IAEjB,OACEiB,EAAAC,IAAA,MAAA,CACE6F,IAAKA,EACL7D,UAAW+I,GACXzI,QAASrB,EACT+E,MAAO,CACL4F,aAAc,eAAeL,OAC7BM,WAAY,GAAGN,MACfO,UAAW,aAAaN,QAAaA,QAGtC5L,SAAAA,GACG,ICxCCmM,GAAc,KACzB,MAAO5C,EAAU6C,GAAetH,EAAQA,SAACuH,OAAOC,SAAS/C,UAqBzD,OAnBAe,EAAAA,iBAAgB,KACd,IAAIiC,EAEJ,MAAMC,EAAgB,KAChBD,GAAWE,qBAAqBF,GAChChD,IAAa8C,OAAOC,SAAS/C,SAC/B6C,EAAYC,OAAOC,SAAS/C,UAE5BgD,EAAYG,sBAAsBF,IAMtC,OAFAD,EAAYG,sBAAsBF,GAE3B,KACDD,GAAWE,qBAAqBF,EAAU,CAC/C,GACA,CAAChD,IAEG,CAAEA,WAAU,ECaRoD,GAAe/M,EAAAA,cAAiC,CAC3DyF,oBAAqBmG,GACrBjI,eAAgB6H,GAChB5H,kBAAmB6H,GACnB5H,iBAAkB6H,GAClB5H,gBAAiB6H,GACjBzB,QAAS,CACPf,SAAUtJ,EACVuL,SAAUtL,EACV6C,eAAe,EACfN,sBAAsB,KCYb2K,GAAuB7J,EAAAA,MAClC,EACEsC,sBACA/D,sBACAiC,iBACAC,oBACAC,mBACAC,kBACAoG,UACAjK,UAAOsM,YACPA,EACAnM,eAEA,MAAMuJ,SAAEA,IAAc4C,GAAeU,OAC5B,CAAApH,GAAUC,YACboH,EAAY5G,EAAMA,OAAqB,MAE7CP,EAAAA,YAAW,KACTmH,EAAU3O,QAAUK,EAAaK,OAAO,OACxC4G,IACO,KACDqH,EAAU3O,SACZ2O,EAAU3O,QAAQ4O,aAKxB,MAAMzM,EAAQJ,EAAAA,SACZ,KAAO,CACLoB,sBACA+D,oBAAqBA,GAAuBmG,GAC5CjI,eAAgBA,GAAkB6H,GAClC5H,kBAAmBA,GAAqB6H,GACxC5H,iBAAkBV,EAAAA,KAAKU,GAAoB6H,IAC3C5H,gBAAiBX,EAAAA,KAAKW,GAAmB6H,IACzCzB,QAAS,CACPf,SAAUtJ,EACVuL,SAAUtL,EACVuC,sBAAsB,EACtBM,eAAe,KACZuH,MAGP,CACEzE,EACA/D,EACAmC,EACAC,EACAF,EACAD,EACAuG,IAIJ,OACEnG,EAAAqJ,KAACL,GAAatM,SAAS,CAAAC,MAAOA,EAC3BN,SAAA,CAAAA,EACA8M,EAAU3O,SACT8O,eACE9M,EAAAA,IAACJ,EAA2B,CAAAF,QAASA,EACnCG,SAAAG,EAAAA,IAACmJ,EAAwB,CAACC,SAAUA,EAAQvJ,SAC1CG,EAAAA,IAACuK,EAAS,QAGdoC,EAAU3O,WAEQ,ICvHjBoD,GAAkB,IAAMf,EAAUA,WAACmM,IAEnC5C,GAAkB,KAC7B,MAAMD,QAAEA,GAAYtJ,EAAUA,WAACmM,IAC/B,OAAO7C,CAAO,yCCkBK,EACnB5B,UACAjF,QACAC,WACAC,UACA1C,aACA2C,SACAb,gBACAN,uBACAoD,sBACA/D,yBAEO,IAAI4L,SAAc,CAACjG,EAASkG,KACjC,IACE3O,EAAaG,KAAK,CAChBgE,KAAM,QACNuF,UACAjB,QAAS,IAAMA,IACfhE,QACAC,WACAC,UACA1C,aACA2C,SACAb,gBACAN,uBACAoD,sBACA/D,wBAEF,MAAO8L,GACPD,EAAOC,uBChCU,EACrBlF,UACAjF,QACAC,WACAC,UACA1C,aACA2C,SACAb,gBACAN,uBACAoD,sBACA/D,yBAEO,IAAI4L,SAAiB,CAACjG,EAASkG,KACpC,IACE3O,EAAaG,KAAK,CAChBgE,KAAM,UACNuF,UACAjB,QAAUW,GAAWX,EAAQW,IAAU,GACvC3E,QACAC,WACAC,UACA1C,aACA2C,SACAb,gBACAN,uBACAoD,sBACA/D,wBAEF,MAAO8L,GACPD,EAAOC,sBCxBS,EACpB3I,eACAxB,QACAC,WACAC,UACAqB,QACAE,WACA4D,iBACA7H,aACA2C,SACAb,gBACAN,uBACAoD,sBACA/D,yBAEO,IAAI4L,SAAW,CAACjG,EAASkG,KAC9B,IACE3O,EAAaG,KAAK,CAChBgE,KAAM,SACNsE,QAAUW,GAAWX,EAAQW,GAC7B3E,QACAC,WACAC,UACAqB,QACAC,eACAC,WACA4D,iBACA7H,aACA2C,SACAb,gBACAN,uBACAoD,sBACA/D,wBAEF,MAAO8L,GACPD,EAAOC,+BCrDkB,CAC7BhM,EACA2H,KAEA,MAAM1K,MAAEA,EAAKuD,UAAEA,GAAcC,EAAST,GAChCoE,EAAOD,EAAkBlH,GAEzBgP,EAAYnH,EAAAA,OAAO,CACvB7H,QACAuD,YACA0L,aAAczJ,EAAQA,SAACkF,GACnBJ,EAA4BI,GAC5BA,IAGN6B,EAAAA,WAAU,KACR,MAAMvM,MAAEA,EAAKuD,UAAEA,EAAS0L,aAAEA,GAAiBD,EAAUlP,QACrD,IAAKE,GAASA,EAAM6C,UAAY7C,EAAMmE,MAAO,OAC7C,MAAM+K,EAAQpI,YAAW,KACvBvD,GAAW,GACV0L,GACH,MAAO,KACDC,GAAOC,aAAaD,EAAM,CAC/B,GACA,CAAC/H,GAAM,2BJlBoB,KAC9B,MAAMwF,SAAEA,GAAajB,KACrB,OAAOiB,CAAQ,2BAPe,KAC9B,MAAMjC,SAAEA,GAAagB,KACrB,MAAO,CAAEhB,WAAUuE,aAAc3E,EAA4BI,GAAW"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as e,jsxs as n}from"react/jsx-runtime";import{createContext as t,useMemo as o,useContext as r,useCallback as i,memo as a,Fragment as l,useState as s,useRef as c,useLayoutEffect as d,useEffect as u,forwardRef as p}from"react";import{createPortal as m}from"react-dom";import{useHandle as f,renderComponent as b,withErrorBoundary as h,useTick as C,useOnMount as g,useReference as v,useOnMountLayout as y}from"@winglet/react-utils";import{getRandomString as k,EMPTY_OBJECT as O,isString as w,isFunction as x,undefinedFunction as
|
|
1
|
+
import{jsx as e,jsxs as n}from"react/jsx-runtime";import{createContext as t,useMemo as o,useContext as r,useCallback as i,memo as a,Fragment as l,useState as s,useRef as c,useLayoutEffect as d,useEffect as u,forwardRef as p}from"react";import{createPortal as m}from"react-dom";import{useHandle as f,renderComponent as b,withErrorBoundary as h,useTick as C,useOnMount as g,useReference as v,useOnMountLayout as y}from"@winglet/react-utils";import{getRandomString as k,EMPTY_OBJECT as O,isString as w,isFunction as x,counterFactory as D,undefinedFunction as B}from"@winglet/common-utils";import{css as j,cx as P}from"@emotion/css";const N={current:[]},E={current:e=>{N.current.push(e)}},F={current:null},I={get prerender(){return N.current},clearPrerender(){N.current=[]},open(e){E.current(e)},setupOpen(e){E.current=e},anchor(e,n="promise-modal"){if(F.current){const e=document.getElementById(F.current.id);if(e)return e}const t=document.createElement(e);return t.setAttribute("id",`${n}-${k(36)}`),document.body.appendChild(t),F.current=t,t}},S="300ms",V="rgba(0, 0, 0, 0.5)",T=t({context:O}),M=({context:n,children:t})=>{const r=o((()=>({context:n||O})),[n]);return e(T.Provider,{value:r,children:t})},_=()=>r(T);function $(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const z=j("production"===process.env.NODE_ENV?{name:"u7uu4v",styles:"display:none;position:fixed;inset:0;z-index:-999;pointer-events:none;>*{pointer-events:none;}"}:{name:"coymdj-background",styles:"display:none;position:fixed;inset:0;z-index:-999;pointer-events:none;>*{pointer-events:none;};label:background;",toString:$}),L=j("production"===process.env.NODE_ENV?{name:"n07k1x",styles:"pointer-events:all"}:{name:"1hektcs-active",styles:"pointer-events:all;label:active;",toString:$}),A=j("production"===process.env.NODE_ENV?{name:"1wnowod",styles:"display:flex;align-items:center;justify-content:center"}:{name:"xppew7-visible",styles:"display:flex;align-items:center;justify-content:center;label:visible;",toString:$}),W=({modalId:n,onChangeOrder:t})=>{const{BackgroundComponent:r}=Me(),{context:a}=_(),{modal:l,onClose:s,onChange:c,onConfirm:d,onDestroy:u}=Oe(n),p=i((e=>{l&&l.closeOnBackdropClick&&l.visible&&s(),e.stopPropagation()}),[l,s]),m=o((()=>l?.BackgroundComponent||r),[r,l]);return l?e("div",{className:P(z,{[A]:l.manualDestroy?l.alive:l.visible,[L]:l.closeOnBackdropClick&&l.visible}),onClick:p,children:m&&e(m,{id:l.id,type:l.type,alive:l.alive,visible:l.visible,initiator:l.initiator,manualDestroy:l.manualDestroy,closeOnBackdropClick:l.closeOnBackdropClick,background:l.background,onChange:c,onConfirm:d,onClose:s,onDestroy:u,onChangeOrder:t,context:a})}):null};function Y(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const U=j("production"===process.env.NODE_ENV?{name:"12g0hx0",styles:"pointer-events:none;display:none;position:fixed;inset:0;z-index:1"}:{name:"1hcczik-foreground",styles:"pointer-events:none;display:none;position:fixed;inset:0;z-index:1;label:foreground;",toString:Y}),q=j("production"===process.env.NODE_ENV?{name:"1g95xyq",styles:">*{pointer-events:all;}"}:{name:"123csva-active",styles:">*{pointer-events:all;};label:active;",toString:Y}),H=j("production"===process.env.NODE_ENV?{name:"1fmljv2",styles:"display:flex!important;justify-content:center;align-items:center"}:{name:"1p4unab-visible",styles:"display:flex!important;justify-content:center;align-items:center;label:visible;",toString:Y}),G=a((({modal:t,handlers:r})=>{const{title:i,subtitle:a,content:s,footer:c}=o((()=>t),[t]),{context:d}=_(),{onConfirm:u}=o((()=>r),[r]),p=f(u),{TitleComponent:m,SubtitleComponent:h,ContentComponent:C,FooterComponent:g}=Me();return n(l,{children:[i&&(w(i)?e(m,{context:d,children:i}):i),a&&(w(a)?e(h,{context:d,children:a}):a),s&&(w(s)?e(C,{context:d,children:s}):b(s,{onConfirm:p})),!1!==c&&("function"==typeof c?c({onConfirm:p,context:d}):e(g,{onConfirm:p,confirmLabel:c?.confirm,hideConfirm:c?.hideConfirm,context:d}))]})})),J=a((({modal:t,handlers:r})=>{const{title:i,subtitle:a,content:s,footer:c}=o((()=>t),[t]),{context:d}=_(),{onConfirm:u,onClose:p}=o((()=>r),[r]),m=f(u),h=f(p),{TitleComponent:C,SubtitleComponent:g,ContentComponent:v,FooterComponent:y}=Me();return n(l,{children:[i&&(w(i)?e(C,{context:d,children:i}):i),a&&(w(a)?e(g,{context:d,children:a}):a),s&&(w(s)?e(v,{context:d,children:s}):b(s,{onConfirm:m,onCancel:h,context:d})),!1!==c&&("function"==typeof c?c({onConfirm:m,onCancel:h,context:d}):e(y,{onConfirm:m,onCancel:h,confirmLabel:c?.confirm,cancelLabel:c?.cancel,hideConfirm:c?.hideConfirm,hideCancel:c?.hideCancel,context:d}))]})})),K=a((({modal:t,handlers:r})=>{const{Input:c,defaultValue:d,disabled:u,title:p,subtitle:m,content:C,footer:g}=o((()=>({...t,Input:a(h(t.Input))})),[t]),{context:v}=_(),[y,k]=s(d),{onChange:O,onClose:D,onConfirm:B}=o((()=>r),[r]),j=f(D),P=f((e=>{const n=x(e)?e(y):e;k(n),O(n)})),N=i((()=>{setTimeout((()=>{B()}))}),[B]),E=o((()=>!!y&&!!u?.(y)),[u,y]),{TitleComponent:F,SubtitleComponent:I,ContentComponent:S,FooterComponent:V}=Me();return n(l,{children:[p&&(w(p)?e(F,{context:v,children:p}):p),m&&(w(m)?e(I,{context:v,children:m}):m),C&&(w(C)?e(S,{context:v,children:C}):b(C,{onConfirm:N,onCancel:j,context:v})),c&&e(c,{defaultValue:d,value:y,onChange:P,onConfirm:N,onCancel:j,context:v}),!1!==g&&("function"==typeof g?g({value:y,disabled:E,onChange:P,onConfirm:N,onCancel:j,context:v}):e(V,{disabled:E,onConfirm:N,onCancel:j,confirmLabel:g?.confirm,cancelLabel:g?.cancel,hideConfirm:g?.hideConfirm,hideCancel:g?.hideCancel,context:v}))]})})),Q=({modalId:t,onChangeOrder:r})=>{const{ForegroundComponent:i}=Me(),{context:a}=_(),{modal:l,onChange:s,onConfirm:c,onClose:d,onDestroy:u}=Oe(t),p=o((()=>l?.ForegroundComponent||i),[i,l]);return l?e("div",{className:P(U,{[H]:l.manualDestroy?l.alive:l.visible,[q]:l.visible}),children:n(p,{id:l.id,type:l.type,alive:l.alive,visible:l.visible,initiator:l.initiator,manualDestroy:l.manualDestroy,closeOnBackdropClick:l.closeOnBackdropClick,background:l.background,onChange:s,onConfirm:c,onClose:d,onDestroy:u,onChangeOrder:r,context:a,children:["alert"===l.type&&e(G,{modal:l,handlers:{onConfirm:c}}),"confirm"===l.type&&e(J,{modal:l,handlers:{onConfirm:c,onClose:d}}),"prompt"===l.type&&e(K,{modal:l,handlers:{onChange:s,onConfirm:c,onClose:d}})]})}):null},R=e=>{const[n,t]=C();return g((()=>{if(e)return e.subscribe(t)})),n},X=j("production"===process.env.NODE_ENV?{name:"13dmkf4",styles:"position:fixed;inset:0;pointer-events:none;overflow:hidden"}:{name:"yjeu12-presenter",styles:"position:fixed;inset:0;pointer-events:none;overflow:hidden;label:presenter;",toString:function(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}}),{increment:Z}=D(1),ee=a((({modalId:t})=>{const o=c(null),{modal:r}=Oe(t);R(r);const i=f((()=>{o.current&&(o.current.style.zIndex=`${Z()}`)}));return n("div",{ref:o,className:X,children:[e(W,{modalId:t,onChangeOrder:i}),e(Q,{modalId:t,onChangeOrder:i})]})})),ne=(e=0)=>{const{modalIds:n,getModalNode:t}=ke();return o((()=>{let e=0;for(const o of n)t(o)?.visible&&e++;return e}),[t,n,e])},te=({subtype:e,title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:a,closeOnBackdropClick:l,ForegroundComponent:s,BackgroundComponent:c})=>new Promise(((d,u)=>{try{I.open({type:"alert",subtype:e,resolve:()=>d(),title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:a,closeOnBackdropClick:l,ForegroundComponent:s,BackgroundComponent:c})}catch(e){u(e)}})),oe=({subtype:e,title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:a,closeOnBackdropClick:l,ForegroundComponent:s,BackgroundComponent:c})=>new Promise(((d,u)=>{try{I.open({type:"confirm",subtype:e,resolve:e=>d(e??!1),title:n,subtitle:t,content:o,background:r,footer:i,manualDestroy:a,closeOnBackdropClick:l,ForegroundComponent:s,BackgroundComponent:c})}catch(e){u(e)}})),re=({defaultValue:e,title:n,subtitle:t,content:o,Input:r,disabled:i,returnOnCancel:a,background:l,footer:s,manualDestroy:c,closeOnBackdropClick:d,ForegroundComponent:u,BackgroundComponent:p})=>new Promise(((m,f)=>{try{I.open({type:"prompt",resolve:e=>m(e),title:n,subtitle:t,content:o,Input:r,defaultValue:e,disabled:i,returnOnCancel:a,background:l,footer:s,manualDestroy:c,closeOnBackdropClick:d,ForegroundComponent:u,BackgroundComponent:p})}catch(e){f(e)}}));
|
|
2
2
|
/******************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -14,5 +14,5 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
15
|
***************************************************************************** */
|
|
16
16
|
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
|
|
17
|
-
function re(e,n,t,o){if("a"===t&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?e!==n||!o:!n.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?o:"a"===t?o.call(e):o?o.value:n.get(e)}function ie(e,n,t,o,r){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?e!==n||!r:!n.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?r.call(e,t):r?r.value=t:n.set(e,t),t}var ae,le,se,ce,de;"function"==typeof SuppressedError&&SuppressedError;class ue{get alive(){return re(this,ae,"f")}get visible(){return re(this,le,"f")}constructor({id:e,initiator:n,title:t,subtitle:o,background:r,manualDestroy:i=!1,closeOnBackdropClick:a=!0,resolve:l,ForegroundComponent:s,BackgroundComponent:c}){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"initiator",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"title",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtitle",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"background",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"manualDestroy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"closeOnBackdropClick",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"ForegroundComponent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"BackgroundComponent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ae.set(this,void 0),le.set(this,void 0),se.set(this,void 0),ce.set(this,[]),this.id=e,this.initiator=n,this.title=t,this.subtitle=o,this.background=r,this.manualDestroy=i,this.closeOnBackdropClick=a,this.ForegroundComponent=s,this.BackgroundComponent=c,ie(this,ae,!0,"f"),ie(this,le,!0,"f"),ie(this,se,l,"f")}subscribe(e){return re(this,ce,"f").push(e),()=>{ie(this,ce,re(this,ce,"f").filter((n=>n!==e)),"f")}}publish(){for(const e of re(this,ce,"f"))e()}resolve(e){re(this,se,"f").call(this,e)}onDestroy(){const e=!0===re(this,ae,"f");ie(this,ae,!1,"f"),this.manualDestroy&&e&&this.publish()}onShow(){const e=!1===re(this,le,"f");ie(this,le,!0,"f"),e&&this.publish()}onHide(){const e=!0===re(this,le,"f");ie(this,le,!1,"f"),e&&this.publish()}}ae=new WeakMap,le=new WeakMap,se=new WeakMap,ce=new WeakMap;class pe extends ue{constructor({id:e,initiator:n,type:t,subtype:o,title:r,subtitle:i,content:a,footer:l,background:s,manualDestroy:c,closeOnBackdropClick:d,resolve:u,ForegroundComponent:p,BackgroundComponent:m}){super({id:e,initiator:n,title:r,subtitle:i,background:s,manualDestroy:c,closeOnBackdropClick:d,resolve:u,ForegroundComponent:p,BackgroundComponent:m}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtype",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.type=t,this.subtype=o,this.content=a,this.footer=l}onClose(){this.resolve(null)}onConfirm(){this.resolve(null)}}class me extends ue{constructor({id:e,initiator:n,type:t,subtype:o,title:r,subtitle:i,content:a,footer:l,background:s,manualDestroy:c,closeOnBackdropClick:d,resolve:u,ForegroundComponent:p,BackgroundComponent:m}){super({id:e,initiator:n,title:r,subtitle:i,background:s,manualDestroy:c,closeOnBackdropClick:d,resolve:u,ForegroundComponent:p,BackgroundComponent:m}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtype",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.type=t,this.subtype=o,this.content=a,this.footer=l}onClose(){this.resolve(!1)}onConfirm(){this.resolve(!0)}}class fe extends ue{constructor({id:e,initiator:n,type:t,title:o,subtitle:r,content:i,defaultValue:a,Input:l,disabled:s,returnOnCancel:c,footer:d,background:u,manualDestroy:p,closeOnBackdropClick:m,resolve:f,ForegroundComponent:b,BackgroundComponent:h}){super({id:e,initiator:n,title:o,subtitle:r,background:u,manualDestroy:p,closeOnBackdropClick:m,resolve:f,ForegroundComponent:b,BackgroundComponent:h}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"defaultValue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"Input",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"returnOnCancel",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),de.set(this,void 0),this.type=t,this.content=i,this.Input=l,this.defaultValue=a,ie(this,de,a,"f"),this.disabled=s,this.returnOnCancel=c,this.footer=d}onChange(e){ie(this,de,e,"f")}onConfirm(){this.resolve(re(this,de,"f")??null)}onClose(){this.returnOnCancel?this.resolve(re(this,de,"f")??null):this.resolve(null)}}de=new WeakMap;const be=e=>{switch(e.type){case"alert":return new pe(e);case"confirm":return new me(e);case"prompt":return new fe(e)}throw new Error(`Unknown modal: ${e.type}`,{modal:e})},he=/^\s*(\d+)\s*(ms|s|m|h)\s*$/,Ce=e=>{const[,n,t]=e.match(he)||[];if(!n||!t)return 0;const o=parseInt(n);return"ms"===t?o:"s"===t?1e3*o:"m"===t?60*o*1e3:"h"===t?60*o*60*1e3:0},ge=t({modalIds:[],getModalNode:D,onChange:D,onConfirm:D,onClose:D,onDestroy:D,setUpdater:D,getModal:()=>({modal:void 0,onConfirm:D,onClose:D,onChange:D,onDestroy:D})}),ve=a((({pathname:n,children:t})=>{const r=c(new Map),[a,l]=s([]),u=v(a),p=c(n),m=c(0),f=Me(),b=o((()=>Ce(f.duration)),[f]);y((()=>{const{manualDestroy:e,closeOnBackdropClick:n}=f;for(const t of F.prerender){const o=be({...t,id:m.current++,initiator:p.current,manualDestroy:void 0!==t.manualDestroy?t.manualDestroy:e,closeOnBackdropClick:void 0!==t.closeOnBackdropClick?t.closeOnBackdropClick:n});r.current.set(o.id,o),l((e=>[...e,o.id]))}F.setupOpen((t=>{const o=be({...t,id:m.current++,initiator:p.current,manualDestroy:void 0!==t.manualDestroy?t.manualDestroy:e,closeOnBackdropClick:void 0!==t.closeOnBackdropClick?t.closeOnBackdropClick:n});r.current.set(o.id,o),l((e=>[...e.filter((e=>{const n=!r.current.get(e)?.alive;return n&&r.current.delete(e),!n})),o.id]))})),F.clearPrerender()})),d((()=>{for(const e of u.current){const t=r.current.get(e);t?.alive&&(t.initiator===n?t.onShow():t.onHide())}p.current=n}),[u,n]);const h=i((e=>r.current.get(e)),[]),C=i((e=>{const n=r.current.get(e);n&&(n.onDestroy(),g.current?.())}),[]),g=c(),k=i((e=>{const n=r.current.get(e);n&&(n.onHide(),g.current?.(),n.manualDestroy||setTimeout((()=>{n.onDestroy()}),b))}),[b]),O=i(((e,n)=>{const t=r.current.get(e);t&&"prompt"===t.type&&t.onChange(n)}),[]),w=i((e=>{const n=r.current.get(e);n&&(n.onConfirm(),k(e))}),[k]),x=i((e=>{const n=r.current.get(e);n&&(n.onClose(),k(e))}),[k]),D=i((e=>({modal:h(e),onConfirm:()=>w(e),onClose:()=>x(e),onChange:n=>O(e,n),onDestroy:()=>C(e)})),[h,w,x,O,C]),B=o((()=>({modalIds:a,getModalNode:h,onChange:O,onConfirm:w,onClose:x,onDestroy:C,getModal:D,setUpdater:e=>{g.current=e}})),[a,D,h,O,w,x,C]);return e(ge.Provider,{value:B,children:t})})),ye=()=>r(ge),ke=e=>{const{getModal:n}=ye();return o((()=>n(e)),[e,n])},Oe=B("production"===process.env.NODE_ENV?{name:"2hpasy",styles:"display:flex;align-items:center;justify-content:center;position:fixed;inset:0;pointer-events:none;z-index:1000;transition:background-color ease-in-out"}:{name:"lhj8co-anchor",styles:"display:flex;align-items:center;justify-content:center;position:fixed;inset:0;pointer-events:none;z-index:1000;transition:background-color ease-in-out;label:anchor;",toString:function(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}}),we=a(h((()=>{const[n,t]=C(),{modalIds:o,setUpdater:r}=ye();u((()=>{r(t)}),[r,t]);const{options:i}=Te(),a=ee(n);return e("div",{className:Oe,style:{transitionDuration:i.duration,backgroundColor:a?i.backdrop:"transparent"},children:o.map((n=>e(Z,{modalId:n},n)))})})));function xe(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const De=B("production"===process.env.NODE_ENV?{name:"131j9g2",styles:"margin:unset"}:{name:"1w3kbco-fallback",styles:"margin:unset;label:fallback;",toString:xe}),Be=B("production"===process.env.NODE_ENV?{name:"1kuk3a3",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:white;padding:20px 80px;gap:10px;border:1px solid black"}:{name:"16dbbea-frame",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:white;padding:20px 80px;gap:10px;border:1px solid black;label:frame;",toString:xe}),je=({children:n})=>e("h2",{className:De,children:n}),Pe=({children:n})=>e("h3",{className:De,children:n}),Ne=({children:n})=>e("div",{className:De,children:n}),Ee=({confirmLabel:t,hideConfirm:o=!1,cancelLabel:r,hideCancel:i=!1,disabled:a,onConfirm:l,onCancel:s})=>n("div",{children:[!o&&e("button",{onClick:l,disabled:a,children:t||"확인"}),!i&&"function"==typeof s&&e("button",{onClick:s,children:r||"취소"})]}),Fe=p((({id:n,onChangeOrder:t,children:r},i)=>{const a=ee(),[l,s]=o((()=>{const e=a>1;return[e?Math.floor(n/5)%3*100:0,e?n%5*35:0]}),[a,n]);return e("div",{ref:i,className:Be,onClick:t,style:{marginBottom:`calc(25vh + ${l}px)`,marginLeft:`${l}px`,transform:`translate(${s}px, ${s}px)`},children:r})})),Ie=()=>{const[e,n]=s(window.location.pathname);return d((()=>{let t;const o=()=>{t&&cancelAnimationFrame(t),e!==window.location.pathname?n(window.location.pathname):t=requestAnimationFrame(o)};return t=requestAnimationFrame(o),()=>{t&&cancelAnimationFrame(t)}}),[e]),{pathname:e}},Se=t({ForegroundComponent:Fe,TitleComponent:je,SubtitleComponent:Pe,ContentComponent:Ne,FooterComponent:Ee,options:{duration:I,backdrop:S,manualDestroy:!1,closeOnBackdropClick:!0}}),Ve=a((({ForegroundComponent:t,BackgroundComponent:r,TitleComponent:i,SubtitleComponent:l,ContentComponent:s,FooterComponent:d,options:u,context:p,usePathname:f,children:b})=>{const{pathname:h}=(f||Ie)(),[,v]=C(),y=c(null);g((()=>(y.current=F.anchor("div"),v(),()=>{y.current&&y.current.remove()})));const k=o((()=>({BackgroundComponent:r,ForegroundComponent:t||Fe,TitleComponent:i||je,SubtitleComponent:l||Pe,ContentComponent:a(s||Ne),FooterComponent:a(d||Ee),options:{duration:I,backdrop:S,closeOnBackdropClick:!0,manualDestroy:!1,...u}})),[t,r,s,d,l,i,u]);return n(Se.Provider,{value:k,children:[b,y.current&&m(e(T,{context:p,children:e(ve,{pathname:h,children:e(we,{})})}),y.current)]})})),Te=()=>r(Se),Me=()=>{const{options:e}=r(Se);return e},_e=()=>{const{duration:e}=Me();return{duration:e,milliseconds:Ce(e)}},ze=()=>{const{backdrop:e}=Me();return e},Le=(e,n)=>{const{modal:t,onDestroy:o}=ke(e),r=Q(t),i=c({modal:t,onDestroy:o,milliseconds:w(n)?Ce(n):n});u((()=>{const{modal:e,onDestroy:n,milliseconds:t}=i.current;if(!e||e.visible||!e.alive)return;const o=setTimeout((()=>{n()}),t);return()=>{o&&clearTimeout(o)}}),[r])};export{Ve as ModalProvider,ne as alert,te as confirm,oe as prompt,Le as useDestroyAfter,ze as useModalBackdrop,_e as useModalDuration,Me as useModalOptions,Q as useSubscribeModal};
|
|
17
|
+
function ie(e,n,t,o){if("a"===t&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?e!==n||!o:!n.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?o:"a"===t?o.call(e):o?o.value:n.get(e)}function ae(e,n,t,o,r){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?e!==n||!r:!n.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?r.call(e,t):r?r.value=t:n.set(e,t),t}var le,se,ce,de,ue;"function"==typeof SuppressedError&&SuppressedError;class pe{get alive(){return ie(this,le,"f")}get visible(){return ie(this,se,"f")}constructor({id:e,initiator:n,title:t,subtitle:o,background:r,manualDestroy:i=!1,closeOnBackdropClick:a=!0,resolve:l,ForegroundComponent:s,BackgroundComponent:c}){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"initiator",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"title",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtitle",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"background",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"manualDestroy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"closeOnBackdropClick",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"ForegroundComponent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"BackgroundComponent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),le.set(this,void 0),se.set(this,void 0),ce.set(this,void 0),de.set(this,[]),this.id=e,this.initiator=n,this.title=t,this.subtitle=o,this.background=r,this.manualDestroy=i,this.closeOnBackdropClick=a,this.ForegroundComponent=s,this.BackgroundComponent=c,ae(this,le,!0,"f"),ae(this,se,!0,"f"),ae(this,ce,l,"f")}subscribe(e){return ie(this,de,"f").push(e),()=>{ae(this,de,ie(this,de,"f").filter((n=>n!==e)),"f")}}publish(){for(const e of ie(this,de,"f"))e()}resolve(e){ie(this,ce,"f").call(this,e)}onDestroy(){const e=!0===ie(this,le,"f");ae(this,le,!1,"f"),this.manualDestroy&&e&&this.publish()}onShow(){const e=!1===ie(this,se,"f");ae(this,se,!0,"f"),e&&this.publish()}onHide(){const e=!0===ie(this,se,"f");ae(this,se,!1,"f"),e&&this.publish()}}le=new WeakMap,se=new WeakMap,ce=new WeakMap,de=new WeakMap;class me extends pe{constructor({id:e,initiator:n,type:t,subtype:o,title:r,subtitle:i,content:a,footer:l,background:s,manualDestroy:c,closeOnBackdropClick:d,resolve:u,ForegroundComponent:p,BackgroundComponent:m}){super({id:e,initiator:n,title:r,subtitle:i,background:s,manualDestroy:c,closeOnBackdropClick:d,resolve:u,ForegroundComponent:p,BackgroundComponent:m}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtype",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.type=t,this.subtype=o,this.content=a,this.footer=l}onClose(){this.resolve(null)}onConfirm(){this.resolve(null)}}class fe extends pe{constructor({id:e,initiator:n,type:t,subtype:o,title:r,subtitle:i,content:a,footer:l,background:s,manualDestroy:c,closeOnBackdropClick:d,resolve:u,ForegroundComponent:p,BackgroundComponent:m}){super({id:e,initiator:n,title:r,subtitle:i,background:s,manualDestroy:c,closeOnBackdropClick:d,resolve:u,ForegroundComponent:p,BackgroundComponent:m}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"subtype",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.type=t,this.subtype=o,this.content=a,this.footer=l}onClose(){this.resolve(!1)}onConfirm(){this.resolve(!0)}}class be extends pe{constructor({id:e,initiator:n,type:t,title:o,subtitle:r,content:i,defaultValue:a,Input:l,disabled:s,returnOnCancel:c,footer:d,background:u,manualDestroy:p,closeOnBackdropClick:m,resolve:f,ForegroundComponent:b,BackgroundComponent:h}){super({id:e,initiator:n,title:o,subtitle:r,background:u,manualDestroy:p,closeOnBackdropClick:m,resolve:f,ForegroundComponent:b,BackgroundComponent:h}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"defaultValue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"Input",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"returnOnCancel",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ue.set(this,void 0),this.type=t,this.content=i,this.Input=l,this.defaultValue=a,ae(this,ue,a,"f"),this.disabled=s,this.returnOnCancel=c,this.footer=d}onChange(e){ae(this,ue,e,"f")}onConfirm(){this.resolve(ie(this,ue,"f")??null)}onClose(){this.returnOnCancel?this.resolve(ie(this,ue,"f")??null):this.resolve(null)}}ue=new WeakMap;const he=e=>{switch(e.type){case"alert":return new me(e);case"confirm":return new fe(e);case"prompt":return new be(e)}throw new Error(`Unknown modal: ${e.type}`,{modal:e})},Ce=/^\s*(\d+)\s*(ms|s|m|h)\s*$/,ge=e=>{const[,n,t]=e.match(Ce)||[];if(!n||!t)return 0;const o=parseInt(n);return"ms"===t?o:"s"===t?1e3*o:"m"===t?60*o*1e3:"h"===t?60*o*60*1e3:0},ve=t({modalIds:[],getModalNode:B,onChange:B,onConfirm:B,onClose:B,onDestroy:B,setUpdater:B,getModal:()=>({modal:void 0,onConfirm:B,onClose:B,onChange:B,onDestroy:B})}),ye=a((({pathname:n,children:t})=>{const r=c(new Map),[a,l]=s([]),u=v(a),p=c(n),m=c(0),f=_e(),b=o((()=>ge(f.duration)),[f]);y((()=>{const{manualDestroy:e,closeOnBackdropClick:n}=f;for(const t of I.prerender){const o=he({...t,id:m.current++,initiator:p.current,manualDestroy:void 0!==t.manualDestroy?t.manualDestroy:e,closeOnBackdropClick:void 0!==t.closeOnBackdropClick?t.closeOnBackdropClick:n});r.current.set(o.id,o),l((e=>[...e,o.id]))}I.setupOpen((t=>{const o=he({...t,id:m.current++,initiator:p.current,manualDestroy:void 0!==t.manualDestroy?t.manualDestroy:e,closeOnBackdropClick:void 0!==t.closeOnBackdropClick?t.closeOnBackdropClick:n});r.current.set(o.id,o),l((e=>[...e.filter((e=>{const n=!r.current.get(e)?.alive;return n&&r.current.delete(e),!n})),o.id]))})),I.clearPrerender()})),d((()=>{for(const e of u.current){const t=r.current.get(e);t?.alive&&(t.initiator===n?t.onShow():t.onHide())}p.current=n}),[u,n]);const h=i((e=>r.current.get(e)),[]),C=i((e=>{const n=r.current.get(e);n&&(n.onDestroy(),g.current?.())}),[]),g=c(),k=i((e=>{const n=r.current.get(e);n&&(n.onHide(),g.current?.(),n.manualDestroy||setTimeout((()=>{n.onDestroy()}),b))}),[b]),O=i(((e,n)=>{const t=r.current.get(e);t&&"prompt"===t.type&&t.onChange(n)}),[]),w=i((e=>{const n=r.current.get(e);n&&(n.onConfirm(),k(e))}),[k]),x=i((e=>{const n=r.current.get(e);n&&(n.onClose(),k(e))}),[k]),D=i((e=>({modal:h(e),onConfirm:()=>w(e),onClose:()=>x(e),onChange:n=>O(e,n),onDestroy:()=>C(e)})),[h,w,x,O,C]),B=o((()=>({modalIds:a,getModalNode:h,onChange:O,onConfirm:w,onClose:x,onDestroy:C,getModal:D,setUpdater:e=>{g.current=e}})),[a,D,h,O,w,x,C]);return e(ve.Provider,{value:B,children:t})})),ke=()=>r(ve),Oe=e=>{const{getModal:n}=ke();return o((()=>n(e)),[e,n])},we=j("production"===process.env.NODE_ENV?{name:"2hpasy",styles:"display:flex;align-items:center;justify-content:center;position:fixed;inset:0;pointer-events:none;z-index:1000;transition:background-color ease-in-out"}:{name:"lhj8co-anchor",styles:"display:flex;align-items:center;justify-content:center;position:fixed;inset:0;pointer-events:none;z-index:1000;transition:background-color ease-in-out;label:anchor;",toString:function(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}}),xe=a(h((()=>{const[n,t]=C(),{modalIds:o,setUpdater:r}=ke();u((()=>{r(t)}),[r,t]);const{options:i}=Me(),a=ne(n);return e("div",{className:we,style:{transitionDuration:i.duration,backgroundColor:a?i.backdrop:"transparent"},children:o.map((n=>e(ee,{modalId:n},n)))})})));function De(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const Be=j("production"===process.env.NODE_ENV?{name:"131j9g2",styles:"margin:unset"}:{name:"1w3kbco-fallback",styles:"margin:unset;label:fallback;",toString:De}),je=j("production"===process.env.NODE_ENV?{name:"1kuk3a3",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:white;padding:20px 80px;gap:10px;border:1px solid black"}:{name:"16dbbea-frame",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:white;padding:20px 80px;gap:10px;border:1px solid black;label:frame;",toString:De}),Pe=({children:n})=>e("h2",{className:Be,children:n}),Ne=({children:n})=>e("h3",{className:Be,children:n}),Ee=({children:n})=>e("div",{className:Be,children:n}),Fe=({confirmLabel:t,hideConfirm:o=!1,cancelLabel:r,hideCancel:i=!1,disabled:a,onConfirm:l,onCancel:s})=>n("div",{children:[!o&&e("button",{onClick:l,disabled:a,children:t||"확인"}),!i&&"function"==typeof s&&e("button",{onClick:s,children:r||"취소"})]}),Ie=p((({id:n,onChangeOrder:t,children:r},i)=>{const a=ne(),[l,s]=o((()=>{const e=a>1;return[e?Math.floor(n/5)%3*100:0,e?n%5*35:0]}),[a,n]);return e("div",{ref:i,className:je,onClick:t,style:{marginBottom:`calc(25vh + ${l}px)`,marginLeft:`${l}px`,transform:`translate(${s}px, ${s}px)`},children:r})})),Se=()=>{const[e,n]=s(window.location.pathname);return d((()=>{let t;const o=()=>{t&&cancelAnimationFrame(t),e!==window.location.pathname?n(window.location.pathname):t=requestAnimationFrame(o)};return t=requestAnimationFrame(o),()=>{t&&cancelAnimationFrame(t)}}),[e]),{pathname:e}},Ve=t({ForegroundComponent:Ie,TitleComponent:Pe,SubtitleComponent:Ne,ContentComponent:Ee,FooterComponent:Fe,options:{duration:S,backdrop:V,manualDestroy:!1,closeOnBackdropClick:!0}}),Te=a((({ForegroundComponent:t,BackgroundComponent:r,TitleComponent:i,SubtitleComponent:l,ContentComponent:s,FooterComponent:d,options:u,context:p,usePathname:f,children:b})=>{const{pathname:h}=(f||Se)(),[,v]=C(),y=c(null);g((()=>(y.current=I.anchor("div"),v(),()=>{y.current&&y.current.remove()})));const k=o((()=>({BackgroundComponent:r,ForegroundComponent:t||Ie,TitleComponent:i||Pe,SubtitleComponent:l||Ne,ContentComponent:a(s||Ee),FooterComponent:a(d||Fe),options:{duration:S,backdrop:V,closeOnBackdropClick:!0,manualDestroy:!1,...u}})),[t,r,s,d,l,i,u]);return n(Ve.Provider,{value:k,children:[b,y.current&&m(e(M,{context:p,children:e(ye,{pathname:h,children:e(xe,{})})}),y.current)]})})),Me=()=>r(Ve),_e=()=>{const{options:e}=r(Ve);return e},$e=()=>{const{duration:e}=_e();return{duration:e,milliseconds:ge(e)}},ze=()=>{const{backdrop:e}=_e();return e},Le=(e,n)=>{const{modal:t,onDestroy:o}=Oe(e),r=R(t),i=c({modal:t,onDestroy:o,milliseconds:w(n)?ge(n):n});u((()=>{const{modal:e,onDestroy:n,milliseconds:t}=i.current;if(!e||e.visible||!e.alive)return;const o=setTimeout((()=>{n()}),t);return()=>{o&&clearTimeout(o)}}),[r])};export{Te as ModalProvider,te as alert,oe as confirm,re as prompt,Le as useDestroyAfter,ze as useModalBackdrop,$e as useModalDuration,_e as useModalOptions,R as useSubscribeModal};
|
|
18
18
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/app/ModalManager.ts","../src/app/constant.ts","../src/providers/UserDefinedContext/UserDefinedContext.ts","../src/providers/UserDefinedContext/UserDefinedContextProvider.tsx","../src/providers/UserDefinedContext/useUserDefinedContext.ts","../src/components/Background/classNames.emotion.ts","../src/components/Background/Background.tsx","../src/components/Foreground/classNames.emotion.ts","../src/components/Foreground/components/AlertInner.tsx","../src/components/Foreground/components/ConfirmInner.tsx","../src/components/Foreground/components/PromptInner.tsx","../src/components/Foreground/Foreground.tsx","../src/hooks/useSubscribeModal.ts","../src/components/Presenter/classNames.emotion.ts","../src/components/Presenter/Presenter.tsx","../src/hooks/useActiveModalCount.ts","../src/core/handle/alert.ts","../src/core/handle/confirm.ts","../src/core/handle/prompt.ts","../src/core/node/ModalNode/AbstractBaseNode.ts","../src/core/node/ModalNode/AlertNode.ts","../src/core/node/ModalNode/ConfirmNode.ts","../src/core/node/ModalNode/PromptNode.ts","../src/core/node/nodeFactory.ts","../src/helpers/getMillisecondsFromDuration.ts","../src/providers/ModalDataContext/ModalDataContext.ts","../src/providers/ModalDataContext/ModalDataContextProvider.tsx","../src/providers/ModalDataContext/useModalDataContext.ts","../src/components/Anchor/classNames.emotion.ts","../src/components/Anchor/Anchor.tsx","../src/components/FallbackComponents/classNames.emotion.ts","../src/components/FallbackComponents/FallbackTitle.tsx","../src/components/FallbackComponents/FallbackSubtitle.tsx","../src/components/FallbackComponents/FallbackContent.tsx","../src/components/FallbackComponents/FallbackFooter.tsx","../src/components/FallbackComponents/FallbackForegroundFrame.tsx","../src/hooks/useDefaultPathname.ts","../src/providers/ModalContext/ModalContext.ts","../src/providers/ModalContext/ModalContextProvider.tsx","../src/providers/ModalContext/useModalContext.ts","../src/hooks/useDestroyAfter.ts"],"sourcesContent":["import { MutableRefObject } from 'react';\n\nimport { getRandomString } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { Modal } from '@/promise-modal/types';\n\nconst prerenderListRef: MutableRefObject<Modal[]> = {\n current: [],\n};\n\nconst openModalRef: MutableRefObject<Fn<[Modal], void>> = {\n current: (modal: Modal) => {\n prerenderListRef.current.push(modal);\n },\n};\n\nconst anchorRef: MutableRefObject<HTMLElement | null> = {\n current: null,\n};\n\nexport const ModalManager = {\n get prerender() {\n return prerenderListRef.current;\n },\n clearPrerender() {\n prerenderListRef.current = [];\n },\n open(modal: Modal) {\n openModalRef.current(modal);\n },\n setupOpen(open: (modal: Modal) => void) {\n openModalRef.current = open;\n },\n anchor(name: string, prefix = 'promise-modal'): HTMLElement {\n if (anchorRef.current) {\n const anchor = document.getElementById(anchorRef.current.id);\n if (anchor) return anchor;\n }\n const node = document.createElement(name);\n node.setAttribute('id', `${prefix}-${getRandomString(36)}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","import type { Color, Duration } from '@aileron/types';\n\nexport const DEFAULT_ANIMATION_DURATION: Duration = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR: Color = 'rgba(0, 0, 0, 0.5)';\n","import { createContext } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nexport interface UserDefinedContext {\n context: Dictionary;\n}\n\nexport const UserDefinedContext = createContext<UserDefinedContext>({\n context: EMPTY_OBJECT,\n});\n","import { PropsWithChildren, useMemo } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\ninterface UserDefinedContextProviderProps {\n /** 사용자 정의 컨텍스트 */\n context?: Dictionary;\n}\n\nexport const UserDefinedContextProvider = ({\n context,\n children,\n}: PropsWithChildren<UserDefinedContextProviderProps>) => {\n const contextValue = useMemo(\n () => ({ context: context || EMPTY_OBJECT }),\n [context],\n );\n return (\n <UserDefinedContext.Provider value={contextValue}>\n {children}\n </UserDefinedContext.Provider>\n );\n};\n","import { useContext } from 'react';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\nexport const useUserDefinedContext = () => {\n return useContext(UserDefinedContext);\n};\n","import { css } from '@emotion/css';\n\nexport const background = css`\n display: none;\n position: fixed;\n inset: 0;\n z-index: -999;\n pointer-events: none;\n > * {\n pointer-events: none;\n }\n`;\n\nexport const active = css`\n pointer-events: all;\n`;\n\nexport const visible = css`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n","import { type MouseEvent, useCallback, useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, background, visible } from './classNames.emotion';\n\nexport const BackgroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n const { modal, onClose, onChange, onConfirm, onDestroy } = useModal(modalId);\n\n const handleClose = useCallback(\n (event: MouseEvent) => {\n if (modal && modal.closeOnBackdropClick && modal.visible) onClose();\n event.stopPropagation();\n },\n [modal, onClose],\n );\n\n const Background = useMemo(\n () => modal?.BackgroundComponent || BackgroundComponent,\n [BackgroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(background, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.closeOnBackdropClick && modal.visible,\n })}\n onClick={handleClose}\n >\n {Background && (\n <Background\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n />\n )}\n </div>\n );\n};\n","import { css } from '@emotion/css';\n\nexport const foreground = css`\n pointer-events: none;\n display: none;\n position: fixed;\n inset: 0;\n z-index: 1;\n`;\n\nexport const active = css`\n > * {\n pointer-events: all;\n }\n`;\n\nexport const visible = css`\n display: flex !important;\n justify-content: center;\n align-items: center;\n`;\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { ConfirmNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface ConfirmInnerProps<B> {\n modal: ConfirmNode<B>;\n handlers: Pick<ModalActions, 'onConfirm' | 'onClose'>;\n}\n\nexport const ConfirmInner = memo(\n <B,>({ modal, handlers }: ConfirmInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm, onClose } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n const handleClose = useHandle(onClose);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport {\n renderComponent,\n useHandle,\n withErrorBoundary,\n} from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(withErrorBoundary(modal.Input)),\n }),\n [modal],\n );\n\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const [value, setValue] = useState<T | undefined>(defaultValue);\n\n const { onChange, onClose, onConfirm } = useMemo(\n () => handlers,\n [handlers],\n );\n\n const handleClose = useHandle(onClose);\n const handleChange = useHandle(\n (inputValue?: T | ((prevState: T | undefined) => T | undefined)) => {\n const input = isFunction(inputValue) ? inputValue(value) : inputValue;\n setValue(input);\n onChange(input);\n },\n );\n\n const handleConfirm = useCallback(() => {\n // NOTE: wait for the next tick to ensure the value is updated\n setTimeout(() => {\n onConfirm();\n });\n }, [onConfirm]);\n\n const disabled = useMemo(\n () => (value ? !!checkDisabled?.(value) : false),\n [checkDisabled, value],\n );\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n context={userDefinedContext}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n value,\n disabled,\n onChange: handleChange,\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n disabled={disabled}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, foreground, visible } from './classNames.emotion';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const ForegroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n const Foreground = useMemo(\n () => modal?.ForegroundComponent || ForegroundComponent,\n [ForegroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(foreground, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.visible,\n })}\n >\n <Foreground\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n >\n {modal.type === 'alert' && (\n <AlertInner modal={modal} handlers={{ onConfirm }} />\n )}\n {modal.type === 'confirm' && (\n <ConfirmInner modal={modal} handlers={{ onConfirm, onClose }} />\n )}\n {modal.type === 'prompt' && (\n <PromptInner\n modal={modal}\n handlers={{ onChange, onConfirm, onClose }}\n />\n )}\n </Foreground>\n </div>\n );\n};\n","import { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { ModalNode } from '@/promise-modal/core';\n\nexport const useSubscribeModal = (modal?: ModalNode) => {\n const [tick, update] = useTick();\n useOnMount(() => {\n if (!modal) return;\n const unsubscribe = modal.subscribe(update);\n return unsubscribe;\n });\n return tick;\n};\n","import { css } from '@emotion/css';\n\nexport const presenter = css`\n position: fixed;\n inset: 0;\n pointer-events: none;\n overflow: hidden;\n`;\n","import { memo, useRef } from 'react';\n\nimport { useHandle } from '@winglet/react-utils';\n\nimport { Background } from '@/promise-modal/components/Background';\nimport { Foreground } from '@/promise-modal/components/Foreground';\nimport { useSubscribeModal } from '@/promise-modal/hooks/useSubscribeModal';\nimport { useModal } from '@/promise-modal/providers';\nimport type { ModalIdProps } from '@/promise-modal/types';\n\nimport { presenter } from './classNames.emotion';\n\nlet zIndex = 1;\n\nexport const Presenter = memo(({ modalId }: ModalIdProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { modal } = useModal(modalId);\n useSubscribeModal(modal);\n const handleChangeOrder = useHandle(() => {\n if (ref.current) {\n ref.current.style.zIndex = `${zIndex++}`;\n }\n });\n return (\n <div ref={ref} className={presenter}>\n <Background modalId={modalId} onChangeOrder={handleChangeOrder} />\n <Foreground modalId={modalId} onChangeOrder={handleChangeOrder} />\n </div>\n );\n});\n","import { useMemo } from 'react';\n\nimport { useModalDataContext } from '../providers';\n\nexport const useActiveModalCount = (tick: string | number = 0) => {\n const { modalIds, getModalNode } = useModalDataContext();\n return useMemo(() => {\n let count = 0;\n for (const id of modalIds) {\n if (getModalNode(id)?.visible) count++;\n }\n return count;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getModalNode, modalIds, tick]);\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n AlertContentProps,\n AlertFooterRender,\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface AlertProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<AlertContentProps>;\n background?: ModalBackground<B>;\n footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: AlertProps<B>) => {\n return new Promise<void>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'alert',\n subtype,\n resolve: () => resolve(),\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n BackgroundComponent,\n ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface ConfirmProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<ConfirmContentProps>;\n background?: ModalBackground<B>;\n footer?: ConfirmFooterRender | FooterOptions | false;\n closeOnBackdropClick?: boolean;\n manualDestroy?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: ConfirmProps<B>) => {\n return new Promise<boolean>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'confirm',\n subtype,\n resolve: (result) => resolve(result ?? false),\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n} from '@/promise-modal/types';\n\nimport { ModalManager } from '../../app/ModalManager';\n\ninterface PromptProps<T, B = any> {\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<PromptContentProps>;\n Input: (props: PromptInputProps<T>) => ReactNode;\n defaultValue?: T;\n disabled?: (value: T) => boolean;\n returnOnCancel?: boolean;\n background?: ModalBackground<B>;\n footer?: PromptFooterRender<T> | FooterOptions | false;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const prompt = <T, B = any>({\n defaultValue,\n title,\n subtitle,\n content,\n Input,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: PromptProps<T, B>) => {\n return new Promise<T>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'prompt',\n resolve: (result) => resolve(result as T),\n title,\n subtitle,\n content,\n Input,\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ReactNode } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type {\n BackgroundComponent,\n BaseModal,\n ForegroundComponent,\n ManagedEntity,\n ModalBackground,\n} from '@/promise-modal/types';\n\ntype BaseNodeProps<T, B> = BaseModal<T, B> & ManagedEntity;\n\nexport abstract class BaseNode<T, B> {\n readonly id: number;\n readonly initiator: string;\n\n readonly title?: ReactNode;\n readonly subtitle?: ReactNode;\n readonly background?: ModalBackground<B>;\n\n readonly manualDestroy: boolean;\n readonly closeOnBackdropClick: boolean;\n\n readonly ForegroundComponent?: ForegroundComponent;\n readonly BackgroundComponent?: BackgroundComponent;\n\n #alive: boolean;\n get alive() {\n return this.#alive;\n }\n #visible: boolean;\n get visible() {\n return this.#visible;\n }\n\n #resolve: (result: T | null) => void;\n #listeners: Fn[] = [];\n\n constructor({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy = false,\n closeOnBackdropClick = true,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: BaseNodeProps<T, B>) {\n this.id = id;\n this.initiator = initiator;\n this.title = title;\n this.subtitle = subtitle;\n this.background = background;\n this.manualDestroy = manualDestroy;\n this.closeOnBackdropClick = closeOnBackdropClick;\n\n this.ForegroundComponent = ForegroundComponent;\n this.BackgroundComponent = BackgroundComponent;\n\n this.#alive = true;\n this.#visible = true;\n this.#resolve = resolve;\n }\n\n subscribe(listener: Fn) {\n this.#listeners.push(listener);\n return () => {\n this.#listeners = this.#listeners.filter((l) => l !== listener);\n };\n }\n publish() {\n for (const listener of this.#listeners) listener();\n }\n protected resolve(result: T | null) {\n this.#resolve(result);\n }\n onDestroy() {\n const needPublish = this.#alive === true;\n this.#alive = false;\n if (this.manualDestroy && needPublish) this.publish();\n }\n onShow() {\n const needPublish = this.#visible === false;\n this.#visible = true;\n if (needPublish) this.publish();\n }\n onHide() {\n const needPublish = this.#visible === true;\n this.#visible = false;\n if (needPublish) this.publish();\n }\n abstract onClose(): void;\n abstract onConfirm(): void;\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n AlertContentProps,\n AlertFooterRender,\n AlertModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype AlertNodeProps<B> = AlertModal<B> & ManagedEntity;\n\nexport class AlertNode<B> extends BaseNode<null, B> {\n readonly type: 'alert';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<AlertContentProps>;\n readonly footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(null);\n }\n onConfirm() {\n this.resolve(null);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n ConfirmContentProps,\n ConfirmFooterRender,\n ConfirmModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype ConfirmNodeProps<B> = ConfirmModal<B> & ManagedEntity;\n\nexport class ConfirmNode<B> extends BaseNode<boolean, B> {\n readonly type: 'confirm';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<ConfirmContentProps>;\n readonly footer?: ConfirmFooterRender | FooterOptions | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(false);\n }\n onConfirm() {\n this.resolve(true);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\n ManagedEntity,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n PromptModal,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype PromptNodeProps<T, B> = PromptModal<T, B> & ManagedEntity;\n\nexport class PromptNode<T, B> extends BaseNode<T, B> {\n readonly type: 'prompt';\n readonly content?: ReactNode | ComponentType<PromptContentProps>;\n readonly defaultValue: T | undefined;\n readonly Input: (props: PromptInputProps<T>) => ReactNode;\n readonly disabled?: (value: T) => boolean;\n readonly returnOnCancel?: boolean;\n readonly footer?: PromptFooterRender<T> | FooterOptions | false;\n #value: T | undefined;\n\n constructor({\n id,\n initiator,\n type,\n title,\n subtitle,\n content,\n defaultValue,\n Input,\n disabled,\n returnOnCancel,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.content = content;\n this.Input = Input;\n this.defaultValue = defaultValue;\n this.#value = defaultValue;\n this.disabled = disabled;\n this.returnOnCancel = returnOnCancel;\n this.footer = footer;\n }\n\n onChange(value: T) {\n this.#value = value;\n }\n onConfirm() {\n this.resolve(this.#value ?? null);\n }\n onClose() {\n if (this.returnOnCancel) this.resolve(this.#value ?? null);\n else this.resolve(null);\n }\n}\n","import type { ManagedModal } from '@/promise-modal/types';\n\nimport { AlertNode, ConfirmNode, PromptNode } from './ModalNode';\n\nexport const nodeFactory = <T, B>(modal: ManagedModal<T, B>) => {\n switch (modal.type) {\n case 'alert':\n return new AlertNode<B>(modal);\n case 'confirm':\n return new ConfirmNode<B>(modal);\n case 'prompt':\n return new PromptNode<T, B>(modal);\n }\n // @ts-expect-error: This state is unreachable by design and should NEVER occur.\n throw new Error(`Unknown modal: ${modal.type}`, { modal });\n};\n","const DURATION_REGEX = /^\\s*(\\d+)\\s*(ms|s|m|h)\\s*$/;\n\nexport const getMillisecondsFromDuration = (input: string) => {\n const [, durationString, unit] = input.match(DURATION_REGEX) || [];\n if (!durationString || !unit) return 0;\n const duration = parseInt(durationString);\n if (unit === 'ms') return duration;\n if (unit === 's') return duration * 1000;\n if (unit === 'm') return duration * 60 * 1000;\n if (unit === 'h') return duration * 60 * 60 * 1000;\n else return 0;\n};\n","import { createContext } from 'react';\n\nimport { undefinedFunction } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport type { ModalActions, ModalHandlersWithId } from '@/promise-modal/types';\n\nexport interface ModalDataContextProps extends ModalHandlersWithId {\n modalIds: ModalNode['id'][];\n getModal: Fn<[id: ModalNode['id']], ModalActions>;\n getModalNode: Fn<[id: ModalNode['id']], ModalNode | undefined>;\n setUpdater: Fn<[updater: Fn]>;\n}\n\nexport const ModalDataContext = createContext<ModalDataContextProps>({\n modalIds: [],\n getModalNode: undefinedFunction,\n onChange: undefinedFunction,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onDestroy: undefinedFunction,\n setUpdater: undefinedFunction,\n getModal: () => ({\n modal: undefined,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onChange: undefinedFunction,\n onDestroy: undefinedFunction,\n }),\n});\n","import {\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useOnMountLayout, useReference } from '@winglet/react-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport { type ModalNode, nodeFactory } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\nimport { useModalOptions } from '@/promise-modal/providers';\nimport type { Modal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\ninterface ModalDataContextProviderProps {\n pathname: string;\n}\n\nexport const ModalDataContextProvider = memo(\n ({\n pathname,\n children,\n }: PropsWithChildren<ModalDataContextProviderProps>) => {\n const modalDictionary = useRef<Map<ModalNode['id'], ModalNode>>(new Map());\n\n const [modalIds, setModalIds] = useState<ModalNode['id'][]>([]);\n const modalIdsRef = useReference(modalIds);\n\n const initiator = useRef(pathname);\n const modalIdSequence = useRef(0);\n\n const options = useModalOptions();\n\n const duration = useMemo(\n () => getMillisecondsFromDuration(options.duration),\n [options],\n );\n\n useOnMountLayout(() => {\n const { manualDestroy, closeOnBackdropClick } = options;\n\n for (const data of ModalManager.prerender) {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => [...ids, modal.id]);\n }\n\n ModalManager.setupOpen((data: Modal) => {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => {\n const aliveIds = ids.filter((id) => {\n const destroyed = !modalDictionary.current.get(id)?.alive;\n if (destroyed) modalDictionary.current.delete(id);\n return !destroyed;\n });\n return [...aliveIds, modal.id];\n });\n });\n ModalManager.clearPrerender();\n });\n\n useLayoutEffect(() => {\n for (const id of modalIdsRef.current) {\n const modal = modalDictionary.current.get(id);\n if (!modal?.alive) continue;\n if (modal.initiator === pathname) modal.onShow();\n else modal.onHide();\n }\n initiator.current = pathname;\n }, [modalIdsRef, pathname]);\n\n const getModalNode = useCallback((modalId: ModalNode['id']) => {\n return modalDictionary.current.get(modalId);\n }, []);\n\n const onDestroy = useCallback((modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onDestroy();\n updaterRef.current?.();\n }, []);\n\n const updaterRef = useRef<Fn>();\n const hideModal = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onHide();\n updaterRef.current?.();\n if (!modal.manualDestroy)\n setTimeout(() => {\n modal.onDestroy();\n }, duration);\n },\n [duration],\n );\n\n const onChange = useCallback((modalId: ModalNode['id'], value: any) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n if (modal.type === 'prompt') modal.onChange(value);\n }, []);\n\n const onConfirm = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onConfirm();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const onClose = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onClose();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const getModal = useCallback(\n (modalId: ModalNode['id']) => ({\n modal: getModalNode(modalId),\n onConfirm: () => onConfirm(modalId),\n onClose: () => onClose(modalId),\n onChange: (value: any) => onChange(modalId, value),\n onDestroy: () => onDestroy(modalId),\n }),\n [getModalNode, onConfirm, onClose, onChange, onDestroy],\n );\n\n const value = useMemo(() => {\n return {\n modalIds,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n getModal,\n setUpdater: (updater: Fn) => {\n updaterRef.current = updater;\n },\n };\n }, [\n modalIds,\n getModal,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n ]);\n\n return (\n <ModalDataContext.Provider value={value}>\n {children}\n </ModalDataContext.Provider>\n );\n },\n);\n","import { useContext, useMemo } from 'react';\n\nimport type { ManagedModal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\nexport const useModalDataContext = () => useContext(ModalDataContext);\n\nexport const useModal = (id: ManagedModal['id']) => {\n const { getModal } = useModalDataContext();\n return useMemo(() => getModal(id), [id, getModal]);\n};\n","import { css } from '@emotion/css';\n\nexport const anchor = css`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 1000;\n transition: background-color ease-in-out;\n`;\n","import { memo, useEffect } from 'react';\n\nimport { useTick, withErrorBoundary } from '@winglet/react-utils';\n\nimport { Presenter } from '@/promise-modal/components/Presenter';\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useModalDataContext } from '@/promise-modal/providers/ModalDataContext';\n\nimport { anchor } from './classNames.emotion';\n\nconst AnchorInner = () => {\n const [key, update] = useTick();\n\n const { modalIds, setUpdater } = useModalDataContext();\n\n useEffect(() => {\n setUpdater(update);\n }, [setUpdater, update]);\n\n const { options } = useModalContext();\n\n const dimmed = useActiveModalCount(key);\n\n return (\n <div\n className={anchor}\n style={{\n transitionDuration: options.duration,\n backgroundColor: dimmed ? options.backdrop : 'transparent',\n }}\n >\n {modalIds.map((id) => {\n return <Presenter key={id} modalId={id} />;\n })}\n </div>\n );\n};\n\nexport const Anchor = memo(withErrorBoundary(AnchorInner));\n","import { css } from '@emotion/css';\n\nexport const fallback = css`\n margin: unset;\n`;\n\nexport const frame = css`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: white;\n padding: 20px 80px;\n gap: 10px;\n border: 1px solid black;\n`;\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={fallback}>{children}</div>;\n};\n","import type { FooterComponentProps } from '@/promise-modal/types';\n\nexport const FallbackFooter = ({\n confirmLabel,\n hideConfirm = false,\n cancelLabel,\n hideCancel = false,\n disabled,\n onConfirm,\n onCancel,\n}: FooterComponentProps) => {\n return (\n <div>\n {!hideConfirm && (\n <button onClick={onConfirm} disabled={disabled}>\n {confirmLabel || '확인'}\n </button>\n )}\n\n {!hideCancel && typeof onCancel === 'function' && (\n <button onClick={onCancel}>{cancelLabel || '취소'}</button>\n )}\n </div>\n );\n};\n","import {\n type ForwardedRef,\n type PropsWithChildren,\n forwardRef,\n useMemo,\n} from 'react';\n\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport type { ModalFrameProps } from '@/promise-modal/types';\n\nimport { frame } from './classNames.emotion';\n\nconst MAX_MODAL_COUNT = 5;\nconst MAX_MODAL_LEVEL = 3;\n\nexport const FallbackForegroundFrame = forwardRef(\n (\n { id, onChangeOrder, children }: PropsWithChildren<ModalFrameProps>,\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const activeCount = useActiveModalCount();\n const [level, offset] = useMemo(() => {\n const stacked = activeCount > 1;\n const level = stacked\n ? (Math.floor(id / MAX_MODAL_COUNT) % MAX_MODAL_LEVEL) * 100\n : 0;\n const offset = stacked ? (id % MAX_MODAL_COUNT) * 35 : 0;\n return [level, offset];\n }, [activeCount, id]);\n\n return (\n <div\n ref={ref}\n className={frame}\n onClick={onChangeOrder}\n style={{\n marginBottom: `calc(25vh + ${level}px)`,\n marginLeft: `${level}px`,\n transform: `translate(${offset}px, ${offset}px)`,\n }}\n >\n {children}\n </div>\n );\n },\n);\n","import { useLayoutEffect, useState } from 'react';\n\nexport const usePathname = () => {\n const [pathname, setPathname] = useState(window.location.pathname);\n\n useLayoutEffect(() => {\n let requestId: number;\n\n const checkPathname = () => {\n if (requestId) cancelAnimationFrame(requestId);\n if (pathname !== window.location.pathname) {\n setPathname(window.location.pathname);\n } else {\n requestId = requestAnimationFrame(checkPathname);\n }\n };\n\n requestId = requestAnimationFrame(checkPathname);\n\n return () => {\n if (requestId) cancelAnimationFrame(requestId);\n };\n }, [pathname]);\n\n return { pathname };\n};\n","import { type ComponentType, createContext } from 'react';\n\nimport type { Color, Duration } from '@aileron/types';\n\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport type {\n BackgroundComponent,\n FooterComponentProps,\n ForegroundComponent,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n TitleComponent: ComponentType<WrapperComponentProps>;\n SubtitleComponent: ComponentType<WrapperComponentProps>;\n ContentComponent: ComponentType<WrapperComponentProps>;\n FooterComponent: ComponentType<FooterComponentProps>;\n options: {\n duration: Duration;\n backdrop: Color;\n manualDestroy: boolean;\n closeOnBackdropClick: boolean;\n };\n}\n\nexport const ModalContext = createContext<ModalContextProps>({\n ForegroundComponent: FallbackForegroundFrame,\n TitleComponent: FallbackTitle,\n SubtitleComponent: FallbackSubtitle,\n ContentComponent: FallbackContent,\n FooterComponent: FallbackFooter,\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n manualDestroy: false,\n closeOnBackdropClick: true,\n },\n});\n","import {\n type ComponentType,\n type PropsWithChildren,\n memo,\n useMemo,\n useRef,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { Color, Dictionary, Duration } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport { Anchor } from '@/promise-modal/components/Anchor';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport { usePathname as useDefaultPathname } from '@/promise-modal/hooks/useDefaultPathname';\nimport type {\n FooterComponentProps,\n ModalFrameProps,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { UserDefinedContextProvider } from '../UserDefinedContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<WrapperComponentProps>;\n SubtitleComponent?: ComponentType<WrapperComponentProps>;\n ContentComponent?: ComponentType<WrapperComponentProps>;\n FooterComponent?: ComponentType<FooterComponentProps>;\n options?: {\n /** Modal transition time(ms, s) */\n duration?: Duration;\n /** Modal backdrop color */\n backdrop?: Color;\n /** Whether to destroy the modal manually */\n manualDestroy?: boolean;\n /** Whether to close the modal when the backdrop is clicked */\n closeOnBackdropClick?: boolean;\n };\n context?: Dictionary;\n usePathname?: () => { pathname: string };\n}\n\nexport const ModalContextProvider = memo(\n ({\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n options,\n context,\n usePathname,\n children,\n }: PropsWithChildren<ModalContextProviderProps>) => {\n const { pathname } = (usePathname || useDefaultPathname)();\n const [, update] = useTick();\n const portalRef = useRef<HTMLElement | null>(null);\n\n useOnMount(() => {\n portalRef.current = ModalManager.anchor('div');\n update();\n return () => {\n if (portalRef.current) {\n portalRef.current.remove();\n }\n };\n });\n\n const value = useMemo(\n () => ({\n BackgroundComponent,\n ForegroundComponent: ForegroundComponent || FallbackForegroundFrame,\n TitleComponent: TitleComponent || FallbackTitle,\n SubtitleComponent: SubtitleComponent || FallbackSubtitle,\n ContentComponent: memo(ContentComponent || FallbackContent),\n FooterComponent: memo(FooterComponent || FallbackFooter),\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n closeOnBackdropClick: true,\n manualDestroy: false,\n ...options,\n } satisfies ModalContextProviderProps['options'],\n }),\n [\n ForegroundComponent,\n BackgroundComponent,\n ContentComponent,\n FooterComponent,\n SubtitleComponent,\n TitleComponent,\n options,\n ],\n );\n\n return (\n <ModalContext.Provider value={value}>\n {children}\n {portalRef.current &&\n createPortal(\n <UserDefinedContextProvider context={context}>\n <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>\n </UserDefinedContextProvider>,\n portalRef.current,\n )}\n </ModalContext.Provider>\n );\n },\n);\n","import { useContext } from 'react';\n\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { ModalContext } from './ModalContext';\n\nexport const useModalContext = () => useContext(ModalContext);\n\nexport const useModalOptions = () => {\n const { options } = useContext(ModalContext);\n return options;\n};\n\nexport const useModalDuration = () => {\n const { duration } = useModalOptions();\n return { duration, milliseconds: getMillisecondsFromDuration(duration) };\n};\n\nexport const useModalBackdrop = () => {\n const { backdrop } = useModalOptions();\n return backdrop;\n};\n","import { useEffect, useRef } from 'react';\n\nimport { isString } from '@winglet/common-utils';\n\nimport type { Duration } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { useModal } from '../providers';\nimport { useSubscribeModal } from './useSubscribeModal';\n\nexport const useDestroyAfter = (\n modalId: ModalNode['id'],\n duration: Duration | number,\n) => {\n const { modal, onDestroy } = useModal(modalId);\n const tick = useSubscribeModal(modal);\n\n const reference = useRef({\n modal,\n onDestroy,\n milliseconds: isString(duration)\n ? getMillisecondsFromDuration(duration)\n : duration,\n });\n\n useEffect(() => {\n const { modal, onDestroy, milliseconds } = reference.current;\n if (!modal || modal.visible || !modal.alive) return;\n const timer = setTimeout(() => {\n onDestroy();\n }, milliseconds);\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [tick]);\n};\n"],"names":["prerenderListRef","current","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","prefix","document","getElementById","id","node","createElement","setAttribute","getRandomString","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","UserDefinedContext","createContext","context","EMPTY_OBJECT","UserDefinedContextProvider","children","contextValue","useMemo","_jsx","Provider","value","useUserDefinedContext","useContext","background","css","process","env","NODE_ENV","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","active","visible","BackgroundFrame","modalId","onChangeOrder","BackgroundComponent","useModalContext","userDefinedContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","stopPropagation","Background","className","cx","visible$1","manualDestroy","alive","active$1","onClick","type","initiator","foreground","AlertInner","memo","handlers","title","subtitle","content","footer","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","withErrorBoundary","setValue","useState","handleChange","inputValue","input","isFunction","setTimeout","ForegroundFrame","ForegroundComponent","Foreground","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","presenter","zIndex","Presenter","ref","useRef","handleChangeOrder","style","useActiveModalCount","modalIds","getModalNode","useModalDataContext","count","alert","subtype","Promise","resolve","reject","error","result","prompt","returnOnCancel","BaseNode","__classPrivateFieldGet","this","_BaseNode_alive","_BaseNode_visible","constructor","Object","defineProperty","set","_BaseNode_resolve","_BaseNode_listeners","__classPrivateFieldSet","listener","filter","l","publish","call","needPublish","onShow","onHide","AlertNode","super","ConfirmNode","PromptNode","_PromptNode_value","nodeFactory","Error","DURATION_REGEX","getMillisecondsFromDuration","durationString","unit","match","duration","parseInt","ModalDataContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","useOnMountLayout","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","Anchor","key","useEffect","dimmed","transitionDuration","backgroundColor","backdrop","map","fallback","frame","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","Math","floor","marginBottom","marginLeft","transform","usePathname","setPathname","window","location","requestId","checkPathname","cancelAnimationFrame","requestAnimationFrame","ModalContext","ModalContextProvider","useDefaultPathname","portalRef","remove","createPortal","useModalDuration","milliseconds","useModalBackdrop","useDestroyAfter","reference","timer","clearTimeout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/app/ModalManager.ts","../src/app/constant.ts","../src/providers/UserDefinedContext/UserDefinedContext.ts","../src/providers/UserDefinedContext/UserDefinedContextProvider.tsx","../src/providers/UserDefinedContext/useUserDefinedContext.ts","../src/components/Background/classNames.emotion.ts","../src/components/Background/Background.tsx","../src/components/Foreground/classNames.emotion.ts","../src/components/Foreground/components/AlertInner.tsx","../src/components/Foreground/components/ConfirmInner.tsx","../src/components/Foreground/components/PromptInner.tsx","../src/components/Foreground/Foreground.tsx","../src/hooks/useSubscribeModal.ts","../src/components/Presenter/classNames.emotion.ts","../src/components/Presenter/Presenter.tsx","../src/hooks/useActiveModalCount.ts","../src/core/handle/alert.ts","../src/core/handle/confirm.ts","../src/core/handle/prompt.ts","../src/core/node/ModalNode/AbstractBaseNode.ts","../src/core/node/ModalNode/AlertNode.ts","../src/core/node/ModalNode/ConfirmNode.ts","../src/core/node/ModalNode/PromptNode.ts","../src/core/node/nodeFactory.ts","../src/helpers/getMillisecondsFromDuration.ts","../src/providers/ModalDataContext/ModalDataContext.ts","../src/providers/ModalDataContext/ModalDataContextProvider.tsx","../src/providers/ModalDataContext/useModalDataContext.ts","../src/components/Anchor/classNames.emotion.ts","../src/components/Anchor/Anchor.tsx","../src/components/FallbackComponents/classNames.emotion.ts","../src/components/FallbackComponents/FallbackTitle.tsx","../src/components/FallbackComponents/FallbackSubtitle.tsx","../src/components/FallbackComponents/FallbackContent.tsx","../src/components/FallbackComponents/FallbackFooter.tsx","../src/components/FallbackComponents/FallbackForegroundFrame.tsx","../src/hooks/useDefaultPathname.ts","../src/providers/ModalContext/ModalContext.ts","../src/providers/ModalContext/ModalContextProvider.tsx","../src/providers/ModalContext/useModalContext.ts","../src/hooks/useDestroyAfter.ts"],"sourcesContent":["import { MutableRefObject } from 'react';\n\nimport { getRandomString } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { Modal } from '@/promise-modal/types';\n\nconst prerenderListRef: MutableRefObject<Modal[]> = {\n current: [],\n};\n\nconst openModalRef: MutableRefObject<Fn<[Modal], void>> = {\n current: (modal: Modal) => {\n prerenderListRef.current.push(modal);\n },\n};\n\nconst anchorRef: MutableRefObject<HTMLElement | null> = {\n current: null,\n};\n\nexport const ModalManager = {\n get prerender() {\n return prerenderListRef.current;\n },\n clearPrerender() {\n prerenderListRef.current = [];\n },\n open(modal: Modal) {\n openModalRef.current(modal);\n },\n setupOpen(open: (modal: Modal) => void) {\n openModalRef.current = open;\n },\n anchor(name: string, prefix = 'promise-modal'): HTMLElement {\n if (anchorRef.current) {\n const anchor = document.getElementById(anchorRef.current.id);\n if (anchor) return anchor;\n }\n const node = document.createElement(name);\n node.setAttribute('id', `${prefix}-${getRandomString(36)}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","import type { Color, Duration } from '@aileron/types';\n\nexport const DEFAULT_ANIMATION_DURATION: Duration = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR: Color = 'rgba(0, 0, 0, 0.5)';\n","import { createContext } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nexport interface UserDefinedContext {\n context: Dictionary;\n}\n\nexport const UserDefinedContext = createContext<UserDefinedContext>({\n context: EMPTY_OBJECT,\n});\n","import { PropsWithChildren, useMemo } from 'react';\n\nimport { EMPTY_OBJECT } from '@winglet/common-utils';\n\nimport type { Dictionary } from '@aileron/types';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\ninterface UserDefinedContextProviderProps {\n /** 사용자 정의 컨텍스트 */\n context?: Dictionary;\n}\n\nexport const UserDefinedContextProvider = ({\n context,\n children,\n}: PropsWithChildren<UserDefinedContextProviderProps>) => {\n const contextValue = useMemo(\n () => ({ context: context || EMPTY_OBJECT }),\n [context],\n );\n return (\n <UserDefinedContext.Provider value={contextValue}>\n {children}\n </UserDefinedContext.Provider>\n );\n};\n","import { useContext } from 'react';\n\nimport { UserDefinedContext } from './UserDefinedContext';\n\nexport const useUserDefinedContext = () => {\n return useContext(UserDefinedContext);\n};\n","import { css } from '@emotion/css';\n\nexport const background = css`\n display: none;\n position: fixed;\n inset: 0;\n z-index: -999;\n pointer-events: none;\n > * {\n pointer-events: none;\n }\n`;\n\nexport const active = css`\n pointer-events: all;\n`;\n\nexport const visible = css`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n","import { type MouseEvent, useCallback, useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, background, visible } from './classNames.emotion';\n\nexport const BackgroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n const { modal, onClose, onChange, onConfirm, onDestroy } = useModal(modalId);\n\n const handleClose = useCallback(\n (event: MouseEvent) => {\n if (modal && modal.closeOnBackdropClick && modal.visible) onClose();\n event.stopPropagation();\n },\n [modal, onClose],\n );\n\n const Background = useMemo(\n () => modal?.BackgroundComponent || BackgroundComponent,\n [BackgroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(background, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.closeOnBackdropClick && modal.visible,\n })}\n onClick={handleClose}\n >\n {Background && (\n <Background\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n />\n )}\n </div>\n );\n};\n","import { css } from '@emotion/css';\n\nexport const foreground = css`\n pointer-events: none;\n display: none;\n position: fixed;\n inset: 0;\n z-index: 1;\n`;\n\nexport const active = css`\n > * {\n pointer-events: all;\n }\n`;\n\nexport const visible = css`\n display: flex !important;\n justify-content: center;\n align-items: center;\n`;\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useMemo } from 'react';\n\nimport { isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { ConfirmNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface ConfirmInnerProps<B> {\n modal: ConfirmNode<B>;\n handlers: Pick<ModalActions, 'onConfirm' | 'onClose'>;\n}\n\nexport const ConfirmInner = memo(\n <B,>({ modal, handlers }: ConfirmInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { context: userDefinedContext } = useUserDefinedContext();\n const { onConfirm, onClose } = useMemo(() => handlers, [handlers]);\n\n const handleConfirm = useHandle(onConfirm);\n const handleClose = useHandle(onClose);\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport {\n renderComponent,\n useHandle,\n withErrorBoundary,\n} from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(withErrorBoundary(modal.Input)),\n }),\n [modal],\n );\n\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const [value, setValue] = useState<T | undefined>(defaultValue);\n\n const { onChange, onClose, onConfirm } = useMemo(\n () => handlers,\n [handlers],\n );\n\n const handleClose = useHandle(onClose);\n const handleChange = useHandle(\n (inputValue?: T | ((prevState: T | undefined) => T | undefined)) => {\n const input = isFunction(inputValue) ? inputValue(value) : inputValue;\n setValue(input);\n onChange(input);\n },\n );\n\n const handleConfirm = useCallback(() => {\n // NOTE: wait for the next tick to ensure the value is updated\n setTimeout(() => {\n onConfirm();\n });\n }, [onConfirm]);\n\n const disabled = useMemo(\n () => (value ? !!checkDisabled?.(value) : false),\n [checkDisabled, value],\n );\n\n const {\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n } = useModalContext();\n\n return (\n <Fragment>\n {title &&\n (isString(title) ? (\n <TitleComponent context={userDefinedContext}>\n {title}\n </TitleComponent>\n ) : (\n title\n ))}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent context={userDefinedContext}>\n {subtitle}\n </SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent context={userDefinedContext}>\n {content}\n </ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n context={userDefinedContext}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n value,\n disabled,\n onChange: handleChange,\n onConfirm: handleConfirm,\n onCancel: handleClose,\n context: userDefinedContext,\n })\n ) : (\n <FooterComponent\n disabled={disabled}\n onConfirm={handleConfirm}\n onCancel={handleClose}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n context={userDefinedContext}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import { useMemo } from 'react';\n\nimport { cx } from '@emotion/css';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport { useUserDefinedContext } from '@/promise-modal/providers/UserDefinedContext';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport { active, foreground, visible } from './classNames.emotion';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const ForegroundFrame = ({\n modalId,\n onChangeOrder,\n}: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n const { context: userDefinedContext } = useUserDefinedContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n const Foreground = useMemo(\n () => modal?.ForegroundComponent || ForegroundComponent,\n [ForegroundComponent, modal],\n );\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(foreground, {\n [visible]: modal.manualDestroy ? modal.alive : modal.visible,\n [active]: modal.visible,\n })}\n >\n <Foreground\n id={modal.id}\n type={modal.type}\n alive={modal.alive}\n visible={modal.visible}\n initiator={modal.initiator}\n manualDestroy={modal.manualDestroy}\n closeOnBackdropClick={modal.closeOnBackdropClick}\n background={modal.background}\n onChange={onChange}\n onConfirm={onConfirm}\n onClose={onClose}\n onDestroy={onDestroy}\n onChangeOrder={onChangeOrder}\n context={userDefinedContext}\n >\n {modal.type === 'alert' && (\n <AlertInner modal={modal} handlers={{ onConfirm }} />\n )}\n {modal.type === 'confirm' && (\n <ConfirmInner modal={modal} handlers={{ onConfirm, onClose }} />\n )}\n {modal.type === 'prompt' && (\n <PromptInner\n modal={modal}\n handlers={{ onChange, onConfirm, onClose }}\n />\n )}\n </Foreground>\n </div>\n );\n};\n","import { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { ModalNode } from '@/promise-modal/core';\n\nexport const useSubscribeModal = (modal?: ModalNode) => {\n const [tick, update] = useTick();\n useOnMount(() => {\n if (!modal) return;\n const unsubscribe = modal.subscribe(update);\n return unsubscribe;\n });\n return tick;\n};\n","import { css } from '@emotion/css';\n\nexport const presenter = css`\n position: fixed;\n inset: 0;\n pointer-events: none;\n overflow: hidden;\n`;\n","import { memo, useRef } from 'react';\n\nimport { counterFactory } from '@winglet/common-utils';\nimport { useHandle } from '@winglet/react-utils';\n\nimport { Background } from '@/promise-modal/components/Background';\nimport { Foreground } from '@/promise-modal/components/Foreground';\nimport { useSubscribeModal } from '@/promise-modal/hooks/useSubscribeModal';\nimport { useModal } from '@/promise-modal/providers';\nimport type { ModalIdProps } from '@/promise-modal/types';\n\nimport { presenter } from './classNames.emotion';\n\nconst { increment } = counterFactory(1);\n\nexport const Presenter = memo(({ modalId }: ModalIdProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { modal } = useModal(modalId);\n useSubscribeModal(modal);\n const handleChangeOrder = useHandle(() => {\n if (ref.current) {\n ref.current.style.zIndex = `${increment()}`;\n }\n });\n return (\n <div ref={ref} className={presenter}>\n <Background modalId={modalId} onChangeOrder={handleChangeOrder} />\n <Foreground modalId={modalId} onChangeOrder={handleChangeOrder} />\n </div>\n );\n});\n","import { useMemo } from 'react';\n\nimport { useModalDataContext } from '../providers';\n\nexport const useActiveModalCount = (tick: string | number = 0) => {\n const { modalIds, getModalNode } = useModalDataContext();\n return useMemo(() => {\n let count = 0;\n for (const id of modalIds) {\n if (getModalNode(id)?.visible) count++;\n }\n return count;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getModalNode, modalIds, tick]);\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n AlertContentProps,\n AlertFooterRender,\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface AlertProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<AlertContentProps>;\n background?: ModalBackground<B>;\n footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: AlertProps<B>) => {\n return new Promise<void>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'alert',\n subtype,\n resolve: () => resolve(),\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport type {\n BackgroundComponent,\n ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface ConfirmProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<ConfirmContentProps>;\n background?: ModalBackground<B>;\n footer?: ConfirmFooterRender | FooterOptions | false;\n closeOnBackdropClick?: boolean;\n manualDestroy?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: ConfirmProps<B>) => {\n return new Promise<boolean>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'confirm',\n subtype,\n resolve: (result) => resolve(result ?? false),\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n BackgroundComponent,\n FooterOptions,\n ForegroundComponent,\n ModalBackground,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n} from '@/promise-modal/types';\n\nimport { ModalManager } from '../../app/ModalManager';\n\ninterface PromptProps<T, B = any> {\n title?: ReactNode;\n subtitle?: ReactNode;\n content?: ReactNode | ComponentType<PromptContentProps>;\n Input: (props: PromptInputProps<T>) => ReactNode;\n defaultValue?: T;\n disabled?: (value: T) => boolean;\n returnOnCancel?: boolean;\n background?: ModalBackground<B>;\n footer?: PromptFooterRender<T> | FooterOptions | false;\n manualDestroy?: boolean;\n closeOnBackdropClick?: boolean;\n ForegroundComponent?: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n}\n\nexport const prompt = <T, B = any>({\n defaultValue,\n title,\n subtitle,\n content,\n Input,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n}: PromptProps<T, B>) => {\n return new Promise<T>((resolve, reject) => {\n try {\n ModalManager.open({\n type: 'prompt',\n resolve: (result) => resolve(result as T),\n title,\n subtitle,\n content,\n Input,\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n ForegroundComponent,\n BackgroundComponent,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ReactNode } from 'react';\n\nimport type { Fn } from '@aileron/types';\n\nimport type {\n BackgroundComponent,\n BaseModal,\n ForegroundComponent,\n ManagedEntity,\n ModalBackground,\n} from '@/promise-modal/types';\n\ntype BaseNodeProps<T, B> = BaseModal<T, B> & ManagedEntity;\n\nexport abstract class BaseNode<T, B> {\n readonly id: number;\n readonly initiator: string;\n\n readonly title?: ReactNode;\n readonly subtitle?: ReactNode;\n readonly background?: ModalBackground<B>;\n\n readonly manualDestroy: boolean;\n readonly closeOnBackdropClick: boolean;\n\n readonly ForegroundComponent?: ForegroundComponent;\n readonly BackgroundComponent?: BackgroundComponent;\n\n #alive: boolean;\n get alive() {\n return this.#alive;\n }\n #visible: boolean;\n get visible() {\n return this.#visible;\n }\n\n #resolve: (result: T | null) => void;\n #listeners: Fn[] = [];\n\n constructor({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy = false,\n closeOnBackdropClick = true,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: BaseNodeProps<T, B>) {\n this.id = id;\n this.initiator = initiator;\n this.title = title;\n this.subtitle = subtitle;\n this.background = background;\n this.manualDestroy = manualDestroy;\n this.closeOnBackdropClick = closeOnBackdropClick;\n\n this.ForegroundComponent = ForegroundComponent;\n this.BackgroundComponent = BackgroundComponent;\n\n this.#alive = true;\n this.#visible = true;\n this.#resolve = resolve;\n }\n\n subscribe(listener: Fn) {\n this.#listeners.push(listener);\n return () => {\n this.#listeners = this.#listeners.filter((l) => l !== listener);\n };\n }\n publish() {\n for (const listener of this.#listeners) listener();\n }\n protected resolve(result: T | null) {\n this.#resolve(result);\n }\n onDestroy() {\n const needPublish = this.#alive === true;\n this.#alive = false;\n if (this.manualDestroy && needPublish) this.publish();\n }\n onShow() {\n const needPublish = this.#visible === false;\n this.#visible = true;\n if (needPublish) this.publish();\n }\n onHide() {\n const needPublish = this.#visible === true;\n this.#visible = false;\n if (needPublish) this.publish();\n }\n abstract onClose(): void;\n abstract onConfirm(): void;\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n AlertContentProps,\n AlertFooterRender,\n AlertModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype AlertNodeProps<B> = AlertModal<B> & ManagedEntity;\n\nexport class AlertNode<B> extends BaseNode<null, B> {\n readonly type: 'alert';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<AlertContentProps>;\n readonly footer?:\n | AlertFooterRender\n | Pick<FooterOptions, 'confirm' | 'hideConfirm'>\n | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(null);\n }\n onConfirm() {\n this.resolve(null);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n ConfirmContentProps,\n ConfirmFooterRender,\n ConfirmModal,\n FooterOptions,\n ManagedEntity,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype ConfirmNodeProps<B> = ConfirmModal<B> & ManagedEntity;\n\nexport class ConfirmNode<B> extends BaseNode<boolean, B> {\n readonly type: 'confirm';\n readonly subtype?: 'info' | 'success' | 'warning' | 'error';\n readonly content?: ReactNode | ComponentType<ConfirmContentProps>;\n readonly footer?: ConfirmFooterRender | FooterOptions | false;\n\n constructor({\n id,\n initiator,\n type,\n subtype,\n title,\n subtitle,\n content,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.subtype = subtype;\n this.content = content;\n this.footer = footer;\n }\n onClose() {\n this.resolve(false);\n }\n onConfirm() {\n this.resolve(true);\n }\n}\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\n ManagedEntity,\n PromptContentProps,\n PromptFooterRender,\n PromptInputProps,\n PromptModal,\n} from '@/promise-modal/types';\n\nimport { BaseNode } from './AbstractBaseNode';\n\ntype PromptNodeProps<T, B> = PromptModal<T, B> & ManagedEntity;\n\nexport class PromptNode<T, B> extends BaseNode<T, B> {\n readonly type: 'prompt';\n readonly content?: ReactNode | ComponentType<PromptContentProps>;\n readonly defaultValue: T | undefined;\n readonly Input: (props: PromptInputProps<T>) => ReactNode;\n readonly disabled?: (value: T) => boolean;\n readonly returnOnCancel?: boolean;\n readonly footer?: PromptFooterRender<T> | FooterOptions | false;\n #value: T | undefined;\n\n constructor({\n id,\n initiator,\n type,\n title,\n subtitle,\n content,\n defaultValue,\n Input,\n disabled,\n returnOnCancel,\n footer,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\n ForegroundComponent,\n BackgroundComponent,\n });\n this.type = type;\n this.content = content;\n this.Input = Input;\n this.defaultValue = defaultValue;\n this.#value = defaultValue;\n this.disabled = disabled;\n this.returnOnCancel = returnOnCancel;\n this.footer = footer;\n }\n\n onChange(value: T) {\n this.#value = value;\n }\n onConfirm() {\n this.resolve(this.#value ?? null);\n }\n onClose() {\n if (this.returnOnCancel) this.resolve(this.#value ?? null);\n else this.resolve(null);\n }\n}\n","import type { ManagedModal } from '@/promise-modal/types';\n\nimport { AlertNode, ConfirmNode, PromptNode } from './ModalNode';\n\nexport const nodeFactory = <T, B>(modal: ManagedModal<T, B>) => {\n switch (modal.type) {\n case 'alert':\n return new AlertNode<B>(modal);\n case 'confirm':\n return new ConfirmNode<B>(modal);\n case 'prompt':\n return new PromptNode<T, B>(modal);\n }\n // @ts-expect-error: This state is unreachable by design and should NEVER occur.\n throw new Error(`Unknown modal: ${modal.type}`, { modal });\n};\n","const DURATION_REGEX = /^\\s*(\\d+)\\s*(ms|s|m|h)\\s*$/;\n\nexport const getMillisecondsFromDuration = (input: string) => {\n const [, durationString, unit] = input.match(DURATION_REGEX) || [];\n if (!durationString || !unit) return 0;\n const duration = parseInt(durationString);\n if (unit === 'ms') return duration;\n if (unit === 's') return duration * 1000;\n if (unit === 'm') return duration * 60 * 1000;\n if (unit === 'h') return duration * 60 * 60 * 1000;\n else return 0;\n};\n","import { createContext } from 'react';\n\nimport { undefinedFunction } from '@winglet/common-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport type { ModalActions, ModalHandlersWithId } from '@/promise-modal/types';\n\nexport interface ModalDataContextProps extends ModalHandlersWithId {\n modalIds: ModalNode['id'][];\n getModal: Fn<[id: ModalNode['id']], ModalActions>;\n getModalNode: Fn<[id: ModalNode['id']], ModalNode | undefined>;\n setUpdater: Fn<[updater: Fn]>;\n}\n\nexport const ModalDataContext = createContext<ModalDataContextProps>({\n modalIds: [],\n getModalNode: undefinedFunction,\n onChange: undefinedFunction,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onDestroy: undefinedFunction,\n setUpdater: undefinedFunction,\n getModal: () => ({\n modal: undefined,\n onConfirm: undefinedFunction,\n onClose: undefinedFunction,\n onChange: undefinedFunction,\n onDestroy: undefinedFunction,\n }),\n});\n","import {\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useOnMountLayout, useReference } from '@winglet/react-utils';\n\nimport type { Fn } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport { type ModalNode, nodeFactory } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\nimport { useModalOptions } from '@/promise-modal/providers';\nimport type { Modal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\ninterface ModalDataContextProviderProps {\n pathname: string;\n}\n\nexport const ModalDataContextProvider = memo(\n ({\n pathname,\n children,\n }: PropsWithChildren<ModalDataContextProviderProps>) => {\n const modalDictionary = useRef<Map<ModalNode['id'], ModalNode>>(new Map());\n\n const [modalIds, setModalIds] = useState<ModalNode['id'][]>([]);\n const modalIdsRef = useReference(modalIds);\n\n const initiator = useRef(pathname);\n const modalIdSequence = useRef(0);\n\n const options = useModalOptions();\n\n const duration = useMemo(\n () => getMillisecondsFromDuration(options.duration),\n [options],\n );\n\n useOnMountLayout(() => {\n const { manualDestroy, closeOnBackdropClick } = options;\n\n for (const data of ModalManager.prerender) {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => [...ids, modal.id]);\n }\n\n ModalManager.setupOpen((data: Modal) => {\n const modal = nodeFactory({\n ...data,\n id: modalIdSequence.current++,\n initiator: initiator.current,\n manualDestroy:\n data.manualDestroy !== undefined\n ? data.manualDestroy\n : manualDestroy,\n closeOnBackdropClick:\n data.closeOnBackdropClick !== undefined\n ? data.closeOnBackdropClick\n : closeOnBackdropClick,\n });\n modalDictionary.current.set(modal.id, modal);\n setModalIds((ids) => {\n const aliveIds = ids.filter((id) => {\n const destroyed = !modalDictionary.current.get(id)?.alive;\n if (destroyed) modalDictionary.current.delete(id);\n return !destroyed;\n });\n return [...aliveIds, modal.id];\n });\n });\n ModalManager.clearPrerender();\n });\n\n useLayoutEffect(() => {\n for (const id of modalIdsRef.current) {\n const modal = modalDictionary.current.get(id);\n if (!modal?.alive) continue;\n if (modal.initiator === pathname) modal.onShow();\n else modal.onHide();\n }\n initiator.current = pathname;\n }, [modalIdsRef, pathname]);\n\n const getModalNode = useCallback((modalId: ModalNode['id']) => {\n return modalDictionary.current.get(modalId);\n }, []);\n\n const onDestroy = useCallback((modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onDestroy();\n updaterRef.current?.();\n }, []);\n\n const updaterRef = useRef<Fn>();\n const hideModal = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onHide();\n updaterRef.current?.();\n if (!modal.manualDestroy)\n setTimeout(() => {\n modal.onDestroy();\n }, duration);\n },\n [duration],\n );\n\n const onChange = useCallback((modalId: ModalNode['id'], value: any) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n if (modal.type === 'prompt') modal.onChange(value);\n }, []);\n\n const onConfirm = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onConfirm();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const onClose = useCallback(\n (modalId: ModalNode['id']) => {\n const modal = modalDictionary.current.get(modalId);\n if (!modal) return;\n modal.onClose();\n hideModal(modalId);\n },\n [hideModal],\n );\n\n const getModal = useCallback(\n (modalId: ModalNode['id']) => ({\n modal: getModalNode(modalId),\n onConfirm: () => onConfirm(modalId),\n onClose: () => onClose(modalId),\n onChange: (value: any) => onChange(modalId, value),\n onDestroy: () => onDestroy(modalId),\n }),\n [getModalNode, onConfirm, onClose, onChange, onDestroy],\n );\n\n const value = useMemo(() => {\n return {\n modalIds,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n getModal,\n setUpdater: (updater: Fn) => {\n updaterRef.current = updater;\n },\n };\n }, [\n modalIds,\n getModal,\n getModalNode,\n onChange,\n onConfirm,\n onClose,\n onDestroy,\n ]);\n\n return (\n <ModalDataContext.Provider value={value}>\n {children}\n </ModalDataContext.Provider>\n );\n },\n);\n","import { useContext, useMemo } from 'react';\n\nimport type { ManagedModal } from '@/promise-modal/types';\n\nimport { ModalDataContext } from './ModalDataContext';\n\nexport const useModalDataContext = () => useContext(ModalDataContext);\n\nexport const useModal = (id: ManagedModal['id']) => {\n const { getModal } = useModalDataContext();\n return useMemo(() => getModal(id), [id, getModal]);\n};\n","import { css } from '@emotion/css';\n\nexport const anchor = css`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 1000;\n transition: background-color ease-in-out;\n`;\n","import { memo, useEffect } from 'react';\n\nimport { useTick, withErrorBoundary } from '@winglet/react-utils';\n\nimport { Presenter } from '@/promise-modal/components/Presenter';\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport { useModalContext } from '@/promise-modal/providers';\nimport { useModalDataContext } from '@/promise-modal/providers/ModalDataContext';\n\nimport { anchor } from './classNames.emotion';\n\nconst AnchorInner = () => {\n const [key, update] = useTick();\n\n const { modalIds, setUpdater } = useModalDataContext();\n\n useEffect(() => {\n setUpdater(update);\n }, [setUpdater, update]);\n\n const { options } = useModalContext();\n\n const dimmed = useActiveModalCount(key);\n\n return (\n <div\n className={anchor}\n style={{\n transitionDuration: options.duration,\n backgroundColor: dimmed ? options.backdrop : 'transparent',\n }}\n >\n {modalIds.map((id) => {\n return <Presenter key={id} modalId={id} />;\n })}\n </div>\n );\n};\n\nexport const Anchor = memo(withErrorBoundary(AnchorInner));\n","import { css } from '@emotion/css';\n\nexport const fallback = css`\n margin: unset;\n`;\n\nexport const frame = css`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: white;\n padding: 20px 80px;\n gap: 10px;\n border: 1px solid black;\n`;\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport { fallback } from './classNames.emotion';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={fallback}>{children}</div>;\n};\n","import type { FooterComponentProps } from '@/promise-modal/types';\n\nexport const FallbackFooter = ({\n confirmLabel,\n hideConfirm = false,\n cancelLabel,\n hideCancel = false,\n disabled,\n onConfirm,\n onCancel,\n}: FooterComponentProps) => {\n return (\n <div>\n {!hideConfirm && (\n <button onClick={onConfirm} disabled={disabled}>\n {confirmLabel || '확인'}\n </button>\n )}\n\n {!hideCancel && typeof onCancel === 'function' && (\n <button onClick={onCancel}>{cancelLabel || '취소'}</button>\n )}\n </div>\n );\n};\n","import {\n type ForwardedRef,\n type PropsWithChildren,\n forwardRef,\n useMemo,\n} from 'react';\n\nimport { useActiveModalCount } from '@/promise-modal/hooks/useActiveModalCount';\nimport type { ModalFrameProps } from '@/promise-modal/types';\n\nimport { frame } from './classNames.emotion';\n\nconst MAX_MODAL_COUNT = 5;\nconst MAX_MODAL_LEVEL = 3;\n\nexport const FallbackForegroundFrame = forwardRef(\n (\n { id, onChangeOrder, children }: PropsWithChildren<ModalFrameProps>,\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const activeCount = useActiveModalCount();\n const [level, offset] = useMemo(() => {\n const stacked = activeCount > 1;\n const level = stacked\n ? (Math.floor(id / MAX_MODAL_COUNT) % MAX_MODAL_LEVEL) * 100\n : 0;\n const offset = stacked ? (id % MAX_MODAL_COUNT) * 35 : 0;\n return [level, offset];\n }, [activeCount, id]);\n\n return (\n <div\n ref={ref}\n className={frame}\n onClick={onChangeOrder}\n style={{\n marginBottom: `calc(25vh + ${level}px)`,\n marginLeft: `${level}px`,\n transform: `translate(${offset}px, ${offset}px)`,\n }}\n >\n {children}\n </div>\n );\n },\n);\n","import { useLayoutEffect, useState } from 'react';\n\nexport const usePathname = () => {\n const [pathname, setPathname] = useState(window.location.pathname);\n\n useLayoutEffect(() => {\n let requestId: number;\n\n const checkPathname = () => {\n if (requestId) cancelAnimationFrame(requestId);\n if (pathname !== window.location.pathname) {\n setPathname(window.location.pathname);\n } else {\n requestId = requestAnimationFrame(checkPathname);\n }\n };\n\n requestId = requestAnimationFrame(checkPathname);\n\n return () => {\n if (requestId) cancelAnimationFrame(requestId);\n };\n }, [pathname]);\n\n return { pathname };\n};\n","import { type ComponentType, createContext } from 'react';\n\nimport type { Color, Duration } from '@aileron/types';\n\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport type {\n BackgroundComponent,\n FooterComponentProps,\n ForegroundComponent,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ForegroundComponent;\n BackgroundComponent?: BackgroundComponent;\n TitleComponent: ComponentType<WrapperComponentProps>;\n SubtitleComponent: ComponentType<WrapperComponentProps>;\n ContentComponent: ComponentType<WrapperComponentProps>;\n FooterComponent: ComponentType<FooterComponentProps>;\n options: {\n duration: Duration;\n backdrop: Color;\n manualDestroy: boolean;\n closeOnBackdropClick: boolean;\n };\n}\n\nexport const ModalContext = createContext<ModalContextProps>({\n ForegroundComponent: FallbackForegroundFrame,\n TitleComponent: FallbackTitle,\n SubtitleComponent: FallbackSubtitle,\n ContentComponent: FallbackContent,\n FooterComponent: FallbackFooter,\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n manualDestroy: false,\n closeOnBackdropClick: true,\n },\n});\n","import {\n type ComponentType,\n type PropsWithChildren,\n memo,\n useMemo,\n useRef,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport { useOnMount, useTick } from '@winglet/react-utils';\n\nimport type { Color, Dictionary, Duration } from '@aileron/types';\n\nimport { ModalManager } from '@/promise-modal/app/ModalManager';\nimport {\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_BACKDROP_COLOR,\n} from '@/promise-modal/app/constant';\nimport { Anchor } from '@/promise-modal/components/Anchor';\nimport {\n FallbackContent,\n FallbackFooter,\n FallbackForegroundFrame,\n FallbackSubtitle,\n FallbackTitle,\n} from '@/promise-modal/components/FallbackComponents';\nimport { usePathname as useDefaultPathname } from '@/promise-modal/hooks/useDefaultPathname';\nimport type {\n FooterComponentProps,\n ModalFrameProps,\n WrapperComponentProps,\n} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { UserDefinedContextProvider } from '../UserDefinedContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<WrapperComponentProps>;\n SubtitleComponent?: ComponentType<WrapperComponentProps>;\n ContentComponent?: ComponentType<WrapperComponentProps>;\n FooterComponent?: ComponentType<FooterComponentProps>;\n options?: {\n /** Modal transition time(ms, s) */\n duration?: Duration;\n /** Modal backdrop color */\n backdrop?: Color;\n /** Whether to destroy the modal manually */\n manualDestroy?: boolean;\n /** Whether to close the modal when the backdrop is clicked */\n closeOnBackdropClick?: boolean;\n };\n context?: Dictionary;\n usePathname?: () => { pathname: string };\n}\n\nexport const ModalContextProvider = memo(\n ({\n ForegroundComponent,\n BackgroundComponent,\n TitleComponent,\n SubtitleComponent,\n ContentComponent,\n FooterComponent,\n options,\n context,\n usePathname,\n children,\n }: PropsWithChildren<ModalContextProviderProps>) => {\n const { pathname } = (usePathname || useDefaultPathname)();\n const [, update] = useTick();\n const portalRef = useRef<HTMLElement | null>(null);\n\n useOnMount(() => {\n portalRef.current = ModalManager.anchor('div');\n update();\n return () => {\n if (portalRef.current) {\n portalRef.current.remove();\n }\n };\n });\n\n const value = useMemo(\n () => ({\n BackgroundComponent,\n ForegroundComponent: ForegroundComponent || FallbackForegroundFrame,\n TitleComponent: TitleComponent || FallbackTitle,\n SubtitleComponent: SubtitleComponent || FallbackSubtitle,\n ContentComponent: memo(ContentComponent || FallbackContent),\n FooterComponent: memo(FooterComponent || FallbackFooter),\n options: {\n duration: DEFAULT_ANIMATION_DURATION,\n backdrop: DEFAULT_BACKDROP_COLOR,\n closeOnBackdropClick: true,\n manualDestroy: false,\n ...options,\n } satisfies ModalContextProviderProps['options'],\n }),\n [\n ForegroundComponent,\n BackgroundComponent,\n ContentComponent,\n FooterComponent,\n SubtitleComponent,\n TitleComponent,\n options,\n ],\n );\n\n return (\n <ModalContext.Provider value={value}>\n {children}\n {portalRef.current &&\n createPortal(\n <UserDefinedContextProvider context={context}>\n <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>\n </UserDefinedContextProvider>,\n portalRef.current,\n )}\n </ModalContext.Provider>\n );\n },\n);\n","import { useContext } from 'react';\n\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { ModalContext } from './ModalContext';\n\nexport const useModalContext = () => useContext(ModalContext);\n\nexport const useModalOptions = () => {\n const { options } = useContext(ModalContext);\n return options;\n};\n\nexport const useModalDuration = () => {\n const { duration } = useModalOptions();\n return { duration, milliseconds: getMillisecondsFromDuration(duration) };\n};\n\nexport const useModalBackdrop = () => {\n const { backdrop } = useModalOptions();\n return backdrop;\n};\n","import { useEffect, useRef } from 'react';\n\nimport { isString } from '@winglet/common-utils';\n\nimport type { Duration } from '@aileron/types';\n\nimport type { ModalNode } from '@/promise-modal/core';\nimport { getMillisecondsFromDuration } from '@/promise-modal/helpers/getMillisecondsFromDuration';\n\nimport { useModal } from '../providers';\nimport { useSubscribeModal } from './useSubscribeModal';\n\nexport const useDestroyAfter = (\n modalId: ModalNode['id'],\n duration: Duration | number,\n) => {\n const { modal, onDestroy } = useModal(modalId);\n const tick = useSubscribeModal(modal);\n\n const reference = useRef({\n modal,\n onDestroy,\n milliseconds: isString(duration)\n ? getMillisecondsFromDuration(duration)\n : duration,\n });\n\n useEffect(() => {\n const { modal, onDestroy, milliseconds } = reference.current;\n if (!modal || modal.visible || !modal.alive) return;\n const timer = setTimeout(() => {\n onDestroy();\n }, milliseconds);\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [tick]);\n};\n"],"names":["prerenderListRef","current","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","prefix","document","getElementById","id","node","createElement","setAttribute","getRandomString","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","UserDefinedContext","createContext","context","EMPTY_OBJECT","UserDefinedContextProvider","children","contextValue","useMemo","_jsx","Provider","value","useUserDefinedContext","useContext","background","css","process","env","NODE_ENV","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","active","visible","BackgroundFrame","modalId","onChangeOrder","BackgroundComponent","useModalContext","userDefinedContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","stopPropagation","Background","className","cx","visible$1","manualDestroy","alive","active$1","onClick","type","initiator","foreground","AlertInner","memo","handlers","title","subtitle","content","footer","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","withErrorBoundary","setValue","useState","handleChange","inputValue","input","isFunction","setTimeout","ForegroundFrame","ForegroundComponent","Foreground","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","presenter","increment","counterFactory","Presenter","ref","useRef","handleChangeOrder","style","zIndex","useActiveModalCount","modalIds","getModalNode","useModalDataContext","count","alert","subtype","Promise","resolve","reject","error","result","prompt","returnOnCancel","BaseNode","__classPrivateFieldGet","this","_BaseNode_alive","_BaseNode_visible","constructor","Object","defineProperty","set","_BaseNode_resolve","_BaseNode_listeners","__classPrivateFieldSet","listener","filter","l","publish","call","needPublish","onShow","onHide","AlertNode","super","ConfirmNode","PromptNode","_PromptNode_value","nodeFactory","Error","DURATION_REGEX","getMillisecondsFromDuration","durationString","unit","match","duration","parseInt","ModalDataContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","useOnMountLayout","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","Anchor","key","useEffect","dimmed","transitionDuration","backgroundColor","backdrop","map","fallback","frame","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","Math","floor","marginBottom","marginLeft","transform","usePathname","setPathname","window","location","requestId","checkPathname","cancelAnimationFrame","requestAnimationFrame","ModalContext","ModalContextProvider","useDefaultPathname","portalRef","remove","createPortal","useModalDuration","milliseconds","useModalBackdrop","useDestroyAfter","reference","timer","clearTimeout"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lerx/promise-modal",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.19",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/vincent-kk/albatrion.git",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"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",
|
|
33
33
|
"storybook": "storybook dev -p 6006",
|
|
34
34
|
"build-storybook": "storybook build",
|
|
35
|
+
"storybook:upgrade": "npx storybook@latest upgrade",
|
|
35
36
|
"version:patch": "yarn version patch",
|
|
36
37
|
"version:minor": "yarn version minor",
|
|
37
38
|
"version:major": "yarn version major",
|
|
@@ -40,8 +41,8 @@
|
|
|
40
41
|
},
|
|
41
42
|
"dependencies": {
|
|
42
43
|
"@emotion/css": "^11.0.0",
|
|
43
|
-
"@winglet/common-utils": "^0.0.
|
|
44
|
-
"@winglet/react-utils": "^0.0.
|
|
44
|
+
"@winglet/common-utils": "^0.0.19",
|
|
45
|
+
"@winglet/react-utils": "^0.0.19"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
48
|
"@babel/core": "^7.26.0",
|
|
@@ -55,12 +56,12 @@
|
|
|
55
56
|
"@size-limit/preset-app": "^11.1.6",
|
|
56
57
|
"@size-limit/preset-big-lib": "^11.1.6",
|
|
57
58
|
"@size-limit/preset-small-lib": "^11.1.6",
|
|
58
|
-
"@storybook/addon-essentials": "^8.
|
|
59
|
-
"@storybook/addon-interactions": "^8.
|
|
60
|
-
"@storybook/blocks": "^8.
|
|
61
|
-
"@storybook/react": "^8.
|
|
62
|
-
"@storybook/react-vite": "^8.
|
|
63
|
-
"@storybook/test": "^8.
|
|
59
|
+
"@storybook/addon-essentials": "^8.6.6",
|
|
60
|
+
"@storybook/addon-interactions": "^8.6.6",
|
|
61
|
+
"@storybook/blocks": "^8.6.6",
|
|
62
|
+
"@storybook/react": "^8.6.6",
|
|
63
|
+
"@storybook/react-vite": "^8.6.6",
|
|
64
|
+
"@storybook/test": "^8.6.6",
|
|
64
65
|
"@testing-library/dom": "^10.4.0",
|
|
65
66
|
"@testing-library/jest-dom": "^6.6.3",
|
|
66
67
|
"@testing-library/react": "^16.1.0",
|
|
@@ -88,7 +89,7 @@
|
|
|
88
89
|
"rollup-plugin-visualizer": "^5.12.0",
|
|
89
90
|
"sass-embedded": "^1.83.0",
|
|
90
91
|
"size-limit": "^11.1.6",
|
|
91
|
-
"storybook": "^8.
|
|
92
|
+
"storybook": "^8.6.6",
|
|
92
93
|
"tsc-alias": "^1.8.10",
|
|
93
94
|
"typescript": "^5.7.2",
|
|
94
95
|
"vite": "^5.4.11",
|