@chenzy-design/svelte 0.1.0 → 0.2.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/components.json +1 -1
- package/package.json +7 -8
- package/src/_floating/use-floating.ts +0 -208
- package/src/anchor/Anchor.a11y.test.ts +0 -49
- package/src/anchor/Anchor.kbd.test.ts +0 -70
- package/src/anchor/Anchor.svelte +0 -359
- package/src/anchor/AnchorKbdFixture.svelte +0 -24
- package/src/anchor/index.ts +0 -3
- package/src/anchor/meta.ts +0 -70
- package/src/anchor/types.ts +0 -8
- package/src/autocomplete/AutoComplete.a11y.test.ts +0 -49
- package/src/autocomplete/AutoComplete.kbd.test.ts +0 -69
- package/src/autocomplete/AutoComplete.svelte +0 -706
- package/src/autocomplete/AutoCompleteKbdFixture.svelte +0 -24
- package/src/autocomplete/index.ts +0 -2
- package/src/autocomplete/meta.ts +0 -41
- package/src/avatar/Avatar.a11y.test.ts +0 -37
- package/src/avatar/Avatar.svelte +0 -315
- package/src/avatar/AvatarGroup.svelte +0 -142
- package/src/avatar/context.ts +0 -21
- package/src/avatar/index.ts +0 -10
- package/src/avatar/meta.ts +0 -73
- package/src/back-top/BackTop.a11y.test.ts +0 -40
- package/src/back-top/BackTop.svelte +0 -314
- package/src/back-top/index.ts +0 -2
- package/src/back-top/meta.ts +0 -108
- package/src/badge/Badge.a11y.test.ts +0 -35
- package/src/badge/Badge.svelte +0 -328
- package/src/badge/BadgeA11yFixture.svelte +0 -18
- package/src/badge/index.ts +0 -2
- package/src/badge/meta.ts +0 -62
- package/src/banner/Banner.a11y.test.ts +0 -48
- package/src/banner/Banner.svelte +0 -368
- package/src/banner/index.ts +0 -3
- package/src/banner/meta.ts +0 -121
- package/src/breadcrumb/Breadcrumb.a11y.test.ts +0 -35
- package/src/breadcrumb/Breadcrumb.kbd.test.ts +0 -45
- package/src/breadcrumb/Breadcrumb.svelte +0 -414
- package/src/breadcrumb/BreadcrumbKbdFixture.svelte +0 -23
- package/src/breadcrumb/Item.svelte +0 -77
- package/src/breadcrumb/context.ts +0 -27
- package/src/breadcrumb/index.ts +0 -21
- package/src/breadcrumb/meta.ts +0 -128
- package/src/breadcrumb/types.ts +0 -4
- package/src/button/Button.a11y.test.ts +0 -54
- package/src/button/Button.svelte +0 -176
- package/src/button/index.ts +0 -2
- package/src/button/meta.ts +0 -28
- package/src/calendar/Calendar.a11y.test.ts +0 -51
- package/src/calendar/Calendar.kbd.test.ts +0 -59
- package/src/calendar/Calendar.svelte +0 -1344
- package/src/calendar/CalendarKbdFixture.svelte +0 -23
- package/src/calendar/index.ts +0 -3
- package/src/calendar/meta.ts +0 -117
- package/src/card/Card.a11y.test.ts +0 -38
- package/src/card/Card.svelte +0 -341
- package/src/card/CardMeta.svelte +0 -60
- package/src/card/index.ts +0 -8
- package/src/card/meta.ts +0 -83
- package/src/carousel/Carousel.a11y.test.ts +0 -53
- package/src/carousel/Carousel.kbd.test.ts +0 -67
- package/src/carousel/Carousel.svelte +0 -806
- package/src/carousel/CarouselA11yFixture.svelte +0 -25
- package/src/carousel/CarouselKbdFixture.svelte +0 -24
- package/src/carousel/index.ts +0 -2
- package/src/carousel/meta.ts +0 -74
- package/src/cascader/Cascader.a11y.test.ts +0 -59
- package/src/cascader/Cascader.kbd.test.ts +0 -56
- package/src/cascader/Cascader.svelte +0 -1570
- package/src/cascader/CascaderKbdFixture.svelte +0 -31
- package/src/cascader/index.ts +0 -3
- package/src/cascader/meta.ts +0 -57
- package/src/cascader/types.ts +0 -9
- package/src/checkbox/Checkbox.svelte +0 -281
- package/src/checkbox/CheckboxGroup.a11y.test.ts +0 -43
- package/src/checkbox/CheckboxGroup.kbd.test.ts +0 -40
- package/src/checkbox/CheckboxGroup.svelte +0 -122
- package/src/checkbox/CheckboxGroupKbdFixture.svelte +0 -20
- package/src/checkbox/context.ts +0 -31
- package/src/checkbox/index.ts +0 -4
- package/src/checkbox/meta.ts +0 -67
- package/src/collapse/Collapse.a11y.test.ts +0 -53
- package/src/collapse/Collapse.kbd.test.ts +0 -89
- package/src/collapse/Collapse.svelte +0 -406
- package/src/collapse/CollapseA11yFixture.svelte +0 -27
- package/src/collapse/CollapseKbdFixture.svelte +0 -25
- package/src/collapse/CollapsePanel.svelte +0 -102
- package/src/collapse/context.ts +0 -54
- package/src/collapse/index.ts +0 -17
- package/src/collapse/meta.ts +0 -79
- package/src/collapse/types.ts +0 -5
- package/src/color-picker/ColorPicker.a11y.test.ts +0 -60
- package/src/color-picker/ColorPicker.kbd.test.ts +0 -73
- package/src/color-picker/ColorPicker.svelte +0 -985
- package/src/color-picker/ColorPickerKbdFixture.svelte +0 -25
- package/src/color-picker/index.ts +0 -2
- package/src/color-picker/meta.ts +0 -47
- package/src/config-provider/ConfigProvider.svelte +0 -227
- package/src/config-provider/context.ts +0 -29
- package/src/config-provider/index.ts +0 -48
- package/src/config-provider/meta.ts +0 -128
- package/src/date-picker/DatePicker.a11y.test.ts +0 -45
- package/src/date-picker/DatePicker.kbd.test.ts +0 -71
- package/src/date-picker/DatePicker.svelte +0 -1798
- package/src/date-picker/DatePickerKbdFixture.svelte +0 -26
- package/src/date-picker/RangePicker.kbd.test.ts +0 -69
- package/src/date-picker/RangePicker.svelte +0 -775
- package/src/date-picker/RangePickerKbdFixture.svelte +0 -30
- package/src/date-picker/index.ts +0 -4
- package/src/date-picker/meta.ts +0 -67
- package/src/date-picker/range-meta.ts +0 -44
- package/src/descriptions/Descriptions.a11y.test.ts +0 -33
- package/src/descriptions/Descriptions.svelte +0 -287
- package/src/descriptions/DescriptionsItem.svelte +0 -43
- package/src/descriptions/context.ts +0 -21
- package/src/descriptions/index.ts +0 -16
- package/src/descriptions/meta.ts +0 -45
- package/src/descriptions/types.ts +0 -6
- package/src/divider/Divider.a11y.test.ts +0 -23
- package/src/divider/Divider.svelte +0 -154
- package/src/divider/index.ts +0 -2
- package/src/divider/meta.ts +0 -23
- package/src/drawer/Drawer.a11y.test.ts +0 -41
- package/src/drawer/Drawer.kbd.test.ts +0 -67
- package/src/drawer/Drawer.svelte +0 -554
- package/src/drawer/DrawerKbdFixture.svelte +0 -28
- package/src/drawer/index.ts +0 -2
- package/src/drawer/meta.ts +0 -127
- package/src/dropdown/Dropdown.a11y.test.ts +0 -46
- package/src/dropdown/Dropdown.kbd.test.ts +0 -56
- package/src/dropdown/Dropdown.svelte +0 -573
- package/src/dropdown/DropdownA11yFixture.svelte +0 -24
- package/src/dropdown/DropdownDivider.svelte +0 -17
- package/src/dropdown/DropdownItem.svelte +0 -127
- package/src/dropdown/DropdownItemNode.svelte +0 -355
- package/src/dropdown/DropdownKbdFixture.svelte +0 -26
- package/src/dropdown/DropdownMenu.svelte +0 -24
- package/src/dropdown/DropdownSubMenu.svelte +0 -212
- package/src/dropdown/DropdownTitle.svelte +0 -34
- package/src/dropdown/context.ts +0 -13
- package/src/dropdown/index.ts +0 -36
- package/src/dropdown/meta.ts +0 -97
- package/src/dropdown/types.test.ts +0 -50
- package/src/dropdown/types.ts +0 -67
- package/src/empty/Empty.a11y.test.ts +0 -24
- package/src/empty/Empty.svelte +0 -304
- package/src/empty/index.ts +0 -2
- package/src/empty/meta.ts +0 -41
- package/src/form/Field.svelte +0 -492
- package/src/form/FieldArray.svelte +0 -75
- package/src/form/Form.a11y.test.ts +0 -39
- package/src/form/Form.svelte +0 -243
- package/src/form/FormA11yFixture.svelte +0 -31
- package/src/form/FormCascader.svelte +0 -82
- package/src/form/FormCheckbox.svelte +0 -83
- package/src/form/FormDatePicker.svelte +0 -80
- package/src/form/FormErrorMessage.svelte +0 -44
- package/src/form/FormInput.svelte +0 -95
- package/src/form/FormLabel.svelte +0 -46
- package/src/form/FormRadio.svelte +0 -83
- package/src/form/FormRating.svelte +0 -85
- package/src/form/FormSection.svelte +0 -45
- package/src/form/FormSelect.svelte +0 -96
- package/src/form/FormSlider.svelte +0 -95
- package/src/form/FormSlot.svelte +0 -51
- package/src/form/FormSwitch.svelte +0 -82
- package/src/form/FormTagInput.svelte +0 -79
- package/src/form/FormTreeSelect.svelte +0 -85
- package/src/form/FormUpload.svelte +0 -92
- package/src/form/context.ts +0 -47
- package/src/form/index.ts +0 -22
- package/src/form/meta.ts +0 -85
- package/src/grid/Col.svelte +0 -142
- package/src/grid/Grid.a11y.test.ts +0 -14
- package/src/grid/GridA11yFixture.svelte +0 -12
- package/src/grid/Row.svelte +0 -116
- package/src/grid/index.ts +0 -3
- package/src/grid/meta.ts +0 -72
- package/src/grid/use-breakpoint.svelte.ts +0 -48
- package/src/highlight/Highlight.a11y.test.ts +0 -25
- package/src/highlight/Highlight.svelte +0 -99
- package/src/highlight/index.ts +0 -2
- package/src/highlight/meta.ts +0 -80
- package/src/icon/Icon.svelte +0 -156
- package/src/icon/index.ts +0 -2
- package/src/icon/meta.ts +0 -41
- package/src/image/Image.a11y.test.ts +0 -30
- package/src/image/Image.svelte +0 -387
- package/src/image/ImagePreview.kbd.test.ts +0 -52
- package/src/image/ImagePreview.svelte +0 -309
- package/src/image/ImagePreviewGroup.svelte +0 -93
- package/src/image/ImagePreviewKbdFixture.svelte +0 -32
- package/src/image/context.ts +0 -26
- package/src/image/index.ts +0 -15
- package/src/image/meta.ts +0 -131
- package/src/index.ts +0 -208
- package/src/input/Input.a11y.test.ts +0 -58
- package/src/input/Input.svelte +0 -505
- package/src/input/index.ts +0 -2
- package/src/input/meta.ts +0 -40
- package/src/input-number/InputNumber.a11y.test.ts +0 -43
- package/src/input-number/InputNumber.kbd.test.ts +0 -41
- package/src/input-number/InputNumber.svelte +0 -674
- package/src/input-number/InputNumberKbdFixture.svelte +0 -15
- package/src/input-number/index.ts +0 -2
- package/src/input-number/meta.ts +0 -65
- package/src/layout/Content.svelte +0 -37
- package/src/layout/Footer.svelte +0 -49
- package/src/layout/Header.svelte +0 -46
- package/src/layout/Layout.a11y.test.ts +0 -34
- package/src/layout/Layout.svelte +0 -60
- package/src/layout/LayoutA11yFixture.svelte +0 -21
- package/src/layout/Sider.svelte +0 -207
- package/src/layout/index.ts +0 -26
- package/src/layout/meta.ts +0 -116
- package/src/list/List.a11y.test.ts +0 -69
- package/src/list/List.bench.ts +0 -26
- package/src/list/List.kbd.test.ts +0 -71
- package/src/list/List.svelte +0 -920
- package/src/list/ListA11yFixture.svelte +0 -38
- package/src/list/ListBenchFixture.svelte +0 -22
- package/src/list/ListItem.svelte +0 -175
- package/src/list/ListKbdFixture.svelte +0 -31
- package/src/list/ListMeta.svelte +0 -73
- package/src/list/context.ts +0 -39
- package/src/list/index.ts +0 -21
- package/src/list/meta.ts +0 -99
- package/src/locale-provider/LocaleProvider.svelte +0 -110
- package/src/locale-provider/context.ts +0 -22
- package/src/locale-provider/index.ts +0 -21
- package/src/locale-provider/meta.ts +0 -93
- package/src/locale-provider/use-locale.ts +0 -25
- package/src/lottie-icon/LottieIcon.svelte +0 -330
- package/src/lottie-icon/index.ts +0 -9
- package/src/lottie-icon/meta.ts +0 -162
- package/src/menu/Menu.a11y.test.ts +0 -54
- package/src/menu/Menu.kbd.test.ts +0 -69
- package/src/menu/Menu.svelte +0 -762
- package/src/menu/MenuKbdFixture.svelte +0 -22
- package/src/menu/MenuPopupNode.svelte +0 -525
- package/src/menu/index.ts +0 -4
- package/src/menu/meta.ts +0 -137
- package/src/menu/types.ts +0 -120
- package/src/meta.test.ts +0 -173
- package/src/modal/ConfirmModal.svelte +0 -173
- package/src/modal/Modal.a11y.test.ts +0 -46
- package/src/modal/Modal.kbd.test.ts +0 -65
- package/src/modal/Modal.svelte +0 -511
- package/src/modal/ModalKbdFixture.svelte +0 -24
- package/src/modal/command.svelte.ts +0 -103
- package/src/modal/index.ts +0 -30
- package/src/modal/meta.ts +0 -165
- package/src/modal/z-stack.ts +0 -26
- package/src/notification/NotificationContainer.svelte +0 -192
- package/src/notification/NotificationItem.a11y.test.ts +0 -73
- package/src/notification/NotificationItem.svelte +0 -368
- package/src/notification/index.ts +0 -9
- package/src/notification/meta.ts +0 -120
- package/src/notification/store.ts +0 -191
- package/src/overflow-list/OverflowList.a11y.test.ts +0 -46
- package/src/overflow-list/OverflowList.kbd.test.ts +0 -34
- package/src/overflow-list/OverflowList.svelte +0 -539
- package/src/overflow-list/OverflowListA11yFixture.svelte +0 -22
- package/src/overflow-list/OverflowListKbdFixture.svelte +0 -21
- package/src/overflow-list/index.ts +0 -2
- package/src/overflow-list/meta.ts +0 -138
- package/src/pagination/Pagination.a11y.test.ts +0 -62
- package/src/pagination/Pagination.kbd.test.ts +0 -66
- package/src/pagination/Pagination.svelte +0 -428
- package/src/pagination/PaginationKbdFixture.svelte +0 -15
- package/src/pagination/index.ts +0 -2
- package/src/pagination/meta.ts +0 -73
- package/src/popconfirm/Popconfirm.a11y.test.ts +0 -46
- package/src/popconfirm/Popconfirm.kbd.test.ts +0 -42
- package/src/popconfirm/Popconfirm.svelte +0 -724
- package/src/popconfirm/PopconfirmA11yFixture.svelte +0 -34
- package/src/popconfirm/PopconfirmKbdFixture.svelte +0 -17
- package/src/popconfirm/index.ts +0 -2
- package/src/popconfirm/meta.ts +0 -200
- package/src/popover/Popover.a11y.test.ts +0 -58
- package/src/popover/Popover.kbd.test.ts +0 -42
- package/src/popover/Popover.svelte +0 -643
- package/src/popover/PopoverA11yFixture.svelte +0 -35
- package/src/popover/PopoverKbdFixture.svelte +0 -18
- package/src/popover/index.ts +0 -2
- package/src/popover/meta.ts +0 -103
- package/src/progress/Progress.a11y.test.ts +0 -37
- package/src/progress/Progress.svelte +0 -423
- package/src/progress/index.ts +0 -3
- package/src/progress/meta.ts +0 -132
- package/src/radio/Radio.svelte +0 -330
- package/src/radio/RadioGroup.a11y.test.ts +0 -43
- package/src/radio/RadioGroup.kbd.test.ts +0 -75
- package/src/radio/RadioGroup.svelte +0 -199
- package/src/radio/RadioGroupKbdFixture.svelte +0 -21
- package/src/radio/context.ts +0 -42
- package/src/radio/index.ts +0 -4
- package/src/radio/meta.ts +0 -68
- package/src/rating/Rating.a11y.test.ts +0 -41
- package/src/rating/Rating.kbd.test.ts +0 -48
- package/src/rating/Rating.svelte +0 -407
- package/src/rating/RatingKbdFixture.svelte +0 -15
- package/src/rating/index.ts +0 -2
- package/src/rating/meta.ts +0 -40
- package/src/resize-observer/ResizeObserver.svelte +0 -169
- package/src/resize-observer/action.ts +0 -80
- package/src/resize-observer/index.ts +0 -9
- package/src/resize-observer/meta.ts +0 -102
- package/src/scroll-list/ScrollColumn.svelte +0 -592
- package/src/scroll-list/ScrollList.svelte +0 -257
- package/src/scroll-list/index.ts +0 -4
- package/src/scroll-list/meta.ts +0 -93
- package/src/scroll-list/types.ts +0 -18
- package/src/select/Select.a11y.test.ts +0 -59
- package/src/select/Select.kbd.test.ts +0 -59
- package/src/select/Select.svelte +0 -1155
- package/src/select/SelectKbdFixture.svelte +0 -29
- package/src/select/index.ts +0 -3
- package/src/select/meta.ts +0 -78
- package/src/select/types.ts +0 -2
- package/src/side-sheet/SideSheet.a11y.test.ts +0 -53
- package/src/side-sheet/SideSheet.kbd.test.ts +0 -63
- package/src/side-sheet/SideSheet.svelte +0 -659
- package/src/side-sheet/SideSheetKbdFixture.svelte +0 -30
- package/src/side-sheet/index.ts +0 -2
- package/src/side-sheet/meta.ts +0 -116
- package/src/skeleton/Skeleton.a11y.test.ts +0 -35
- package/src/skeleton/Skeleton.svelte +0 -131
- package/src/skeleton/SkeletonAvatar.svelte +0 -82
- package/src/skeleton/SkeletonButton.svelte +0 -90
- package/src/skeleton/SkeletonImage.svelte +0 -100
- package/src/skeleton/SkeletonParagraph.svelte +0 -103
- package/src/skeleton/SkeletonTitle.svelte +0 -74
- package/src/skeleton/context.ts +0 -11
- package/src/skeleton/index.ts +0 -8
- package/src/skeleton/meta.ts +0 -65
- package/src/slider/Slider.a11y.test.ts +0 -44
- package/src/slider/Slider.kbd.test.ts +0 -74
- package/src/slider/Slider.svelte +0 -716
- package/src/slider/SliderKbdFixture.svelte +0 -21
- package/src/slider/index.ts +0 -2
- package/src/slider/meta.ts +0 -55
- package/src/space/Space.a11y.test.ts +0 -22
- package/src/space/Space.svelte +0 -109
- package/src/space/SpaceA11yFixture.svelte +0 -17
- package/src/space/index.ts +0 -2
- package/src/space/meta.ts +0 -27
- package/src/spin/Spin.a11y.test.ts +0 -29
- package/src/spin/Spin.svelte +0 -293
- package/src/spin/SpinA11yFixture.svelte +0 -18
- package/src/spin/index.ts +0 -2
- package/src/spin/meta.ts +0 -72
- package/src/steps/Steps.a11y.test.ts +0 -39
- package/src/steps/Steps.kbd.test.ts +0 -73
- package/src/steps/Steps.svelte +0 -392
- package/src/steps/StepsKbdFixture.svelte +0 -21
- package/src/steps/index.ts +0 -3
- package/src/steps/meta.ts +0 -59
- package/src/steps/types.ts +0 -8
- package/src/switch/Switch.a11y.test.ts +0 -46
- package/src/switch/Switch.kbd.test.ts +0 -40
- package/src/switch/Switch.svelte +0 -310
- package/src/switch/SwitchKbdFixture.svelte +0 -22
- package/src/switch/index.ts +0 -2
- package/src/switch/meta.ts +0 -44
- package/src/table/Table.a11y.test.ts +0 -70
- package/src/table/Table.bench.ts +0 -51
- package/src/table/Table.kbd.test.ts +0 -94
- package/src/table/Table.svelte +0 -2327
- package/src/table/TableKbdFixture.svelte +0 -35
- package/src/table/grid-nav.test.ts +0 -173
- package/src/table/grid-nav.ts +0 -146
- package/src/table/index.ts +0 -13
- package/src/table/meta.ts +0 -121
- package/src/table/types.ts +0 -133
- package/src/tabs/TabPane.svelte +0 -92
- package/src/tabs/Tabs.a11y.test.ts +0 -47
- package/src/tabs/Tabs.kbd.test.ts +0 -74
- package/src/tabs/Tabs.svelte +0 -1128
- package/src/tabs/TabsA11yFixture.svelte +0 -20
- package/src/tabs/TabsKbdFixture.svelte +0 -25
- package/src/tabs/context.ts +0 -43
- package/src/tabs/index.ts +0 -14
- package/src/tabs/meta.ts +0 -152
- package/src/tabs/types.ts +0 -6
- package/src/tag/Tag.a11y.test.ts +0 -33
- package/src/tag/Tag.svelte +0 -366
- package/src/tag/TagA11yFixture.svelte +0 -18
- package/src/tag/index.ts +0 -2
- package/src/tag/meta.ts +0 -92
- package/src/tag-input/TagInput.a11y.test.ts +0 -41
- package/src/tag-input/TagInput.svelte +0 -544
- package/src/tag-input/index.ts +0 -2
- package/src/tag-input/meta.ts +0 -43
- package/src/tag-input/reorder.test.ts +0 -59
- package/src/tag-input/reorder.ts +0 -41
- package/src/test-utils/LocaleHarness.svelte +0 -29
- package/src/test-utils/a11y.ts +0 -108
- package/src/test-utils/kbd.ts +0 -52
- package/src/textarea/TextArea.a11y.test.ts +0 -44
- package/src/textarea/TextArea.svelte +0 -420
- package/src/textarea/index.ts +0 -2
- package/src/textarea/meta.ts +0 -104
- package/src/time-picker/TimePicker.a11y.test.ts +0 -45
- package/src/time-picker/TimePicker.kbd.test.ts +0 -70
- package/src/time-picker/TimePicker.svelte +0 -1023
- package/src/time-picker/TimePickerKbdFixture.svelte +0 -23
- package/src/time-picker/index.ts +0 -2
- package/src/time-picker/meta.ts +0 -64
- package/src/timeline/Timeline.a11y.test.ts +0 -54
- package/src/timeline/Timeline.svelte +0 -599
- package/src/timeline/TimelineItem.svelte +0 -164
- package/src/timeline/context.ts +0 -28
- package/src/timeline/index.ts +0 -16
- package/src/timeline/meta.ts +0 -129
- package/src/timeline/types.ts +0 -9
- package/src/toast/Toast.a11y.test.ts +0 -67
- package/src/toast/ToastContainer.svelte +0 -184
- package/src/toast/ToastItem.svelte +0 -247
- package/src/toast/index.ts +0 -9
- package/src/toast/live-region.ts +0 -78
- package/src/toast/meta.ts +0 -95
- package/src/toast/store.ts +0 -187
- package/src/tooltip/Tooltip.a11y.test.ts +0 -41
- package/src/tooltip/Tooltip.kbd.test.ts +0 -37
- package/src/tooltip/Tooltip.svelte +0 -416
- package/src/tooltip/TooltipA11yFixture.svelte +0 -31
- package/src/tooltip/TooltipKbdFixture.svelte +0 -16
- package/src/tooltip/index.ts +0 -2
- package/src/tooltip/meta.ts +0 -59
- package/src/tooltip/placement.ts +0 -6
- package/src/transfer/Transfer.a11y.test.ts +0 -63
- package/src/transfer/Transfer.kbd.test.ts +0 -75
- package/src/transfer/Transfer.svelte +0 -1451
- package/src/transfer/TransferKbdFixture.svelte +0 -23
- package/src/transfer/group.test.ts +0 -55
- package/src/transfer/group.ts +0 -61
- package/src/transfer/index.ts +0 -3
- package/src/transfer/meta.ts +0 -55
- package/src/transfer/reorder.test.ts +0 -52
- package/src/transfer/reorder.ts +0 -42
- package/src/transfer/tree.test.ts +0 -44
- package/src/transfer/tree.ts +0 -52
- package/src/transfer/types.ts +0 -32
- package/src/tree/Tree.a11y.test.ts +0 -63
- package/src/tree/Tree.kbd.test.ts +0 -91
- package/src/tree/Tree.svelte +0 -1500
- package/src/tree/TreeKbdFixture.svelte +0 -30
- package/src/tree/index.ts +0 -3
- package/src/tree/meta.ts +0 -152
- package/src/tree-select/TreeSelect.a11y.test.ts +0 -52
- package/src/tree-select/TreeSelect.kbd.test.ts +0 -53
- package/src/tree-select/TreeSelect.svelte +0 -1611
- package/src/tree-select/TreeSelectKbdFixture.svelte +0 -20
- package/src/tree-select/index.ts +0 -3
- package/src/tree-select/meta.ts +0 -73
- package/src/tree-select/types.ts +0 -11
- package/src/tree-select/virtual.test.ts +0 -104
- package/src/typography/Link.svelte +0 -120
- package/src/typography/Paragraph.svelte +0 -92
- package/src/typography/Text.svelte +0 -93
- package/src/typography/Title.svelte +0 -91
- package/src/typography/Typography.a11y.test.ts +0 -34
- package/src/typography/TypographyA11yFixture.svelte +0 -27
- package/src/typography/TypographyBase.svelte +0 -807
- package/src/typography/index.ts +0 -16
- package/src/typography/meta.ts +0 -158
- package/src/upload/Upload.a11y.test.ts +0 -58
- package/src/upload/Upload.svelte +0 -1094
- package/src/upload/UploadA11yFixture.svelte +0 -23
- package/src/upload/index.ts +0 -3
- package/src/upload/meta.ts +0 -64
- package/src/upload/types.ts +0 -16
- package/src/virtual-list/VirtualList.svelte +0 -401
- package/src/virtual-list/index.ts +0 -2
- package/src/virtual-list/meta.ts +0 -106
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
仅供 Table.kbd.test.ts(browser project)使用的键盘 e2e 夹具。
|
|
3
|
-
交互态(列带 sorter)下 Table 升级为 WAI-ARIA Grid Pattern:role=grid +
|
|
4
|
-
columnheader/gridcell + 单元格 roving tabindex。前后各放一个按钮,验证
|
|
5
|
-
Tab 进入 grid 只停在单一 roving 单元格(roving 单停靠点),而非逐格进 Tab 序。
|
|
6
|
-
-->
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import { LocaleProvider } from '../locale-provider/index.js';
|
|
9
|
-
import Table from './Table.svelte';
|
|
10
|
-
|
|
11
|
-
interface Row {
|
|
12
|
-
key: string;
|
|
13
|
-
name: string;
|
|
14
|
-
age: number;
|
|
15
|
-
[k: string]: unknown;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const dataSource: Row[] = [
|
|
19
|
-
{ key: '1', name: 'Alice', age: 30 },
|
|
20
|
-
{ key: '2', name: 'Bob', age: 25 },
|
|
21
|
-
{ key: '3', name: 'Carol', age: 28 },
|
|
22
|
-
];
|
|
23
|
-
|
|
24
|
-
// 列带 sorter → isInteractive → gridEnabled,触发 grid 键盘漫游。
|
|
25
|
-
const columns = [
|
|
26
|
-
{ key: 'name', dataIndex: 'name', title: 'Name', sorter: true },
|
|
27
|
-
{ key: 'age', dataIndex: 'age', title: 'Age', sorter: true },
|
|
28
|
-
];
|
|
29
|
-
</script>
|
|
30
|
-
|
|
31
|
-
<LocaleProvider locale="en_US">
|
|
32
|
-
<button type="button" data-testid="before">before</button>
|
|
33
|
-
<Table {columns} {dataSource} rowKey="key" ariaLabel="Users grid" />
|
|
34
|
-
<button type="button" data-testid="after">after</button>
|
|
35
|
-
</LocaleProvider>
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import {
|
|
3
|
-
buildGridCols,
|
|
4
|
-
nextGridCoord,
|
|
5
|
-
isFocusCell,
|
|
6
|
-
rovingTabindexAt,
|
|
7
|
-
type GridCoord,
|
|
8
|
-
} from './grid-nav.js';
|
|
9
|
-
|
|
10
|
-
// Table 交互态 Grid Pattern 二维漫游纯逻辑用例(WAI-ARIA APG Grid)。
|
|
11
|
-
// 渲染层把 row=-1 当表头、0..n-1 当数据行,col 索引进 buildGridCols 扁平表。
|
|
12
|
-
// 委托键盘事件无法可靠合成(红线),故对纯坐标算法做穷尽边界测试。
|
|
13
|
-
|
|
14
|
-
const params = (over: Partial<Parameters<typeof nextGridCoord>[2]> = {}) => ({
|
|
15
|
-
current: { row: 0, col: 0 } as GridCoord,
|
|
16
|
-
rowCount: 5,
|
|
17
|
-
colCount: 4,
|
|
18
|
-
pageRows: 3,
|
|
19
|
-
...over,
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const move = (
|
|
23
|
-
key: string,
|
|
24
|
-
current: GridCoord,
|
|
25
|
-
over: Partial<Parameters<typeof nextGridCoord>[2]> = {},
|
|
26
|
-
mods: { ctrl?: boolean; meta?: boolean } = {},
|
|
27
|
-
) => nextGridCoord(key, mods, params({ ...over, current }));
|
|
28
|
-
|
|
29
|
-
describe('buildGridCols — 网格列扁平表', () => {
|
|
30
|
-
it('仅数据列时 1:1 映射', () => {
|
|
31
|
-
const cols = buildGridCols({ hasExpand: false, hasSelection: false, dataColumnCount: 3 });
|
|
32
|
-
expect(cols).toEqual([
|
|
33
|
-
{ kind: 'data', dataCol: 0 },
|
|
34
|
-
{ kind: 'data', dataCol: 1 },
|
|
35
|
-
{ kind: 'data', dataCol: 2 },
|
|
36
|
-
]);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('expand + selection 前置占位列在数据列之前', () => {
|
|
40
|
-
const cols = buildGridCols({ hasExpand: true, hasSelection: true, dataColumnCount: 2 });
|
|
41
|
-
expect(cols.map((c) => c.kind)).toEqual(['expand', 'selection', 'data', 'data']);
|
|
42
|
-
// 第一个数据列的网格列索引 = 2(前置 2 列)
|
|
43
|
-
expect(cols.findIndex((c) => c.kind === 'data')).toBe(2);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('仅 selection 时占位 1 列', () => {
|
|
47
|
-
const cols = buildGridCols({ hasExpand: false, hasSelection: true, dataColumnCount: 1 });
|
|
48
|
-
expect(cols.map((c) => c.kind)).toEqual(['selection', 'data']);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
describe('roving tabindex — 单一 Tab 停靠点派生', () => {
|
|
53
|
-
it('未聚焦时表头首格 (-1,0) 为唯一 tabindex=0', () => {
|
|
54
|
-
const focus = { row: 0, col: 0, hasFocused: false };
|
|
55
|
-
expect(isFocusCell(-1, 0, focus)).toBe(true);
|
|
56
|
-
expect(rovingTabindexAt(-1, 0, focus)).toBe(0);
|
|
57
|
-
// 其余全部 -1
|
|
58
|
-
expect(rovingTabindexAt(0, 0, focus)).toBe(-1);
|
|
59
|
-
expect(rovingTabindexAt(-1, 1, focus)).toBe(-1);
|
|
60
|
-
expect(rovingTabindexAt(2, 3, focus)).toBe(-1);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('聚焦后仅当前焦点坐标 tabindex=0,其余 -1', () => {
|
|
64
|
-
const focus = { row: 2, col: 1, hasFocused: true };
|
|
65
|
-
expect(rovingTabindexAt(2, 1, focus)).toBe(0);
|
|
66
|
-
// 同行不同列 / 同列不同行 / 表头 均 -1(整 grid 单一停靠点)
|
|
67
|
-
expect(rovingTabindexAt(2, 0, focus)).toBe(-1);
|
|
68
|
-
expect(rovingTabindexAt(1, 1, focus)).toBe(-1);
|
|
69
|
-
expect(rovingTabindexAt(-1, 0, focus)).toBe(-1);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('聚焦后表头首格不再是停靠点', () => {
|
|
73
|
-
const focus = { row: 0, col: 0, hasFocused: true };
|
|
74
|
-
expect(isFocusCell(-1, 0, focus)).toBe(false);
|
|
75
|
-
expect(isFocusCell(0, 0, focus)).toBe(true);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
describe('nextGridCoord — 行向漫游(↑↓)', () => {
|
|
80
|
-
it('ArrowDown 逐行下移', () => {
|
|
81
|
-
expect(move('ArrowDown', { row: 0, col: 1 })).toEqual({ row: 1, col: 1 });
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('ArrowDown 到最后一行后 clamp(不环绕)', () => {
|
|
85
|
-
expect(move('ArrowDown', { row: 4, col: 1 })).toEqual({ row: 4, col: 1 });
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it('ArrowUp 从首数据行回到表头行(-1)', () => {
|
|
89
|
-
expect(move('ArrowUp', { row: 0, col: 2 })).toEqual({ row: -1, col: 2 });
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it('ArrowUp 在表头行 clamp 到 -1(不越过表头)', () => {
|
|
93
|
-
expect(move('ArrowUp', { row: -1, col: 2 })).toEqual({ row: -1, col: 2 });
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('ArrowDown 从表头进入首数据行', () => {
|
|
97
|
-
expect(move('ArrowDown', { row: -1, col: 0 })).toEqual({ row: 0, col: 0 });
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
describe('nextGridCoord — 列向漫游(←→)', () => {
|
|
102
|
-
it('ArrowRight 逐列右移', () => {
|
|
103
|
-
expect(move('ArrowRight', { row: 2, col: 0 })).toEqual({ row: 2, col: 1 });
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it('ArrowRight 到末列 clamp(不环绕)', () => {
|
|
107
|
-
expect(move('ArrowRight', { row: 2, col: 3 })).toEqual({ row: 2, col: 3 });
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
it('ArrowLeft 到首列 clamp(不环绕)', () => {
|
|
111
|
-
expect(move('ArrowLeft', { row: 2, col: 0 })).toEqual({ row: 2, col: 0 });
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
describe('nextGridCoord — Home / End(行内)', () => {
|
|
116
|
-
it('Home 跳行内首列,行不变', () => {
|
|
117
|
-
expect(move('Home', { row: 3, col: 2 })).toEqual({ row: 3, col: 0 });
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('End 跳行内末列,行不变', () => {
|
|
121
|
-
expect(move('End', { row: 3, col: 1 })).toEqual({ row: 3, col: 3 });
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
describe('nextGridCoord — Ctrl/Cmd+Home / End(表格首末)', () => {
|
|
126
|
-
it('Ctrl+Home 跳表头首格 (-1,0)', () => {
|
|
127
|
-
expect(move('Home', { row: 4, col: 3 }, {}, { ctrl: true })).toEqual({ row: -1, col: 0 });
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it('Cmd+End 跳末数据行末格', () => {
|
|
131
|
-
expect(move('End', { row: 0, col: 0 }, {}, { meta: true })).toEqual({ row: 4, col: 3 });
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
describe('nextGridCoord — PageUp / PageDown(翻屏)', () => {
|
|
136
|
-
it('PageDown 下翻 pageRows 行', () => {
|
|
137
|
-
expect(move('PageDown', { row: 0, col: 1 }, { pageRows: 3 })).toEqual({ row: 3, col: 1 });
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it('PageDown 越界 clamp 到末行', () => {
|
|
141
|
-
expect(move('PageDown', { row: 3, col: 1 }, { pageRows: 3 })).toEqual({ row: 4, col: 1 });
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('PageUp 上翻 pageRows 行', () => {
|
|
145
|
-
expect(move('PageUp', { row: 4, col: 2 }, { pageRows: 3 })).toEqual({ row: 1, col: 2 });
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
it('PageUp 越界 clamp 到表头行(-1)', () => {
|
|
149
|
-
expect(move('PageUp', { row: 1, col: 2 }, { pageRows: 3 })).toEqual({ row: -1, col: 2 });
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it('PageDown 从表头落到首屏末行', () => {
|
|
153
|
-
expect(move('PageDown', { row: -1, col: 0 }, { pageRows: 3 })).toEqual({ row: 2, col: 0 });
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
describe('nextGridCoord — 非漫游键 / 边界', () => {
|
|
158
|
-
it('非漫游键返回 null(不拦截)', () => {
|
|
159
|
-
expect(move('a', { row: 0, col: 0 })).toBeNull();
|
|
160
|
-
expect(move('Tab', { row: 0, col: 0 })).toBeNull();
|
|
161
|
-
expect(move('Enter', { row: 0, col: 0 })).toBeNull();
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
it('空数据表(rowCount=0)下移仍 clamp 到表头行', () => {
|
|
165
|
-
expect(move('ArrowDown', { row: -1, col: 0 }, { rowCount: 0 })).toEqual({ row: -1, col: 0 });
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
it('不修改入参坐标对象(纯函数)', () => {
|
|
169
|
-
const cur = { row: 0, col: 0 };
|
|
170
|
-
nextGridCoord('ArrowDown', {}, params({ current: cur }));
|
|
171
|
-
expect(cur).toEqual({ row: 0, col: 0 });
|
|
172
|
-
});
|
|
173
|
-
});
|
package/src/table/grid-nav.ts
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Table 交互态 Grid Pattern — 纯函数二维漫游核心(与 DOM/Svelte 无关,可单测)。
|
|
3
|
-
*
|
|
4
|
-
* 焦点坐标用「逻辑索引」表示:
|
|
5
|
-
* - row: -1 = 表头行;0..rowCount-1 = 数据行(逻辑序,与虚拟化是否渲染无关)。
|
|
6
|
-
* - col: 索引进「网格列」扁平表 [expand?, selection?, ...dataColumns]。
|
|
7
|
-
*
|
|
8
|
-
* 渲染层持有 row/col 的 $state 与命令式 focus(),本模块只据按键算「下一坐标」
|
|
9
|
-
* (WAI-ARIA APG Grid Pattern 二维漫游 + Home/End/Ctrl+Home/End/PageUp/PageDown)。
|
|
10
|
-
*
|
|
11
|
-
* See specs/components/show/Table.spec.md §6(无障碍 · grid 键盘)。
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { nextRovingIndex } from '@chenzy-design/core';
|
|
15
|
-
|
|
16
|
-
export type GridColKind = 'expand' | 'selection' | 'data';
|
|
17
|
-
export interface GridCol {
|
|
18
|
-
kind: GridColKind;
|
|
19
|
-
/** data 列对应的原 columns 索引;非 data 列为 -1 */
|
|
20
|
-
dataCol: number;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface GridCoord {
|
|
24
|
-
/** -1 = 表头行;>=0 = 数据行逻辑索引 */
|
|
25
|
-
row: number;
|
|
26
|
-
/** 网格列索引 */
|
|
27
|
-
col: number;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* 构建网格列扁平表:前置 expand / selection 占位列 + 数据列。
|
|
32
|
-
* 仅用于焦点坐标 ↔ 实际列的换算。
|
|
33
|
-
*/
|
|
34
|
-
export function buildGridCols(opts: {
|
|
35
|
-
hasExpand: boolean;
|
|
36
|
-
hasSelection: boolean;
|
|
37
|
-
dataColumnCount: number;
|
|
38
|
-
}): GridCol[] {
|
|
39
|
-
const out: GridCol[] = [];
|
|
40
|
-
if (opts.hasExpand) out.push({ kind: 'expand', dataCol: -1 });
|
|
41
|
-
if (opts.hasSelection) out.push({ kind: 'selection', dataCol: -1 });
|
|
42
|
-
for (let i = 0; i < opts.dataColumnCount; i++) {
|
|
43
|
-
out.push({ kind: 'data', dataCol: i });
|
|
44
|
-
}
|
|
45
|
-
return out;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* 某 (row,col) 是否为当前 roving 焦点格(纯函数,render 期只读)。
|
|
50
|
-
* 未聚焦过(hasFocused=false)时,首个 tab 停靠点固定为表头首格 (-1, 0)。
|
|
51
|
-
*/
|
|
52
|
-
export function isFocusCell(
|
|
53
|
-
row: number,
|
|
54
|
-
col: number,
|
|
55
|
-
focus: { row: number; col: number; hasFocused: boolean },
|
|
56
|
-
): boolean {
|
|
57
|
-
if (!focus.hasFocused) return row === -1 && col === 0;
|
|
58
|
-
return row === focus.row && col === focus.col;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* 单元格 roving tabindex:焦点格 0,其余 -1(WAI-ARIA roving,单一 Tab 停靠点)。
|
|
63
|
-
*/
|
|
64
|
-
export function rovingTabindexAt(
|
|
65
|
-
row: number,
|
|
66
|
-
col: number,
|
|
67
|
-
focus: { row: number; col: number; hasFocused: boolean },
|
|
68
|
-
): 0 | -1 {
|
|
69
|
-
return isFocusCell(row, col, focus) ? 0 : -1;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export interface GridNavParams {
|
|
73
|
-
/** 当前焦点坐标 */
|
|
74
|
-
current: GridCoord;
|
|
75
|
-
/** 数据行数(不含表头) */
|
|
76
|
-
rowCount: number;
|
|
77
|
-
/** 网格列数 */
|
|
78
|
-
colCount: number;
|
|
79
|
-
/** PageUp/PageDown 每次翻动的行数(>=1) */
|
|
80
|
-
pageRows: number;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* 据键盘事件 key + 修饰键算出下一焦点坐标(纯函数,不改入参)。
|
|
85
|
-
* 返回 null 表示该键不是漫游键(不处理)。
|
|
86
|
-
*
|
|
87
|
-
* 行向:ArrowUp/Down 逐行(表头 row=-1 为上界,最后数据行为下界,不环绕)。
|
|
88
|
-
* 列向:ArrowLeft/Right 逐列(复用 core nextRovingIndex,clamp 不环绕)。
|
|
89
|
-
* Home/End:行内首/末列;Ctrl/Cmd+Home/End:跳表头首格 / 末数据行末格。
|
|
90
|
-
* PageUp/PageDown:上/下翻 pageRows 行(clamp 到 [-1, lastRow])。
|
|
91
|
-
*/
|
|
92
|
-
export function nextGridCoord(
|
|
93
|
-
key: string,
|
|
94
|
-
modifiers: { ctrl?: boolean; meta?: boolean },
|
|
95
|
-
params: GridNavParams,
|
|
96
|
-
): GridCoord | null {
|
|
97
|
-
const { current, rowCount, colCount, pageRows } = params;
|
|
98
|
-
const lastRow = rowCount - 1;
|
|
99
|
-
const lastCol = colCount - 1;
|
|
100
|
-
const ctrlOrMeta = !!modifiers.ctrl || !!modifiers.meta;
|
|
101
|
-
let { row, col } = current;
|
|
102
|
-
|
|
103
|
-
switch (key) {
|
|
104
|
-
case 'ArrowUp':
|
|
105
|
-
row = row <= -1 ? -1 : row - 1;
|
|
106
|
-
break;
|
|
107
|
-
case 'ArrowDown':
|
|
108
|
-
row = row >= lastRow ? lastRow : row + 1;
|
|
109
|
-
break;
|
|
110
|
-
case 'ArrowLeft':
|
|
111
|
-
col = nextRovingIndex(col, colCount, 'prev');
|
|
112
|
-
break;
|
|
113
|
-
case 'ArrowRight':
|
|
114
|
-
col = nextRovingIndex(col, colCount, 'next');
|
|
115
|
-
break;
|
|
116
|
-
case 'Home':
|
|
117
|
-
if (ctrlOrMeta) {
|
|
118
|
-
row = -1;
|
|
119
|
-
col = 0;
|
|
120
|
-
} else {
|
|
121
|
-
col = 0;
|
|
122
|
-
}
|
|
123
|
-
break;
|
|
124
|
-
case 'End':
|
|
125
|
-
if (ctrlOrMeta) {
|
|
126
|
-
row = lastRow;
|
|
127
|
-
col = lastCol;
|
|
128
|
-
} else {
|
|
129
|
-
col = lastCol;
|
|
130
|
-
}
|
|
131
|
-
break;
|
|
132
|
-
case 'PageDown':
|
|
133
|
-
row = row < 0 ? Math.min(lastRow, pageRows - 1) : Math.min(lastRow, row + pageRows);
|
|
134
|
-
break;
|
|
135
|
-
case 'PageUp':
|
|
136
|
-
row = row < 0 ? -1 : Math.max(-1, row - pageRows);
|
|
137
|
-
break;
|
|
138
|
-
default:
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// colCount 为 0 时 col clamp 到 0;lastRow < -1(无数据行)时 row 不超过 -1。
|
|
143
|
-
if (lastRow < -1) row = -1;
|
|
144
|
-
if (row > lastRow && lastRow >= -1) row = Math.max(-1, lastRow);
|
|
145
|
-
return { row, col };
|
|
146
|
-
}
|
package/src/table/index.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export { default as Table } from './Table.svelte';
|
|
2
|
-
export { meta as tableMeta } from './meta.js';
|
|
3
|
-
export type {
|
|
4
|
-
ColumnDef,
|
|
5
|
-
RowSelection,
|
|
6
|
-
Expandable,
|
|
7
|
-
TreeTable,
|
|
8
|
-
TableChangeInfo,
|
|
9
|
-
TableChangeAction,
|
|
10
|
-
TableScrollInfo,
|
|
11
|
-
ScrollConfig,
|
|
12
|
-
} from './types.js';
|
|
13
|
-
export type { RowKey, SortState, SortOrder } from '@chenzy-design/core';
|
package/src/table/meta.ts
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Machine-readable component metadata for AI/docs consumption.
|
|
3
|
-
* Table — see specs/components/show/Table.spec.md
|
|
4
|
-
*/
|
|
5
|
-
export const meta = {
|
|
6
|
-
name: 'Table',
|
|
7
|
-
category: 'show',
|
|
8
|
-
description:
|
|
9
|
-
'表格:列定义驱动渲染,三态排序(升/降/无)、客户端分页、行选择(含半选 indeterminate);sortState / rowSelection.selectedRowKeys / pagination.current 受控不回写,仅经 onSortChange / onChange 通知。复用 @chenzy-design/core 纯函数算法与 Pagination 组件。支持行展开 expandable(受控/非受控)。固定列 fixed、列筛选 filters/onFilter、列宽拖拽 resizable(本地覆盖宽度不写回 columns)。树形数据 tree(行含 children 自动嵌套,第一列展开三角+缩进,排序/分页作用于顶层行,扁平化用 core flattenTreeRows 纯函数,受控展开 keys 不回写)。树形行选择父子联动 rowSelection.checkStrictly(默认 false 勾父连带后代+半选,true 父子独立;联动用 core conductRows/toggleRowCheck 纯函数)。行虚拟滚动 virtualized:仅渲染视口内行切片(复用 core fixedRange),首尾 padding spacer tr 撑总高,保持原生 table 语义;thead sticky 固定顶部;与 pagination 互斥(虚拟时忽略分页)。',
|
|
10
|
-
exports: ['Table'],
|
|
11
|
-
props: [
|
|
12
|
-
{ name: 'columns', type: 'ColumnDef<T>[]', default: '[]', desc: '列定义:key/dataIndex/title/width/fixed/resizable/align/ellipsis/sorter/filters/onFilter/render' },
|
|
13
|
-
{ name: 'dataSource', type: 'T[]', default: '[]', desc: '数据行' },
|
|
14
|
-
{ name: 'rowKey', type: "string | ((record: T) => RowKey)", default: "'key'", desc: '行唯一键解析' },
|
|
15
|
-
{ name: 'size', type: "'small'|'default'|'large'", default: "'default'" },
|
|
16
|
-
{ name: 'bordered', type: 'boolean', default: 'false', desc: '单元格边框' },
|
|
17
|
-
{ name: 'stripe', type: 'boolean', default: 'false', desc: '斑马纹' },
|
|
18
|
-
{ name: 'loading', type: 'boolean', default: 'false', desc: '半透明遮罩 + spinner' },
|
|
19
|
-
{ name: 'sortState', type: 'SortState', default: 'undefined', desc: '受控排序态;受控时不回写,仅 onSortChange' },
|
|
20
|
-
{ name: 'defaultSortState', type: 'SortState', default: '{ key: null, order: null }', desc: '非受控初始排序' },
|
|
21
|
-
{ name: 'onSortChange', type: '(state: SortState) => void', default: 'undefined' },
|
|
22
|
-
{
|
|
23
|
-
name: 'pagination',
|
|
24
|
-
type: "false | { pageSize?: number; current?: number; defaultCurrent?: number; onChange?: (page: number) => void }",
|
|
25
|
-
default: 'undefined',
|
|
26
|
-
desc: 'false 关闭;对象/缺省启用内置分页(pageSize 默认 10)。current 受控不回写',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
name: 'rowSelection',
|
|
30
|
-
type: 'RowSelection<T>',
|
|
31
|
-
default: 'undefined',
|
|
32
|
-
desc: 'selectedRowKeys 受控不回写;defaultSelectedRowKeys / onChange / getCheckboxProps;checkStrictly(默认 false) 树形父子联动开关:false 勾父连带勾后代+后代部分选中父行半选,true 父子独立',
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
name: 'expandable',
|
|
36
|
-
type: 'Expandable<T>',
|
|
37
|
-
default: 'undefined',
|
|
38
|
-
desc: 'expandedRowRender / rowExpandable / expandedRowKeys 受控不回写 / defaultExpandedRowKeys / onExpand',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: 'tree',
|
|
42
|
-
type: 'boolean | TreeTable',
|
|
43
|
-
default: 'undefined',
|
|
44
|
-
desc: '树形数据:true 或 { childrenColumnName(默认 children) / indentSize(默认 16) / expandedRowKeys 受控不回写 / defaultExpandedRowKeys / onExpand }。第一列内展开三角+逐级缩进;排序/分页/筛选作用于顶层行',
|
|
45
|
-
},
|
|
46
|
-
{ name: 'rowClassName', type: '(record: T, index: number) => string', default: 'undefined' },
|
|
47
|
-
{ name: 'empty', type: 'string', default: "'暂无数据'", desc: '空数据占位文案' },
|
|
48
|
-
{ name: 'ariaLabel', type: 'string', default: 'undefined', desc: 'table aria-label' },
|
|
49
|
-
{ name: 'onRowClick', type: '(info: { record: T; index: number }) => void', default: 'undefined' },
|
|
50
|
-
{ name: 'virtualized', type: 'boolean', default: 'false', desc: '行虚拟滚动:仅渲染视口内行,适合大数据(1000+)。启用时忽略 pagination(全量滚动)、表头 sticky 固定顶部;假定行等高,不建议与 expandable 混用' },
|
|
51
|
-
{ name: 'height', type: 'number', default: '400', desc: '虚拟滚动视口高度(px),virtualized 时生效' },
|
|
52
|
-
{ name: 'rowHeight', type: 'number', default: '48', desc: '虚拟滚动行高(px),virtualized 时生效' },
|
|
53
|
-
],
|
|
54
|
-
events: [
|
|
55
|
-
{ name: 'onSortChange', desc: '表头排序切换(三态循环)' },
|
|
56
|
-
{ name: 'rowSelection.onChange', desc: '行选择变更,回传 keys 与对应 rows' },
|
|
57
|
-
{ name: 'pagination.onChange', desc: '页码变更' },
|
|
58
|
-
{ name: 'onRowClick', desc: '行点击(复选框/排序按钮已阻止冒泡)' },
|
|
59
|
-
],
|
|
60
|
-
slots: [
|
|
61
|
-
{ name: 'column.render', desc: '单元格自定义渲染 Snippet<[{ value, record, index }]>' },
|
|
62
|
-
{ name: 'empty', desc: '空态文案经 empty prop 配置(字符串)' },
|
|
63
|
-
],
|
|
64
|
-
a11y: {
|
|
65
|
-
hasRole: true,
|
|
66
|
-
focusable: true,
|
|
67
|
-
pattern: 'grid|table',
|
|
68
|
-
keyboard: '↑↓ 行 / ←→ 列 / Home·End 行内首末 / Ctrl·Cmd+Home·End 表首末 / PageUp·PageDown 翻屏 / Enter·F2 进入单元格交互、Esc 退出',
|
|
69
|
-
note: '交互态(排序/筛选/行选择/展开/树形/行点击任一)遵循 WAI-ARIA APG Grid Pattern:role=grid + aria-rowcount/colcount(虚拟化为逻辑总数) + role=row(aria-rowindex 真实序) + role=columnheader/rowheader/gridcell + aria-colindex;单元格 roving tabindex(整 grid 单一 Tab 停靠点,纯派生),二维方向键漫游(纯函数 nextGridCoord),命令式 focusCell 聚焦;虚拟化下方向键移到未渲染行先滚动进视口再 tick 后聚焦,焦点行被回收时回退到 grid 容器并 announce(不掉 body);Enter/F2 进入单元格内控件交互模式、Esc 退出回导航(导航模式下单元格内控件 tabindex=-1 不破坏 roving)。纯展示表(无交互)降级为 role=table 省漫游。可排序列 aria-sort(ascending/descending/none);行选择原生 checkbox,全选 aria-label「全选」、行选「选择此行」,半选经 attachment 命令式设 input.indeterminate(只写属性、不读几何、无响应式循环);焦点环 --cd-focus-ring;reduced-motion 关闭 spinner 与图标过渡。',
|
|
70
|
-
},
|
|
71
|
-
tokens: [
|
|
72
|
-
'--cd-table-bg',
|
|
73
|
-
'--cd-table-header-bg',
|
|
74
|
-
'--cd-table-header-text',
|
|
75
|
-
'--cd-table-cell-text',
|
|
76
|
-
'--cd-table-border-color',
|
|
77
|
-
'--cd-table-row-hover-bg',
|
|
78
|
-
'--cd-table-row-selected-bg',
|
|
79
|
-
'--cd-table-row-stripe-bg',
|
|
80
|
-
'--cd-table-cell-padding-y',
|
|
81
|
-
'--cd-table-cell-padding-x',
|
|
82
|
-
'--cd-table-cell-padding-y-small',
|
|
83
|
-
'--cd-table-cell-padding-y-large',
|
|
84
|
-
'--cd-table-sort-active-color',
|
|
85
|
-
'--cd-table-sort-icon-color',
|
|
86
|
-
'--cd-table-loading-mask',
|
|
87
|
-
'--cd-table-empty-color',
|
|
88
|
-
'--cd-table-radius',
|
|
89
|
-
],
|
|
90
|
-
responsive: false,
|
|
91
|
-
examples: [
|
|
92
|
-
{
|
|
93
|
-
title: '基础',
|
|
94
|
-
code: '<Table {columns} dataSource={data} rowKey="id" />',
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
title: '可排序',
|
|
98
|
-
code: '<Table columns={[{ dataIndex: "age", title: "年龄", sorter: true }]} dataSource={data} />',
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
title: '行选择 + 分页',
|
|
102
|
-
code: '<Table {columns} dataSource={data} rowSelection={{ onChange: (keys) => (selected = keys) }} pagination={{ pageSize: 10 }} />',
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
title: '列宽拖拽',
|
|
106
|
-
code: '<Table columns={[{ dataIndex: "name", title: "姓名", width: 160, resizable: true }]} dataSource={data} />',
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
title: '树形数据',
|
|
110
|
-
code: '<Table {columns} dataSource={treeRows} rowKey="key" tree={{ defaultExpandedRowKeys: [1] }} />',
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
title: '树形行选择父子联动',
|
|
114
|
-
code: '<Table {columns} dataSource={treeRows} rowKey="key" tree rowSelection={{ onChange: (keys) => (selected = keys) }} />',
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
title: '行虚拟滚动(大数据)',
|
|
118
|
-
code: '<Table {columns} dataSource={bigData} rowKey="id" virtualized height={400} rowHeight={48} />',
|
|
119
|
-
},
|
|
120
|
-
],
|
|
121
|
-
} as const;
|
package/src/table/types.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Table 公共类型 — 由 Table.svelte 消费、index.ts 对外 re-export。
|
|
3
|
-
* 拆成独立模块以避免 .svelte 组件无法导出类型声明的限制。
|
|
4
|
-
* See specs/components/show/Table.spec.md
|
|
5
|
-
*/
|
|
6
|
-
import type { Snippet } from 'svelte';
|
|
7
|
-
import type { RowKey } from '@chenzy-design/core';
|
|
8
|
-
|
|
9
|
-
export type Align = 'left' | 'center' | 'right';
|
|
10
|
-
export type TableSize = 'small' | 'default' | 'large';
|
|
11
|
-
|
|
12
|
-
export interface ColumnDef<T> {
|
|
13
|
-
/** 列唯一键,缺省回退 dataIndex / 列索引 */
|
|
14
|
-
key?: string;
|
|
15
|
-
/** 取值字段 */
|
|
16
|
-
dataIndex?: keyof T & string;
|
|
17
|
-
/** 表头文案 */
|
|
18
|
-
title: string;
|
|
19
|
-
/** 列宽 */
|
|
20
|
-
width?: number | string;
|
|
21
|
-
/** 固定列:横向滚动时左/右侧 sticky 锁定(需配合 width 数值) */
|
|
22
|
-
fixed?: 'left' | 'right';
|
|
23
|
-
/** 列宽可拖拽调整:列头右侧出现拖拽手柄,指针拖拽实时改列宽 */
|
|
24
|
-
resizable?: boolean;
|
|
25
|
-
/** 对齐方式,默认 left */
|
|
26
|
-
align?: Align;
|
|
27
|
-
/** 单元格溢出省略 */
|
|
28
|
-
ellipsis?: boolean;
|
|
29
|
-
/** true 按 dataIndex 默认比较;或自定义比较器 */
|
|
30
|
-
sorter?: boolean | ((a: T, b: T) => number);
|
|
31
|
-
/** 受控排序状态(当前列)*/
|
|
32
|
-
sortOrder?: 'ascend' | 'descend' | null;
|
|
33
|
-
/** 默认排序状态 */
|
|
34
|
-
defaultSortOrder?: 'ascend' | 'descend' | null;
|
|
35
|
-
/** 列头筛选项(下拉多选);配合 onFilter 过滤数据 */
|
|
36
|
-
filters?: { text: string; value: string | number }[];
|
|
37
|
-
/** 受控列筛选值 */
|
|
38
|
-
filteredValue?: (string | number)[] | null;
|
|
39
|
-
/** 是否多选筛选,默认 true */
|
|
40
|
-
filterMultiple?: boolean;
|
|
41
|
-
/** 行是否匹配某筛选值;缺省时按 dataIndex 全等比较 */
|
|
42
|
-
onFilter?: (value: string | number, record: T) => boolean;
|
|
43
|
-
/** 单元格自定义渲染 */
|
|
44
|
-
render?: Snippet<[{ value: unknown; record: T; index: number }]>;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface Expandable<T> {
|
|
48
|
-
/** 展开行内容渲染 */
|
|
49
|
-
expandedRowRender: Snippet<[{ record: T; index: number }]>;
|
|
50
|
-
/** 该行是否可展开,默认全部可展开 */
|
|
51
|
-
rowExpandable?: (record: T) => boolean;
|
|
52
|
-
/** 受控展开行 key 列表 */
|
|
53
|
-
expandedRowKeys?: RowKey[];
|
|
54
|
-
/** 非受控初始展开 */
|
|
55
|
-
defaultExpandedRowKeys?: RowKey[];
|
|
56
|
-
/** 展开/收起回调 */
|
|
57
|
-
onExpand?: (expanded: boolean, record: T) => void;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface TreeTable {
|
|
61
|
-
/** 子行字段名,默认 'children' */
|
|
62
|
-
childrenColumnName?: string;
|
|
63
|
-
/** 每层缩进像素,默认 16 */
|
|
64
|
-
indentSize?: number;
|
|
65
|
-
/** 非受控初始展开行 key 列表 */
|
|
66
|
-
defaultExpandedRowKeys?: RowKey[];
|
|
67
|
-
/** 受控展开行 key 列表;受控时不回写,仅 onExpand 通知 */
|
|
68
|
-
expandedRowKeys?: RowKey[];
|
|
69
|
-
/** 展开/收起回调 */
|
|
70
|
-
onExpand?: (expanded: boolean, key: RowKey) => void;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export interface RowSelection<T> {
|
|
74
|
-
/** 受控选中行 key 列表 */
|
|
75
|
-
selectedRowKeys?: RowKey[];
|
|
76
|
-
/** 非受控初始选中 */
|
|
77
|
-
defaultSelectedRowKeys?: RowKey[];
|
|
78
|
-
/** 选择变更回调 */
|
|
79
|
-
onChange?: (keys: RowKey[], rows: T[]) => void;
|
|
80
|
-
/** 逐行定制复选框属性(如 disabled) */
|
|
81
|
-
getCheckboxProps?: (record: T) => { disabled?: boolean };
|
|
82
|
-
/**
|
|
83
|
-
* 树形表父子选择是否独立。默认 false:勾选父行连带勾选所有后代,
|
|
84
|
-
* 后代部分选中时父行显示半选(indeterminate)。true 时父子互不联动
|
|
85
|
-
* (等同非树形表逐行选择,向后兼容)。仅在 tree 启用时生效。
|
|
86
|
-
*/
|
|
87
|
-
checkStrictly?: boolean;
|
|
88
|
-
/** 选择方式: checkbox(多选)或 radio(单选),默认 checkbox */
|
|
89
|
-
type?: 'checkbox' | 'radio';
|
|
90
|
-
/** 单行选择回调 */
|
|
91
|
-
onSelect?: (record: T, selected: boolean, selectedRows: T[]) => void;
|
|
92
|
-
/** 全选回调 */
|
|
93
|
-
onSelectAll?: (selected: boolean, selectedRows: T[], changedRows: T[]) => void;
|
|
94
|
-
/** 选择列固定 */
|
|
95
|
-
fixed?: boolean | 'left';
|
|
96
|
-
/** 选择列宽度 */
|
|
97
|
-
columnWidth?: number | string;
|
|
98
|
-
/** 隐藏全选框 */
|
|
99
|
-
hideSelectAll?: boolean;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export interface ScrollConfig {
|
|
103
|
-
x?: number | string;
|
|
104
|
-
y?: number | string;
|
|
105
|
-
scrollToFirstRowOnChange?: boolean;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/** 聚合 onChange 的 extra.action 取值 */
|
|
109
|
-
export type TableChangeAction = 'paginate' | 'sort' | 'filter';
|
|
110
|
-
|
|
111
|
-
/** 聚合 onChange 载荷(排序/筛选/分页任一变化的主入口,spec §4) */
|
|
112
|
-
export interface TableChangeInfo {
|
|
113
|
-
pagination: { current: number; pageSize: number };
|
|
114
|
-
filters: Record<string, (string | number)[]>;
|
|
115
|
-
sorter: SortStateLike;
|
|
116
|
-
extra: { action: TableChangeAction };
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/** onScroll 载荷(spec §4,含触底用于无限加载) */
|
|
120
|
-
export interface TableScrollInfo {
|
|
121
|
-
scrollLeft: number;
|
|
122
|
-
scrollTop: number;
|
|
123
|
-
atLeft: boolean;
|
|
124
|
-
atRight: boolean;
|
|
125
|
-
atTop: boolean;
|
|
126
|
-
atBottom: boolean;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// 局部别名,避免在本文件引入对 SortState 的运行期依赖说明
|
|
130
|
-
type SortStateLike = import('@chenzy-design/core').SortState;
|
|
131
|
-
|
|
132
|
-
export type { RowKey } from '@chenzy-design/core';
|
|
133
|
-
export type { SortState, SortOrder } from '@chenzy-design/core';
|