{"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","filterFunctions","sortFunctions","sortRawFunctions","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","colgroup","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  colgroup: VDataTableVirtualSlotProps<T>\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 {\n      columns,\n      headers,\n      filterFunctions,\n      sortFunctions,\n      sortRawFunctions,\n    } = 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, sortRawFunctions)\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                  { slots.colgroup?.(slotProps.value) }\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":";AAAA;AAAA,SACSA,kBAAkB;AAAA,SAClBC,iBAAiB;AAAA,SACjBC,aAAa;AAAA,SACbC,cAAc;AAAA,SACdC,MAAM;AAAA,SACNC,kBAAkB,oDAE3B;AAAA,SACSC,eAAe;AAAA,SACfC,aAAa,EAAEC,uBAAuB,EAAEC,cAAc,EAAEC,eAAe;AAAA,SACvEC,aAAa;AAAA,SACbC,iBAAiB;AAAA,SACjBC,UAAU;AAAA,SACVC,gBAAgB;AAAA,SAChBC,UAAU,EAAEC,WAAW,EAAEC,cAAc;AAAA,SACvCC,eAAe;AAAA,SACfC,eAAe,EAAEC,SAAS;AAAA,SAC1BC,gBAAgB,EAAEC,UAAU,yCAErC;AACA,SAASC,QAAQ,EAAEC,UAAU,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACxCC,aAAa,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAEjE;AA4BA,OAAO,MAAMC,0BAA0B,GAAGF,YAAY,CAAC;EACrD,GAAG5B,kBAAkB,CAAC,CAAC;EACvB,GAAGQ,uBAAuB,CAAC,CAAC;EAC5B,GAAGa,gBAAgB,CAAC,CAAC;EACrB,GAAGF,eAAe,CAAC;AACrB,CAAC,EAAE,mBAAmB,CAAC;AAIvB,OAAO,MAAMY,iBAAiB,GAAGJ,gBAAgB,CAWF,CAAC,CAAC;EAC/CK,IAAI,EAAE,mBAAmB;EAEzBC,KAAK,EAAEH,0BAA0B,CAAC,CAAC;EAEnCI,KAAK,EAAE;IACL,mBAAmB,EAAGC,KAAY,IAAK,IAAI;IAC3C,eAAe,EAAGA,KAAU,IAAK,IAAI;IACrC,gBAAgB,EAAGA,KAAU,IAAK,IAAI;IACtC,gBAAgB,EAAGA,KAAU,IAAK,IAAI;IACtC,iBAAiB,EAAGA,KAAU,IAAK;EACrC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAoB;IAAA,IAAlB;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAAF,IAAA;IAC5B,MAAM;MAAEG;IAAQ,CAAC,GAAGjC,aAAa,CAAC0B,KAAK,CAAC;IACxC,MAAM;MAAEQ,MAAM;MAAEC,SAAS;MAAEC;IAAS,CAAC,GAAG5B,UAAU,CAACkB,KAAK,CAAC;IAEzD,MAAM;MACJW,OAAO;MACPC,OAAO;MACPC,eAAe;MACfC,aAAa;MACbC;IACF,CAAC,GAAGrC,aAAa,CAACsB,KAAK,EAAE;MACvBO,OAAO;MACPS,UAAU,EAAExB,KAAK,CAACQ,KAAK,EAAE,YAAY,CAAC;MACtCiB,UAAU,EAAEzB,KAAK,CAACQ,KAAK,EAAE,YAAY;IACvC,CAAC,CAAC;IACF,MAAM;MAAEkB;IAAM,CAAC,GAAGvC,iBAAiB,CAACqB,KAAK,EAAEW,OAAO,CAAC;IAEnD,MAAMQ,MAAM,GAAG3B,KAAK,CAACQ,KAAK,EAAE,QAAQ,CAAC;IACrC,MAAM;MAAEoB;IAAc,CAAC,GAAGjC,SAAS,CAACa,KAAK,EAAEkB,KAAK,EAAEC,MAAM,EAAE;MACxDE,SAAS,EAAEC,IAAI,IAAIA,IAAI,CAACX,OAAO;MAC/BY,eAAe,EAAEV;IACnB,CAAC,CAAC;IAEF,MAAM;MAAEW;IAAW,CAAC,GAAGzC,WAAW,CAAC;MAAEyB,MAAM;MAAEC,SAAS;MAAEC;IAAS,CAAC,CAAC;IACnE,MAAM;MAAEe,gBAAgB;MAAEC,MAAM;MAAEC,WAAW;MAAEC,WAAW;MAAEC;IAAY,CAAC,GAAGrD,cAAc,CAAC;MAAE+B,OAAO;MAAEC;IAAO,CAAC,CAAC;IAE/G,MAAM;MAAEsB;IAAY,CAAC,GAAG9C,cAAc,CAACgB,KAAK,EAAEoB,aAAa,EAAEK,gBAAgB,EAAEX,aAAa,EAAEC,gBAAgB,CAAC;IAC/G,MAAM;MAAEgB;IAAU,CAAC,GAAGtD,eAAe,CAACqD,WAAW,EAAEvB,OAAO,EAAEmB,MAAM,CAAC;IAEnE,MAAMM,QAAQ,GAAG1C,QAAQ,CAAC,MAAMqC,WAAW,CAACI,SAAS,CAAC7B,KAAK,CAAC,CAAC;IAE7D,MAAM;MAAE+B,UAAU;MAAEC,MAAM;MAAEC,SAAS;MAAEC,YAAY;MAAEC,YAAY;MAAEC;IAAY,CAAC,GAAGzD,gBAAgB,CAACmB,KAAK,EAAE;MACzGgC,QAAQ;MACRO,WAAW,EAAEP;IACf,CAAC,CAAC;IACF,MAAM;MAAEQ,UAAU;MAAEC;IAAa,CAAC,GAAGpE,eAAe,CAAC2B,KAAK,CAAC;IAE3D,MAAM;MACJ0C,YAAY;MACZC,SAAS;MACTC,UAAU;MACVC,aAAa;MACbC,aAAa;MACbC,gBAAgB;MAChBC,YAAY;MACZC;IACF,CAAC,GAAG5D,UAAU,CAACW,KAAK,EAAE+B,SAAS,CAAC;IAChC,MAAMmB,YAAY,GAAG5D,QAAQ,CAAC,MAAMwD,aAAa,CAAC5C,KAAK,CAACiD,GAAG,CAAC7B,IAAI,IAAIA,IAAI,CAAC8B,GAAG,CAAC,CAAC;IAE9ExE,UAAU,CAAC;MACT4B,MAAM;MACN6C,IAAI,EAAE9D,UAAU,CAAC,CAAC,CAAC;MACnB+D,YAAY,EAAE/D,UAAU,CAAC,CAAC,CAAC,CAAC;MAC5BgB,OAAO;MACPY;IACF,CAAC,CAAC;IAEFlC,eAAe,CAAC;MACdf,cAAc,EAAE;QACdqF,UAAU,EAAE/D,KAAK,CAACQ,KAAK,EAAE,YAAY,CAAC;QACtCwD,UAAU,EAAEhE,KAAK,CAACQ,KAAK,EAAE,YAAY,CAAC;QACtCyD,OAAO,EAAEjE,KAAK,CAACQ,KAAK,EAAE,SAAS,CAAC;QAChC0D,WAAW,EAAElE,KAAK,CAACQ,KAAK,EAAE,aAAa;MACzC;IACF,CAAC,CAAC;IAEF,MAAM2D,SAAS,GAAGrE,QAAQ,CAAkC,OAAO;MACjEkB,MAAM,EAAEA,MAAM,CAACN,KAAK;MACpBsB,UAAU;MACVa,YAAY,EAAEA,YAAY,CAACnC,KAAK;MAChCoC,WAAW,EAAEA,WAAW,CAACpC,KAAK;MAC9B+B,UAAU;MACVC,MAAM;MACNC,SAAS;MACTC,YAAY;MACZI,UAAU;MACVC,YAAY;MACZb,WAAW;MACXC,WAAW;MACXX,KAAK,EAAEc,QAAQ,CAAC9B,KAAK,CAACiD,GAAG,CAAC7B,IAAI,IAAIA,IAAI,CAAC8B,GAAG,CAAC;MAC3CQ,aAAa,EAAE5B,QAAQ,CAAC9B,KAAK;MAC7B2D,YAAY,EAAE9B,SAAS,CAAC7B,KAAK;MAC7BS,OAAO,EAAEA,OAAO,CAACT,KAAK;MACtBU,OAAO,EAAEA,OAAO,CAACV;IACnB,CAAC,CAAC,CAAC;IAEHN,SAAS,CAAC,MAAM;MACd,MAAMkE,qBAAqB,GAAG9F,iBAAiB,CAAC+F,WAAW,CAAC/D,KAAK,CAAC;MAClE,MAAMgE,kBAAkB,GAAG9F,cAAc,CAAC6F,WAAW,CAAC/D,KAAK,CAAC;MAC5D,MAAMiE,UAAU,GAAG9F,MAAM,CAAC4F,WAAW,CAAC/D,KAAK,CAAC;MAE5C,OAAAkE,YAAA,CAAA/F,MAAA,EAAAgG,WAAA;QAAA,SAEW,CACL,cAAc,EACd;UACE,uBAAuB,EAAEnE,KAAK,CAACyD;QACjC,CAAC,EACDzD,KAAK,CAACoE,KAAK,CACZ;QAAA,SACOpE,KAAK,CAACqE;MAAK,GACdJ,UAAU;QAGbK,GAAG,EAAEA,CAAA,KAAMhE,KAAK,CAACgE,GAAG,GAAGX,SAAS,CAACzD,KAAK,CAAC;QACvCqE,OAAO,EAAEA,CAAA,KAAAL,YAAA;UAAA,OAECxB,YAAY;UAAA,mBACAM,YAAY;UAAA,eAChBC,eAAe;UAAA;UAAA,SAEtB;YACLuB,MAAM,EAAE/E,aAAa,CAACO,KAAK,CAACwE,MAAM;UACpC;QAAC,IAAAN,YAAA,iBAGG5D,KAAK,CAACmE,QAAQ,GAAGd,SAAS,CAACzD,KAAK,CAAC,EAAAgE,YAAA,iBAAAA,YAAA,CAAAlG,iBAAA,EAAAmG,WAAA,CAG1BL,qBAAqB;UAAA,UACjB9D,KAAK,CAAC0E;QAAW,IAChBpE,KAAK,KAAA4D,YAAA,iBAAAA,YAAA;UAAA,OAIPvB,SAAS;UAAA,SAAU;YAAE6B,MAAM,EAAE/E,aAAa,CAACmD,UAAU,CAAC1C,KAAK,CAAC;YAAEyE,MAAM,EAAE;UAAE;QAAC,IAAAT,YAAA;UAAA,WACnEvD,OAAO,CAACT,KAAK,CAAC0E,MAAM;UAAA,SAAU;YAAEJ,MAAM,EAAE,CAAC;YAAEG,MAAM,EAAE;UAAE;QAAC,YAGpErE,KAAK,CAAC,cAAc,CAAC,GAAGqD,SAAS,CAACzD,KAAK,CAAC,EAAAgE,YAAA,CAAAhG,cAAA,EAAAiG,WAAA,CAGnC9D,KAAK,EACL2D,kBAAkB;UAAA,SACfd,YAAY,CAAChD;QAAK;UAGxB,GAAGI,KAAK;UACRgB,IAAI,EAAEuD,aAAa,IAAAX,YAAA,CAAA9F,kBAAA;YAAA,OAETyG,aAAa,CAACC,YAAY,CAACC,KAAK;YAAA;YAAA,mBAEpBP,MAAM,IAAIzB,gBAAgB,CAAC8B,aAAa,CAACC,YAAY,CAACC,KAAK,EAAEP,MAAM;UAAC;YAAAQ,OAAA,EAEpFC,KAAA;cAAA,IAAC;gBAAEC;cAAQ,CAAC,GAAAD,KAAA;cAAA,OACZ3E,KAAK,CAACgB,IAAI,GAAG;gBAAE,GAAGuD,aAAa;gBAAEK;cAAQ,CAAC,CAAC,IAAAhB,YAAA,CAAAjG,aAAA,EAAAkG,WAAA,CAElCU,aAAa,CAAC7E,KAAK;gBAAA,OAClBkF,OAAO;gBAAA,OACPL,aAAa,CAACC,YAAY,CAACC,KAAK;gBAAA,SAC9BF,aAAa,CAACC,YAAY,CAACC;cAAK,IAC9BzE,KAAK,CAElB;YAAA;UACF;QAEJ,IAIHA,KAAK,CAAC,aAAa,CAAC,GAAGqD,SAAS,CAACzD,KAAK,CAAC,EAAAgE,YAAA;UAAA,SAE9B;YAAEM,MAAM,EAAE/E,aAAa,CAACoD,aAAa,CAAC3C,KAAK,CAAC;YAAEyE,MAAM,EAAE;UAAE;QAAC,IAAAT,YAAA;UAAA,WACpDvD,OAAO,CAACT,KAAK,CAAC0E,MAAM;UAAA,SAAU;YAAEJ,MAAM,EAAE,CAAC;YAAEG,MAAM,EAAE;UAAE;QAAC,gBAK7E;QACDQ,MAAM,EAAEA,CAAA,KAAM7E,KAAK,CAAC6E,MAAM,GAAGxB,SAAS,CAACzD,KAAK;MAAC;IAIrD,CAAC,CAAC;EACJ;AACF,CAAC,CAAC"}