{"version":3,"file":"Collection.cjs","sources":["../../src/Collection/Collection.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport { computed, defineComponent, h, inject, markRaw, provide, ref, watch, watchEffect } from 'vue'\nimport { Slot, usePrimitiveElement } from '@/Primitive'\n\ninterface CollectionContext {\n collectionRef: Ref\n itemMap: Ref>\n}\n\nconst ITEM_DATA_ATTR = 'data-reka-collection-item'\n\nexport function useCollection(options: { key?: string, isProvider?: boolean } = {}) {\n const { key = '', isProvider = false } = options\n const injectionKey = `${key}CollectionProvider`\n let context: CollectionContext\n\n if (isProvider) {\n const itemMap = ref>(new Map())\n const collectionRef = ref()\n\n context = {\n collectionRef,\n itemMap,\n } as CollectionContext\n provide(injectionKey, context)\n }\n else {\n context = inject(injectionKey) as CollectionContext\n }\n\n const getItems = (includeDisabledItem = false) => {\n const collectionNode = context.collectionRef.value\n if (!collectionNode)\n return []\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`))\n const items = Array.from(context.itemMap.value.values())\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref) - orderedNodes.indexOf(b.ref),\n )\n\n if (includeDisabledItem)\n return orderedItems\n else\n return orderedItems.filter(i => i.ref.dataset.disabled !== '')\n }\n\n const CollectionSlot = defineComponent({\n name: 'CollectionSlot',\n setup(_, { slots }) {\n const { primitiveElement, currentElement } = usePrimitiveElement()\n watch(currentElement, () => {\n context.collectionRef.value = currentElement.value\n })\n return () => h(Slot, { ref: primitiveElement }, slots)\n },\n })\n\n const CollectionItem = defineComponent({\n name: 'CollectionItem',\n inheritAttrs: false,\n props: {\n value: {\n // It accepts any value\n validator: () => true,\n },\n },\n setup(props, { slots, attrs }) {\n const { primitiveElement, currentElement } = usePrimitiveElement()\n\n watchEffect((cleanupFn) => {\n if (currentElement.value) {\n const key = markRaw(currentElement.value)\n // @ts-expect-error ignore assignment of unknown to any\n context.itemMap.value.set(key, { ref: currentElement.value!, value: props.value })\n cleanupFn(() => context.itemMap.value.delete(key))\n }\n })\n\n return () => h(Slot, { ...attrs, [ITEM_DATA_ATTR]: '', ref: primitiveElement }, slots)\n },\n })\n\n const reactiveItems = computed(() => Array.from(context.itemMap.value.values()))\n const itemMapSize = computed(() => context.itemMap.value.size)\n\n return { getItems, reactiveItems, itemMapSize, CollectionSlot, CollectionItem }\n}\n"],"names":["ref","provide","inject","defineComponent","usePrimitiveElement","watch","h","Slot","watchEffect","key","markRaw","computed"],"mappings":"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"}