{"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","click:row","e","setup","_ref","emit","slots","groupBy","sortBy","multiSort","mustSort","columns","headers","showSelect","showExpand","items","search","filteredItems","transform","item","toggleSort","sortByWithGroups","opened","extractRows","isGroupOpen","toggleGroup","sortedItems","flatItems","allItems","isSelected","select","selectAll","toggleSelect","someSelected","allSelected","currentPage","isExpanded","toggleExpand","headerHeight","length","containerRef","paddingTop","paddingBottom","computedItems","handleItemResize","handleScroll","displayItems","map","raw","page","itemsPerPage","hideNoData","noDataText","loading","loadingText","slotProps","groupedItems","dataTableHeadersProps","filterProps","dataTableRowsProps","tableProps","_createVNode","_mergeProps","class","style","top","wrapper","height","fixedHeader","border","itemSlotProps","index","default","_ref2","itemRef","bottom"],"sources":["../../../src/labs/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 { DataTableItem } from './types'\nimport type { VDataTableSlotProps } from './VDataTable'\nimport type { VDataTableHeadersSlots } from './VDataTableHeaders'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\n\ntype VDataTableVirtualSlotProps = Omit<VDataTableSlotProps, 'setItemsPerPage' | 'page' | 'pageCount' | 'itemsPerPage'>\n\nexport type VDataTableVirtualSlots = VDataTableRowsSlots & VDataTableHeadersSlots & {\n  top: VDataTableVirtualSlotProps\n  headers: VDataTableHeadersSlots['headers']\n  bottom: VDataTableVirtualSlotProps\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\nexport const VDataTableVirtual = genericComponent<VDataTableVirtualSlots>()({\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    'click:row': (e: Event, value: { item: DataTableItem }) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { groupBy } = createGroupBy(props)\n    const { sortBy, multiSort, mustSort } = createSort(props)\n\n    const { columns, headers } = 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<DataTableItem>(props, items, search, { transform: item => item.columns })\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)\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 headerHeight = computed(() => headers.value.length * 56)\n\n    const {\n      containerRef,\n      paddingTop,\n      paddingBottom,\n      computedItems,\n      handleItemResize,\n      handleScroll,\n    } = useVirtual(props, flatItems, headerHeight)\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>(() => ({\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,\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                onScroll={ handleScroll }\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 style={{ height: convertToUnit(paddingTop.value), border: 0 }}>\n                      <td colspan={ columns.value.length } style={{ height: convertToUnit(paddingTop.value), border: 0 }}></td>\n                    </tr>\n\n                    <VDataTableRows\n                      { ...dataTableRowsProps }\n                      items={ displayItems.value }\n                    >\n                      {{\n                        ...slots,\n                        item: itemSlotProps => (\n                          <VVirtualScrollItem\n                            key={ itemSlotProps.item.index }\n                            renderless\n                            onUpdate:height={ height => handleItemResize(itemSlotProps.item.index, height) }\n                          >\n                            { ({ itemRef }) => (\n                              slots.item?.({ ...itemSlotProps, itemRef }) ?? (\n                                <VDataTableRow\n                                  { ...itemSlotProps.props }\n                                  ref={ itemRef }\n                                  key={ itemSlotProps.item.index }\n                                  v-slots={ slots }\n                                />\n                              )\n                            )}\n                          </VVirtualScrollItem>\n                        ),\n                      }}\n                    </VDataTableRows>\n\n                    <tr style={{ height: convertToUnit(paddingBottom.value), border: 0 }}>\n                      <td colspan={ columns.value.length } style={{ height: convertToUnit(paddingBottom.value), 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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"}