{"version":3,"file":"headers.mjs","names":["inject","provide","ref","watch","createRange","propsFactory","makeDataTableHeaderProps","headers","type","Array","default","VDataTableHeadersSymbol","Symbol","for","createHeaders","props","options","columns","wrapped","length","isArray","flat","flatMap","row","index","map","column","rowCount","defaultHeader","title","sortable","defaultActionHeader","width","groupBy","value","findIndex","key","unshift","rowspan","splice","showSelect","showExpand","push","fixedRows","fixedOffsets","fill","count","forEach","id","i","fixedOffset","fixed","lastFixed","seen","Set","filtered","has","add","at","deep","immediate","data","useHeaders","Error"],"sources":["../../../../src/labs/VDataTable/composables/headers.ts"],"sourcesContent":["// Utilities\nimport { inject, provide, ref, watch } from 'vue'\nimport { createRange, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableHeader, InternalDataTableHeader } from '../types'\nimport type { SortItem } from './sort'\n\nexport const makeDataTableHeaderProps = propsFactory({\n  headers: {\n    type: Array as PropType<DataTableHeader[] | DataTableHeader[][]>,\n    default: () => ([]),\n  },\n}, 'v-data-table-header')\n\nexport const VDataTableHeadersSymbol: InjectionKey<{\n  headers: Ref<InternalDataTableHeader[][]>\n  columns: Ref<InternalDataTableHeader[]>\n}> = Symbol.for('vuetify:data-table-headers')\n\ntype HeaderProps = {\n  headers: DataTableHeader[] | DataTableHeader[][]\n}\n\nexport function createHeaders (\n  props: HeaderProps,\n  options?: {\n    groupBy?: Ref<readonly SortItem[]>\n    showSelect?: Ref<boolean>\n    showExpand?: Ref<boolean>\n  }\n) {\n  const headers = ref<InternalDataTableHeader[][]>([])\n  const columns = ref<InternalDataTableHeader[]>([])\n\n  watch(() => props.headers, () => {\n    const wrapped = !props.headers.length\n      ? []\n      : Array.isArray(props.headers[0])\n        ? props.headers as DataTableHeader[][]\n        : [props.headers as DataTableHeader[]]\n    const flat = wrapped.flatMap((row, index) => row.map(column => ({ column, row: index })))\n\n    const rowCount = wrapped.length\n    const defaultHeader = { title: '', sortable: false }\n    const defaultActionHeader = { ...defaultHeader, width: 48 }\n\n    if (options?.groupBy?.value.length) {\n      const index = flat.findIndex(({ column }) => column.key === 'data-table-group')\n      if (index < 0) flat.unshift({ column: { ...defaultHeader, key: 'data-table-group', title: 'Group', rowspan: rowCount }, row: 0 })\n      else flat.splice(index, 1, { column: { ...defaultHeader, ...flat[index].column }, row: flat[index].row })\n    }\n\n    if (options?.showSelect?.value) {\n      const index = flat.findIndex(({ column }) => column.key === 'data-table-select')\n      if (index < 0) flat.unshift({ column: { ...defaultActionHeader, key: 'data-table-select', rowspan: rowCount }, row: 0 })\n      else flat.splice(index, 1, { column: { ...defaultActionHeader, ...flat[index].column }, row: flat[index].row })\n    }\n\n    if (options?.showExpand?.value) {\n      const index = flat.findIndex(({ column }) => column.key === 'data-table-expand')\n      if (index < 0) flat.push({ column: { ...defaultActionHeader, key: 'data-table-expand', rowspan: rowCount }, row: 0 })\n      else flat.splice(index, 1, { column: { ...defaultActionHeader, ...flat[index].column }, row: flat[index].row })\n    }\n\n    const fixedRows: InternalDataTableHeader[][] = createRange(rowCount).map(() => [])\n    const fixedOffsets = createRange(rowCount).fill(0)\n\n    let count = 0\n    flat.forEach(({ column, row }) => {\n      const id = column.key ?? `data-table-column-${count++}`\n      for (let i = row; i <= row + (column.rowspan ?? 1) - 1; i++) {\n        fixedRows[i].push({\n          ...column,\n          key: id,\n          fixedOffset: fixedOffsets[i],\n          sortable: column.sortable ?? !!column.key,\n        })\n\n        fixedOffsets[i] += column.width ?? 0\n      }\n    })\n\n    fixedRows.forEach(row => {\n      for (let i = row.length; i--; i >= 0) {\n        if (row[i].fixed) {\n          row[i].lastFixed = true\n          return\n        }\n      }\n    })\n\n    const seen = new Set()\n    headers.value = fixedRows.map(row => {\n      const filtered = []\n      for (const column of row) {\n        if (!seen.has(column.key)) {\n          seen.add(column.key)\n          filtered.push(column)\n        }\n      }\n\n      return filtered\n    })\n\n    columns.value = fixedRows.at(-1) ?? []\n  }, {\n    deep: true,\n    immediate: true,\n  })\n\n  const data = { headers, columns }\n\n  provide(VDataTableHeadersSymbol, data)\n\n  return data\n}\n\nexport function useHeaders () {\n  const data = inject(VDataTableHeadersSymbol)\n\n  if (!data) throw new Error('Missing headers!')\n\n  return data\n}\n"],"mappings":"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"}