{"version":3,"file":"VDataTableVirtual.mjs","names":["makeDataTableProps","VDataTableHeaders","VDataTableRow","VDataTableRows","VTable","VVirtualScrollItem","provideExpanded","createGroupBy","makeDataTableGroupProps","provideGroupBy","useGroupedItems","createHeaders","useDataTableItems","useOptions","provideSelection","createSort","provideSort","useSortedItems","provideDefaults","makeFilterProps","useFilter","makeVirtualProps","useVirtual","computed","shallowRef","toRef","convertToUnit","genericComponent","propsFactory","useRender","makeVDataTableVirtualProps","VDataTableVirtual","name","props","emits","value","setup","_ref","attrs","slots","groupBy","sortBy","multiSort","mustSort","columns","headers","sortFunctions","filterFunctions","showSelect","showExpand","items","search","filteredItems","transform","item","customKeyFilter","toggleSort","sortByWithGroups","opened","extractRows","isGroupOpen","toggleGroup","sortedItems","flatItems","allItems","isSelected","select","selectAll","toggleSelect","someSelected","allSelected","currentPage","isExpanded","toggleExpand","containerRef","markerRef","paddingTop","paddingBottom","computedItems","handleItemResize","handleScroll","handleScrollend","displayItems","map","raw","page","itemsPerPage","hideNoData","noDataText","loading","loadingText","slotProps","internalItems","groupedItems","dataTableHeadersProps","filterProps","dataTableRowsProps","tableProps","_createVNode","_mergeProps","class","style","top","wrapper","height","fixedHeader","border","length","itemSlotProps","internalItem","index","default","_ref2","itemRef","bottom"],"sources":["../../../src/components/VDataTable/VDataTableVirtual.tsx"],"sourcesContent":["// Components\nimport { makeDataTableProps } from './VDataTable'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRow } from './VDataTableRow'\nimport { VDataTableRows } from './VDataTableRows'\nimport { VTable } from '@/components/VTable'\nimport { VVirtualScrollItem } from '@/components/VVirtualScroll/VVirtualScrollItem'\n\n// Composables\nimport { provideExpanded } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from './composables/group'\nimport { createHeaders } from './composables/headers'\nimport { useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { provideSelection } from './composables/select'\nimport { createSort, provideSort, useSortedItems } from './composables/sort'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { makeVirtualProps, useVirtual } from '@/composables/virtual'\n\n// Utilities\nimport { computed, shallowRef, toRef } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nimport type { VDataTableSlotProps } from './VDataTable'\nimport type { VDataTableHeadersSlots } from './VDataTableHeaders'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\nimport type { CellProps, RowProps } from '@/components/VDataTable/types'\nimport type { GenericProps, SelectItemKey } from '@/util'\n\ntype VDataTableVirtualSlotProps<T> = Omit<\n  VDataTableSlotProps<T>,\n  | 'setItemsPerPage'\n  | 'page'\n  | 'pageCount'\n  | 'itemsPerPage'\n>\n\nexport type VDataTableVirtualSlots<T> = VDataTableRowsSlots<T> & VDataTableHeadersSlots & {\n  top: VDataTableVirtualSlotProps<T>\n  headers: VDataTableHeadersSlots['headers']\n  bottom: VDataTableVirtualSlotProps<T>\n  'body.prepend': VDataTableVirtualSlotProps<T>\n  'body.append': VDataTableVirtualSlotProps<T>\n  item: {\n    itemRef: Ref<HTMLElement | undefined>\n  }\n}\n\nexport const makeVDataTableVirtualProps = propsFactory({\n  ...makeDataTableProps(),\n  ...makeDataTableGroupProps(),\n  ...makeVirtualProps(),\n  ...makeFilterProps(),\n}, 'VDataTableVirtual')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VDataTableVirtual = genericComponent<new <T extends readonly any[], V>(\n  props: {\n    items?: T\n    itemValue?: SelectItemKey<ItemType<T>>\n    rowProps?: RowProps<ItemType<T>>\n    cellProps?: CellProps<ItemType<T>>\n    itemSelectable?: SelectItemKey<ItemType<T>>\n    modelValue?: V\n    'onUpdate:modelValue'?: (value: V) => void\n  },\n  slots: VDataTableVirtualSlots<ItemType<T>>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDataTableVirtual',\n\n  props: makeVDataTableVirtualProps(),\n\n  emits: {\n    'update:modelValue': (value: any[]) => true,\n    'update:sortBy': (value: any) => true,\n    'update:options': (value: any) => true,\n    'update:groupBy': (value: any) => true,\n    'update:expanded': (value: any) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const { groupBy } = createGroupBy(props)\n    const { sortBy, multiSort, mustSort } = createSort(props)\n\n    const { columns, headers, sortFunctions, filterFunctions } = createHeaders(props, {\n      groupBy,\n      showSelect: toRef(props, 'showSelect'),\n      showExpand: toRef(props, 'showExpand'),\n    })\n    const { items } = useDataTableItems(props, columns)\n\n    const search = toRef(props, 'search')\n    const { filteredItems } = useFilter(props, items, search, {\n      transform: item => item.columns,\n      customKeyFilter: filterFunctions,\n    })\n\n    const { toggleSort } = provideSort({ sortBy, multiSort, mustSort })\n    const { sortByWithGroups, opened, extractRows, isGroupOpen, toggleGroup } = provideGroupBy({ groupBy, sortBy })\n\n    const { sortedItems } = useSortedItems(props, filteredItems, sortByWithGroups, sortFunctions)\n    const { flatItems } = useGroupedItems(sortedItems, groupBy, opened)\n\n    const allItems = computed(() => extractRows(flatItems.value))\n\n    const { isSelected, select, selectAll, toggleSelect, someSelected, allSelected } = provideSelection(props, {\n      allItems,\n      currentPage: allItems,\n    })\n    const { isExpanded, toggleExpand } = provideExpanded(props)\n\n    const {\n      containerRef,\n      markerRef,\n      paddingTop,\n      paddingBottom,\n      computedItems,\n      handleItemResize,\n      handleScroll,\n      handleScrollend,\n    } = useVirtual(props, flatItems)\n    const displayItems = computed(() => computedItems.value.map(item => item.raw))\n\n    useOptions({\n      sortBy,\n      page: shallowRef(1),\n      itemsPerPage: shallowRef(-1),\n      groupBy,\n      search,\n    })\n\n    provideDefaults({\n      VDataTableRows: {\n        hideNoData: toRef(props, 'hideNoData'),\n        noDataText: toRef(props, 'noDataText'),\n        loading: toRef(props, 'loading'),\n        loadingText: toRef(props, 'loadingText'),\n      },\n    })\n\n    const slotProps = computed<VDataTableVirtualSlotProps<any>>(() => ({\n      sortBy: sortBy.value,\n      toggleSort,\n      someSelected: someSelected.value,\n      allSelected: allSelected.value,\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n      isExpanded,\n      toggleExpand,\n      isGroupOpen,\n      toggleGroup,\n      items: allItems.value.map(item => item.raw),\n      internalItems: allItems.value,\n      groupedItems: flatItems.value,\n      columns: columns.value,\n      headers: headers.value,\n    }))\n\n    useRender(() => {\n      const dataTableHeadersProps = VDataTableHeaders.filterProps(props)\n      const dataTableRowsProps = VDataTableRows.filterProps(props)\n      const tableProps = VTable.filterProps(props)\n\n      return (\n        <VTable\n          class={[\n            'v-data-table',\n            {\n              'v-data-table--loading': props.loading,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          { ...tableProps }\n        >\n          {{\n            top: () => slots.top?.(slotProps.value),\n            wrapper: () => (\n              <div\n                ref={ containerRef }\n                onScrollPassive={ handleScroll }\n                onScrollend={ handleScrollend }\n                class=\"v-table__wrapper\"\n                style={{\n                  height: convertToUnit(props.height),\n                }}\n              >\n                <table>\n                  <thead>\n                    <VDataTableHeaders\n                      { ...dataTableHeadersProps }\n                      sticky={ props.fixedHeader }\n                      v-slots={ slots }\n                    />\n                  </thead>\n                  <tbody>\n                    <tr ref={ markerRef } style={{ height: convertToUnit(paddingTop.value), border: 0 }}>\n                      <td colspan={ columns.value.length } style={{ height: 0, border: 0 }}></td>\n                    </tr>\n\n                    { slots['body.prepend']?.(slotProps.value) }\n\n                    <VDataTableRows\n                      { ...attrs }\n                      { ...dataTableRowsProps }\n                      items={ displayItems.value }\n                    >\n                      {{\n                        ...slots,\n                        item: itemSlotProps => (\n                          <VVirtualScrollItem\n                            key={ itemSlotProps.internalItem.index }\n                            renderless\n                            onUpdate:height={ height => handleItemResize(itemSlotProps.internalItem.index, height) }\n                          >\n                            { ({ itemRef }) => (\n                              slots.item?.({ ...itemSlotProps, itemRef }) ?? (\n                                <VDataTableRow\n                                  { ...itemSlotProps.props }\n                                  ref={ itemRef }\n                                  key={ itemSlotProps.internalItem.index }\n                                  index={ itemSlotProps.internalItem.index }\n                                  v-slots={ slots }\n                                />\n                              )\n                            )}\n                          </VVirtualScrollItem>\n                        ),\n                      }}\n                    </VDataTableRows>\n\n                    { slots['body.append']?.(slotProps.value) }\n\n                    <tr style={{ height: convertToUnit(paddingBottom.value), border: 0 }}>\n                      <td colspan={ columns.value.length } style={{ height: 0, border: 0 }}></td>\n                    </tr>\n                  </tbody>\n                </table>\n              </div>\n            ),\n            bottom: () => slots.bottom?.(slotProps.value),\n          }}\n        </VTable>\n      )\n    })\n  },\n})\n\nexport type VDataTableVirtual = InstanceType<typeof VDataTableVirtual>\n"],"mappings":"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"}