@lerx/promise-modal 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,7 +2,7 @@ import type { ComponentType, ReactNode } from 'react';
|
|
|
2
2
|
import type { AlertContentProps, AlertFooterRender, FooterOptions, ModalBackground } from '../../types';
|
|
3
3
|
interface AlertProps<B> {
|
|
4
4
|
subtype?: 'info' | 'success' | 'warning' | 'error';
|
|
5
|
-
title
|
|
5
|
+
title?: ReactNode;
|
|
6
6
|
subtitle?: ReactNode;
|
|
7
7
|
content?: ReactNode | ComponentType<AlertContentProps>;
|
|
8
8
|
background?: ModalBackground<B>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../src/core/handle/alert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,UAAU,UAAU,CAAC,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../src/core/handle/alert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,UAAU,UAAU,CAAC,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,EACH,iBAAiB,GACjB,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,aAAa,CAAC,GAC9C,KAAK,CAAC;IACV,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,yGASpB,UAAU,CAAC,CAAC,CAAC,kBAmBf,CAAC"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),o=require("react"),t=require("react-dom"),n=require("clsx"),r=require("/Users/Vincent/Workspace/
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),o=require("react"),t=require("react-dom"),n=require("clsx"),r=require("/Users/Vincent/Workspace/altovion/node_modules/style-inject/dist/style-inject.es.js");"function"==typeof SuppressedError&&SuppressedError;const i=e=>{const t=o.useRef(e);return t.current=e,t},l=e=>{const t=i(e);return o.useCallback(((...e)=>"function"!=typeof t.current?null:t.current(...e)),[t])},s=e=>{o.useEffect(e,[])},a=()=>{const[e,t]=o.useState(0);return[e,o.useCallback((()=>{t((e=>e+1))}),[])]},c=(e,t)=>e?o.isValidElement(e)?e:(e=>(e=>"function"==typeof e&&!(e.prototype&&e.prototype.isReactComponent))(e)||(e=>"object"==typeof e&&null!==e&&e.$$typeof===Symbol.for("react.memo"))(e)||(e=>!("function"!=typeof e||!e.prototype||!e.prototype.isReactComponent))(e))(e)?o.createElement(e,t):null:null,u=()=>{},d=e=>"string"==typeof e;"function"==typeof SuppressedError&&SuppressedError;const m={current:[]},b={current:e=>{m.current.push(e)}},p={current:null},f={get prerender(){return m.current},clearPrerender(){m.current=[]},open(e){b.current(e)},setupOpen(e){b.current=e},anchor(e,o="modal-anchor"){if(p.current){const e=document.getElementById(p.current.id);if(e)return e}const t=document.createElement(e);return t.setAttribute("id",`${o}-${`${Math.random()}`.slice(2)}`),document.body.appendChild(t),p.current=t,t}},C="300ms",h="rgba(0, 0, 0, 0.5)";var y="Background-module__active___Zi50h",g="Background-module__visible___tAN9F";r(".Background-module__root___zat-I{display:none;inset:0;pointer-events:none;position:fixed;z-index:-999}.Background-module__root___zat-I.Background-module__active___Zi50h{pointer-events:all!important}.Background-module__root___zat-I.Background-module__visible___tAN9F{align-items:center;display:flex;justify-content:center}.Background-module__root___zat-I>*{pointer-events:none}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhY2tncm91bmQubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FDRSxZQUFhLENBRWIsT0FBUSxDQUVSLG1CQUFvQixDQUhwQixjQUFlLENBRWYsWUFFRixDQUVBLG1FQUNFLDRCQUNGLENBRUEsb0VBRUUsa0JBQW1CLENBRG5CLFlBQWEsQ0FFYixzQkFDRixDQUVBLG1DQUNFLG1CQUNGIiwiZmlsZSI6IkJhY2tncm91bmQubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5yb290IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBpbnNldDogMDtcbiAgei1pbmRleDogLTk5OTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5yb290LmFjdGl2ZSB7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGwgIWltcG9ydGFudDtcbn1cblxuLnJvb3QudmlzaWJsZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ucm9vdCA+ICoge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbiJdfQ== */");const v=({modalId:t,onChangeOrder:r})=>{const{BackgroundComponent:i}=re(),{modal:l,onClose:s,onChange:a,onConfirm:c,onDestroy:u}=P(t),d=o.useCallback((e=>{l&&l.closeOnBackdropClick&&l.visible&&s(),e.stopPropagation()}),[l,s]);if(!l)return null;const m=l.manualDestroy?l.alive:l.visible;return e.jsx("div",{className:n("Background-module__root___zat-I",{[g]:m,[y]:l.closeOnBackdropClick&&m}),onClick:d,children:i&&e.jsx(i,{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:a,onConfirm:c,onClose:s,onDestroy:u,onChangeOrder:r})})};var k="Foreground-module__active___f-kK8";r(".Foreground-module__root___Go3o8{display:none;inset:0;pointer-events:none;position:fixed;z-index:1}.Foreground-module__root___Go3o8.Foreground-module__active___f-kK8{align-items:center;display:flex!important;justify-content:center}.Foreground-module__root___Go3o8.Foreground-module__active___f-kK8>*{pointer-events:all!important}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZvcmVncm91bmQubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FFRSxZQUFhLENBRWIsT0FBUSxDQUhSLG1CQUFvQixDQUVwQixjQUFlLENBRWYsU0FDRixDQUVBLG1FQUdFLGtCQUFtQixDQUZuQixzQkFBd0IsQ0FDeEIsc0JBRUYsQ0FFQSxxRUFDRSw0QkFDRiIsImZpbGUiOiJGb3JlZ3JvdW5kLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIucm9vdCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAxO1xufVxuXG4ucm9vdC5hY3RpdmUge1xuICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4ucm9vdC5hY3RpdmUgPiAqIHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbCAhaW1wb3J0YW50O1xufVxuIl19 */");const x=o.memo((({modal:t,handlers:n})=>{const{title:r,subtitle:i,content:s,footer:a}=o.useMemo((()=>t),[t]),{onConfirm:u}=o.useMemo((()=>n),[n]),m=l(u),{TitleComponent:b,SubtitleComponent:p,ContentComponent:f,FooterComponent:C}=re();return e.jsxs(o.Fragment,{children:[r&&(d(r)?e.jsx(b,{children:r}):r),i&&(d(i)?e.jsx(p,{children:i}):i),s&&(d(s)?e.jsx(f,{children:s}):c(s,{onConfirm:m})),!1!==a&&("function"==typeof a?a({onConfirm:m}):e.jsx(C,{onConfirm:m,confirmLabel:a?.confirm,hideConfirm:a?.hideConfirm}))]})})),I=o.memo((({modal:t,handlers:n})=>{const{title:r,subtitle:i,content:s,footer:a}=o.useMemo((()=>t),[t]),{onConfirm:u,onClose:m}=o.useMemo((()=>n),[n]),b=l(u),p=l(m),{TitleComponent:f,SubtitleComponent:C,ContentComponent:h,FooterComponent:y}=re();return e.jsxs(o.Fragment,{children:[r&&(d(r)?e.jsx(f,{children:r}):r),i&&(d(i)?e.jsx(C,{children:i}):i),s&&(d(s)?e.jsx(h,{children:s}):c(s,{onConfirm:b,onCancel:p})),!1!==a&&("function"==typeof a?a({onConfirm:b,onCancel:p}):e.jsx(y,{onConfirm:b,onCancel:p,confirmLabel:a?.confirm,cancelLabel:a?.cancel,hideConfirm:a?.hideConfirm,hideCancel:a?.hideCancel}))]})})),B=o.memo((({modal:t,handlers:n})=>{const{Input:r,defaultValue:i,disabled:s,title:a,subtitle:u,content:m,footer:b}=o.useMemo((()=>({...t,Input:o.memo(t.Input)})),[t]),[p,f]=o.useState(i),{onChange:C,onClose:h,onConfirm:y}=o.useMemo((()=>n),[n]),g=l(h),v=l((e=>{const o="function"==typeof e?e(p):e;f(o),C(o)})),k=o.useCallback((()=>{setTimeout((()=>{y()}))}),[y]),x=o.useMemo((()=>!!p&&!!s?.(p)),[s,p]),{TitleComponent:I,SubtitleComponent:B,ContentComponent:_,FooterComponent:F}=re();return e.jsxs(o.Fragment,{children:[a&&(d(a)?e.jsx(I,{children:a}):a),u&&(d(u)?e.jsx(B,{children:u}):u),m&&(d(m)?e.jsx(_,{children:m}):c(m,{onConfirm:k,onCancel:g})),r&&e.jsx(r,{defaultValue:i,value:p,onChange:v,onConfirm:k}),!1!==b&&("function"==typeof b?b({onConfirm:k,onCancel:g,onChange:v,value:p,disabled:x}):e.jsx(F,{onConfirm:k,onCancel:g,disabled:x,confirmLabel:b?.confirm,cancelLabel:b?.cancel,hideConfirm:b?.hideConfirm,hideCancel:b?.hideCancel}))]})})),_=({modalId:o,onChangeOrder:t})=>{const{ForegroundComponent:r}=re(),{modal:i,onChange:l,onConfirm:s,onClose:a,onDestroy:c}=P(o);return i?e.jsx("div",{className:n("Foreground-module__root___Go3o8",{[k]:i.manualDestroy?i.alive:i.visible}),children:e.jsxs(r,{id:i.id,type:i.type,alive:i.alive,visible:i.visible,initiator:i.initiator,manualDestroy:i.manualDestroy,closeOnBackdropClick:i.closeOnBackdropClick,background:i.background,onChange:l,onConfirm:s,onClose:a,onDestroy:c,onChangeOrder:t,children:["alert"===i.type&&e.jsx(x,{modal:i,handlers:{onConfirm:s}}),"confirm"===i.type&&e.jsx(I,{modal:i,handlers:{onConfirm:s,onClose:a}}),"prompt"===i.type&&e.jsx(B,{modal:i,handlers:{onChange:l,onConfirm:s,onClose:a}})]})}):null},F=e=>{const[o,t]=a();return s((()=>{if(e)return e.subscribe(t)})),o};r(".Presenter-module__modal___HyHFW{inset:0;overflow:hidden;pointer-events:none;position:fixed}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByZXNlbnRlci5tb2R1bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUVFLE9BQVEsQ0FFUixlQUFnQixDQURoQixtQkFBb0IsQ0FGcEIsY0FJRiIsImZpbGUiOiJQcmVzZW50ZXIubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuIl19 */");let j=1;const Q=o.memo((({modalId:t})=>{const n=o.useRef(null),{modal:r}=P(t);F(r);const i=l((()=>{n.current&&(n.current.style.zIndex=""+j++)}));return e.jsxs("div",{ref:n,className:"Presenter-module__modal___HyHFW",children:[e.jsx(v,{modalId:t,onChangeOrder:i}),e.jsx(_,{modalId:t,onChangeOrder:i})]})})),G=(e=0)=>{const{modalIds:t,getModalNode:n}=E();return o.useMemo((()=>{let e=0;for(const o of t)n(o)?.visible&&e++;return e}),[n,t,e])};
|
|
2
2
|
/******************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../winglet/react-utils/dist/index.esm.js","../../../winglet/common-utils/dist/index.esm.js","../src/app/ModalManager.ts","../src/app/constant.ts","../src/components/Background/Background.tsx","../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/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/Anchor.tsx","../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{useRef as t,useEffect as e,useLayoutEffect as r,useCallback as n,useMemo as o,useState as c,isValidElement as s,createElement as i}from\"react\";export{isValidElement as isReactElement}from\"react\";const a=t=>!(\"function\"!=typeof t||!t.prototype||!t.prototype.isReactComponent),u=t=>\"function\"==typeof t&&!(t.prototype&&t.prototype.isReactComponent),h=t=>\"object\"==typeof t&&null!==t&&t.$$typeof===Symbol.for(\"react.memo\"),p=t=>u(t)||h(t)||a(t),f=t=>Object.fromEntries(Object.entries(t).filter((([,t])=>p(t)))),l=Array.isArray;\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\nfunction y(t,e,r,n){if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return e.get(t)}function d(t,e,r,n,o){if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return e.set(t,r),r}var b,m,C,j;\"function\"==typeof SuppressedError&&SuppressedError;class w{constructor(t,e){b.set(this,0),m.set(this,0),C.set(this,0),j.set(this,0),this.reset(e),\"string\"==typeof t&&t.length>0&&this.hash(t)}hash(t){let e,r=y(this,b),n=y(this,C),o=0,c=t.length;switch(d(this,j,y(this,j)+c),y(this,m)){case 0:n^=c>o?65535&t.charCodeAt(o++):0;case 1:n^=c>o?(65535&t.charCodeAt(o++))<<8:0;case 2:n^=c>o?(65535&t.charCodeAt(o++))<<16:0;case 3:c>o&&(n^=(255&t.charCodeAt(o))<<24,n^=(65280&t.charCodeAt(o++))>>8)}if(d(this,m,c+y(this,m)&3),c-=y(this,m),c>0){for(;n=11601*n+3432906752*(65535&n)&4294967295,n=n<<15|n>>>17,n=13715*n+461832192*(65535&n)&4294967295,r^=n,r=r<<13|r>>>19,r=5*r+3864292196&4294967295,!(o>=c);)n=65535&t.charCodeAt(o++)^(65535&t.charCodeAt(o++))<<8^(65535&t.charCodeAt(o++))<<16,e=t.charCodeAt(o++),n^=(255&e)<<24^(65280&e)>>8;switch(n=0,y(this,m)){case 3:n^=(65535&t.charCodeAt(o+2))<<16;case 2:n^=(65535&t.charCodeAt(o+1))<<8;case 1:n^=65535&t.charCodeAt(o)}}return d(this,b,r),d(this,C,n),this}result(){let t=y(this,C),e=y(this,b);return t>0&&(t=11601*t+3432906752*(65535&t)&4294967295,t=t<<15|t>>>17,t=13715*t+461832192*(65535&t)&4294967295,e^=t),e^=y(this,j),e^=e>>>16,e=51819*e+2246770688*(65535&e)&4294967295,e^=e>>>13,e=44597*e+3266445312*(65535&e)&4294967295,e^=e>>>16,e>>>0}reset(t){return d(this,b,\"number\"==typeof t?t:0),d(this,m,d(this,C,d(this,j,0))),this}}b=new WeakMap,m=new WeakMap,C=new WeakMap,j=new WeakMap;const A=e=>{const r=t();var n;return r.current||(r.current={value:(n=e,\"function\"==typeof n?e():e)}),r.current.value},g=(r,n)=>{const o=t(!1);e((()=>{o.current||(o.current=!!r())}),n)},O=(e,n)=>{const o=t(!1);r((()=>{o.current||(o.current=!!e())}),n)},v=e=>{const r=t(e);return r.current=e,r},E=t=>{const e=v(t);return n(((...t)=>\"function\"!=typeof e.current?null:e.current(...t)),[e])},S=t=>{const e=v(t);return o((()=>e.current),[e])},k=t=>{e(t,[])},M=t=>{r(t,[])},W=t=>{e((()=>t),[])},$=t=>{r((()=>t),[])},R=(t,e)=>x(t,e).current,x=(e,r)=>{const n=t(e),c=t(J(e,r)),s=o((()=>J(e,r)),[e,r]);return s&&c.current!==s&&(n.current=e,c.current=s),n},J=(t,e)=>{return(t=>{if(!t)return!0;if(function(t){if(!t||\"object\"!=typeof t)return!1;const e=Object.getPrototypeOf(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e))&&\"[object Object]\"===Object.prototype.toString.call(t)}(t)){for(const e in t)return!1;return!0}return!!l(t)&&0===t.length})(t)?null:(r=((t,e)=>{if(!t||\"object\"!=typeof t)return JSON.stringify(t);const r=Object.entries(t).sort((([t],[e])=>t.localeCompare(e))),n=new Array(r.length);for(let t=0;t<r.length;t++){const[o,c]=r[t];e?.includes(o)||(n[t]=`${o}:${\"object\"==typeof c?JSON.stringify(c):c}`)}return n.join(\"|\")})(t,e),new w(r).result());var r},N=()=>{const[t,e]=c(0);return[t,n((()=>{e((t=>t+1))}),[])]},P=(t,e)=>t?s(t)?t:p(t)?i(t,e):null:null;export{a as isClassComponent,u as isFunctionComponent,h as isMemoComponent,p as isReactComponent,f as remainOnlyReactComponent,P as renderComponent,A as useConstant,g as useEffectUntil,E as useHandle,O as useLayoutEffectUntil,S as useMemorize,k as useOnMount,M as useOnMountLayout,W as useOnUnmount,$ as useOnUnmountLayout,v as useReference,R as useSnapshot,x as useSnapshotReference,N as useTick};\n//# sourceMappingURL=index.esm.js.map\n","const t=1,e=1e3,r=6e4,o=36e5,s=24*o,n=1e3,i=1e6,c=1e3*i,a=1e3*c,f=1e3*a,h=1e3*f,l=[],p={},u=()=>{},y=()=>{},d=()=>null,b=()=>!1,w=()=>!0;function j(t){if(!t||\"object\"!=typeof t)return!1;const e=Object.getPrototypeOf(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e))&&\"[object Object]\"===Object.prototype.toString.call(t)}const g=t=>{if(!j(t))return!1;for(const e in t)return!1;return!0},A=t=>Array.isArray(t)&&0===t.length,m=t=>\"function\"==typeof t,O=t=>Boolean(t),C=t=>void 0===t,v=t=>null===t,E=t=>null==t,S=t=>\"boolean\"==typeof t,k=t=>\"number\"==typeof t,$=t=>\"string\"==typeof t,M=Array.isArray;\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\nfunction P(t,e,r,o){if(\"a\"===r&&!o)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===r?o:\"a\"===r?o.call(t):o?o.value:e.get(t)}function T(t,e,r,o,s){if(\"m\"===o)throw new TypeError(\"Private method is not writable\");if(\"a\"===o&&!s)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!s:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===o?s.call(t,r):s?s.value=r:e.set(t,r),r}var x,W,J,N;\"function\"==typeof SuppressedError&&SuppressedError;class B{constructor(t,e){x.set(this,0),W.set(this,0),J.set(this,0),N.set(this,0),this.reset(e),\"string\"==typeof t&&t.length>0&&this.hash(t)}hash(t){let e,r=P(this,x,\"f\"),o=P(this,J,\"f\"),s=0,n=t.length;switch(T(this,N,P(this,N,\"f\")+n,\"f\"),P(this,W,\"f\")){case 0:o^=n>s?65535&t.charCodeAt(s++):0;case 1:o^=n>s?(65535&t.charCodeAt(s++))<<8:0;case 2:o^=n>s?(65535&t.charCodeAt(s++))<<16:0;case 3:n>s&&(o^=(255&t.charCodeAt(s))<<24,o^=(65280&t.charCodeAt(s++))>>8)}if(T(this,W,n+P(this,W,\"f\")&3,\"f\"),n-=P(this,W,\"f\"),n>0){for(;o=11601*o+3432906752*(65535&o)&4294967295,o=o<<15|o>>>17,o=13715*o+461832192*(65535&o)&4294967295,r^=o,r=r<<13|r>>>19,r=5*r+3864292196&4294967295,!(s>=n);)o=65535&t.charCodeAt(s++)^(65535&t.charCodeAt(s++))<<8^(65535&t.charCodeAt(s++))<<16,e=t.charCodeAt(s++),o^=(255&e)<<24^(65280&e)>>8;switch(o=0,P(this,W,\"f\")){case 3:o^=(65535&t.charCodeAt(s+2))<<16;case 2:o^=(65535&t.charCodeAt(s+1))<<8;case 1:o^=65535&t.charCodeAt(s)}}return T(this,x,r,\"f\"),T(this,J,o,\"f\"),this}result(){let t=P(this,J,\"f\"),e=P(this,x,\"f\");return t>0&&(t=11601*t+3432906752*(65535&t)&4294967295,t=t<<15|t>>>17,t=13715*t+461832192*(65535&t)&4294967295,e^=t),e^=P(this,N,\"f\"),e^=e>>>16,e=51819*e+2246770688*(65535&e)&4294967295,e^=e>>>13,e=44597*e+3266445312*(65535&e)&4294967295,e^=e>>>16,e>>>0}reset(t){return T(this,x,\"number\"==typeof t?t:0,\"f\"),T(this,W,T(this,J,T(this,N,0,\"f\"),\"f\"),\"f\"),this}}x=new WeakMap,W=new WeakMap,J=new WeakMap,N=new WeakMap;const q=t=>new B(t).result(),z=t=>Object.fromEntries(Object.entries(t).map((([t,e])=>j(e)?[t,z(e)]:[t,e])).filter((([,t])=>void 0!==t))),D=(t,e)=>{if(!t||\"object\"!=typeof t)return JSON.stringify(t);const r=Object.entries(t).sort((([t],[e])=>t.localeCompare(e))),o=new Array(r.length);for(let t=0;t<r.length;t++){const[s,n]=r[t];e?.includes(s)||(o[t]=`${s}:${\"object\"==typeof n?JSON.stringify(n):n}`)}return o.join(\"|\")},F=t=>{if(!t||\"object\"!=typeof t)return String(t);const e=[{obj:t,prefix:\"\"}],r=[];for(;e.length>0;){const{obj:t,prefix:o}=e.pop(),s=Object.keys(t).sort();for(const n of s){const s=t[n],i=o?`${o}.${n}`:n;s&&\"object\"==typeof s?e.push({obj:s,prefix:i}):r.push(`${i}:${String(s)}`)}}return r.join(\"|\")},G=(t,e=[])=>{if(!t)return{};const r=new Set(e),o=[...e,...Object.keys(t).filter((t=>!r.has(t)))];return Object.fromEntries(o.filter((e=>e in t)).map((e=>[e,t[e]])))},H=(t,e)=>{const r=Object.keys(e),o=r.length;for(let s=0;s<o;s++){const o=r[s],n=e[o],i=t[o];M(n)?t[o]=M(i)?H(i,n):H([],n):j(n)?t[o]=j(i)?H(i,n):H({},n):void 0!==i&&void 0===n||(t[o]=n)}return t},I=()=>`${Math.random()}`.slice(2);export{s as DAY,l as EMPTY_ARRAY,p as EMPTY_OBJECT,h as EXA,c as GIGA,o as HOUR,n as KILO,i as MEGA,t as MILLISECOND,r as MINUTE,B as Murmur3,f as PETA,e as SECOND,a as TERA,b as falseFunction,q as generateHash,I as getRandomNumber,M as isArray,S as isBoolean,A as isEmptyArray,g as isEmptyObject,m as isFunction,E as isNil,v as isNull,k as isNumber,j as isPlainObject,$ as isString,O as isTruthy,C as isUndefined,H as merge,d as nullFunction,z as removeUndefined,G as sortObjectKeys,D as stringifyObject,F as stringifyObjectWithFullSortedKeys,w as trueFunction,y as undefinedFunction,u as voidFunction};\n//# sourceMappingURL=index.esm.js.map\n","import { MutableRefObject } from 'react';\n\nimport { getRandomNumber } from '@winglet/common-utils';\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, label = 'modal-anchor'): 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', `${label}-${getRandomNumber()}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","export const DEFAULT_ANIMATION_DURATION = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR = 'rgba(0, 0, 0, 0.5)';\n","import { type MouseEvent, useCallback } from 'react';\n\nimport cx from 'clsx';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport styles from './Background.module.css';\n\nexport const Background = ({ modalId, onChangeOrder }: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\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 if (!modal) return null;\n\n const visible = modal.manualDestroy ? modal.alive : modal.visible;\n\n return (\n <div\n className={cx(styles.root, {\n [styles.visible]: visible,\n [styles.active]: modal.closeOnBackdropClick && visible,\n })}\n onClick={handleClose}\n >\n {BackgroundComponent && (\n <BackgroundComponent\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 />\n )}\n </div>\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 { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { 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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({ onConfirm: handleConfirm })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\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 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 { 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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\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 />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(modal.Input),\n }),\n [modal],\n );\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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n onChange: handleChange,\n value,\n disabled,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n disabled={disabled}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import cx from 'clsx';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport styles from './Foreground.module.css';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const Foreground = ({ modalId, onChangeOrder }: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(styles.root, {\n [styles.active]: modal.manualDestroy ? modal.alive : modal.visible,\n })}\n >\n <ForegroundComponent\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 >\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 </ForegroundComponent>\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 { 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 styles from './Presenter.module.css';\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={styles.modal}>\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 {\n BaseModal,\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 #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 }: 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.#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 }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 { 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 { 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 { memo, useEffect } from 'react';\n\nimport { useTick } 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 styles from './Anchor.module.css';\n\nexport const Anchor = memo(() => {\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={styles.root}\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","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={styles.fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={styles.fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={styles.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 styles from './styles.module.css';\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={styles.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 {\n type ComponentType,\n type PropsWithChildren,\n createContext,\n} from 'react';\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 { FooterComponentProps, ModalFrameProps } from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ComponentType<PropsWithChildren<ModalFrameProps>>;\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent: ComponentType<PropsWithChildren>;\n SubtitleComponent: ComponentType<PropsWithChildren>;\n ContentComponent: ComponentType<PropsWithChildren>;\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 { 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} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<PropsWithChildren>;\n SubtitleComponent?: ComponentType<PropsWithChildren>;\n ContentComponent?: ComponentType<PropsWithChildren>;\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 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 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 <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>,\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 FooterOptions,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface AlertProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title: string;\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}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 });\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 ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\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}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\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}\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}: 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: ({ defaultValue, onChange, onConfirm }: PromptInputProps<T>) =>\n Input({\n defaultValue,\n onChange,\n onConfirm,\n }),\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 { 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":["SuppressedError","v","e","r","t","current","E","n","k","useEffect","N","c","useState","P","s","isValidElement","prototype","isReactComponent","u","$$typeof","Symbol","for","h","a","p","i","y","$","prerenderListRef","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","label","document","getElementById","id","node","createElement","setAttribute","Math","random","slice","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","Background","modalId","onChangeOrder","BackgroundComponent","useModalContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","visible","stopPropagation","manualDestroy","alive","_jsx","className","cx","styles$4_visible","styles","styles$4_active","onClick","children","type","initiator","background","AlertInner","memo","handlers","title","subtitle","content","footer","useMemo","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","jsx","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","value","setValue","handleChange","inputValue","input","setTimeout","Foreground","ForegroundComponent","styles$3_active","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","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","createContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","Provider","useContext","Anchor","key","dimmed","transitionDuration","backgroundColor","backdrop","map","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","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":["../../../winglet/react-utils/dist/index.esm.js","../../../winglet/common-utils/dist/index.esm.js","../src/app/ModalManager.ts","../src/app/constant.ts","../src/components/Background/Background.tsx","../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/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/Anchor.tsx","../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{useRef as t,useEffect as e,useLayoutEffect as r,useCallback as n,useMemo as o,useState as c,isValidElement as s,createElement as i}from\"react\";export{isValidElement as isReactElement}from\"react\";const a=t=>!(\"function\"!=typeof t||!t.prototype||!t.prototype.isReactComponent),u=t=>\"function\"==typeof t&&!(t.prototype&&t.prototype.isReactComponent),h=t=>\"object\"==typeof t&&null!==t&&t.$$typeof===Symbol.for(\"react.memo\"),p=t=>u(t)||h(t)||a(t),f=t=>Object.fromEntries(Object.entries(t).filter((([,t])=>p(t)))),l=Array.isArray;\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\nfunction y(t,e,r,n){if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return e.get(t)}function d(t,e,r,n,o){if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return e.set(t,r),r}var b,m,C,j;\"function\"==typeof SuppressedError&&SuppressedError;class w{constructor(t,e){b.set(this,0),m.set(this,0),C.set(this,0),j.set(this,0),this.reset(e),\"string\"==typeof t&&t.length>0&&this.hash(t)}hash(t){let e,r=y(this,b),n=y(this,C),o=0,c=t.length;switch(d(this,j,y(this,j)+c),y(this,m)){case 0:n^=c>o?65535&t.charCodeAt(o++):0;case 1:n^=c>o?(65535&t.charCodeAt(o++))<<8:0;case 2:n^=c>o?(65535&t.charCodeAt(o++))<<16:0;case 3:c>o&&(n^=(255&t.charCodeAt(o))<<24,n^=(65280&t.charCodeAt(o++))>>8)}if(d(this,m,c+y(this,m)&3),c-=y(this,m),c>0){for(;n=11601*n+3432906752*(65535&n)&4294967295,n=n<<15|n>>>17,n=13715*n+461832192*(65535&n)&4294967295,r^=n,r=r<<13|r>>>19,r=5*r+3864292196&4294967295,!(o>=c);)n=65535&t.charCodeAt(o++)^(65535&t.charCodeAt(o++))<<8^(65535&t.charCodeAt(o++))<<16,e=t.charCodeAt(o++),n^=(255&e)<<24^(65280&e)>>8;switch(n=0,y(this,m)){case 3:n^=(65535&t.charCodeAt(o+2))<<16;case 2:n^=(65535&t.charCodeAt(o+1))<<8;case 1:n^=65535&t.charCodeAt(o)}}return d(this,b,r),d(this,C,n),this}result(){let t=y(this,C),e=y(this,b);return t>0&&(t=11601*t+3432906752*(65535&t)&4294967295,t=t<<15|t>>>17,t=13715*t+461832192*(65535&t)&4294967295,e^=t),e^=y(this,j),e^=e>>>16,e=51819*e+2246770688*(65535&e)&4294967295,e^=e>>>13,e=44597*e+3266445312*(65535&e)&4294967295,e^=e>>>16,e>>>0}reset(t){return d(this,b,\"number\"==typeof t?t:0),d(this,m,d(this,C,d(this,j,0))),this}}b=new WeakMap,m=new WeakMap,C=new WeakMap,j=new WeakMap;const A=e=>{const r=t();var n;return r.current||(r.current={value:(n=e,\"function\"==typeof n?e():e)}),r.current.value},g=(r,n)=>{const o=t(!1);e((()=>{o.current||(o.current=!!r())}),n)},O=(e,n)=>{const o=t(!1);r((()=>{o.current||(o.current=!!e())}),n)},v=e=>{const r=t(e);return r.current=e,r},E=t=>{const e=v(t);return n(((...t)=>\"function\"!=typeof e.current?null:e.current(...t)),[e])},S=t=>{const e=v(t);return o((()=>e.current),[e])},k=t=>{e(t,[])},M=t=>{r(t,[])},W=t=>{e((()=>t),[])},$=t=>{r((()=>t),[])},R=(t,e)=>x(t,e).current,x=(e,r)=>{const n=t(e),c=t(J(e,r)),s=o((()=>J(e,r)),[e,r]);return s&&c.current!==s&&(n.current=e,c.current=s),n},J=(t,e)=>{return(t=>{if(!t)return!0;if(function(t){if(!t||\"object\"!=typeof t)return!1;const e=Object.getPrototypeOf(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e))&&\"[object Object]\"===Object.prototype.toString.call(t)}(t)){for(const e in t)return!1;return!0}return!!l(t)&&0===t.length})(t)?null:(r=((t,e)=>{if(!t||\"object\"!=typeof t)return JSON.stringify(t);const r=Object.entries(t).sort((([t],[e])=>t.localeCompare(e))),n=new Array(r.length);for(let t=0;t<r.length;t++){const[o,c]=r[t];e?.includes(o)||(n[t]=`${o}:${\"object\"==typeof c?JSON.stringify(c):c}`)}return n.join(\"|\")})(t,e),new w(r).result());var r},N=()=>{const[t,e]=c(0);return[t,n((()=>{e((t=>t+1))}),[])]},P=(t,e)=>t?s(t)?t:p(t)?i(t,e):null:null;export{a as isClassComponent,u as isFunctionComponent,h as isMemoComponent,p as isReactComponent,f as remainOnlyReactComponent,P as renderComponent,A as useConstant,g as useEffectUntil,E as useHandle,O as useLayoutEffectUntil,S as useMemorize,k as useOnMount,M as useOnMountLayout,W as useOnUnmount,$ as useOnUnmountLayout,v as useReference,R as useSnapshot,x as useSnapshotReference,N as useTick};\n//# sourceMappingURL=index.esm.js.map\n","const t=1,e=1e3,r=6e4,o=36e5,s=24*o,n=1e3,i=1e6,c=1e3*i,a=1e3*c,f=1e3*a,h=1e3*f,l=[],p={},u=()=>{},y=()=>{},d=()=>null,b=()=>!1,w=()=>!0;function j(t){if(!t||\"object\"!=typeof t)return!1;const e=Object.getPrototypeOf(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e))&&\"[object Object]\"===Object.prototype.toString.call(t)}const g=t=>{if(!j(t))return!1;for(const e in t)return!1;return!0},A=t=>Array.isArray(t)&&0===t.length,m=t=>\"function\"==typeof t,O=t=>Boolean(t),C=t=>void 0===t,v=t=>null===t,E=t=>null==t,S=t=>\"boolean\"==typeof t,k=t=>\"number\"==typeof t,$=t=>\"string\"==typeof t,M=Array.isArray;\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\nfunction P(t,e,r,o){if(\"a\"===r&&!o)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===r?o:\"a\"===r?o.call(t):o?o.value:e.get(t)}function T(t,e,r,o,s){if(\"m\"===o)throw new TypeError(\"Private method is not writable\");if(\"a\"===o&&!s)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!s:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===o?s.call(t,r):s?s.value=r:e.set(t,r),r}var x,W,J,N;\"function\"==typeof SuppressedError&&SuppressedError;class B{constructor(t,e){x.set(this,0),W.set(this,0),J.set(this,0),N.set(this,0),this.reset(e),\"string\"==typeof t&&t.length>0&&this.hash(t)}hash(t){let e,r=P(this,x,\"f\"),o=P(this,J,\"f\"),s=0,n=t.length;switch(T(this,N,P(this,N,\"f\")+n,\"f\"),P(this,W,\"f\")){case 0:o^=n>s?65535&t.charCodeAt(s++):0;case 1:o^=n>s?(65535&t.charCodeAt(s++))<<8:0;case 2:o^=n>s?(65535&t.charCodeAt(s++))<<16:0;case 3:n>s&&(o^=(255&t.charCodeAt(s))<<24,o^=(65280&t.charCodeAt(s++))>>8)}if(T(this,W,n+P(this,W,\"f\")&3,\"f\"),n-=P(this,W,\"f\"),n>0){for(;o=11601*o+3432906752*(65535&o)&4294967295,o=o<<15|o>>>17,o=13715*o+461832192*(65535&o)&4294967295,r^=o,r=r<<13|r>>>19,r=5*r+3864292196&4294967295,!(s>=n);)o=65535&t.charCodeAt(s++)^(65535&t.charCodeAt(s++))<<8^(65535&t.charCodeAt(s++))<<16,e=t.charCodeAt(s++),o^=(255&e)<<24^(65280&e)>>8;switch(o=0,P(this,W,\"f\")){case 3:o^=(65535&t.charCodeAt(s+2))<<16;case 2:o^=(65535&t.charCodeAt(s+1))<<8;case 1:o^=65535&t.charCodeAt(s)}}return T(this,x,r,\"f\"),T(this,J,o,\"f\"),this}result(){let t=P(this,J,\"f\"),e=P(this,x,\"f\");return t>0&&(t=11601*t+3432906752*(65535&t)&4294967295,t=t<<15|t>>>17,t=13715*t+461832192*(65535&t)&4294967295,e^=t),e^=P(this,N,\"f\"),e^=e>>>16,e=51819*e+2246770688*(65535&e)&4294967295,e^=e>>>13,e=44597*e+3266445312*(65535&e)&4294967295,e^=e>>>16,e>>>0}reset(t){return T(this,x,\"number\"==typeof t?t:0,\"f\"),T(this,W,T(this,J,T(this,N,0,\"f\"),\"f\"),\"f\"),this}}x=new WeakMap,W=new WeakMap,J=new WeakMap,N=new WeakMap;const q=t=>new B(t).result(),z=t=>Object.fromEntries(Object.entries(t).map((([t,e])=>j(e)?[t,z(e)]:[t,e])).filter((([,t])=>void 0!==t))),D=(t,e)=>{if(!t||\"object\"!=typeof t)return JSON.stringify(t);const r=Object.entries(t).sort((([t],[e])=>t.localeCompare(e))),o=new Array(r.length);for(let t=0;t<r.length;t++){const[s,n]=r[t];e?.includes(s)||(o[t]=`${s}:${\"object\"==typeof n?JSON.stringify(n):n}`)}return o.join(\"|\")},F=t=>{if(!t||\"object\"!=typeof t)return String(t);const e=[{obj:t,prefix:\"\"}],r=[];for(;e.length>0;){const{obj:t,prefix:o}=e.pop(),s=Object.keys(t).sort();for(const n of s){const s=t[n],i=o?`${o}.${n}`:n;s&&\"object\"==typeof s?e.push({obj:s,prefix:i}):r.push(`${i}:${String(s)}`)}}return r.join(\"|\")},G=(t,e=[])=>{if(!t)return{};const r=new Set(e),o=[...e,...Object.keys(t).filter((t=>!r.has(t)))];return Object.fromEntries(o.filter((e=>e in t)).map((e=>[e,t[e]])))},H=(t,e)=>{const r=Object.keys(e),o=r.length;for(let s=0;s<o;s++){const o=r[s],n=e[o],i=t[o];M(n)?t[o]=M(i)?H(i,n):H([],n):j(n)?t[o]=j(i)?H(i,n):H({},n):void 0!==i&&void 0===n||(t[o]=n)}return t},I=()=>`${Math.random()}`.slice(2);export{s as DAY,l as EMPTY_ARRAY,p as EMPTY_OBJECT,h as EXA,c as GIGA,o as HOUR,n as KILO,i as MEGA,t as MILLISECOND,r as MINUTE,B as Murmur3,f as PETA,e as SECOND,a as TERA,b as falseFunction,q as generateHash,I as getRandomNumber,M as isArray,S as isBoolean,A as isEmptyArray,g as isEmptyObject,m as isFunction,E as isNil,v as isNull,k as isNumber,j as isPlainObject,$ as isString,O as isTruthy,C as isUndefined,H as merge,d as nullFunction,z as removeUndefined,G as sortObjectKeys,D as stringifyObject,F as stringifyObjectWithFullSortedKeys,w as trueFunction,y as undefinedFunction,u as voidFunction};\n//# sourceMappingURL=index.esm.js.map\n","import { MutableRefObject } from 'react';\n\nimport { getRandomNumber } from '@winglet/common-utils';\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, label = 'modal-anchor'): 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', `${label}-${getRandomNumber()}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","export const DEFAULT_ANIMATION_DURATION = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR = 'rgba(0, 0, 0, 0.5)';\n","import { type MouseEvent, useCallback } from 'react';\n\nimport cx from 'clsx';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport styles from './Background.module.css';\n\nexport const Background = ({ modalId, onChangeOrder }: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\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 if (!modal) return null;\n\n const visible = modal.manualDestroy ? modal.alive : modal.visible;\n\n return (\n <div\n className={cx(styles.root, {\n [styles.visible]: visible,\n [styles.active]: modal.closeOnBackdropClick && visible,\n })}\n onClick={handleClose}\n >\n {BackgroundComponent && (\n <BackgroundComponent\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 />\n )}\n </div>\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 { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { 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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({ onConfirm: handleConfirm })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\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 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 { 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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\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 />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(modal.Input),\n }),\n [modal],\n );\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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n onChange: handleChange,\n value,\n disabled,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n disabled={disabled}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import cx from 'clsx';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport styles from './Foreground.module.css';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const Foreground = ({ modalId, onChangeOrder }: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(styles.root, {\n [styles.active]: modal.manualDestroy ? modal.alive : modal.visible,\n })}\n >\n <ForegroundComponent\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 >\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 </ForegroundComponent>\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 { 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 styles from './Presenter.module.css';\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={styles.modal}>\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 {\n BaseModal,\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 #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 }: 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.#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 }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 { 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 { 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 { memo, useEffect } from 'react';\n\nimport { useTick } 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 styles from './Anchor.module.css';\n\nexport const Anchor = memo(() => {\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={styles.root}\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","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={styles.fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={styles.fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={styles.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 styles from './styles.module.css';\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={styles.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 {\n type ComponentType,\n type PropsWithChildren,\n createContext,\n} from 'react';\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 { FooterComponentProps, ModalFrameProps } from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ComponentType<PropsWithChildren<ModalFrameProps>>;\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent: ComponentType<PropsWithChildren>;\n SubtitleComponent: ComponentType<PropsWithChildren>;\n ContentComponent: ComponentType<PropsWithChildren>;\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 { 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} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<PropsWithChildren>;\n SubtitleComponent?: ComponentType<PropsWithChildren>;\n ContentComponent?: ComponentType<PropsWithChildren>;\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 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 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 <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>,\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 FooterOptions,\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}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 });\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 ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\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}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\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}\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}: 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: ({ defaultValue, onChange, onConfirm }: PromptInputProps<T>) =>\n Input({\n defaultValue,\n onChange,\n onConfirm,\n }),\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 { 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":["SuppressedError","v","e","r","t","current","E","n","k","useEffect","N","c","useState","P","s","isValidElement","prototype","isReactComponent","u","$$typeof","Symbol","for","h","a","p","i","y","$","prerenderListRef","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","label","document","getElementById","id","node","createElement","setAttribute","Math","random","slice","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","Background","modalId","onChangeOrder","BackgroundComponent","useModalContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","visible","stopPropagation","manualDestroy","alive","_jsx","className","cx","styles$4_visible","styles","styles$4_active","onClick","children","type","initiator","background","AlertInner","memo","handlers","title","subtitle","content","footer","useMemo","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","jsx","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","value","setValue","handleChange","inputValue","input","setTimeout","Foreground","ForegroundComponent","styles$3_active","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","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","createContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","Provider","useContext","Anchor","key","dimmed","transitionDuration","backgroundColor","backdrop","map","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","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":"6MAgBiX,mBAAmBA,iBAAiBA,gBAAs3C,MAAuPC,EAAEC,IAAI,MAAMC,EAAEC,EAAAA,OAAEF,GAAG,OAAOC,EAAEE,QAAQH,EAAEC,GAAGG,EAAEF,IAAI,MAAMF,EAAED,EAAEG,GAAG,OAAOG,EAAAA,aAAG,IAAIH,IAAI,mBAAmBF,EAAEG,QAAQ,KAAKH,EAAEG,WAAWD,IAAI,CAACF,GAAE,EAAqDM,EAAEJ,IAAIF,EAACO,UAACL,EAAE,GAAG,EAAq0BM,EAAE,KAAK,MAAMN,EAAEF,GAAGS,EAACC,SAAC,GAAG,MAAM,CAACR,EAAEG,EAAAA,kBAAQL,GAAGE,GAAGA,EAAE,GAAI,GAAE,IAAG,EAAGS,EAAE,CAACT,EAAEF,IAAIE,EAAEU,EAACC,eAACX,GAAGA,EAhB5qFA,IAAjJA,IAAG,mBAAmBA,KAAKA,EAAEY,WAAWZ,EAAEY,UAAUC,kBAAgGC,CAAEd,IAA9EA,IAAG,iBAAiBA,GAAG,OAAOA,GAAGA,EAAEe,WAAWC,OAAOC,IAAI,cAAyBC,CAAElB,IAAtOA,MAAK,mBAAmBA,IAAIA,EAAEY,YAAYZ,EAAEY,UAAUC,kBAAoLM,CAAEnB,GAgB6pFoB,CAAEpB,GAAGqB,EAAAA,cAAErB,EAAEF,GAAG,KAAK,KChBzgGwB,EAAE,OAAkeC,EAAEvB,GAAG,iBAAiBA,EAgBiE,mBAAmBJ,iBAAiBA,gBAA87C,MCV1nE4B,EAA8C,CAClDvB,QAAS,IAGLwB,EAAoD,CACxDxB,QAAUyB,IACRF,EAAiBvB,QAAQ0B,KAAKD,EAAM,GAIlCE,EAAkD,CACtD3B,QAAS,MAGE4B,EAAe,CAC1B,aAAIC,GACF,OAAON,EAAiBvB,OACzB,EACD,cAAA8B,GACEP,EAAiBvB,QAAU,EAC5B,EACD,IAAA+B,CAAKN,GACHD,EAAaxB,QAAQyB,EACtB,EACD,SAAAO,CAAUD,GACRP,EAAaxB,QAAU+B,CACxB,EACD,MAAAE,CAAOC,EAAcC,EAAQ,gBAC3B,GAAIR,EAAU3B,QAAS,CACrB,MAAMiC,EAASG,SAASC,eAAeV,EAAU3B,QAAQsC,IACzD,GAAIL,EAAQ,OAAOA,EAErB,MAAMM,EAAOH,SAASI,cAAcN,GAIpC,OAHAK,EAAKE,aAAa,KAAM,GAAGN,KDvB0pG,GAAGO,KAAKC,WAAWC,MAAM,MCwB9sGR,SAASS,KAAKC,YAAYP,GAC1BZ,EAAU3B,QAAUuC,EACbA,CACR,GC3CUQ,EAA6B,QAE7BC,EAAyB,mwCCO/B,MAAMC,EAAa,EAAGC,UAASC,oBACpC,MAAMC,oBAAEA,GAAwBC,MAC1B5B,MAAEA,EAAK6B,QAAEA,EAAOC,SAAEA,EAAQC,UAAEA,EAASC,UAAEA,GAAcC,EAASR,GAE9DS,EAAcC,eACjBC,IACKpC,GAASA,EAAMqC,sBAAwBrC,EAAMsC,SAAST,IAC1DO,EAAMG,iBAAiB,GAEzB,CAACvC,EAAO6B,IAGV,IAAK7B,EAAO,OAAO,KAEnB,MAAMsC,EAAUtC,EAAMwC,cAAgBxC,EAAMyC,MAAQzC,EAAMsC,QAE1D,OACEI,EAAAA,WACEC,UAAWC,oCAAgB,CACzBC,CAACC,GAAiBR,EAClBS,CAACD,GAAgB9C,EAAMqC,sBAAwBC,IAEjDU,QAASd,EAAWe,SAEnBtB,GACCe,EAAAA,IAACf,GACCd,GAAIb,EAAMa,GACVqC,KAAMlD,EAAMkD,KACZT,MAAOzC,EAAMyC,MACbH,QAAStC,EAAMsC,QACfa,UAAWnD,EAAMmD,UACjBX,cAAexC,EAAMwC,cACrBH,qBAAsBrC,EAAMqC,qBAC5Be,WAAYpD,EAAMoD,WAClBtB,SAAUA,EACVC,UAAWA,EACXF,QAASA,EACTG,UAAWA,EACXN,cAAeA,KAGf,0lCCpCH,MAAM2B,EAAaC,EAAAA,MACxB,EAAOtD,QAAOuD,eACZ,MAAMC,MAAEA,EAAKC,SAAEA,EAAQC,QAAEA,EAAOC,OAAEA,GAAWC,EAAAA,SAAQ,IAAM5D,GAAO,CAACA,KAC7D+B,UAAEA,GAAc6B,EAAAA,SAAQ,IAAML,GAAU,CAACA,IAEzCM,EAAgBC,EAAU/B,IAE1BgC,eACJA,EAAcC,kBACdA,EAAiBC,iBACjBA,EAAgBC,gBAChBA,GACEtC,KAEJ,OACEuC,OAACC,EAAAA,SAAQ,CAAAnB,SAAA,CACNO,IACEa,EAASb,GAASd,EAAAA,IAACqB,EAAgB,CAAAd,SAAAO,IAA0BA,GAC/DC,IACEY,EAASZ,GACRf,EAAA4B,IAACN,EAAiB,CAAAf,SAAEQ,IAA6B,GAIpDC,IACEW,EAASX,GACRhB,EAAAA,IAACuB,YAAkBP,IAEnBa,EAAgBb,EAAS,CACvB3B,UAAW8B,MAGL,IAAXF,IACoB,mBAAXA,EACNA,EAAO,CAAE5B,UAAW8B,IAEpBnB,MAACwB,EACC,CAAAnC,UAAW8B,EACXW,aAAcb,GAAQc,QACtBC,YAAaf,GAAQe,iBAGlB,IC1CJC,EAAerB,EAAAA,MAC1B,EAAOtD,QAAOuD,eACZ,MAAMC,MAAEA,EAAKC,SAAEA,EAAQC,QAAEA,EAAOC,OAAEA,GAAWC,EAAAA,SAAQ,IAAM5D,GAAO,CAACA,KAC7D+B,UAAEA,EAASF,QAAEA,GAAY+B,EAAOA,SAAC,IAAML,GAAU,CAACA,IAElDM,EAAgBC,EAAU/B,GAC1BG,EAAc4B,EAAUjC,IAExBkC,eACJA,EAAcC,kBACdA,EAAiBC,iBACjBA,EAAgBC,gBAChBA,GACEtC,KAEJ,OACEuC,OAACC,EAAAA,SAAQ,CAAAnB,SAAA,CACNO,IACEa,EAASb,GAASd,EAAAA,IAACqB,EAAgB,CAAAd,SAAAO,IAA0BA,GAC/DC,IACEY,EAASZ,GACRf,EAAA4B,IAACN,EAAiB,CAAAf,SAAEQ,IAA6B,GAIpDC,IACEW,EAASX,GACRhB,EAAAA,IAACuB,YAAkBP,IAEnBa,EAAgBb,EAAS,CACvB3B,UAAW8B,EACXe,SAAU1C,MAGJ,IAAXyB,IACoB,mBAAXA,EACNA,EAAO,CACL5B,UAAW8B,EACXe,SAAU1C,IAGZQ,EAAC4B,IAAAJ,GACCnC,UAAW8B,EACXe,SAAU1C,EACVsC,aAAcb,GAAQc,QACtBI,YAAalB,GAAQmB,OACrBJ,YAAaf,GAAQe,YACrBK,WAAYpB,GAAQoB,gBAGjB,IClDJC,EAAc1B,EAAAA,MACzB,EAAStD,QAAOuD,eACd,MAAM0B,MACJA,EAAKC,aACLA,EACAC,SAAUC,EAAa5B,MACvBA,EAAKC,SACLA,EAAQC,QACRA,EAAOC,OACPA,GACEC,EAAOA,SACT,KAAO,IACF5D,EACHiF,MAAO3B,EAAAA,KAAKtD,EAAMiF,UAEpB,CAACjF,KAGIqF,EAAOC,GAAYxG,EAAAA,SAAwBoG,IAE5CpD,SAAEA,EAAQD,QAAEA,EAAOE,UAAEA,GAAc6B,EAAAA,SACvC,IAAML,GACN,CAACA,IAGGrB,EAAc4B,EAAUjC,GACxB0D,EAAezB,GAClB0B,IACC,MAAMC,EN1Cwb,mBM0CraD,EAAcA,EAAWH,GAASG,EAC3DF,EAASG,GACT3D,EAAS2D,EAAM,IAIb5B,EAAgB1B,EAAAA,aAAY,KAEhCuD,YAAW,KACT3D,GAAW,GACX,GACD,CAACA,IAEEoD,EAAWvB,EAAAA,SACf,MAAOyB,KAAUD,IAAgBC,IACjC,CAACD,EAAeC,KAGZtB,eACJA,EAAcC,kBACdA,EAAiBC,iBACjBA,EAAgBC,gBAChBA,GACEtC,KAEJ,OACEuC,OAACC,EAAAA,SAAQ,CAAAnB,SAAA,CACNO,IACEa,EAASb,GAASd,EAAAA,IAACqB,EAAgB,CAAAd,SAAAO,IAA0BA,GAC/DC,IACEY,EAASZ,GACRf,EAAA4B,IAACN,EAAiB,CAAAf,SAAEQ,IAA6B,GAIpDC,IACEW,EAASX,GACRhB,EAAAA,IAACuB,YAAkBP,IAEnBa,EAAgBb,EAAS,CACvB3B,UAAW8B,EACXe,SAAU1C,KAIf+C,GACCvC,EAAAA,IAACuC,EACC,CAAAC,aAAcA,EACdG,MAAOA,EACPvD,SAAUyD,EACVxD,UAAW8B,KAIH,IAAXF,IACoB,mBAAXA,EACNA,EAAO,CACL5B,UAAW8B,EACXe,SAAU1C,EACVJ,SAAUyD,EACVF,QACAF,aAGFzC,EAAC4B,IAAAJ,EACC,CAAAnC,UAAW8B,EACXe,SAAU1C,EACViD,SAAUA,EACVX,aAAcb,GAAQc,QACtBI,YAAalB,GAAQmB,OACrBJ,YAAaf,GAAQe,YACrBK,WAAYpB,GAAQoB,gBAGjB,IC5GJY,EAAa,EAAGlE,UAASC,oBACpC,MAAMkE,oBAAEA,GAAwBhE,MAE1B5B,MAAEA,EAAK8B,SAAEA,EAAQC,UAAEA,EAASF,QAAEA,EAAOG,UAAEA,GAAcC,EAASR,GAEpE,OAAKzB,EAGH0C,EAAAA,WACEC,UAAWC,oCAAgB,CACzBiD,CAAC/C,GAAgB9C,EAAMwC,cAAgBxC,EAAMyC,MAAQzC,EAAMsC,UAG7DW,SAAAkB,EAAAA,KAACyB,EAAmB,CAClB/E,GAAIb,EAAMa,GACVqC,KAAMlD,EAAMkD,KACZT,MAAOzC,EAAMyC,MACbH,QAAStC,EAAMsC,QACfa,UAAWnD,EAAMmD,UACjBX,cAAexC,EAAMwC,cACrBH,qBAAsBrC,EAAMqC,qBAC5Be,WAAYpD,EAAMoD,WAClBtB,SAAUA,EACVC,UAAWA,EACXF,QAASA,EACTG,UAAWA,EACXN,cAAeA,EAEduB,SAAA,CAAe,UAAfjD,EAAMkD,MACLR,EAAAA,IAACW,EAAU,CAACrD,MAAOA,EAAOuD,SAAU,CAAExB,eAExB,YAAf/B,EAAMkD,MACLR,EAAA4B,IAACK,EAAa,CAAA3E,MAAOA,EAAOuD,SAAU,CAAExB,YAAWF,aAErC,WAAf7B,EAAMkD,MACLR,MAACsC,EACC,CAAAhF,MAAOA,EACPuD,SAAU,CAAEzB,WAAUC,YAAWF,kBAhCxB,IAoCX,EC7CGiE,EAAqB9F,IAChC,MAAO+F,EAAMC,GAAUC,IAMvB,OALAC,GAAW,KACT,GAAKlG,EAEL,OADoBA,EAAMmG,UAAUH,EAClB,IAEbD,CAAI,+fCCb,IAAIK,EAAS,EAEN,MAAMC,EAAY/C,EAAIA,MAAC,EAAG7B,cAC/B,MAAM6E,EAAMC,EAAMA,OAAiB,OAC7BvG,MAAEA,GAAUiC,EAASR,GAC3BqE,EAAkB9F,GAClB,MAAMwG,EAAoB1C,GAAU,KAC9BwC,EAAI/H,UACN+H,EAAI/H,QAAQkI,MAAML,OAAS,GAAGA,QAGlC,OACEjC,OAAK,MAAA,CAAAmC,IAAKA,EAAK3D,4CACbM,SAAA,CAAAP,EAAA4B,IAAC9C,EAAU,CAACC,QAASA,EAASC,cAAe8E,IAC7C9D,EAAA4B,IAACqB,EAAW,CAAAlE,QAASA,EAASC,cAAe8E,MACzC,ICvBGE,EAAsB,CAACX,EAAwB,KAC1D,MAAMY,SAAEA,EAAQC,aAAEA,GAAiBC,IACnC,OAAOjD,EAAOA,SAAC,KACb,IAAIkD,EAAQ,EACZ,IAAK,MAAMjG,KAAM8F,EACXC,EAAa/F,IAAKyB,SAASwE,IAEjC,OAAOA,CAAK,GAEX,CAACF,EAAcD,EAAUZ,GAAM;;;;;;;;;;;;;;;;0tBCHdgB,EAYpB,SAAItE,GACF,OAAOuE,EAAAC,KAAIC,EAAA,KAGb,WAAI5E,GACF,OAAO0E,EAAAC,KAAIE,EAAA,KAMb,WAAAC,EAAYvG,GACVA,EAAEsC,UACFA,EAASK,MACTA,EAAKC,SACLA,EAAQL,WACRA,EAAUZ,cACVA,GAAgB,EAAKH,qBACrBA,GAAuB,EAAIgF,QAC3BA,IA9BOC,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,0DAETC,EAAgBM,IAAAP,UAAA,GAIhBE,EAAkBK,IAAAP,UAAA,GAKlBQ,EAAqCD,IAAAP,UAAA,GACrCS,EAAAF,IAAAP,KAAmB,IAYjBA,KAAKpG,GAAKA,EACVoG,KAAK9D,UAAYA,EACjB8D,KAAKzD,MAAQA,EACbyD,KAAKxD,SAAWA,EAChBwD,KAAK7D,WAAaA,EAClB6D,KAAKzE,cAAgBA,EACrByE,KAAK5E,qBAAuBA,EAE5BsF,EAAAV,KAAIC,GAAU,EAAI,KAClBS,EAAAV,KAAIE,GAAY,EAAI,KACpBQ,EAAAV,KAAIQ,EAAYJ,EAAO,KAGzB,SAAAlB,CAAUyB,GAER,OADAZ,EAAAC,KAAeS,EAAA,KAACzH,KAAK2H,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,KAAKzE,eAAiB0F,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,mECnEpB,MAAOM,UAAqBtB,EAShC,WAAAK,EAAYvG,GACVA,EAAEsC,UACFA,EAASD,KACTA,EAAIoF,QACJA,EAAO9E,MACPA,EAAKC,SACLA,EAAQC,QACRA,EAAOC,OACPA,EAAMP,WACNA,EAAUZ,cACVA,EAAaH,qBACbA,EAAoBgF,QACpBA,IAEAkB,MAAM,CACJ1H,KACAsC,YACAK,QACAC,WACAL,aACAZ,gBACAH,uBACAgF,YA9BKC,OAAAC,eAAAN,KAAA,OAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,SAAA,0DA6BPA,KAAK/D,KAAOA,EACZ+D,KAAKqB,QAAUA,EACfrB,KAAKvD,QAAUA,EACfuD,KAAKtD,OAASA,EAEhB,OAAA9B,GACEoF,KAAKI,QAAQ,MAEf,SAAAtF,GACEkF,KAAKI,QAAQ,OC1CX,MAAOmB,UAAuBzB,EAMlC,WAAAK,EAAYvG,GACVA,EAAEsC,UACFA,EAASD,KACTA,EAAIoF,QACJA,EAAO9E,MACPA,EAAKC,SACLA,EAAQC,QACRA,EAAOC,OACPA,EAAMP,WACNA,EAAUZ,cACVA,EAAaH,qBACbA,EAAoBgF,QACpBA,IAEAkB,MAAM,CACJ1H,KACAsC,YACAK,QACAC,WACAL,aACAZ,gBACAH,uBACAgF,YA3BKC,OAAAC,eAAAN,KAAA,OAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,UAAA,0DACAK,OAAAC,eAAAN,KAAA,SAAA,0DA0BPA,KAAK/D,KAAOA,EACZ+D,KAAKqB,QAAUA,EACfrB,KAAKvD,QAAUA,EACfuD,KAAKtD,OAASA,EAEhB,OAAA9B,GACEoF,KAAKI,SAAQ,GAEf,SAAAtF,GACEkF,KAAKI,SAAQ,ICtCX,MAAOoB,UAAyB1B,EAUpC,WAAAK,EAAYvG,GACVA,EAAEsC,UACFA,EAASD,KACTA,EAAIM,MACJA,EAAKC,SACLA,EAAQC,QACRA,EAAOwB,aACPA,EAAYD,MACZA,EAAKE,SACLA,EAAQuD,eACRA,EAAc/E,OACdA,EAAMP,WACNA,EAAUZ,cACVA,EAAaH,qBACbA,EAAoBgF,QACpBA,IAEAkB,MAAM,CACJ1H,KACAsC,YACAK,QACAC,WACAL,aACAZ,gBACAH,uBACAgF,YAlCKC,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,GA6BpBA,KAAK/D,KAAOA,EACZ+D,KAAKvD,QAAUA,EACfuD,KAAKhC,MAAQA,EACbgC,KAAK/B,aAAeA,EACpByC,EAAAV,KAAI0B,EAAUzD,EAAY,KAC1B+B,KAAK9B,SAAWA,EAChB8B,KAAKyB,eAAiBA,EACtBzB,KAAKtD,OAASA,EAGhB,QAAA7B,CAASuD,GACPsC,EAAAV,KAAI0B,EAAUtD,EAAK,KAErB,SAAAtD,GACEkF,KAAKI,QAAQL,EAAAC,KAAW0B,EAAA,MAAI,MAE9B,OAAA9G,GACMoF,KAAKyB,eAAgBzB,KAAKI,QAAQL,EAAAC,KAAW0B,EAAA,MAAI,MAChD1B,KAAKI,QAAQ,qBClEf,MAAMuB,EAAqB5I,IAChC,OAAQA,EAAMkD,MACZ,IAAK,QACH,OAAO,IAAImF,EAAarI,GAC1B,IAAK,UACH,OAAO,IAAIwI,EAAexI,GAC5B,IAAK,SACH,OAAO,IAAIyI,EAAiBzI,GAGhC,MAAM,IAAI6I,MAAM,kBAAkB7I,EAAMkD,OAAQ,CAAElD,SAAQ,ECdtD8I,EAAiB,6BAEVC,EAA+BtD,IAC1C,MAAM,CAAGuD,EAAgBC,GAAQxD,EAAMyD,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,ECIFE,EAAmBC,EAAAA,cAAqC,CACnE3C,SAAU,GACVC,aAAc2C,EACdzH,SAAUyH,EACVxH,UAAWwH,EACX1H,QAAS0H,EACTvH,UAAWuH,EACXC,WAAYD,EACZE,SAAU,KAAO,CACfzJ,WAAO0J,EACP3H,UAAWwH,EACX1H,QAAS0H,EACTzH,SAAUyH,EACVvH,UAAWuH,MCHFI,EAA2BrG,EAAAA,MACtC,EACEsG,WACA3G,eAEA,MAAM4G,EAAkBtD,EAAAA,OAAwC,IAAIuD,MAE7DnD,EAAUoD,GAAejL,EAAAA,SAA4B,IACtDkL,EAAcC,EAAatD,GAE3BxD,EAAYoD,EAAMA,OAACqD,GACnBM,EAAkB3D,EAAMA,OAAC,GAEzB4D,EAAUC,KAEVjB,EAAWvF,EAAOA,SACtB,IAAMmF,EAA4BoB,EAAQhB,WAC1C,CAACgB,InBzBqsE7L,QmB4BvrE,KACf,MAAMkE,cAAEA,EAAaH,qBAAEA,GAAyB8H,EAEhD,IAAK,MAAME,KAAQlK,EAAaC,UAAW,CACzC,MAAMJ,EAAQ4I,EAAY,IACrByB,EACHxJ,GAAIqJ,EAAgB3L,UACpB4E,UAAWA,EAAU5E,QACrBiE,mBACyBkH,IAAvBW,EAAK7H,cACD6H,EAAK7H,cACLA,EACNH,0BACgCqH,IAA9BW,EAAKhI,qBACDgI,EAAKhI,qBACLA,IAERwH,EAAgBtL,QAAQiJ,IAAIxH,EAAMa,GAAIb,GACtC+J,GAAaO,GAAQ,IAAIA,EAAKtK,EAAMa,MAGtCV,EAAaI,WAAW8J,IACtB,MAAMrK,EAAQ4I,EAAY,IACrByB,EACHxJ,GAAIqJ,EAAgB3L,UACpB4E,UAAWA,EAAU5E,QACrBiE,mBACyBkH,IAAvBW,EAAK7H,cACD6H,EAAK7H,cACLA,EACNH,0BACgCqH,IAA9BW,EAAKhI,qBACDgI,EAAKhI,qBACLA,IAERwH,EAAgBtL,QAAQiJ,IAAIxH,EAAMa,GAAIb,GACtC+J,GAAaO,GAMJ,IALUA,EAAIzC,QAAQhH,IAC3B,MAAM0J,GAAaV,EAAgBtL,QAAQiM,IAAI3J,IAAK4B,MAEpD,OADI8H,GAAWV,EAAgBtL,QAAQkM,OAAO5J,IACtC0J,CAAS,IAEEvK,EAAMa,KAC3B,IAEJV,EAAaE,gBAAgB,EnBzE6qEhC,EAACqM,gBAACpM,EAAE,ImB4EhtEoM,EAAAA,iBAAgB,KACd,IAAK,MAAM7J,KAAMmJ,EAAYzL,QAAS,CACpC,MAAMyB,EAAQ6J,EAAgBtL,QAAQiM,IAAI3J,GACrCb,GAAOyC,QACRzC,EAAMmD,YAAcyG,EAAU5J,EAAMmI,SACnCnI,EAAMoI,UAEbjF,EAAU5E,QAAUqL,CAAQ,GAC3B,CAACI,EAAaJ,IAEjB,MAAMhD,EAAezE,eAAaV,GACzBoI,EAAgBtL,QAAQiM,IAAI/I,IAClC,IAEGO,EAAYG,eAAaV,IAC7B,MAAMzB,EAAQ6J,EAAgBtL,QAAQiM,IAAI/I,GACrCzB,IACLA,EAAMgC,YACN2I,EAAWpM,YAAW,GACrB,IAEGoM,EAAapE,EAAAA,SACbqE,EAAYzI,eACfV,IACC,MAAMzB,EAAQ6J,EAAgBtL,QAAQiM,IAAI/I,GACrCzB,IACLA,EAAMoI,SACNuC,EAAWpM,YACNyB,EAAMwC,eACTkD,YAAW,KACT1F,EAAMgC,WAAW,GAChBmH,GAAS,GAEhB,CAACA,IAGGrH,EAAWK,EAAAA,aAAY,CAACV,EAA0B4D,KACtD,MAAMrF,EAAQ6J,EAAgBtL,QAAQiM,IAAI/I,GACrCzB,GACc,WAAfA,EAAMkD,MAAmBlD,EAAM8B,SAASuD,EAAM,GACjD,IAEGtD,EAAYI,eACfV,IACC,MAAMzB,EAAQ6J,EAAgBtL,QAAQiM,IAAI/I,GACrCzB,IACLA,EAAM+B,YACN6I,EAAUnJ,GAAQ,GAEpB,CAACmJ,IAGG/I,EAAUM,eACbV,IACC,MAAMzB,EAAQ6J,EAAgBtL,QAAQiM,IAAI/I,GACrCzB,IACLA,EAAM6B,UACN+I,EAAUnJ,GAAQ,GAEpB,CAACmJ,IAGGnB,EAAWtH,eACdV,IAA8B,CAC7BzB,MAAO4G,EAAanF,GACpBM,UAAW,IAAMA,EAAUN,GAC3BI,QAAS,IAAMA,EAAQJ,GACvBK,SAAWuD,GAAevD,EAASL,EAAS4D,GAC5CrD,UAAW,IAAMA,EAAUP,MAE7B,CAACmF,EAAc7E,EAAWF,EAASC,EAAUE,IAGzCqD,EAAQzB,EAAAA,SAAQ,KACb,CACL+C,WACAC,eACA9E,WACAC,YACAF,UACAG,YACAyH,WACAD,WAAaqB,IACXF,EAAWpM,QAAUsM,CAAO,KAG/B,CACDlE,EACA8C,EACA7C,EACA9E,EACAC,EACAF,EACAG,IAGF,OACEU,EAAA4B,IAAC+E,EAAiByB,SAAQ,CAACzF,MAAOA,EAAKpC,SACpCA,GACyB,ICzLrB4D,EAAsB,IAAMkE,EAAUA,WAAC1B,GAEvCpH,EAAYpB,IACvB,MAAM4I,SAAEA,GAAa5C,IACrB,OAAOjD,EAAAA,SAAQ,IAAM6F,EAAS5I,IAAK,CAACA,EAAI4I,GAAU,myBCC7C,MAAMuB,EAAS1H,EAAIA,MAAC,KACzB,MAAO2H,EAAKjF,GAAUC,KAEhBU,SAAEA,EAAQ6C,WAAEA,GAAe3C,IAEjClI,EAAAA,WAAU,KACR6K,EAAWxD,EAAO,GACjB,CAACwD,EAAYxD,IAEhB,MAAMmE,QAAEA,GAAYvI,KAEdsJ,EAASxE,EAAoBuE,GAEnC,OACEvI,EAAAA,WACEC,wCACA8D,MAAO,CACL0E,mBAAoBhB,EAAQhB,SAC5BiC,gBAAiBF,EAASf,EAAQkB,SAAW,eAC9CpI,SAEA0D,EAAS2E,KAAKzK,GACN6B,EAAAA,IAAC2D,EAAmB,CAAA5E,QAASZ,GAAbA,MAErB,q8BC/BH,MAAM0K,EAAgB,EAAGtI,cACvBP,EAAA4B,IAAA,KAAA,CAAI3B,UAAWG,EAAeG,SAAGA,ICD7BuI,EAAmB,EAAGvI,cAC1BP,EAAA4B,IAAA,KAAA,CAAI3B,UAAWG,EAAeG,SAAGA,ICD7BwI,EAAkB,EAAGxI,cACzBP,EAAA4B,IAAA,MAAA,CAAK3B,UAAWG,EAAeG,SAAGA,ICH9ByI,EAAiB,EAC5BlH,eACAE,eAAc,EACdG,cACAE,cAAa,EACbI,WACApD,YACA6C,cAGET,EAAAA,KACG,MAAA,CAAAlB,SAAA,EAACyB,GACAhC,gBAAQM,QAASjB,EAAWoD,SAAUA,EAAQlC,SAC3CuB,GAAgB,QAInBO,GAAkC,mBAAbH,GACrBlC,EAAQ4B,IAAA,SAAA,CAAAtB,QAAS4B,EAAQ3B,SAAG4B,GAAe,UCLtC8G,GAA0BC,EAAUA,YAC/C,EACI/K,KAAIa,gBAAeuB,YACrBqD,KAEA,MAAMuF,EAAcnF,KACboF,EAAOC,GAAUnI,EAAOA,SAAC,KAC9B,MAAMoI,EAAUH,EAAc,EAK9B,MAAO,CAJOG,EACT/K,KAAKgL,MAAMpL,EAZE,GACA,EAWyC,IACvD,EACWmL,EAAWnL,EAdR,EAcgC,GAAK,EACjC,GACrB,CAACgL,EAAahL,IAEjB,OACE6B,MACE,MAAA,CAAA4D,IAAKA,EACL3D,yCACAK,QAAStB,EACT+E,MAAO,CACLyF,aAAc,eAAeJ,OAC7BK,WAAY,GAAGL,MACfM,UAAW,aAAaL,QAAaA,QAGtC9I,SAAAA,GACG,ICxCCoJ,GAAc,KACzB,MAAOzC,EAAU0C,GAAexN,EAAQA,SAACyN,OAAOC,SAAS5C,UAqBzD,OAnBAc,EAAAA,iBAAgB,KACd,IAAI+B,EAEJ,MAAMC,EAAgB,KAChBD,GAAWE,qBAAqBF,GAChC7C,IAAa2C,OAAOC,SAAS5C,SAC/B0C,EAAYC,OAAOC,SAAS5C,UAE5B6C,EAAYG,sBAAsBF,IAMtC,OAFAD,EAAYG,sBAAsBF,GAE3B,KACDD,GAAWE,qBAAqBF,EAAU,CAC/C,GACA,CAAC7C,IAEG,CAAEA,WAAU,ECURiD,GAAevD,EAAAA,cAAiC,CAC3D1D,oBAAqB+F,GACrB5H,eAAgBwH,EAChBvH,kBAAmBwH,EACnBvH,iBAAkBwH,EAClBvH,gBAAiBwH,EACjBvB,QAAS,CACPhB,SAAU7H,EACV+J,SAAU9J,EACViB,eAAe,EACfH,sBAAsB,KCUbyK,GAAuBxJ,EAAAA,MAClC,EACEsC,sBACAjE,sBACAoC,iBACAC,oBACAC,mBACAC,kBACAiG,sBACAkC,EACApJ,eAEA,MAAM2G,SAAEA,IAAcyC,GAAeU,OAC5B,CAAA/G,GAAUC,IACb+G,EAAYzG,EAAMA,OAAqB,MAE7CL,GAAW,KACT8G,EAAUzO,QAAU4B,EAAaK,OAAO,OACxCwF,IACO,KACDgH,EAAUzO,SACZyO,EAAUzO,QAAQ0O,aAKxB,MAAM5H,EAAQzB,EAAAA,SACZ,KAAO,CACLjC,sBACAiE,oBAAqBA,GAAuB+F,GAC5C5H,eAAgBA,GAAkBwH,EAClCvH,kBAAmBA,GAAqBwH,EACxCvH,iBAAkBX,EAAAA,KAAKW,GAAoBwH,GAC3CvH,gBAAiBZ,EAAAA,KAAKY,GAAmBwH,GACzCvB,QAAS,CACPhB,SAAU7H,EACV+J,SAAU9J,EACVc,sBAAsB,EACtBG,eAAe,KACZ2H,MAGP,CACEvE,EACAjE,EACAsC,EACAC,EACAF,EACAD,EACAoG,IAIJ,OACEhG,EAAA+I,KAACL,GAAa/B,SAAS,CAAAzF,MAAOA,EAC3BpC,SAAA,CAAAA,EACA+J,EAAUzO,SACT4O,EAAYA,aACVzK,EAAC4B,IAAAqF,GAAyBC,SAAUA,EAClC3G,SAAAP,EAAAA,IAACsI,EAAS,CAAA,KAEZgC,EAAUzO,WAEQ,IC/GjBqD,GAAkB,IAAMmJ,EAAUA,WAAC8B,IAEnCzC,GAAkB,KAC7B,MAAMD,QAAEA,GAAYY,EAAUA,WAAC8B,IAC/B,OAAO1C,CAAO,yCCcK,EACnB7B,UACA9E,QACAC,WACAC,UACAN,aACAO,SACAnB,gBACAH,0BAEO,IAAI+K,SAAc,CAAC/F,EAASgG,KACjC,IACElN,EAAaG,KAAK,CAChB4C,KAAM,QACNoF,UACAjB,QAAS,IAAMA,IACf7D,QACAC,WACAC,UACAN,aACAO,SACAnB,gBACAH,yBAEF,MAAOiL,GACPD,EAAOC,uBC5BU,EACrBhF,UACA9E,QACAC,WACAC,UACAN,aACAO,SACAnB,gBACAH,0BAEO,IAAI+K,SAAiB,CAAC/F,EAASgG,KACpC,IACElN,EAAaG,KAAK,CAChB4C,KAAM,UACNoF,UACAjB,QAAUW,GAAWX,EAAQW,IAAU,GACvCxE,QACAC,WACAC,UACAN,aACAO,SACAnB,gBACAH,yBAEF,MAAOiL,GACPD,EAAOC,sBCpBS,EACpBpI,eACA1B,QACAC,WACAC,UACAuB,QACAE,WACAuD,iBACAtF,aACAO,SACAnB,gBACAH,0BAEO,IAAI+K,SAAW,CAAC/F,EAASgG,KAC9B,IACElN,EAAaG,KAAK,CAChB4C,KAAM,SACNmE,QAAUW,GAAWX,EAAQW,GAC7BxE,QACAC,WACAC,UACAuB,MAAO,EAAGC,eAAcpD,WAAUC,eAChCkD,EAAM,CACJC,eACApD,WACAC,cAEJmD,eACAC,WACAuD,iBACAtF,aACAO,SACAnB,gBACAH,yBAEF,MAAOiL,GACPD,EAAOC,+BCpDkB,CAC7B7L,EACA0H,KAEA,MAAMnJ,MAAEA,EAAKgC,UAAEA,GAAcC,EAASR,GAChCsE,EAAOD,EAAkB9F,GAEzBuN,EAAYhH,EAAAA,OAAO,CACvBvG,QACAgC,YACAwL,aAAcnJ,EAAS8E,GACnBJ,EAA4BI,GAC5BA,IAGNxK,EAAAA,WAAU,KACR,MAAMqB,MAAEA,EAAKgC,UAAEA,EAASwL,aAAEA,GAAiBD,EAAUhP,QACrD,IAAKyB,GAASA,EAAMsC,UAAYtC,EAAMyC,MAAO,OAC7C,MAAMgL,EAAQ/H,YAAW,KACvB1D,GAAW,GACVwL,GACH,MAAO,KACDC,GAAOC,aAAaD,EAAM,CAC/B,GACA,CAAC1H,GAAM,2BJhBoB,KAC9B,MAAMsF,SAAEA,GAAajB,KACrB,OAAOiB,CAAQ,2BAPe,KAC9B,MAAMlC,SAAEA,GAAaiB,KACrB,MAAO,CAAEjB,WAAUqE,aAAczE,EAA4BI,GAAW"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useRef as n,useCallback as t,useEffect as r,useLayoutEffect as i,useState as l,isValidElement as a,createElement as c,memo as s,useMemo as u,Fragment as d,createContext as b,useContext as m,forwardRef as p}from"react";import{createPortal as f}from"react-dom";import h from"clsx";import C from"/Users/Vincent/Workspace/
|
|
1
|
+
import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useRef as n,useCallback as t,useEffect as r,useLayoutEffect as i,useState as l,isValidElement as a,createElement as c,memo as s,useMemo as u,Fragment as d,createContext as b,useContext as m,forwardRef as p}from"react";import{createPortal as f}from"react-dom";import h from"clsx";import C from"/Users/Vincent/Workspace/altovion/node_modules/style-inject/dist/style-inject.es.js";"function"==typeof SuppressedError&&SuppressedError;const y=e=>{const o=n(e);return o.current=e,o},g=e=>{const o=y(e);return t(((...e)=>"function"!=typeof o.current?null:o.current(...e)),[o])},v=e=>{r(e,[])},I=()=>{const[e,o]=l(0);return[e,t((()=>{o((e=>e+1))}),[])]},k=(e,o)=>e?a(e)?e:(e=>(e=>"function"==typeof e&&!(e.prototype&&e.prototype.isReactComponent))(e)||(e=>"object"==typeof e&&null!==e&&e.$$typeof===Symbol.for("react.memo"))(e)||(e=>!("function"!=typeof e||!e.prototype||!e.prototype.isReactComponent))(e))(e)?c(e,o):null:null,B=()=>{},_=e=>"string"==typeof e;"function"==typeof SuppressedError&&SuppressedError;const F={current:[]},Q={current:e=>{F.current.push(e)}},G={current:null},O={get prerender(){return F.current},clearPrerender(){F.current=[]},open(e){Q.current(e)},setupOpen(e){Q.current=e},anchor(e,o="modal-anchor"){if(G.current){const e=document.getElementById(G.current.id);if(e)return e}const n=document.createElement(e);return n.setAttribute("id",`${o}-${`${Math.random()}`.slice(2)}`),document.body.appendChild(n),G.current=n,n}},x="300ms",D="rgba(0, 0, 0, 0.5)";var w="Background-module__active___Zi50h",V="Background-module__visible___tAN9F";C(".Background-module__root___zat-I{display:none;inset:0;pointer-events:none;position:fixed;z-index:-999}.Background-module__root___zat-I.Background-module__active___Zi50h{pointer-events:all!important}.Background-module__root___zat-I.Background-module__visible___tAN9F{align-items:center;display:flex;justify-content:center}.Background-module__root___zat-I>*{pointer-events:none}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhY2tncm91bmQubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FDRSxZQUFhLENBRWIsT0FBUSxDQUVSLG1CQUFvQixDQUhwQixjQUFlLENBRWYsWUFFRixDQUVBLG1FQUNFLDRCQUNGLENBRUEsb0VBRUUsa0JBQW1CLENBRG5CLFlBQWEsQ0FFYixzQkFDRixDQUVBLG1DQUNFLG1CQUNGIiwiZmlsZSI6IkJhY2tncm91bmQubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5yb290IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBpbnNldDogMDtcbiAgei1pbmRleDogLTk5OTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5yb290LmFjdGl2ZSB7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGwgIWltcG9ydGFudDtcbn1cblxuLnJvb3QudmlzaWJsZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ucm9vdCA+ICoge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbiJdfQ== */");const Z=({modalId:o,onChangeOrder:n})=>{const{BackgroundComponent:r}=ve(),{modal:i,onClose:l,onChange:a,onConfirm:c,onDestroy:s}=se(o),u=t((e=>{i&&i.closeOnBackdropClick&&i.visible&&l(),e.stopPropagation()}),[i,l]);if(!i)return null;const d=i.manualDestroy?i.alive:i.visible;return e("div",{className:h("Background-module__root___zat-I",{[V]:d,[w]:i.closeOnBackdropClick&&d}),onClick:u,children:r&&e(r,{id:i.id,type:i.type,alive:i.alive,visible:i.visible,initiator:i.initiator,manualDestroy:i.manualDestroy,closeOnBackdropClick:i.closeOnBackdropClick,background:i.background,onChange:a,onConfirm:c,onClose:l,onDestroy:s,onChangeOrder:n})})};var U="Foreground-module__active___f-kK8";C(".Foreground-module__root___Go3o8{display:none;inset:0;pointer-events:none;position:fixed;z-index:1}.Foreground-module__root___Go3o8.Foreground-module__active___f-kK8{align-items:center;display:flex!important;justify-content:center}.Foreground-module__root___Go3o8.Foreground-module__active___f-kK8>*{pointer-events:all!important}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZvcmVncm91bmQubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FFRSxZQUFhLENBRWIsT0FBUSxDQUhSLG1CQUFvQixDQUVwQixjQUFlLENBRWYsU0FDRixDQUVBLG1FQUdFLGtCQUFtQixDQUZuQixzQkFBd0IsQ0FDeEIsc0JBRUYsQ0FFQSxxRUFDRSw0QkFDRiIsImZpbGUiOiJGb3JlZ3JvdW5kLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIucm9vdCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAxO1xufVxuXG4ucm9vdC5hY3RpdmUge1xuICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4ucm9vdC5hY3RpdmUgPiAqIHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbCAhaW1wb3J0YW50O1xufVxuIl19 */");const W=s((({modal:n,handlers:t})=>{const{title:r,subtitle:i,content:l,footer:a}=u((()=>n),[n]),{onConfirm:c}=u((()=>t),[t]),s=g(c),{TitleComponent:b,SubtitleComponent:m,ContentComponent:p,FooterComponent:f}=ve();return o(d,{children:[r&&(_(r)?e(b,{children:r}):r),i&&(_(i)?e(m,{children:i}):i),l&&(_(l)?e(p,{children:l}):k(l,{onConfirm:s})),!1!==a&&("function"==typeof a?a({onConfirm:s}):e(f,{onConfirm:s,confirmLabel:a?.confirm,hideConfirm:a?.hideConfirm}))]})})),j=s((({modal:n,handlers:t})=>{const{title:r,subtitle:i,content:l,footer:a}=u((()=>n),[n]),{onConfirm:c,onClose:s}=u((()=>t),[t]),b=g(c),m=g(s),{TitleComponent:p,SubtitleComponent:f,ContentComponent:h,FooterComponent:C}=ve();return o(d,{children:[r&&(_(r)?e(p,{children:r}):r),i&&(_(i)?e(f,{children:i}):i),l&&(_(l)?e(h,{children:l}):k(l,{onConfirm:b,onCancel:m})),!1!==a&&("function"==typeof a?a({onConfirm:b,onCancel:m}):e(C,{onConfirm:b,onCancel:m,confirmLabel:a?.confirm,cancelLabel:a?.cancel,hideConfirm:a?.hideConfirm,hideCancel:a?.hideCancel}))]})})),z=s((({modal:n,handlers:r})=>{const{Input:i,defaultValue:a,disabled:c,title:b,subtitle:m,content:p,footer:f}=u((()=>({...n,Input:s(n.Input)})),[n]),[h,C]=l(a),{onChange:y,onClose:v,onConfirm:I}=u((()=>r),[r]),B=g(v),F=g((e=>{const o="function"==typeof e?e(h):e;C(o),y(o)})),Q=t((()=>{setTimeout((()=>{I()}))}),[I]),G=u((()=>!!h&&!!c?.(h)),[c,h]),{TitleComponent:O,SubtitleComponent:x,ContentComponent:D,FooterComponent:w}=ve();return o(d,{children:[b&&(_(b)?e(O,{children:b}):b),m&&(_(m)?e(x,{children:m}):m),p&&(_(p)?e(D,{children:p}):k(p,{onConfirm:Q,onCancel:B})),i&&e(i,{defaultValue:a,value:h,onChange:F,onConfirm:Q}),!1!==f&&("function"==typeof f?f({onConfirm:Q,onCancel:B,onChange:F,value:h,disabled:G}):e(w,{onConfirm:Q,onCancel:B,disabled:G,confirmLabel:f?.confirm,cancelLabel:f?.cancel,hideConfirm:f?.hideConfirm,hideCancel:f?.hideCancel}))]})})),L=({modalId:n,onChangeOrder:t})=>{const{ForegroundComponent:r}=ve(),{modal:i,onChange:l,onConfirm:a,onClose:c,onDestroy:s}=se(n);return i?e("div",{className:h("Foreground-module__root___Go3o8",{[U]:i.manualDestroy?i.alive:i.visible}),children:o(r,{id:i.id,type:i.type,alive:i.alive,visible:i.visible,initiator:i.initiator,manualDestroy:i.manualDestroy,closeOnBackdropClick:i.closeOnBackdropClick,background:i.background,onChange:l,onConfirm:a,onClose:c,onDestroy:s,onChangeOrder:t,children:["alert"===i.type&&e(W,{modal:i,handlers:{onConfirm:a}}),"confirm"===i.type&&e(j,{modal:i,handlers:{onConfirm:a,onClose:c}}),"prompt"===i.type&&e(z,{modal:i,handlers:{onChange:l,onConfirm:a,onClose:c}})]})}):null},R=e=>{const[o,n]=I();return v((()=>{if(e)return e.subscribe(n)})),o};C(".Presenter-module__modal___HyHFW{inset:0;overflow:hidden;pointer-events:none;position:fixed}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByZXNlbnRlci5tb2R1bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUVFLE9BQVEsQ0FFUixlQUFnQixDQURoQixtQkFBb0IsQ0FGcEIsY0FJRiIsImZpbGUiOiJQcmVzZW50ZXIubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuIl19 */");let X=1;const N=s((({modalId:t})=>{const r=n(null),{modal:i}=se(t);R(i);const l=g((()=>{r.current&&(r.current.style.zIndex=""+X++)}));return o("div",{ref:r,className:"Presenter-module__modal___HyHFW",children:[e(Z,{modalId:t,onChangeOrder:l}),e(L,{modalId:t,onChangeOrder:l})]})})),J=(e=0)=>{const{modalIds:o,getModalNode:n}=ce();return u((()=>{let e=0;for(const t of o)n(t)?.visible&&e++;return e}),[n,o,e])},Y=({subtype:e,title:o,subtitle:n,content:t,background:r,footer:i,manualDestroy:l,closeOnBackdropClick:a})=>new Promise(((c,s)=>{try{O.open({type:"alert",subtype:e,resolve:()=>c(),title:o,subtitle:n,content:t,background:r,footer:i,manualDestroy:l,closeOnBackdropClick:a})}catch(e){s(e)}})),S=({subtype:e,title:o,subtitle:n,content:t,background:r,footer:i,manualDestroy:l,closeOnBackdropClick:a})=>new Promise(((c,s)=>{try{O.open({type:"confirm",subtype:e,resolve:e=>c(e??!1),title:o,subtitle:n,content:t,background:r,footer:i,manualDestroy:l,closeOnBackdropClick:a})}catch(e){s(e)}})),P=({defaultValue:e,title:o,subtitle:n,content:t,Input:r,disabled:i,returnOnCancel:l,background:a,footer:c,manualDestroy:s,closeOnBackdropClick:u})=>new Promise(((d,b)=>{try{O.open({type:"prompt",resolve:e=>d(e),title:o,subtitle:n,content:t,Input:({defaultValue:e,onChange:o,onConfirm:n})=>r({defaultValue:e,onChange:o,onConfirm:n}),defaultValue:e,disabled:i,returnOnCancel:l,background:a,footer:c,manualDestroy:s,closeOnBackdropClick:u})}catch(e){b(e)}}));
|
|
2
2
|
/******************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../winglet/react-utils/dist/index.esm.js","../../../winglet/common-utils/dist/index.esm.js","../src/app/ModalManager.ts","../src/app/constant.ts","../src/components/Background/Background.tsx","../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/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/Anchor.tsx","../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{useRef as t,useEffect as e,useLayoutEffect as r,useCallback as n,useMemo as o,useState as c,isValidElement as s,createElement as i}from\"react\";export{isValidElement as isReactElement}from\"react\";const a=t=>!(\"function\"!=typeof t||!t.prototype||!t.prototype.isReactComponent),u=t=>\"function\"==typeof t&&!(t.prototype&&t.prototype.isReactComponent),h=t=>\"object\"==typeof t&&null!==t&&t.$$typeof===Symbol.for(\"react.memo\"),p=t=>u(t)||h(t)||a(t),f=t=>Object.fromEntries(Object.entries(t).filter((([,t])=>p(t)))),l=Array.isArray;\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\nfunction y(t,e,r,n){if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return e.get(t)}function d(t,e,r,n,o){if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return e.set(t,r),r}var b,m,C,j;\"function\"==typeof SuppressedError&&SuppressedError;class w{constructor(t,e){b.set(this,0),m.set(this,0),C.set(this,0),j.set(this,0),this.reset(e),\"string\"==typeof t&&t.length>0&&this.hash(t)}hash(t){let e,r=y(this,b),n=y(this,C),o=0,c=t.length;switch(d(this,j,y(this,j)+c),y(this,m)){case 0:n^=c>o?65535&t.charCodeAt(o++):0;case 1:n^=c>o?(65535&t.charCodeAt(o++))<<8:0;case 2:n^=c>o?(65535&t.charCodeAt(o++))<<16:0;case 3:c>o&&(n^=(255&t.charCodeAt(o))<<24,n^=(65280&t.charCodeAt(o++))>>8)}if(d(this,m,c+y(this,m)&3),c-=y(this,m),c>0){for(;n=11601*n+3432906752*(65535&n)&4294967295,n=n<<15|n>>>17,n=13715*n+461832192*(65535&n)&4294967295,r^=n,r=r<<13|r>>>19,r=5*r+3864292196&4294967295,!(o>=c);)n=65535&t.charCodeAt(o++)^(65535&t.charCodeAt(o++))<<8^(65535&t.charCodeAt(o++))<<16,e=t.charCodeAt(o++),n^=(255&e)<<24^(65280&e)>>8;switch(n=0,y(this,m)){case 3:n^=(65535&t.charCodeAt(o+2))<<16;case 2:n^=(65535&t.charCodeAt(o+1))<<8;case 1:n^=65535&t.charCodeAt(o)}}return d(this,b,r),d(this,C,n),this}result(){let t=y(this,C),e=y(this,b);return t>0&&(t=11601*t+3432906752*(65535&t)&4294967295,t=t<<15|t>>>17,t=13715*t+461832192*(65535&t)&4294967295,e^=t),e^=y(this,j),e^=e>>>16,e=51819*e+2246770688*(65535&e)&4294967295,e^=e>>>13,e=44597*e+3266445312*(65535&e)&4294967295,e^=e>>>16,e>>>0}reset(t){return d(this,b,\"number\"==typeof t?t:0),d(this,m,d(this,C,d(this,j,0))),this}}b=new WeakMap,m=new WeakMap,C=new WeakMap,j=new WeakMap;const A=e=>{const r=t();var n;return r.current||(r.current={value:(n=e,\"function\"==typeof n?e():e)}),r.current.value},g=(r,n)=>{const o=t(!1);e((()=>{o.current||(o.current=!!r())}),n)},O=(e,n)=>{const o=t(!1);r((()=>{o.current||(o.current=!!e())}),n)},v=e=>{const r=t(e);return r.current=e,r},E=t=>{const e=v(t);return n(((...t)=>\"function\"!=typeof e.current?null:e.current(...t)),[e])},S=t=>{const e=v(t);return o((()=>e.current),[e])},k=t=>{e(t,[])},M=t=>{r(t,[])},W=t=>{e((()=>t),[])},$=t=>{r((()=>t),[])},R=(t,e)=>x(t,e).current,x=(e,r)=>{const n=t(e),c=t(J(e,r)),s=o((()=>J(e,r)),[e,r]);return s&&c.current!==s&&(n.current=e,c.current=s),n},J=(t,e)=>{return(t=>{if(!t)return!0;if(function(t){if(!t||\"object\"!=typeof t)return!1;const e=Object.getPrototypeOf(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e))&&\"[object Object]\"===Object.prototype.toString.call(t)}(t)){for(const e in t)return!1;return!0}return!!l(t)&&0===t.length})(t)?null:(r=((t,e)=>{if(!t||\"object\"!=typeof t)return JSON.stringify(t);const r=Object.entries(t).sort((([t],[e])=>t.localeCompare(e))),n=new Array(r.length);for(let t=0;t<r.length;t++){const[o,c]=r[t];e?.includes(o)||(n[t]=`${o}:${\"object\"==typeof c?JSON.stringify(c):c}`)}return n.join(\"|\")})(t,e),new w(r).result());var r},N=()=>{const[t,e]=c(0);return[t,n((()=>{e((t=>t+1))}),[])]},P=(t,e)=>t?s(t)?t:p(t)?i(t,e):null:null;export{a as isClassComponent,u as isFunctionComponent,h as isMemoComponent,p as isReactComponent,f as remainOnlyReactComponent,P as renderComponent,A as useConstant,g as useEffectUntil,E as useHandle,O as useLayoutEffectUntil,S as useMemorize,k as useOnMount,M as useOnMountLayout,W as useOnUnmount,$ as useOnUnmountLayout,v as useReference,R as useSnapshot,x as useSnapshotReference,N as useTick};\n//# sourceMappingURL=index.esm.js.map\n","const t=1,e=1e3,r=6e4,o=36e5,s=24*o,n=1e3,i=1e6,c=1e3*i,a=1e3*c,f=1e3*a,h=1e3*f,l=[],p={},u=()=>{},y=()=>{},d=()=>null,b=()=>!1,w=()=>!0;function j(t){if(!t||\"object\"!=typeof t)return!1;const e=Object.getPrototypeOf(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e))&&\"[object Object]\"===Object.prototype.toString.call(t)}const g=t=>{if(!j(t))return!1;for(const e in t)return!1;return!0},A=t=>Array.isArray(t)&&0===t.length,m=t=>\"function\"==typeof t,O=t=>Boolean(t),C=t=>void 0===t,v=t=>null===t,E=t=>null==t,S=t=>\"boolean\"==typeof t,k=t=>\"number\"==typeof t,$=t=>\"string\"==typeof t,M=Array.isArray;\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\nfunction P(t,e,r,o){if(\"a\"===r&&!o)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===r?o:\"a\"===r?o.call(t):o?o.value:e.get(t)}function T(t,e,r,o,s){if(\"m\"===o)throw new TypeError(\"Private method is not writable\");if(\"a\"===o&&!s)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!s:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===o?s.call(t,r):s?s.value=r:e.set(t,r),r}var x,W,J,N;\"function\"==typeof SuppressedError&&SuppressedError;class B{constructor(t,e){x.set(this,0),W.set(this,0),J.set(this,0),N.set(this,0),this.reset(e),\"string\"==typeof t&&t.length>0&&this.hash(t)}hash(t){let e,r=P(this,x,\"f\"),o=P(this,J,\"f\"),s=0,n=t.length;switch(T(this,N,P(this,N,\"f\")+n,\"f\"),P(this,W,\"f\")){case 0:o^=n>s?65535&t.charCodeAt(s++):0;case 1:o^=n>s?(65535&t.charCodeAt(s++))<<8:0;case 2:o^=n>s?(65535&t.charCodeAt(s++))<<16:0;case 3:n>s&&(o^=(255&t.charCodeAt(s))<<24,o^=(65280&t.charCodeAt(s++))>>8)}if(T(this,W,n+P(this,W,\"f\")&3,\"f\"),n-=P(this,W,\"f\"),n>0){for(;o=11601*o+3432906752*(65535&o)&4294967295,o=o<<15|o>>>17,o=13715*o+461832192*(65535&o)&4294967295,r^=o,r=r<<13|r>>>19,r=5*r+3864292196&4294967295,!(s>=n);)o=65535&t.charCodeAt(s++)^(65535&t.charCodeAt(s++))<<8^(65535&t.charCodeAt(s++))<<16,e=t.charCodeAt(s++),o^=(255&e)<<24^(65280&e)>>8;switch(o=0,P(this,W,\"f\")){case 3:o^=(65535&t.charCodeAt(s+2))<<16;case 2:o^=(65535&t.charCodeAt(s+1))<<8;case 1:o^=65535&t.charCodeAt(s)}}return T(this,x,r,\"f\"),T(this,J,o,\"f\"),this}result(){let t=P(this,J,\"f\"),e=P(this,x,\"f\");return t>0&&(t=11601*t+3432906752*(65535&t)&4294967295,t=t<<15|t>>>17,t=13715*t+461832192*(65535&t)&4294967295,e^=t),e^=P(this,N,\"f\"),e^=e>>>16,e=51819*e+2246770688*(65535&e)&4294967295,e^=e>>>13,e=44597*e+3266445312*(65535&e)&4294967295,e^=e>>>16,e>>>0}reset(t){return T(this,x,\"number\"==typeof t?t:0,\"f\"),T(this,W,T(this,J,T(this,N,0,\"f\"),\"f\"),\"f\"),this}}x=new WeakMap,W=new WeakMap,J=new WeakMap,N=new WeakMap;const q=t=>new B(t).result(),z=t=>Object.fromEntries(Object.entries(t).map((([t,e])=>j(e)?[t,z(e)]:[t,e])).filter((([,t])=>void 0!==t))),D=(t,e)=>{if(!t||\"object\"!=typeof t)return JSON.stringify(t);const r=Object.entries(t).sort((([t],[e])=>t.localeCompare(e))),o=new Array(r.length);for(let t=0;t<r.length;t++){const[s,n]=r[t];e?.includes(s)||(o[t]=`${s}:${\"object\"==typeof n?JSON.stringify(n):n}`)}return o.join(\"|\")},F=t=>{if(!t||\"object\"!=typeof t)return String(t);const e=[{obj:t,prefix:\"\"}],r=[];for(;e.length>0;){const{obj:t,prefix:o}=e.pop(),s=Object.keys(t).sort();for(const n of s){const s=t[n],i=o?`${o}.${n}`:n;s&&\"object\"==typeof s?e.push({obj:s,prefix:i}):r.push(`${i}:${String(s)}`)}}return r.join(\"|\")},G=(t,e=[])=>{if(!t)return{};const r=new Set(e),o=[...e,...Object.keys(t).filter((t=>!r.has(t)))];return Object.fromEntries(o.filter((e=>e in t)).map((e=>[e,t[e]])))},H=(t,e)=>{const r=Object.keys(e),o=r.length;for(let s=0;s<o;s++){const o=r[s],n=e[o],i=t[o];M(n)?t[o]=M(i)?H(i,n):H([],n):j(n)?t[o]=j(i)?H(i,n):H({},n):void 0!==i&&void 0===n||(t[o]=n)}return t},I=()=>`${Math.random()}`.slice(2);export{s as DAY,l as EMPTY_ARRAY,p as EMPTY_OBJECT,h as EXA,c as GIGA,o as HOUR,n as KILO,i as MEGA,t as MILLISECOND,r as MINUTE,B as Murmur3,f as PETA,e as SECOND,a as TERA,b as falseFunction,q as generateHash,I as getRandomNumber,M as isArray,S as isBoolean,A as isEmptyArray,g as isEmptyObject,m as isFunction,E as isNil,v as isNull,k as isNumber,j as isPlainObject,$ as isString,O as isTruthy,C as isUndefined,H as merge,d as nullFunction,z as removeUndefined,G as sortObjectKeys,D as stringifyObject,F as stringifyObjectWithFullSortedKeys,w as trueFunction,y as undefinedFunction,u as voidFunction};\n//# sourceMappingURL=index.esm.js.map\n","import { MutableRefObject } from 'react';\n\nimport { getRandomNumber } from '@winglet/common-utils';\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, label = 'modal-anchor'): 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', `${label}-${getRandomNumber()}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","export const DEFAULT_ANIMATION_DURATION = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR = 'rgba(0, 0, 0, 0.5)';\n","import { type MouseEvent, useCallback } from 'react';\n\nimport cx from 'clsx';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport styles from './Background.module.css';\n\nexport const Background = ({ modalId, onChangeOrder }: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\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 if (!modal) return null;\n\n const visible = modal.manualDestroy ? modal.alive : modal.visible;\n\n return (\n <div\n className={cx(styles.root, {\n [styles.visible]: visible,\n [styles.active]: modal.closeOnBackdropClick && visible,\n })}\n onClick={handleClose}\n >\n {BackgroundComponent && (\n <BackgroundComponent\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 />\n )}\n </div>\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 { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { 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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({ onConfirm: handleConfirm })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\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 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 { 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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\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 />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(modal.Input),\n }),\n [modal],\n );\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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n onChange: handleChange,\n value,\n disabled,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n disabled={disabled}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import cx from 'clsx';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport styles from './Foreground.module.css';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const Foreground = ({ modalId, onChangeOrder }: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(styles.root, {\n [styles.active]: modal.manualDestroy ? modal.alive : modal.visible,\n })}\n >\n <ForegroundComponent\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 >\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 </ForegroundComponent>\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 { 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 styles from './Presenter.module.css';\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={styles.modal}>\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 FooterOptions,\n ModalBackground,\n} from '@/promise-modal/types';\n\ninterface AlertProps<B> {\n subtype?: 'info' | 'success' | 'warning' | 'error';\n title: string;\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}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 });\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 ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\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}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\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}\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}: 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: ({ defaultValue, onChange, onConfirm }: PromptInputProps<T>) =>\n Input({\n defaultValue,\n onChange,\n onConfirm,\n }),\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ReactNode } from 'react';\n\nimport type {\n BaseModal,\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 #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 }: 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.#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 }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 { 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 { 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 { memo, useEffect } from 'react';\n\nimport { useTick } 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 styles from './Anchor.module.css';\n\nexport const Anchor = memo(() => {\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={styles.root}\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","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={styles.fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={styles.fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={styles.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 styles from './styles.module.css';\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={styles.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 {\n type ComponentType,\n type PropsWithChildren,\n createContext,\n} from 'react';\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 { FooterComponentProps, ModalFrameProps } from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ComponentType<PropsWithChildren<ModalFrameProps>>;\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent: ComponentType<PropsWithChildren>;\n SubtitleComponent: ComponentType<PropsWithChildren>;\n ContentComponent: ComponentType<PropsWithChildren>;\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 { 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} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<PropsWithChildren>;\n SubtitleComponent?: ComponentType<PropsWithChildren>;\n ContentComponent?: ComponentType<PropsWithChildren>;\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 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 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 <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>,\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 { 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":["SuppressedError","v","e","r","t","current","E","n","k","N","c","P","s","prototype","isReactComponent","u","$$typeof","Symbol","for","h","a","p","i","y","$","prerenderListRef","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","label","document","getElementById","id","node","createElement","setAttribute","Math","random","slice","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","Background","modalId","onChangeOrder","BackgroundComponent","useModalContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","visible","stopPropagation","manualDestroy","alive","_jsx","className","cx","styles$4_visible","styles","styles$4_active","onClick","children","type","initiator","background","AlertInner","memo","handlers","title","subtitle","content","footer","useMemo","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","value","setValue","useState","handleChange","inputValue","input","setTimeout","Foreground","ForegroundComponent","styles$3_active","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","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","createContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","Provider","useContext","Anchor","key","useEffect","dimmed","transitionDuration","backgroundColor","backdrop","map","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","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":["../../../winglet/react-utils/dist/index.esm.js","../../../winglet/common-utils/dist/index.esm.js","../src/app/ModalManager.ts","../src/app/constant.ts","../src/components/Background/Background.tsx","../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/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/Anchor.tsx","../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{useRef as t,useEffect as e,useLayoutEffect as r,useCallback as n,useMemo as o,useState as c,isValidElement as s,createElement as i}from\"react\";export{isValidElement as isReactElement}from\"react\";const a=t=>!(\"function\"!=typeof t||!t.prototype||!t.prototype.isReactComponent),u=t=>\"function\"==typeof t&&!(t.prototype&&t.prototype.isReactComponent),h=t=>\"object\"==typeof t&&null!==t&&t.$$typeof===Symbol.for(\"react.memo\"),p=t=>u(t)||h(t)||a(t),f=t=>Object.fromEntries(Object.entries(t).filter((([,t])=>p(t)))),l=Array.isArray;\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\nfunction y(t,e,r,n){if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return e.get(t)}function d(t,e,r,n,o){if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return e.set(t,r),r}var b,m,C,j;\"function\"==typeof SuppressedError&&SuppressedError;class w{constructor(t,e){b.set(this,0),m.set(this,0),C.set(this,0),j.set(this,0),this.reset(e),\"string\"==typeof t&&t.length>0&&this.hash(t)}hash(t){let e,r=y(this,b),n=y(this,C),o=0,c=t.length;switch(d(this,j,y(this,j)+c),y(this,m)){case 0:n^=c>o?65535&t.charCodeAt(o++):0;case 1:n^=c>o?(65535&t.charCodeAt(o++))<<8:0;case 2:n^=c>o?(65535&t.charCodeAt(o++))<<16:0;case 3:c>o&&(n^=(255&t.charCodeAt(o))<<24,n^=(65280&t.charCodeAt(o++))>>8)}if(d(this,m,c+y(this,m)&3),c-=y(this,m),c>0){for(;n=11601*n+3432906752*(65535&n)&4294967295,n=n<<15|n>>>17,n=13715*n+461832192*(65535&n)&4294967295,r^=n,r=r<<13|r>>>19,r=5*r+3864292196&4294967295,!(o>=c);)n=65535&t.charCodeAt(o++)^(65535&t.charCodeAt(o++))<<8^(65535&t.charCodeAt(o++))<<16,e=t.charCodeAt(o++),n^=(255&e)<<24^(65280&e)>>8;switch(n=0,y(this,m)){case 3:n^=(65535&t.charCodeAt(o+2))<<16;case 2:n^=(65535&t.charCodeAt(o+1))<<8;case 1:n^=65535&t.charCodeAt(o)}}return d(this,b,r),d(this,C,n),this}result(){let t=y(this,C),e=y(this,b);return t>0&&(t=11601*t+3432906752*(65535&t)&4294967295,t=t<<15|t>>>17,t=13715*t+461832192*(65535&t)&4294967295,e^=t),e^=y(this,j),e^=e>>>16,e=51819*e+2246770688*(65535&e)&4294967295,e^=e>>>13,e=44597*e+3266445312*(65535&e)&4294967295,e^=e>>>16,e>>>0}reset(t){return d(this,b,\"number\"==typeof t?t:0),d(this,m,d(this,C,d(this,j,0))),this}}b=new WeakMap,m=new WeakMap,C=new WeakMap,j=new WeakMap;const A=e=>{const r=t();var n;return r.current||(r.current={value:(n=e,\"function\"==typeof n?e():e)}),r.current.value},g=(r,n)=>{const o=t(!1);e((()=>{o.current||(o.current=!!r())}),n)},O=(e,n)=>{const o=t(!1);r((()=>{o.current||(o.current=!!e())}),n)},v=e=>{const r=t(e);return r.current=e,r},E=t=>{const e=v(t);return n(((...t)=>\"function\"!=typeof e.current?null:e.current(...t)),[e])},S=t=>{const e=v(t);return o((()=>e.current),[e])},k=t=>{e(t,[])},M=t=>{r(t,[])},W=t=>{e((()=>t),[])},$=t=>{r((()=>t),[])},R=(t,e)=>x(t,e).current,x=(e,r)=>{const n=t(e),c=t(J(e,r)),s=o((()=>J(e,r)),[e,r]);return s&&c.current!==s&&(n.current=e,c.current=s),n},J=(t,e)=>{return(t=>{if(!t)return!0;if(function(t){if(!t||\"object\"!=typeof t)return!1;const e=Object.getPrototypeOf(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e))&&\"[object Object]\"===Object.prototype.toString.call(t)}(t)){for(const e in t)return!1;return!0}return!!l(t)&&0===t.length})(t)?null:(r=((t,e)=>{if(!t||\"object\"!=typeof t)return JSON.stringify(t);const r=Object.entries(t).sort((([t],[e])=>t.localeCompare(e))),n=new Array(r.length);for(let t=0;t<r.length;t++){const[o,c]=r[t];e?.includes(o)||(n[t]=`${o}:${\"object\"==typeof c?JSON.stringify(c):c}`)}return n.join(\"|\")})(t,e),new w(r).result());var r},N=()=>{const[t,e]=c(0);return[t,n((()=>{e((t=>t+1))}),[])]},P=(t,e)=>t?s(t)?t:p(t)?i(t,e):null:null;export{a as isClassComponent,u as isFunctionComponent,h as isMemoComponent,p as isReactComponent,f as remainOnlyReactComponent,P as renderComponent,A as useConstant,g as useEffectUntil,E as useHandle,O as useLayoutEffectUntil,S as useMemorize,k as useOnMount,M as useOnMountLayout,W as useOnUnmount,$ as useOnUnmountLayout,v as useReference,R as useSnapshot,x as useSnapshotReference,N as useTick};\n//# sourceMappingURL=index.esm.js.map\n","const t=1,e=1e3,r=6e4,o=36e5,s=24*o,n=1e3,i=1e6,c=1e3*i,a=1e3*c,f=1e3*a,h=1e3*f,l=[],p={},u=()=>{},y=()=>{},d=()=>null,b=()=>!1,w=()=>!0;function j(t){if(!t||\"object\"!=typeof t)return!1;const e=Object.getPrototypeOf(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e))&&\"[object Object]\"===Object.prototype.toString.call(t)}const g=t=>{if(!j(t))return!1;for(const e in t)return!1;return!0},A=t=>Array.isArray(t)&&0===t.length,m=t=>\"function\"==typeof t,O=t=>Boolean(t),C=t=>void 0===t,v=t=>null===t,E=t=>null==t,S=t=>\"boolean\"==typeof t,k=t=>\"number\"==typeof t,$=t=>\"string\"==typeof t,M=Array.isArray;\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\nfunction P(t,e,r,o){if(\"a\"===r&&!o)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===r?o:\"a\"===r?o.call(t):o?o.value:e.get(t)}function T(t,e,r,o,s){if(\"m\"===o)throw new TypeError(\"Private method is not writable\");if(\"a\"===o&&!s)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!s:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===o?s.call(t,r):s?s.value=r:e.set(t,r),r}var x,W,J,N;\"function\"==typeof SuppressedError&&SuppressedError;class B{constructor(t,e){x.set(this,0),W.set(this,0),J.set(this,0),N.set(this,0),this.reset(e),\"string\"==typeof t&&t.length>0&&this.hash(t)}hash(t){let e,r=P(this,x,\"f\"),o=P(this,J,\"f\"),s=0,n=t.length;switch(T(this,N,P(this,N,\"f\")+n,\"f\"),P(this,W,\"f\")){case 0:o^=n>s?65535&t.charCodeAt(s++):0;case 1:o^=n>s?(65535&t.charCodeAt(s++))<<8:0;case 2:o^=n>s?(65535&t.charCodeAt(s++))<<16:0;case 3:n>s&&(o^=(255&t.charCodeAt(s))<<24,o^=(65280&t.charCodeAt(s++))>>8)}if(T(this,W,n+P(this,W,\"f\")&3,\"f\"),n-=P(this,W,\"f\"),n>0){for(;o=11601*o+3432906752*(65535&o)&4294967295,o=o<<15|o>>>17,o=13715*o+461832192*(65535&o)&4294967295,r^=o,r=r<<13|r>>>19,r=5*r+3864292196&4294967295,!(s>=n);)o=65535&t.charCodeAt(s++)^(65535&t.charCodeAt(s++))<<8^(65535&t.charCodeAt(s++))<<16,e=t.charCodeAt(s++),o^=(255&e)<<24^(65280&e)>>8;switch(o=0,P(this,W,\"f\")){case 3:o^=(65535&t.charCodeAt(s+2))<<16;case 2:o^=(65535&t.charCodeAt(s+1))<<8;case 1:o^=65535&t.charCodeAt(s)}}return T(this,x,r,\"f\"),T(this,J,o,\"f\"),this}result(){let t=P(this,J,\"f\"),e=P(this,x,\"f\");return t>0&&(t=11601*t+3432906752*(65535&t)&4294967295,t=t<<15|t>>>17,t=13715*t+461832192*(65535&t)&4294967295,e^=t),e^=P(this,N,\"f\"),e^=e>>>16,e=51819*e+2246770688*(65535&e)&4294967295,e^=e>>>13,e=44597*e+3266445312*(65535&e)&4294967295,e^=e>>>16,e>>>0}reset(t){return T(this,x,\"number\"==typeof t?t:0,\"f\"),T(this,W,T(this,J,T(this,N,0,\"f\"),\"f\"),\"f\"),this}}x=new WeakMap,W=new WeakMap,J=new WeakMap,N=new WeakMap;const q=t=>new B(t).result(),z=t=>Object.fromEntries(Object.entries(t).map((([t,e])=>j(e)?[t,z(e)]:[t,e])).filter((([,t])=>void 0!==t))),D=(t,e)=>{if(!t||\"object\"!=typeof t)return JSON.stringify(t);const r=Object.entries(t).sort((([t],[e])=>t.localeCompare(e))),o=new Array(r.length);for(let t=0;t<r.length;t++){const[s,n]=r[t];e?.includes(s)||(o[t]=`${s}:${\"object\"==typeof n?JSON.stringify(n):n}`)}return o.join(\"|\")},F=t=>{if(!t||\"object\"!=typeof t)return String(t);const e=[{obj:t,prefix:\"\"}],r=[];for(;e.length>0;){const{obj:t,prefix:o}=e.pop(),s=Object.keys(t).sort();for(const n of s){const s=t[n],i=o?`${o}.${n}`:n;s&&\"object\"==typeof s?e.push({obj:s,prefix:i}):r.push(`${i}:${String(s)}`)}}return r.join(\"|\")},G=(t,e=[])=>{if(!t)return{};const r=new Set(e),o=[...e,...Object.keys(t).filter((t=>!r.has(t)))];return Object.fromEntries(o.filter((e=>e in t)).map((e=>[e,t[e]])))},H=(t,e)=>{const r=Object.keys(e),o=r.length;for(let s=0;s<o;s++){const o=r[s],n=e[o],i=t[o];M(n)?t[o]=M(i)?H(i,n):H([],n):j(n)?t[o]=j(i)?H(i,n):H({},n):void 0!==i&&void 0===n||(t[o]=n)}return t},I=()=>`${Math.random()}`.slice(2);export{s as DAY,l as EMPTY_ARRAY,p as EMPTY_OBJECT,h as EXA,c as GIGA,o as HOUR,n as KILO,i as MEGA,t as MILLISECOND,r as MINUTE,B as Murmur3,f as PETA,e as SECOND,a as TERA,b as falseFunction,q as generateHash,I as getRandomNumber,M as isArray,S as isBoolean,A as isEmptyArray,g as isEmptyObject,m as isFunction,E as isNil,v as isNull,k as isNumber,j as isPlainObject,$ as isString,O as isTruthy,C as isUndefined,H as merge,d as nullFunction,z as removeUndefined,G as sortObjectKeys,D as stringifyObject,F as stringifyObjectWithFullSortedKeys,w as trueFunction,y as undefinedFunction,u as voidFunction};\n//# sourceMappingURL=index.esm.js.map\n","import { MutableRefObject } from 'react';\n\nimport { getRandomNumber } from '@winglet/common-utils';\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, label = 'modal-anchor'): 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', `${label}-${getRandomNumber()}`);\n document.body.appendChild(node);\n anchorRef.current = node;\n return node;\n },\n};\n","export const DEFAULT_ANIMATION_DURATION = '300ms';\n\nexport const DEFAULT_BACKDROP_COLOR = 'rgba(0, 0, 0, 0.5)';\n","import { type MouseEvent, useCallback } from 'react';\n\nimport cx from 'clsx';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport styles from './Background.module.css';\n\nexport const Background = ({ modalId, onChangeOrder }: ModalLayerProps) => {\n const { BackgroundComponent } = useModalContext();\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 if (!modal) return null;\n\n const visible = modal.manualDestroy ? modal.alive : modal.visible;\n\n return (\n <div\n className={cx(styles.root, {\n [styles.visible]: visible,\n [styles.active]: modal.closeOnBackdropClick && visible,\n })}\n onClick={handleClose}\n >\n {BackgroundComponent && (\n <BackgroundComponent\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 />\n )}\n </div>\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 { AlertNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface AlertInnerProps<B> {\n modal: AlertNode<B>;\n handlers: Pick<ModalActions, 'onConfirm'>;\n}\n\nexport const AlertInner = memo(\n <B,>({ modal, handlers }: AlertInnerProps<B>) => {\n const { title, subtitle, content, footer } = useMemo(() => modal, [modal]);\n const { 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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({ onConfirm: handleConfirm })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n confirmLabel={footer?.confirm}\n hideConfirm={footer?.hideConfirm}\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 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 { 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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n })\n ))}\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\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 />\n ))}\n </Fragment>\n );\n },\n);\n","import { Fragment, memo, useCallback, useMemo, useState } from 'react';\n\nimport { isFunction, isString } from '@winglet/common-utils';\nimport { renderComponent, useHandle } from '@winglet/react-utils';\n\nimport type { PromptNode } from '@/promise-modal/core';\nimport { useModalContext } from '@/promise-modal/providers';\nimport type { ModalActions } from '@/promise-modal/types';\n\ninterface PromptInnerProps<T, B> {\n modal: PromptNode<T, B>;\n handlers: Pick<ModalActions, 'onChange' | 'onClose' | 'onConfirm'>;\n}\n\nexport const PromptInner = memo(\n <T, B>({ modal, handlers }: PromptInnerProps<T, B>) => {\n const {\n Input,\n defaultValue,\n disabled: checkDisabled,\n title,\n subtitle,\n content,\n footer,\n } = useMemo(\n () => ({\n ...modal,\n Input: memo(modal.Input),\n }),\n [modal],\n );\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) ? <TitleComponent>{title}</TitleComponent> : title)}\n {subtitle &&\n (isString(subtitle) ? (\n <SubtitleComponent>{subtitle}</SubtitleComponent>\n ) : (\n subtitle\n ))}\n {content &&\n (isString(content) ? (\n <ContentComponent>{content}</ContentComponent>\n ) : (\n renderComponent(content, {\n onConfirm: handleConfirm,\n onCancel: handleClose,\n })\n ))}\n\n {Input && (\n <Input\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n onConfirm={handleConfirm}\n />\n )}\n\n {footer !== false &&\n (typeof footer === 'function' ? (\n footer({\n onConfirm: handleConfirm,\n onCancel: handleClose,\n onChange: handleChange,\n value,\n disabled,\n })\n ) : (\n <FooterComponent\n onConfirm={handleConfirm}\n onCancel={handleClose}\n disabled={disabled}\n confirmLabel={footer?.confirm}\n cancelLabel={footer?.cancel}\n hideConfirm={footer?.hideConfirm}\n hideCancel={footer?.hideCancel}\n />\n ))}\n </Fragment>\n );\n },\n);\n","import cx from 'clsx';\n\nimport { useModal, useModalContext } from '@/promise-modal/providers';\nimport type { ModalLayerProps } from '@/promise-modal/types';\n\nimport styles from './Foreground.module.css';\nimport { AlertInner, ConfirmInner, PromptInner } from './components';\n\nexport const Foreground = ({ modalId, onChangeOrder }: ModalLayerProps) => {\n const { ForegroundComponent } = useModalContext();\n\n const { modal, onChange, onConfirm, onClose, onDestroy } = useModal(modalId);\n\n if (!modal) return null;\n\n return (\n <div\n className={cx(styles.root, {\n [styles.active]: modal.manualDestroy ? modal.alive : modal.visible,\n })}\n >\n <ForegroundComponent\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 >\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 </ForegroundComponent>\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 { 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 styles from './Presenter.module.css';\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={styles.modal}>\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 FooterOptions,\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}\n\nexport const alert = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 });\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 ConfirmContentProps,\n ConfirmFooterRender,\n FooterOptions,\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}\n\nexport const confirm = <B = any>({\n subtype,\n title,\n subtitle,\n content,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\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 });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ComponentType, ReactNode } from 'react';\n\nimport type {\n FooterOptions,\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}\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}: 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: ({ defaultValue, onChange, onConfirm }: PromptInputProps<T>) =>\n Input({\n defaultValue,\n onChange,\n onConfirm,\n }),\n defaultValue,\n disabled,\n returnOnCancel,\n background,\n footer,\n manualDestroy,\n closeOnBackdropClick,\n });\n } catch (error) {\n reject(error);\n }\n });\n};\n","import type { ReactNode } from 'react';\n\nimport type {\n BaseModal,\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 #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 }: 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.#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 }: AlertNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 }: ConfirmNodeProps<B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 }: PromptNodeProps<T, B>) {\n super({\n id,\n initiator,\n title,\n subtitle,\n background,\n manualDestroy,\n closeOnBackdropClick,\n resolve,\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 { 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 { 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 { memo, useEffect } from 'react';\n\nimport { useTick } 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 styles from './Anchor.module.css';\n\nexport const Anchor = memo(() => {\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={styles.root}\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","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackTitle = ({ children }: PropsWithChildren) => {\n return <h2 className={styles.fallback}>{children}</h2>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackSubtitle = ({ children }: PropsWithChildren) => {\n return <h3 className={styles.fallback}>{children}</h3>;\n};\n","import type { PropsWithChildren } from 'react';\n\nimport styles from './styles.module.css';\n\nexport const FallbackContent = ({ children }: PropsWithChildren) => {\n return <div className={styles.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 styles from './styles.module.css';\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={styles.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 {\n type ComponentType,\n type PropsWithChildren,\n createContext,\n} from 'react';\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 { FooterComponentProps, ModalFrameProps } from '@/promise-modal/types';\n\nexport interface ModalContextProps {\n ForegroundComponent: ComponentType<PropsWithChildren<ModalFrameProps>>;\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent: ComponentType<PropsWithChildren>;\n SubtitleComponent: ComponentType<PropsWithChildren>;\n ContentComponent: ComponentType<PropsWithChildren>;\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 { 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} from '@/promise-modal/types';\n\nimport { ModalDataContextProvider } from '../ModalDataContext';\nimport { ModalContext } from './ModalContext';\n\ninterface ModalContextProviderProps {\n BackgroundComponent?: ComponentType<ModalFrameProps>;\n ForegroundComponent?: ComponentType<ModalFrameProps>;\n TitleComponent?: ComponentType<PropsWithChildren>;\n SubtitleComponent?: ComponentType<PropsWithChildren>;\n ContentComponent?: ComponentType<PropsWithChildren>;\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 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 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 <ModalDataContextProvider pathname={pathname}>\n <Anchor />\n </ModalDataContextProvider>,\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 { 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":["SuppressedError","v","e","r","t","current","E","n","k","N","c","P","s","prototype","isReactComponent","u","$$typeof","Symbol","for","h","a","p","i","y","$","prerenderListRef","openModalRef","modal","push","anchorRef","ModalManager","prerender","clearPrerender","open","setupOpen","anchor","name","label","document","getElementById","id","node","createElement","setAttribute","Math","random","slice","body","appendChild","DEFAULT_ANIMATION_DURATION","DEFAULT_BACKDROP_COLOR","Background","modalId","onChangeOrder","BackgroundComponent","useModalContext","onClose","onChange","onConfirm","onDestroy","useModal","handleClose","useCallback","event","closeOnBackdropClick","visible","stopPropagation","manualDestroy","alive","_jsx","className","cx","styles$4_visible","styles","styles$4_active","onClick","children","type","initiator","background","AlertInner","memo","handlers","title","subtitle","content","footer","useMemo","handleConfirm","useHandle","TitleComponent","SubtitleComponent","ContentComponent","FooterComponent","_jsxs","Fragment","isString","renderComponent","confirmLabel","confirm","hideConfirm","ConfirmInner","onCancel","cancelLabel","cancel","hideCancel","PromptInner","Input","defaultValue","disabled","checkDisabled","value","setValue","useState","handleChange","inputValue","input","setTimeout","Foreground","ForegroundComponent","styles$3_active","useSubscribeModal","tick","update","useTick","useOnMount","subscribe","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","createContext","undefinedFunction","setUpdater","getModal","undefined","ModalDataContextProvider","pathname","modalDictionary","Map","setModalIds","modalIdsRef","useReference","modalIdSequence","options","useModalOptions","data","ids","destroyed","get","delete","useLayoutEffect","updaterRef","hideModal","updater","Provider","useContext","Anchor","key","useEffect","dimmed","transitionDuration","backgroundColor","backdrop","map","FallbackTitle","FallbackSubtitle","FallbackContent","FallbackFooter","FallbackForegroundFrame","forwardRef","activeCount","level","offset","stacked","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,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lerx/promise-modal",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
|
-
"url": "https://github.com/vincent-kk/
|
|
6
|
+
"url": "https://github.com/vincent-kk/altovion.git",
|
|
7
7
|
"directory": "packages/promise-modal"
|
|
8
8
|
},
|
|
9
9
|
"license": "MIT",
|
|
@@ -22,11 +22,9 @@
|
|
|
22
22
|
"scripts": {
|
|
23
23
|
"format": "prettier --write \"src/**/*.ts\" \"src/**/*.tsx\"",
|
|
24
24
|
"clean": "rm -rf dist",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"build:
|
|
28
|
-
"build": "yarn dependencies:build && yarn build:only",
|
|
29
|
-
"build:watch": "yarn clean && yarn build:only -w",
|
|
25
|
+
"test": "yarn build:chain && vitest",
|
|
26
|
+
"build": "yarn clean && rollup -c && tsc-alias",
|
|
27
|
+
"build:chain": "yarn clean && yarn workspaces foreach --recursive --topological run build",
|
|
30
28
|
"start": "yarn build && yarn storybook",
|
|
31
29
|
"lint": "eslint \"src/**/*.{ts,tsx}\" --report-unused-disable-directives --max-warnings 0",
|
|
32
30
|
"size-limit": "size-limit",
|