{"version":3,"file":"VDataTable.mjs","names":["makeVDataTableFooterProps","VDataTableFooter","makeVDataTableHeadersProps","VDataTableHeaders","makeVDataTableRowsProps","VDataTableRows","makeVTableProps","VTable","makeDataTableExpandProps","provideExpanded","createGroupBy","makeDataTableGroupProps","provideGroupBy","useGroupedItems","createHeaders","makeDataTableHeaderProps","makeDataTableItemsProps","useDataTableItems","useOptions","createPagination","makeDataTablePaginateProps","providePagination","usePaginatedItems","makeDataTableSelectProps","provideSelection","createSort","makeDataTableSortProps","provideSort","useSortedItems","provideDefaults","makeFilterProps","useFilter","computed","toRef","genericComponent","propsFactory","useRender","makeDataTableProps","width","String","Number","search","makeVDataTableProps","VDataTable","name","props","emits","value","setup","_ref","emit","slots","groupBy","sortBy","multiSort","mustSort","page","itemsPerPage","columns","headers","showSelect","showExpand","items","filteredItems","transform","item","toggleSort","sortByWithGroups","opened","extractRows","isGroupOpen","toggleGroup","sortedItems","flatItems","itemsLength","length","startIndex","stopIndex","pageCount","setItemsPerPage","paginatedItems","paginatedItemsWithoutGroups","isSelected","select","selectAll","toggleSelect","someSelected","allSelected","allItems","currentPage","isExpanded","toggleExpand","hideNoData","noDataText","loading","loadingText","slotProps","groupedItems","dataTableFooterProps","filterProps","dataTableHeadersProps","dataTableRowsProps","tableProps","_createVNode","_mergeProps","class","style","top","default","_Fragment","colgroup","thead","body","tbody","tfoot","bottom","prepend"],"sources":["../../../src/labs/VDataTable/VDataTable.tsx"],"sourcesContent":["// Styles\nimport './VDataTable.sass'\n\n// Components\nimport { makeVDataTableFooterProps, VDataTableFooter } from './VDataTableFooter'\nimport { makeVDataTableHeadersProps, VDataTableHeaders } from './VDataTableHeaders'\nimport { makeVDataTableRowsProps, VDataTableRows } from './VDataTableRows'\nimport { makeVTableProps, VTable } from '@/components/VTable/VTable'\n\n// Composables\nimport { makeDataTableExpandProps, provideExpanded } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from './composables/group'\nimport { createHeaders, makeDataTableHeaderProps } from './composables/headers'\nimport { makeDataTableItemsProps, useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { createPagination, makeDataTablePaginateProps, providePagination, usePaginatedItems } from './composables/paginate'\nimport { makeDataTableSelectProps, provideSelection } from './composables/select'\nimport { createSort, makeDataTableSortProps, provideSort, useSortedItems } from './composables/sort'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { UnwrapRef } from 'vue'\nimport type { Group } from './composables/group'\nimport type { DataTableItem, InternalDataTableHeader } from './types'\nimport type { VDataTableHeadersSlots } from './VDataTableHeaders'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\n\nexport type VDataTableSlotProps = {\n  page: number\n  itemsPerPage: number\n  sortBy: UnwrapRef<ReturnType<typeof provideSort>['sortBy']>\n  pageCount: number\n  toggleSort: ReturnType<typeof provideSort>['toggleSort']\n  setItemsPerPage: ReturnType<typeof providePagination>['setItemsPerPage']\n  someSelected: boolean\n  allSelected: boolean\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 DataTableItem[]\n  groupedItems: readonly (DataTableItem | Group<DataTableItem>)[]\n  columns: InternalDataTableHeader[]\n  headers: InternalDataTableHeader[][]\n}\n\nexport type VDataTableSlots = VDataTableRowsSlots & VDataTableHeadersSlots & {\n  default: VDataTableSlotProps\n  colgroup: VDataTableSlotProps\n  top: VDataTableSlotProps\n  body: VDataTableSlotProps\n  tbody: VDataTableSlotProps\n  thead: VDataTableSlotProps\n  tfoot: VDataTableSlotProps\n  bottom: VDataTableSlotProps\n  'footer.prepend': never\n}\n\nexport const makeDataTableProps = propsFactory({\n  ...makeVDataTableRowsProps(),\n\n  width: [String, Number],\n  search: String,\n\n  ...makeDataTableExpandProps(),\n  ...makeDataTableGroupProps(),\n  ...makeDataTableHeaderProps(),\n  ...makeDataTableItemsProps(),\n  ...makeDataTableSelectProps(),\n  ...makeDataTableSortProps(),\n  ...makeVDataTableHeadersProps(),\n  ...makeVTableProps(),\n}, 'DataTable')\n\nexport const makeVDataTableProps = propsFactory({\n  ...makeDataTablePaginateProps(),\n  ...makeDataTableProps(),\n  ...makeFilterProps(),\n  ...makeVDataTableFooterProps(),\n}, 'VDataTable')\n\nexport const VDataTable = genericComponent<VDataTableSlots>()({\n  name: 'VDataTable',\n\n  props: makeVDataTableProps(),\n\n  emits: {\n    'update:modelValue': (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:groupBy': (value: any) => true,\n    'update:expanded': (value: any) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { groupBy } = createGroupBy(props)\n    const { sortBy, multiSort, mustSort } = createSort(props)\n    const { page, itemsPerPage } = createPagination(props)\n\n    const { columns, headers } = createHeaders(props, {\n      groupBy,\n      showSelect: toRef(props, 'showSelect'),\n      showExpand: toRef(props, 'showExpand'),\n    })\n\n    const { items } = useDataTableItems(props, columns)\n\n    const search = toRef(props, 'search')\n    const { filteredItems } = useFilter(props, items, search, { transform: item => item.columns })\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    const itemsLength = computed(() => flatItems.value.length)\n\n    const { startIndex, stopIndex, pageCount, setItemsPerPage } = 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      someSelected,\n      allSelected,\n    } = provideSelection(props, { allItems: items, currentPage: paginatedItemsWithoutGroups })\n\n    const { isExpanded, toggleExpand } = provideExpanded(props)\n\n    useOptions({\n      page,\n      itemsPerPage,\n      sortBy,\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<VDataTableSlotProps>(() => ({\n      page: page.value,\n      itemsPerPage: itemsPerPage.value,\n      sortBy: sortBy.value,\n      pageCount: pageCount.value,\n      toggleSort,\n      setItemsPerPage,\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: paginatedItemsWithoutGroups.value,\n      groupedItems: paginatedItems.value,\n      columns: columns.value,\n      headers: headers.value,\n    }))\n\n    useRender(() => {\n      const [dataTableFooterProps] = VDataTableFooter.filterProps(props)\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--show-select': props.showSelect,\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            default: () => slots.default ? slots.default(slotProps.value) : (\n              <>\n                { slots.colgroup?.(slotProps.value) }\n                <thead>\n                  <VDataTableHeaders\n                    { ...dataTableHeadersProps }\n                    v-slots={ slots }\n                  />\n                </thead>\n                { slots.thead?.(slotProps.value) }\n                <tbody>\n                  { slots.body ? slots.body(slotProps.value) : (\n                    <VDataTableRows\n                      { ...dataTableRowsProps }\n                      items={ paginatedItems.value }\n                      v-slots={ slots }\n                    />\n                  )}\n                </tbody>\n                { slots.tbody?.(slotProps.value) }\n                { slots.tfoot?.(slotProps.value) }\n              </>\n            ),\n            bottom: () => slots.bottom ? slots.bottom(slotProps.value) : (\n              <>\n                <VDataTableFooter\n                  { ...dataTableFooterProps }\n                  v-slots={{\n                    prepend: slots['footer.prepend'],\n                  }}\n                />\n              </>\n            ),\n          }}\n        </VTable>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VDataTable = InstanceType<typeof VDataTable>\n"],"mappings":"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"}