{"version":3,"file":"index.mjs","sources":["../../../../src/plugins/toastController/index.ts"],"sourcesContent":["import {\n  isReadonly,\n  isRef,\n  markRaw,\n  nextTick,\n  onScopeDispose,\n  type Plugin,\n  ref,\n  type Ref,\n  toRef,\n  toValue,\n  watch,\n  type WatchHandle,\n} from 'vue'\nimport {toastPluginKey} from '../../utils/keys'\nimport type {ContainerPosition} from '../../types/Alignment'\nimport type {\n  ControllerKey,\n  PromiseWithToast,\n  PromiseWithToastInternal,\n  ToastOrchestratorArrayValue,\n  ToastOrchestratorCreateOptions,\n  ToastOrchestratorCreateParam,\n  ToastOrchestratorParam,\n} from '../../types/ComponentOrchestratorTypes'\nimport type {BvTriggerableEvent} from '../../utils'\n\nconst posDefault: ContainerPosition = 'top-end'\n\nexport const toastPlugin: Plugin = {\n  install(app) {\n    const toasts = ref<ToastOrchestratorArrayValue[]>([])\n\n    const _isAppend = ref(false)\n\n    const buildPromise = (\n      _id: ControllerKey\n    ): {\n      value: PromiseWithToast\n      resolve: (value: BvTriggerableEvent) => void\n      stop?: WatchHandle\n    } => {\n      let resolveFunc: (value: BvTriggerableEvent) => void = () => {}\n\n      const promise = new Promise<BvTriggerableEvent>((resolve) => {\n        resolveFunc = resolve\n      }) as PromiseWithToast\n      Object.assign(promise, {\n        id: _id,\n        ref: null,\n        show() {\n          if (!this.ref) return this.set({modelValue: true})\n          this.ref.show()\n          return promise\n        },\n        hide(trigger?: string) {\n          if (!this.ref) return this.set({modelValue: false})\n          this.ref.hide(trigger, true)\n          return promise\n        },\n        toggle() {\n          if (!this.ref) return this.set({modelValue: !this.get()?.modelValue})\n          this.ref.toggle()\n          return promise\n        },\n        get() {\n          return toasts.value.find((el) => el._self === _id)\n        },\n        set(val: Partial<ToastOrchestratorParam>) {\n          const toastIndex = toasts.value.findIndex((el) => el._self === _id)\n          const toast = toasts.value[toastIndex]\n          if (toast) {\n            const v = {...toValue(toast), ...toValue(val)}\n            if (toast.modelValue !== v.modelValue) {\n              toast['onUpdate:modelValue']?.(v.modelValue as boolean)\n            }\n            toasts.value.splice(toastIndex, 1, {\n              ...v,\n              title: toValue(v.title),\n              body: toValue(v.body),\n              modelValue: toValue(v.modelValue),\n            })\n          }\n          return promise\n        },\n        async destroy() {\n          const toast = toasts.value.find((el) => el._self === _id)\n          if (!toast) return\n          toast.promise.stop?.()\n          if (toast.modelValue) {\n            await new Promise((resolve) => {\n              toast.modelValue = false\n              const prev = toast['onHidden']\n              toast['onHidden'] = (e) => {\n                prev?.(e)\n                resolve(e)\n              }\n              nextTick(() => {\n                toast['onUpdate:modelValue']?.(false)\n              })\n            })\n          }\n          toasts.value.splice(\n            toasts.value.findIndex((el) => el._self === _id),\n            1\n          )\n        },\n        async [Symbol.asyncDispose]() {\n          await this.destroy()\n        },\n      } as PromiseWithToastInternal)\n\n      return {\n        value: promise,\n        resolve: resolveFunc,\n      }\n    }\n\n    /**\n     * @returns {PromiseWithToast} Returns a promise object with methods to control the toast (show, hide, toggle, get, set, destroy)\n     */\n    const create = (\n      obj: ToastOrchestratorCreateParam = {},\n      options: ToastOrchestratorCreateOptions = {}\n    ): PromiseWithToast => {\n      const {component, slots} = toValue(obj)\n      if (component) {\n        if (isRef(obj)) obj.value.component = markRaw(component)\n        else if (typeof obj === 'object') obj.component = markRaw(component)\n      }\n      if (slots) {\n        if (isRef(obj)) obj.value.slots = markRaw(slots)\n        else if (typeof obj === 'object') obj.slots = markRaw(slots)\n      }\n      const resolvedProps = toRef(obj)\n\n      const _self = resolvedProps.value?.id || Symbol('Toast controller')\n      const promise = buildPromise(_self)\n\n      promise.stop = watch(\n        resolvedProps,\n        (_newValue) => {\n          const newValue = {...toValue(_newValue)}\n          const previousIndex = toasts.value.findIndex((el) => el._self === _self)\n          const previous = previousIndex === -1 ? {} : toasts.value[previousIndex]\n          const v: ToastOrchestratorArrayValue = {\n            _self,\n            ...(previous || {}),\n            promise,\n            options,\n          }\n          if (newValue.props) {\n            Object.assign(v, newValue.props)\n            newValue.props = undefined\n          }\n          if (newValue.pos) {\n            v.position = newValue.pos\n            newValue.pos = undefined\n          }\n          for (const key in newValue) {\n            if (key.startsWith('on')) {\n              v[key as keyof ToastOrchestratorCreateParam] =\n                newValue[key as keyof ToastOrchestratorCreateParam]\n            } else {\n              v[key as keyof ToastOrchestratorCreateParam] = toValue(\n                newValue[key as keyof ToastOrchestratorCreateParam]\n              )\n            }\n          }\n          v.position = v.position || posDefault\n          v.modelValue = v.modelValue ?? 5000\n          v['onUpdate:modelValue'] = (val: boolean) => {\n            newValue['onUpdate:modelValue']?.(val)\n            const {modelValue} = toValue(obj)\n            if (isRef(obj) && !isRef(modelValue)) obj.value.modelValue = val\n            if (isRef(modelValue) && !isReadonly(modelValue)) {\n              ;(modelValue as Ref<ToastOrchestratorArrayValue['modelValue']>).value = val\n            }\n            if (v.modelValue !== val) {\n              const toast = toasts.value.find((el) => el._self === _self)\n              if (toast) {\n                toast.modelValue = val\n              }\n            }\n          }\n          if (previousIndex === -1) {\n            if (\n              resolvedProps.value?.appendToast !== undefined\n                ? resolvedProps.value.appendToast\n                : _isAppend.value\n            ) {\n              toasts.value.push(v)\n            } else {\n              toasts.value.unshift(v)\n            }\n          } else {\n            toasts.value.splice(previousIndex, 1, v)\n          }\n        },\n        {\n          deep: true,\n          immediate: true,\n        }\n      )\n      onScopeDispose(() => {\n        const toast = toasts.value.find((el) => el._self === _self)\n        if (toast) {\n          toast.promise.value.destroy?.()\n        }\n      }, true)\n      return promise.value\n    }\n\n    /*\n     * @deprecated The `show` method is deprecated. Use the `create` method instead.\n     */\n    const show = (obj: ToastOrchestratorCreateParam = {}): PromiseWithToast => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        '[BootstrapVueNext] useToastController: The `show` method is deprecated. Use the `create` method instead.'\n      )\n      return create(obj)\n    }\n\n    app.provide(toastPluginKey, {\n      _isAppend,\n      _isOrchestratorInstalled: ref(false),\n      toasts,\n      create,\n      show,\n    })\n  },\n}\n"],"names":["_a"],"mappings":"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"}