@zerodep-dev/vue-tsx-pro-ui 0.2.0 → 0.3.0
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/base/Badge.js +3 -3
- package/dist/base/Badge.js.map +1 -1
- package/dist/base/Can.d.ts +12 -0
- package/dist/base/Can.js +20 -0
- package/dist/base/Can.js.map +1 -0
- package/dist/base/ClientOnly.d.ts +10 -0
- package/dist/base/ClientOnly.js +18 -0
- package/dist/base/ClientOnly.js.map +1 -0
- package/dist/base/CloseButton.js +3 -3
- package/dist/base/CloseButton.js.map +1 -1
- package/dist/base/CodeBlock.js +5 -5
- package/dist/base/CodeBlock.js.map +1 -1
- package/dist/base/CopyButton.js +3 -3
- package/dist/base/CopyButton.js.map +1 -1
- package/dist/base/Icon.js +3 -3
- package/dist/base/Icon.js.map +1 -1
- package/dist/base/Indicator.js +3 -3
- package/dist/base/Indicator.js.map +1 -1
- package/dist/base/StatusDot.js +3 -3
- package/dist/base/StatusDot.js.map +1 -1
- package/dist/base/Tag.js +5 -5
- package/dist/base/Tag.js.map +1 -1
- package/dist/base/button-core.js +4 -4
- package/dist/base/button-core.js.map +1 -1
- package/dist/charts/AreaChart.js +3 -3
- package/dist/charts/AreaChart.js.map +1 -1
- package/dist/charts/BarChart.js +3 -3
- package/dist/charts/BarChart.js.map +1 -1
- package/dist/charts/ChordChart.js +3 -3
- package/dist/charts/ChordChart.js.map +1 -1
- package/dist/charts/ComboChart.js +3 -3
- package/dist/charts/ComboChart.js.map +1 -1
- package/dist/charts/DonutChart.js +3 -3
- package/dist/charts/DonutChart.js.map +1 -1
- package/dist/charts/FunnelChart.js +5 -5
- package/dist/charts/FunnelChart.js.map +1 -1
- package/dist/charts/GraphChart.js +3 -3
- package/dist/charts/GraphChart.js.map +1 -1
- package/dist/charts/LineChart.js +3 -3
- package/dist/charts/LineChart.js.map +1 -1
- package/dist/charts/MapChart.js +7 -7
- package/dist/charts/MapChart.js.map +1 -1
- package/dist/charts/RadarChart.js +16 -15
- package/dist/charts/RadarChart.js.map +1 -1
- package/dist/charts/SankeyChart.js +3 -3
- package/dist/charts/SankeyChart.js.map +1 -1
- package/dist/charts/ScatterChart.js +3 -3
- package/dist/charts/ScatterChart.js.map +1 -1
- package/dist/charts/TimelineChart.js +6 -5
- package/dist/charts/TimelineChart.js.map +1 -1
- package/dist/charts/TreemapChart.js +3 -3
- package/dist/charts/TreemapChart.js.map +1 -1
- package/dist/charts/WaterfallChart.js +3 -3
- package/dist/charts/WaterfallChart.js.map +1 -1
- package/dist/charts/XYChart.js +9 -7
- package/dist/charts/XYChart.js.map +1 -1
- package/dist/charts/frame.js +10 -8
- package/dist/charts/frame.js.map +1 -1
- package/dist/charts/single.js +4 -3
- package/dist/charts/single.js.map +1 -1
- package/dist/config/Provider.d.ts +3 -1
- package/dist/config/Provider.js +9 -4
- package/dist/config/Provider.js.map +1 -1
- package/dist/config/context.d.ts +18 -0
- package/dist/config/context.js +16 -1
- package/dist/config/context.js.map +1 -1
- package/dist/config/createUi.d.ts +20 -3
- package/dist/config/createUi.js +80 -49
- package/dist/config/createUi.js.map +1 -1
- package/dist/config/layout/preference.d.ts +43 -0
- package/dist/config/layout/preference.js +108 -0
- package/dist/config/layout/preference.js.map +1 -0
- package/dist/date/Calendar.js +3 -3
- package/dist/date/Calendar.js.map +1 -1
- package/dist/date/CalendarBoard.js +9 -9
- package/dist/date/CalendarBoard.js.map +1 -1
- package/dist/date/CalendarView.js +7 -7
- package/dist/date/CalendarView.js.map +1 -1
- package/dist/date/DateField.js +3 -3
- package/dist/date/DateField.js.map +1 -1
- package/dist/date/DatePicker.js +5 -5
- package/dist/date/DatePicker.js.map +1 -1
- package/dist/date/DateRangePicker.js +5 -5
- package/dist/date/DateRangePicker.js.map +1 -1
- package/dist/date/DateSegmentGroup.js +5 -5
- package/dist/date/DateSegmentGroup.js.map +1 -1
- package/dist/date/QuarterCalendar.js +6 -6
- package/dist/date/QuarterCalendar.js.map +1 -1
- package/dist/date/RangeCalendar.js +3 -3
- package/dist/date/RangeCalendar.js.map +1 -1
- package/dist/date/SegmentedField.js +3 -3
- package/dist/date/SegmentedField.js.map +1 -1
- package/dist/date/TimeField.js +3 -3
- package/dist/date/TimeField.js.map +1 -1
- package/dist/date/TimePicker.js +4 -4
- package/dist/date/TimePicker.js.map +1 -1
- package/dist/date/date-segments.js +1 -1
- package/dist/date/date-segments.js.map +1 -1
- package/dist/date/picker-popover.js +3 -2
- package/dist/date/picker-popover.js.map +1 -1
- package/dist/diagram/Diagram.js +12 -12
- package/dist/diagram/Diagram.js.map +1 -1
- package/dist/diagram/DiagramLanes.js +3 -3
- package/dist/diagram/DiagramLanes.js.map +1 -1
- package/dist/diagram/DiagramMinimap.js +4 -4
- package/dist/diagram/DiagramMinimap.js.map +1 -1
- package/dist/display/Accordion.js +6 -6
- package/dist/display/Accordion.js.map +1 -1
- package/dist/display/AnimatedNumber.js +4 -4
- package/dist/display/AnimatedNumber.js.map +1 -1
- package/dist/display/Avatar.js +4 -4
- package/dist/display/Avatar.js.map +1 -1
- package/dist/display/Checklist.js +7 -7
- package/dist/display/Checklist.js.map +1 -1
- package/dist/display/Collapse.js +8 -5
- package/dist/display/Collapse.js.map +1 -1
- package/dist/display/Collapsible.js +3 -3
- package/dist/display/Collapsible.js.map +1 -1
- package/dist/display/Descriptions.js +5 -5
- package/dist/display/Descriptions.js.map +1 -1
- package/dist/display/Ellipsis.js +3 -3
- package/dist/display/Ellipsis.js.map +1 -1
- package/dist/display/FieldCompare.js +4 -4
- package/dist/display/FieldCompare.js.map +1 -1
- package/dist/display/Gauge.js +11 -11
- package/dist/display/Gauge.js.map +1 -1
- package/dist/display/Image.js +4 -4
- package/dist/display/Image.js.map +1 -1
- package/dist/display/Marquee.js +3 -3
- package/dist/display/Marquee.js.map +1 -1
- package/dist/display/ProportionBar.js +4 -4
- package/dist/display/ProportionBar.js.map +1 -1
- package/dist/display/Sortable.js +4 -4
- package/dist/display/Sortable.js.map +1 -1
- package/dist/display/Sparkline.js +6 -6
- package/dist/display/Sparkline.js.map +1 -1
- package/dist/display/Stat.js +3 -3
- package/dist/display/Stat.js.map +1 -1
- package/dist/display/Timeline.js +7 -7
- package/dist/display/Timeline.js.map +1 -1
- package/dist/display/Tree.js +10 -10
- package/dist/display/Tree.js.map +1 -1
- package/dist/display/VirtualList.js +7 -7
- package/dist/display/VirtualList.js.map +1 -1
- package/dist/display/Watermark.js +3 -3
- package/dist/display/Watermark.js.map +1 -1
- package/dist/docs-kit/CodeGroup.js +5 -5
- package/dist/docs-kit/CodeGroup.js.map +1 -1
- package/dist/docs-kit/CodePreview.js +6 -6
- package/dist/docs-kit/CodePreview.js.map +1 -1
- package/dist/docs-kit/PropsTable.js +4 -4
- package/dist/docs-kit/PropsTable.js.map +1 -1
- package/dist/feedback/Alert.js +5 -5
- package/dist/feedback/Alert.js.map +1 -1
- package/dist/feedback/Banner.js +5 -5
- package/dist/feedback/Banner.js.map +1 -1
- package/dist/feedback/Empty.js +4 -4
- package/dist/feedback/Empty.js.map +1 -1
- package/dist/feedback/LoadingBar.js +20 -13
- package/dist/feedback/LoadingBar.js.map +1 -1
- package/dist/feedback/LoadingOverlay.js +3 -3
- package/dist/feedback/LoadingOverlay.js.map +1 -1
- package/dist/feedback/Progress.js +14 -14
- package/dist/feedback/Progress.js.map +1 -1
- package/dist/feedback/Result.js +4 -4
- package/dist/feedback/Result.js.map +1 -1
- package/dist/feedback/SkeletonText.js +3 -3
- package/dist/feedback/SkeletonText.js.map +1 -1
- package/dist/feedback/Toast.js +6 -6
- package/dist/feedback/Toast.js.map +1 -1
- package/dist/form/Field.js +7 -7
- package/dist/form/Field.js.map +1 -1
- package/dist/form/Form.js +3 -3
- package/dist/form/Form.js.map +1 -1
- package/dist/form/FormErrorSummary.js +3 -3
- package/dist/form/FormErrorSummary.js.map +1 -1
- package/dist/form/FormSection.js +6 -6
- package/dist/form/FormSection.js.map +1 -1
- package/dist/index.d.ts +11 -6
- package/dist/index.js +10 -5
- package/dist/input/Autocomplete.js +3 -3
- package/dist/input/Autocomplete.js.map +1 -1
- package/dist/input/Cascader.js +7 -7
- package/dist/input/Cascader.js.map +1 -1
- package/dist/input/CharacterCount.js +3 -3
- package/dist/input/CharacterCount.js.map +1 -1
- package/dist/input/Checkbox.js +5 -5
- package/dist/input/Checkbox.js.map +1 -1
- package/dist/input/ColorField.js +4 -4
- package/dist/input/ColorField.js.map +1 -1
- package/dist/input/Combobox.js +4 -4
- package/dist/input/Combobox.js.map +1 -1
- package/dist/input/ConditionBuilder.js +15 -14
- package/dist/input/ConditionBuilder.js.map +1 -1
- package/dist/input/FileDrop.js +3 -3
- package/dist/input/FileDrop.js.map +1 -1
- package/dist/input/Listbox.js +9 -9
- package/dist/input/Listbox.js.map +1 -1
- package/dist/input/Mentions.js +3 -3
- package/dist/input/Mentions.js.map +1 -1
- package/dist/input/NumberField.js +3 -3
- package/dist/input/NumberField.js.map +1 -1
- package/dist/input/NumberRangeField.js +5 -5
- package/dist/input/NumberRangeField.js.map +1 -1
- package/dist/input/OtpField.js +5 -5
- package/dist/input/OtpField.js.map +1 -1
- package/dist/input/PeoplePicker.js +6 -6
- package/dist/input/PeoplePicker.js.map +1 -1
- package/dist/input/PeoplePickerPanel.js +4 -4
- package/dist/input/PeoplePickerPanel.js.map +1 -1
- package/dist/input/Radio.js +4 -4
- package/dist/input/Radio.js.map +1 -1
- package/dist/input/Rating.js +5 -5
- package/dist/input/Rating.js.map +1 -1
- package/dist/input/Select.js +4 -4
- package/dist/input/Select.js.map +1 -1
- package/dist/input/SelectedTags.js +4 -4
- package/dist/input/SelectedTags.js.map +1 -1
- package/dist/input/Slider.js +6 -6
- package/dist/input/Slider.js.map +1 -1
- package/dist/input/Switch.js +3 -3
- package/dist/input/Switch.js.map +1 -1
- package/dist/input/TagsInput.js +5 -5
- package/dist/input/TagsInput.js.map +1 -1
- package/dist/input/TextField.js +5 -5
- package/dist/input/TextField.js.map +1 -1
- package/dist/input/Textarea.js +4 -4
- package/dist/input/Textarea.js.map +1 -1
- package/dist/input/ToggleGroup.js +4 -4
- package/dist/input/ToggleGroup.js.map +1 -1
- package/dist/input/Transfer.js +8 -8
- package/dist/input/Transfer.js.map +1 -1
- package/dist/input/TreeSelect.js +6 -6
- package/dist/input/TreeSelect.js.map +1 -1
- package/dist/input/Upload.js +8 -8
- package/dist/input/Upload.js.map +1 -1
- package/dist/layout/Affix.js +4 -4
- package/dist/layout/Affix.js.map +1 -1
- package/dist/layout/ResizeHandle.d.ts +6 -2
- package/dist/layout/ResizeHandle.js +32 -9
- package/dist/layout/ResizeHandle.js.map +1 -1
- package/dist/layout/ScrollArea.js +3 -3
- package/dist/layout/ScrollArea.js.map +1 -1
- package/dist/layout/Separator.js +3 -3
- package/dist/layout/Separator.js.map +1 -1
- package/dist/layout/Splitter.js +3 -3
- package/dist/layout/Splitter.js.map +1 -1
- package/dist/layout/ViewportFill.d.ts +2 -2
- package/dist/layout/ViewportFill.js +4 -4
- package/dist/layout/ViewportFill.js.map +1 -1
- package/dist/navigation/Breadcrumbs.js +4 -4
- package/dist/navigation/Breadcrumbs.js.map +1 -1
- package/dist/navigation/NavBar.js +6 -6
- package/dist/navigation/NavBar.js.map +1 -1
- package/dist/navigation/NavList.d.ts +1 -0
- package/dist/navigation/NavList.js +20 -12
- package/dist/navigation/NavList.js.map +1 -1
- package/dist/navigation/NavMenu.d.ts +27 -0
- package/dist/navigation/NavMenu.js +54 -0
- package/dist/navigation/NavMenu.js.map +1 -0
- package/dist/navigation/PageJump.js +3 -3
- package/dist/navigation/PageJump.js.map +1 -1
- package/dist/navigation/PageSizeSelect.js +4 -4
- package/dist/navigation/PageSizeSelect.js.map +1 -1
- package/dist/navigation/Pagination.js +6 -6
- package/dist/navigation/Pagination.js.map +1 -1
- package/dist/navigation/PaginationBar.js +5 -5
- package/dist/navigation/PaginationBar.js.map +1 -1
- package/dist/navigation/Steps.js +4 -4
- package/dist/navigation/Steps.js.map +1 -1
- package/dist/navigation/TableOfContents.js +5 -5
- package/dist/navigation/TableOfContents.js.map +1 -1
- package/dist/navigation/Tabs.js +7 -7
- package/dist/navigation/Tabs.js.map +1 -1
- package/dist/navigation/Toolbar.js +3 -3
- package/dist/navigation/Toolbar.js.map +1 -1
- package/dist/overlay/AlertDialog.js +4 -4
- package/dist/overlay/AlertDialog.js.map +1 -1
- package/dist/overlay/CommandPalette.js +4 -4
- package/dist/overlay/CommandPalette.js.map +1 -1
- package/dist/overlay/ContextMenu.js +3 -3
- package/dist/overlay/ContextMenu.js.map +1 -1
- package/dist/overlay/Dialog.js +4 -4
- package/dist/overlay/Dialog.js.map +1 -1
- package/dist/overlay/Drawer.js +5 -5
- package/dist/overlay/Drawer.js.map +1 -1
- package/dist/overlay/HoverCard.js +5 -3
- package/dist/overlay/HoverCard.js.map +1 -1
- package/dist/overlay/Lightbox.js +5 -5
- package/dist/overlay/Lightbox.js.map +1 -1
- package/dist/overlay/Menu.js +7 -7
- package/dist/overlay/Menu.js.map +1 -1
- package/dist/overlay/ModalCore.js +9 -9
- package/dist/overlay/ModalCore.js.map +1 -1
- package/dist/overlay/Popconfirm.js +6 -6
- package/dist/overlay/Popconfirm.js.map +1 -1
- package/dist/overlay/Popover.js +5 -3
- package/dist/overlay/Popover.js.map +1 -1
- package/dist/overlay/Tooltip.js +5 -3
- package/dist/overlay/Tooltip.js.map +1 -1
- package/dist/overlay/Tour.js +8 -8
- package/dist/overlay/Tour.js.map +1 -1
- package/dist/overlay/detached.d.ts +2 -0
- package/dist/overlay/detached.js +73 -42
- package/dist/overlay/detached.js.map +1 -1
- package/dist/patterns/ActionBar.js +3 -3
- package/dist/patterns/ActionBar.js.map +1 -1
- package/dist/patterns/AppShell.d.ts +28 -1
- package/dist/patterns/AppShell.js +158 -52
- package/dist/patterns/AppShell.js.map +1 -1
- package/dist/patterns/AuthLayout.d.ts +28 -0
- package/dist/patterns/AuthLayout.js +77 -0
- package/dist/patterns/AuthLayout.js.map +1 -0
- package/dist/patterns/CommentThread.js +9 -9
- package/dist/patterns/CommentThread.js.map +1 -1
- package/dist/patterns/DataImport.js +4 -4
- package/dist/patterns/DataImport.js.map +1 -1
- package/dist/patterns/DeadlineBadge.js +3 -3
- package/dist/patterns/DeadlineBadge.js.map +1 -1
- package/dist/patterns/FilterBar.d.ts +11 -1
- package/dist/patterns/FilterBar.js +39 -10
- package/dist/patterns/FilterBar.js.map +1 -1
- package/dist/patterns/FormDialog.d.ts +18 -0
- package/dist/patterns/FormDialog.js +46 -0
- package/dist/patterns/FormDialog.js.map +1 -0
- package/dist/patterns/KanbanBoard.js +8 -8
- package/dist/patterns/KanbanBoard.js.map +1 -1
- package/dist/patterns/LayoutSwitcher.d.ts +12 -0
- package/dist/patterns/LayoutSwitcher.js +79 -0
- package/dist/patterns/LayoutSwitcher.js.map +1 -0
- package/dist/patterns/NotificationCenter.js +8 -8
- package/dist/patterns/NotificationCenter.js.map +1 -1
- package/dist/patterns/PageTabs.d.ts +12 -7
- package/dist/patterns/PageTabs.js +41 -29
- package/dist/patterns/PageTabs.js.map +1 -1
- package/dist/patterns/QueryTable.d.ts +7 -1
- package/dist/patterns/QueryTable.js +116 -81
- package/dist/patterns/QueryTable.js.map +1 -1
- package/dist/patterns/SlideCaptcha.d.ts +80 -0
- package/dist/patterns/SlideCaptcha.js +354 -0
- package/dist/patterns/SlideCaptcha.js.map +1 -0
- package/dist/patterns/StepsForm.js +7 -7
- package/dist/patterns/StepsForm.js.map +1 -1
- package/dist/patterns/ThemeSwitcher.js +3 -3
- package/dist/patterns/ThemeSwitcher.js.map +1 -1
- package/dist/patterns/index.d.ts +7 -3
- package/dist/patterns/index.js +5 -1
- package/dist/patterns/messages.d.ts +37 -1
- package/dist/patterns/messages.js +38 -2
- package/dist/patterns/messages.js.map +1 -1
- package/dist/table/ColumnHeaderActions.js +3 -3
- package/dist/table/ColumnHeaderActions.js.map +1 -1
- package/dist/table/ColumnResizer.js +3 -3
- package/dist/table/ColumnResizer.js.map +1 -1
- package/dist/table/ColumnSettings.js +5 -5
- package/dist/table/ColumnSettings.js.map +1 -1
- package/dist/table/ColumnTable.js +8 -8
- package/dist/table/ColumnTable.js.map +1 -1
- package/dist/table/DataTable.js +8 -8
- package/dist/table/DataTable.js.map +1 -1
- package/dist/table/DataTableView.js +21 -21
- package/dist/table/DataTableView.js.map +1 -1
- package/dist/table/PivotTable.js +3 -3
- package/dist/table/PivotTable.js.map +1 -1
- package/dist/table/SelectionBar.js +4 -4
- package/dist/table/SelectionBar.js.map +1 -1
- package/dist/table/TreeDataTable.js +5 -5
- package/dist/table/TreeDataTable.js.map +1 -1
- package/dist/theme-customize/ThemeCustomizer.js +7 -6
- package/dist/theme-customize/ThemeCustomizer.js.map +1 -1
- package/dist/theme-customize/ThemeThumbnail.js +3 -3
- package/dist/theme-customize/ThemeThumbnail.js.map +1 -1
- package/dist/three/background/AuroraBackground.js +3 -3
- package/dist/three/background/AuroraBackground.js.map +1 -1
- package/dist/three/background/MeshGradient.js +3 -3
- package/dist/three/background/MeshGradient.js.map +1 -1
- package/dist/three/background/ShaderBackground.js +3 -3
- package/dist/three/background/ShaderBackground.js.map +1 -1
- package/dist/three/core/EffectSurface.js +3 -3
- package/dist/three/core/EffectSurface.js.map +1 -1
- package/dist/three/core/ThreeCanvas.js +4 -4
- package/dist/three/core/ThreeCanvas.js.map +1 -1
- package/dist/three/effects/Confetti.js +3 -3
- package/dist/three/effects/Confetti.js.map +1 -1
- package/dist/three/effects/ParticleField.js +3 -3
- package/dist/three/effects/ParticleField.js.map +1 -1
- package/dist/three/effects/WaveGrid.js +3 -3
- package/dist/three/effects/WaveGrid.js.map +1 -1
- package/dist/three/globe/Globe.js +3 -3
- package/dist/three/globe/Globe.js.map +1 -1
- package/dist/three/model/ModelViewer.js +3 -3
- package/dist/three/model/ModelViewer.js.map +1 -1
- package/dist/utils/data/number.d.ts +5 -0
- package/dist/utils/data/number.js +8 -1
- package/dist/utils/data/number.js.map +1 -1
- package/dist/utils/dom/element.d.ts +3 -1
- package/dist/utils/dom/element.js +8 -4
- package/dist/utils/dom/element.js.map +1 -1
- package/dist/utils/dom/fullscreen.d.ts +1 -1
- package/dist/utils/dom/fullscreen.js +12 -8
- package/dist/utils/dom/fullscreen.js.map +1 -1
- package/dist/utils/dom/mounted.d.ts +7 -0
- package/dist/utils/dom/mounted.js +16 -0
- package/dist/utils/dom/mounted.js.map +1 -0
- package/dist/utils/dom/overflow.js +2 -1
- package/dist/utils/dom/overflow.js.map +1 -1
- package/dist/utils/dom/pan-zoom.js +2 -1
- package/dist/utils/dom/pan-zoom.js.map +1 -1
- package/dist/utils/props.js +3 -13
- package/dist/utils/props.js.map +1 -1
- package/dist/utils/request/http.d.ts +12 -0
- package/dist/utils/request/http.js +6 -2
- package/dist/utils/request/http.js.map +1 -1
- package/dist/utils/request/use-request.js +4 -2
- package/dist/utils/request/use-request.js.map +1 -1
- package/package.json +2 -2
package/dist/table/DataTable.js
CHANGED
|
@@ -15,8 +15,8 @@ import { NumberField } from "../input/NumberField.js";
|
|
|
15
15
|
import { TextField } from "../input/TextField.js";
|
|
16
16
|
import { Select } from "../input/Select.js";
|
|
17
17
|
import { DataTableView, rowLabel } from "./DataTableView.js";
|
|
18
|
-
import { Fragment, computed, createVNode,
|
|
19
|
-
import { _component, bindable, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
18
|
+
import { Fragment, computed, createVNode, nextTick, ref, useId } from "vue";
|
|
19
|
+
import { _component, bindable, mergeJsxProps, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
20
20
|
import { GripVertical } from "@lucide/icons";
|
|
21
21
|
//#region src/table/DataTable.tsx
|
|
22
22
|
/**
|
|
@@ -245,7 +245,7 @@ var DataTable = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
|
245
245
|
"aria-label": label,
|
|
246
246
|
propsRoot: s.value.editorControl
|
|
247
247
|
};
|
|
248
|
-
const editor = column.editor ? column.editor(context) : column.statuses ? createVNode(Select,
|
|
248
|
+
const editor = column.editor ? column.editor(context) : column.statuses ? createVNode(Select, mergeJsxProps(common, {
|
|
249
249
|
"items": column.statuses.options(),
|
|
250
250
|
"_value": typeof current.draft === "string" ? current.draft : null,
|
|
251
251
|
"onUpdate:_value": (value) => {
|
|
@@ -259,17 +259,17 @@ var DataTable = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
|
259
259
|
"number",
|
|
260
260
|
"currency",
|
|
261
261
|
"percent"
|
|
262
|
-
].includes(columnType(column, rows.value)) ? createVNode(NumberField,
|
|
262
|
+
].includes(columnType(column, rows.value)) ? createVNode(NumberField, mergeJsxProps(common, {
|
|
263
263
|
"stepper": false,
|
|
264
264
|
"_value": typeof current.draft === "number" ? current.draft : null,
|
|
265
265
|
"onUpdate:_value": context.onChange
|
|
266
|
-
}), null) : createVNode(TextField,
|
|
266
|
+
}), null) : createVNode(TextField, mergeJsxProps(common, {
|
|
267
267
|
"_value": typeof current.draft === "string" || typeof current.draft === "number" ? String(current.draft) : "",
|
|
268
268
|
"onUpdate:_value": context.onChange
|
|
269
269
|
}), null);
|
|
270
|
-
return createVNode("div",
|
|
270
|
+
return createVNode("div", mergeJsxProps(mergeAttrs(s.value.editor), { "onFocusout": _cache[0] || (_cache[0] = (event) => {
|
|
271
271
|
if (!event.currentTarget.closest("td")?.contains(event.relatedTarget)) commitEdit();
|
|
272
|
-
}) }), [editor, current.error && createVNode("div",
|
|
272
|
+
}) }), [editor, current.error && createVNode("div", mergeJsxProps({ "role": "alert" }, mergeAttrs(s.value.editorError)), [current.error])]);
|
|
273
273
|
}
|
|
274
274
|
/**
|
|
275
275
|
* 能拖动时行的属性:使用方的 propsRow 加上拖动要的属性。在 setup 里建一次(函数不变,行的 memo 才有效);
|
|
@@ -281,7 +281,7 @@ var DataTable = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
|
281
281
|
});
|
|
282
282
|
/** 第一个数据列前面:拖动的把手,再是使用方的 leading */
|
|
283
283
|
function renderLeading(row, index) {
|
|
284
|
-
return createVNode(Fragment, null, [createVNode(ButtonBase,
|
|
284
|
+
return createVNode(Fragment, null, [createVNode(ButtonBase, mergeJsxProps(s.value.rowHandle, {
|
|
285
285
|
"ripple": false,
|
|
286
286
|
"aria-label": lang.sortableHandle(rowLabel(columns.value, row))
|
|
287
287
|
}, sortable.handleProps(row.key)), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","names":["_vtp_readonlyProp","_vtp_bindable","_vtp_restProps","_vue_computed","_vue_ref","_createVNode","_mergeProps","_Fragment"],"sources":["../../src/table/DataTable.tsx"],"sourcesContent":["/**\n * 数据表格:按列定义渲染一组行,始终虚拟滚动(十万行也只渲染看得见的几十行)。渲染层见 DataTableView。\n *\n * <DataTable\n * rows={orders}\n * columns={columns}\n * getKey={(order) => order.id}\n * _sort={sort}\n * selectionMode=\"multiple\"\n * _selected={picked}\n * loading={loading}\n * aria-label=\"订单\"\n * propsRoot={{ sx: styles.tableHeight }}\n * />\n *\n * - 高度:外层滚动区域默认最高 32em,用 propsRoot 的 sx 改;表头吸顶、固定列不随横向滚动。\n * - 排序:点可排序的列标题在 升序 → 降序 → 不排 之间切换;默认在本地排(createComparer:数字、日期、按语言的文字),\n * manualSort 时只写回 sort,由调用方向服务端要排好序的数据。multiSort 时排序写在 sorts(几列),按住 Shift 点是追加一列。\n * - 表头筛选:列写 filter 时列标题上有筛选按钮,filters 是各列选中的值(可以双向绑定);默认在本地筛,manualFilter 时只写回。\n * - 编辑:列写 editable 时可以就地编辑(Enter / F2、双击或直接打字开始,Enter 提交、Tab 提交并到下一格、Esc 放弃),\n * 列的 validate 与 validateRow 校验,onCellChange 写回;表格随之变成网格,方向键在格之间走(cellNavigation)。\n * - 行拖动:给了 onReorder 时第一个数据列前面有把手,拖动(或聚焦后空格拿起、↑↓ 移动)改变行的顺序;\n * 排序、筛选时显示的顺序不是数据的顺序,这时不能拖。\n * - 列菜单:columnMenu 时列标题结尾有 ⋮(排序、固定在开头 / 结尾、前后移动、隐藏),\n * 写回 columnPins、columnOrder、hiddenColumns(都可以双向绑定,存起来记住各人的列设置)。\n * - 选择:selectionMode 为 single / multiple 时多一列勾选框,selected 是已选行的 key。\n * - 列宽:resizable 时可以拖动或用键盘调整,columnWidths 记录调整后的宽度(可以双向绑定,保存到本地设置里)。\n * - 定位:handle 拿到 scrollToRow(key),滚到那一行(停在吸顶表头之下)。\n * - 加载:loading 时没有数据显示骨架行,已有数据显示进度条;接近末尾加载更多用 onRangeChange。\n * - 详情行:renderDetail 给出一行的详情,多一列展开按钮;expandedRows 是展开了的行(可以双向绑定),hasDetail 决定哪些行有。\n * - 分组表头:columnGroups 写组标题与组里各列的 key,相邻的列上方共用一个标题。\n * - 合计:列写 summary('sum' 精确相加,或函数)时底部多一行吸底的合计;空值显示列的 empty(默认 —)。\n * - 状态列:列写 statuses(createStatusMap)时显示成 StatusBadge;rowTone 给整行着色(导入校验的错误行)。\n * - 工具栏(查询条件用 FilterBar、批量操作用 SelectionBar、分页用 PaginationBar)组合在外面,不内置。\n */\nimport { GripVertical } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { nextTick, useId, type VNodeChild } from 'vue';\nimport { ButtonBase } from '../base/ButtonBase';\nimport { Icon } from '../base/Icon';\nimport { VisuallyHidden } from '../base/VisuallyHidden';\nimport { NumberField } from '../input/NumberField';\nimport { Select } from '../input/Select';\nimport { TextField } from '../input/TextField';\nimport { plainText } from '../utils/data/text';\nimport { useLang } from '../config/context';\nimport { focusFirst } from '../utils/dom/focus';\nimport { useSortable } from '../utils/dom/sortable';\nimport { useDefaults } from '../config/defaults';\nimport { useRecipe } from '../config/styles';\nimport { mergeAttrs, mergePartProps } from '../utils/props';\nimport { toggleSelection } from '../utils/data/selection';\nimport {\n sortList,\n arrangeColumns,\n columnFilter,\n columnType,\n columnValue,\n isCellEditable,\n filterOptions,\n filterRows,\n nextSort,\n nextSorts,\n sortRows,\n type CellEditorContext,\n type ColumnFilterOption,\n type ColumnStickies,\n type DataTableColumn,\n type SortState,\n} from './columns';\nimport type { ColumnMenuActions } from './ColumnHeaderActions';\nimport {\n DataTableView,\n rowLabel,\n type CellPosition,\n type DataTableRowModel,\n type DataTableViewProps,\n} from './DataTableView';\nimport { dataTableRecipe, dataTableStateStyles } from './table-styles';\n\n/** 未声明的属性落到 table 上;aria-label 或 aria-labelledby 是表格的名称 */\nexport interface DataTableProps<T> extends Omit<\n DataTableViewProps<T>,\n | 'rows'\n | 'sort'\n | 'onSortClick'\n | 'selectedKeys'\n | 'onToggleRow'\n | 'onToggleAll'\n | 'widths'\n | 'onResize'\n | 'expandedRows'\n | 'onToggleDetail'\n | 'filters'\n | 'onFilterChange'\n | 'filterOptionsOf'\n | 'onColumnAction'\n | 'hiddenColumns'\n> {\n /** 数据 */\n rows: readonly T[];\n /** 行的 key:稳定且唯一(选择、测量都按它) */\n getKey: (row: T, index: number) => string;\n /** 当前排序:父级可以写 _sort={x};null 为不排序 */\n _sort?: SortState | null;\n /** 不在本地排序:只写回 sort(sorts),数据由调用方按它取 */\n manualSort?: boolean;\n /** 多列排序:排序写在 sorts,按住 Shift 点列标题是追加一列(再点切换方向、降序时去掉) */\n multiSort?: boolean;\n /** 多列排序时的排序,前面的优先:父级可以写 _sorts={x} */\n _sorts?: SortState[];\n /** 表头筛选:各列选中的值(关键字筛选时是 [关键字]),父级可以写 _filters={x} */\n _filters?: Record<string, string[]>;\n /** 不在本地筛选:只写回 filters,数据由调用方按它取 */\n manualFilter?: boolean;\n /** 隐藏的列的 key:列菜单的“隐藏”写回这里,父级可以写 _hiddenColumns={x} */\n _hiddenColumns?: string[];\n /** 列的顺序(列的 key):列菜单、列设置里移动后写回,没列到的按定义的顺序排在后面 */\n _columnOrder?: string[];\n /** 固定的列:key → start / end(null 取消列定义里的固定),列菜单写回 */\n _columnPins?: Record<string, keyof ColumnStickies | null>;\n /** 行拖动:给了它时每行前面有把手,拖完得到新的顺序(排序、筛选时不能拖) */\n onReorder?: (rows: T[]) => void;\n /**\n * 编辑了一格(列写了 editable):写回数据。返回文字(或 resolve 成文字)是不接受的原因,编辑器留着并显示它;\n * 返回 Promise 时等它完成\n */\n onCellChange?: (row: T, key: string, value: unknown) => unknown;\n /** 行校验:返回各列的错误(列的 key → 原因),标在格上;如“结束日期早于开始日期” */\n validateRow?: (row: T) => Readonly<Record<string, string>> | null | undefined;\n /** 已选行的 key:父级写 _selected={keys} */\n _selected?: string[];\n /** 各列调整后的宽度(px):父级可以写 _columnWidths={x} 保存起来 */\n _columnWidths?: Record<string, number>;\n /** 展开了详情的行的 key(有 renderDetail 时):父级可以写 _expandedRows={x} */\n _expandedRows?: string[];\n}\n\n/** 数据表格:虚拟滚动、排序、勾选、列宽调整、加载与空状态 */\nexport const DataTable = _component(\n <T,>({\n rows,\n getKey,\n columns,\n _sort: sort = _bindable<SortState | null>(null),\n manualSort = false,\n multiSort = false,\n _sorts: sorts = _bindable<SortState[]>([]),\n _filters: filters = _bindable<Record<string, string[]>>({}),\n manualFilter = false,\n _hiddenColumns: hiddenColumns = _bindable<string[]>([]),\n _columnOrder: columnOrder = _bindable<string[]>([]),\n _columnPins: columnPins = _bindable<Record<string, keyof ColumnStickies | null>>({}),\n onReorder,\n onCellChange,\n validateRow,\n cellNavigation,\n leading,\n propsRow,\n selectionMode,\n _selected: selected = _bindable<string[]>([]),\n _columnWidths: columnWidths = _bindable<Record<string, number>>({}),\n _expandedRows: expandedRows = _bindable<string[]>([]),\n isRowSelectable,\n density,\n variant,\n striped,\n ...rest\n }: DataTableProps<T>) => {\n const lang = useLang();\n const appearance = useDefaults('DataTable', () => ({ density, variant, striped }), {\n density: 'standard',\n variant: 'surface',\n striped: false,\n });\n const recipe = useRecipe(dataTableRecipe);\n // 编辑器、拖动把手的部件层:与 DataTableView 的表头、表尾取同一组档位\n const s = _derived.by(() => {\n const { density: shownDensity, variant: shownVariant } = appearance();\n return recipe({ density: shownDensity, variant: shownVariant });\n });\n\n const activeSort = () => (multiSort ? sorts : sort);\n const models = _derived.by<DataTableRowModel<T>[]>(() => {\n const kept = manualFilter ? rows : filterRows(rows, columns, filters, lang.code);\n const ordered = manualSort ? kept : sortRows(kept, columns, activeSort(), lang.code);\n return ordered.map((row, index) => ({ key: getKey(row, index), data: row, depth: 0 }));\n });\n // 筛选的选项要看全部行(不是筛过的):行与列不变时不重算\n const options = _derived.by(\n () =>\n new Map(\n columns\n .filter((column) => columnFilter(column))\n .map((column) => [column.key, filterOptions(column, rows, lang.code)]),\n ),\n );\n const arranged = _derived(arrangeColumns(columns, columnOrder, columnPins));\n\n // 行拖动:排序、筛选时显示的顺序不是数据的顺序,不能拖\n const tableMarker = useId();\n const tableElement = () =>\n document.querySelector<HTMLElement>(`table[data-table=\"${tableMarker}\"]`);\n const reorderable = () =>\n !!onReorder &&\n sortList(activeSort()).length === 0 &&\n !Object.values(filters).some((values) => values.length > 0);\n const sortable = useSortable<DataTableRowModel<T>>({\n items: () => models,\n getKey: (row) => row.key,\n getLabel: (row) => rowLabel(columns, row),\n onChange: (next) => onReorder?.(next.map((row) => row.data)),\n container: () => tableElement(),\n disabled: () => !reorderable(),\n });\n\n // 编辑中的格:草稿、校验没过的原因、正在保存\n let editing = _state<\n (CellPosition & { draft: unknown; error?: string; saving?: boolean }) | null\n >(null);\n const columnOf = (key: string) => columns.find((column) => column.key === key);\n const rowOf = (key: string) => models.find((row) => row.key === key);\n\n const cellElement = (cell: CellPosition) =>\n tableElement()?.querySelector<HTMLElement>(\n `tr[data-key=\"${CSS.escape(cell.row)}\"] td[data-column=\"${CSS.escape(cell.column)}\"]`,\n );\n\n /** 编辑完、放弃后焦点回到格上(网格里键盘接着走) */\n function focusCell(cell: CellPosition) {\n void nextTick(() => cellElement(cell)?.focus());\n }\n\n function startEdit(cell: CellPosition, text?: string) {\n const row = rowOf(cell.row);\n const column = columnOf(cell.column);\n if (!row || !column || !isCellEditable(column, row.data)) return;\n const numeric = ['number', 'currency', 'percent'].includes(columnType(column, rows));\n // 直接打字:用打的字替换原值(数字列只认数字)\n const typed = text === undefined ? undefined : numeric ? Number(text) : text;\n const draft =\n typed === undefined || Number.isNaN(typed) ? columnValue(column, row.data) : typed;\n editing = { ...cell, draft };\n // 编辑器渲染出来后焦点移进去(autofocus 对后插入的元素不可靠,日期这类分段输入也没有 autofocus)\n void nextTick(() => {\n const element = cellElement(cell);\n if (element) focusFirst(element);\n });\n }\n\n function cancelEdit() {\n if (!editing) return;\n const cell = { row: editing.row, column: editing.column };\n editing = null;\n focusCell(cell);\n }\n\n /** 提交:列的 validate、onCellChange 都接受了才收起;step 是提交后去哪一格(Tab 往后、Shift + Tab 往前) */\n async function commitEdit(step: 0 | 1 | -1 = 0) {\n const current = editing;\n const row = current && rowOf(current.row);\n const column = current && columnOf(current.column);\n if (!current || !row || !column || current.saving) return;\n const invalid = column.validate?.(current.draft, row.data);\n if (invalid) {\n editing = { ...current, error: invalid };\n return;\n }\n editing = { ...current, saving: true };\n const result = await onCellChange?.(row.data, column.key, current.draft);\n if (typeof result === 'string' && result) {\n editing = { ...current, error: result, saving: false };\n return;\n }\n editing = null;\n const next = step === 0 ? undefined : neighbourEditable(current, step);\n if (next) startEdit(next);\n else focusCell(current);\n }\n\n /** 这一行里往后(往前)的下一个可编辑的格 */\n function neighbourEditable(cell: CellPosition, step: 1 | -1): CellPosition | undefined {\n const row = rowOf(cell.row);\n if (!row) return undefined;\n const hidden = new Set(hiddenColumns);\n const visible = arranged.filter((column) => !hidden.has(column.key));\n const from = visible.findIndex((column) => column.key === cell.column);\n for (let index = from + step; index >= 0 && index < visible.length; index += step) {\n const column = visible[index]!;\n if (isCellEditable(column, row.data)) return { row: cell.row, column: column.key };\n }\n return undefined;\n }\n\n function onEditKeydown(event: KeyboardEvent) {\n // 编辑器自己处理了的键(下拉框的 Enter 打开列表)不再当作提交\n if (event.defaultPrevented) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n cancelEdit();\n } else if (event.key === 'Enter') {\n event.preventDefault();\n void commitEdit();\n } else if (event.key === 'Tab') {\n event.preventDefault();\n void commitEdit(event.shiftKey ? -1 : 1);\n }\n }\n\n /** 正在编辑的格里的编辑器:列的 editor,或按列选的默认编辑器 */\n function renderEditor(row: T, column: DataTableColumn<T>): VNodeChild {\n const current = editing!;\n const context: CellEditorContext<T> = {\n row,\n value: current.draft,\n onChange: (value) => (editing = { ...current, draft: value, error: undefined }),\n commit: () => void commitEdit(),\n cancel: cancelEdit,\n error: current.error,\n };\n const label = plainText(column.header) ?? column.key;\n const common = {\n size: 'sm',\n invalid: !!current.error,\n 'aria-label': label,\n // 编辑器占满格子\n propsRoot: s.editorControl,\n } as const;\n const editor = column.editor ? (\n column.editor(context)\n ) : column.statuses ? (\n // 状态:选了就提交\n <Select\n {...common}\n items={column.statuses.options()}\n _value={typeof current.draft === 'string' ? current.draft : null}\n onUpdate:_value={(value: string | null) => {\n editing = { ...current, draft: value };\n void commitEdit();\n }}\n />\n ) : ['number', 'currency', 'percent'].includes(columnType(column, rows)) ? (\n <NumberField\n {...common}\n stepper={false}\n _value={typeof current.draft === 'number' ? current.draft : null}\n onUpdate:_value={context.onChange}\n />\n ) : (\n <TextField\n {...common}\n _value={\n typeof current.draft === 'string' || typeof current.draft === 'number'\n ? String(current.draft)\n : ''\n }\n onUpdate:_value={context.onChange}\n />\n );\n return (\n <div\n {...mergeAttrs<'div'>(s.editor)}\n // 焦点离开这一格(点了别处):提交\n onFocusout={(event: FocusEvent) => {\n const cell = (event.currentTarget as HTMLElement).closest('td');\n if (!cell?.contains(event.relatedTarget as Node | null)) void commitEdit();\n }}\n >\n {editor}\n {current.error && (\n <div role=\"alert\" {...mergeAttrs<'div'>(s.editorError)}>\n {current.error}\n </div>\n )}\n </div>\n );\n }\n\n /**\n * 能拖动时行的属性:使用方的 propsRow 加上拖动要的属性。在 setup 里建一次(函数不变,行的 memo 才有效);\n * 里面读的拖动状态由各行的渲染跟踪,被拖的行照样更新\n */\n const rowPropsWithHandle = (row: T, index: number) =>\n mergeAttrs<'tr'>({}, typeof propsRow === 'function' ? propsRow(row, index) : propsRow, {\n ...sortable.itemProps(models[index]!.key),\n sx: sortable.active === models[index]!.key ? dataTableStateStyles.rowDragging : undefined,\n });\n\n /** 第一个数据列前面:拖动的把手,再是使用方的 leading */\n function renderLeading(row: DataTableRowModel<T>, index: number) {\n return (\n <>\n <ButtonBase\n {...s.rowHandle}\n ripple={false}\n aria-label={lang.sortableHandle(rowLabel(columns, row))}\n {...sortable.handleProps(row.key)}\n >\n <Icon icon={GripVertical} />\n </ButtonBase>\n {leading?.(row, index)}\n </>\n );\n }\n\n function onSortClick(key: string, event: MouseEvent) {\n if (multiSort) sorts = nextSorts(sorts, key, event.shiftKey);\n else sort = nextSort(sort, key);\n }\n\n function setSort(key: string, direction: SortState['direction'] | null) {\n if (multiSort) {\n const rest = sorts.filter((item) => item.key !== key);\n sorts = direction ? [{ key, direction }, ...rest] : rest;\n } else sort = direction ? { key, direction } : null;\n }\n\n /** 往前、往后移一列:与相邻的可见列交换位置 */\n function move(key: string, step: 1 | -1) {\n const hidden = new Set(hiddenColumns);\n const keys = arranged.map((column) => column.key);\n const visible = keys.filter((item) => !hidden.has(item));\n const neighbour = visible[visible.indexOf(key) + step];\n if (!neighbour) return;\n const [from, to] = [keys.indexOf(key), keys.indexOf(neighbour)];\n [keys[from], keys[to]] = [neighbour, key];\n columnOrder = keys;\n }\n\n function onColumnAction(key: string, action: keyof ColumnMenuActions, width: number) {\n if (action === 'sortAscending') setSort(key, 'ascending');\n else if (action === 'sortDescending') setSort(key, 'descending');\n else if (action === 'unsort') setSort(key, null);\n else if (action === 'moveBackward') move(key, -1);\n else if (action === 'moveForward') move(key, 1);\n else if (action === 'hide') hiddenColumns = [...hiddenColumns, key];\n else {\n const side = action === 'pinStart' ? 'start' : action === 'pinEnd' ? 'end' : null;\n columnPins = { ...columnPins, [key]: side };\n // 固定列的偏移按列宽累加:没写宽度的列记下它现在的宽度\n const column = columns.find((item) => item.key === key);\n if (side && column?.width == null && columnWidths[key] == null && width > 0)\n columnWidths = { ...columnWidths, [key]: width };\n }\n }\n\n function toggleRow(key: string) {\n selected = [...toggleSelection(selected, key, { mode: selectionMode ?? 'multiple' })];\n }\n\n // 用集合查找:逐个 includes 是 O(n²),十万行全选会卡住页面;不能勾选的行跳过\n function toggleAll() {\n const keys = (\n isRowSelectable ? models.filter((row) => isRowSelectable(row.data)) : models\n ).map((row) => row.key);\n const current = new Set(selected);\n const all = keys.length > 0 && keys.every((key) => current.has(key));\n if (!all) {\n selected = [...new Set([...selected, ...keys])];\n return;\n }\n const visible = new Set(keys);\n selected = selected.filter((key) => !visible.has(key));\n }\n\n function toggleDetail(key: string) {\n expandedRows = [...toggleSelection(expandedRows, key, { mode: 'multiple' })];\n }\n\n return () => (\n <>\n <DataTableView\n {...mergePartProps<DataTableViewProps<T>>(\n {\n rows: models,\n columns: arranged,\n widths: columnWidths,\n ...appearance(),\n },\n rest as Partial<DataTableViewProps<T>>,\n {\n rows: models,\n columns: arranged,\n sort: activeSort(),\n onSortClick,\n filters,\n onFilterChange: (key: string, values: string[]) =>\n (filters = { ...filters, [key]: values }),\n filterOptionsOf: (column) => options.get(column.key) ?? ([] as ColumnFilterOption[]),\n hiddenColumns,\n onColumnAction,\n leading: reorderable() ? renderLeading : leading,\n // 不拖动时原样交给行:每次新建的函数会让各行的 memo 失效,勾选一行全部重渲染\n propsRow: reorderable() ? rowPropsWithHandle : propsRow,\n ...({ 'data-table': tableMarker } as Partial<DataTableViewProps<T>>),\n cellNavigation: cellNavigation ?? columns.some((column) => column.editable),\n editing: editing && { row: editing.row, column: editing.column },\n renderEditor,\n rowErrors: validateRow,\n onEditStart: startEdit,\n onEditKeydown,\n selectionMode,\n isRowSelectable,\n selectedKeys: selected,\n onToggleRow: toggleRow,\n onToggleAll: toggleAll,\n widths: columnWidths,\n onResize: (key: string, width: number) =>\n (columnWidths = { ...columnWidths, [key]: width }),\n expandedRows,\n onToggleDetail: toggleDetail,\n },\n )}\n />\n {onReorder && (\n <>\n <VisuallyHidden id={sortable.instructionsId}>\n {lang.sortableInstructions}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{sortable.announcement}</VisuallyHidden>\n </>\n )}\n </>\n );\n },\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataTable.js","names":["_vtp_readonlyProp","_vtp_bindable","_vtp_restProps","_vue_computed","_vue_ref","_createVNode","_mergeProps","_Fragment"],"sources":["../../src/table/DataTable.tsx"],"sourcesContent":["/**\n * 数据表格:按列定义渲染一组行,始终虚拟滚动(十万行也只渲染看得见的几十行)。渲染层见 DataTableView。\n *\n * <DataTable\n * rows={orders}\n * columns={columns}\n * getKey={(order) => order.id}\n * _sort={sort}\n * selectionMode=\"multiple\"\n * _selected={picked}\n * loading={loading}\n * aria-label=\"订单\"\n * propsRoot={{ sx: styles.tableHeight }}\n * />\n *\n * - 高度:外层滚动区域默认最高 32em,用 propsRoot 的 sx 改;表头吸顶、固定列不随横向滚动。\n * - 排序:点可排序的列标题在 升序 → 降序 → 不排 之间切换;默认在本地排(createComparer:数字、日期、按语言的文字),\n * manualSort 时只写回 sort,由调用方向服务端要排好序的数据。multiSort 时排序写在 sorts(几列),按住 Shift 点是追加一列。\n * - 表头筛选:列写 filter 时列标题上有筛选按钮,filters 是各列选中的值(可以双向绑定);默认在本地筛,manualFilter 时只写回。\n * - 编辑:列写 editable 时可以就地编辑(Enter / F2、双击或直接打字开始,Enter 提交、Tab 提交并到下一格、Esc 放弃),\n * 列的 validate 与 validateRow 校验,onCellChange 写回;表格随之变成网格,方向键在格之间走(cellNavigation)。\n * - 行拖动:给了 onReorder 时第一个数据列前面有把手,拖动(或聚焦后空格拿起、↑↓ 移动)改变行的顺序;\n * 排序、筛选时显示的顺序不是数据的顺序,这时不能拖。\n * - 列菜单:columnMenu 时列标题结尾有 ⋮(排序、固定在开头 / 结尾、前后移动、隐藏),\n * 写回 columnPins、columnOrder、hiddenColumns(都可以双向绑定,存起来记住各人的列设置)。\n * - 选择:selectionMode 为 single / multiple 时多一列勾选框,selected 是已选行的 key。\n * - 列宽:resizable 时可以拖动或用键盘调整,columnWidths 记录调整后的宽度(可以双向绑定,保存到本地设置里)。\n * - 定位:handle 拿到 scrollToRow(key),滚到那一行(停在吸顶表头之下)。\n * - 加载:loading 时没有数据显示骨架行,已有数据显示进度条;接近末尾加载更多用 onRangeChange。\n * - 详情行:renderDetail 给出一行的详情,多一列展开按钮;expandedRows 是展开了的行(可以双向绑定),hasDetail 决定哪些行有。\n * - 分组表头:columnGroups 写组标题与组里各列的 key,相邻的列上方共用一个标题。\n * - 合计:列写 summary('sum' 精确相加,或函数)时底部多一行吸底的合计;空值显示列的 empty(默认 —)。\n * - 状态列:列写 statuses(createStatusMap)时显示成 StatusBadge;rowTone 给整行着色(导入校验的错误行)。\n * - 工具栏(查询条件用 FilterBar、批量操作用 SelectionBar、分页用 PaginationBar)组合在外面,不内置。\n */\nimport { GripVertical } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { nextTick, useId, type VNodeChild } from 'vue';\nimport { ButtonBase } from '../base/ButtonBase';\nimport { Icon } from '../base/Icon';\nimport { VisuallyHidden } from '../base/VisuallyHidden';\nimport { NumberField } from '../input/NumberField';\nimport { Select } from '../input/Select';\nimport { TextField } from '../input/TextField';\nimport { plainText } from '../utils/data/text';\nimport { useLang } from '../config/context';\nimport { focusFirst } from '../utils/dom/focus';\nimport { useSortable } from '../utils/dom/sortable';\nimport { useDefaults } from '../config/defaults';\nimport { useRecipe } from '../config/styles';\nimport { mergeAttrs, mergePartProps } from '../utils/props';\nimport { toggleSelection } from '../utils/data/selection';\nimport {\n sortList,\n arrangeColumns,\n columnFilter,\n columnType,\n columnValue,\n isCellEditable,\n filterOptions,\n filterRows,\n nextSort,\n nextSorts,\n sortRows,\n type CellEditorContext,\n type ColumnFilterOption,\n type ColumnStickies,\n type DataTableColumn,\n type SortState,\n} from './columns';\nimport type { ColumnMenuActions } from './ColumnHeaderActions';\nimport {\n DataTableView,\n rowLabel,\n type CellPosition,\n type DataTableRowModel,\n type DataTableViewProps,\n} from './DataTableView';\nimport { dataTableRecipe, dataTableStateStyles } from './table-styles';\n\n/** 未声明的属性落到 table 上;aria-label 或 aria-labelledby 是表格的名称 */\nexport interface DataTableProps<T> extends Omit<\n DataTableViewProps<T>,\n | 'rows'\n | 'sort'\n | 'onSortClick'\n | 'selectedKeys'\n | 'onToggleRow'\n | 'onToggleAll'\n | 'widths'\n | 'onResize'\n | 'expandedRows'\n | 'onToggleDetail'\n | 'filters'\n | 'onFilterChange'\n | 'filterOptionsOf'\n | 'onColumnAction'\n | 'hiddenColumns'\n> {\n /** 数据 */\n rows: readonly T[];\n /** 行的 key:稳定且唯一(选择、测量都按它) */\n getKey: (row: T, index: number) => string;\n /** 当前排序:父级可以写 _sort={x};null 为不排序 */\n _sort?: SortState | null;\n /** 不在本地排序:只写回 sort(sorts),数据由调用方按它取 */\n manualSort?: boolean;\n /** 多列排序:排序写在 sorts,按住 Shift 点列标题是追加一列(再点切换方向、降序时去掉) */\n multiSort?: boolean;\n /** 多列排序时的排序,前面的优先:父级可以写 _sorts={x} */\n _sorts?: SortState[];\n /** 表头筛选:各列选中的值(关键字筛选时是 [关键字]),父级可以写 _filters={x} */\n _filters?: Record<string, string[]>;\n /** 不在本地筛选:只写回 filters,数据由调用方按它取 */\n manualFilter?: boolean;\n /** 隐藏的列的 key:列菜单的“隐藏”写回这里,父级可以写 _hiddenColumns={x} */\n _hiddenColumns?: string[];\n /** 列的顺序(列的 key):列菜单、列设置里移动后写回,没列到的按定义的顺序排在后面 */\n _columnOrder?: string[];\n /** 固定的列:key → start / end(null 取消列定义里的固定),列菜单写回 */\n _columnPins?: Record<string, keyof ColumnStickies | null>;\n /** 行拖动:给了它时每行前面有把手,拖完得到新的顺序(排序、筛选时不能拖) */\n onReorder?: (rows: T[]) => void;\n /**\n * 编辑了一格(列写了 editable):写回数据。返回文字(或 resolve 成文字)是不接受的原因,编辑器留着并显示它;\n * 返回 Promise 时等它完成\n */\n onCellChange?: (row: T, key: string, value: unknown) => unknown;\n /** 行校验:返回各列的错误(列的 key → 原因),标在格上;如“结束日期早于开始日期” */\n validateRow?: (row: T) => Readonly<Record<string, string>> | null | undefined;\n /** 已选行的 key:父级写 _selected={keys} */\n _selected?: string[];\n /** 各列调整后的宽度(px):父级可以写 _columnWidths={x} 保存起来 */\n _columnWidths?: Record<string, number>;\n /** 展开了详情的行的 key(有 renderDetail 时):父级可以写 _expandedRows={x} */\n _expandedRows?: string[];\n}\n\n/** 数据表格:虚拟滚动、排序、勾选、列宽调整、加载与空状态 */\nexport const DataTable = _component(\n <T,>({\n rows,\n getKey,\n columns,\n _sort: sort = _bindable<SortState | null>(null),\n manualSort = false,\n multiSort = false,\n _sorts: sorts = _bindable<SortState[]>([]),\n _filters: filters = _bindable<Record<string, string[]>>({}),\n manualFilter = false,\n _hiddenColumns: hiddenColumns = _bindable<string[]>([]),\n _columnOrder: columnOrder = _bindable<string[]>([]),\n _columnPins: columnPins = _bindable<Record<string, keyof ColumnStickies | null>>({}),\n onReorder,\n onCellChange,\n validateRow,\n cellNavigation,\n leading,\n propsRow,\n selectionMode,\n _selected: selected = _bindable<string[]>([]),\n _columnWidths: columnWidths = _bindable<Record<string, number>>({}),\n _expandedRows: expandedRows = _bindable<string[]>([]),\n isRowSelectable,\n density,\n variant,\n striped,\n ...rest\n }: DataTableProps<T>) => {\n const lang = useLang();\n const appearance = useDefaults('DataTable', () => ({ density, variant, striped }), {\n density: 'standard',\n variant: 'surface',\n striped: false,\n });\n const recipe = useRecipe(dataTableRecipe);\n // 编辑器、拖动把手的部件层:与 DataTableView 的表头、表尾取同一组档位\n const s = _derived.by(() => {\n const { density: shownDensity, variant: shownVariant } = appearance();\n return recipe({ density: shownDensity, variant: shownVariant });\n });\n\n const activeSort = () => (multiSort ? sorts : sort);\n const models = _derived.by<DataTableRowModel<T>[]>(() => {\n const kept = manualFilter ? rows : filterRows(rows, columns, filters, lang.code);\n const ordered = manualSort ? kept : sortRows(kept, columns, activeSort(), lang.code);\n return ordered.map((row, index) => ({ key: getKey(row, index), data: row, depth: 0 }));\n });\n // 筛选的选项要看全部行(不是筛过的):行与列不变时不重算\n const options = _derived.by(\n () =>\n new Map(\n columns\n .filter((column) => columnFilter(column))\n .map((column) => [column.key, filterOptions(column, rows, lang.code)]),\n ),\n );\n const arranged = _derived(arrangeColumns(columns, columnOrder, columnPins));\n\n // 行拖动:排序、筛选时显示的顺序不是数据的顺序,不能拖\n const tableMarker = useId();\n const tableElement = () =>\n document.querySelector<HTMLElement>(`table[data-table=\"${tableMarker}\"]`);\n const reorderable = () =>\n !!onReorder &&\n sortList(activeSort()).length === 0 &&\n !Object.values(filters).some((values) => values.length > 0);\n const sortable = useSortable<DataTableRowModel<T>>({\n items: () => models,\n getKey: (row) => row.key,\n getLabel: (row) => rowLabel(columns, row),\n onChange: (next) => onReorder?.(next.map((row) => row.data)),\n container: () => tableElement(),\n disabled: () => !reorderable(),\n });\n\n // 编辑中的格:草稿、校验没过的原因、正在保存\n let editing = _state<\n (CellPosition & { draft: unknown; error?: string; saving?: boolean }) | null\n >(null);\n const columnOf = (key: string) => columns.find((column) => column.key === key);\n const rowOf = (key: string) => models.find((row) => row.key === key);\n\n const cellElement = (cell: CellPosition) =>\n tableElement()?.querySelector<HTMLElement>(\n `tr[data-key=\"${CSS.escape(cell.row)}\"] td[data-column=\"${CSS.escape(cell.column)}\"]`,\n );\n\n /** 编辑完、放弃后焦点回到格上(网格里键盘接着走) */\n function focusCell(cell: CellPosition) {\n void nextTick(() => cellElement(cell)?.focus());\n }\n\n function startEdit(cell: CellPosition, text?: string) {\n const row = rowOf(cell.row);\n const column = columnOf(cell.column);\n if (!row || !column || !isCellEditable(column, row.data)) return;\n const numeric = ['number', 'currency', 'percent'].includes(columnType(column, rows));\n // 直接打字:用打的字替换原值(数字列只认数字)\n const typed = text === undefined ? undefined : numeric ? Number(text) : text;\n const draft =\n typed === undefined || Number.isNaN(typed) ? columnValue(column, row.data) : typed;\n editing = { ...cell, draft };\n // 编辑器渲染出来后焦点移进去(autofocus 对后插入的元素不可靠,日期这类分段输入也没有 autofocus)\n void nextTick(() => {\n const element = cellElement(cell);\n if (element) focusFirst(element);\n });\n }\n\n function cancelEdit() {\n if (!editing) return;\n const cell = { row: editing.row, column: editing.column };\n editing = null;\n focusCell(cell);\n }\n\n /** 提交:列的 validate、onCellChange 都接受了才收起;step 是提交后去哪一格(Tab 往后、Shift + Tab 往前) */\n async function commitEdit(step: 0 | 1 | -1 = 0) {\n const current = editing;\n const row = current && rowOf(current.row);\n const column = current && columnOf(current.column);\n if (!current || !row || !column || current.saving) return;\n const invalid = column.validate?.(current.draft, row.data);\n if (invalid) {\n editing = { ...current, error: invalid };\n return;\n }\n editing = { ...current, saving: true };\n const result = await onCellChange?.(row.data, column.key, current.draft);\n if (typeof result === 'string' && result) {\n editing = { ...current, error: result, saving: false };\n return;\n }\n editing = null;\n const next = step === 0 ? undefined : neighbourEditable(current, step);\n if (next) startEdit(next);\n else focusCell(current);\n }\n\n /** 这一行里往后(往前)的下一个可编辑的格 */\n function neighbourEditable(cell: CellPosition, step: 1 | -1): CellPosition | undefined {\n const row = rowOf(cell.row);\n if (!row) return undefined;\n const hidden = new Set(hiddenColumns);\n const visible = arranged.filter((column) => !hidden.has(column.key));\n const from = visible.findIndex((column) => column.key === cell.column);\n for (let index = from + step; index >= 0 && index < visible.length; index += step) {\n const column = visible[index]!;\n if (isCellEditable(column, row.data)) return { row: cell.row, column: column.key };\n }\n return undefined;\n }\n\n function onEditKeydown(event: KeyboardEvent) {\n // 编辑器自己处理了的键(下拉框的 Enter 打开列表)不再当作提交\n if (event.defaultPrevented) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n cancelEdit();\n } else if (event.key === 'Enter') {\n event.preventDefault();\n void commitEdit();\n } else if (event.key === 'Tab') {\n event.preventDefault();\n void commitEdit(event.shiftKey ? -1 : 1);\n }\n }\n\n /** 正在编辑的格里的编辑器:列的 editor,或按列选的默认编辑器 */\n function renderEditor(row: T, column: DataTableColumn<T>): VNodeChild {\n const current = editing!;\n const context: CellEditorContext<T> = {\n row,\n value: current.draft,\n onChange: (value) => (editing = { ...current, draft: value, error: undefined }),\n commit: () => void commitEdit(),\n cancel: cancelEdit,\n error: current.error,\n };\n const label = plainText(column.header) ?? column.key;\n const common = {\n size: 'sm',\n invalid: !!current.error,\n 'aria-label': label,\n // 编辑器占满格子\n propsRoot: s.editorControl,\n } as const;\n const editor = column.editor ? (\n column.editor(context)\n ) : column.statuses ? (\n // 状态:选了就提交\n <Select\n {...common}\n items={column.statuses.options()}\n _value={typeof current.draft === 'string' ? current.draft : null}\n onUpdate:_value={(value: string | null) => {\n editing = { ...current, draft: value };\n void commitEdit();\n }}\n />\n ) : ['number', 'currency', 'percent'].includes(columnType(column, rows)) ? (\n <NumberField\n {...common}\n stepper={false}\n _value={typeof current.draft === 'number' ? current.draft : null}\n onUpdate:_value={context.onChange}\n />\n ) : (\n <TextField\n {...common}\n _value={\n typeof current.draft === 'string' || typeof current.draft === 'number'\n ? String(current.draft)\n : ''\n }\n onUpdate:_value={context.onChange}\n />\n );\n return (\n <div\n {...mergeAttrs<'div'>(s.editor)}\n // 焦点离开这一格(点了别处):提交\n onFocusout={(event: FocusEvent) => {\n const cell = (event.currentTarget as HTMLElement).closest('td');\n if (!cell?.contains(event.relatedTarget as Node | null)) void commitEdit();\n }}\n >\n {editor}\n {current.error && (\n <div role=\"alert\" {...mergeAttrs<'div'>(s.editorError)}>\n {current.error}\n </div>\n )}\n </div>\n );\n }\n\n /**\n * 能拖动时行的属性:使用方的 propsRow 加上拖动要的属性。在 setup 里建一次(函数不变,行的 memo 才有效);\n * 里面读的拖动状态由各行的渲染跟踪,被拖的行照样更新\n */\n const rowPropsWithHandle = (row: T, index: number) =>\n mergeAttrs<'tr'>({}, typeof propsRow === 'function' ? propsRow(row, index) : propsRow, {\n ...sortable.itemProps(models[index]!.key),\n sx: sortable.active === models[index]!.key ? dataTableStateStyles.rowDragging : undefined,\n });\n\n /** 第一个数据列前面:拖动的把手,再是使用方的 leading */\n function renderLeading(row: DataTableRowModel<T>, index: number) {\n return (\n <>\n <ButtonBase\n {...s.rowHandle}\n ripple={false}\n aria-label={lang.sortableHandle(rowLabel(columns, row))}\n {...sortable.handleProps(row.key)}\n >\n <Icon icon={GripVertical} />\n </ButtonBase>\n {leading?.(row, index)}\n </>\n );\n }\n\n function onSortClick(key: string, event: MouseEvent) {\n if (multiSort) sorts = nextSorts(sorts, key, event.shiftKey);\n else sort = nextSort(sort, key);\n }\n\n function setSort(key: string, direction: SortState['direction'] | null) {\n if (multiSort) {\n const rest = sorts.filter((item) => item.key !== key);\n sorts = direction ? [{ key, direction }, ...rest] : rest;\n } else sort = direction ? { key, direction } : null;\n }\n\n /** 往前、往后移一列:与相邻的可见列交换位置 */\n function move(key: string, step: 1 | -1) {\n const hidden = new Set(hiddenColumns);\n const keys = arranged.map((column) => column.key);\n const visible = keys.filter((item) => !hidden.has(item));\n const neighbour = visible[visible.indexOf(key) + step];\n if (!neighbour) return;\n const [from, to] = [keys.indexOf(key), keys.indexOf(neighbour)];\n [keys[from], keys[to]] = [neighbour, key];\n columnOrder = keys;\n }\n\n function onColumnAction(key: string, action: keyof ColumnMenuActions, width: number) {\n if (action === 'sortAscending') setSort(key, 'ascending');\n else if (action === 'sortDescending') setSort(key, 'descending');\n else if (action === 'unsort') setSort(key, null);\n else if (action === 'moveBackward') move(key, -1);\n else if (action === 'moveForward') move(key, 1);\n else if (action === 'hide') hiddenColumns = [...hiddenColumns, key];\n else {\n const side = action === 'pinStart' ? 'start' : action === 'pinEnd' ? 'end' : null;\n columnPins = { ...columnPins, [key]: side };\n // 固定列的偏移按列宽累加:没写宽度的列记下它现在的宽度\n const column = columns.find((item) => item.key === key);\n if (side && column?.width == null && columnWidths[key] == null && width > 0)\n columnWidths = { ...columnWidths, [key]: width };\n }\n }\n\n function toggleRow(key: string) {\n selected = [...toggleSelection(selected, key, { mode: selectionMode ?? 'multiple' })];\n }\n\n // 用集合查找:逐个 includes 是 O(n²),十万行全选会卡住页面;不能勾选的行跳过\n function toggleAll() {\n const keys = (\n isRowSelectable ? models.filter((row) => isRowSelectable(row.data)) : models\n ).map((row) => row.key);\n const current = new Set(selected);\n const all = keys.length > 0 && keys.every((key) => current.has(key));\n if (!all) {\n selected = [...new Set([...selected, ...keys])];\n return;\n }\n const visible = new Set(keys);\n selected = selected.filter((key) => !visible.has(key));\n }\n\n function toggleDetail(key: string) {\n expandedRows = [...toggleSelection(expandedRows, key, { mode: 'multiple' })];\n }\n\n return () => (\n <>\n <DataTableView\n {...mergePartProps<DataTableViewProps<T>>(\n {\n rows: models,\n columns: arranged,\n widths: columnWidths,\n ...appearance(),\n },\n rest as Partial<DataTableViewProps<T>>,\n {\n rows: models,\n columns: arranged,\n sort: activeSort(),\n onSortClick,\n filters,\n onFilterChange: (key: string, values: string[]) =>\n (filters = { ...filters, [key]: values }),\n filterOptionsOf: (column) => options.get(column.key) ?? ([] as ColumnFilterOption[]),\n hiddenColumns,\n onColumnAction,\n leading: reorderable() ? renderLeading : leading,\n // 不拖动时原样交给行:每次新建的函数会让各行的 memo 失效,勾选一行全部重渲染\n propsRow: reorderable() ? rowPropsWithHandle : propsRow,\n ...({ 'data-table': tableMarker } as Partial<DataTableViewProps<T>>),\n cellNavigation: cellNavigation ?? columns.some((column) => column.editable),\n editing: editing && { row: editing.row, column: editing.column },\n renderEditor,\n rowErrors: validateRow,\n onEditStart: startEdit,\n onEditKeydown,\n selectionMode,\n isRowSelectable,\n selectedKeys: selected,\n onToggleRow: toggleRow,\n onToggleAll: toggleAll,\n widths: columnWidths,\n onResize: (key: string, width: number) =>\n (columnWidths = { ...columnWidths, [key]: width }),\n expandedRows,\n onToggleDetail: toggleDetail,\n },\n )}\n />\n {onReorder && (\n <>\n <VisuallyHidden id={sortable.instructionsId}>\n {lang.sortableInstructions}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{sortable.announcement}</VisuallyHidden>\n </>\n )}\n </>\n );\n },\n);\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { clamp } from "../utils/data/number.js";
|
|
2
2
|
import { useLang } from "../config/context.js";
|
|
3
|
-
import { mergeAttrs, mergePartProps, mergeProps
|
|
3
|
+
import { mergeAttrs, mergePartProps, mergeProps } from "../utils/props.js";
|
|
4
4
|
import { useRecipe } from "../config/styles.js";
|
|
5
5
|
import { Icon } from "../base/Icon.js";
|
|
6
6
|
import { useDelayedLoading } from "../utils/motion/delayed-loading.js";
|
|
@@ -23,8 +23,8 @@ import { gridFocus } from "../utils/dom/roving-focus.js";
|
|
|
23
23
|
import { Radio, RadioGroupContext } from "../input/Radio.js";
|
|
24
24
|
import { ColumnFilterButton, ColumnMenuButton } from "./ColumnHeaderActions.js";
|
|
25
25
|
import { ColumnResizer } from "./ColumnResizer.js";
|
|
26
|
-
import { Fragment, computed, createVNode, isVNode,
|
|
27
|
-
import { _component, effect, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
26
|
+
import { Fragment, computed, createVNode, isVNode, ref, shallowRef, useId, watch } from "vue";
|
|
27
|
+
import { _component, effect, mergeJsxProps, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
28
28
|
import * as css from "@zerodep-dev/vue-tsx-pro-tsx/styles";
|
|
29
29
|
import { ArrowDown, ArrowUp, ArrowUpDown, ChevronRight } from "@lucide/icons";
|
|
30
30
|
//#region src/table/DataTableView.tsx
|
|
@@ -209,7 +209,7 @@ var DataTableRow = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
|
209
209
|
onEditStart.value?.(cell, event.key);
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
|
-
return () => createVNode("tr",
|
|
212
|
+
return () => createVNode("tr", mergeJsxProps(mergeAttrs({
|
|
213
213
|
...s.value.row,
|
|
214
214
|
sx: [
|
|
215
215
|
s.value.row.sx,
|
|
@@ -241,7 +241,7 @@ var DataTableRow = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
|
241
241
|
offsets.value.start.size > 0 && dataTableStateStyles.stickySelect,
|
|
242
242
|
active.value && dataTableStateStyles.activeEdge
|
|
243
243
|
]
|
|
244
|
-
}, propsSelectCell.value), [selectionMode.value === "single" ? createVNode(Radio,
|
|
244
|
+
}, propsSelectCell.value), [selectionMode.value === "single" ? createVNode(Radio, mergeJsxProps(mergePartProps(s.value.selectRadio, propsSelectRadio.value, {
|
|
245
245
|
disabled: !selectable.value,
|
|
246
246
|
"aria-label": lang.tableSelectRow(index.value + 1)
|
|
247
247
|
}), { "value": row.value.key }), null) : createVNode(Checkbox, mergePartProps({
|
|
@@ -270,7 +270,7 @@ var DataTableRow = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
|
270
270
|
}, propsDetailToggle.value, {
|
|
271
271
|
"aria-expanded": expanded.value,
|
|
272
272
|
"aria-controls": expanded.value ? detailId.value : void 0,
|
|
273
|
-
propsIcon: mergeProps
|
|
273
|
+
propsIcon: mergeProps({
|
|
274
274
|
flipInRtl: true,
|
|
275
275
|
sx: disclosureStyles.icon
|
|
276
276
|
}, propsDetailToggle.value?.propsIcon, expanded.value ? { sx: dataTableStateStyles.chevronOpen } : void 0),
|
|
@@ -281,7 +281,7 @@ var DataTableRow = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
|
281
281
|
const value = editing ? renderEditor.value?.(row.value.data, column) : column.cell ? column.cell(row.value.data, index.value) : String(columnValue(column, row.value.data) ?? "");
|
|
282
282
|
const error = cellNavigation.value ? rowErrors.value?.(row.value.data)?.[column.key] : void 0;
|
|
283
283
|
const editable = cellNavigation.value && isCellEditable(column, row.value.data);
|
|
284
|
-
return createVNode("td",
|
|
284
|
+
return createVNode("td", mergeJsxProps({ "key": column.key }, mergeAttrs({
|
|
285
285
|
...s.value.cell,
|
|
286
286
|
sx: [
|
|
287
287
|
s.value.cell.sx,
|
|
@@ -370,7 +370,7 @@ var DataTableDetailRow = /*#__PURE__*/ _component((_props2, _ctx2) => {
|
|
|
370
370
|
const measure = readonlyProp(_props2, "measure");
|
|
371
371
|
const recipe = useRecipe(dataTableRecipe);
|
|
372
372
|
const s = computed(() => recipe());
|
|
373
|
-
return () => createVNode("tr",
|
|
373
|
+
return () => createVNode("tr", mergeJsxProps(mergeAttrs(s.value.detailRow, propsDetailRow.value, {
|
|
374
374
|
ref: measure.value,
|
|
375
375
|
"aria-rowindex": position.value + headerRows.value + 1
|
|
376
376
|
}), {
|
|
@@ -649,9 +649,9 @@ var DataTableView = /*#__PURE__*/ _component((_props3, _ctx3) => {
|
|
|
649
649
|
icon: sorted === "ascending" ? ArrowUp : sorted === "descending" ? ArrowDown : ArrowUpDown,
|
|
650
650
|
sx: [s.value.sortIcon.sx, sorted && dataTableStateStyles.sortActive]
|
|
651
651
|
}), null),
|
|
652
|
-
sorts.value.length > 1 && priority >= 0 && createVNode(Fragment, null, [createVNode("span",
|
|
652
|
+
sorts.value.length > 1 && priority >= 0 && createVNode(Fragment, null, [createVNode("span", mergeJsxProps(mergeAttrs(s.value.sortPriority), { "aria-hidden": "true" }), [priority + 1]), priority > 0 && createVNode(VisuallyHidden, null, _isSlot(_slot = lang.tableSortPriority(priority + 1, sorted === "ascending" ? lang.tableSortAscending : lang.tableSortDescending)) ? _slot : { default: () => [_slot] })])
|
|
653
653
|
] }) || column.header;
|
|
654
|
-
return createVNode("th",
|
|
654
|
+
return createVNode("th", mergeJsxProps({ "key": column.key }, mergeAttrs({
|
|
655
655
|
...s.value.headerCell,
|
|
656
656
|
sx: [
|
|
657
657
|
s.value.headerCell.sx,
|
|
@@ -676,7 +676,7 @@ var DataTableView = /*#__PURE__*/ _component((_props3, _ctx3) => {
|
|
|
676
676
|
}
|
|
677
677
|
/** 一个分组标题:跨组里的几列 */
|
|
678
678
|
function renderGroupCell(group, members, key, divider) {
|
|
679
|
-
return createVNode("th",
|
|
679
|
+
return createVNode("th", mergeJsxProps({ "key": key }, mergeAttrs({
|
|
680
680
|
...s.value.groupHeaderCell,
|
|
681
681
|
sx: [
|
|
682
682
|
s.value.headerCell.sx,
|
|
@@ -698,11 +698,11 @@ var DataTableView = /*#__PURE__*/ _component((_props3, _ctx3) => {
|
|
|
698
698
|
shown.value.map((column) => renderHeaderCell(column))
|
|
699
699
|
]);
|
|
700
700
|
const nextToGroup = (position) => position > 0 && (cells[position].kind === "group" || cells[position - 1].kind === "group");
|
|
701
|
-
return [createVNode("tr",
|
|
701
|
+
return [createVNode("tr", mergeJsxProps({ "key": "groups" }, mergeAttrs(s.value.headRow, propsHeadRow.value, { "aria-rowindex": 1 })), [
|
|
702
702
|
selectHeader,
|
|
703
703
|
detailHeader,
|
|
704
704
|
cells.map((cell, position) => cell.kind === "group" ? renderGroupCell(cell.group, cell.columns, `${cell.group.key}-${position}`, nextToGroup(position)) : renderHeaderCell(cell.column, 2, nextToGroup(position)))
|
|
705
|
-
]), createVNode("tr",
|
|
705
|
+
]), createVNode("tr", mergeJsxProps({ "key": "columns" }, mergeAttrs(s.value.headRow, propsHeadRow.value, { "aria-rowindex": 2 })), [cells.flatMap((cell, position) => cell.kind === "group" ? cell.columns.map((column, index) => renderHeaderCell(column, 1, index === 0 && position > 0)) : [])])];
|
|
706
706
|
}
|
|
707
707
|
return () => {
|
|
708
708
|
const span = shown.value.length + (selectionMode.value ? 1 : 0) + (renderDetail.value ? 1 : 0);
|
|
@@ -726,7 +726,7 @@ var DataTableView = /*#__PURE__*/ _component((_props3, _ctx3) => {
|
|
|
726
726
|
renderDetail.value && createVNode("col", css.attrs(css.bind(dataTableDynamicStyles.width, () => [DETAIL_WIDTH], true)), null),
|
|
727
727
|
shown.value.map((column) => {
|
|
728
728
|
const width = widthOf(column);
|
|
729
|
-
return createVNode("col",
|
|
729
|
+
return createVNode("col", mergeJsxProps({ "key": column.key }, width != null ? css.attrs(css.bind(dataTableDynamicStyles.width, () => [width])) : {}), null);
|
|
730
730
|
})
|
|
731
731
|
]),
|
|
732
732
|
createVNode("thead", mergeAttrs(s.value.head, propsHead.value, { ref: head }), [renderHeaderRows(selectionMode.value && createVNode("th", mergeAttrs({
|
|
@@ -760,18 +760,18 @@ var DataTableView = /*#__PURE__*/ _component((_props3, _ctx3) => {
|
|
|
760
760
|
}, propsDetailHeaderCell.value, {
|
|
761
761
|
scope: "col",
|
|
762
762
|
rowspan: headerRows.value > 1 ? headerRows.value : void 0
|
|
763
|
-
}), [createVNode("span", css.attrs(visuallyHiddenStyles.hidden), [lang.tableDetails])])), indicator.value && rows.value.length > 0 && createVNode("tr", { "aria-hidden": "true" }, [createVNode("td",
|
|
763
|
+
}), [createVNode("span", css.attrs(visuallyHiddenStyles.hidden), [lang.tableDetails])])), indicator.value && rows.value.length > 0 && createVNode("tr", { "aria-hidden": "true" }, [createVNode("td", mergeJsxProps({ "colspan": span }, mergeAttrs(s.value.progressCell)), [createVNode("div", mergeAttrs(s.value.progress), [createVNode(Progress, mergePartProps({
|
|
764
764
|
size: "xs",
|
|
765
765
|
"aria-label": lang.loading
|
|
766
766
|
}, propsProgress.value), null)])])])]),
|
|
767
|
-
createVNode("tbody",
|
|
768
|
-
rows.value.length === 0 && indicator.value && Array.from({ length: skeletonRows.value }, (_, index) => createVNode("tr",
|
|
767
|
+
createVNode("tbody", mergeJsxProps(mergeAttrs(s.value.body), { "ref": body }), [
|
|
768
|
+
rows.value.length === 0 && indicator.value && Array.from({ length: skeletonRows.value }, (_, index) => createVNode("tr", mergeJsxProps({
|
|
769
769
|
"key": `skeleton-${index}`,
|
|
770
770
|
"aria-hidden": "true"
|
|
771
771
|
}, mergeAttrs(s.value.row)), [
|
|
772
772
|
selectionMode.value && createVNode("td", mergeAttrs(s.value.cell), null),
|
|
773
773
|
renderDetail.value && createVNode("td", mergeAttrs(s.value.cell), null),
|
|
774
|
-
shown.value.map((column, position) => createVNode("td",
|
|
774
|
+
shown.value.map((column, position) => createVNode("td", mergeJsxProps({ "key": column.key }, mergeAttrs(s.value.cell)), [createVNode(Skeleton, mergePartProps({
|
|
775
775
|
...s.value.skeleton,
|
|
776
776
|
sx: [s.value.skeleton.sx, css.bind(dataTableDynamicStyles.percent, () => [`${90 - (index + position) % 4 * 15}%`])],
|
|
777
777
|
delay: index * 120
|
|
@@ -784,7 +784,7 @@ var DataTableView = /*#__PURE__*/ _component((_props3, _ctx3) => {
|
|
|
784
784
|
size: "sm",
|
|
785
785
|
title: lang.tableEmpty
|
|
786
786
|
}, propsEmpty.value), null)])]),
|
|
787
|
-
top > 0 && createVNode("tr", { "aria-hidden": "true" }, [createVNode("td",
|
|
787
|
+
top > 0 && createVNode("tr", { "aria-hidden": "true" }, [createVNode("td", mergeJsxProps({ "colspan": span }, mergeAttrs({
|
|
788
788
|
...s.value.spacer,
|
|
789
789
|
sx: [s.value.spacer.sx, css.bind(dataTableDynamicStyles.height, () => [top])]
|
|
790
790
|
})), null)]),
|
|
@@ -846,7 +846,7 @@ var DataTableView = /*#__PURE__*/ _component((_props3, _ctx3) => {
|
|
|
846
846
|
"onEditKeydown": onEditKeydown.value
|
|
847
847
|
}, null);
|
|
848
848
|
}),
|
|
849
|
-
bottom > 0 && createVNode("tr", { "aria-hidden": "true" }, [createVNode("td",
|
|
849
|
+
bottom > 0 && createVNode("tr", { "aria-hidden": "true" }, [createVNode("td", mergeJsxProps({ "colspan": span }, mergeAttrs({
|
|
850
850
|
...s.value.spacer,
|
|
851
851
|
sx: [s.value.spacer.sx, css.bind(dataTableDynamicStyles.height, () => [bottom])]
|
|
852
852
|
})), null)])
|
|
@@ -868,7 +868,7 @@ var DataTableView = /*#__PURE__*/ _component((_props3, _ctx3) => {
|
|
|
868
868
|
leadingStickySx(offsets.value.start.size > 0, selectionMode.value ? SELECT_WIDTH : 0)
|
|
869
869
|
]
|
|
870
870
|
}), null),
|
|
871
|
-
shown.value.map((column, position) => createVNode("td",
|
|
871
|
+
shown.value.map((column, position) => createVNode("td", mergeJsxProps({ "key": column.key }, mergeAttrs({
|
|
872
872
|
...s.value.summaryCell,
|
|
873
873
|
sx: [
|
|
874
874
|
s.value.cell.sx,
|