{"version":3,"file":"BAccordion-BU80DI3B.mjs","names":[],"sources":["../src/components/BAccordion/BAccordionItem.vue","../src/components/BAccordion/BAccordionItem.vue","../src/components/BAccordion/BAccordion.vue","../src/components/BAccordion/BAccordion.vue"],"sourcesContent":["<template>\n  <div\n    ref=\"_el\"\n    class=\"accordion-item\"\n    v-bind=\"props.wrapperAttrs\"\n    :class=\"processedAttrs.wrapperClass\"\n  >\n    <BCollapse\n      :id=\"computedId\"\n      v-model=\"modelValue\"\n      class=\"accordion-collapse\"\n      :class=\"props.collapseClass\"\n      :aria-labelledby=\"`${computedId}-heading`\"\n      v-bind=\"processedAttrs.collapseAttrs\"\n      :tag=\"props.tag\"\n      :show=\"props.show\"\n      :horizontal=\"props.horizontal\"\n      :visible=\"props.visible\"\n      :is-nav=\"props.isNav\"\n      :lazy=\"props.lazy || parentData?.lazy.value\"\n      :unmount-lazy=\"props.unmountLazy || parentData?.unmountLazy.value\"\n      @show=\"emit('show', $event)\"\n      @shown=\"emit('shown', $event)\"\n      @hide=\"emit('hide', $event)\"\n      @hidden=\"emit('hidden', $event)\"\n      @hide-prevented=\"emit('hide-prevented', $event)\"\n      @show-prevented=\"emit('show-prevented', $event)\"\n      @toggle-prevented=\"emit('toggle-prevented', $event)\"\n      @toggle=\"emit('toggle', $event)\"\n    >\n      <template #header=\"{visible: toggleVisible, toggle: slotToggle}\">\n        <component\n          :is=\"props.headerTag\"\n          :id=\"`${computedId}-heading`\"\n          class=\"accordion-header\"\n          :class=\"props.headerClass\"\n          v-bind=\"props.headerAttrs\"\n        >\n          <button\n            class=\"accordion-button\"\n            v-bind=\"props.buttonAttrs\"\n            :class=\"[{collapsed: !toggleVisible}, props.buttonClass]\"\n            type=\"button\"\n            :aria-expanded=\"toggleVisible ? 'true' : 'false'\"\n            :aria-controls=\"computedId\"\n            @click=\"slotToggle\"\n          >\n            <slot name=\"title\"> {{ props.title }} </slot>\n          </button>\n        </component>\n      </template>\n      <div class=\"accordion-body\" v-bind=\"props.bodyAttrs\" :class=\"props.bodyClass\">\n        <slot />\n      </div>\n    </BCollapse>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  computed,\n  inject,\n  nextTick,\n  onMounted,\n  onUnmounted,\n  useAttrs,\n  useTemplateRef,\n  watch,\n} from 'vue'\nimport BCollapse from '../BCollapse/BCollapse.vue'\nimport {accordionInjectionKey} from '../../utils/keys'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BAccordionItemProps} from '../../types/ComponentProps'\nimport type {BAccordionItemEmits} from '../../types/ComponentEmits'\nimport type {BAccordionItemSlots} from '../../types'\nimport {isReadOnlyArray} from '../../utils/object'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BAccordionItemProps, 'modelValue'>>(), {\n  bodyAttrs: undefined,\n  bodyClass: undefined,\n  buttonAttrs: undefined,\n  buttonClass: undefined,\n  collapseClass: undefined,\n  headerAttrs: undefined,\n  headerClass: undefined,\n  headerTag: 'h2',\n  horizontal: undefined,\n  id: undefined,\n  isNav: undefined,\n  lazy: false,\n  unmountLazy: false,\n  tag: undefined,\n  title: undefined,\n  show: undefined,\n  visible: false,\n  wrapperAttrs: undefined,\n})\nconst props = useDefaults(_props, 'BAccordionItem')\nconst emit = defineEmits<BAccordionItemEmits>()\ndefineSlots<BAccordionItemSlots>()\nconst attrs = useAttrs()\n\nconst processedAttrs = computed(() => {\n  const {class: wrapperClass, ...collapseAttrs} = attrs\n  return {wrapperClass, collapseAttrs}\n})\n\nconst parentData = inject(accordionInjectionKey, null)\n\nconst computedId = useId(() => props.id, 'accordion_item')\n\nconst modelValue = defineModel<Exclude<BAccordionItemProps['modelValue'], undefined>>({\n  default: false,\n})\n\nif (modelValue.value) {\n  parentData?.setOpenItem(computedId.value)\n} else {\n  modelValue.value =\n    (isReadOnlyArray(parentData?.openItem.value)\n      ? parentData?.openItem.value.includes(computedId.value)\n      : parentData?.openItem.value === computedId.value) && !parentData?.initialAnimation.value\n}\n\nconst el = useTemplateRef('_el')\nparentData?.registerAccordionItem(computedId.value, el)\n\nonUnmounted(() => {\n  parentData?.unregisterAccordionItem(computedId.value)\n})\n\nonMounted(() => {\n  if (!modelValue.value && parentData?.openItem.value === computedId.value) {\n    nextTick(() => {\n      modelValue.value = true\n    })\n  }\n})\n\nconst openInParent = computed(() =>\n  isReadOnlyArray(parentData?.openItem.value)\n    ? parentData?.openItem.value.includes(computedId.value)\n    : parentData?.openItem.value === computedId.value\n)\n\nwatch(\n  () => parentData?.openItem.value,\n  () => (modelValue.value = openInParent.value)\n)\nwatch(modelValue, () => {\n  if (modelValue.value && !openInParent.value) {\n    parentData?.setOpenItem(computedId.value)\n  } else if (!modelValue.value && openInParent.value) {\n    parentData?.setCloseItem(computedId.value)\n  }\n})\n</script>\n","<template>\n  <div\n    ref=\"_el\"\n    class=\"accordion-item\"\n    v-bind=\"props.wrapperAttrs\"\n    :class=\"processedAttrs.wrapperClass\"\n  >\n    <BCollapse\n      :id=\"computedId\"\n      v-model=\"modelValue\"\n      class=\"accordion-collapse\"\n      :class=\"props.collapseClass\"\n      :aria-labelledby=\"`${computedId}-heading`\"\n      v-bind=\"processedAttrs.collapseAttrs\"\n      :tag=\"props.tag\"\n      :show=\"props.show\"\n      :horizontal=\"props.horizontal\"\n      :visible=\"props.visible\"\n      :is-nav=\"props.isNav\"\n      :lazy=\"props.lazy || parentData?.lazy.value\"\n      :unmount-lazy=\"props.unmountLazy || parentData?.unmountLazy.value\"\n      @show=\"emit('show', $event)\"\n      @shown=\"emit('shown', $event)\"\n      @hide=\"emit('hide', $event)\"\n      @hidden=\"emit('hidden', $event)\"\n      @hide-prevented=\"emit('hide-prevented', $event)\"\n      @show-prevented=\"emit('show-prevented', $event)\"\n      @toggle-prevented=\"emit('toggle-prevented', $event)\"\n      @toggle=\"emit('toggle', $event)\"\n    >\n      <template #header=\"{visible: toggleVisible, toggle: slotToggle}\">\n        <component\n          :is=\"props.headerTag\"\n          :id=\"`${computedId}-heading`\"\n          class=\"accordion-header\"\n          :class=\"props.headerClass\"\n          v-bind=\"props.headerAttrs\"\n        >\n          <button\n            class=\"accordion-button\"\n            v-bind=\"props.buttonAttrs\"\n            :class=\"[{collapsed: !toggleVisible}, props.buttonClass]\"\n            type=\"button\"\n            :aria-expanded=\"toggleVisible ? 'true' : 'false'\"\n            :aria-controls=\"computedId\"\n            @click=\"slotToggle\"\n          >\n            <slot name=\"title\"> {{ props.title }} </slot>\n          </button>\n        </component>\n      </template>\n      <div class=\"accordion-body\" v-bind=\"props.bodyAttrs\" :class=\"props.bodyClass\">\n        <slot />\n      </div>\n    </BCollapse>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  computed,\n  inject,\n  nextTick,\n  onMounted,\n  onUnmounted,\n  useAttrs,\n  useTemplateRef,\n  watch,\n} from 'vue'\nimport BCollapse from '../BCollapse/BCollapse.vue'\nimport {accordionInjectionKey} from '../../utils/keys'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BAccordionItemProps} from '../../types/ComponentProps'\nimport type {BAccordionItemEmits} from '../../types/ComponentEmits'\nimport type {BAccordionItemSlots} from '../../types'\nimport {isReadOnlyArray} from '../../utils/object'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BAccordionItemProps, 'modelValue'>>(), {\n  bodyAttrs: undefined,\n  bodyClass: undefined,\n  buttonAttrs: undefined,\n  buttonClass: undefined,\n  collapseClass: undefined,\n  headerAttrs: undefined,\n  headerClass: undefined,\n  headerTag: 'h2',\n  horizontal: undefined,\n  id: undefined,\n  isNav: undefined,\n  lazy: false,\n  unmountLazy: false,\n  tag: undefined,\n  title: undefined,\n  show: undefined,\n  visible: false,\n  wrapperAttrs: undefined,\n})\nconst props = useDefaults(_props, 'BAccordionItem')\nconst emit = defineEmits<BAccordionItemEmits>()\ndefineSlots<BAccordionItemSlots>()\nconst attrs = useAttrs()\n\nconst processedAttrs = computed(() => {\n  const {class: wrapperClass, ...collapseAttrs} = attrs\n  return {wrapperClass, collapseAttrs}\n})\n\nconst parentData = inject(accordionInjectionKey, null)\n\nconst computedId = useId(() => props.id, 'accordion_item')\n\nconst modelValue = defineModel<Exclude<BAccordionItemProps['modelValue'], undefined>>({\n  default: false,\n})\n\nif (modelValue.value) {\n  parentData?.setOpenItem(computedId.value)\n} else {\n  modelValue.value =\n    (isReadOnlyArray(parentData?.openItem.value)\n      ? parentData?.openItem.value.includes(computedId.value)\n      : parentData?.openItem.value === computedId.value) && !parentData?.initialAnimation.value\n}\n\nconst el = useTemplateRef('_el')\nparentData?.registerAccordionItem(computedId.value, el)\n\nonUnmounted(() => {\n  parentData?.unregisterAccordionItem(computedId.value)\n})\n\nonMounted(() => {\n  if (!modelValue.value && parentData?.openItem.value === computedId.value) {\n    nextTick(() => {\n      modelValue.value = true\n    })\n  }\n})\n\nconst openInParent = computed(() =>\n  isReadOnlyArray(parentData?.openItem.value)\n    ? parentData?.openItem.value.includes(computedId.value)\n    : parentData?.openItem.value === computedId.value\n)\n\nwatch(\n  () => parentData?.openItem.value,\n  () => (modelValue.value = openInParent.value)\n)\nwatch(modelValue, () => {\n  if (modelValue.value && !openInParent.value) {\n    parentData?.setOpenItem(computedId.value)\n  } else if (!modelValue.value && openInParent.value) {\n    parentData?.setCloseItem(computedId.value)\n  }\n})\n</script>\n","<template>\n  <div :id=\"computedId\" class=\"accordion\" :class=\"computedClasses\">\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  computed,\n  nextTick,\n  provide,\n  readonly,\n  ref,\n  type ShallowRef,\n  shallowRef,\n  toRef,\n  unref,\n  type VNode,\n  watch,\n} from 'vue'\nimport {accordionInjectionKey} from '../../utils/keys'\nimport {useId} from '../../composables/useId'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {flattenFragments} from '../../utils/flattenFragments'\nimport BAccordionItem from './BAccordionItem.vue'\nimport {sortSlotElementsByPosition} from '../../utils/dom'\nimport type {BAccordionSlots, BAccordionProps} from '../../types'\nimport {isReadOnlyArray} from '../../utils/object'\n\nconst _props = withDefaults(defineProps<Omit<BAccordionProps, 'modelValue' | 'index'>>(), {\n  flush: false,\n  free: false,\n  initialAnimation: false,\n  id: undefined,\n  lazy: false,\n  unmountLazy: false,\n})\nconst props = useDefaults(_props, 'BAccordion')\nconst slots = defineSlots<BAccordionSlots>()\n\nconst modelValue = defineModel<BAccordionProps['modelValue']>({\n  default: undefined,\n})\n\nconst index = defineModel<BAccordionProps['index']>('index', {\n  default: undefined,\n})\n\nconst itemElementsArray = ref<VNode[]>([])\n\nconst updateItemElementsArray = () => {\n  const itemElements = flattenFragments(slots.default?.({}) ?? [])\n  itemElementsArray.value = (Array.isArray(itemElements) ? itemElements : [itemElements]).filter(\n    (item) => item.type === BAccordionItem\n  )\n}\nupdateItemElementsArray()\n\nwatch(\n  () => slots.default?.({}),\n  () => {\n    updateItemElementsArray()\n    nextTick(() => {\n      sortAccordionItems()\n    })\n  }\n)\n\ninterface AccordionItem {\n  id: string\n  el: Readonly<ShallowRef<HTMLElement | null>>\n}\n\nconst accordionItems = shallowRef<AccordionItem[]>([])\n\nconst sortAccordionItems = () => {\n  accordionItems.value = [...accordionItems.value].sort((a, b) =>\n    sortSlotElementsByPosition(unref(a.el), unref(b.el))\n  )\n  if (modelValue.value) {\n    if (isReadOnlyArray(modelValue.value)) {\n      const next = modelValue.value\n        .map((id) => accordionItems.value.findIndex((item) => item.id === id))\n        .filter((i) => i !== -1)\n\n      if (next.length !== modelValue.value.length) {\n        if (process.env.NODE_ENV === 'development') {\n          console.warn('[BAccordion] Unknown item id in v-model:', modelValue.value)\n        }\n      }\n      index.value = next\n    } else {\n      const idx = accordionItems.value.findIndex((item) => item.id === modelValue.value)\n      if (idx !== -1) index.value = idx\n    }\n  } else if (index.value !== undefined) {\n    modelValue.value = isReadOnlyArray(index.value)\n      ? index.value.map((idx) => accordionItems.value[idx]?.id).filter((el) => el !== undefined)\n      : accordionItems.value[index.value]?.id\n  }\n}\n\nconst computedId = useId(() => props.id, 'accordion')\n\nconst computedClasses = computed(() => ({\n  'accordion-flush': props.flush,\n}))\n\nconst areEqual = (a: unknown, b: unknown) => {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    return a.length === b.length && a.every((item, index) => item === b[index])\n  }\n  return a === b\n}\n\nwatch(index, (newValue, oldValue) => {\n  if (areEqual(newValue, oldValue)) return\n  if (index.value === undefined) {\n    modelValue.value = undefined\n    return\n  }\n\n  if (!props.free) {\n    const idx = !isReadOnlyArray(index.value) ? index.value : index.value?.[0]\n    if (idx !== undefined && accordionItems.value[idx]?.id) {\n      if (modelValue.value !== accordionItems.value[idx]?.id) {\n        modelValue.value = accordionItems.value[idx]?.id\n      }\n    } else {\n      nextTick(() => {\n        index.value = undefined\n      })\n    }\n  } else {\n    // free mode\n    if (isReadOnlyArray(index.value)) {\n      const newValue = index.value\n        .map((item) => accordionItems.value[item]?.id)\n        .filter((el) => el !== undefined)\n      if (!areEqual(newValue, modelValue.value)) {\n        modelValue.value = newValue\n      }\n    } else {\n      const newValue = accordionItems.value[index.value]?.id\n      if (newValue === undefined) {\n        nextTick(() => {\n          index.value = undefined\n        })\n        return\n      }\n      if (!areEqual(newValue, modelValue.value)) {\n        modelValue.value = newValue\n      }\n    }\n  }\n})\n\nwatch(\n  modelValue,\n  (newValue, oldValue) => {\n    if (areEqual(newValue, oldValue)) return\n    if (modelValue.value === undefined) {\n      index.value = undefined\n      return\n    }\n\n    if (!props.free) {\n      const idx = accordionItems.value.findIndex(\n        (item) =>\n          item.id ===\n          (!isReadOnlyArray(modelValue.value) ? modelValue.value : modelValue.value?.[0])\n      )\n\n      if (idx !== -1) {\n        if (index.value !== idx) {\n          index.value = idx\n        }\n      } else {\n        nextTick(() => {\n          modelValue.value = undefined\n        })\n      }\n    } else if (props.free) {\n      if (isReadOnlyArray(modelValue.value)) {\n        const idxes = modelValue.value\n          .map((value) => accordionItems.value.findIndex((item) => item.id === value))\n          .filter((index) => index !== -1)\n        if (idxes.length > 0) {\n          if (!areEqual(idxes, index.value)) {\n            index.value = idxes\n          }\n        } else {\n          nextTick(() => {\n            modelValue.value = undefined\n          })\n        }\n      } else {\n        const newValue = accordionItems.value.findIndex((item) => item.id === modelValue.value)\n        if (!areEqual(newValue, index.value)) {\n          index.value = newValue\n        }\n      }\n    }\n  },\n  {deep: true}\n)\n\nwatch(\n  () => props.free,\n  (free) => {\n    if (modelValue.value) {\n      if (!free && isReadOnlyArray(modelValue.value)) {\n        modelValue.value = modelValue.value[0]\n      } else if (free && !isReadOnlyArray(modelValue.value)) {\n        modelValue.value = [modelValue.value]\n      }\n    }\n  }\n)\n\nprovide(accordionInjectionKey, {\n  openItem: readonly(modelValue),\n  free: toRef(() => props.free),\n  initialAnimation: toRef(() => props.initialAnimation),\n  lazy: toRef(() => props.lazy),\n  unmountLazy: toRef(() => props.unmountLazy),\n  setOpenItem: (id: string) => {\n    if (props.free && !isReadOnlyArray(modelValue.value)) {\n      if (modelValue.value !== undefined) {\n        modelValue.value = [modelValue.value, id]\n      } else {\n        modelValue.value = [id]\n      }\n      return\n    }\n    if (!props.free && isReadOnlyArray(modelValue.value)) {\n      modelValue.value = id\n      return\n    }\n    if (isReadOnlyArray(modelValue.value)) {\n      if (!modelValue.value.includes(id)) {\n        modelValue.value = [...modelValue.value, id]\n      }\n    } else {\n      modelValue.value = id\n    }\n  },\n  setCloseItem: (id: string) => {\n    if (!props.free && isReadOnlyArray(modelValue.value)) {\n      modelValue.value = undefined\n      return\n    }\n    if (isReadOnlyArray(modelValue.value)) {\n      const next = modelValue.value.filter((item) => item !== id)\n      modelValue.value = next.length ? next : undefined\n    } else {\n      if (modelValue.value === id) {\n        modelValue.value = undefined\n      }\n    }\n  },\n  registerAccordionItem: (id: string, el: Readonly<ShallowRef<HTMLElement | null>>) => {\n    accordionItems.value = [...accordionItems.value, {id, el}]\n    if (accordionItems.value.length === itemElementsArray.value.length) {\n      sortAccordionItems()\n    }\n  },\n  unregisterAccordionItem: (id: string) => {\n    accordionItems.value = accordionItems.value.filter((item) => item.id !== id)\n  },\n})\n</script>\n","<template>\n  <div :id=\"computedId\" class=\"accordion\" :class=\"computedClasses\">\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  computed,\n  nextTick,\n  provide,\n  readonly,\n  ref,\n  type ShallowRef,\n  shallowRef,\n  toRef,\n  unref,\n  type VNode,\n  watch,\n} from 'vue'\nimport {accordionInjectionKey} from '../../utils/keys'\nimport {useId} from '../../composables/useId'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {flattenFragments} from '../../utils/flattenFragments'\nimport BAccordionItem from './BAccordionItem.vue'\nimport {sortSlotElementsByPosition} from '../../utils/dom'\nimport type {BAccordionSlots, BAccordionProps} from '../../types'\nimport {isReadOnlyArray} from '../../utils/object'\n\nconst _props = withDefaults(defineProps<Omit<BAccordionProps, 'modelValue' | 'index'>>(), {\n  flush: false,\n  free: false,\n  initialAnimation: false,\n  id: undefined,\n  lazy: false,\n  unmountLazy: false,\n})\nconst props = useDefaults(_props, 'BAccordion')\nconst slots = defineSlots<BAccordionSlots>()\n\nconst modelValue = defineModel<BAccordionProps['modelValue']>({\n  default: undefined,\n})\n\nconst index = defineModel<BAccordionProps['index']>('index', {\n  default: undefined,\n})\n\nconst itemElementsArray = ref<VNode[]>([])\n\nconst updateItemElementsArray = () => {\n  const itemElements = flattenFragments(slots.default?.({}) ?? [])\n  itemElementsArray.value = (Array.isArray(itemElements) ? itemElements : [itemElements]).filter(\n    (item) => item.type === BAccordionItem\n  )\n}\nupdateItemElementsArray()\n\nwatch(\n  () => slots.default?.({}),\n  () => {\n    updateItemElementsArray()\n    nextTick(() => {\n      sortAccordionItems()\n    })\n  }\n)\n\ninterface AccordionItem {\n  id: string\n  el: Readonly<ShallowRef<HTMLElement | null>>\n}\n\nconst accordionItems = shallowRef<AccordionItem[]>([])\n\nconst sortAccordionItems = () => {\n  accordionItems.value = [...accordionItems.value].sort((a, b) =>\n    sortSlotElementsByPosition(unref(a.el), unref(b.el))\n  )\n  if (modelValue.value) {\n    if (isReadOnlyArray(modelValue.value)) {\n      const next = modelValue.value\n        .map((id) => accordionItems.value.findIndex((item) => item.id === id))\n        .filter((i) => i !== -1)\n\n      if (next.length !== modelValue.value.length) {\n        if (process.env.NODE_ENV === 'development') {\n          console.warn('[BAccordion] Unknown item id in v-model:', modelValue.value)\n        }\n      }\n      index.value = next\n    } else {\n      const idx = accordionItems.value.findIndex((item) => item.id === modelValue.value)\n      if (idx !== -1) index.value = idx\n    }\n  } else if (index.value !== undefined) {\n    modelValue.value = isReadOnlyArray(index.value)\n      ? index.value.map((idx) => accordionItems.value[idx]?.id).filter((el) => el !== undefined)\n      : accordionItems.value[index.value]?.id\n  }\n}\n\nconst computedId = useId(() => props.id, 'accordion')\n\nconst computedClasses = computed(() => ({\n  'accordion-flush': props.flush,\n}))\n\nconst areEqual = (a: unknown, b: unknown) => {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    return a.length === b.length && a.every((item, index) => item === b[index])\n  }\n  return a === b\n}\n\nwatch(index, (newValue, oldValue) => {\n  if (areEqual(newValue, oldValue)) return\n  if (index.value === undefined) {\n    modelValue.value = undefined\n    return\n  }\n\n  if (!props.free) {\n    const idx = !isReadOnlyArray(index.value) ? index.value : index.value?.[0]\n    if (idx !== undefined && accordionItems.value[idx]?.id) {\n      if (modelValue.value !== accordionItems.value[idx]?.id) {\n        modelValue.value = accordionItems.value[idx]?.id\n      }\n    } else {\n      nextTick(() => {\n        index.value = undefined\n      })\n    }\n  } else {\n    // free mode\n    if (isReadOnlyArray(index.value)) {\n      const newValue = index.value\n        .map((item) => accordionItems.value[item]?.id)\n        .filter((el) => el !== undefined)\n      if (!areEqual(newValue, modelValue.value)) {\n        modelValue.value = newValue\n      }\n    } else {\n      const newValue = accordionItems.value[index.value]?.id\n      if (newValue === undefined) {\n        nextTick(() => {\n          index.value = undefined\n        })\n        return\n      }\n      if (!areEqual(newValue, modelValue.value)) {\n        modelValue.value = newValue\n      }\n    }\n  }\n})\n\nwatch(\n  modelValue,\n  (newValue, oldValue) => {\n    if (areEqual(newValue, oldValue)) return\n    if (modelValue.value === undefined) {\n      index.value = undefined\n      return\n    }\n\n    if (!props.free) {\n      const idx = accordionItems.value.findIndex(\n        (item) =>\n          item.id ===\n          (!isReadOnlyArray(modelValue.value) ? modelValue.value : modelValue.value?.[0])\n      )\n\n      if (idx !== -1) {\n        if (index.value !== idx) {\n          index.value = idx\n        }\n      } else {\n        nextTick(() => {\n          modelValue.value = undefined\n        })\n      }\n    } else if (props.free) {\n      if (isReadOnlyArray(modelValue.value)) {\n        const idxes = modelValue.value\n          .map((value) => accordionItems.value.findIndex((item) => item.id === value))\n          .filter((index) => index !== -1)\n        if (idxes.length > 0) {\n          if (!areEqual(idxes, index.value)) {\n            index.value = idxes\n          }\n        } else {\n          nextTick(() => {\n            modelValue.value = undefined\n          })\n        }\n      } else {\n        const newValue = accordionItems.value.findIndex((item) => item.id === modelValue.value)\n        if (!areEqual(newValue, index.value)) {\n          index.value = newValue\n        }\n      }\n    }\n  },\n  {deep: true}\n)\n\nwatch(\n  () => props.free,\n  (free) => {\n    if (modelValue.value) {\n      if (!free && isReadOnlyArray(modelValue.value)) {\n        modelValue.value = modelValue.value[0]\n      } else if (free && !isReadOnlyArray(modelValue.value)) {\n        modelValue.value = [modelValue.value]\n      }\n    }\n  }\n)\n\nprovide(accordionInjectionKey, {\n  openItem: readonly(modelValue),\n  free: toRef(() => props.free),\n  initialAnimation: toRef(() => props.initialAnimation),\n  lazy: toRef(() => props.lazy),\n  unmountLazy: toRef(() => props.unmountLazy),\n  setOpenItem: (id: string) => {\n    if (props.free && !isReadOnlyArray(modelValue.value)) {\n      if (modelValue.value !== undefined) {\n        modelValue.value = [modelValue.value, id]\n      } else {\n        modelValue.value = [id]\n      }\n      return\n    }\n    if (!props.free && isReadOnlyArray(modelValue.value)) {\n      modelValue.value = id\n      return\n    }\n    if (isReadOnlyArray(modelValue.value)) {\n      if (!modelValue.value.includes(id)) {\n        modelValue.value = [...modelValue.value, id]\n      }\n    } else {\n      modelValue.value = id\n    }\n  },\n  setCloseItem: (id: string) => {\n    if (!props.free && isReadOnlyArray(modelValue.value)) {\n      modelValue.value = undefined\n      return\n    }\n    if (isReadOnlyArray(modelValue.value)) {\n      const next = modelValue.value.filter((item) => item !== id)\n      modelValue.value = next.length ? next : undefined\n    } else {\n      if (modelValue.value === id) {\n        modelValue.value = undefined\n      }\n    }\n  },\n  registerAccordionItem: (id: string, el: Readonly<ShallowRef<HTMLElement | null>>) => {\n    accordionItems.value = [...accordionItems.value, {id, el}]\n    if (accordionItems.value.length === itemElementsArray.value.length) {\n      sortAccordionItems()\n    }\n  },\n  unregisterAccordionItem: (id: string) => {\n    accordionItems.value = accordionItems.value.filter((item) => item.id !== id)\n  },\n})\n</script>\n"],"mappings":"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"}