{"version":3,"file":"collection.mjs","names":["Collection","CollectionItem"],"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, SetupContext } from 'vue'\nimport type {\n  ElCollectionInjectionContext,\n  ElCollectionItemInjectionContext,\n} from './tokens'\n\nexport const COLLECTION_ITEM_SIGN = `data-el-collection-item`\n\n// Make sure the first letter of name is capitalized\nexport const createCollectionWithScope = (name: string) => {\n  const COLLECTION_NAME = `El${name}Collection`\n  const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`\n  const COLLECTION_INJECTION_KEY: InjectionKey<ElCollectionInjectionContext> =\n    Symbol(COLLECTION_NAME)\n  const COLLECTION_ITEM_INJECTION_KEY: InjectionKey<ElCollectionItemInjectionContext> =\n    Symbol(COLLECTION_ITEM_NAME)\n\n  const ElCollection = Object.assign({}, Collection, {\n    name: COLLECTION_NAME,\n    setup() {\n      const collectionRef = ref<HTMLElement>()\n      const itemMap: ElCollectionInjectionContext['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      }) as ElCollectionInjectionContext['getItems']\n\n      provide(COLLECTION_INJECTION_KEY, {\n        itemMap,\n        getItems,\n        collectionRef,\n      })\n    },\n  })\n\n  const ElCollectionItem = Object.assign({}, CollectionItem, {\n    name: COLLECTION_ITEM_NAME,\n    setup(_: unknown, { attrs }: SetupContext) {\n      const collectionItemRef = ref<HTMLElement>()\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    ElCollection,\n    ElCollectionItem,\n  }\n}\n"],"mappings":";;;;;AAUA,MAAa,uBAAuB;AAGpC,MAAa,6BAA6B,SAAiB;CACzD,MAAM,kBAAkB,KAAK,KAAK;CAClC,MAAM,uBAAuB,GAAG,gBAAgB;CAChD,MAAM,2BACJ,OAAO,gBAAgB;CACzB,MAAM,gCACJ,OAAO,qBAAqB;AAyD9B,QAAO;EACL;EACA;EACA,cA1DmB,OAAO,OAAO,EAAE,EAAEA,oBAAY;GACjD,MAAM;GACN,QAAQ;IACN,MAAM,gBAAgB,KAAkB;IACxC,MAAM,0BAAmD,IAAI,KAAK;IAClE,MAAM,kBAAkB;KACtB,MAAM,eAAe,MAAM,cAAc;AAEzC,SAAI,CAAC,aAAc,QAAO,EAAE;KAC5B,MAAM,eAAe,MAAM,KACzB,aAAa,iBAAiB,IAAI,qBAAqB,GAAG,CAC3D;AAID,YAFc,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAEtB,MACV,GAAG,MAAM,aAAa,QAAQ,EAAE,IAAK,GAAG,aAAa,QAAQ,EAAE,IAAK,CACtE;;AAGH,YAAQ,0BAA0B;KAChC;KACA;KACA;KACD,CAAC;;GAEL,CAAC;EAiCA,kBA/BuB,OAAO,OAAO,EAAE,EAAEC,yBAAgB;GACzD,MAAM;GACN,MAAM,GAAY,EAAE,SAAuB;IACzC,MAAM,oBAAoB,KAAkB;IAC5C,MAAM,sBAAsB,OAAO,0BAA0B,OAAU;AAEvE,YAAQ,+BAA+B,EACrC,mBACD,CAAC;AAEF,oBAAgB;KACd,MAAM,mBAAmB,MAAM,kBAAkB;AACjD,SAAI,iBACF,qBAAoB,QAAQ,IAAI,kBAAkB;MAChD,KAAK;MACL,GAAG;MACJ,CAAC;MAEJ;AAEF,0BAAsB;KACpB,MAAM,mBAAmB,MAAM,kBAAkB;AACjD,yBAAoB,QAAQ,OAAO,iBAAiB;MACpD;;GAEL,CAAC;EAOD"}