{"version":3,"file":"VDataIterator.mjs","names":["makeDataIteratorItemsProps","useDataIteratorItems","makeComponentProps","makeFilterProps","useFilter","useProxiedModel","makeTagProps","makeDataTableExpandProps","provideExpanded","makeDataTableGroupProps","provideGroupBy","useGroupedItems","useOptions","createPagination","makeDataTablePaginateProps","providePagination","usePaginatedItems","makeDataTableSelectProps","provideSelection","createSort","makeDataTableSortProps","provideSort","useSortedItems","computed","toRef","genericComponent","propsFactory","useRender","makeVDataIteratorProps","search","String","loading","Boolean","itemsPerPage","VDataIterator","name","props","emits","value","setup","_ref","slots","groupBy","items","filteredItems","transform","item","raw","sortBy","multiSort","mustSort","page","toggleSort","sortByWithGroups","opened","extractRows","isGroupOpen","toggleGroup","sortedItems","flatItems","itemsLength","length","startIndex","stopIndex","pageCount","prevPage","nextPage","setItemsPerPage","setPage","paginatedItems","paginatedItemsWithoutGroups","isSelected","select","selectAll","toggleSelect","allItems","currentPage","isExpanded","toggleExpand","slotProps","groupedItems","_createVNode","tag","class","style","default","header","footer"],"sources":["../../../src/labs/VDataIterator/VDataIterator.tsx"],"sourcesContent":["// Composables\nimport { makeDataIteratorItemsProps, useDataIteratorItems } from './composables/items'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeDataTableExpandProps, provideExpanded } from '@/labs/VDataTable/composables/expand'\nimport { makeDataTableGroupProps, provideGroupBy, useGroupedItems } from '@/labs/VDataTable/composables/group'\nimport { useOptions } from '@/labs/VDataTable/composables/options'\nimport { createPagination, makeDataTablePaginateProps, providePagination, usePaginatedItems } from '@/labs/VDataTable/composables/paginate'\nimport { makeDataTableSelectProps, provideSelection } from '@/labs/VDataTable/composables/select'\nimport { createSort, makeDataTableSortProps, provideSort, useSortedItems } from '@/labs/VDataTable/composables/sort'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { DataIteratorItem } from './composables/items'\nimport type { Group } from '@/labs/VDataTable/composables/group'\nimport type { SortItem } from '@/labs/VDataTable/composables/sort'\n\ntype VDataIteratorSlotProps = {\n  page: number\n  itemsPerPage: number\n  sortBy: readonly SortItem[]\n  pageCount: number\n  toggleSort: ReturnType<typeof provideSort>['toggleSort']\n  prevPage: ReturnType<typeof providePagination>['prevPage']\n  nextPage: ReturnType<typeof providePagination>['nextPage']\n  setPage: ReturnType<typeof providePagination>['setPage']\n  setItemsPerPage: ReturnType<typeof providePagination>['setItemsPerPage']\n  isSelected: ReturnType<typeof provideSelection>['isSelected']\n  select: ReturnType<typeof provideSelection>['select']\n  selectAll: ReturnType<typeof provideSelection>['selectAll']\n  toggleSelect: ReturnType<typeof provideSelection>['toggleSelect']\n  isExpanded: ReturnType<typeof provideExpanded>['isExpanded']\n  toggleExpand: ReturnType<typeof provideExpanded>['toggleExpand']\n  isGroupOpen: ReturnType<typeof provideGroupBy>['isGroupOpen']\n  toggleGroup: ReturnType<typeof provideGroupBy>['toggleGroup']\n  items: readonly DataIteratorItem[]\n  groupedItems: readonly (DataIteratorItem | Group<DataIteratorItem>)[]\n}\n\nexport type VDataIteratorSlots = {\n  default: VDataIteratorSlotProps\n  header: VDataIteratorSlotProps\n  footer: VDataIteratorSlotProps\n  'no-data': never\n}\n\nexport const makeVDataIteratorProps = propsFactory({\n  search: String,\n  loading: Boolean,\n\n  ...makeComponentProps(),\n  ...makeDataIteratorItemsProps(),\n  ...makeDataTableSelectProps(),\n  ...makeDataTableSortProps(),\n  ...makeDataTablePaginateProps({ itemsPerPage: 5 }),\n  ...makeDataTableExpandProps(),\n  ...makeDataTableGroupProps(),\n  ...makeFilterProps(),\n  ...makeTagProps(),\n}, 'VDataIterator')\n\nexport const VDataIterator = genericComponent<VDataIteratorSlots>()({\n  name: 'VDataIterator',\n\n  props: makeVDataIteratorProps(),\n\n  emits: {\n    'update:modelValue': (value: any[]) => true,\n    'update:groupBy': (value: any) => true,\n    'update:page': (value: number) => true,\n    'update:itemsPerPage': (value: number) => true,\n    'update:sortBy': (value: any) => true,\n    'update:options': (value: any) => true,\n    'update:expanded': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const groupBy = useProxiedModel(props, 'groupBy')\n    const search = toRef(props, 'search')\n\n    const { items } = useDataIteratorItems(props)\n    const { filteredItems } = useFilter(props, items, search, { transform: item => item.raw })\n\n    const { sortBy, multiSort, mustSort } = createSort(props)\n    const { page, itemsPerPage } = createPagination(props)\n\n    const { toggleSort } = provideSort({ sortBy, multiSort, mustSort, page })\n    const { sortByWithGroups, opened, extractRows, isGroupOpen, toggleGroup } = provideGroupBy({ groupBy, sortBy })\n\n    const { sortedItems } = useSortedItems(props, filteredItems, sortByWithGroups)\n    const { flatItems } = useGroupedItems(sortedItems, groupBy, opened)\n\n    const itemsLength = computed(() => flatItems.value.length)\n\n    const {\n      startIndex,\n      stopIndex,\n      pageCount,\n      prevPage,\n      nextPage,\n      setItemsPerPage,\n      setPage,\n    } = providePagination({ page, itemsPerPage, itemsLength })\n    const { paginatedItems } = usePaginatedItems({ items: flatItems, startIndex, stopIndex, itemsPerPage })\n\n    const paginatedItemsWithoutGroups = computed(() => extractRows(paginatedItems.value))\n\n    const {\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n    } = provideSelection(props, { allItems: items, currentPage: paginatedItemsWithoutGroups })\n    const { isExpanded, toggleExpand } = provideExpanded(props)\n\n    useOptions({\n      page,\n      itemsPerPage,\n      sortBy,\n      groupBy,\n      search,\n    })\n\n    const slotProps = computed(() => ({\n      page: page.value,\n      itemsPerPage: itemsPerPage.value,\n      sortBy: sortBy.value,\n      pageCount: pageCount.value,\n      toggleSort,\n      prevPage,\n      nextPage,\n      setPage,\n      setItemsPerPage,\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n      isExpanded,\n      toggleExpand,\n      isGroupOpen,\n      toggleGroup,\n      items: paginatedItemsWithoutGroups.value,\n      groupedItems: paginatedItems.value,\n    }))\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-data-iterator',\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { slots.header?.(slotProps.value) }\n\n        { !paginatedItems.value.length\n          ? slots['no-data']?.()\n          : slots.default?.(slotProps.value)\n        }\n\n        { slots.footer?.(slotProps.value) }\n      </props.tag>\n    ))\n\n    return {}\n  },\n})\n\nexport type VDataIterator = InstanceType<typeof VDataIterator>\n"],"mappings":"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"}