{"version":3,"file":"index.mjs","sources":["../../../../src/plugins/modalController/index.ts"],"sourcesContent":["import {markRaw, type Plugin, ref, toRef, watch} from 'vue'\nimport {modalControllerPluginKey} from '../../utils/keys'\nimport type {\n  ControllerKey,\n  ModalOrchestratorMapValue,\n  ModalOrchestratorShowParam,\n} from '../../types/ComponentOrchestratorTypes'\n\nexport const modalControllerPlugin: Plugin = {\n  install(app) {\n    const modals = ref(new Map<ControllerKey, ModalOrchestratorMapValue>())\n\n    const buildPromise = (): {\n      value: Promise<boolean | null>\n      resolve: (value: boolean | null) => void\n    } => {\n      let resolveFunc: (value: boolean | null) => void = () => {\n        /* empty */\n      }\n\n      const promise = new Promise<boolean | null>((resolve) => {\n        resolveFunc = resolve\n      })\n\n      return {\n        value: promise,\n        resolve: resolveFunc,\n      }\n    }\n\n    const buildPrereqs = (id: string | undefined) =>\n      [buildPromise(), (id || Symbol('Modals controller')) as ControllerKey, true] as const\n\n    const show = (obj: ModalOrchestratorShowParam = {}): Promise<boolean | null> => {\n      const resolvedProps = toRef(obj.props)\n\n      const [_promise, _self, _modelValue] = buildPrereqs(resolvedProps.value?.id)\n\n      modals.value.set(_self, {\n        component: !obj.component ? undefined : markRaw(obj.component),\n        props: {...resolvedProps.value, _isConfirm: false, _promise, _modelValue},\n      })\n\n      watch(resolvedProps, (newValue) => {\n        const previous = modals.value.get(_self)\n        if (!previous) return\n        modals.value.set(_self, {\n          component: !obj.component ? undefined : markRaw(obj.component),\n          props: {...previous.props, ...newValue},\n        })\n      })\n\n      return _promise.value\n    }\n\n    const confirm = (obj: ModalOrchestratorShowParam = {}): Promise<boolean | null> => {\n      const resolvedProps = toRef(obj.props)\n\n      const [_promise, _self, _modelValue] = buildPrereqs(resolvedProps.value?.id)\n\n      modals.value.set(_self, {\n        component: !obj.component ? undefined : markRaw(obj.component),\n        props: {...resolvedProps.value, _isConfirm: true, _promise, _modelValue},\n      })\n\n      watch(resolvedProps, (newValue) => {\n        const previous = modals.value.get(_self)\n        if (!previous) return\n        modals.value.set(_self, {\n          component: !obj.component ? undefined : markRaw(obj.component),\n          props: {...previous.props, ...newValue},\n        })\n      })\n\n      return _promise.value\n    }\n\n    /**\n     * You can get the symbol param from the return value from the show method, or use props.id\n     */\n    const leave = (self: ControllerKey) => {\n      const modal = modals.value.get(self)\n      if (!modal?.props) return\n      modal.props = {\n        ...modal.props,\n        _modelValue: false,\n      }\n    }\n\n    /**\n     * You can get the symbol param from the return value from the show method, or use props.id\n     */\n    const remove = (self: ControllerKey) => {\n      modals.value.delete(self)\n    }\n\n    app.provide(modalControllerPluginKey, {\n      modals,\n      remove,\n      show,\n      confirm,\n      leave,\n    })\n  },\n}\n"],"names":[],"mappings":";;AAQO,MAAM,wBAAgC;AAAA,EAC3C,QAAQ,KAAK;AACX,UAAM,SAAS,IAAQ,oBAAA,KAA+C;AAEtE,UAAM,eAAe,MAGhB;AACH,UAAI,cAA+C,MAAM;AAAA,MAEzD;AAEA,YAAM,UAAU,IAAI,QAAwB,CAAC,YAAY;AACzC,sBAAA;AAAA,MAAA,CACf;AAEM,aAAA;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAEM,UAAA,eAAe,CAAC,OACpB,CAAC,aAAA,GAAiB,MAAM,OAAO,mBAAmB,GAAqB,IAAI;AAE7E,UAAM,OAAO,CAAC,MAAkC,OAAgC;;AACxE,YAAA,gBAAgB,MAAM,IAAI,KAAK;AAE/B,YAAA,CAAC,UAAU,OAAO,WAAW,IAAI,cAAa,mBAAc,UAAd,mBAAqB,EAAE;AAEpE,aAAA,MAAM,IAAI,OAAO;AAAA,QACtB,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,QAC7D,OAAO,EAAC,GAAG,cAAc,OAAO,YAAY,OAAO,UAAU,YAAW;AAAA,MAAA,CACzE;AAEK,YAAA,eAAe,CAAC,aAAa;AACjC,cAAM,WAAW,OAAO,MAAM,IAAI,KAAK;AACvC,YAAI,CAAC,SAAU;AACR,eAAA,MAAM,IAAI,OAAO;AAAA,UACtB,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,UAC7D,OAAO,EAAC,GAAG,SAAS,OAAO,GAAG,SAAQ;AAAA,QAAA,CACvC;AAAA,MAAA,CACF;AAED,aAAO,SAAS;AAAA,IAClB;AAEA,UAAM,UAAU,CAAC,MAAkC,OAAgC;;AAC3E,YAAA,gBAAgB,MAAM,IAAI,KAAK;AAE/B,YAAA,CAAC,UAAU,OAAO,WAAW,IAAI,cAAa,mBAAc,UAAd,mBAAqB,EAAE;AAEpE,aAAA,MAAM,IAAI,OAAO;AAAA,QACtB,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,QAC7D,OAAO,EAAC,GAAG,cAAc,OAAO,YAAY,MAAM,UAAU,YAAW;AAAA,MAAA,CACxE;AAEK,YAAA,eAAe,CAAC,aAAa;AACjC,cAAM,WAAW,OAAO,MAAM,IAAI,KAAK;AACvC,YAAI,CAAC,SAAU;AACR,eAAA,MAAM,IAAI,OAAO;AAAA,UACtB,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,UAC7D,OAAO,EAAC,GAAG,SAAS,OAAO,GAAG,SAAQ;AAAA,QAAA,CACvC;AAAA,MAAA,CACF;AAED,aAAO,SAAS;AAAA,IAClB;AAKM,UAAA,QAAQ,CAAC,SAAwB;AACrC,YAAM,QAAQ,OAAO,MAAM,IAAI,IAAI;AAC/B,UAAA,EAAC,+BAAO,OAAO;AACnB,YAAM,QAAQ;AAAA,QACZ,GAAG,MAAM;AAAA,QACT,aAAa;AAAA,MACf;AAAA,IACF;AAKM,UAAA,SAAS,CAAC,SAAwB;AAC/B,aAAA,MAAM,OAAO,IAAI;AAAA,IAC1B;AAEA,QAAI,QAAQ,0BAA0B;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAEL;"}