{"version":3,"file":"orchestratorShared-BTC5xO6k.mjs","sources":["../src/composables/orchestratorShared.ts"],"sourcesContent":["import {\n  type ComponentPublicInstance,\n  inject,\n  nextTick,\n  provide,\n  type Ref,\n  ref,\n  toValue,\n  type WatchHandle,\n} from 'vue'\nimport type {\n  ControllerKey,\n  OrchestratorArrayValue,\n  PromiseWithComponent,\n  PromiseWithComponentInternal,\n} from '../types/ComponentOrchestratorTypes'\nimport type {BvTriggerableEvent} from '../utils'\nimport {orchestratorRegistryKey} from '../utils/keys'\n\nexport function buildPromise<TComponent, TParam, TArrayValue extends OrchestratorArrayValue>(\n  _id: ControllerKey,\n  store: Ref<TArrayValue[]>\n): {\n  value: PromiseWithComponent<TComponent, TParam>\n  resolve: (value: BvTriggerableEvent | boolean | null) => void\n  stop: WatchHandle | undefined\n} {\n  let resolveFunc: (value: BvTriggerableEvent | boolean | null) => void = () => {}\n\n  const promise = new Promise<BvTriggerableEvent | boolean | null>((resolve) => {\n    resolveFunc = resolve\n  }) as PromiseWithComponent<TComponent, TParam>\n\n  type RefWithMethods = ComponentPublicInstance<TComponent> & {\n    show?: () => void\n    hide?: (trigger?: string, noEmit?: boolean) => void\n    toggle?: () => void\n  }\n  Object.assign(promise, {\n    id: _id,\n    ref: null as ComponentPublicInstance<TComponent> | null,\n    show() {\n      const refWithMethods = this.ref as RefWithMethods | null\n      if (refWithMethods?.show) {\n        refWithMethods.show()\n      } else return this.set({modelValue: true} as unknown as Partial<TParam>)\n      return promise\n    },\n    hide(trigger?: string) {\n      const refWithMethods = this.ref as RefWithMethods | null\n      if (refWithMethods?.hide) {\n        refWithMethods.hide(trigger, true)\n      } else return this.set({modelValue: false} as unknown as Partial<TParam>)\n      return promise\n    },\n    toggle() {\n      const currentItem = this.get() as TParam & {modelValue?: unknown}\n      const refWithMethods = this.ref as RefWithMethods | null\n      if (refWithMethods?.toggle) {\n        refWithMethods.toggle()\n      } else return this.set({modelValue: !currentItem?.modelValue} as unknown as Partial<TParam>)\n      return promise\n    },\n    get(): TParam | undefined {\n      return store.value.find((el) => el._self === _id) as TParam | undefined\n    },\n    set(val: Partial<TParam>) {\n      const itemIndex = store.value.findIndex((el) => el._self === _id)\n      const item = store.value[itemIndex]\n      if (item) {\n        const v = {...toValue(item), ...toValue(val)}\n        if (item.modelValue !== v.modelValue) {\n          item['onUpdate:modelValue']?.(v.modelValue as boolean)\n        }\n        const updatedItem = {\n          ...v,\n          modelValue: toValue(v.modelValue),\n        } as TArrayValue\n        // Only set title and body if they are defined in v\n        const vRecord = v as Record<string, unknown>\n        if ('title' in vRecord && vRecord.title !== undefined) {\n          ;(updatedItem as Record<string, unknown>).title = toValue(vRecord.title)\n        }\n        if ('body' in vRecord && vRecord.body !== undefined) {\n          ;(updatedItem as Record<string, unknown>).body = toValue(vRecord.body)\n        }\n        store.value.splice(itemIndex, 1, updatedItem)\n      }\n      return promise\n    },\n    async destroy() {\n      const item = store.value.find((el) => el._self === _id)\n      if (!item) return\n      item.promise.stop?.()\n      if (item.modelValue) {\n        await new Promise((resolve) => {\n          const prev = item['onHidden']\n          item['onHidden'] = (e) => {\n            prev?.(e)\n            resolve(e)\n          }\n          nextTick(() => {\n            this.hide('destroy')\n          })\n        })\n      }\n      store.value.splice(\n        store.value.findIndex((el) => el._self === _id),\n        1\n      )\n    },\n    async [Symbol.asyncDispose]() {\n      await this.destroy()\n    },\n  } as PromiseWithComponentInternal<TComponent, TParam>)\n\n  return {\n    value: promise,\n    resolve: resolveFunc,\n    stop: undefined as WatchHandle | undefined,\n  }\n}\n\nexport const _newOrchestratorRegistry = (): {\n  store: Ref<OrchestratorArrayValue[]>\n  _isOrchestratorInstalled: Ref<boolean>\n  _isToastAppend: Ref<boolean>\n} => ({\n  store: ref<OrchestratorArrayValue[]>([]),\n  _isOrchestratorInstalled: ref(false),\n  _isToastAppend: ref(false),\n})\n\nexport const useOrchestratorRegistry = () => {\n  const orchestratorRegistry = inject(orchestratorRegistryKey, undefined)\n\n  if (orchestratorRegistry) {\n    return orchestratorRegistry\n  }\n  const newOrchestratorRegistry = _newOrchestratorRegistry()\n  provide(orchestratorRegistryKey, newOrchestratorRegistry)\n  return newOrchestratorRegistry\n}\n"],"names":[],"mappings":"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"}