{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/composables/useRegistry/index.ts"],"sourcesContent":["import {\n  type ComponentInternalInstance,\n  computed,\n  inject,\n  provide,\n  readonly,\n  type Ref,\n  ref,\n} from 'vue'\nimport {\n  breadcrumbGlobalIndexKey,\n  breadcrumbRegistryKey,\n  modalManagerKey,\n  type RegisterShowHideFnInput,\n  type RegisterShowHideInstances,\n  type RegisterShowHideMapValue,\n  rtlRegistryKey,\n  showHideRegistryKey,\n} from '../../utils/keys'\nimport type {BAppProps} from '../../types/ComponentProps'\nimport type {BreadcrumbItemRaw} from '../../types/BreadcrumbTypes'\n\nexport const useRegistry = (rtl: BAppProps['rtl'] = false) => {\n  const showHideStorage = inject(showHideRegistryKey, null)\n  if (!showHideStorage) {\n    const {register, values} = _newShowHideRegistry()\n    provide(showHideRegistryKey, {register, values})\n  }\n\n  const modalManager = inject(modalManagerKey, null)\n  if (!modalManager) {\n    const stack: Ref<Map<number, ComponentInternalInstance>> = ref(new Map())\n\n    const countStack = computed(() => stack.value.size)\n    const valuesStack = computed(() => [...stack.value.values()])\n    const lastStack = computed(() => valuesStack.value[valuesStack.value.length - 1])\n\n    const pushStack = (modal: Readonly<ComponentInternalInstance>) => {\n      stack.value.set(modal.uid, modal)\n    }\n    const removeStack = (modal: Readonly<ComponentInternalInstance>) => {\n      stack.value.delete(modal.uid)\n    }\n\n    /**\n     * A collection of all registered modals\n     */\n    const registry: Ref<Map<number, ComponentInternalInstance>> = ref(new Map())\n\n    // Utility getters not made, would not be used (count, last)\n\n    const pushRegistry = (modal: Readonly<ComponentInternalInstance>) => {\n      registry.value.set(modal.uid, modal)\n    }\n    const removeRegistry = (modal: Readonly<ComponentInternalInstance>) => {\n      registry.value.delete(modal.uid)\n    }\n\n    provide(modalManagerKey, {\n      countStack,\n      lastStack,\n      registry: computed(() => registry.value),\n      stack: valuesStack,\n      pushStack,\n      removeStack,\n      pushRegistry,\n      removeRegistry,\n    })\n  }\n\n  const breadcrumb = inject(breadcrumbRegistryKey, null)\n  if (!breadcrumb) {\n    const items = ref<Record<string, BreadcrumbItemRaw[]>>({\n      [breadcrumbGlobalIndexKey]: [],\n    })\n    const reset = (key: string = breadcrumbGlobalIndexKey) => {\n      items.value[key] = []\n    }\n\n    provide(breadcrumbRegistryKey, {items, reset})\n  }\n\n  const rtlRegistry = inject(rtlRegistryKey, null)\n  if (!rtlRegistry) {\n    const rtlDefault = false\n    const localeDefault = undefined\n\n    const rtlInitial = typeof rtl === 'boolean' ? rtlDefault : (rtl?.rtlInitial ?? rtlDefault)\n\n    const localeInitial =\n      typeof rtl === 'boolean' ? localeDefault : (rtl?.localeInitial ?? localeDefault)\n\n    const isRtl = ref(rtlInitial)\n    const locale = ref(localeInitial)\n\n    provide(rtlRegistryKey, {isRtl, locale})\n  }\n}\n\n// Helper function to create getActive method for instance holders\nconst createGetActive = (instances: RegisterShowHideMapValue[]) => () =>\n  instances.length > 0 ? instances[instances.length - 1] : undefined\n\nexport const _newShowHideRegistry = () => {\n  const values: Ref<Map<string, RegisterShowHideInstances>> = ref(new Map())\n\n  const register = ({\n    id,\n    component,\n    value,\n    toggle,\n    show,\n    hide,\n    registerTrigger,\n    unregisterTrigger,\n  }: RegisterShowHideFnInput) => {\n    let currentId = id\n    const instanceValue: RegisterShowHideMapValue = {\n      id,\n      component,\n      value: readonly(value),\n      toggle,\n      show,\n      hide,\n      registerTrigger,\n      unregisterTrigger,\n    }\n\n    // Get or create the instances array for this ID\n    let instancesHolder = values.value.get(currentId)\n    if (!instancesHolder) {\n      const instances: RegisterShowHideMapValue[] = []\n      instancesHolder = {\n        instances,\n        // Returns the last mounted instance (most recent)\n        getActive: createGetActive(instances),\n      }\n      values.value.set(currentId, instancesHolder)\n    }\n\n    // Append this instance to the array\n    instancesHolder.instances.push(instanceValue)\n\n    const componentUid = component.uid\n\n    return {\n      unregister() {\n        const holder = values.value.get(currentId)\n        if (!holder) return\n\n        // Remove only this component's instance by UID\n        const index = holder.instances.findIndex(\n          (inst: RegisterShowHideMapValue) => inst.component.uid === componentUid\n        )\n        if (index !== -1) {\n          holder.instances.splice(index, 1)\n        }\n\n        // Clean up the map entry if no instances remain\n        if (holder.instances.length === 0) {\n          values.value.delete(currentId)\n        }\n      },\n      updateId(newId: string, oldId: string) {\n        const holder = values.value.get(oldId)\n        if (!holder) return\n\n        // Find this component's instance in the array\n        const instance = holder.instances.find(\n          (inst: RegisterShowHideMapValue) => inst.component.uid === componentUid\n        )\n        if (!instance) return\n\n        // Update the ID in the instance\n        instance.id = newId\n\n        // Get or create holder for new ID\n        let newHolder = values.value.get(newId)\n        if (!newHolder) {\n          const instances: RegisterShowHideMapValue[] = []\n          newHolder = {\n            instances,\n            getActive: createGetActive(instances),\n          }\n          values.value.set(newId, newHolder)\n        }\n\n        // Move this instance to the new ID's array\n        const index = holder.instances.findIndex(\n          (inst: RegisterShowHideMapValue) => inst.component.uid === componentUid\n        )\n        if (index !== -1) {\n          holder.instances.splice(index, 1)\n          newHolder.instances.push(instance)\n        }\n\n        // Clean up old ID if no instances remain\n        if (holder.instances.length === 0) {\n          values.value.delete(oldId)\n        }\n        // Keep local id in sync so unregister() uses the latest key\n        currentId = newId\n      },\n    }\n  }\n  return {\n    register,\n    values,\n  }\n}\n"],"mappings":";;;AAsBA,IAAa,eAAe,MAAwB,UAAU;CAE5D,IAAI,CADoB,OAAO,qBAAqB,IAC/C,GAAiB;EACpB,MAAM,EAAC,UAAU,WAAU,qBAAqB;EAChD,QAAQ,qBAAqB;GAAC;GAAU;EAAM,CAAC;CACjD;CAGA,IAAI,CADiB,OAAO,iBAAiB,IACxC,GAAc;EACjB,MAAM,QAAqD,oBAAI,IAAI,IAAI,CAAC;EAExE,MAAM,aAAa,eAAe,MAAM,MAAM,IAAI;EAClD,MAAM,cAAc,eAAe,CAAC,GAAG,MAAM,MAAM,OAAO,CAAC,CAAC;EAC5D,MAAM,YAAY,eAAe,YAAY,MAAM,YAAY,MAAM,SAAS,EAAE;EAEhF,MAAM,aAAa,UAA+C;GAChE,MAAM,MAAM,IAAI,MAAM,KAAK,KAAK;EAClC;EACA,MAAM,eAAe,UAA+C;GAClE,MAAM,MAAM,OAAO,MAAM,GAAG;EAC9B;;;;EAKA,MAAM,WAAwD,oBAAI,IAAI,IAAI,CAAC;EAI3E,MAAM,gBAAgB,UAA+C;GACnE,SAAS,MAAM,IAAI,MAAM,KAAK,KAAK;EACrC;EACA,MAAM,kBAAkB,UAA+C;GACrE,SAAS,MAAM,OAAO,MAAM,GAAG;EACjC;EAEA,QAAQ,iBAAiB;GACvB;GACA;GACA,UAAU,eAAe,SAAS,KAAK;GACvC,OAAO;GACP;GACA;GACA;GACA;EACF,CAAC;CACH;CAGA,IAAI,CADe,OAAO,uBAAuB,IAC5C,GAAY;EACf,MAAM,QAAQ,IAAyC,GACpD,2BAA2B,CAAC,EAC/B,CAAC;EACD,MAAM,SAAS,MAAc,6BAA6B;GACxD,MAAM,MAAM,OAAO,CAAC;EACtB;EAEA,QAAQ,uBAAuB;GAAC;GAAO;EAAK,CAAC;CAC/C;CAGA,IAAI,CADgB,OAAO,gBAAgB,IACtC,GAAa;EAChB,MAAM,aAAa;EACnB,MAAM,gBAAgB,KAAA;EAEtB,MAAM,aAAa,OAAO,QAAQ,YAAY,aAAc,KAAK,cAAc;EAE/E,MAAM,gBACJ,OAAO,QAAQ,YAAY,gBAAiB,KAAK,iBAAiB;EAEpE,MAAM,QAAQ,IAAI,UAAU;EAC5B,MAAM,SAAS,IAAI,aAAa;EAEhC,QAAQ,gBAAgB;GAAC;GAAO;EAAM,CAAC;CACzC;AACF;AAGA,IAAM,mBAAmB,oBACvB,UAAU,SAAS,IAAI,UAAU,UAAU,SAAS,KAAK,KAAA;AAE3D,IAAa,6BAA6B;CACxC,MAAM,SAAsD,oBAAI,IAAI,IAAI,CAAC;CAEzE,MAAM,YAAY,EAChB,IACA,WACA,OACA,QACA,MACA,MACA,iBACA,wBAC6B;EAC7B,IAAI,YAAY;EAChB,MAAM,gBAA0C;GAC9C;GACA;GACA,OAAO,SAAS,KAAK;GACrB;GACA;GACA;GACA;GACA;EACF;EAGA,IAAI,kBAAkB,OAAO,MAAM,IAAI,SAAS;EAChD,IAAI,CAAC,iBAAiB;GACpB,MAAM,YAAwC,CAAC;GAC/C,kBAAkB;IAChB;IAEA,WAAW,gBAAgB,SAAS;GACtC;GACA,OAAO,MAAM,IAAI,WAAW,eAAe;EAC7C;EAGA,gBAAgB,UAAU,KAAK,aAAa;EAE5C,MAAM,eAAe,UAAU;EAE/B,OAAO;GACL,aAAa;IACX,MAAM,SAAS,OAAO,MAAM,IAAI,SAAS;IACzC,IAAI,CAAC,QAAQ;IAGb,MAAM,QAAQ,OAAO,UAAU,WAC5B,SAAmC,KAAK,UAAU,QAAQ,YAC7D;IACA,IAAI,UAAU,IACZ,OAAO,UAAU,OAAO,OAAO,CAAC;IAIlC,IAAI,OAAO,UAAU,WAAW,GAC9B,OAAO,MAAM,OAAO,SAAS;GAEjC;GACA,SAAS,OAAe,OAAe;IACrC,MAAM,SAAS,OAAO,MAAM,IAAI,KAAK;IACrC,IAAI,CAAC,QAAQ;IAGb,MAAM,WAAW,OAAO,UAAU,MAC/B,SAAmC,KAAK,UAAU,QAAQ,YAC7D;IACA,IAAI,CAAC,UAAU;IAGf,SAAS,KAAK;IAGd,IAAI,YAAY,OAAO,MAAM,IAAI,KAAK;IACtC,IAAI,CAAC,WAAW;KACd,MAAM,YAAwC,CAAC;KAC/C,YAAY;MACV;MACA,WAAW,gBAAgB,SAAS;KACtC;KACA,OAAO,MAAM,IAAI,OAAO,SAAS;IACnC;IAGA,MAAM,QAAQ,OAAO,UAAU,WAC5B,SAAmC,KAAK,UAAU,QAAQ,YAC7D;IACA,IAAI,UAAU,IAAI;KAChB,OAAO,UAAU,OAAO,OAAO,CAAC;KAChC,UAAU,UAAU,KAAK,QAAQ;IACnC;IAGA,IAAI,OAAO,UAAU,WAAW,GAC9B,OAAO,MAAM,OAAO,KAAK;IAG3B,YAAY;GACd;EACF;CACF;CACA,OAAO;EACL;EACA;CACF;AACF"}