@qijenchen/design-system 0.1.0-beta.81 → 0.1.0-beta.83
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/CLAUDE.md +2 -3
- package/dist/components/Avatar/avatar.d.ts.map +1 -1
- package/dist/components/Avatar/avatar.js +1 -2
- package/dist/components/Avatar/avatar.js.map +1 -1
- package/dist/components/BulkActionBar/bulk-action-bar.d.ts +3 -0
- package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -1
- package/dist/components/BulkActionBar/bulk-action-bar.js +2 -2
- package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -1
- package/dist/components/Button/button.d.ts +1 -1
- package/dist/components/Button/button.d.ts.map +1 -1
- package/dist/components/Button/button.js +5 -2
- package/dist/components/Button/button.js.map +1 -1
- package/dist/components/Calendar/calendar.d.ts +3 -1
- package/dist/components/Calendar/calendar.d.ts.map +1 -1
- package/dist/components/Calendar/calendar.js +40 -17
- package/dist/components/Calendar/calendar.js.map +1 -1
- package/dist/components/Carousel/carousel.d.ts +1 -1
- package/dist/components/Carousel/carousel.d.ts.map +1 -1
- package/dist/components/Carousel/carousel.js +3 -1
- package/dist/components/Carousel/carousel.js.map +1 -1
- package/dist/components/Checkbox/checkbox.d.ts +1 -1
- package/dist/components/Checkbox/checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox/checkbox.js +2 -1
- package/dist/components/Checkbox/checkbox.js.map +1 -1
- package/dist/components/Chip/chip.d.ts +2 -2
- package/dist/components/Chip/chip.d.ts.map +1 -1
- package/dist/components/Chip/chip.js +41 -12
- package/dist/components/Chip/chip.js.map +1 -1
- package/dist/components/Coachmark/coachmark.d.ts.map +1 -1
- package/dist/components/Coachmark/coachmark.js +6 -6
- package/dist/components/Coachmark/coachmark.js.map +1 -1
- package/dist/components/Combobox/combobox.d.ts +1 -1
- package/dist/components/Combobox/combobox.d.ts.map +1 -1
- package/dist/components/Combobox/combobox.js +5 -2
- package/dist/components/Combobox/combobox.js.map +1 -1
- package/dist/components/Command/command.d.ts +1 -1
- package/dist/components/Command/command.d.ts.map +1 -1
- package/dist/components/Command/command.js +2 -1
- package/dist/components/Command/command.js.map +1 -1
- package/dist/components/DataTable/data-table.d.ts +29 -1
- package/dist/components/DataTable/data-table.d.ts.map +1 -1
- package/dist/components/DataTable/data-table.js +71 -13
- package/dist/components/DataTable/data-table.js.map +1 -1
- package/dist/components/DataTable/filter-tree.d.ts.map +1 -1
- package/dist/components/DateGrid/date-grid.d.ts +2 -2
- package/dist/components/DateGrid/date-grid.d.ts.map +1 -1
- package/dist/components/DateGrid/date-grid.js +54 -10
- package/dist/components/DateGrid/date-grid.js.map +1 -1
- package/dist/components/DatePicker/date-picker.d.ts +2 -8
- package/dist/components/DatePicker/date-picker.d.ts.map +1 -1
- package/dist/components/DatePicker/date-picker.js +15 -3
- package/dist/components/DatePicker/date-picker.js.map +1 -1
- package/dist/components/DescriptionList/description-list.d.ts.map +1 -1
- package/dist/components/DescriptionList/description-list.js +1 -1
- package/dist/components/DescriptionList/description-list.js.map +1 -1
- package/dist/components/DropdownMenu/dropdown-menu.d.ts +3 -3
- package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -1
- package/dist/components/DropdownMenu/dropdown-menu.js +14 -4
- package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -1
- package/dist/components/Empty/empty.d.ts.map +1 -1
- package/dist/components/Empty/empty.js +1 -1
- package/dist/components/Empty/empty.js.map +1 -1
- package/dist/components/Field/field.d.ts +1 -1
- package/dist/components/Field/field.d.ts.map +1 -1
- package/dist/components/Field/field.js +2 -1
- package/dist/components/Field/field.js.map +1 -1
- package/dist/components/Field/use-form-validation.d.ts.map +1 -1
- package/dist/components/Field/use-form-validation.js +5 -7
- package/dist/components/Field/use-form-validation.js.map +1 -1
- package/dist/components/FileUpload/file-upload.d.ts +1 -1
- package/dist/components/FileUpload/file-upload.d.ts.map +1 -1
- package/dist/components/FileUpload/file-upload.js +11 -5
- package/dist/components/FileUpload/file-upload.js.map +1 -1
- package/dist/components/FileViewer/can-render-image.d.ts +6 -0
- package/dist/components/FileViewer/can-render-image.d.ts.map +1 -0
- package/dist/components/FileViewer/can-render-image.js +11 -0
- package/dist/components/FileViewer/can-render-image.js.map +1 -0
- package/dist/components/FileViewer/file-viewer.d.ts +2 -2
- package/dist/components/FileViewer/file-viewer.d.ts.map +1 -1
- package/dist/components/FileViewer/file-viewer.js +20 -13
- package/dist/components/FileViewer/file-viewer.js.map +1 -1
- package/dist/components/FileViewer/image-renderer.d.ts +0 -5
- package/dist/components/FileViewer/image-renderer.d.ts.map +1 -1
- package/dist/components/FileViewer/image-renderer.js +1 -9
- package/dist/components/FileViewer/image-renderer.js.map +1 -1
- package/dist/components/HoverCard/hover-card.d.ts.map +1 -1
- package/dist/components/HoverCard/hover-card.js +3 -1
- package/dist/components/HoverCard/hover-card.js.map +1 -1
- package/dist/components/Input/input.d.ts +26 -3
- package/dist/components/Input/input.d.ts.map +1 -1
- package/dist/components/Input/input.js +11 -3
- package/dist/components/Input/input.js.map +1 -1
- package/dist/components/LinkInput/link-input.d.ts +1 -1
- package/dist/components/LinkInput/link-input.d.ts.map +1 -1
- package/dist/components/LinkInput/link-input.js.map +1 -1
- package/dist/components/Menu/menu-item.d.ts.map +1 -1
- package/dist/components/Menu/menu-item.js +4 -3
- package/dist/components/Menu/menu-item.js.map +1 -1
- package/dist/components/NumberInput/number-input.d.ts +1 -1
- package/dist/components/NumberInput/number-input.d.ts.map +1 -1
- package/dist/components/NumberInput/number-input.js +2 -1
- package/dist/components/NumberInput/number-input.js.map +1 -1
- package/dist/components/Pagination/index.d.ts +2 -0
- package/dist/components/Pagination/index.d.ts.map +1 -0
- package/dist/components/Pagination/index.js +6 -0
- package/dist/components/Pagination/index.js.map +1 -0
- package/dist/components/Pagination/pagination.d.ts +49 -0
- package/dist/components/Pagination/pagination.d.ts.map +1 -0
- package/dist/components/Pagination/pagination.js +182 -0
- package/dist/components/Pagination/pagination.js.map +1 -0
- package/dist/components/PeoplePicker/people-picker.d.ts +1 -1
- package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -1
- package/dist/components/PeoplePicker/people-picker.js +2 -1
- package/dist/components/PeoplePicker/people-picker.js.map +1 -1
- package/dist/components/PeoplePicker/person-display.d.ts +4 -0
- package/dist/components/PeoplePicker/person-display.d.ts.map +1 -1
- package/dist/components/PeoplePicker/person-display.js +1 -1
- package/dist/components/PeoplePicker/person-display.js.map +1 -1
- package/dist/components/Popover/popover.d.ts.map +1 -1
- package/dist/components/Popover/popover.js +58 -32
- package/dist/components/Popover/popover.js.map +1 -1
- package/dist/components/ProfileCard/profile-card.d.ts +6 -1
- package/dist/components/ProfileCard/profile-card.d.ts.map +1 -1
- package/dist/components/ProfileCard/profile-card.js +14 -4
- package/dist/components/ProfileCard/profile-card.js.map +1 -1
- package/dist/components/RadioGroup/radio-group.d.ts +1 -1
- package/dist/components/RadioGroup/radio-group.d.ts.map +1 -1
- package/dist/components/RadioGroup/radio-group.js +2 -1
- package/dist/components/RadioGroup/radio-group.js.map +1 -1
- package/dist/components/SegmentedControl/segmented-control.d.ts +2 -2
- package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -1
- package/dist/components/SegmentedControl/segmented-control.js +16 -8
- package/dist/components/SegmentedControl/segmented-control.js.map +1 -1
- package/dist/components/Select/select.d.ts +1 -1
- package/dist/components/Select/select.d.ts.map +1 -1
- package/dist/components/Select/select.js +13 -2
- package/dist/components/Select/select.js.map +1 -1
- package/dist/components/SelectMenu/index.js +3 -2
- package/dist/components/SelectMenu/select-menu.d.ts +15 -3
- package/dist/components/SelectMenu/select-menu.d.ts.map +1 -1
- package/dist/components/SelectMenu/select-menu.js +150 -99
- package/dist/components/SelectMenu/select-menu.js.map +1 -1
- package/dist/components/Sheet/sheet.d.ts.map +1 -1
- package/dist/components/Sheet/sheet.js +1 -1
- package/dist/components/Sheet/sheet.js.map +1 -1
- package/dist/components/Sidebar/sidebar.d.ts +2 -2
- package/dist/components/Sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/Sidebar/sidebar.js +5 -2
- package/dist/components/Sidebar/sidebar.js.map +1 -1
- package/dist/components/Slider/slider.d.ts +1 -1
- package/dist/components/Slider/slider.d.ts.map +1 -1
- package/dist/components/Slider/slider.js +7 -3
- package/dist/components/Slider/slider.js.map +1 -1
- package/dist/components/Switch/switch.d.ts +1 -1
- package/dist/components/Switch/switch.d.ts.map +1 -1
- package/dist/components/Switch/switch.js +10 -2
- package/dist/components/Switch/switch.js.map +1 -1
- package/dist/components/Tabs/tabs.d.ts +3 -3
- package/dist/components/Tabs/tabs.d.ts.map +1 -1
- package/dist/components/Tabs/tabs.js +29 -9
- package/dist/components/Tabs/tabs.js.map +1 -1
- package/dist/components/Tag/tag.d.ts.map +1 -1
- package/dist/components/Tag/tag.js +13 -1
- package/dist/components/Tag/tag.js.map +1 -1
- package/dist/components/Textarea/textarea.d.ts.map +1 -1
- package/dist/components/Textarea/textarea.js +4 -1
- package/dist/components/Textarea/textarea.js.map +1 -1
- package/dist/components/TimePicker/time-picker.d.ts +1 -1
- package/dist/components/TimePicker/time-picker.d.ts.map +1 -1
- package/dist/components/TimePicker/time-picker.js +20 -7
- package/dist/components/TimePicker/time-picker.js.map +1 -1
- package/dist/components/Toast/toast.d.ts.map +1 -1
- package/dist/components/Toast/toast.js +4 -1
- package/dist/components/Toast/toast.js.map +1 -1
- package/dist/components/TreeView/tree-view.d.ts +1 -1
- package/dist/components/TreeView/tree-view.d.ts.map +1 -1
- package/dist/components/TreeView/tree-view.js +8 -3
- package/dist/components/TreeView/tree-view.js.map +1 -1
- package/dist/hooks/use-controllable.d.ts.map +1 -1
- package/dist/hooks/use-controllable.js +4 -2
- package/dist/hooks/use-controllable.js.map +1 -1
- package/dist/hooks/use-is-touch-device.d.ts.map +1 -1
- package/dist/hooks/use-is-touch-device.js +3 -1
- package/dist/hooks/use-is-touch-device.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/patterns/element-anatomy/item-anatomy.d.ts +1 -1
- package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -1
- package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -1
- package/ds-canonical/fork/governance.lock +14 -8
- package/ds-canonical/fork/hooks/check_ds_anchor_preflight.sh +15 -4
- package/ds-canonical/fork/hooks/check_opacity_token_usage.sh +8 -0
- package/ds-canonical/fork/hooks/check_story_determinism.sh +37 -0
- package/ds-canonical/fork/manifest.json +5 -0
- package/ds-canonical/fork/preamble.md +3 -1
- package/ds-canonical/fork/skills/bug-fix-rhythm/SKILL.md +6 -0
- package/ds-canonical/fork/skills/delivery-handoff/SKILL.md +7 -0
- package/ds-canonical/fork/skills/performance-audit/SKILL.md +4 -2
- package/ds-canonical/fork/skills/visual-audit/SKILL.md +8 -0
- package/ds-canonical/hooks/check_benchmark_citation.sh +5 -3
- package/ds-canonical/hooks/check_ds_anchor_preflight.sh +15 -4
- package/ds-canonical/hooks/check_opacity_token_usage.sh +8 -0
- package/ds-canonical/hooks/check_propose_without_benchmark.sh +6 -2
- package/ds-canonical/hooks/check_ssot_header_declaration.sh +53 -0
- package/ds-canonical/hooks/check_story_determinism.sh +37 -0
- package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +3 -3
- package/ds-canonical/hooks/tests/test_check_fork_user_plugin_install.sh +3 -1
- package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +2 -2
- package/ds-canonical/hooks/tests/test_check_ssot_header_declaration.sh +72 -0
- package/ds-canonical/rules/self-verify.md +1 -1
- package/ds-canonical/rules/spec-rules.md +1 -1
- package/ds-canonical/rules/ui-development.md +2 -0
- package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +6 -0
- package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +11 -15
- package/ds-canonical/skills/delivery-handoff/SKILL.md +5 -0
- package/ds-canonical/skills/design-system-audit/SKILL.md +1 -1
- package/ds-canonical/skills/governance-health/SKILL.md +1 -0
- package/ds-canonical/skills/new-component/SKILL.md +2 -0
- package/ds-canonical/skills/performance-audit/SKILL.md +2 -2
- package/ds-canonical/skills/visual-audit/SKILL.md +8 -0
- package/ds-story-manifest.json +27 -4
- package/llms-full.txt +6 -1
- package/llms.txt +2 -1
- package/package.json +1 -1
- package/src/components/Avatar/avatar.spec.md +10 -30
- package/src/components/Avatar/avatar.tsx +13 -7
- package/src/components/Badge/badge.spec.md +1 -0
- package/src/components/Breadcrumb/breadcrumb.spec.md +1 -1
- package/src/components/BulkActionBar/bulk-action-bar.anatomy.stories.tsx +1 -1
- package/src/components/BulkActionBar/bulk-action-bar.tsx +8 -2
- package/src/components/Button/button.spec.md +1 -0
- package/src/components/Button/button.tsx +4 -1
- package/src/components/Calendar/calendar.anatomy.stories.tsx +3 -1
- package/src/components/Calendar/calendar.principles.stories.tsx +3 -1
- package/src/components/Calendar/calendar.spec.md +2 -1
- package/src/components/Calendar/calendar.stories.tsx +3 -1
- package/src/components/Calendar/calendar.tsx +53 -19
- package/src/components/Carousel/carousel.tsx +3 -1
- package/src/components/Checkbox/checkbox.tsx +2 -1
- package/src/components/Chip/chip.anatomy.stories.tsx +8 -8
- package/src/components/Chip/chip.principles.stories.tsx +3 -3
- package/src/components/Chip/chip.spec.md +6 -3
- package/src/components/Chip/chip.tsx +56 -11
- package/src/components/Coachmark/coachmark.tsx +10 -8
- package/src/components/Combobox/combobox.tsx +8 -2
- package/src/components/Command/command.tsx +2 -1
- package/src/components/DataTable/data-table.spec.md +52 -95
- package/src/components/DataTable/data-table.stories.tsx +47 -0
- package/src/components/DataTable/data-table.tsx +145 -11
- package/src/components/DataTable/filter-tree.ts +178 -51
- package/src/components/DateGrid/date-grid.spec.md +5 -4
- package/src/components/DateGrid/date-grid.tsx +64 -11
- package/src/components/DatePicker/date-picker.tsx +19 -3
- package/src/components/DescriptionList/description-list.tsx +3 -1
- package/src/components/DropdownMenu/dropdown-menu.spec.md +4 -3
- package/src/components/DropdownMenu/dropdown-menu.tsx +22 -4
- package/src/components/Empty/empty.spec.md +0 -1
- package/src/components/Empty/empty.tsx +4 -1
- package/src/components/Field/field-controls.spec.md +1 -1
- package/src/components/Field/field.tsx +2 -1
- package/src/components/Field/form-validation.spec.md +1 -1
- package/src/components/Field/use-form-validation.ts +11 -7
- package/src/components/FileItem/file-item.spec.md +9 -0
- package/src/components/FileUpload/file-upload.spec.md +1 -1
- package/src/components/FileUpload/file-upload.tsx +18 -7
- package/src/components/FileViewer/can-render-image.ts +15 -0
- package/src/components/FileViewer/file-viewer.tsx +43 -18
- package/src/components/FileViewer/image-renderer.tsx +3 -8
- package/src/components/HoverCard/hover-card.spec.md +1 -1
- package/src/components/HoverCard/hover-card.tsx +3 -1
- package/src/components/Input/input.tsx +10 -4
- package/src/components/LinkInput/link-input.tsx +4 -1
- package/src/components/Menu/menu-item.anatomy.stories.tsx +1 -1
- package/src/components/Menu/menu-item.spec.md +2 -2
- package/src/components/Menu/menu-item.tsx +12 -3
- package/src/components/NumberInput/number-input.tsx +2 -1
- package/src/components/Pagination/index.ts +5 -0
- package/src/components/Pagination/pagination.anatomy.stories.tsx +143 -0
- package/src/components/Pagination/pagination.principles.stories.tsx +81 -0
- package/src/components/Pagination/pagination.spec.md +150 -0
- package/src/components/Pagination/pagination.stories.tsx +98 -0
- package/src/components/Pagination/pagination.tsx +263 -0
- package/src/components/PeoplePicker/people-picker.tsx +2 -1
- package/src/components/PeoplePicker/person-display.tsx +5 -1
- package/src/components/Popover/popover.anatomy.stories.tsx +1 -1
- package/src/components/Popover/popover.spec.md +2 -1
- package/src/components/Popover/popover.tsx +86 -37
- package/src/components/ProfileCard/profile-card.tsx +24 -6
- package/src/components/RadioGroup/radio-group.tsx +2 -1
- package/src/components/SegmentedControl/segmented-control.anatomy.stories.tsx +1 -1
- package/src/components/SegmentedControl/segmented-control.spec.md +6 -2
- package/src/components/SegmentedControl/segmented-control.tsx +15 -7
- package/src/components/Select/select.spec.md +1 -1
- package/src/components/Select/select.tsx +26 -4
- package/src/components/SelectMenu/select-menu.spec.md +2 -1
- package/src/components/SelectMenu/select-menu.tsx +86 -12
- package/src/components/Sheet/sheet.spec.md +1 -0
- package/src/components/Sheet/sheet.tsx +2 -1
- package/src/components/Sidebar/sidebar.tsx +5 -2
- package/src/components/Slider/slider.anatomy.stories.tsx +4 -4
- package/src/components/Slider/slider.spec.md +19 -85
- package/src/components/Slider/slider.tsx +13 -5
- package/src/components/Steps/steps.spec.md +1 -0
- package/src/components/Switch/switch.spec.md +1 -0
- package/src/components/Switch/switch.tsx +9 -1
- package/src/components/Tabs/tabs.anatomy.stories.tsx +4 -4
- package/src/components/Tabs/tabs.spec.md +13 -47
- package/src/components/Tabs/tabs.tsx +38 -9
- package/src/components/Tag/tag.principles.stories.tsx +1 -1
- package/src/components/Tag/tag.spec.md +11 -43
- package/src/components/Tag/tag.tsx +23 -1
- package/src/components/Textarea/textarea.principles.stories.tsx +2 -1
- package/src/components/Textarea/textarea.tsx +4 -1
- package/src/components/TimePicker/time-picker.tsx +31 -10
- package/src/components/Toast/toast.tsx +4 -1
- package/src/components/TreeView/tree-view.spec.md +1 -1
- package/src/components/TreeView/tree-view.tsx +10 -3
- package/src/hooks/use-controllable.ts +7 -2
- package/src/hooks/use-is-touch-device.ts +8 -1
- package/src/index.ts +1 -0
- package/src/patterns/element-anatomy/inline-action.spec.md +1 -1
- package/src/patterns/element-anatomy/item-anatomy.spec.md +1 -2
- package/src/patterns/element-anatomy/item-anatomy.tsx +4 -5
- package/src/patterns/horizontal-overflow/horizontal-overflow.stories.tsx +137 -0
- package/src/patterns/overlay-surface/overlay-surface.stories.tsx +116 -0
- package/src/tokens/color/color.spec.md +5 -7
- package/src/tokens/color/semantic.css +8 -2
- package/src/tokens/layoutSpace/layoutSpace.spec.md +1 -0
- package/src/tokens/motion/motion.stories.tsx +142 -0
- package/src/tokens/opacity/opacity.spec.md +1 -1
- package/src/tokens/uiSize/uiSize.stories.tsx +103 -0
|
@@ -2,7 +2,8 @@ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { createPortal } from "react-dom";
|
|
4
4
|
import { Empty } from "../Empty/empty.js";
|
|
5
|
-
import {
|
|
5
|
+
import { Pagination } from "../Pagination/pagination.js";
|
|
6
|
+
import { useReactTable, getPaginationRowModel, getExpandedRowModel, getSortedRowModel, getCoreRowModel, flexRender } from "@tanstack/react-table";
|
|
6
7
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
7
8
|
import { TableScrollProvider } from "../Field/field-context.js";
|
|
8
9
|
import { cva } from "class-variance-authority";
|
|
@@ -359,7 +360,7 @@ function DataTableInner({
|
|
|
359
360
|
data,
|
|
360
361
|
size = "md",
|
|
361
362
|
autoRowHeight = false,
|
|
362
|
-
height
|
|
363
|
+
height: heightProp,
|
|
363
364
|
overscan = 5,
|
|
364
365
|
emptyState,
|
|
365
366
|
enableHover = true,
|
|
@@ -395,10 +396,12 @@ function DataTableInner({
|
|
|
395
396
|
experimentalSpreadsheetOverlay = false,
|
|
396
397
|
experimentalActiveEditorController = false,
|
|
397
398
|
spreadsheetMode = false,
|
|
399
|
+
pagination,
|
|
398
400
|
className,
|
|
399
401
|
...props
|
|
400
402
|
}, ref) {
|
|
401
403
|
var _a, _b, _c;
|
|
404
|
+
const height = heightProp ?? (pagination ? "auto" : "400px");
|
|
402
405
|
const [editingCellId, setEditingCellId] = React.useState(null);
|
|
403
406
|
const [editingDraft, setEditingDraft] = React.useState(void 0);
|
|
404
407
|
const [selectedCellId, setSelectedCellId] = React.useState(null);
|
|
@@ -527,6 +530,14 @@ function DataTableInner({
|
|
|
527
530
|
if (enabled && !out.includes(SELECT_COL_ID)) out.unshift(SELECT_COL_ID);
|
|
528
531
|
return out;
|
|
529
532
|
}, [userColumnOrder, enabled]);
|
|
533
|
+
const paginationEnabled = !!pagination;
|
|
534
|
+
const paginationOpts = typeof pagination === "object" ? pagination : void 0;
|
|
535
|
+
const [pageSizeState, setPageSizeState] = React.useState((paginationOpts == null ? void 0 : paginationOpts.pageSize) ?? 20);
|
|
536
|
+
const [currentPage, setCurrentPage] = useControllable({
|
|
537
|
+
value: paginationOpts == null ? void 0 : paginationOpts.page,
|
|
538
|
+
defaultValue: (paginationOpts == null ? void 0 : paginationOpts.defaultPage) ?? 1,
|
|
539
|
+
onChange: paginationOpts == null ? void 0 : paginationOpts.onPageChange
|
|
540
|
+
});
|
|
530
541
|
const table = useReactTable({
|
|
531
542
|
...tableOptions,
|
|
532
543
|
data,
|
|
@@ -537,7 +548,10 @@ function DataTableInner({
|
|
|
537
548
|
...tableOptions == null ? void 0 : tableOptions.state,
|
|
538
549
|
// columnPinning + columnOrder 在 user state 後 override,確保 __select__ 永遠左
|
|
539
550
|
columnPinning: { left: effectivePinnedLeft, right: pinnedRightColumns ?? [] },
|
|
540
|
-
...effectiveColumnOrder ? { columnOrder: effectiveColumnOrder } : {}
|
|
551
|
+
...effectiveColumnOrder ? { columnOrder: effectiveColumnOrder } : {},
|
|
552
|
+
// L5 分頁:必在 ...tableOptions?.state 之後 spread(同 columnPinning override 理由——
|
|
553
|
+
// 防 user state 蓋掉內建接線);頁碼變更由 <Pagination onPageChange> 驅動,不走 TanStack 內部 setter
|
|
554
|
+
...paginationEnabled ? { pagination: { pageIndex: currentPage - 1, pageSize: pageSizeState } } : {}
|
|
541
555
|
},
|
|
542
556
|
enableMultiSort,
|
|
543
557
|
// **#1 fix(2026-05-04)**:chain user `tableOptions.onSortingChange`(spread 在前被 override = 之前 bug)
|
|
@@ -557,6 +571,8 @@ function DataTableInner({
|
|
|
557
571
|
getSortedRowModel: getSortedRowModel(),
|
|
558
572
|
// L4 nested rows:啟用 expanded row model(consumer 透過 tableOptions.getSubRows + state.expanded forward)
|
|
559
573
|
getExpandedRowModel: getExpandedRowModel(),
|
|
574
|
+
// L5 分頁:條件掛載(TanStack 官方:pagination 與 virtualization 為互斥替代策略)
|
|
575
|
+
...paginationEnabled ? { getPaginationRowModel: getPaginationRowModel() } : {},
|
|
560
576
|
getRowId,
|
|
561
577
|
// 2026-05-06 v14 column resize:`onChange` mode → drag 中 column 即時跟動 cursor(world-class
|
|
562
578
|
// canonical:TanStack docs / AG Grid / Excel / Google Sheets 全部 live resize)。前 v13.2
|
|
@@ -570,9 +586,11 @@ function DataTableInner({
|
|
|
570
586
|
columnResizeMode: "onChange"
|
|
571
587
|
});
|
|
572
588
|
const columnSizingState = table.getState().columnSizing;
|
|
589
|
+
const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;
|
|
573
590
|
const prevColumnSizingRef = React.useRef(columnSizingState);
|
|
574
591
|
React.useEffect(() => {
|
|
575
592
|
if (!onColumnResize) return;
|
|
593
|
+
if (isResizingColumn) return;
|
|
576
594
|
const prev = prevColumnSizingRef.current;
|
|
577
595
|
Object.keys(columnSizingState).forEach((id) => {
|
|
578
596
|
if (columnSizingState[id] !== prev[id]) {
|
|
@@ -580,13 +598,18 @@ function DataTableInner({
|
|
|
580
598
|
}
|
|
581
599
|
});
|
|
582
600
|
prevColumnSizingRef.current = columnSizingState;
|
|
583
|
-
}, [columnSizingState, onColumnResize]);
|
|
601
|
+
}, [columnSizingState, isResizingColumn, onColumnResize]);
|
|
584
602
|
const { rows } = table.getRowModel();
|
|
585
603
|
const isEmpty = rows.length === 0;
|
|
604
|
+
const pageCount = paginationEnabled ? table.getPageCount() : 0;
|
|
605
|
+
React.useEffect(() => {
|
|
606
|
+
if (!paginationEnabled) return;
|
|
607
|
+
if (pageCount > 0 && currentPage > pageCount) setCurrentPage(pageCount);
|
|
608
|
+
}, [paginationEnabled, pageCount, currentPage, setCurrentPage]);
|
|
586
609
|
const hasHeightConstraint = height !== "auto";
|
|
587
610
|
const isFillHeight = hasHeightConstraint && /^(100%|100vh|fill)$/.test(height);
|
|
588
611
|
const VIRTUAL_THRESHOLD = 30;
|
|
589
|
-
const useVirtual = hasHeightConstraint && !isEmpty && rows.length > VIRTUAL_THRESHOLD;
|
|
612
|
+
const useVirtual = !paginationEnabled && hasHeightConstraint && !isEmpty && rows.length > VIRTUAL_THRESHOLD;
|
|
590
613
|
const hasRowActions = !!rowActions;
|
|
591
614
|
const tableRef = React.useRef(null);
|
|
592
615
|
const bodyRef = React.useRef(null);
|
|
@@ -614,6 +637,7 @@ function DataTableInner({
|
|
|
614
637
|
isScrollingResetDelay: 250
|
|
615
638
|
});
|
|
616
639
|
const [bodyMaxHeight, setBodyMaxHeight] = React.useState(null);
|
|
640
|
+
const paginationBarRef = React.useRef(null);
|
|
617
641
|
React.useLayoutEffect(() => {
|
|
618
642
|
var _a2;
|
|
619
643
|
if (!isFillHeight) {
|
|
@@ -630,7 +654,9 @@ function DataTableInner({
|
|
|
630
654
|
const slotH = (parentEl == null ? void 0 : parentEl.getBoundingClientRect().height) ?? tableRef.current.getBoundingClientRect().height;
|
|
631
655
|
const headerEl = tableRef.current.firstElementChild;
|
|
632
656
|
const headerH = (headerEl == null ? void 0 : headerEl.getBoundingClientRect().height) ?? 0;
|
|
633
|
-
const
|
|
657
|
+
const barEl = paginationBarRef.current;
|
|
658
|
+
const barFootprint = barEl ? barEl.getBoundingClientRect().height + (parseFloat(getComputedStyle(barEl.parentElement).rowGap) || 0) : 0;
|
|
659
|
+
const next = Math.max(0, slotH - headerH - barFootprint);
|
|
634
660
|
if (lastValue != null && Math.abs(next - lastValue) < 4) return;
|
|
635
661
|
lastValue = next;
|
|
636
662
|
pendingValue = next;
|
|
@@ -1188,6 +1214,9 @@ function DataTableInner({
|
|
|
1188
1214
|
return;
|
|
1189
1215
|
}
|
|
1190
1216
|
},
|
|
1217
|
+
// D3 dep-hygiene fix(2026-07-06):handler 內(portal edit Enter 分支)呼叫的是 canEditCell,
|
|
1218
|
+
// 非 isCellEditable — 原 deps 列 isCellEditable 是靠 canEditCell identity-stable 才無實害的
|
|
1219
|
+
// stale-closure 地雷;改列真實依賴 canEditCell(其 useCallback deps 已含 isCellEditable + isCellDisabled)。
|
|
1191
1220
|
[
|
|
1192
1221
|
enabled,
|
|
1193
1222
|
mode,
|
|
@@ -1198,7 +1227,7 @@ function DataTableInner({
|
|
|
1198
1227
|
selectedCellId,
|
|
1199
1228
|
editingCellId,
|
|
1200
1229
|
table,
|
|
1201
|
-
|
|
1230
|
+
canEditCell
|
|
1202
1231
|
]
|
|
1203
1232
|
);
|
|
1204
1233
|
const headerCellEl = (header, showDivider) => {
|
|
@@ -1462,7 +1491,7 @@ function DataTableInner({
|
|
|
1462
1491
|
"data-sortable-row-id": enableRowDrag ? row.id : void 0,
|
|
1463
1492
|
"data-row-drag-source": enableRowDrag && isPrimaryRegion ? "true" : void 0,
|
|
1464
1493
|
role: "row",
|
|
1465
|
-
"aria-rowindex": idx + 2,
|
|
1494
|
+
"aria-rowindex": (paginationEnabled ? (currentPage - 1) * pageSizeState : 0) + idx + 2,
|
|
1466
1495
|
className: cn(
|
|
1467
1496
|
"group/row flex relative",
|
|
1468
1497
|
// H1 fix(2026-05-10):effectiveAutoRow 覆 global autoRowHeight,per-row 若有 cell error
|
|
@@ -1535,7 +1564,7 @@ function DataTableInner({
|
|
|
1535
1564
|
className: cn(dataTableVariants({ bordered }), isFillHeight && "flex flex-col", "outline-none focus:outline-none focus-visible:outline-none", className),
|
|
1536
1565
|
style: isFillHeight ? { maxHeight: height } : void 0,
|
|
1537
1566
|
role: "table",
|
|
1538
|
-
"aria-rowcount": rows.length + 1,
|
|
1567
|
+
"aria-rowcount": (paginationEnabled ? table.getPrePaginationRowModel().rows.length : rows.length) + 1,
|
|
1539
1568
|
tabIndex: enabled || spreadsheetMode ? 0 : void 0,
|
|
1540
1569
|
onKeyDown: enabled || spreadsheetMode ? tableKeyboardHandler : void 0,
|
|
1541
1570
|
onMouseOver: enterLeaveHandlers.onMouseOver,
|
|
@@ -1851,7 +1880,7 @@ function DataTableInner({
|
|
|
1851
1880
|
const meta = (_a2 = table.getColumn(id)) == null ? void 0 : _a2.columnDef.meta;
|
|
1852
1881
|
return !(meta == null ? void 0 : meta.locked);
|
|
1853
1882
|
});
|
|
1854
|
-
}, [table, columnsWithSelection, (_c = tableOptions == null ? void 0 : tableOptions.state) == null ? void 0 : _c.columnOrder]);
|
|
1883
|
+
}, [table, columnsWithSelection, (_c = tableOptions == null ? void 0 : tableOptions.state) == null ? void 0 : _c.columnOrder, columnVisibility]);
|
|
1855
1884
|
React.useEffect(() => {
|
|
1856
1885
|
reorderableColumnIdsRef.current = reorderableColumnIds;
|
|
1857
1886
|
}, [reorderableColumnIds]);
|
|
@@ -1910,6 +1939,33 @@ function DataTableInner({
|
|
|
1910
1939
|
}
|
|
1911
1940
|
return sameParentCollisionDetection(args);
|
|
1912
1941
|
}, [sameParentCollisionDetection]);
|
|
1942
|
+
const totalRowCount = paginationEnabled ? table.getPrePaginationRowModel().rows.length : 0;
|
|
1943
|
+
const paginationBar = paginationEnabled && !isEmpty ? (
|
|
1944
|
+
// 無條件 justify-end(2026-07-07 C16:原 paginationHasExtras 判斷式 = 平行重複 Pagination
|
|
1945
|
+
// 內部 hasExtras 拼寫,未來加 extra 必 drift)——完整形態 Pagination 自帶 w-full
|
|
1946
|
+
// justify-between,justify-end 對其為 no-op;純頁碼形態靠右 = 拍板 #6(shadcn justify-end /
|
|
1947
|
+
// Ant Table bottomEnd / MUI / Carbon 4 家)。ref 供 isFillHeight bodyMaxHeight 扣 bar 高(C12)。
|
|
1948
|
+
/* @__PURE__ */ jsx("div", { ref: paginationBarRef, className: "flex justify-end", children: /* @__PURE__ */ jsx(
|
|
1949
|
+
Pagination,
|
|
1950
|
+
{
|
|
1951
|
+
total: totalRowCount,
|
|
1952
|
+
page: currentPage,
|
|
1953
|
+
onPageChange: setCurrentPage,
|
|
1954
|
+
pageSize: pageSizeState,
|
|
1955
|
+
onPageSizeChange: (next) => {
|
|
1956
|
+
var _a2;
|
|
1957
|
+
setPageSizeState(next);
|
|
1958
|
+
(_a2 = paginationOpts == null ? void 0 : paginationOpts.onPageSizeChange) == null ? void 0 : _a2.call(paginationOpts, next);
|
|
1959
|
+
},
|
|
1960
|
+
showTotal: paginationOpts == null ? void 0 : paginationOpts.showTotal,
|
|
1961
|
+
pageSizeOptions: paginationOpts == null ? void 0 : paginationOpts.pageSizeOptions
|
|
1962
|
+
}
|
|
1963
|
+
) })
|
|
1964
|
+
) : null;
|
|
1965
|
+
const composedContent = paginationBar ? /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-[var(--layout-space-tight)]", isFillHeight && "h-full min-h-0"), children: [
|
|
1966
|
+
tableContent,
|
|
1967
|
+
paginationBar
|
|
1968
|
+
] }) : tableContent;
|
|
1913
1969
|
const wrapWithDnd = (node) => {
|
|
1914
1970
|
if (!enableRowDrag && !enableColumnReorder) return node;
|
|
1915
1971
|
return /* @__PURE__ */ jsxs(
|
|
@@ -1943,11 +1999,11 @@ function DataTableInner({
|
|
|
1943
1999
|
{
|
|
1944
2000
|
value: selection.mode === "include" ? selection.ids[0] ?? "" : "",
|
|
1945
2001
|
onValueChange: (v) => v && setSelection({ mode: "include", ids: [v] }),
|
|
1946
|
-
children: wrapWithDnd(
|
|
2002
|
+
children: wrapWithDnd(composedContent)
|
|
1947
2003
|
}
|
|
1948
2004
|
);
|
|
1949
2005
|
}
|
|
1950
|
-
return wrapWithDnd(
|
|
2006
|
+
return wrapWithDnd(composedContent);
|
|
1951
2007
|
}
|
|
1952
2008
|
const DataTable = React.forwardRef(DataTableInner);
|
|
1953
2009
|
DataTable.displayName = "DataTable";
|
|
@@ -1957,7 +2013,9 @@ const dataTableMeta = {
|
|
|
1957
2013
|
// non-family composite / overlay / layout
|
|
1958
2014
|
variants: {},
|
|
1959
2015
|
sizes: {},
|
|
1960
|
-
|
|
2016
|
+
// 'active' 移除 — 全檔無 Tailwind 按壓 utility(rg `active:` 僅命中 dnd-kit `e.active` 物件),
|
|
2017
|
+
// 無按壓專屬視覺態;row action / drag handle 的按壓屬內嵌 Button meta(2026-07-07 對抗稽核補修)。
|
|
2018
|
+
states: ["default", "hover", "focus-visible", "disabled"],
|
|
1961
2019
|
tokens: {
|
|
1962
2020
|
bg: ["bg-muted", "bg-neutral-hover", "bg-surface"],
|
|
1963
2021
|
fg: ["text-fg-muted", "text-fg-secondary", "text-foreground"],
|