{"version":3,"file":"VDataTableRows.mjs","names":["VDataTableGroupHeaderRow","VDataTableRow","useExpanded","useGroupBy","useHeaders","useSelection","useLocale","genericComponent","propsFactory","useRender","makeVDataTableRowsProps","loading","Boolean","String","loadingText","type","default","hideNoData","items","Array","noDataText","rowHeight","Number","Function","VDataTableRows","name","props","setup","_ref","emit","slots","columns","expandOnClick","toggleExpand","isExpanded","isSelected","toggleSelect","toggleGroup","isGroupOpen","t","_createVNode","value","length","_Fragment","map","item","index","id","slotProps","itemSlotProps","key","onClick","event","undefined"],"sources":["../../../src/labs/VDataTable/VDataTableRows.tsx"],"sourcesContent":["// Components\nimport { VDataTableGroupHeaderRow } from './VDataTableGroupHeaderRow'\nimport { VDataTableRow } from './VDataTableRow'\n\n// Composables\nimport { useExpanded } from './composables/expand'\nimport { useGroupBy } from './composables/group'\nimport { useHeaders } from './composables/headers'\nimport { useSelection } from './composables/select'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { provideExpanded } from './composables/expand'\nimport type { Group, provideGroupBy } from './composables/group'\nimport type { provideSelection } from './composables/select'\nimport type { DataTableItem, InternalDataTableHeader } from './types'\nimport type { VDataTableGroupHeaderRowSlots } from './VDataTableGroupHeaderRow'\n\ntype GroupHeaderSlot = {\n  index: number\n  item: Group\n  columns: InternalDataTableHeader[]\n  isExpanded: ReturnType<typeof provideExpanded>['isExpanded']\n  toggleExpand: ReturnType<typeof provideExpanded>['toggleExpand']\n  isSelected: ReturnType<typeof provideSelection>['isSelected']\n  toggleSelect: ReturnType<typeof provideSelection>['toggleSelect']\n  toggleGroup: ReturnType<typeof provideGroupBy>['toggleGroup']\n  isGroupOpen: ReturnType<typeof provideGroupBy>['toggleGroup']\n}\n\ntype ItemSlot = {\n  index: number\n  item: DataTableItem\n  columns: InternalDataTableHeader[]\n  isExpanded: ReturnType<typeof provideExpanded>['isExpanded']\n  toggleExpand: ReturnType<typeof provideExpanded>['toggleExpand']\n  isSelected: ReturnType<typeof provideSelection>['isSelected']\n  toggleSelect: ReturnType<typeof provideSelection>['toggleSelect']\n}\n\nexport type VDataTableRowsSlots = VDataTableGroupHeaderRowSlots & {\n  item: ItemSlot & { props: Record<string, any> }\n  loading: never\n  'group-header': GroupHeaderSlot\n  'no-data': never\n  'expanded-row': ItemSlot\n  'item.data-table-select': ItemSlot\n  'item.data-table-expand': ItemSlot\n} & { [key: `item.${string}`]: ItemSlot }\n\nexport const makeVDataTableRowsProps = propsFactory({\n  loading: [Boolean, String],\n  loadingText: {\n    type: String,\n    default: '$vuetify.dataIterator.loadingText',\n  },\n  hideNoData: Boolean,\n  items: {\n    type: Array as PropType<readonly (DataTableItem | Group)[]>,\n    default: () => ([]),\n  },\n  noDataText: {\n    type: String,\n    default: '$vuetify.noDataText',\n  },\n  rowHeight: Number,\n  'onClick:row': Function as PropType<(e: Event, value: { item: DataTableItem }) => void>,\n}, 'VDataTableRows')\n\nexport const VDataTableRows = genericComponent<VDataTableRowsSlots>()({\n  name: 'VDataTableRows',\n\n  props: makeVDataTableRowsProps(),\n\n  setup (props, { emit, slots }) {\n    const { columns } = useHeaders()\n    const { expandOnClick, toggleExpand, isExpanded } = useExpanded()\n    const { isSelected, toggleSelect } = useSelection()\n    const { toggleGroup, isGroupOpen } = useGroupBy()\n    const { t } = useLocale()\n\n    useRender(() => {\n      if (props.loading && slots.loading) {\n        return (\n          <tr\n            class=\"v-data-table-rows-loading\"\n            key=\"loading\"\n          >\n            <td colspan={ columns.value.length }>\n              { slots.loading() }\n            </td>\n          </tr>\n        )\n      }\n\n      if (!props.loading && !props.items.length && !props.hideNoData) {\n        return (\n          <tr\n            class=\"v-data-table-rows-no-data\"\n            key=\"no-data\"\n          >\n            <td colspan={ columns.value.length }>\n              { slots['no-data']?.() ?? t(props.noDataText) }\n            </td>\n          </tr>\n        )\n      }\n\n      return (\n        <>\n          { props.items.map((item, index) => {\n            if (item.type === 'group') {\n              return slots['group-header'] ? slots['group-header']({\n                index,\n                item,\n                columns: columns.value,\n                isExpanded,\n                toggleExpand,\n                isSelected,\n                toggleSelect,\n                toggleGroup,\n                isGroupOpen,\n              } as GroupHeaderSlot) : (\n                <VDataTableGroupHeaderRow\n                  key={ `group-header_${item.id}` }\n                  item={ item }\n                  v-slots={ slots }\n                />\n              )\n            }\n\n            const slotProps = {\n              index,\n              item,\n              columns: columns.value,\n              isExpanded,\n              toggleExpand,\n              isSelected,\n              toggleSelect,\n            } satisfies ItemSlot\n\n            const itemSlotProps = {\n              ...slotProps,\n              props: {\n                key: `item_${item.value}`,\n                onClick: expandOnClick.value || props['onClick:row'] ? (event: Event) => {\n                  if (expandOnClick.value) {\n                    toggleExpand(item)\n                  }\n                  props['onClick:row']?.(event, { item })\n                } : undefined,\n                index,\n                item,\n              },\n            }\n\n            return (\n              <>\n                { slots.item ? slots.item(itemSlotProps) : (\n                  <VDataTableRow\n                    { ...itemSlotProps.props }\n                    v-slots={ slots }\n                  />\n                )}\n\n                { isExpanded(item) && slots['expanded-row']?.(slotProps) }\n              </>\n            )\n          })}\n        </>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VDataTableRows = InstanceType<typeof VDataTableRows>\n"],"mappings":"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"}