@auronui/vue 1.0.14 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +1031 -430
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/components/accordion/Accordion.js.map +1 -1
- package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionContent.js.map +1 -1
- package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js +12 -3
- package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionHeader.js.map +1 -1
- package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionItem.js.map +1 -1
- package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionTrigger.js.map +1 -1
- package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js +12 -3
- package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogAction.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogCancel.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/aspect-ratio/AspectRatio.js.map +1 -1
- package/dist/components/aspect-ratio/AspectRatio.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/aspect-ratio/AspectRatio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/autocomplete/Autocomplete.js.map +1 -1
- package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js +14 -7
- package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js +11 -4
- package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/badge/Badge.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/badge/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/breadcrumbs/BreadcrumbItem.js.map +1 -1
- package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js +13 -5
- package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js +10 -3
- package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js +13 -6
- package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/button/ButtonGroup.js.map +1 -1
- package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/button/ToggleButtonGroup.js.map +1 -1
- package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar/Calendar.js.map +1 -1
- package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js +38 -31
- package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar-year-picker/CalendarYearPicker.js.map +1 -1
- package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js +19 -12
- package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/card/Card.js.map +1 -1
- package/dist/components/card/Card.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/card/Card.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/card/CardBody.js.map +1 -1
- package/dist/components/card/CardBody.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/card/CardBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/card/CardFooter.js.map +1 -1
- package/dist/components/card/CardFooter.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/card/CardFooter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/card/CardHeader.js.map +1 -1
- package/dist/components/card/CardHeader.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/card/CardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +11 -4
- package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chip/Chip.js.map +1 -1
- package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js +14 -7
- package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/Collapsible.js.map +1 -1
- package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/CollapsibleContent.js.map +1 -1
- package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/CollapsibleGroup.js.map +1 -1
- package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/CollapsibleTrigger.js.map +1 -1
- package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js +12 -3
- package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/combo-box/ComboBox.js.map +1 -1
- package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-input/DateInput.js.map +1 -1
- package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js +20 -13
- package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-picker/DatePicker.js.map +1 -1
- package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js +12 -5
- package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-range-field/DateRangeField.js.map +1 -1
- package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js +23 -16
- package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js +12 -5
- package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +18 -11
- package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input/Input.js.map +1 -1
- package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js +21 -14
- package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input-otp/InputOTP.js.map +1 -1
- package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js +14 -4
- package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/kbd/Kbd.js.map +1 -1
- package/dist/components/kbd/Kbd.vue_vue_type_script_setup_true_lang.js +11 -4
- package/dist/components/kbd/Kbd.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/link/Link.js.map +1 -1
- package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js +10 -3
- package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/list-box/ListBox.js.map +1 -1
- package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/list-box/ListBoxItem.js.map +1 -1
- package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/meter/Meter.js.map +1 -1
- package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js +19 -12
- package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/number-field/NumberField.js.map +1 -1
- package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js +13 -6
- package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/progress-bar/ProgressBar.js.map +1 -1
- package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js +14 -7
- package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/progress-circle/ProgressCircle.js.map +1 -1
- package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js +13 -6
- package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/radio/Radio.js.map +1 -1
- package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/range-calendar/RangeCalendar.js.map +1 -1
- package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js +48 -41
- package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/scroll-shadow/ScrollShadow.js.map +1 -1
- package/dist/components/scroll-shadow/ScrollShadow.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/scroll-shadow/ScrollShadow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js +14 -7
- package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/skeleton/Skeleton.js.map +1 -1
- package/dist/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/slider/Slider.js.map +1 -1
- package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js +14 -7
- package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterGroup.js.map +1 -1
- package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterPanel.js.map +1 -1
- package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterResizeHandle.js.map +1 -1
- package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/Stepper.js.map +1 -1
- package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperContent.js.map +1 -1
- package/dist/components/stepper/StepperContent.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/stepper/StepperContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperDescription.js.map +1 -1
- package/dist/components/stepper/StepperDescription.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/stepper/StepperDescription.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperIndicator.js.map +1 -1
- package/dist/components/stepper/StepperIndicator.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/stepper/StepperIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperItem.js.map +1 -1
- package/dist/components/stepper/StepperItem.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/stepper/StepperItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperSeparator.js.map +1 -1
- package/dist/components/stepper/StepperSeparator.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/stepper/StepperSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperTitle.js.map +1 -1
- package/dist/components/stepper/StepperTitle.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/stepper/StepperTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js +11 -4
- package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/Table.js.map +1 -1
- package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js +4 -3
- package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableBody.js.map +1 -1
- package/dist/components/table/TableBody.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/components/table/TableBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableCell.js.map +1 -1
- package/dist/components/table/TableCell.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/components/table/TableCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableFooter.js.map +1 -1
- package/dist/components/table/TableFooter.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/table/TableFooter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableHeader.js.map +1 -1
- package/dist/components/table/TableHeader.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/components/table/TableHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableHeaderCell.js.map +1 -1
- package/dist/components/table/TableHeaderCell.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/components/table/TableHeaderCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableRow.js.map +1 -1
- package/dist/components/table/TableRow.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/table/TableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableVirtualBody.js.map +1 -1
- package/dist/components/table/TableVirtualBody.vue_vue_type_script_setup_true_lang.js +6 -4
- package/dist/components/table/TableVirtualBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/Tab.js.map +1 -1
- package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/TabIndicator.js.map +1 -1
- package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/TabList.js.map +1 -1
- package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js +11 -4
- package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/TabPanel.js.map +1 -1
- package/dist/components/tabs/TabPanel.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/tabs/TabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/Tabs.js.map +1 -1
- package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/textarea/Textarea.js.map +1 -1
- package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js +20 -13
- package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/time-field/TimeField.js.map +1 -1
- package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js +20 -13
- package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tree/Tree.js.map +1 -1
- package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tree/TreeItem.js.map +1 -1
- package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tree/TreeItemToggle.js.map +1 -1
- package/dist/components/tree/TreeItemToggle.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/tree/TreeItemToggle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/index.d.ts +797 -173
- package/dist/utils/composeClassName.js +3 -3
- package/dist/utils/composeClassName.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","names":[],"sources":["../../../src/components/table/Table.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// Note: Vue 3.5 generic SFCs do not propagate generic type parameters across\n// component boundaries when used via JSX/mount() in tests. We use ColumnDef<any, any>\n// for props to avoid TS2322 errors while keeping internal TanStack reactivity correct.\nimport { computed, ref, watch, useTemplateRef, h } from 'vue'\nimport {\n useVueTable,\n getCoreRowModel,\n getSortedRowModel,\n type ColumnDef,\n type SortingState,\n type RowSelectionState,\n type Table as TableInstance,\n type RowData,\n type Row,\n} from '@tanstack/vue-table'\nimport { tableVariants, type TableVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTableProvide } from './table.context'\nimport { useTableKeyboardNav } from './useTableKeyboardNav'\nimport TableHeader from './TableHeader.vue'\nimport TableBody from './TableBody.vue'\nimport TableVirtualBody from './TableVirtualBody.vue'\nimport TableFooter from './TableFooter.vue'\nimport TableCheckboxCell from './TableCheckboxCell.vue'\n\ntype SelectionMode = 'none' | 'single' | 'multiple'\n\nconst props = withDefaults(\n defineProps<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<any, any>[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any[]\n variant?: TableVariants['variant']\n ariaLabel?: string\n /** Row selection mode. 'single' = radio-style; 'multiple' = checkbox + shift+click; 'none' = disabled */\n selection?: SelectionMode\n /** Controlled row selection state (Record<rowId, boolean>). Use v-model:rowSelection */\n rowSelection?: RowSelectionState\n /**\n * Opt-in row virtualization via @tanstack/vue-virtual.\n * - false (default): all rows render in a standard <tbody>\n * - true: always render via TableVirtualBody (only visible rows in DOM)\n * - number N: auto-enable virtualization when data.length > N\n */\n virtualRows?: boolean | number\n /** Estimated row height in px used by the virtualizer (default: 44) */\n estimatedRowHeight?: number\n /** Extra rows to render outside the visible viewport (default: 8) */\n virtualizerOverscan?: number\n }>(),\n {\n variant: 'primary',\n ariaLabel: undefined,\n selection: 'none',\n rowSelection: undefined,\n virtualRows: false,\n estimatedRowHeight: 44,\n virtualizerOverscan: 8,\n }\n)\n\nconst emit = defineEmits<{\n 'update:rowSelection': [value: RowSelectionState]\n}>()\n\n// --- Sorting state ----------------------------------------------------\nconst sorting = ref<SortingState>([])\n\n// --- Row selection state (controlled/uncontrolled) -------------------\nconst internalRowSelection = ref<RowSelectionState>(props.rowSelection ?? {})\nwatch(\n () => props.rowSelection,\n (next) => {\n if (next !== undefined) internalRowSelection.value = next\n },\n { deep: true }\n)\n\nfunction updateRowSelection(\n updater: RowSelectionState | ((old: RowSelectionState) => RowSelectionState)\n) {\n const next = typeof updater === 'function' ? updater(internalRowSelection.value) : updater\n internalRowSelection.value = next\n emit('update:rowSelection', next)\n}\n\n// --- Selection column injected at position 0 when enabled -----------\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst selectionColumn: ColumnDef<any, any> = {\n id: '__select__',\n size: 44,\n enableSorting: false,\n header: ({ table: t }) =>\n props.selection === 'multiple'\n ? h(TableCheckboxCell, { table: t as unknown as TableInstance<RowData> })\n : '',\n cell: ({ row: r }) => h(TableCheckboxCell, { row: r as unknown as Row<RowData> }),\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst effectiveColumns = computed<ColumnDef<any, any>[]>(() => {\n if (props.selection === 'none') return props.columns\n return [selectionColumn, ...props.columns]\n})\n\n// --- useVueTable instance ---------------------------------------------\n// Use getters so @tanstack/vue-table tracks prop reactivity.\nconst table = useVueTable({\n get data() {\n return props.data\n },\n get columns() {\n return effectiveColumns.value as ColumnDef<RowData, unknown>[]\n },\n state: {\n get sorting() {\n return sorting.value\n },\n get rowSelection() {\n return internalRowSelection.value\n },\n },\n onSortingChange: (updater) => {\n sorting.value = typeof updater === 'function' ? updater(sorting.value) : updater\n },\n onRowSelectionChange: updateRowSelection,\n get enableRowSelection() {\n return props.selection !== 'none'\n },\n get enableMultiRowSelection() {\n return props.selection === 'multiple'\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n}) as unknown as TableInstance<RowData>\n\n// --- Virtualization ---------------------------------------------------\n/** Whether to use TableVirtualBody instead of TableBody */\nconst useVirtual = computed<boolean>(() => {\n if (props.virtualRows === false) return false\n if (props.virtualRows === true) return true\n if (typeof props.virtualRows === 'number') return props.data.length > props.virtualRows\n return false\n})\n\n// The scroll container wrapping the <table> — passed to the virtualizer\nconst scrollContainerRef = useTemplateRef<HTMLElement>('scrollContainerRef')\n\n// Ref to TableVirtualBody instance so keyboard nav can call scrollToIndex\nconst virtualBodyRef = ref<InstanceType<typeof TableVirtualBody> | null>(null)\n\n// --- Keyboard navigation ----------------------------------------------\nconst rootRef = useTemplateRef<HTMLElement>('rootRef')\n\nconst rowCount = computed(() => props.data.length)\nconst columnCount = computed(() => {\n const firstGroup = table.getHeaderGroups()[0]\n return firstGroup ? firstGroup.headers.length : 0\n})\n\nfunction getCellElement(rowIndex: number, columnIndex: number): HTMLElement | null {\n const root = rootRef.value\n if (!root) return null\n // In virtualized mode, scroll the row into view first so the DOM node exists.\n // The queueMicrotask in useTableKeyboardNav.move() gives Vue one tick to\n // flush the virtualizer's render before focus is attempted.\n if (useVirtual.value && virtualBodyRef.value) {\n virtualBodyRef.value.scrollToIndex(rowIndex)\n }\n return root.querySelector<HTMLElement>(\n `[data-row-index=\"${rowIndex}\"][data-col-index=\"${columnIndex}\"]`\n )\n}\n\nconst keyboardNav = useTableKeyboardNav({ rowCount, columnCount, getCellElement })\n\n// --- Selection context helpers ----------------------------------------\nconst selectionEnabled = computed(() => props.selection !== 'none')\nconst selectionMode = computed(() => props.selection ?? 'none')\n\n// Track last-clicked row index for Shift+Click range selection\nconst lastClickedRowIndex = ref<number | null>(null)\n\nfunction handleRowClick(rowIndex: number, event: MouseEvent) {\n if (props.selection === 'none') return\n const rows = table.getRowModel().rows\n if (props.selection === 'multiple' && event.shiftKey && lastClickedRowIndex.value !== null) {\n const [start, end] = [lastClickedRowIndex.value, rowIndex].sort((a, b) => a - b)\n const next: RowSelectionState = { ...internalRowSelection.value }\n for (let i = start; i <= end; i++) {\n const r = rows[i]\n if (r) next[r.id] = true\n }\n updateRowSelection(next)\n }\n lastClickedRowIndex.value = rowIndex\n}\n\n// --- Context provision -------------------------------------------------\nconst variantRef = computed(() => props.variant ?? 'primary')\nconst activeCell = keyboardNav.activeCell\n\nuseTableProvide({\n table,\n activeCell,\n selectionEnabled,\n selectionMode,\n variant: variantRef,\n handleRowClick,\n})\n\n// --- Slot class derivation -------------------------------------------\nconst slotFns = computed(() => tableVariants({ variant: variantRef.value }))\n\ndefineExpose({ table, keyboardNav, handleRowClick })\n</script>\n\n<template>\n <div :class=\"composeClassName(slotFns.base(), $attrs.class as string)\">\n <!--\n scroll container: when virtualized, needs a fixed height + overflow:auto\n so the virtualizer can measure the viewport. Consumers should override\n the inline height via a wrapping container or CSS for production use.\n -->\n <div\n ref=\"scrollContainerRef\"\n :class=\"slotFns.scrollContainer()\"\n :style=\"useVirtual ? { height: '400px', overflow: 'auto' } : undefined\"\n >\n <table\n ref=\"rootRef\"\n role=\"grid\"\n :aria-label=\"ariaLabel\"\n :aria-rowcount=\"rowCount\"\n :aria-colcount=\"columnCount\"\n @keydown=\"keyboardNav.onKeydown\"\n >\n <TableHeader />\n <TableBody v-if=\"!useVirtual\">\n <template #cell=\"slotProps\">\n <slot\n name=\"cell\"\n v-bind=\"slotProps\"\n />\n </template>\n </TableBody>\n <TableVirtualBody\n v-else\n ref=\"virtualBodyRef\"\n :scroll-element=\"scrollContainerRef\"\n :estimated-row-height=\"estimatedRowHeight\"\n :overscan=\"virtualizerOverscan\"\n />\n <TableFooter v-if=\"$slots.footer\">\n <slot name=\"footer\" />\n </TableFooter>\n </table>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"Table.js","names":[],"sources":["../../../src/components/table/Table.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// Note: Vue 3.5 generic SFCs do not propagate generic type parameters across\n// component boundaries when used via JSX/mount() in tests. We use ColumnDef<any, any>\n// for props to avoid TS2322 errors while keeping internal TanStack reactivity correct.\nimport { computed, ref, watch, useTemplateRef, h } from 'vue'\nimport {\n useVueTable,\n getCoreRowModel,\n getSortedRowModel,\n type ColumnDef,\n type SortingState,\n type RowSelectionState,\n type Table as TableInstance,\n type RowData,\n type Row,\n} from '@tanstack/vue-table'\nimport { tableVariants, type TableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableProvide } from './table.context'\nimport { useTableKeyboardNav } from './useTableKeyboardNav'\nimport TableHeader from './TableHeader.vue'\nimport TableBody from './TableBody.vue'\nimport TableVirtualBody from './TableVirtualBody.vue'\nimport TableFooter from './TableFooter.vue'\nimport TableCheckboxCell from './TableCheckboxCell.vue'\n\ntype SelectionMode = 'none' | 'single' | 'multiple'\n\nconst props = withDefaults(\n defineProps<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<any, any>[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any[]\n variant?: TableVariants['variant']\n ariaLabel?: string\n /** Row selection mode. 'single' = radio-style; 'multiple' = checkbox + shift+click; 'none' = disabled */\n selection?: SelectionMode\n /** Controlled row selection state (Record<rowId, boolean>). Use v-model:rowSelection */\n rowSelection?: RowSelectionState\n /**\n * Opt-in row virtualization via @tanstack/vue-virtual.\n * - false (default): all rows render in a standard <tbody>\n * - true: always render via TableVirtualBody (only visible rows in DOM)\n * - number N: auto-enable virtualization when data.length > N\n */\n virtualRows?: boolean | number\n /** Estimated row height in px used by the virtualizer (default: 44) */\n estimatedRowHeight?: number\n /** Extra rows to render outside the visible viewport (default: 8) */\n virtualizerOverscan?: number\n /** Per-slot CSS class overrides */\n classNames?: Partial<{\n base: ClassValue\n scrollContainer: ClassValue\n }>\n }>(),\n {\n variant: 'primary',\n ariaLabel: undefined,\n selection: 'none',\n rowSelection: undefined,\n virtualRows: false,\n estimatedRowHeight: 44,\n virtualizerOverscan: 8,\n }\n)\n\nconst emit = defineEmits<{\n 'update:rowSelection': [value: RowSelectionState]\n}>()\n\n// --- Sorting state ----------------------------------------------------\nconst sorting = ref<SortingState>([])\n\n// --- Row selection state (controlled/uncontrolled) -------------------\nconst internalRowSelection = ref<RowSelectionState>(props.rowSelection ?? {})\nwatch(\n () => props.rowSelection,\n (next) => {\n if (next !== undefined) internalRowSelection.value = next\n },\n { deep: true }\n)\n\nfunction updateRowSelection(\n updater: RowSelectionState | ((old: RowSelectionState) => RowSelectionState)\n) {\n const next = typeof updater === 'function' ? updater(internalRowSelection.value) : updater\n internalRowSelection.value = next\n emit('update:rowSelection', next)\n}\n\n// --- Selection column injected at position 0 when enabled -----------\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst selectionColumn: ColumnDef<any, any> = {\n id: '__select__',\n size: 44,\n enableSorting: false,\n header: ({ table: t }) =>\n props.selection === 'multiple'\n ? h(TableCheckboxCell, { table: t as unknown as TableInstance<RowData> })\n : '',\n cell: ({ row: r }) => h(TableCheckboxCell, { row: r as unknown as Row<RowData> }),\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst effectiveColumns = computed<ColumnDef<any, any>[]>(() => {\n if (props.selection === 'none') return props.columns\n return [selectionColumn, ...props.columns]\n})\n\n// --- useVueTable instance ---------------------------------------------\n// Use getters so @tanstack/vue-table tracks prop reactivity.\nconst table = useVueTable({\n get data() {\n return props.data\n },\n get columns() {\n return effectiveColumns.value as ColumnDef<RowData, unknown>[]\n },\n state: {\n get sorting() {\n return sorting.value\n },\n get rowSelection() {\n return internalRowSelection.value\n },\n },\n onSortingChange: (updater) => {\n sorting.value = typeof updater === 'function' ? updater(sorting.value) : updater\n },\n onRowSelectionChange: updateRowSelection,\n get enableRowSelection() {\n return props.selection !== 'none'\n },\n get enableMultiRowSelection() {\n return props.selection === 'multiple'\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n}) as unknown as TableInstance<RowData>\n\n// --- Virtualization ---------------------------------------------------\n/** Whether to use TableVirtualBody instead of TableBody */\nconst useVirtual = computed<boolean>(() => {\n if (props.virtualRows === false) return false\n if (props.virtualRows === true) return true\n if (typeof props.virtualRows === 'number') return props.data.length > props.virtualRows\n return false\n})\n\n// The scroll container wrapping the <table> — passed to the virtualizer\nconst scrollContainerRef = useTemplateRef<HTMLElement>('scrollContainerRef')\n\n// Ref to TableVirtualBody instance so keyboard nav can call scrollToIndex\nconst virtualBodyRef = ref<InstanceType<typeof TableVirtualBody> | null>(null)\n\n// --- Keyboard navigation ----------------------------------------------\nconst rootRef = useTemplateRef<HTMLElement>('rootRef')\n\nconst rowCount = computed(() => props.data.length)\nconst columnCount = computed(() => {\n const firstGroup = table.getHeaderGroups()[0]\n return firstGroup ? firstGroup.headers.length : 0\n})\n\nfunction getCellElement(rowIndex: number, columnIndex: number): HTMLElement | null {\n const root = rootRef.value\n if (!root) return null\n // In virtualized mode, scroll the row into view first so the DOM node exists.\n // The queueMicrotask in useTableKeyboardNav.move() gives Vue one tick to\n // flush the virtualizer's render before focus is attempted.\n if (useVirtual.value && virtualBodyRef.value) {\n virtualBodyRef.value.scrollToIndex(rowIndex)\n }\n return root.querySelector<HTMLElement>(\n `[data-row-index=\"${rowIndex}\"][data-col-index=\"${columnIndex}\"]`\n )\n}\n\nconst keyboardNav = useTableKeyboardNav({ rowCount, columnCount, getCellElement })\n\n// --- Selection context helpers ----------------------------------------\nconst selectionEnabled = computed(() => props.selection !== 'none')\nconst selectionMode = computed(() => props.selection ?? 'none')\n\n// Track last-clicked row index for Shift+Click range selection\nconst lastClickedRowIndex = ref<number | null>(null)\n\nfunction handleRowClick(rowIndex: number, event: MouseEvent) {\n if (props.selection === 'none') return\n const rows = table.getRowModel().rows\n if (props.selection === 'multiple' && event.shiftKey && lastClickedRowIndex.value !== null) {\n const [start, end] = [lastClickedRowIndex.value, rowIndex].sort((a, b) => a - b)\n const next: RowSelectionState = { ...internalRowSelection.value }\n for (let i = start; i <= end; i++) {\n const r = rows[i]\n if (r) next[r.id] = true\n }\n updateRowSelection(next)\n }\n lastClickedRowIndex.value = rowIndex\n}\n\n// --- Context provision -------------------------------------------------\nconst variantRef = computed(() => props.variant ?? 'primary')\nconst activeCell = keyboardNav.activeCell\n\nuseTableProvide({\n table,\n activeCell,\n selectionEnabled,\n selectionMode,\n variant: variantRef,\n handleRowClick,\n})\n\n// --- Slot class derivation -------------------------------------------\nconst slotFns = computed(() => tableVariants({ variant: variantRef.value }))\n\ndefineExpose({ table, keyboardNav, handleRowClick })\n</script>\n\n<template>\n <div :class=\"composeClassName(slotFns.base(), $attrs.class as string, props.classNames?.base)\">\n <!--\n scroll container: when virtualized, needs a fixed height + overflow:auto\n so the virtualizer can measure the viewport. Consumers should override\n the inline height via a wrapping container or CSS for production use.\n -->\n <div\n ref=\"scrollContainerRef\"\n :class=\"composeClassName(slotFns.scrollContainer(), props.classNames?.scrollContainer)\"\n :style=\"useVirtual ? { height: '400px', overflow: 'auto' } : undefined\"\n >\n <table\n ref=\"rootRef\"\n role=\"grid\"\n :aria-label=\"ariaLabel\"\n :aria-rowcount=\"rowCount\"\n :aria-colcount=\"columnCount\"\n @keydown=\"keyboardNav.onKeydown\"\n >\n <TableHeader />\n <TableBody v-if=\"!useVirtual\">\n <template #cell=\"slotProps\">\n <slot\n name=\"cell\"\n v-bind=\"slotProps\"\n />\n </template>\n </TableBody>\n <TableVirtualBody\n v-else\n ref=\"virtualBodyRef\"\n :scroll-element=\"scrollContainerRef\"\n :estimated-row-height=\"estimatedRowHeight\"\n :overscan=\"virtualizerOverscan\"\n />\n <TableFooter v-if=\"$slots.footer\">\n <slot name=\"footer\" />\n </TableFooter>\n </table>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -30,7 +30,8 @@ var Table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
30
30
|
default: false
|
|
31
31
|
},
|
|
32
32
|
estimatedRowHeight: { default: 44 },
|
|
33
|
-
virtualizerOverscan: { default: 8 }
|
|
33
|
+
virtualizerOverscan: { default: 8 },
|
|
34
|
+
classNames: {}
|
|
34
35
|
},
|
|
35
36
|
emits: ["update:rowSelection"],
|
|
36
37
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
@@ -145,10 +146,10 @@ var Table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
145
146
|
handleRowClick
|
|
146
147
|
});
|
|
147
148
|
return (_ctx, _cache) => {
|
|
148
|
-
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(composeClassName)(slotFns.value.base(), _ctx.$attrs.class)) }, [createElementVNode("div", {
|
|
149
|
+
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(composeClassName)(slotFns.value.base(), _ctx.$attrs.class, props.classNames?.base)) }, [createElementVNode("div", {
|
|
149
150
|
ref_key: "scrollContainerRef",
|
|
150
151
|
ref: scrollContainerRef,
|
|
151
|
-
class: normalizeClass(slotFns.value.scrollContainer()),
|
|
152
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.scrollContainer(), props.classNames?.scrollContainer)),
|
|
152
153
|
style: normalizeStyle(useVirtual.value ? {
|
|
153
154
|
height: "400px",
|
|
154
155
|
overflow: "auto"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../src/components/table/Table.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// Note: Vue 3.5 generic SFCs do not propagate generic type parameters across\n// component boundaries when used via JSX/mount() in tests. We use ColumnDef<any, any>\n// for props to avoid TS2322 errors while keeping internal TanStack reactivity correct.\nimport { computed, ref, watch, useTemplateRef, h } from 'vue'\nimport {\n useVueTable,\n getCoreRowModel,\n getSortedRowModel,\n type ColumnDef,\n type SortingState,\n type RowSelectionState,\n type Table as TableInstance,\n type RowData,\n type Row,\n} from '@tanstack/vue-table'\nimport { tableVariants, type TableVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTableProvide } from './table.context'\nimport { useTableKeyboardNav } from './useTableKeyboardNav'\nimport TableHeader from './TableHeader.vue'\nimport TableBody from './TableBody.vue'\nimport TableVirtualBody from './TableVirtualBody.vue'\nimport TableFooter from './TableFooter.vue'\nimport TableCheckboxCell from './TableCheckboxCell.vue'\n\ntype SelectionMode = 'none' | 'single' | 'multiple'\n\nconst props = withDefaults(\n defineProps<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<any, any>[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any[]\n variant?: TableVariants['variant']\n ariaLabel?: string\n /** Row selection mode. 'single' = radio-style; 'multiple' = checkbox + shift+click; 'none' = disabled */\n selection?: SelectionMode\n /** Controlled row selection state (Record<rowId, boolean>). Use v-model:rowSelection */\n rowSelection?: RowSelectionState\n /**\n * Opt-in row virtualization via @tanstack/vue-virtual.\n * - false (default): all rows render in a standard <tbody>\n * - true: always render via TableVirtualBody (only visible rows in DOM)\n * - number N: auto-enable virtualization when data.length > N\n */\n virtualRows?: boolean | number\n /** Estimated row height in px used by the virtualizer (default: 44) */\n estimatedRowHeight?: number\n /** Extra rows to render outside the visible viewport (default: 8) */\n virtualizerOverscan?: number\n }>(),\n {\n variant: 'primary',\n ariaLabel: undefined,\n selection: 'none',\n rowSelection: undefined,\n virtualRows: false,\n estimatedRowHeight: 44,\n virtualizerOverscan: 8,\n }\n)\n\nconst emit = defineEmits<{\n 'update:rowSelection': [value: RowSelectionState]\n}>()\n\n// --- Sorting state ----------------------------------------------------\nconst sorting = ref<SortingState>([])\n\n// --- Row selection state (controlled/uncontrolled) -------------------\nconst internalRowSelection = ref<RowSelectionState>(props.rowSelection ?? {})\nwatch(\n () => props.rowSelection,\n (next) => {\n if (next !== undefined) internalRowSelection.value = next\n },\n { deep: true }\n)\n\nfunction updateRowSelection(\n updater: RowSelectionState | ((old: RowSelectionState) => RowSelectionState)\n) {\n const next = typeof updater === 'function' ? updater(internalRowSelection.value) : updater\n internalRowSelection.value = next\n emit('update:rowSelection', next)\n}\n\n// --- Selection column injected at position 0 when enabled -----------\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst selectionColumn: ColumnDef<any, any> = {\n id: '__select__',\n size: 44,\n enableSorting: false,\n header: ({ table: t }) =>\n props.selection === 'multiple'\n ? h(TableCheckboxCell, { table: t as unknown as TableInstance<RowData> })\n : '',\n cell: ({ row: r }) => h(TableCheckboxCell, { row: r as unknown as Row<RowData> }),\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst effectiveColumns = computed<ColumnDef<any, any>[]>(() => {\n if (props.selection === 'none') return props.columns\n return [selectionColumn, ...props.columns]\n})\n\n// --- useVueTable instance ---------------------------------------------\n// Use getters so @tanstack/vue-table tracks prop reactivity.\nconst table = useVueTable({\n get data() {\n return props.data\n },\n get columns() {\n return effectiveColumns.value as ColumnDef<RowData, unknown>[]\n },\n state: {\n get sorting() {\n return sorting.value\n },\n get rowSelection() {\n return internalRowSelection.value\n },\n },\n onSortingChange: (updater) => {\n sorting.value = typeof updater === 'function' ? updater(sorting.value) : updater\n },\n onRowSelectionChange: updateRowSelection,\n get enableRowSelection() {\n return props.selection !== 'none'\n },\n get enableMultiRowSelection() {\n return props.selection === 'multiple'\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n}) as unknown as TableInstance<RowData>\n\n// --- Virtualization ---------------------------------------------------\n/** Whether to use TableVirtualBody instead of TableBody */\nconst useVirtual = computed<boolean>(() => {\n if (props.virtualRows === false) return false\n if (props.virtualRows === true) return true\n if (typeof props.virtualRows === 'number') return props.data.length > props.virtualRows\n return false\n})\n\n// The scroll container wrapping the <table> — passed to the virtualizer\nconst scrollContainerRef = useTemplateRef<HTMLElement>('scrollContainerRef')\n\n// Ref to TableVirtualBody instance so keyboard nav can call scrollToIndex\nconst virtualBodyRef = ref<InstanceType<typeof TableVirtualBody> | null>(null)\n\n// --- Keyboard navigation ----------------------------------------------\nconst rootRef = useTemplateRef<HTMLElement>('rootRef')\n\nconst rowCount = computed(() => props.data.length)\nconst columnCount = computed(() => {\n const firstGroup = table.getHeaderGroups()[0]\n return firstGroup ? firstGroup.headers.length : 0\n})\n\nfunction getCellElement(rowIndex: number, columnIndex: number): HTMLElement | null {\n const root = rootRef.value\n if (!root) return null\n // In virtualized mode, scroll the row into view first so the DOM node exists.\n // The queueMicrotask in useTableKeyboardNav.move() gives Vue one tick to\n // flush the virtualizer's render before focus is attempted.\n if (useVirtual.value && virtualBodyRef.value) {\n virtualBodyRef.value.scrollToIndex(rowIndex)\n }\n return root.querySelector<HTMLElement>(\n `[data-row-index=\"${rowIndex}\"][data-col-index=\"${columnIndex}\"]`\n )\n}\n\nconst keyboardNav = useTableKeyboardNav({ rowCount, columnCount, getCellElement })\n\n// --- Selection context helpers ----------------------------------------\nconst selectionEnabled = computed(() => props.selection !== 'none')\nconst selectionMode = computed(() => props.selection ?? 'none')\n\n// Track last-clicked row index for Shift+Click range selection\nconst lastClickedRowIndex = ref<number | null>(null)\n\nfunction handleRowClick(rowIndex: number, event: MouseEvent) {\n if (props.selection === 'none') return\n const rows = table.getRowModel().rows\n if (props.selection === 'multiple' && event.shiftKey && lastClickedRowIndex.value !== null) {\n const [start, end] = [lastClickedRowIndex.value, rowIndex].sort((a, b) => a - b)\n const next: RowSelectionState = { ...internalRowSelection.value }\n for (let i = start; i <= end; i++) {\n const r = rows[i]\n if (r) next[r.id] = true\n }\n updateRowSelection(next)\n }\n lastClickedRowIndex.value = rowIndex\n}\n\n// --- Context provision -------------------------------------------------\nconst variantRef = computed(() => props.variant ?? 'primary')\nconst activeCell = keyboardNav.activeCell\n\nuseTableProvide({\n table,\n activeCell,\n selectionEnabled,\n selectionMode,\n variant: variantRef,\n handleRowClick,\n})\n\n// --- Slot class derivation -------------------------------------------\nconst slotFns = computed(() => tableVariants({ variant: variantRef.value }))\n\ndefineExpose({ table, keyboardNav, handleRowClick })\n</script>\n\n<template>\n <div :class=\"composeClassName(slotFns.base(), $attrs.class as string)\">\n <!--\n scroll container: when virtualized, needs a fixed height + overflow:auto\n so the virtualizer can measure the viewport. Consumers should override\n the inline height via a wrapping container or CSS for production use.\n -->\n <div\n ref=\"scrollContainerRef\"\n :class=\"slotFns.scrollContainer()\"\n :style=\"useVirtual ? { height: '400px', overflow: 'auto' } : undefined\"\n >\n <table\n ref=\"rootRef\"\n role=\"grid\"\n :aria-label=\"ariaLabel\"\n :aria-rowcount=\"rowCount\"\n :aria-colcount=\"columnCount\"\n @keydown=\"keyboardNav.onKeydown\"\n >\n <TableHeader />\n <TableBody v-if=\"!useVirtual\">\n <template #cell=\"slotProps\">\n <slot\n name=\"cell\"\n v-bind=\"slotProps\"\n />\n </template>\n </TableBody>\n <TableVirtualBody\n v-else\n ref=\"virtualBodyRef\"\n :scroll-element=\"scrollContainerRef\"\n :estimated-row-height=\"estimatedRowHeight\"\n :overscan=\"virtualizerOverscan\"\n />\n <TableFooter v-if=\"$slots.footer\">\n <slot name=\"footer\" />\n </TableFooter>\n </table>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../src/components/table/Table.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// Note: Vue 3.5 generic SFCs do not propagate generic type parameters across\n// component boundaries when used via JSX/mount() in tests. We use ColumnDef<any, any>\n// for props to avoid TS2322 errors while keeping internal TanStack reactivity correct.\nimport { computed, ref, watch, useTemplateRef, h } from 'vue'\nimport {\n useVueTable,\n getCoreRowModel,\n getSortedRowModel,\n type ColumnDef,\n type SortingState,\n type RowSelectionState,\n type Table as TableInstance,\n type RowData,\n type Row,\n} from '@tanstack/vue-table'\nimport { tableVariants, type TableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableProvide } from './table.context'\nimport { useTableKeyboardNav } from './useTableKeyboardNav'\nimport TableHeader from './TableHeader.vue'\nimport TableBody from './TableBody.vue'\nimport TableVirtualBody from './TableVirtualBody.vue'\nimport TableFooter from './TableFooter.vue'\nimport TableCheckboxCell from './TableCheckboxCell.vue'\n\ntype SelectionMode = 'none' | 'single' | 'multiple'\n\nconst props = withDefaults(\n defineProps<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<any, any>[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any[]\n variant?: TableVariants['variant']\n ariaLabel?: string\n /** Row selection mode. 'single' = radio-style; 'multiple' = checkbox + shift+click; 'none' = disabled */\n selection?: SelectionMode\n /** Controlled row selection state (Record<rowId, boolean>). Use v-model:rowSelection */\n rowSelection?: RowSelectionState\n /**\n * Opt-in row virtualization via @tanstack/vue-virtual.\n * - false (default): all rows render in a standard <tbody>\n * - true: always render via TableVirtualBody (only visible rows in DOM)\n * - number N: auto-enable virtualization when data.length > N\n */\n virtualRows?: boolean | number\n /** Estimated row height in px used by the virtualizer (default: 44) */\n estimatedRowHeight?: number\n /** Extra rows to render outside the visible viewport (default: 8) */\n virtualizerOverscan?: number\n /** Per-slot CSS class overrides */\n classNames?: Partial<{\n base: ClassValue\n scrollContainer: ClassValue\n }>\n }>(),\n {\n variant: 'primary',\n ariaLabel: undefined,\n selection: 'none',\n rowSelection: undefined,\n virtualRows: false,\n estimatedRowHeight: 44,\n virtualizerOverscan: 8,\n }\n)\n\nconst emit = defineEmits<{\n 'update:rowSelection': [value: RowSelectionState]\n}>()\n\n// --- Sorting state ----------------------------------------------------\nconst sorting = ref<SortingState>([])\n\n// --- Row selection state (controlled/uncontrolled) -------------------\nconst internalRowSelection = ref<RowSelectionState>(props.rowSelection ?? {})\nwatch(\n () => props.rowSelection,\n (next) => {\n if (next !== undefined) internalRowSelection.value = next\n },\n { deep: true }\n)\n\nfunction updateRowSelection(\n updater: RowSelectionState | ((old: RowSelectionState) => RowSelectionState)\n) {\n const next = typeof updater === 'function' ? updater(internalRowSelection.value) : updater\n internalRowSelection.value = next\n emit('update:rowSelection', next)\n}\n\n// --- Selection column injected at position 0 when enabled -----------\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst selectionColumn: ColumnDef<any, any> = {\n id: '__select__',\n size: 44,\n enableSorting: false,\n header: ({ table: t }) =>\n props.selection === 'multiple'\n ? h(TableCheckboxCell, { table: t as unknown as TableInstance<RowData> })\n : '',\n cell: ({ row: r }) => h(TableCheckboxCell, { row: r as unknown as Row<RowData> }),\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst effectiveColumns = computed<ColumnDef<any, any>[]>(() => {\n if (props.selection === 'none') return props.columns\n return [selectionColumn, ...props.columns]\n})\n\n// --- useVueTable instance ---------------------------------------------\n// Use getters so @tanstack/vue-table tracks prop reactivity.\nconst table = useVueTable({\n get data() {\n return props.data\n },\n get columns() {\n return effectiveColumns.value as ColumnDef<RowData, unknown>[]\n },\n state: {\n get sorting() {\n return sorting.value\n },\n get rowSelection() {\n return internalRowSelection.value\n },\n },\n onSortingChange: (updater) => {\n sorting.value = typeof updater === 'function' ? updater(sorting.value) : updater\n },\n onRowSelectionChange: updateRowSelection,\n get enableRowSelection() {\n return props.selection !== 'none'\n },\n get enableMultiRowSelection() {\n return props.selection === 'multiple'\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n}) as unknown as TableInstance<RowData>\n\n// --- Virtualization ---------------------------------------------------\n/** Whether to use TableVirtualBody instead of TableBody */\nconst useVirtual = computed<boolean>(() => {\n if (props.virtualRows === false) return false\n if (props.virtualRows === true) return true\n if (typeof props.virtualRows === 'number') return props.data.length > props.virtualRows\n return false\n})\n\n// The scroll container wrapping the <table> — passed to the virtualizer\nconst scrollContainerRef = useTemplateRef<HTMLElement>('scrollContainerRef')\n\n// Ref to TableVirtualBody instance so keyboard nav can call scrollToIndex\nconst virtualBodyRef = ref<InstanceType<typeof TableVirtualBody> | null>(null)\n\n// --- Keyboard navigation ----------------------------------------------\nconst rootRef = useTemplateRef<HTMLElement>('rootRef')\n\nconst rowCount = computed(() => props.data.length)\nconst columnCount = computed(() => {\n const firstGroup = table.getHeaderGroups()[0]\n return firstGroup ? firstGroup.headers.length : 0\n})\n\nfunction getCellElement(rowIndex: number, columnIndex: number): HTMLElement | null {\n const root = rootRef.value\n if (!root) return null\n // In virtualized mode, scroll the row into view first so the DOM node exists.\n // The queueMicrotask in useTableKeyboardNav.move() gives Vue one tick to\n // flush the virtualizer's render before focus is attempted.\n if (useVirtual.value && virtualBodyRef.value) {\n virtualBodyRef.value.scrollToIndex(rowIndex)\n }\n return root.querySelector<HTMLElement>(\n `[data-row-index=\"${rowIndex}\"][data-col-index=\"${columnIndex}\"]`\n )\n}\n\nconst keyboardNav = useTableKeyboardNav({ rowCount, columnCount, getCellElement })\n\n// --- Selection context helpers ----------------------------------------\nconst selectionEnabled = computed(() => props.selection !== 'none')\nconst selectionMode = computed(() => props.selection ?? 'none')\n\n// Track last-clicked row index for Shift+Click range selection\nconst lastClickedRowIndex = ref<number | null>(null)\n\nfunction handleRowClick(rowIndex: number, event: MouseEvent) {\n if (props.selection === 'none') return\n const rows = table.getRowModel().rows\n if (props.selection === 'multiple' && event.shiftKey && lastClickedRowIndex.value !== null) {\n const [start, end] = [lastClickedRowIndex.value, rowIndex].sort((a, b) => a - b)\n const next: RowSelectionState = { ...internalRowSelection.value }\n for (let i = start; i <= end; i++) {\n const r = rows[i]\n if (r) next[r.id] = true\n }\n updateRowSelection(next)\n }\n lastClickedRowIndex.value = rowIndex\n}\n\n// --- Context provision -------------------------------------------------\nconst variantRef = computed(() => props.variant ?? 'primary')\nconst activeCell = keyboardNav.activeCell\n\nuseTableProvide({\n table,\n activeCell,\n selectionEnabled,\n selectionMode,\n variant: variantRef,\n handleRowClick,\n})\n\n// --- Slot class derivation -------------------------------------------\nconst slotFns = computed(() => tableVariants({ variant: variantRef.value }))\n\ndefineExpose({ table, keyboardNav, handleRowClick })\n</script>\n\n<template>\n <div :class=\"composeClassName(slotFns.base(), $attrs.class as string, props.classNames?.base)\">\n <!--\n scroll container: when virtualized, needs a fixed height + overflow:auto\n so the virtualizer can measure the viewport. Consumers should override\n the inline height via a wrapping container or CSS for production use.\n -->\n <div\n ref=\"scrollContainerRef\"\n :class=\"composeClassName(slotFns.scrollContainer(), props.classNames?.scrollContainer)\"\n :style=\"useVirtual ? { height: '400px', overflow: 'auto' } : undefined\"\n >\n <table\n ref=\"rootRef\"\n role=\"grid\"\n :aria-label=\"ariaLabel\"\n :aria-rowcount=\"rowCount\"\n :aria-colcount=\"columnCount\"\n @keydown=\"keyboardNav.onKeydown\"\n >\n <TableHeader />\n <TableBody v-if=\"!useVirtual\">\n <template #cell=\"slotProps\">\n <slot\n name=\"cell\"\n v-bind=\"slotProps\"\n />\n </template>\n </TableBody>\n <TableVirtualBody\n v-else\n ref=\"virtualBodyRef\"\n :scroll-element=\"scrollContainerRef\"\n :estimated-row-height=\"estimatedRowHeight\"\n :overscan=\"virtualizerOverscan\"\n />\n <TableFooter v-if=\"$slots.footer\">\n <slot name=\"footer\" />\n </TableFooter>\n </table>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BA,MAAM,QAAQ;EAwCd,MAAM,OAAO;EAKb,MAAM,UAAU,IAAkB,EAAE,CAAA;EAGpC,MAAM,uBAAuB,IAAuB,MAAM,gBAAgB,EAAE,CAAA;AAC5E,cACQ,MAAM,eACX,SAAS;AACR,OAAI,SAAS,KAAA,EAAW,sBAAqB,QAAQ;KAEvD,EAAE,MAAM,MAAK,CACf;EAEA,SAAS,mBACP,SACA;GACA,MAAM,OAAO,OAAO,YAAY,aAAa,QAAQ,qBAAqB,MAAM,GAAG;AACnF,wBAAqB,QAAQ;AAC7B,QAAK,uBAAuB,KAAI;;EAKlC,MAAM,kBAAuC;GAC3C,IAAI;GACJ,MAAM;GACN,eAAe;GACf,SAAS,EAAE,OAAO,QAChB,MAAM,cAAc,aAChB,EAAE,2BAAmB,EAAE,OAAO,GAAwC,CAAA,GACtE;GACN,OAAO,EAAE,KAAK,QAAQ,EAAE,2BAAmB,EAAE,KAAK,GAA8B,CAAC;GACnF;EAGA,MAAM,mBAAmB,eAAsC;AAC7D,OAAI,MAAM,cAAc,OAAQ,QAAO,MAAM;AAC7C,UAAO,CAAC,iBAAiB,GAAG,MAAM,QAAO;IAC1C;EAID,MAAM,QAAQ,YAAY;GACxB,IAAI,OAAO;AACT,WAAO,MAAM;;GAEf,IAAI,UAAU;AACZ,WAAO,iBAAiB;;GAE1B,OAAO;IACL,IAAI,UAAU;AACZ,YAAO,QAAQ;;IAEjB,IAAI,eAAe;AACjB,YAAO,qBAAqB;;IAE/B;GACD,kBAAkB,YAAY;AAC5B,YAAQ,QAAQ,OAAO,YAAY,aAAa,QAAQ,QAAQ,MAAM,GAAG;;GAE3E,sBAAsB;GACtB,IAAI,qBAAqB;AACvB,WAAO,MAAM,cAAc;;GAE7B,IAAI,0BAA0B;AAC5B,WAAO,MAAM,cAAc;;GAE7B,iBAAiB,iBAAiB;GAClC,mBAAmB,mBAAmB;GACvC,CAAC;;EAIF,MAAM,aAAa,eAAwB;AACzC,OAAI,MAAM,gBAAgB,MAAO,QAAO;AACxC,OAAI,MAAM,gBAAgB,KAAM,QAAO;AACvC,OAAI,OAAO,MAAM,gBAAgB,SAAU,QAAO,MAAM,KAAK,SAAS,MAAM;AAC5E,UAAO;IACR;EAGD,MAAM,qBAAqB,eAA4B,qBAAoB;EAG3E,MAAM,iBAAiB,IAAkD,KAAI;EAG7E,MAAM,UAAU,eAA4B,UAAS;EAErD,MAAM,WAAW,eAAe,MAAM,KAAK,OAAM;EACjD,MAAM,cAAc,eAAe;GACjC,MAAM,aAAa,MAAM,iBAAiB,CAAC;AAC3C,UAAO,aAAa,WAAW,QAAQ,SAAS;IACjD;EAED,SAAS,eAAe,UAAkB,aAAyC;GACjF,MAAM,OAAO,QAAQ;AACrB,OAAI,CAAC,KAAM,QAAO;AAIlB,OAAI,WAAW,SAAS,eAAe,MACrC,gBAAe,MAAM,cAAc,SAAQ;AAE7C,UAAO,KAAK,cACV,oBAAoB,SAAS,qBAAqB,YAAY,IAChE;;EAGF,MAAM,cAAc,oBAAoB;GAAE;GAAU;GAAa;GAAgB,CAAA;EAGjF,MAAM,mBAAmB,eAAe,MAAM,cAAc,OAAM;EAClE,MAAM,gBAAgB,eAAe,MAAM,aAAa,OAAM;EAG9D,MAAM,sBAAsB,IAAmB,KAAI;EAEnD,SAAS,eAAe,UAAkB,OAAmB;AAC3D,OAAI,MAAM,cAAc,OAAQ;GAChC,MAAM,OAAO,MAAM,aAAa,CAAC;AACjC,OAAI,MAAM,cAAc,cAAc,MAAM,YAAY,oBAAoB,UAAU,MAAM;IAC1F,MAAM,CAAC,OAAO,OAAO,CAAC,oBAAoB,OAAO,SAAS,CAAC,MAAM,GAAG,MAAM,IAAI,EAAC;IAC/E,MAAM,OAA0B,EAAE,GAAG,qBAAqB,OAAM;AAChE,SAAK,IAAI,IAAI,OAAO,KAAK,KAAK,KAAK;KACjC,MAAM,IAAI,KAAK;AACf,SAAI,EAAG,MAAK,EAAE,MAAM;;AAEtB,uBAAmB,KAAI;;AAEzB,uBAAoB,QAAQ;;EAI9B,MAAM,aAAa,eAAe,MAAM,WAAW,UAAS;EAC5D,MAAM,aAAa,YAAY;AAE/B,kBAAgB;GACd;GACA;GACA;GACA;GACA,SAAS;GACT;GACD,CAAA;EAGD,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,WAAW,OAAO,CAAC,CAAA;AAE3E,WAAa;GAAE;GAAO;GAAa;GAAgB,CAAA;;uBAIjD,mBAwCM,OAAA,EAxCA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAIA,KAAAA,OAAO,OAAiB,MAAM,YAAY,KAAI,CAAA,EAAA,EAAA,CAM1F,mBAiCM,OAAA;aAhCA;IAAJ,KAAI;IACH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,iBAAe,EAAI,MAAM,YAAY,gBAAe,CAAA;IACpF,OAAK,eAAE,WAAA,QAAU;KAAA,QAAA;KAAA,UAAA;KAAA,GAA2C,KAAA,EAAS;OAEtE,mBA2BQ,SAAA;aA1BF;IAAJ,KAAI;IACJ,MAAK;IACJ,cAAY,QAAA;IACZ,iBAAe,SAAA;IACf,iBAAe,YAAA;IACf,WAAO,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,YAAW,CAAC,aAAZ,MAAA,YAAW,CAAC,UAAS,GAAA,KAAA;;IAE/B,YAAe,oBAAA;KACG,WAAA,SAAA,WAAA,EAAlB,YAOY,mBAAA,EAAA,KAAA,GAAA,EAAA;KANC,MAAI,SAAE,cAAS,CACxB,WAGE,KAAA,QAAA,QAAA,eAAA,mBADQ,UAAS,CAAA,CAAA,CAAA,CAAA;;wBAIvB,YAME,0BAAA;;cAJI;KAAJ,KAAI;KACH,kBAAgB,mBAAA;KAChB,wBAAsB,QAAA;KACtB,UAAU,QAAA;;;;;;IAEMC,KAAAA,OAAO,UAAA,WAAA,EAA1B,YAEc,qBAAA,EAAA,KAAA,GAAA,EAAA;4BADU,CAAtB,WAAsB,KAAA,QAAA,SAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableBody.js","names":[],"sources":["../../../src/components/table/TableBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n // Space on a gridcell toggles row selection\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n // Do NOT handle Space when target is inside a checkbox element (it handles its own Space)\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n // Single-select: clear all, select just this one\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n</script>\n\n<template>\n <tbody :class=\"slotFns.body()\">\n <tr\n v-for=\"(row, rowIndex) in ctx.table.getRowModel().rows\"\n :key=\"row.id\"\n role=\"row\"\n :class=\"slotFns.row()\"\n :aria-rowindex=\"rowIndex + 1\"\n :aria-selected=\"ctx.selectionMode.value !== 'none' ? row.getIsSelected() : undefined\"\n :data-state=\"row.getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(rowIndex, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(row, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in row.getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"slotFns.cell()\"\n :data-row-index=\"rowIndex\"\n :data-col-index=\"colIndex\"\n :tabindex=\"ctx.activeCell.value && ctx.activeCell.value.rowIndex === rowIndex && ctx.activeCell.value.columnIndex === colIndex ? 0 : (ctx.activeCell.value === null && rowIndex === 0 && colIndex === 0 ? 0 : -1)\"\n >\n <slot\n name=\"cell\"\n :row=\"row\"\n :cell=\"cell\"\n :column=\"cell.column\"\n :value=\"cell.getValue()\"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </slot>\n </td>\n </tr>\n </tbody>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"TableBody.js","names":[],"sources":["../../../src/components/table/TableBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableInject } from './table.context'\n\ninterface Props {\n /**\n * Per-slot class overrides. Each key maps to a named slot in the anatomy;\n * the value is merged with the generated variant classes via `composeClassName`.\n *\n * @example\n * ```vue\n * <TableBody :class-names=\"{ row: 'bg-blue-50', cell: 'border-blue-200' }\" />\n * ```\n *\n * Available slots: `body`, `row`, `cell`.\n */\n classNames?: Partial<{\n body: ClassValue\n row: ClassValue\n cell: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n // Space on a gridcell toggles row selection\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n // Do NOT handle Space when target is inside a checkbox element (it handles its own Space)\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n // Single-select: clear all, select just this one\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n</script>\n\n<template>\n <tbody :class=\"composeClassName(slotFns.body(), props.classNames?.body)\">\n <tr\n v-for=\"(row, rowIndex) in ctx.table.getRowModel().rows\"\n :key=\"row.id\"\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.classNames?.row)\"\n :aria-rowindex=\"rowIndex + 1\"\n :aria-selected=\"ctx.selectionMode.value !== 'none' ? row.getIsSelected() : undefined\"\n :data-state=\"row.getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(rowIndex, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(row, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in row.getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n :data-row-index=\"rowIndex\"\n :data-col-index=\"colIndex\"\n :tabindex=\"ctx.activeCell.value && ctx.activeCell.value.rowIndex === rowIndex && ctx.activeCell.value.columnIndex === colIndex ? 0 : (ctx.activeCell.value === null && rowIndex === 0 && colIndex === 0 ? 0 : -1)\"\n >\n <slot\n name=\"cell\"\n :row=\"row\"\n :cell=\"cell\"\n :column=\"cell.column\"\n :value=\"cell.getValue()\"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </slot>\n </td>\n </tr>\n </tbody>\n</template>\n"],"mappings":""}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { composeClassName } from "../../utils/composeClassName.js";
|
|
1
2
|
import { FlexRender } from "../../node_modules/.pnpm/@tanstack_vue-table@8.21.3_vue@3.5.32_typescript@6.0.2_/node_modules/@tanstack/vue-table/build/lib/index.js";
|
|
2
3
|
import { useTableInject } from "./table.context.js";
|
|
3
4
|
import { Fragment, computed, createElementBlock, createVNode, defineComponent, normalizeClass, openBlock, renderList, renderSlot, unref } from "vue";
|
|
@@ -17,7 +18,9 @@ var _hoisted_2 = [
|
|
|
17
18
|
];
|
|
18
19
|
var TableBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
19
20
|
__name: "TableBody",
|
|
21
|
+
props: { classNames: {} },
|
|
20
22
|
setup(__props) {
|
|
23
|
+
const props = __props;
|
|
21
24
|
const ctx = useTableInject();
|
|
22
25
|
const slotFns = computed(() => tableVariants({ variant: ctx.variant.value }));
|
|
23
26
|
function onRowKeydown(row, event) {
|
|
@@ -30,11 +33,11 @@ var TableBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
|
|
|
30
33
|
else row.toggleSelected();
|
|
31
34
|
}
|
|
32
35
|
return (_ctx, _cache) => {
|
|
33
|
-
return openBlock(), createElementBlock("tbody", { class: normalizeClass(slotFns.value.body()) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(ctx).table.getRowModel().rows, (row, rowIndex) => {
|
|
36
|
+
return openBlock(), createElementBlock("tbody", { class: normalizeClass(unref(composeClassName)(slotFns.value.body(), props.classNames?.body)) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(ctx).table.getRowModel().rows, (row, rowIndex) => {
|
|
34
37
|
return openBlock(), createElementBlock("tr", {
|
|
35
38
|
key: row.id,
|
|
36
39
|
role: "row",
|
|
37
|
-
class: normalizeClass(slotFns.value.row()),
|
|
40
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.row(), props.classNames?.row)),
|
|
38
41
|
"aria-rowindex": rowIndex + 1,
|
|
39
42
|
"aria-selected": unref(ctx).selectionMode.value !== "none" ? row.getIsSelected() : void 0,
|
|
40
43
|
"data-state": row.getIsSelected() ? "checked" : void 0,
|
|
@@ -44,7 +47,7 @@ var TableBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
|
|
|
44
47
|
return openBlock(), createElementBlock("td", {
|
|
45
48
|
key: cell.id,
|
|
46
49
|
role: "gridcell",
|
|
47
|
-
class: normalizeClass(slotFns.value.cell()),
|
|
50
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.cell(), props.classNames?.cell)),
|
|
48
51
|
"data-row-index": rowIndex,
|
|
49
52
|
"data-col-index": colIndex,
|
|
50
53
|
tabindex: unref(ctx).activeCell.value && unref(ctx).activeCell.value.rowIndex === rowIndex && unref(ctx).activeCell.value.columnIndex === colIndex ? 0 : unref(ctx).activeCell.value === null && rowIndex === 0 && colIndex === 0 ? 0 : -1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableBody.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n // Space on a gridcell toggles row selection\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n // Do NOT handle Space when target is inside a checkbox element (it handles its own Space)\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n // Single-select: clear all, select just this one\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n</script>\n\n<template>\n <tbody :class=\"slotFns.body()\">\n <tr\n v-for=\"(row, rowIndex) in ctx.table.getRowModel().rows\"\n :key=\"row.id\"\n role=\"row\"\n :class=\"slotFns.row()\"\n :aria-rowindex=\"rowIndex + 1\"\n :aria-selected=\"ctx.selectionMode.value !== 'none' ? row.getIsSelected() : undefined\"\n :data-state=\"row.getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(rowIndex, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(row, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in row.getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"slotFns.cell()\"\n :data-row-index=\"rowIndex\"\n :data-col-index=\"colIndex\"\n :tabindex=\"ctx.activeCell.value && ctx.activeCell.value.rowIndex === rowIndex && ctx.activeCell.value.columnIndex === colIndex ? 0 : (ctx.activeCell.value === null && rowIndex === 0 && colIndex === 0 ? 0 : -1)\"\n >\n <slot\n name=\"cell\"\n :row=\"row\"\n :cell=\"cell\"\n :column=\"cell.column\"\n :value=\"cell.getValue()\"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </slot>\n </td>\n </tr>\n </tbody>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableBody.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableInject } from './table.context'\n\ninterface Props {\n /**\n * Per-slot class overrides. Each key maps to a named slot in the anatomy;\n * the value is merged with the generated variant classes via `composeClassName`.\n *\n * @example\n * ```vue\n * <TableBody :class-names=\"{ row: 'bg-blue-50', cell: 'border-blue-200' }\" />\n * ```\n *\n * Available slots: `body`, `row`, `cell`.\n */\n classNames?: Partial<{\n body: ClassValue\n row: ClassValue\n cell: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n // Space on a gridcell toggles row selection\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n // Do NOT handle Space when target is inside a checkbox element (it handles its own Space)\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n // Single-select: clear all, select just this one\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n</script>\n\n<template>\n <tbody :class=\"composeClassName(slotFns.body(), props.classNames?.body)\">\n <tr\n v-for=\"(row, rowIndex) in ctx.table.getRowModel().rows\"\n :key=\"row.id\"\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.classNames?.row)\"\n :aria-rowindex=\"rowIndex + 1\"\n :aria-selected=\"ctx.selectionMode.value !== 'none' ? row.getIsSelected() : undefined\"\n :data-state=\"row.getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(rowIndex, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(row, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in row.getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n :data-row-index=\"rowIndex\"\n :data-col-index=\"colIndex\"\n :tabindex=\"ctx.activeCell.value && ctx.activeCell.value.rowIndex === rowIndex && ctx.activeCell.value.columnIndex === colIndex ? 0 : (ctx.activeCell.value === null && rowIndex === 0 && colIndex === 0 ? 0 : -1)\"\n >\n <slot\n name=\"cell\"\n :row=\"row\"\n :cell=\"cell\"\n :column=\"cell.column\"\n :value=\"cell.getValue()\"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </slot>\n </td>\n </tr>\n </tbody>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EA0BA,MAAM,QAAQ;EAEd,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;EAE5E,SAAS,aAAa,KAAmB,OAAsB;AAE7D,OAAI,MAAM,QAAQ,IAAK;AACvB,OAAI,IAAI,cAAc,UAAU,OAAQ;GAExC,MAAM,SAAS,MAAM;AACrB,OAAI,OAAO,YAAY,WAAW,OAAO,QAAQ,sBAAoB,CAAE;AACvE,SAAM,gBAAe;AACrB,OAAI,IAAI,cAAc,UAAU,SAE9B,KAAI,MAAM,gBAAgB,GAAG,IAAI,KAAK,MAAM,CAAA;OAE5C,KAAI,gBAAe;;;uBAMrB,mBAmCQ,SAAA,EAnCA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,YAAY,KAAI,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EACpE,mBAiCK,UAAA,MAAA,WAhCuB,MAAA,IAAG,CAAC,MAAM,aAAW,CAAG,OAA1C,KAAK,aAAQ;wBADvB,mBAiCK,MAAA;KA/BF,KAAK,IAAI;KACV,MAAK;KACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,KAAG,EAAI,MAAM,YAAY,IAAG,CAAA;KAC5D,iBAAe,WAAQ;KACvB,iBAAe,MAAA,IAAG,CAAC,cAAc,UAAK,SAAc,IAAI,eAAa,GAAK,KAAA;KAC1E,cAAY,IAAI,eAAa,GAAA,YAAiB,KAAA;KAC9C,UAAQ,MAAkB,MAAA,IAAG,CAAC,eAAe,UAAU,EAAC;KACxD,YAAU,MAAqB,aAAa,KAAK,EAAC;0BAEnD,mBAqBK,UAAA,MAAA,WApBwB,IAAI,iBAAe,GAAtC,MAAM,aAAQ;yBADxB,mBAqBK,MAAA;MAnBF,KAAK,KAAK;MACX,MAAK;MACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,YAAY,KAAI,CAAA;MAC9D,kBAAgB;MAChB,kBAAgB;MAChB,UAAU,MAAA,IAAG,CAAC,WAAW,SAAS,MAAA,IAAG,CAAC,WAAW,MAAM,aAAa,YAAY,MAAA,IAAG,CAAC,WAAW,MAAM,gBAAgB,WAAQ,IAAQ,MAAA,IAAG,CAAC,WAAW,UAAK,QAAa,aAAQ,KAAU,aAAQ,IAAA,IAAA;SAEjM,WAWO,KAAA,QAAA,QAAA;MATC;MACC;MACN,QAAQ,KAAK;MACb,OAAO,KAAK,UAAQ;cAMhB,CAJL,YAGE,MAAA,WAAA,EAAA;MAFC,QAAQ,KAAK,OAAO,UAAU;MAC9B,OAAO,KAAK,YAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCell.js","names":[],"sources":["../../../src/components/table/TableCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\
|
|
1
|
+
{"version":3,"file":"TableCell.js","names":[],"sources":["../../../src/components/table/TableCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\nconst props = defineProps<{\n rowIndex?: number\n columnIndex?: number\n /** Per-slot class name overrides merged via `composeClassName`. */\n classNames?: Partial<{\n cell: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <td\n role=\"gridcell\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n :data-row-index=\"rowIndex\"\n :data-col-index=\"columnIndex\"\n >\n <slot />\n </td>\n</template>\n"],"mappings":""}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { composeClassName } from "../../utils/composeClassName.js";
|
|
1
2
|
import { useTableInject } from "./table.context.js";
|
|
2
|
-
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot } from "vue";
|
|
3
|
+
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
|
|
3
4
|
import { tableVariants } from "@auronui/styles";
|
|
4
5
|
//#region src/components/table/TableCell.vue?vue&type=script&setup=true&lang.ts
|
|
5
6
|
var _hoisted_1 = ["data-row-index", "data-col-index"];
|
|
@@ -7,15 +8,17 @@ var TableCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
|
|
|
7
8
|
__name: "TableCell",
|
|
8
9
|
props: {
|
|
9
10
|
rowIndex: {},
|
|
10
|
-
columnIndex: {}
|
|
11
|
+
columnIndex: {},
|
|
12
|
+
classNames: {}
|
|
11
13
|
},
|
|
12
14
|
setup(__props) {
|
|
15
|
+
const props = __props;
|
|
13
16
|
const ctx = useTableInject();
|
|
14
17
|
const slotFns = computed(() => tableVariants({ variant: ctx.variant.value }));
|
|
15
18
|
return (_ctx, _cache) => {
|
|
16
19
|
return openBlock(), createElementBlock("td", {
|
|
17
20
|
role: "gridcell",
|
|
18
|
-
class: normalizeClass(slotFns.value.cell()),
|
|
21
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.cell(), props.classNames?.cell)),
|
|
19
22
|
"data-row-index": __props.rowIndex,
|
|
20
23
|
"data-col-index": __props.columnIndex
|
|
21
24
|
}, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\
|
|
1
|
+
{"version":3,"file":"TableCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\nconst props = defineProps<{\n rowIndex?: number\n columnIndex?: number\n /** Per-slot class name overrides merged via `composeClassName`. */\n classNames?: Partial<{\n cell: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <td\n role=\"gridcell\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n :data-row-index=\"rowIndex\"\n :data-col-index=\"columnIndex\"\n >\n <slot />\n </td>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EASd,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;;uBAI1E,mBAOK,MAAA;IANH,MAAK;IACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,YAAY,KAAI,CAAA;IAC9D,kBAAgB,QAAA;IAChB,kBAAgB,QAAA;OAEjB,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableFooter.js","names":[],"sources":["../../../src/components/table/TableFooter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tfoot :class=\"slotFns.footer()\">\n <slot />\n </tfoot>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"TableFooter.js","names":[],"sources":["../../../src/components/table/TableFooter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\ninterface Props {\n /**\n * Override classes for specific slots.\n */\n classNames?: Partial<{\n footer: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\n</script>\n\n<template>\n <tfoot :class=\"composeClassName(slotFns.footer(), props.classNames?.footer)\">\n <slot />\n </tfoot>\n</template>\n"],"mappings":""}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
import { composeClassName } from "../../utils/composeClassName.js";
|
|
1
2
|
import { useTableInject } from "./table.context.js";
|
|
2
|
-
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot } from "vue";
|
|
3
|
+
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
|
|
3
4
|
import { tableVariants } from "@auronui/styles";
|
|
4
5
|
//#region src/components/table/TableFooter.vue?vue&type=script&setup=true&lang.ts
|
|
5
6
|
var TableFooter_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
6
7
|
__name: "TableFooter",
|
|
8
|
+
props: { classNames: {} },
|
|
7
9
|
setup(__props) {
|
|
10
|
+
const props = __props;
|
|
8
11
|
const ctx = useTableInject();
|
|
9
12
|
const slotFns = computed(() => tableVariants({ variant: ctx.variant.value }));
|
|
10
13
|
return (_ctx, _cache) => {
|
|
11
|
-
return openBlock(), createElementBlock("tfoot", { class: normalizeClass(slotFns.value.footer()) }, [renderSlot(_ctx.$slots, "default")], 2);
|
|
14
|
+
return openBlock(), createElementBlock("tfoot", { class: normalizeClass(unref(composeClassName)(slotFns.value.footer(), props.classNames?.footer)) }, [renderSlot(_ctx.$slots, "default")], 2);
|
|
12
15
|
};
|
|
13
16
|
}
|
|
14
17
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableFooter.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableFooter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tfoot :class=\"slotFns.footer()\">\n <slot />\n </tfoot>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableFooter.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableFooter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\ninterface Props {\n /**\n * Override classes for specific slots.\n */\n classNames?: Partial<{\n footer: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\n</script>\n\n<template>\n <tfoot :class=\"composeClassName(slotFns.footer(), props.classNames?.footer)\">\n <slot />\n </tfoot>\n</template>\n"],"mappings":";;;;;;;;;EAeA,MAAM,QAAQ;EACd,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;;uBAK1E,mBAEQ,SAAA,EAFA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,QAAM,EAAI,MAAM,YAAY,OAAM,CAAA,EAAA,EAAA,CACxE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHeader.js","names":[],"sources":["../../../src/components/table/TableHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { FlexRender, type Header } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getAriaSort(header: Header<any, unknown>): 'ascending' | 'descending' | 'none' | undefined {\n if (!header.column.getCanSort()) return undefined\n const dir = header.column.getIsSorted()\n if (dir === 'asc') return 'ascending'\n if (dir === 'desc') return 'descending'\n return 'none'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction onHeaderActivate(header: Header<any, unknown>, event: MouseEvent | KeyboardEvent) {\n if (!header.column.getCanSort()) return\n const handler = header.column.getToggleSortingHandler()\n if (handler) handler(event)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction onHeaderKeydown(header: Header<any, unknown>, event: KeyboardEvent) {\n if (event.key !== ' ' && event.key !== 'Enter') return\n if (!header.column.getCanSort()) return\n event.preventDefault()\n onHeaderActivate(header, event)\n}\n</script>\n\n<template>\n <thead :class=\"slotFns.header()\">\n <tr\n v-for=\"headerGroup in ctx.table.getHeaderGroups()\"\n :key=\"headerGroup.id\"\n role=\"row\"\n :class=\"slotFns.row()\"\n >\n <th\n v-for=\"(header, colIndex) in headerGroup.headers\"\n :key=\"header.id\"\n role=\"columnheader\"\n :class=\"slotFns.column()\"\n :data-col-index=\"colIndex\"\n :data-row-index=\"-1\"\n :aria-sort=\"getAriaSort(header)\"\n :data-allows-sorting=\"header.column.getCanSort() ? 'true' : undefined\"\n :tabindex=\"header.column.getCanSort() ? 0 : undefined\"\n @click=\"onHeaderActivate(header, $event)\"\n @keydown=\"onHeaderKeydown(header, $event)\"\n >\n <FlexRender\n v-if=\"!header.isPlaceholder\"\n :render=\"header.column.columnDef.header\"\n :props=\"header.getContext()\"\n />\n </th>\n </tr>\n </thead>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"TableHeader.js","names":[],"sources":["../../../src/components/table/TableHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { FlexRender, type Header } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableInject } from './table.context'\n\ntype Props = {\n /**\n * Per-slot class overrides. Each key maps to a named slot in the anatomy;\n * the value is merged with the generated variant classes via `composeClassName`.\n */\n classNames?: Partial<{\n header: ClassValue\n row: ClassValue\n column: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getAriaSort(header: Header<any, unknown>): 'ascending' | 'descending' | 'none' | undefined {\n if (!header.column.getCanSort()) return undefined\n const dir = header.column.getIsSorted()\n if (dir === 'asc') return 'ascending'\n if (dir === 'desc') return 'descending'\n return 'none'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction onHeaderActivate(header: Header<any, unknown>, event: MouseEvent | KeyboardEvent) {\n if (!header.column.getCanSort()) return\n const handler = header.column.getToggleSortingHandler()\n if (handler) handler(event)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction onHeaderKeydown(header: Header<any, unknown>, event: KeyboardEvent) {\n if (event.key !== ' ' && event.key !== 'Enter') return\n if (!header.column.getCanSort()) return\n event.preventDefault()\n onHeaderActivate(header, event)\n}\n</script>\n\n<template>\n <thead :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <tr\n v-for=\"headerGroup in ctx.table.getHeaderGroups()\"\n :key=\"headerGroup.id\"\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.classNames?.row)\"\n >\n <th\n v-for=\"(header, colIndex) in headerGroup.headers\"\n :key=\"header.id\"\n role=\"columnheader\"\n :class=\"composeClassName(slotFns.column(), props.classNames?.column)\"\n :data-col-index=\"colIndex\"\n :data-row-index=\"-1\"\n :aria-sort=\"getAriaSort(header)\"\n :data-allows-sorting=\"header.column.getCanSort() ? 'true' : undefined\"\n :tabindex=\"header.column.getCanSort() ? 0 : undefined\"\n @click=\"onHeaderActivate(header, $event)\"\n @keydown=\"onHeaderKeydown(header, $event)\"\n >\n <FlexRender\n v-if=\"!header.isPlaceholder\"\n :render=\"header.column.columnDef.header\"\n :props=\"header.getContext()\"\n />\n </th>\n </tr>\n </thead>\n</template>\n"],"mappings":""}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { composeClassName } from "../../utils/composeClassName.js";
|
|
1
2
|
import { FlexRender } from "../../node_modules/.pnpm/@tanstack_vue-table@8.21.3_vue@3.5.32_typescript@6.0.2_/node_modules/@tanstack/vue-table/build/lib/index.js";
|
|
2
3
|
import { useTableInject } from "./table.context.js";
|
|
3
4
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, defineComponent, normalizeClass, openBlock, renderList, unref } from "vue";
|
|
@@ -13,7 +14,9 @@ var _hoisted_1 = [
|
|
|
13
14
|
];
|
|
14
15
|
var TableHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
15
16
|
__name: "TableHeader",
|
|
17
|
+
props: { classNames: {} },
|
|
16
18
|
setup(__props) {
|
|
19
|
+
const props = __props;
|
|
17
20
|
const ctx = useTableInject();
|
|
18
21
|
const slotFns = computed(() => tableVariants({ variant: ctx.variant.value }));
|
|
19
22
|
function getAriaSort(header) {
|
|
@@ -35,16 +38,16 @@ var TableHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
35
38
|
onHeaderActivate(header, event);
|
|
36
39
|
}
|
|
37
40
|
return (_ctx, _cache) => {
|
|
38
|
-
return openBlock(), createElementBlock("thead", { class: normalizeClass(slotFns.value.header()) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(ctx).table.getHeaderGroups(), (headerGroup) => {
|
|
41
|
+
return openBlock(), createElementBlock("thead", { class: normalizeClass(unref(composeClassName)(slotFns.value.header(), props.classNames?.header)) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(ctx).table.getHeaderGroups(), (headerGroup) => {
|
|
39
42
|
return openBlock(), createElementBlock("tr", {
|
|
40
43
|
key: headerGroup.id,
|
|
41
44
|
role: "row",
|
|
42
|
-
class: normalizeClass(slotFns.value.row())
|
|
45
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.row(), props.classNames?.row))
|
|
43
46
|
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(headerGroup.headers, (header, colIndex) => {
|
|
44
47
|
return openBlock(), createElementBlock("th", {
|
|
45
48
|
key: header.id,
|
|
46
49
|
role: "columnheader",
|
|
47
|
-
class: normalizeClass(slotFns.value.column()),
|
|
50
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.column(), props.classNames?.column)),
|
|
48
51
|
"data-col-index": colIndex,
|
|
49
52
|
"data-row-index": -1,
|
|
50
53
|
"aria-sort": getAriaSort(header),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHeader.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { FlexRender, type Header } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getAriaSort(header: Header<any, unknown>): 'ascending' | 'descending' | 'none' | undefined {\n if (!header.column.getCanSort()) return undefined\n const dir = header.column.getIsSorted()\n if (dir === 'asc') return 'ascending'\n if (dir === 'desc') return 'descending'\n return 'none'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction onHeaderActivate(header: Header<any, unknown>, event: MouseEvent | KeyboardEvent) {\n if (!header.column.getCanSort()) return\n const handler = header.column.getToggleSortingHandler()\n if (handler) handler(event)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction onHeaderKeydown(header: Header<any, unknown>, event: KeyboardEvent) {\n if (event.key !== ' ' && event.key !== 'Enter') return\n if (!header.column.getCanSort()) return\n event.preventDefault()\n onHeaderActivate(header, event)\n}\n</script>\n\n<template>\n <thead :class=\"slotFns.header()\">\n <tr\n v-for=\"headerGroup in ctx.table.getHeaderGroups()\"\n :key=\"headerGroup.id\"\n role=\"row\"\n :class=\"slotFns.row()\"\n >\n <th\n v-for=\"(header, colIndex) in headerGroup.headers\"\n :key=\"header.id\"\n role=\"columnheader\"\n :class=\"slotFns.column()\"\n :data-col-index=\"colIndex\"\n :data-row-index=\"-1\"\n :aria-sort=\"getAriaSort(header)\"\n :data-allows-sorting=\"header.column.getCanSort() ? 'true' : undefined\"\n :tabindex=\"header.column.getCanSort() ? 0 : undefined\"\n @click=\"onHeaderActivate(header, $event)\"\n @keydown=\"onHeaderKeydown(header, $event)\"\n >\n <FlexRender\n v-if=\"!header.isPlaceholder\"\n :render=\"header.column.columnDef.header\"\n :props=\"header.getContext()\"\n />\n </th>\n </tr>\n </thead>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableHeader.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { FlexRender, type Header } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableInject } from './table.context'\n\ntype Props = {\n /**\n * Per-slot class overrides. Each key maps to a named slot in the anatomy;\n * the value is merged with the generated variant classes via `composeClassName`.\n */\n classNames?: Partial<{\n header: ClassValue\n row: ClassValue\n column: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getAriaSort(header: Header<any, unknown>): 'ascending' | 'descending' | 'none' | undefined {\n if (!header.column.getCanSort()) return undefined\n const dir = header.column.getIsSorted()\n if (dir === 'asc') return 'ascending'\n if (dir === 'desc') return 'descending'\n return 'none'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction onHeaderActivate(header: Header<any, unknown>, event: MouseEvent | KeyboardEvent) {\n if (!header.column.getCanSort()) return\n const handler = header.column.getToggleSortingHandler()\n if (handler) handler(event)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction onHeaderKeydown(header: Header<any, unknown>, event: KeyboardEvent) {\n if (event.key !== ' ' && event.key !== 'Enter') return\n if (!header.column.getCanSort()) return\n event.preventDefault()\n onHeaderActivate(header, event)\n}\n</script>\n\n<template>\n <thead :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <tr\n v-for=\"headerGroup in ctx.table.getHeaderGroups()\"\n :key=\"headerGroup.id\"\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.classNames?.row)\"\n >\n <th\n v-for=\"(header, colIndex) in headerGroup.headers\"\n :key=\"header.id\"\n role=\"columnheader\"\n :class=\"composeClassName(slotFns.column(), props.classNames?.column)\"\n :data-col-index=\"colIndex\"\n :data-row-index=\"-1\"\n :aria-sort=\"getAriaSort(header)\"\n :data-allows-sorting=\"header.column.getCanSort() ? 'true' : undefined\"\n :tabindex=\"header.column.getCanSort() ? 0 : undefined\"\n @click=\"onHeaderActivate(header, $event)\"\n @keydown=\"onHeaderKeydown(header, $event)\"\n >\n <FlexRender\n v-if=\"!header.isPlaceholder\"\n :render=\"header.column.columnDef.header\"\n :props=\"header.getContext()\"\n />\n </th>\n </tr>\n </thead>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAmBA,MAAM,QAAQ;EACd,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;EAI5E,SAAS,YAAY,QAA+E;AAClG,OAAI,CAAC,OAAO,OAAO,YAAY,CAAE,QAAO,KAAA;GACxC,MAAM,MAAM,OAAO,OAAO,aAAY;AACtC,OAAI,QAAQ,MAAO,QAAO;AAC1B,OAAI,QAAQ,OAAQ,QAAO;AAC3B,UAAO;;EAIT,SAAS,iBAAiB,QAA8B,OAAmC;AACzF,OAAI,CAAC,OAAO,OAAO,YAAY,CAAE;GACjC,MAAM,UAAU,OAAO,OAAO,yBAAwB;AACtD,OAAI,QAAS,SAAQ,MAAK;;EAI5B,SAAS,gBAAgB,QAA8B,OAAsB;AAC3E,OAAI,MAAM,QAAQ,OAAO,MAAM,QAAQ,QAAS;AAChD,OAAI,CAAC,OAAO,OAAO,YAAY,CAAE;AACjC,SAAM,gBAAe;AACrB,oBAAiB,QAAQ,MAAK;;;uBAK9B,mBA2BQ,SAAA,EA3BA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,QAAM,EAAI,MAAM,YAAY,OAAM,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EACxE,mBAyBK,UAAA,MAAA,WAxBmB,MAAA,IAAG,CAAC,MAAM,iBAAe,GAAxC,gBAAW;wBADpB,mBAyBK,MAAA;KAvBF,KAAK,YAAY;KAClB,MAAK;KACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,KAAG,EAAI,MAAM,YAAY,IAAG,CAAA;0BAE7D,mBAkBK,UAAA,MAAA,WAjB0B,YAAY,UAAjC,QAAQ,aAAQ;yBAD1B,mBAkBK,MAAA;MAhBF,KAAK,OAAO;MACb,MAAK;MACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,QAAM,EAAI,MAAM,YAAY,OAAM,CAAA;MAClE,kBAAgB;MAChB,kBAAgB;MAChB,aAAW,YAAY,OAAM;MAC7B,uBAAqB,OAAO,OAAO,YAAU,GAAA,SAAc,KAAA;MAC3D,UAAU,OAAO,OAAO,YAAU,GAAA,IAAS,KAAA;MAC3C,UAAK,WAAE,iBAAiB,QAAQ,OAAM;MACtC,YAAO,WAAE,gBAAgB,QAAQ,OAAM;UAG/B,OAAO,iBAAA,WAAA,EADhB,YAIE,MAAA,WAAA,EAAA;;MAFC,QAAQ,OAAO,OAAO,UAAU;MAChC,OAAO,OAAO,YAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHeaderCell.js","names":[],"sources":["../../../src/components/table/TableHeaderCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\
|
|
1
|
+
{"version":3,"file":"TableHeaderCell.js","names":[],"sources":["../../../src/components/table/TableHeaderCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\nconst props = defineProps<{\n columnIndex?: number\n sortDirection?: 'ascending' | 'descending' | 'none'\n /** Per-slot class overrides */\n classNames?: Partial<{\n column: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <th\n role=\"columnheader\"\n :class=\"composeClassName(slotFns.column(), props.classNames?.column)\"\n :data-col-index=\"columnIndex\"\n :aria-sort=\"sortDirection\"\n >\n <slot />\n </th>\n</template>\n"],"mappings":""}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { composeClassName } from "../../utils/composeClassName.js";
|
|
1
2
|
import { useTableInject } from "./table.context.js";
|
|
2
|
-
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot } from "vue";
|
|
3
|
+
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
|
|
3
4
|
import { tableVariants } from "@auronui/styles";
|
|
4
5
|
//#region src/components/table/TableHeaderCell.vue?vue&type=script&setup=true&lang.ts
|
|
5
6
|
var _hoisted_1 = ["data-col-index", "aria-sort"];
|
|
@@ -7,15 +8,17 @@ var TableHeaderCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
7
8
|
__name: "TableHeaderCell",
|
|
8
9
|
props: {
|
|
9
10
|
columnIndex: {},
|
|
10
|
-
sortDirection: {}
|
|
11
|
+
sortDirection: {},
|
|
12
|
+
classNames: {}
|
|
11
13
|
},
|
|
12
14
|
setup(__props) {
|
|
15
|
+
const props = __props;
|
|
13
16
|
const ctx = useTableInject();
|
|
14
17
|
const slotFns = computed(() => tableVariants({ variant: ctx.variant.value }));
|
|
15
18
|
return (_ctx, _cache) => {
|
|
16
19
|
return openBlock(), createElementBlock("th", {
|
|
17
20
|
role: "columnheader",
|
|
18
|
-
class: normalizeClass(slotFns.value.column()),
|
|
21
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.column(), props.classNames?.column)),
|
|
19
22
|
"data-col-index": __props.columnIndex,
|
|
20
23
|
"aria-sort": __props.sortDirection
|
|
21
24
|
}, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHeaderCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableHeaderCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\
|
|
1
|
+
{"version":3,"file":"TableHeaderCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableHeaderCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\nconst props = defineProps<{\n columnIndex?: number\n sortDirection?: 'ascending' | 'descending' | 'none'\n /** Per-slot class overrides */\n classNames?: Partial<{\n column: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <th\n role=\"columnheader\"\n :class=\"composeClassName(slotFns.column(), props.classNames?.column)\"\n :data-col-index=\"columnIndex\"\n :aria-sort=\"sortDirection\"\n >\n <slot />\n </th>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EASd,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;;uBAI1E,mBAOK,MAAA;IANH,MAAK;IACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,QAAM,EAAI,MAAM,YAAY,OAAM,CAAA;IAClE,kBAAgB,QAAA;IAChB,aAAW,QAAA;OAEZ,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.js","names":[],"sources":["../../../src/components/table/TableRow.vue"],"sourcesContent":["<!-- Thin public re-export for consumers who want to compose their own body.\n Renders a single tr with role=\"row\" and the row slot style. -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tr\n role=\"row\"\n :class=\"slotFns.row()\"\n >\n <slot />\n </tr>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"TableRow.js","names":[],"sources":["../../../src/components/table/TableRow.vue"],"sourcesContent":["<!-- Thin public re-export for consumers who want to compose their own body.\n Renders a single tr with role=\"row\" and the row slot style. -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\ninterface Props {\n /** Additional classes to apply to the root element */\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n row: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tr\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.class, props.classNames?.row)\"\n >\n <slot />\n </tr>\n</template>\n"],"mappings":""}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
|
+
import { composeClassName } from "../../utils/composeClassName.js";
|
|
1
2
|
import { useTableInject } from "./table.context.js";
|
|
2
|
-
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot } from "vue";
|
|
3
|
+
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
|
|
3
4
|
import { tableVariants } from "@auronui/styles";
|
|
4
5
|
//#region src/components/table/TableRow.vue?vue&type=script&setup=true&lang.ts
|
|
5
6
|
var TableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
6
7
|
__name: "TableRow",
|
|
8
|
+
props: {
|
|
9
|
+
class: { type: [
|
|
10
|
+
String,
|
|
11
|
+
Boolean,
|
|
12
|
+
null,
|
|
13
|
+
Object,
|
|
14
|
+
Array
|
|
15
|
+
] },
|
|
16
|
+
classNames: {}
|
|
17
|
+
},
|
|
7
18
|
setup(__props) {
|
|
19
|
+
const props = __props;
|
|
8
20
|
const ctx = useTableInject();
|
|
9
21
|
const slotFns = computed(() => tableVariants({ variant: ctx.variant.value }));
|
|
10
22
|
return (_ctx, _cache) => {
|
|
11
23
|
return openBlock(), createElementBlock("tr", {
|
|
12
24
|
role: "row",
|
|
13
|
-
class: normalizeClass(slotFns.value.row())
|
|
25
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.row(), props.class, props.classNames?.row))
|
|
14
26
|
}, [renderSlot(_ctx.$slots, "default")], 2);
|
|
15
27
|
};
|
|
16
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableRow.vue"],"sourcesContent":["<!-- Thin public re-export for consumers who want to compose their own body.\n Renders a single tr with role=\"row\" and the row slot style. -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tr\n role=\"row\"\n :class=\"slotFns.row()\"\n >\n <slot />\n </tr>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableRow.vue"],"sourcesContent":["<!-- Thin public re-export for consumers who want to compose their own body.\n Renders a single tr with role=\"row\" and the row slot style. -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\ninterface Props {\n /** Additional classes to apply to the root element */\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n row: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tr\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.class, props.classNames?.row)\"\n >\n <slot />\n </tr>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAiBA,MAAM,QAAQ;EAEd,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;;uBAI1E,mBAKK,MAAA;IAJH,MAAK;IACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,KAAG,EAAI,MAAM,OAAO,MAAM,YAAY,IAAG,CAAA;OAE1E,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableVirtualBody.js","names":[],"sources":["../../../src/components/table/TableVirtualBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst props = defineProps<{\n scrollElement: HTMLElement | null\n estimatedRowHeight?: number\n overscan?: number\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nconst rows = computed(() => ctx.table.getRowModel().rows)\n\nconst virtualizer = useVirtualizer({\n get count() {\n return rows.value.length\n },\n getScrollElement: () => props.scrollElement,\n estimateSize: () => props.estimatedRowHeight ?? 44,\n overscan: props.overscan ?? 8,\n})\n\nconst virtualItems = computed(() => virtualizer.value.getVirtualItems())\nconst totalSize = computed(() => virtualizer.value.getTotalSize())\n\n// Spacer heights above and below the rendered slice.\n// This is the standard TanStack Virtual table pattern: pad via empty <tr> rows\n// so the <tbody> stays inside <table> (valid HTML) and inherits column widths.\nconst paddingTop = computed(() => {\n const items = virtualItems.value\n return items.length > 0 ? items[0].start : 0\n})\nconst paddingBottom = computed(() => {\n const items = virtualItems.value\n if (items.length === 0) return 0\n return totalSize.value - items[items.length - 1].end\n})\n\nconst columnCount = computed(() => ctx.table.getVisibleLeafColumns().length)\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n\ndefineExpose({\n scrollToIndex: (index: number) =>\n virtualizer.value.scrollToIndex(index, { align: 'auto' }),\n})\n</script>\n\n<template>\n <!--\n Uses <tbody> + spacer <tr> rows so virtualized rows stay inside valid\n <table> structure and inherit column widths from <thead>.\n paddingTop/paddingBottom spacers replace the absolute-positioning approach.\n -->\n <tbody :class=\"slotFns.body()\">\n <tr\n v-if=\"paddingTop > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingTop}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n <tr\n v-for=\"vItem in virtualItems\"\n :key=\"rows[vItem.index].id\"\n role=\"row\"\n :class=\"slotFns.row()\"\n :aria-rowindex=\"vItem.index + 1\"\n :aria-selected=\"\n ctx.selectionMode.value !== 'none'\n ? rows[vItem.index].getIsSelected()\n : undefined\n \"\n :data-state=\"rows[vItem.index].getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(vItem.index, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(rows[vItem.index] as Row<RowData>, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in rows[vItem.index].getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"slotFns.cell()\"\n :data-row-index=\"vItem.index\"\n :data-col-index=\"colIndex\"\n :tabindex=\"\n ctx.activeCell.value !== null &&\n ctx.activeCell.value.rowIndex === vItem.index &&\n ctx.activeCell.value.columnIndex === colIndex\n ? 0\n : ctx.activeCell.value === null && vItem.index === 0 && colIndex === 0\n ? 0\n : -1\n \"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </td>\n </tr>\n <tr\n v-if=\"paddingBottom > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingBottom}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n </tbody>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"TableVirtualBody.js","names":[],"sources":["../../../src/components/table/TableVirtualBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableInject } from './table.context'\n\nconst props = defineProps<{\n scrollElement: HTMLElement | null\n estimatedRowHeight?: number\n overscan?: number\n /**\n * Per-slot class overrides. Each key maps to a named slot in the anatomy;\n * the value is merged with the generated variant classes via `composeClassName`.\n */\n classNames?: Partial<{\n body: ClassValue\n row: ClassValue\n cell: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nconst rows = computed(() => ctx.table.getRowModel().rows)\n\nconst virtualizer = useVirtualizer({\n get count() {\n return rows.value.length\n },\n getScrollElement: () => props.scrollElement,\n estimateSize: () => props.estimatedRowHeight ?? 44,\n overscan: props.overscan ?? 8,\n})\n\nconst virtualItems = computed(() => virtualizer.value.getVirtualItems())\nconst totalSize = computed(() => virtualizer.value.getTotalSize())\n\n// Spacer heights above and below the rendered slice.\n// This is the standard TanStack Virtual table pattern: pad via empty <tr> rows\n// so the <tbody> stays inside <table> (valid HTML) and inherits column widths.\nconst paddingTop = computed(() => {\n const items = virtualItems.value\n return items.length > 0 ? items[0].start : 0\n})\nconst paddingBottom = computed(() => {\n const items = virtualItems.value\n if (items.length === 0) return 0\n return totalSize.value - items[items.length - 1].end\n})\n\nconst columnCount = computed(() => ctx.table.getVisibleLeafColumns().length)\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n\ndefineExpose({\n scrollToIndex: (index: number) =>\n virtualizer.value.scrollToIndex(index, { align: 'auto' }),\n})\n</script>\n\n<template>\n <!--\n Uses <tbody> + spacer <tr> rows so virtualized rows stay inside valid\n <table> structure and inherit column widths from <thead>.\n paddingTop/paddingBottom spacers replace the absolute-positioning approach.\n -->\n <tbody :class=\"composeClassName(slotFns.body(), props.classNames?.body)\">\n <tr\n v-if=\"paddingTop > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingTop}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n <tr\n v-for=\"vItem in virtualItems\"\n :key=\"rows[vItem.index].id\"\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.classNames?.row)\"\n :aria-rowindex=\"vItem.index + 1\"\n :aria-selected=\"\n ctx.selectionMode.value !== 'none'\n ? rows[vItem.index].getIsSelected()\n : undefined\n \"\n :data-state=\"rows[vItem.index].getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(vItem.index, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(rows[vItem.index] as Row<RowData>, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in rows[vItem.index].getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n :data-row-index=\"vItem.index\"\n :data-col-index=\"colIndex\"\n :tabindex=\"\n ctx.activeCell.value !== null &&\n ctx.activeCell.value.rowIndex === vItem.index &&\n ctx.activeCell.value.columnIndex === colIndex\n ? 0\n : ctx.activeCell.value === null && vItem.index === 0 && colIndex === 0\n ? 0\n : -1\n \"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </td>\n </tr>\n <tr\n v-if=\"paddingBottom > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingBottom}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n </tbody>\n</template>\n"],"mappings":""}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { composeClassName } from "../../utils/composeClassName.js";
|
|
1
2
|
import { FlexRender } from "../../node_modules/.pnpm/@tanstack_vue-table@8.21.3_vue@3.5.32_typescript@6.0.2_/node_modules/@tanstack/vue-table/build/lib/index.js";
|
|
2
3
|
import { useTableInject } from "./table.context.js";
|
|
3
4
|
import { useVirtualizer } from "../../node_modules/.pnpm/@tanstack_vue-virtual@3.13.23_vue@3.5.32_typescript@6.0.2_/node_modules/@tanstack/vue-virtual/dist/esm/index.js";
|
|
@@ -31,7 +32,8 @@ var TableVirtualBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
31
32
|
props: {
|
|
32
33
|
scrollElement: {},
|
|
33
34
|
estimatedRowHeight: {},
|
|
34
|
-
overscan: {}
|
|
35
|
+
overscan: {},
|
|
36
|
+
classNames: {}
|
|
35
37
|
},
|
|
36
38
|
setup(__props, { expose: __expose }) {
|
|
37
39
|
const props = __props;
|
|
@@ -69,7 +71,7 @@ var TableVirtualBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
69
71
|
}
|
|
70
72
|
__expose({ scrollToIndex: (index) => virtualizer.value.scrollToIndex(index, { align: "auto" }) });
|
|
71
73
|
return (_ctx, _cache) => {
|
|
72
|
-
return openBlock(), createElementBlock("tbody", { class: normalizeClass(slotFns.value.body()) }, [
|
|
74
|
+
return openBlock(), createElementBlock("tbody", { class: normalizeClass(unref(composeClassName)(slotFns.value.body(), props.classNames?.body)) }, [
|
|
73
75
|
paddingTop.value > 0 ? (openBlock(), createElementBlock("tr", _hoisted_1, [createElementVNode("td", {
|
|
74
76
|
colspan: columnCount.value,
|
|
75
77
|
style: normalizeStyle({
|
|
@@ -82,7 +84,7 @@ var TableVirtualBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
82
84
|
return openBlock(), createElementBlock("tr", {
|
|
83
85
|
key: rows.value[vItem.index].id,
|
|
84
86
|
role: "row",
|
|
85
|
-
class: normalizeClass(slotFns.value.row()),
|
|
87
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.row(), props.classNames?.row)),
|
|
86
88
|
"aria-rowindex": vItem.index + 1,
|
|
87
89
|
"aria-selected": unref(ctx).selectionMode.value !== "none" ? rows.value[vItem.index].getIsSelected() : void 0,
|
|
88
90
|
"data-state": rows.value[vItem.index].getIsSelected() ? "checked" : void 0,
|
|
@@ -92,7 +94,7 @@ var TableVirtualBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
92
94
|
return openBlock(), createElementBlock("td", {
|
|
93
95
|
key: cell.id,
|
|
94
96
|
role: "gridcell",
|
|
95
|
-
class: normalizeClass(slotFns.value.cell()),
|
|
97
|
+
class: normalizeClass(unref(composeClassName)(slotFns.value.cell(), props.classNames?.cell)),
|
|
96
98
|
"data-row-index": vItem.index,
|
|
97
99
|
"data-col-index": colIndex,
|
|
98
100
|
tabindex: unref(ctx).activeCell.value !== null && unref(ctx).activeCell.value.rowIndex === vItem.index && unref(ctx).activeCell.value.columnIndex === colIndex ? 0 : unref(ctx).activeCell.value === null && vItem.index === 0 && colIndex === 0 ? 0 : -1
|