{"version":3,"file":"collection.mjs","sources":["../../../../../../packages/components/collection/src/collection.ts"],"sourcesContent":["import { inject, onBeforeUnmount, onMounted, provide, ref, unref } from 'vue'\nimport Collection from './collection.vue'\nimport CollectionItem from './collection-item.vue'\n\nimport type { InjectionKey } from 'vue'\nimport type { SetupContext } from '@vue/runtime-core'\nimport type {\n  BCollectionInjectionContext,\n  BCollectionItemInjectionContext,\n} from './tokens'\n\nexport const COLLECTION_ITEM_SIGN = `data-b-collection-item`\n\n// Make sure the first letter of name is capitalized\nexport const createCollectionWithScope = (name: string) => {\n  const COLLECTION_NAME = `B${name}Collection`\n  const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`\n  const COLLECTION_INJECTION_KEY: InjectionKey<BCollectionInjectionContext> =\n    Symbol(COLLECTION_NAME)\n  const COLLECTION_ITEM_INJECTION_KEY: InjectionKey<BCollectionItemInjectionContext> =\n    Symbol(COLLECTION_ITEM_NAME)\n\n  const BCollection = {\n    ...Collection,\n    name: COLLECTION_NAME,\n    setup() {\n      const collectionRef = ref<HTMLElement | null>(null)\n      const itemMap: BCollectionInjectionContext['itemMap'] = new Map()\n      const getItems = () => {\n        const collectionEl = unref(collectionRef)\n\n        if (!collectionEl) return []\n        const orderedNodes = Array.from(\n          collectionEl.querySelectorAll(`[${COLLECTION_ITEM_SIGN}]`)\n        )\n\n        const items = [...itemMap.values()]\n\n        return items.sort(\n          (a, b) => orderedNodes.indexOf(a.ref!) - orderedNodes.indexOf(b.ref!)\n        )\n      }\n\n      provide(COLLECTION_INJECTION_KEY, {\n        itemMap,\n        getItems,\n        collectionRef,\n      })\n    },\n  }\n\n  const BCollectionItem = {\n    ...CollectionItem,\n    name: COLLECTION_ITEM_NAME,\n    setup(_: unknown, { attrs }: SetupContext) {\n      const collectionItemRef = ref<HTMLElement | null>(null)\n      const collectionInjection = inject(COLLECTION_INJECTION_KEY, undefined)!\n\n      provide(COLLECTION_ITEM_INJECTION_KEY, {\n        collectionItemRef,\n      })\n\n      onMounted(() => {\n        const collectionItemEl = unref(collectionItemRef)\n        if (collectionItemEl) {\n          collectionInjection.itemMap.set(collectionItemEl, {\n            ref: collectionItemEl,\n            ...attrs,\n          })\n        }\n      })\n\n      onBeforeUnmount(() => {\n        const collectionItemEl = unref(collectionItemRef)!\n        collectionInjection.itemMap.delete(collectionItemEl)\n      })\n    },\n  }\n\n  return {\n    COLLECTION_INJECTION_KEY,\n    COLLECTION_ITEM_INJECTION_KEY,\n    BCollection,\n    BCollectionItem,\n  }\n}\n"],"names":[],"mappings":";;;;AAWO,MAAM,oBAAuB,GAAA,CAAA,sBAAA,EAAA;AAGvB,MAAA,yBAAA,GAA4B,CAAC,IAAiB,KAAA;AACzD,EAAA,MAAM,kBAAkB,CAAI,CAAA,EAAA,IAAA,CAAA,UAAA,CAAA,CAAA;AAC5B,EAAA,MAAM,uBAAuB,CAAG,EAAA,eAAA,CAAA,IAAA,CAAA,CAAA;AAChC,EAAM,MAAA,wBAAA,GACJ,OAAO,eAAe,CAAA,CAAA;AACxB,EAAM,MAAA,6BAAA,GACJ,OAAO,oBAAoB,CAAA,CAAA;AAE7B,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,GAAG,UAAA;AAAA,IACH,IAAM,EAAA,eAAA;AAAA,IACN,KAAQ,GAAA;AACN,MAAM,MAAA,aAAA,GAAgB,IAAwB,IAAI,CAAA,CAAA;AAClD,MAAM,MAAA,OAAA,uBAAsD,GAAI,EAAA,CAAA;AAChE,MAAA,MAAM,WAAW,MAAM;AACrB,QAAM,MAAA,YAAA,GAAe,MAAM,aAAa,CAAA,CAAA;AAExC,QAAA,IAAI,CAAC,YAAA;AAAc,UAAA,OAAO,EAAC,CAAA;AAC3B,QAAA,MAAM,eAAe,KAAM,CAAA,IAAA;AAAA,UACzB,YAAA,CAAa,gBAAiB,CAAA,CAAA,CAAA,EAAI,oBAAuB,CAAA,CAAA,CAAA,CAAA;AAAA,SAC3D,CAAA;AAEA,QAAA,MAAM,KAAQ,GAAA,CAAC,GAAG,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAElC,QAAA,OAAO,KAAM,CAAA,IAAA;AAAA,UACX,CAAC,CAAG,EAAA,CAAA,KAAM,YAAa,CAAA,OAAA,CAAQ,CAAE,CAAA,GAAI,CAAI,GAAA,YAAA,CAAa,OAAQ,CAAA,CAAA,CAAE,GAAI,CAAA;AAAA,SACtE,CAAA;AAAA,OACF,CAAA;AAEA,MAAA,OAAA,CAAQ,wBAA0B,EAAA;AAAA,QAChC,OAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,eAAkB,GAAA;AAAA,IACtB,GAAG,cAAA;AAAA,IACH,IAAM,EAAA,oBAAA;AAAA,IACN,KAAM,CAAA,CAAA,EAAY,EAAE,KAAA,EAAuB,EAAA;AACzC,MAAM,MAAA,iBAAA,GAAoB,IAAwB,IAAI,CAAA,CAAA;AACtD,MAAM,MAAA,mBAAA,GAAsB,MAAO,CAAA,wBAAA,EAA0B,KAAS,CAAA,CAAA,CAAA;AAEtE,MAAA,OAAA,CAAQ,6BAA+B,EAAA;AAAA,QACrC,iBAAA;AAAA,OACD,CAAA,CAAA;AAED,MAAA,SAAA,CAAU,MAAM;AACd,QAAM,MAAA,gBAAA,GAAmB,MAAM,iBAAiB,CAAA,CAAA;AAChD,QAAA,IAAI,gBAAkB,EAAA;AACpB,UAAoB,mBAAA,CAAA,OAAA,CAAQ,IAAI,gBAAkB,EAAA;AAAA,YAChD,GAAK,EAAA,gBAAA;AAAA,YACL,GAAG,KAAA;AAAA,WACJ,CAAA,CAAA;AAAA,SACH;AAAA,OACD,CAAA,CAAA;AAED,MAAA,eAAA,CAAgB,MAAM;AACpB,QAAM,MAAA,gBAAA,GAAmB,MAAM,iBAAiB,CAAA,CAAA;AAChD,QAAoB,mBAAA,CAAA,OAAA,CAAQ,OAAO,gBAAgB,CAAA,CAAA;AAAA,OACpD,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,wBAAA;AAAA,IACA,6BAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AACF;;;;"}