{"version":3,"file":"Collection.js","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":["key"],"mappings":"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"}