@chenzy-design/svelte 0.2.0 → 0.2.1
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/README.md +66 -0
- package/dist/badge/Badge.svelte +5 -2
- package/dist/badge/Badge.svelte.d.ts.map +1 -1
- package/dist/components.json +1 -1
- package/package.json +6 -5
- package/dist/anchor/Anchor.a11y.test.d.ts +0 -2
- package/dist/anchor/Anchor.a11y.test.d.ts.map +0 -1
- package/dist/anchor/Anchor.a11y.test.js +0 -44
- package/dist/anchor/Anchor.kbd.test.d.ts +0 -2
- package/dist/anchor/Anchor.kbd.test.d.ts.map +0 -1
- package/dist/anchor/Anchor.kbd.test.js +0 -59
- package/dist/anchor/AnchorKbdFixture.svelte +0 -24
- package/dist/anchor/AnchorKbdFixture.svelte.d.ts +0 -19
- package/dist/anchor/AnchorKbdFixture.svelte.d.ts.map +0 -1
- package/dist/autocomplete/AutoComplete.a11y.test.d.ts +0 -2
- package/dist/autocomplete/AutoComplete.a11y.test.d.ts.map +0 -1
- package/dist/autocomplete/AutoComplete.a11y.test.js +0 -45
- package/dist/autocomplete/AutoComplete.kbd.test.d.ts +0 -2
- package/dist/autocomplete/AutoComplete.kbd.test.d.ts.map +0 -1
- package/dist/autocomplete/AutoComplete.kbd.test.js +0 -60
- package/dist/autocomplete/AutoCompleteKbdFixture.svelte +0 -24
- package/dist/autocomplete/AutoCompleteKbdFixture.svelte.d.ts +0 -4
- package/dist/autocomplete/AutoCompleteKbdFixture.svelte.d.ts.map +0 -1
- package/dist/avatar/Avatar.a11y.test.d.ts +0 -2
- package/dist/avatar/Avatar.a11y.test.d.ts.map +0 -1
- package/dist/avatar/Avatar.a11y.test.js +0 -34
- package/dist/back-top/BackTop.a11y.test.d.ts +0 -2
- package/dist/back-top/BackTop.a11y.test.d.ts.map +0 -1
- package/dist/back-top/BackTop.a11y.test.js +0 -37
- package/dist/badge/Badge.a11y.test.d.ts +0 -2
- package/dist/badge/Badge.a11y.test.d.ts.map +0 -1
- package/dist/badge/Badge.a11y.test.js +0 -32
- package/dist/badge/BadgeA11yFixture.svelte +0 -18
- package/dist/badge/BadgeA11yFixture.svelte.d.ts +0 -7
- package/dist/badge/BadgeA11yFixture.svelte.d.ts.map +0 -1
- package/dist/banner/Banner.a11y.test.d.ts +0 -2
- package/dist/banner/Banner.a11y.test.d.ts.map +0 -1
- package/dist/banner/Banner.a11y.test.js +0 -43
- package/dist/breadcrumb/Breadcrumb.a11y.test.d.ts +0 -2
- package/dist/breadcrumb/Breadcrumb.a11y.test.d.ts.map +0 -1
- package/dist/breadcrumb/Breadcrumb.a11y.test.js +0 -31
- package/dist/breadcrumb/Breadcrumb.kbd.test.d.ts +0 -2
- package/dist/breadcrumb/Breadcrumb.kbd.test.d.ts.map +0 -1
- package/dist/breadcrumb/Breadcrumb.kbd.test.js +0 -37
- package/dist/breadcrumb/BreadcrumbKbdFixture.svelte +0 -23
- package/dist/breadcrumb/BreadcrumbKbdFixture.svelte.d.ts +0 -19
- package/dist/breadcrumb/BreadcrumbKbdFixture.svelte.d.ts.map +0 -1
- package/dist/button/Button.a11y.test.d.ts +0 -2
- package/dist/button/Button.a11y.test.d.ts.map +0 -1
- package/dist/button/Button.a11y.test.js +0 -49
- package/dist/calendar/Calendar.a11y.test.d.ts +0 -2
- package/dist/calendar/Calendar.a11y.test.d.ts.map +0 -1
- package/dist/calendar/Calendar.a11y.test.js +0 -46
- package/dist/calendar/Calendar.kbd.test.d.ts +0 -2
- package/dist/calendar/Calendar.kbd.test.d.ts.map +0 -1
- package/dist/calendar/Calendar.kbd.test.js +0 -50
- package/dist/calendar/CalendarKbdFixture.svelte +0 -23
- package/dist/calendar/CalendarKbdFixture.svelte.d.ts +0 -19
- package/dist/calendar/CalendarKbdFixture.svelte.d.ts.map +0 -1
- package/dist/card/Card.a11y.test.d.ts +0 -2
- package/dist/card/Card.a11y.test.d.ts.map +0 -1
- package/dist/card/Card.a11y.test.js +0 -35
- package/dist/carousel/Carousel.a11y.test.d.ts +0 -2
- package/dist/carousel/Carousel.a11y.test.d.ts.map +0 -1
- package/dist/carousel/Carousel.a11y.test.js +0 -43
- package/dist/carousel/Carousel.kbd.test.d.ts +0 -2
- package/dist/carousel/Carousel.kbd.test.d.ts.map +0 -1
- package/dist/carousel/Carousel.kbd.test.js +0 -51
- package/dist/carousel/CarouselA11yFixture.svelte +0 -25
- package/dist/carousel/CarouselA11yFixture.svelte.d.ts +0 -8
- package/dist/carousel/CarouselA11yFixture.svelte.d.ts.map +0 -1
- package/dist/carousel/CarouselKbdFixture.svelte +0 -24
- package/dist/carousel/CarouselKbdFixture.svelte.d.ts +0 -19
- package/dist/carousel/CarouselKbdFixture.svelte.d.ts.map +0 -1
- package/dist/cascader/Cascader.a11y.test.d.ts +0 -2
- package/dist/cascader/Cascader.a11y.test.d.ts.map +0 -1
- package/dist/cascader/Cascader.a11y.test.js +0 -55
- package/dist/cascader/Cascader.kbd.test.d.ts +0 -2
- package/dist/cascader/Cascader.kbd.test.d.ts.map +0 -1
- package/dist/cascader/Cascader.kbd.test.js +0 -47
- package/dist/cascader/CascaderKbdFixture.svelte +0 -31
- package/dist/cascader/CascaderKbdFixture.svelte.d.ts +0 -19
- package/dist/cascader/CascaderKbdFixture.svelte.d.ts.map +0 -1
- package/dist/checkbox/CheckboxGroup.a11y.test.d.ts +0 -2
- package/dist/checkbox/CheckboxGroup.a11y.test.d.ts.map +0 -1
- package/dist/checkbox/CheckboxGroup.a11y.test.js +0 -38
- package/dist/checkbox/CheckboxGroup.kbd.test.d.ts +0 -2
- package/dist/checkbox/CheckboxGroup.kbd.test.d.ts.map +0 -1
- package/dist/checkbox/CheckboxGroup.kbd.test.js +0 -33
- package/dist/checkbox/CheckboxGroupKbdFixture.svelte +0 -20
- package/dist/checkbox/CheckboxGroupKbdFixture.svelte.d.ts +0 -19
- package/dist/checkbox/CheckboxGroupKbdFixture.svelte.d.ts.map +0 -1
- package/dist/collapse/Collapse.a11y.test.d.ts +0 -2
- package/dist/collapse/Collapse.a11y.test.d.ts.map +0 -1
- package/dist/collapse/Collapse.a11y.test.js +0 -46
- package/dist/collapse/Collapse.kbd.test.d.ts +0 -2
- package/dist/collapse/Collapse.kbd.test.d.ts.map +0 -1
- package/dist/collapse/Collapse.kbd.test.js +0 -70
- package/dist/collapse/CollapseA11yFixture.svelte +0 -27
- package/dist/collapse/CollapseA11yFixture.svelte.d.ts +0 -9
- package/dist/collapse/CollapseA11yFixture.svelte.d.ts.map +0 -1
- package/dist/collapse/CollapseKbdFixture.svelte +0 -25
- package/dist/collapse/CollapseKbdFixture.svelte.d.ts +0 -19
- package/dist/collapse/CollapseKbdFixture.svelte.d.ts.map +0 -1
- package/dist/color-picker/ColorPicker.a11y.test.d.ts +0 -2
- package/dist/color-picker/ColorPicker.a11y.test.d.ts.map +0 -1
- package/dist/color-picker/ColorPicker.a11y.test.js +0 -54
- package/dist/color-picker/ColorPicker.kbd.test.d.ts +0 -2
- package/dist/color-picker/ColorPicker.kbd.test.d.ts.map +0 -1
- package/dist/color-picker/ColorPicker.kbd.test.js +0 -59
- package/dist/color-picker/ColorPickerKbdFixture.svelte +0 -25
- package/dist/color-picker/ColorPickerKbdFixture.svelte.d.ts +0 -4
- package/dist/color-picker/ColorPickerKbdFixture.svelte.d.ts.map +0 -1
- package/dist/date-picker/DatePicker.a11y.test.d.ts +0 -2
- package/dist/date-picker/DatePicker.a11y.test.d.ts.map +0 -1
- package/dist/date-picker/DatePicker.a11y.test.js +0 -42
- package/dist/date-picker/DatePicker.kbd.test.d.ts +0 -2
- package/dist/date-picker/DatePicker.kbd.test.d.ts.map +0 -1
- package/dist/date-picker/DatePicker.kbd.test.js +0 -59
- package/dist/date-picker/DatePickerKbdFixture.svelte +0 -26
- package/dist/date-picker/DatePickerKbdFixture.svelte.d.ts +0 -4
- package/dist/date-picker/DatePickerKbdFixture.svelte.d.ts.map +0 -1
- package/dist/date-picker/RangePicker.kbd.test.d.ts +0 -2
- package/dist/date-picker/RangePicker.kbd.test.d.ts.map +0 -1
- package/dist/date-picker/RangePicker.kbd.test.js +0 -60
- package/dist/date-picker/RangePickerKbdFixture.svelte +0 -30
- package/dist/date-picker/RangePickerKbdFixture.svelte.d.ts +0 -7
- package/dist/date-picker/RangePickerKbdFixture.svelte.d.ts.map +0 -1
- package/dist/descriptions/Descriptions.a11y.test.d.ts +0 -2
- package/dist/descriptions/Descriptions.a11y.test.d.ts.map +0 -1
- package/dist/descriptions/Descriptions.a11y.test.js +0 -31
- package/dist/divider/Divider.a11y.test.d.ts +0 -2
- package/dist/divider/Divider.a11y.test.d.ts.map +0 -1
- package/dist/divider/Divider.a11y.test.js +0 -21
- package/dist/drawer/Drawer.a11y.test.d.ts +0 -2
- package/dist/drawer/Drawer.a11y.test.d.ts.map +0 -1
- package/dist/drawer/Drawer.a11y.test.js +0 -33
- package/dist/drawer/Drawer.kbd.test.d.ts +0 -2
- package/dist/drawer/Drawer.kbd.test.d.ts.map +0 -1
- package/dist/drawer/Drawer.kbd.test.js +0 -53
- package/dist/drawer/DrawerKbdFixture.svelte +0 -28
- package/dist/drawer/DrawerKbdFixture.svelte.d.ts +0 -4
- package/dist/drawer/DrawerKbdFixture.svelte.d.ts.map +0 -1
- package/dist/dropdown/Dropdown.a11y.test.d.ts +0 -2
- package/dist/dropdown/Dropdown.a11y.test.d.ts.map +0 -1
- package/dist/dropdown/Dropdown.a11y.test.js +0 -39
- package/dist/dropdown/Dropdown.kbd.test.d.ts +0 -2
- package/dist/dropdown/Dropdown.kbd.test.d.ts.map +0 -1
- package/dist/dropdown/Dropdown.kbd.test.js +0 -47
- package/dist/dropdown/DropdownA11yFixture.svelte +0 -24
- package/dist/dropdown/DropdownA11yFixture.svelte.d.ts +0 -11
- package/dist/dropdown/DropdownA11yFixture.svelte.d.ts.map +0 -1
- package/dist/dropdown/DropdownKbdFixture.svelte +0 -26
- package/dist/dropdown/DropdownKbdFixture.svelte.d.ts +0 -19
- package/dist/dropdown/DropdownKbdFixture.svelte.d.ts.map +0 -1
- package/dist/dropdown/types.test.d.ts +0 -2
- package/dist/dropdown/types.test.d.ts.map +0 -1
- package/dist/dropdown/types.test.js +0 -40
- package/dist/empty/Empty.a11y.test.d.ts +0 -2
- package/dist/empty/Empty.a11y.test.d.ts.map +0 -1
- package/dist/empty/Empty.a11y.test.js +0 -22
- package/dist/form/Form.a11y.test.d.ts +0 -2
- package/dist/form/Form.a11y.test.d.ts.map +0 -1
- package/dist/form/Form.a11y.test.js +0 -36
- package/dist/form/FormA11yFixture.svelte +0 -31
- package/dist/form/FormA11yFixture.svelte.d.ts +0 -19
- package/dist/form/FormA11yFixture.svelte.d.ts.map +0 -1
- package/dist/grid/Grid.a11y.test.d.ts +0 -2
- package/dist/grid/Grid.a11y.test.d.ts.map +0 -1
- package/dist/grid/Grid.a11y.test.js +0 -13
- package/dist/grid/GridA11yFixture.svelte +0 -12
- package/dist/grid/GridA11yFixture.svelte.d.ts +0 -19
- package/dist/grid/GridA11yFixture.svelte.d.ts.map +0 -1
- package/dist/highlight/Highlight.a11y.test.d.ts +0 -2
- package/dist/highlight/Highlight.a11y.test.d.ts.map +0 -1
- package/dist/highlight/Highlight.a11y.test.js +0 -23
- package/dist/image/Image.a11y.test.d.ts +0 -2
- package/dist/image/Image.a11y.test.d.ts.map +0 -1
- package/dist/image/Image.a11y.test.js +0 -27
- package/dist/image/ImagePreview.kbd.test.d.ts +0 -2
- package/dist/image/ImagePreview.kbd.test.d.ts.map +0 -1
- package/dist/image/ImagePreview.kbd.test.js +0 -44
- package/dist/image/ImagePreviewKbdFixture.svelte +0 -32
- package/dist/image/ImagePreviewKbdFixture.svelte.d.ts +0 -4
- package/dist/image/ImagePreviewKbdFixture.svelte.d.ts.map +0 -1
- package/dist/input/Input.a11y.test.d.ts +0 -2
- package/dist/input/Input.a11y.test.d.ts.map +0 -1
- package/dist/input/Input.a11y.test.js +0 -53
- package/dist/input-number/InputNumber.a11y.test.d.ts +0 -2
- package/dist/input-number/InputNumber.a11y.test.d.ts.map +0 -1
- package/dist/input-number/InputNumber.a11y.test.js +0 -40
- package/dist/input-number/InputNumber.kbd.test.d.ts +0 -2
- package/dist/input-number/InputNumber.kbd.test.d.ts.map +0 -1
- package/dist/input-number/InputNumber.kbd.test.js +0 -35
- package/dist/input-number/InputNumberKbdFixture.svelte +0 -15
- package/dist/input-number/InputNumberKbdFixture.svelte.d.ts +0 -19
- package/dist/input-number/InputNumberKbdFixture.svelte.d.ts.map +0 -1
- package/dist/layout/Layout.a11y.test.d.ts +0 -2
- package/dist/layout/Layout.a11y.test.d.ts.map +0 -1
- package/dist/layout/Layout.a11y.test.js +0 -32
- package/dist/layout/LayoutA11yFixture.svelte +0 -21
- package/dist/layout/LayoutA11yFixture.svelte.d.ts +0 -7
- package/dist/layout/LayoutA11yFixture.svelte.d.ts.map +0 -1
- package/dist/list/List.a11y.test.d.ts +0 -2
- package/dist/list/List.a11y.test.d.ts.map +0 -1
- package/dist/list/List.a11y.test.js +0 -62
- package/dist/list/List.bench.d.ts +0 -2
- package/dist/list/List.bench.d.ts.map +0 -1
- package/dist/list/List.bench.js +0 -16
- package/dist/list/List.kbd.test.d.ts +0 -2
- package/dist/list/List.kbd.test.d.ts.map +0 -1
- package/dist/list/List.kbd.test.js +0 -60
- package/dist/list/ListA11yFixture.svelte +0 -38
- package/dist/list/ListA11yFixture.svelte.d.ts +0 -10
- package/dist/list/ListA11yFixture.svelte.d.ts.map +0 -1
- package/dist/list/ListBenchFixture.svelte +0 -22
- package/dist/list/ListBenchFixture.svelte.d.ts +0 -7
- package/dist/list/ListBenchFixture.svelte.d.ts.map +0 -1
- package/dist/list/ListKbdFixture.svelte +0 -31
- package/dist/list/ListKbdFixture.svelte.d.ts +0 -19
- package/dist/list/ListKbdFixture.svelte.d.ts.map +0 -1
- package/dist/menu/Menu.a11y.test.d.ts +0 -2
- package/dist/menu/Menu.a11y.test.d.ts.map +0 -1
- package/dist/menu/Menu.a11y.test.js +0 -49
- package/dist/menu/Menu.kbd.test.d.ts +0 -2
- package/dist/menu/Menu.kbd.test.d.ts.map +0 -1
- package/dist/menu/Menu.kbd.test.js +0 -56
- package/dist/menu/MenuKbdFixture.svelte +0 -22
- package/dist/menu/MenuKbdFixture.svelte.d.ts +0 -19
- package/dist/menu/MenuKbdFixture.svelte.d.ts.map +0 -1
- package/dist/meta.test.d.ts +0 -2
- package/dist/meta.test.d.ts.map +0 -1
- package/dist/meta.test.js +0 -164
- package/dist/modal/Modal.a11y.test.d.ts +0 -2
- package/dist/modal/Modal.a11y.test.d.ts.map +0 -1
- package/dist/modal/Modal.a11y.test.js +0 -38
- package/dist/modal/Modal.kbd.test.d.ts +0 -2
- package/dist/modal/Modal.kbd.test.d.ts.map +0 -1
- package/dist/modal/Modal.kbd.test.js +0 -52
- package/dist/modal/ModalKbdFixture.svelte +0 -24
- package/dist/modal/ModalKbdFixture.svelte.d.ts +0 -4
- package/dist/modal/ModalKbdFixture.svelte.d.ts.map +0 -1
- package/dist/notification/NotificationItem.a11y.test.d.ts +0 -2
- package/dist/notification/NotificationItem.a11y.test.d.ts.map +0 -1
- package/dist/notification/NotificationItem.a11y.test.js +0 -64
- package/dist/overflow-list/OverflowList.a11y.test.d.ts +0 -2
- package/dist/overflow-list/OverflowList.a11y.test.d.ts.map +0 -1
- package/dist/overflow-list/OverflowList.a11y.test.js +0 -41
- package/dist/overflow-list/OverflowList.kbd.test.d.ts +0 -2
- package/dist/overflow-list/OverflowList.kbd.test.d.ts.map +0 -1
- package/dist/overflow-list/OverflowList.kbd.test.js +0 -28
- package/dist/overflow-list/OverflowListA11yFixture.svelte +0 -22
- package/dist/overflow-list/OverflowListA11yFixture.svelte.d.ts +0 -8
- package/dist/overflow-list/OverflowListA11yFixture.svelte.d.ts.map +0 -1
- package/dist/overflow-list/OverflowListKbdFixture.svelte +0 -21
- package/dist/overflow-list/OverflowListKbdFixture.svelte.d.ts +0 -19
- package/dist/overflow-list/OverflowListKbdFixture.svelte.d.ts.map +0 -1
- package/dist/pagination/Pagination.a11y.test.d.ts +0 -2
- package/dist/pagination/Pagination.a11y.test.d.ts.map +0 -1
- package/dist/pagination/Pagination.a11y.test.js +0 -57
- package/dist/pagination/Pagination.kbd.test.d.ts +0 -2
- package/dist/pagination/Pagination.kbd.test.d.ts.map +0 -1
- package/dist/pagination/Pagination.kbd.test.js +0 -54
- package/dist/pagination/PaginationKbdFixture.svelte +0 -15
- package/dist/pagination/PaginationKbdFixture.svelte.d.ts +0 -19
- package/dist/pagination/PaginationKbdFixture.svelte.d.ts.map +0 -1
- package/dist/popconfirm/Popconfirm.a11y.test.d.ts +0 -2
- package/dist/popconfirm/Popconfirm.a11y.test.d.ts.map +0 -1
- package/dist/popconfirm/Popconfirm.a11y.test.js +0 -37
- package/dist/popconfirm/Popconfirm.kbd.test.d.ts +0 -2
- package/dist/popconfirm/Popconfirm.kbd.test.d.ts.map +0 -1
- package/dist/popconfirm/Popconfirm.kbd.test.js +0 -36
- package/dist/popconfirm/PopconfirmA11yFixture.svelte +0 -34
- package/dist/popconfirm/PopconfirmA11yFixture.svelte.d.ts +0 -11
- package/dist/popconfirm/PopconfirmA11yFixture.svelte.d.ts.map +0 -1
- package/dist/popconfirm/PopconfirmKbdFixture.svelte +0 -17
- package/dist/popconfirm/PopconfirmKbdFixture.svelte.d.ts +0 -19
- package/dist/popconfirm/PopconfirmKbdFixture.svelte.d.ts.map +0 -1
- package/dist/popover/Popover.a11y.test.d.ts +0 -2
- package/dist/popover/Popover.a11y.test.d.ts.map +0 -1
- package/dist/popover/Popover.a11y.test.js +0 -47
- package/dist/popover/Popover.kbd.test.d.ts +0 -2
- package/dist/popover/Popover.kbd.test.d.ts.map +0 -1
- package/dist/popover/Popover.kbd.test.js +0 -36
- package/dist/popover/PopoverA11yFixture.svelte +0 -35
- package/dist/popover/PopoverA11yFixture.svelte.d.ts +0 -11
- package/dist/popover/PopoverA11yFixture.svelte.d.ts.map +0 -1
- package/dist/popover/PopoverKbdFixture.svelte +0 -18
- package/dist/popover/PopoverKbdFixture.svelte.d.ts +0 -19
- package/dist/popover/PopoverKbdFixture.svelte.d.ts.map +0 -1
- package/dist/progress/Progress.a11y.test.d.ts +0 -2
- package/dist/progress/Progress.a11y.test.d.ts.map +0 -1
- package/dist/progress/Progress.a11y.test.js +0 -34
- package/dist/radio/RadioGroup.a11y.test.d.ts +0 -2
- package/dist/radio/RadioGroup.a11y.test.d.ts.map +0 -1
- package/dist/radio/RadioGroup.a11y.test.js +0 -38
- package/dist/radio/RadioGroup.kbd.test.d.ts +0 -2
- package/dist/radio/RadioGroup.kbd.test.d.ts.map +0 -1
- package/dist/radio/RadioGroup.kbd.test.js +0 -59
- package/dist/radio/RadioGroupKbdFixture.svelte +0 -21
- package/dist/radio/RadioGroupKbdFixture.svelte.d.ts +0 -19
- package/dist/radio/RadioGroupKbdFixture.svelte.d.ts.map +0 -1
- package/dist/rating/Rating.a11y.test.d.ts +0 -2
- package/dist/rating/Rating.a11y.test.d.ts.map +0 -1
- package/dist/rating/Rating.a11y.test.js +0 -38
- package/dist/rating/Rating.kbd.test.d.ts +0 -2
- package/dist/rating/Rating.kbd.test.d.ts.map +0 -1
- package/dist/rating/Rating.kbd.test.js +0 -41
- package/dist/rating/RatingKbdFixture.svelte +0 -15
- package/dist/rating/RatingKbdFixture.svelte.d.ts +0 -19
- package/dist/rating/RatingKbdFixture.svelte.d.ts.map +0 -1
- package/dist/select/Select.a11y.test.d.ts +0 -2
- package/dist/select/Select.a11y.test.d.ts.map +0 -1
- package/dist/select/Select.a11y.test.js +0 -53
- package/dist/select/Select.kbd.test.d.ts +0 -2
- package/dist/select/Select.kbd.test.d.ts.map +0 -1
- package/dist/select/Select.kbd.test.js +0 -47
- package/dist/select/SelectKbdFixture.svelte +0 -29
- package/dist/select/SelectKbdFixture.svelte.d.ts +0 -4
- package/dist/select/SelectKbdFixture.svelte.d.ts.map +0 -1
- package/dist/side-sheet/SideSheet.a11y.test.d.ts +0 -2
- package/dist/side-sheet/SideSheet.a11y.test.d.ts.map +0 -1
- package/dist/side-sheet/SideSheet.a11y.test.js +0 -46
- package/dist/side-sheet/SideSheet.kbd.test.d.ts +0 -2
- package/dist/side-sheet/SideSheet.kbd.test.d.ts.map +0 -1
- package/dist/side-sheet/SideSheet.kbd.test.js +0 -49
- package/dist/side-sheet/SideSheetKbdFixture.svelte +0 -30
- package/dist/side-sheet/SideSheetKbdFixture.svelte.d.ts +0 -4
- package/dist/side-sheet/SideSheetKbdFixture.svelte.d.ts.map +0 -1
- package/dist/skeleton/Skeleton.a11y.test.d.ts +0 -2
- package/dist/skeleton/Skeleton.a11y.test.d.ts.map +0 -1
- package/dist/skeleton/Skeleton.a11y.test.js +0 -32
- package/dist/slider/Slider.a11y.test.d.ts +0 -2
- package/dist/slider/Slider.a11y.test.d.ts.map +0 -1
- package/dist/slider/Slider.a11y.test.js +0 -40
- package/dist/slider/Slider.kbd.test.d.ts +0 -2
- package/dist/slider/Slider.kbd.test.d.ts.map +0 -1
- package/dist/slider/Slider.kbd.test.js +0 -63
- package/dist/slider/SliderKbdFixture.svelte +0 -21
- package/dist/slider/SliderKbdFixture.svelte.d.ts +0 -19
- package/dist/slider/SliderKbdFixture.svelte.d.ts.map +0 -1
- package/dist/space/Space.a11y.test.d.ts +0 -2
- package/dist/space/Space.a11y.test.d.ts.map +0 -1
- package/dist/space/Space.a11y.test.js +0 -20
- package/dist/space/SpaceA11yFixture.svelte +0 -17
- package/dist/space/SpaceA11yFixture.svelte.d.ts +0 -7
- package/dist/space/SpaceA11yFixture.svelte.d.ts.map +0 -1
- package/dist/spin/Spin.a11y.test.d.ts +0 -2
- package/dist/spin/Spin.a11y.test.d.ts.map +0 -1
- package/dist/spin/Spin.a11y.test.js +0 -27
- package/dist/spin/SpinA11yFixture.svelte +0 -18
- package/dist/spin/SpinA11yFixture.svelte.d.ts +0 -7
- package/dist/spin/SpinA11yFixture.svelte.d.ts.map +0 -1
- package/dist/steps/Steps.a11y.test.d.ts +0 -2
- package/dist/steps/Steps.a11y.test.d.ts.map +0 -1
- package/dist/steps/Steps.a11y.test.js +0 -35
- package/dist/steps/Steps.kbd.test.d.ts +0 -2
- package/dist/steps/Steps.kbd.test.d.ts.map +0 -1
- package/dist/steps/Steps.kbd.test.js +0 -59
- package/dist/steps/StepsKbdFixture.svelte +0 -21
- package/dist/steps/StepsKbdFixture.svelte.d.ts +0 -19
- package/dist/steps/StepsKbdFixture.svelte.d.ts.map +0 -1
- package/dist/switch/Switch.a11y.test.d.ts +0 -2
- package/dist/switch/Switch.a11y.test.d.ts.map +0 -1
- package/dist/switch/Switch.a11y.test.js +0 -42
- package/dist/switch/Switch.kbd.test.d.ts +0 -2
- package/dist/switch/Switch.kbd.test.d.ts.map +0 -1
- package/dist/switch/Switch.kbd.test.js +0 -34
- package/dist/switch/SwitchKbdFixture.svelte +0 -22
- package/dist/switch/SwitchKbdFixture.svelte.d.ts +0 -4
- package/dist/switch/SwitchKbdFixture.svelte.d.ts.map +0 -1
- package/dist/table/Table.a11y.test.d.ts +0 -2
- package/dist/table/Table.a11y.test.d.ts.map +0 -1
- package/dist/table/Table.a11y.test.js +0 -59
- package/dist/table/Table.bench.d.ts +0 -2
- package/dist/table/Table.bench.d.ts.map +0 -1
- package/dist/table/Table.bench.js +0 -31
- package/dist/table/Table.kbd.test.d.ts +0 -2
- package/dist/table/Table.kbd.test.d.ts.map +0 -1
- package/dist/table/Table.kbd.test.js +0 -74
- package/dist/table/TableKbdFixture.svelte +0 -35
- package/dist/table/TableKbdFixture.svelte.d.ts +0 -19
- package/dist/table/TableKbdFixture.svelte.d.ts.map +0 -1
- package/dist/table/grid-nav.test.d.ts +0 -2
- package/dist/table/grid-nav.test.d.ts.map +0 -1
- package/dist/table/grid-nav.test.js +0 -133
- package/dist/tabs/Tabs.a11y.test.d.ts +0 -2
- package/dist/tabs/Tabs.a11y.test.d.ts.map +0 -1
- package/dist/tabs/Tabs.a11y.test.js +0 -43
- package/dist/tabs/Tabs.kbd.test.d.ts +0 -2
- package/dist/tabs/Tabs.kbd.test.d.ts.map +0 -1
- package/dist/tabs/Tabs.kbd.test.js +0 -63
- package/dist/tabs/TabsA11yFixture.svelte +0 -20
- package/dist/tabs/TabsA11yFixture.svelte.d.ts +0 -8
- package/dist/tabs/TabsA11yFixture.svelte.d.ts.map +0 -1
- package/dist/tabs/TabsKbdFixture.svelte +0 -25
- package/dist/tabs/TabsKbdFixture.svelte.d.ts +0 -7
- package/dist/tabs/TabsKbdFixture.svelte.d.ts.map +0 -1
- package/dist/tag/Tag.a11y.test.d.ts +0 -2
- package/dist/tag/Tag.a11y.test.d.ts.map +0 -1
- package/dist/tag/Tag.a11y.test.js +0 -30
- package/dist/tag/TagA11yFixture.svelte +0 -18
- package/dist/tag/TagA11yFixture.svelte.d.ts +0 -8
- package/dist/tag/TagA11yFixture.svelte.d.ts.map +0 -1
- package/dist/tag-input/TagInput.a11y.test.d.ts +0 -2
- package/dist/tag-input/TagInput.a11y.test.d.ts.map +0 -1
- package/dist/tag-input/TagInput.a11y.test.js +0 -38
- package/dist/tag-input/reorder.test.d.ts +0 -2
- package/dist/tag-input/reorder.test.d.ts.map +0 -1
- package/dist/tag-input/reorder.test.js +0 -48
- package/dist/test-utils/LocaleHarness.svelte +0 -29
- package/dist/test-utils/LocaleHarness.svelte.d.ts +0 -11
- package/dist/test-utils/LocaleHarness.svelte.d.ts.map +0 -1
- package/dist/test-utils/a11y.d.ts +0 -36
- package/dist/test-utils/a11y.d.ts.map +0 -1
- package/dist/test-utils/a11y.js +0 -68
- package/dist/test-utils/kbd.d.ts +0 -26
- package/dist/test-utils/kbd.d.ts.map +0 -1
- package/dist/test-utils/kbd.js +0 -38
- package/dist/textarea/TextArea.a11y.test.d.ts +0 -2
- package/dist/textarea/TextArea.a11y.test.d.ts.map +0 -1
- package/dist/textarea/TextArea.a11y.test.js +0 -41
- package/dist/time-picker/TimePicker.a11y.test.d.ts +0 -2
- package/dist/time-picker/TimePicker.a11y.test.d.ts.map +0 -1
- package/dist/time-picker/TimePicker.a11y.test.js +0 -42
- package/dist/time-picker/TimePicker.kbd.test.d.ts +0 -2
- package/dist/time-picker/TimePicker.kbd.test.d.ts.map +0 -1
- package/dist/time-picker/TimePicker.kbd.test.js +0 -59
- package/dist/time-picker/TimePickerKbdFixture.svelte +0 -23
- package/dist/time-picker/TimePickerKbdFixture.svelte.d.ts +0 -4
- package/dist/time-picker/TimePickerKbdFixture.svelte.d.ts.map +0 -1
- package/dist/timeline/Timeline.a11y.test.d.ts +0 -2
- package/dist/timeline/Timeline.a11y.test.d.ts.map +0 -1
- package/dist/timeline/Timeline.a11y.test.js +0 -51
- package/dist/toast/Toast.a11y.test.d.ts +0 -2
- package/dist/toast/Toast.a11y.test.d.ts.map +0 -1
- package/dist/toast/Toast.a11y.test.js +0 -58
- package/dist/tooltip/Tooltip.a11y.test.d.ts +0 -2
- package/dist/tooltip/Tooltip.a11y.test.d.ts.map +0 -1
- package/dist/tooltip/Tooltip.a11y.test.js +0 -33
- package/dist/tooltip/Tooltip.kbd.test.d.ts +0 -2
- package/dist/tooltip/Tooltip.kbd.test.d.ts.map +0 -1
- package/dist/tooltip/Tooltip.kbd.test.js +0 -31
- package/dist/tooltip/TooltipA11yFixture.svelte +0 -31
- package/dist/tooltip/TooltipA11yFixture.svelte.d.ts +0 -11
- package/dist/tooltip/TooltipA11yFixture.svelte.d.ts.map +0 -1
- package/dist/tooltip/TooltipKbdFixture.svelte +0 -16
- package/dist/tooltip/TooltipKbdFixture.svelte.d.ts +0 -19
- package/dist/tooltip/TooltipKbdFixture.svelte.d.ts.map +0 -1
- package/dist/transfer/Transfer.a11y.test.d.ts +0 -2
- package/dist/transfer/Transfer.a11y.test.d.ts.map +0 -1
- package/dist/transfer/Transfer.a11y.test.js +0 -59
- package/dist/transfer/Transfer.kbd.test.d.ts +0 -2
- package/dist/transfer/Transfer.kbd.test.d.ts.map +0 -1
- package/dist/transfer/Transfer.kbd.test.js +0 -64
- package/dist/transfer/TransferKbdFixture.svelte +0 -23
- package/dist/transfer/TransferKbdFixture.svelte.d.ts +0 -4
- package/dist/transfer/TransferKbdFixture.svelte.d.ts.map +0 -1
- package/dist/transfer/group.test.d.ts +0 -2
- package/dist/transfer/group.test.d.ts.map +0 -1
- package/dist/transfer/group.test.js +0 -47
- package/dist/transfer/reorder.test.d.ts +0 -2
- package/dist/transfer/reorder.test.d.ts.map +0 -1
- package/dist/transfer/reorder.test.js +0 -42
- package/dist/transfer/tree.test.d.ts +0 -2
- package/dist/transfer/tree.test.d.ts.map +0 -1
- package/dist/transfer/tree.test.js +0 -39
- package/dist/tree/Tree.a11y.test.d.ts +0 -2
- package/dist/tree/Tree.a11y.test.d.ts.map +0 -1
- package/dist/tree/Tree.a11y.test.js +0 -56
- package/dist/tree/Tree.kbd.test.d.ts +0 -2
- package/dist/tree/Tree.kbd.test.d.ts.map +0 -1
- package/dist/tree/Tree.kbd.test.js +0 -78
- package/dist/tree/TreeKbdFixture.svelte +0 -30
- package/dist/tree/TreeKbdFixture.svelte.d.ts +0 -19
- package/dist/tree/TreeKbdFixture.svelte.d.ts.map +0 -1
- package/dist/tree-select/TreeSelect.a11y.test.d.ts +0 -2
- package/dist/tree-select/TreeSelect.a11y.test.d.ts.map +0 -1
- package/dist/tree-select/TreeSelect.a11y.test.js +0 -48
- package/dist/tree-select/TreeSelect.kbd.test.d.ts +0 -2
- package/dist/tree-select/TreeSelect.kbd.test.d.ts.map +0 -1
- package/dist/tree-select/TreeSelect.kbd.test.js +0 -46
- package/dist/tree-select/TreeSelectKbdFixture.svelte +0 -20
- package/dist/tree-select/TreeSelectKbdFixture.svelte.d.ts +0 -19
- package/dist/tree-select/TreeSelectKbdFixture.svelte.d.ts.map +0 -1
- package/dist/tree-select/virtual.test.d.ts +0 -2
- package/dist/tree-select/virtual.test.d.ts.map +0 -1
- package/dist/tree-select/virtual.test.js +0 -86
- package/dist/typography/Typography.a11y.test.d.ts +0 -2
- package/dist/typography/Typography.a11y.test.d.ts.map +0 -1
- package/dist/typography/Typography.a11y.test.js +0 -31
- package/dist/typography/TypographyA11yFixture.svelte +0 -27
- package/dist/typography/TypographyA11yFixture.svelte.d.ts +0 -9
- package/dist/typography/TypographyA11yFixture.svelte.d.ts.map +0 -1
- package/dist/upload/Upload.a11y.test.d.ts +0 -2
- package/dist/upload/Upload.a11y.test.d.ts.map +0 -1
- package/dist/upload/Upload.a11y.test.js +0 -49
- package/dist/upload/UploadA11yFixture.svelte +0 -23
- package/dist/upload/UploadA11yFixture.svelte.d.ts +0 -10
- package/dist/upload/UploadA11yFixture.svelte.d.ts.map +0 -1
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { collectLeafKeys, flattenLeaves, isTreeData } from './tree.js';
|
|
3
|
-
describe('transfer/tree', () => {
|
|
4
|
-
const tree = [
|
|
5
|
-
{
|
|
6
|
-
key: 'east',
|
|
7
|
-
label: '华东',
|
|
8
|
-
children: [
|
|
9
|
-
{ key: 'hz', label: '杭州' },
|
|
10
|
-
{ key: 'sh', label: '上海' },
|
|
11
|
-
],
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
key: 'south',
|
|
15
|
-
label: '华南',
|
|
16
|
-
disabled: true,
|
|
17
|
-
children: [{ key: 'gz', label: '广州' }],
|
|
18
|
-
},
|
|
19
|
-
{ key: 'solo', label: '独立项' },
|
|
20
|
-
];
|
|
21
|
-
const flat = [
|
|
22
|
-
{ key: 'a', label: '北京' },
|
|
23
|
-
{ key: 'b', label: '上海' },
|
|
24
|
-
];
|
|
25
|
-
it('isTreeData detects tree vs flat', () => {
|
|
26
|
-
expect(isTreeData(tree)).toBe(true);
|
|
27
|
-
expect(isTreeData(flat)).toBe(false);
|
|
28
|
-
expect(isTreeData([])).toBe(false);
|
|
29
|
-
});
|
|
30
|
-
it('collectLeafKeys returns only leaves in document order', () => {
|
|
31
|
-
expect(collectLeafKeys(tree)).toEqual(['hz', 'sh', 'gz', 'solo']);
|
|
32
|
-
});
|
|
33
|
-
it('flattenLeaves returns leaf items and inherits parent disabled', () => {
|
|
34
|
-
const leaves = flattenLeaves(tree);
|
|
35
|
-
expect(leaves.map((l) => l.key)).toEqual(['hz', 'sh', 'gz', 'solo']);
|
|
36
|
-
expect(leaves.find((l) => l.key === 'gz')?.disabled).toBe(true);
|
|
37
|
-
expect(leaves.find((l) => l.key === 'hz')?.disabled).toBe(false);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tree.a11y.test.d.ts","sourceRoot":"","sources":["../../src/tree/Tree.a11y.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// Tree a11y:层级树控件。
|
|
2
|
-
// 容器 role=tree(aria-multiselectable),每行 role=treeitem 含 aria-level/expanded/selected。
|
|
3
|
-
import { describe, it, expect } from 'vitest';
|
|
4
|
-
import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
|
|
5
|
-
import Tree from './Tree.svelte';
|
|
6
|
-
const treeData = [
|
|
7
|
-
{
|
|
8
|
-
key: 'parent',
|
|
9
|
-
label: 'Parent',
|
|
10
|
-
children: [
|
|
11
|
-
{ key: 'child-1', label: 'Child 1' },
|
|
12
|
-
{ key: 'child-2', label: 'Child 2' },
|
|
13
|
-
],
|
|
14
|
-
},
|
|
15
|
-
{ key: 'leaf', label: 'Leaf' },
|
|
16
|
-
];
|
|
17
|
-
describe('Tree a11y', () => {
|
|
18
|
-
it('默认渲染:role=tree + treeitem,无 axe violations', async () => {
|
|
19
|
-
const { container } = renderWithLocale(Tree, {
|
|
20
|
-
props: { treeData, ariaLabel: 'File tree' },
|
|
21
|
-
});
|
|
22
|
-
const tree = container.querySelector('[role="tree"]');
|
|
23
|
-
expect(tree).not.toBeNull();
|
|
24
|
-
expect(tree?.getAttribute('aria-label')).toBe('File tree');
|
|
25
|
-
expect(container.querySelectorAll('[role="treeitem"]').length).toBeGreaterThanOrEqual(2);
|
|
26
|
-
await expectNoAxeViolations(container);
|
|
27
|
-
});
|
|
28
|
-
it('展开节点:aria-expanded 反映展开态 + aria-level', async () => {
|
|
29
|
-
const { container } = renderWithLocale(Tree, {
|
|
30
|
-
props: { treeData, ariaLabel: 'Tree', defaultExpandAll: true },
|
|
31
|
-
});
|
|
32
|
-
const expanded = container.querySelector('[role="treeitem"][aria-expanded="true"]');
|
|
33
|
-
expect(expanded?.textContent).toContain('Parent');
|
|
34
|
-
expect(expanded?.getAttribute('aria-level')).toBe('1');
|
|
35
|
-
// 展开后子节点可见,aria-level=2
|
|
36
|
-
const child = Array.from(container.querySelectorAll('[role="treeitem"]')).find((el) => el.textContent?.includes('Child 1'));
|
|
37
|
-
expect(child?.getAttribute('aria-level')).toBe('2');
|
|
38
|
-
await expectNoAxeViolations(container);
|
|
39
|
-
});
|
|
40
|
-
it('checkable:treeitem aria-checked + 容器 aria-multiselectable', async () => {
|
|
41
|
-
const { container } = renderWithLocale(Tree, {
|
|
42
|
-
props: { treeData, ariaLabel: 'Tree', checkable: true, defaultExpandAll: true },
|
|
43
|
-
});
|
|
44
|
-
expect(container.querySelector('[role="tree"]')?.getAttribute('aria-multiselectable')).toBe('true');
|
|
45
|
-
expect(container.querySelector('[role="treeitem"][aria-checked]')).not.toBeNull();
|
|
46
|
-
await expectNoAxeViolations(container);
|
|
47
|
-
});
|
|
48
|
-
it('选中态:selectable 节点 aria-selected', async () => {
|
|
49
|
-
const { container } = renderWithLocale(Tree, {
|
|
50
|
-
props: { treeData, ariaLabel: 'Tree', defaultValue: 'leaf' },
|
|
51
|
-
});
|
|
52
|
-
const selected = container.querySelector('[role="treeitem"][aria-selected="true"]');
|
|
53
|
-
expect(selected?.textContent).toContain('Leaf');
|
|
54
|
-
await expectNoAxeViolations(container);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tree.kbd.test.d.ts","sourceRoot":"","sources":["../../src/tree/Tree.kbd.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
// Tree 键盘 e2e(browser project / 真实 chromium),aria-activedescendant 模型。
|
|
2
|
-
// Tree 遵循 WAI-ARIA APG Tree View:单一 tab stop(role=tree 容器 tabindex=0)+
|
|
3
|
-
// aria-activedescendant 漫游。焦点恒留在容器上,treeitem tabindex=-1 从不真实聚焦,
|
|
4
|
-
// 高亮由容器 aria-activedescendant 指向的 treeitem id 表达。故断言 activedescendant
|
|
5
|
-
// 指向的 treeitem 文本变化,而非 toHaveFocus(参照 TreeSelect 样板)。
|
|
6
|
-
// 1. 容器真实聚焦后首次 ↓ 高亮首项;↑↓ 相邻移动;Home/End 跳可见列表首/末。
|
|
7
|
-
// 2. typeahead:输入字符按 label 前缀跳到匹配节点(核心价值)。
|
|
8
|
-
// 3. `*` 展开当前层级全部可展开同级节点(这里仅 Date 可展开 → 其子节点变可见)。
|
|
9
|
-
import { describe, it, expect } from 'vitest';
|
|
10
|
-
import { page } from 'vitest/browser';
|
|
11
|
-
import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
|
|
12
|
-
import TreeKbdFixture from './TreeKbdFixture.svelte';
|
|
13
|
-
function loc(el) {
|
|
14
|
-
return page.elementLocator(el);
|
|
15
|
-
}
|
|
16
|
-
// typeahead 缓冲超时为 600ms:连续按键在缓冲内累积为前缀(c+b → 'cb' 无匹配)。
|
|
17
|
-
// 测「单字符独立跳转」须在每次跳转间等待缓冲清空,故 sleep > 超时。
|
|
18
|
-
const TYPEAHEAD_TIMEOUT = 600;
|
|
19
|
-
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
20
|
-
// 读 role=tree 容器 aria-activedescendant 指向的 treeitem,断言其可见 label 文本。
|
|
21
|
-
function activeNodeText(tree) {
|
|
22
|
-
const id = tree.getAttribute('aria-activedescendant');
|
|
23
|
-
if (!id)
|
|
24
|
-
return null;
|
|
25
|
-
const el = document.getElementById(id);
|
|
26
|
-
// label 在 .cd-tree__label 内(含 switcher/icon 等兄弟),只取 label 文本。
|
|
27
|
-
return el?.querySelector('.cd-tree__label')?.textContent?.trim() ?? null;
|
|
28
|
-
}
|
|
29
|
-
describe('Tree 键盘 e2e(aria-activedescendant roving + typeahead)', () => {
|
|
30
|
-
it('容器聚焦 + ↑↓/Home/End 移高亮(activedescendant)', async () => {
|
|
31
|
-
const { baseElement } = renderKbdFixture(TreeKbdFixture);
|
|
32
|
-
const tree = baseElement.querySelector('[role="tree"]');
|
|
33
|
-
expect(tree).not.toBeNull();
|
|
34
|
-
expect(tree.tabIndex).toBe(0);
|
|
35
|
-
const items = Array.from(tree.querySelectorAll('[role="treeitem"]'));
|
|
36
|
-
// 顶层 4 项可见(Date 未展开)。
|
|
37
|
-
expect(items.length).toBe(4);
|
|
38
|
-
expect(items.every((n) => n.tabIndex === -1)).toBe(true);
|
|
39
|
-
// 容器真实聚焦(单一 tab stop)。
|
|
40
|
-
tree.focus();
|
|
41
|
-
await expect.element(loc(tree)).toHaveFocus();
|
|
42
|
-
// 1. 首次 ↓ 高亮首项 Apple。
|
|
43
|
-
await userEvent.keyboard('{ArrowDown}');
|
|
44
|
-
expect(activeNodeText(tree)).toBe('Apple');
|
|
45
|
-
await userEvent.keyboard('{ArrowDown}');
|
|
46
|
-
expect(activeNodeText(tree)).toBe('Banana');
|
|
47
|
-
await userEvent.keyboard('{ArrowUp}');
|
|
48
|
-
expect(activeNodeText(tree)).toBe('Apple');
|
|
49
|
-
// End 跳末项 Date;Home 回首项 Apple。焦点始终在容器上(activedescendant 模型)。
|
|
50
|
-
await userEvent.keyboard('{End}');
|
|
51
|
-
expect(activeNodeText(tree)).toBe('Date');
|
|
52
|
-
await userEvent.keyboard('{Home}');
|
|
53
|
-
expect(activeNodeText(tree)).toBe('Apple');
|
|
54
|
-
await expect.element(loc(tree)).toHaveFocus();
|
|
55
|
-
});
|
|
56
|
-
it('typeahead 输入字符跳到首字母匹配节点 + `*` 展开同级', async () => {
|
|
57
|
-
const { baseElement } = renderKbdFixture(TreeKbdFixture);
|
|
58
|
-
const tree = baseElement.querySelector('[role="tree"]');
|
|
59
|
-
tree.focus();
|
|
60
|
-
await expect.element(loc(tree)).toHaveFocus();
|
|
61
|
-
// 2. typeahead:无活动项时输入 'c' → 跳到 Cherry。
|
|
62
|
-
await userEvent.keyboard('c');
|
|
63
|
-
expect(activeNodeText(tree)).toBe('Cherry');
|
|
64
|
-
// 等缓冲清空后输入 'b' → 跳到 Banana(否则 'c'+'b' 累积为前缀 'cb' 无匹配)。
|
|
65
|
-
await sleep(TYPEAHEAD_TIMEOUT + 100);
|
|
66
|
-
await userEvent.keyboard('b');
|
|
67
|
-
expect(activeNodeText(tree)).toBe('Banana');
|
|
68
|
-
// 等缓冲清空后输入 'd' → 跳到 Date。
|
|
69
|
-
await sleep(TYPEAHEAD_TIMEOUT + 100);
|
|
70
|
-
await userEvent.keyboard('d');
|
|
71
|
-
expect(activeNodeText(tree)).toBe('Date');
|
|
72
|
-
// 3. `*` 展开当前层级全部可展开同级:Date 展开 → 子节点 Deglet/Medjool 可见。
|
|
73
|
-
await userEvent.keyboard('*');
|
|
74
|
-
const labels = Array.from(tree.querySelectorAll('.cd-tree__label')).map((n) => n.textContent?.trim());
|
|
75
|
-
expect(labels).toContain('Deglet');
|
|
76
|
-
expect(labels).toContain('Medjool');
|
|
77
|
-
});
|
|
78
|
-
});
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
仅供 Tree.kbd.test.ts(browser project)使用的键盘 e2e 夹具。
|
|
3
|
-
Tree 高亮走 aria-activedescendant:焦点留在 role=tree 容器(tabindex=0),
|
|
4
|
-
treeitem tabindex=-1 从不真实聚焦;高亮由容器 aria-activedescendant 指向的
|
|
5
|
-
treeitem id 表达。顶层为叶子 + 一个可展开父节点,用于 ↑↓/Home/End/typeahead/`*`。
|
|
6
|
-
-->
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import { LocaleProvider } from '../locale-provider/index.js';
|
|
9
|
-
import Tree from './Tree.svelte';
|
|
10
|
-
|
|
11
|
-
// 顶层:Apple / Banana / Cherry(叶子)+ Date(可展开,含子)。
|
|
12
|
-
// typeahead:输入 c 跳到 Cherry、b 跳到 Banana。
|
|
13
|
-
const treeData = [
|
|
14
|
-
{ key: 'a', label: 'Apple' },
|
|
15
|
-
{ key: 'b', label: 'Banana' },
|
|
16
|
-
{ key: 'c', label: 'Cherry' },
|
|
17
|
-
{
|
|
18
|
-
key: 'd',
|
|
19
|
-
label: 'Date',
|
|
20
|
-
children: [
|
|
21
|
-
{ key: 'd1', label: 'Deglet' },
|
|
22
|
-
{ key: 'd2', label: 'Medjool' },
|
|
23
|
-
],
|
|
24
|
-
},
|
|
25
|
-
];
|
|
26
|
-
</script>
|
|
27
|
-
|
|
28
|
-
<LocaleProvider locale="en_US">
|
|
29
|
-
<Tree {treeData} ariaLabel="Fruit tree" />
|
|
30
|
-
</LocaleProvider>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
-
$$bindings?: Bindings;
|
|
4
|
-
} & Exports;
|
|
5
|
-
(internal: unknown, props: {
|
|
6
|
-
$$events?: Events;
|
|
7
|
-
$$slots?: Slots;
|
|
8
|
-
}): Exports & {
|
|
9
|
-
$set?: any;
|
|
10
|
-
$on?: any;
|
|
11
|
-
};
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
13
|
-
}
|
|
14
|
-
declare const TreeKbdFixture: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
}, {}, {}, string>;
|
|
17
|
-
type TreeKbdFixture = InstanceType<typeof TreeKbdFixture>;
|
|
18
|
-
export default TreeKbdFixture;
|
|
19
|
-
//# sourceMappingURL=TreeKbdFixture.svelte.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeKbdFixture.svelte.d.ts","sourceRoot":"","sources":["../../src/tree/TreeKbdFixture.svelte.ts"],"names":[],"mappings":"AAkCA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,cAAc;;kBAA+E,CAAC;AAClF,KAAK,cAAc,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,eAAe,cAAc,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelect.a11y.test.d.ts","sourceRoot":"","sources":["../../src/tree-select/TreeSelect.a11y.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
// TreeSelect a11y:combobox 触发器 + role=tree 面板 + role=treeitem(use:floating portal 到 body)。
|
|
2
|
-
// 只断言静态 ARIA + axe 0 violations,不测真实键盘/焦点(jsdom 限制)。
|
|
3
|
-
// 打开态面板 portal 到 document.body,故扫描 document.body。
|
|
4
|
-
import { describe, it, expect } from 'vitest';
|
|
5
|
-
import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
|
|
6
|
-
import TreeSelect from './TreeSelect.svelte';
|
|
7
|
-
const treeData = [
|
|
8
|
-
{
|
|
9
|
-
key: 'parent',
|
|
10
|
-
label: 'Parent',
|
|
11
|
-
children: [
|
|
12
|
-
{ key: 'child-1', label: 'Child 1' },
|
|
13
|
-
{ key: 'child-2', label: 'Child 2' },
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
{ key: 'leaf', label: 'Leaf' },
|
|
17
|
-
];
|
|
18
|
-
describe('TreeSelect a11y', () => {
|
|
19
|
-
it('关闭态:触发器 role=combobox / aria-expanded=false,无 axe violations', async () => {
|
|
20
|
-
const { container } = renderWithLocale(TreeSelect, {
|
|
21
|
-
props: { treeData, ariaLabel: 'Department', placeholder: 'Select node' },
|
|
22
|
-
});
|
|
23
|
-
const combobox = container.querySelector('[role="combobox"]');
|
|
24
|
-
expect(combobox).not.toBeNull();
|
|
25
|
-
expect(combobox?.getAttribute('aria-expanded')).toBe('false');
|
|
26
|
-
expect(combobox?.getAttribute('aria-label')).toBe('Department');
|
|
27
|
-
await expectNoAxeViolations(container);
|
|
28
|
-
});
|
|
29
|
-
it('打开态:role=tree + treeitem 渲染(portal 到 body),无 axe violations', async () => {
|
|
30
|
-
renderWithLocale(TreeSelect, {
|
|
31
|
-
props: { treeData, defaultOpen: true, defaultExpandAll: true, ariaLabel: 'Department' },
|
|
32
|
-
});
|
|
33
|
-
const tree = document.querySelector('[role="tree"]');
|
|
34
|
-
expect(tree).not.toBeNull();
|
|
35
|
-
const items = document.querySelectorAll('[role="treeitem"]');
|
|
36
|
-
expect(items.length).toBeGreaterThan(0);
|
|
37
|
-
await expectNoAxeViolations(document.body);
|
|
38
|
-
});
|
|
39
|
-
it('有 children 节点:aria-expanded 标记展开态', async () => {
|
|
40
|
-
renderWithLocale(TreeSelect, {
|
|
41
|
-
props: { treeData, defaultOpen: true, defaultExpandAll: true, ariaLabel: 'Department' },
|
|
42
|
-
});
|
|
43
|
-
const expandable = document.querySelector('[role="treeitem"][aria-expanded]');
|
|
44
|
-
expect(expandable).not.toBeNull();
|
|
45
|
-
expect(['true', 'false']).toContain(expandable?.getAttribute('aria-expanded'));
|
|
46
|
-
await expectNoAxeViolations(document.body);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelect.kbd.test.d.ts","sourceRoot":"","sources":["../../src/tree-select/TreeSelect.kbd.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
// TreeSelect 键盘 e2e(browser project / 真实 chromium),浮层方向键 roving。
|
|
2
|
-
// TreeSelect 高亮走 aria-activedescendant 模型:焦点留在 role=combobox 触发器上
|
|
3
|
-
// (treeitem tabindex=-1,从不真实聚焦),高亮由触发器 aria-activedescendant 指向的
|
|
4
|
-
// treeitem id 表达。故断言 activedescendant 指向的 treeitem 文本变化,而非 toHaveFocus。
|
|
5
|
-
// 浮层经 use:floating portal 到 document.body —— 在 document 范围查 role=tree。
|
|
6
|
-
// 1. 打开后首次 ↓ 高亮首项;再 ↓ 移到下一项;↑ 回上一项。
|
|
7
|
-
// 2. Home/End 跳可见列表首/末项。
|
|
8
|
-
import { describe, it, expect } from 'vitest';
|
|
9
|
-
import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
|
|
10
|
-
import TreeSelectKbdFixture from './TreeSelectKbdFixture.svelte';
|
|
11
|
-
// 读触发器 aria-activedescendant 指向的 treeitem,断言其可见文本。
|
|
12
|
-
function activeNodeText(combobox) {
|
|
13
|
-
const id = combobox.getAttribute('aria-activedescendant');
|
|
14
|
-
if (!id)
|
|
15
|
-
return null;
|
|
16
|
-
const el = document.getElementById(id);
|
|
17
|
-
return el?.textContent?.trim() ?? null;
|
|
18
|
-
}
|
|
19
|
-
describe('TreeSelect 键盘 e2e(aria-activedescendant 浮层 roving)', () => {
|
|
20
|
-
it('打开后 ↑↓ 移高亮 + Home/End 首末', async () => {
|
|
21
|
-
renderKbdFixture(TreeSelectKbdFixture);
|
|
22
|
-
const combobox = document.querySelector('[role="combobox"]');
|
|
23
|
-
expect(combobox).not.toBeNull();
|
|
24
|
-
// 点击触发器打开浮层(焦点留在 combobox)。
|
|
25
|
-
await userEvent.click(combobox);
|
|
26
|
-
const tree = document.querySelector('[role="tree"]');
|
|
27
|
-
expect(tree).not.toBeNull();
|
|
28
|
-
const nodes = Array.from(tree.querySelectorAll('[role="treeitem"]'));
|
|
29
|
-
expect(nodes.length).toBe(3);
|
|
30
|
-
expect(nodes.every((n) => n.tabIndex === -1)).toBe(true);
|
|
31
|
-
// 1. 首次 ↓ 高亮首项(Apple)。
|
|
32
|
-
await userEvent.keyboard('{ArrowDown}');
|
|
33
|
-
expect(activeNodeText(combobox)).toBe('Apple');
|
|
34
|
-
// 再 ↓ 移到下一项(Banana)。
|
|
35
|
-
await userEvent.keyboard('{ArrowDown}');
|
|
36
|
-
expect(activeNodeText(combobox)).toBe('Banana');
|
|
37
|
-
// ↑ 回到上一项(Apple)。
|
|
38
|
-
await userEvent.keyboard('{ArrowUp}');
|
|
39
|
-
expect(activeNodeText(combobox)).toBe('Apple');
|
|
40
|
-
// 2. End 跳末项(Cherry);Home 回首项(Apple)。
|
|
41
|
-
await userEvent.keyboard('{End}');
|
|
42
|
-
expect(activeNodeText(combobox)).toBe('Cherry');
|
|
43
|
-
await userEvent.keyboard('{Home}');
|
|
44
|
-
expect(activeNodeText(combobox)).toBe('Apple');
|
|
45
|
-
});
|
|
46
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
仅供 TreeSelect.kbd.test.ts(browser project)使用的键盘 e2e 夹具。
|
|
3
|
-
TreeSelect 浮层 portal 到 document.body;高亮走 aria-activedescendant
|
|
4
|
-
(焦点留在 role=combobox 触发器上,方向键在可见树上 roving,treeitem tabindex=-1)。
|
|
5
|
-
用三个顶层叶子节点,使初始可见列表稳定(无展开态干扰)。
|
|
6
|
-
-->
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import { LocaleProvider } from '../locale-provider/index.js';
|
|
9
|
-
import TreeSelect from './TreeSelect.svelte';
|
|
10
|
-
|
|
11
|
-
const treeData = [
|
|
12
|
-
{ key: 'a', label: 'Apple' },
|
|
13
|
-
{ key: 'b', label: 'Banana' },
|
|
14
|
-
{ key: 'c', label: 'Cherry' },
|
|
15
|
-
];
|
|
16
|
-
</script>
|
|
17
|
-
|
|
18
|
-
<LocaleProvider locale="en_US">
|
|
19
|
-
<TreeSelect {treeData} ariaLabel="Fruit tree" placeholder="Pick a fruit" />
|
|
20
|
-
</LocaleProvider>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
-
$$bindings?: Bindings;
|
|
4
|
-
} & Exports;
|
|
5
|
-
(internal: unknown, props: {
|
|
6
|
-
$$events?: Events;
|
|
7
|
-
$$slots?: Slots;
|
|
8
|
-
}): Exports & {
|
|
9
|
-
$set?: any;
|
|
10
|
-
$on?: any;
|
|
11
|
-
};
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
13
|
-
}
|
|
14
|
-
declare const TreeSelectKbdFixture: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
}, {}, {}, string>;
|
|
17
|
-
type TreeSelectKbdFixture = InstanceType<typeof TreeSelectKbdFixture>;
|
|
18
|
-
export default TreeSelectKbdFixture;
|
|
19
|
-
//# sourceMappingURL=TreeSelectKbdFixture.svelte.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelectKbdFixture.svelte.d.ts","sourceRoot":"","sources":["../../src/tree-select/TreeSelectKbdFixture.svelte.ts"],"names":[],"mappings":"AAwBA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,oBAAoB;;kBAA+E,CAAC;AACxF,KAAK,oBAAoB,GAAG,YAAY,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,eAAe,oBAAoB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"virtual.test.d.ts","sourceRoot":"","sources":["../../src/tree-select/virtual.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { flattenVisible, fixedRange, } from '@chenzy-design/core';
|
|
3
|
-
// 这些用例佐证 TreeSelect 虚拟化/异步加载所复用的纯派生逻辑(与 Tree 同范式):
|
|
4
|
-
// 1) mergedTree 注入已加载子节点的纯函数行为;
|
|
5
|
-
// 2) flattenVisible + fixedRange 视口切片只取窗口内行(虚拟化核心)。
|
|
6
|
-
const VIRTUAL_OVERSCAN = 4;
|
|
7
|
-
// 与 TreeSelect.svelte 内 mergedTree 注入逻辑等价的纯函数。
|
|
8
|
-
function injectLoaded(nodes, loaded) {
|
|
9
|
-
if (loaded.size === 0)
|
|
10
|
-
return nodes;
|
|
11
|
-
const inject = (list) => list.map((n) => {
|
|
12
|
-
const kids = n.children ?? loaded.get(n.key);
|
|
13
|
-
if (!kids)
|
|
14
|
-
return n;
|
|
15
|
-
return { ...n, children: inject(kids) };
|
|
16
|
-
});
|
|
17
|
-
return inject(nodes);
|
|
18
|
-
}
|
|
19
|
-
describe('TreeSelect mergedTree 异步注入', () => {
|
|
20
|
-
it('无加载时返回原引用(零开销)', () => {
|
|
21
|
-
const data = [{ key: 'a', label: 'A', isLeaf: true }];
|
|
22
|
-
expect(injectLoaded(data, new Map())).toBe(data);
|
|
23
|
-
});
|
|
24
|
-
it('把已加载子节点注入对应节点(不改原数据)', () => {
|
|
25
|
-
const data = [{ key: 'a', label: 'A' }];
|
|
26
|
-
const loaded = new Map([
|
|
27
|
-
['a', [{ key: 'a-1', label: 'A1' }, { key: 'a-2', label: 'A2' }]],
|
|
28
|
-
]);
|
|
29
|
-
const merged = injectLoaded(data, loaded);
|
|
30
|
-
expect(merged[0]?.children).toHaveLength(2);
|
|
31
|
-
// 原数据不被改写(红线 #1)
|
|
32
|
-
expect(data[0]?.children).toBeUndefined();
|
|
33
|
-
});
|
|
34
|
-
it('注入后的子树可被 flattenVisible 在展开时纳入可见行', () => {
|
|
35
|
-
const data = [{ key: 'a', label: 'A' }];
|
|
36
|
-
const loaded = new Map([
|
|
37
|
-
['a', [{ key: 'a-1', label: 'A1' }]],
|
|
38
|
-
]);
|
|
39
|
-
const merged = injectLoaded(data, loaded);
|
|
40
|
-
const flat = flattenVisible(merged, new Set(['a']));
|
|
41
|
-
expect(flat.map((f) => f.node.key)).toEqual(['a', 'a-1']);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('TreeSelect 虚拟化视口切片', () => {
|
|
45
|
-
// 50 分组 × 20 子项的大树,全展开。
|
|
46
|
-
const big = Array.from({ length: 50 }, (_, g) => ({
|
|
47
|
-
key: `g${g}`,
|
|
48
|
-
label: `G${g}`,
|
|
49
|
-
children: Array.from({ length: 20 }, (_, c) => ({
|
|
50
|
-
key: `g${g}-c${c}`,
|
|
51
|
-
label: `G${g}C${c}`,
|
|
52
|
-
})),
|
|
53
|
-
}));
|
|
54
|
-
const allExpanded = new Set(big.map((n) => n.key));
|
|
55
|
-
const flat = flattenVisible(big, allExpanded);
|
|
56
|
-
it('全展开后可见行 = 50 分组 + 50*20 子项 = 1050', () => {
|
|
57
|
-
expect(flat.length).toBe(1050);
|
|
58
|
-
});
|
|
59
|
-
it('fixedRange 在视口顶部只取窗口 + overscan,远小于全量', () => {
|
|
60
|
-
const itemHeight = 32;
|
|
61
|
-
const height = 224; // 默认面板高度
|
|
62
|
-
const range = fixedRange(0, height, itemHeight, flat.length, VIRTUAL_OVERSCAN);
|
|
63
|
-
const rendered = flat.slice(range.startIndex, range.endIndex);
|
|
64
|
-
// 视口 7 行可见 + 4 overscan(顶部 startIndex=0),渲染数远小于 1050。
|
|
65
|
-
expect(rendered.length).toBeLessThan(20);
|
|
66
|
-
expect(range.startIndex).toBe(0);
|
|
67
|
-
expect(rendered[0]?.node.key).toBe('g0');
|
|
68
|
-
});
|
|
69
|
-
it('滚动到中部时窗口随 scrollTop 平移', () => {
|
|
70
|
-
const itemHeight = 32;
|
|
71
|
-
const height = 224;
|
|
72
|
-
const scrollTop = 500 * itemHeight; // 滚到第 500 行附近
|
|
73
|
-
const range = fixedRange(scrollTop, height, itemHeight, flat.length, VIRTUAL_OVERSCAN);
|
|
74
|
-
expect(range.startIndex).toBeGreaterThan(490);
|
|
75
|
-
expect(range.endIndex).toBeLessThan(flat.length);
|
|
76
|
-
const rendered = flat.slice(range.startIndex, range.endIndex);
|
|
77
|
-
expect(rendered.length).toBeLessThan(20);
|
|
78
|
-
});
|
|
79
|
-
it('行偏移按 (startIndex + i) * rowHeight 计算', () => {
|
|
80
|
-
const itemHeight = 32;
|
|
81
|
-
const range = fixedRange(500 * itemHeight, 224, itemHeight, flat.length, VIRTUAL_OVERSCAN);
|
|
82
|
-
// 渲染切片第 0 项的 translateY 应等于 startIndex * rowHeight。
|
|
83
|
-
const firstOffset = (range.startIndex + 0) * itemHeight;
|
|
84
|
-
expect(firstOffset).toBe(range.startIndex * itemHeight);
|
|
85
|
-
});
|
|
86
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Typography.a11y.test.d.ts","sourceRoot":"","sources":["../../src/typography/Typography.a11y.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
// Typography a11y:Text→<span>、Title→<hN>、Link→<a>。
|
|
2
|
-
// 经 TypographyA11yFixture 提供真实文本 children(自带 LocaleProvider,故直接 render)。
|
|
3
|
-
import { describe, it, expect } from 'vitest';
|
|
4
|
-
import { render } from '@testing-library/svelte';
|
|
5
|
-
import { expectNoAxeViolations } from '../test-utils/a11y.js';
|
|
6
|
-
import TypographyA11yFixture from './TypographyA11yFixture.svelte';
|
|
7
|
-
describe('Typography a11y', () => {
|
|
8
|
-
it('Text:渲染文本,无 axe violations', async () => {
|
|
9
|
-
const { container } = render(TypographyA11yFixture, {
|
|
10
|
-
props: { variant: 'text', text: 'Body text' },
|
|
11
|
-
});
|
|
12
|
-
expect(container.textContent).toContain('Body text');
|
|
13
|
-
await expectNoAxeViolations(container);
|
|
14
|
-
});
|
|
15
|
-
it('Title:渲染为 heading 元素,无 axe violations', async () => {
|
|
16
|
-
const { container } = render(TypographyA11yFixture, {
|
|
17
|
-
props: { variant: 'title', text: 'Section title', props: { heading: 2 } },
|
|
18
|
-
});
|
|
19
|
-
expect(container.querySelector('h2')?.textContent).toContain('Section title');
|
|
20
|
-
await expectNoAxeViolations(container);
|
|
21
|
-
});
|
|
22
|
-
it('Link:渲染 <a> 带 href 且有可访问名,无 axe violations', async () => {
|
|
23
|
-
const { container } = render(TypographyA11yFixture, {
|
|
24
|
-
props: { variant: 'link', text: 'Visit', props: { href: 'https://example.com' } },
|
|
25
|
-
});
|
|
26
|
-
const a = container.querySelector('a');
|
|
27
|
-
expect(a?.getAttribute('href')).toBe('https://example.com');
|
|
28
|
-
expect(a?.textContent).toContain('Visit');
|
|
29
|
-
await expectNoAxeViolations(container);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Typography a11y 测试夹具:为 Text/Title/Link 提供真实文本 children。
|
|
3
|
-
自带 LocaleProvider,故测试直接 render 本夹具。variant 选择子组件。
|
|
4
|
-
-->
|
|
5
|
-
<script lang="ts">
|
|
6
|
-
import { LocaleProvider } from '../locale-provider/index.js';
|
|
7
|
-
import Text from './Text.svelte';
|
|
8
|
-
import Title from './Title.svelte';
|
|
9
|
-
import Link from './Link.svelte';
|
|
10
|
-
|
|
11
|
-
interface Props {
|
|
12
|
-
variant?: 'text' | 'title' | 'link';
|
|
13
|
-
text?: string;
|
|
14
|
-
props?: Record<string, unknown>;
|
|
15
|
-
}
|
|
16
|
-
let { variant = 'text', text = 'Hello', props = {} }: Props = $props();
|
|
17
|
-
</script>
|
|
18
|
-
|
|
19
|
-
<LocaleProvider locale="en_US">
|
|
20
|
-
{#if variant === 'title'}
|
|
21
|
-
<Title {...props}>{text}</Title>
|
|
22
|
-
{:else if variant === 'link'}
|
|
23
|
-
<Link {...props}>{text}</Link>
|
|
24
|
-
{:else}
|
|
25
|
-
<Text {...props}>{text}</Text>
|
|
26
|
-
{/if}
|
|
27
|
-
</LocaleProvider>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
interface Props {
|
|
2
|
-
variant?: 'text' | 'title' | 'link';
|
|
3
|
-
text?: string;
|
|
4
|
-
props?: Record<string, unknown>;
|
|
5
|
-
}
|
|
6
|
-
declare const TypographyA11yFixture: import("svelte").Component<Props, {}, "">;
|
|
7
|
-
type TypographyA11yFixture = ReturnType<typeof TypographyA11yFixture>;
|
|
8
|
-
export default TypographyA11yFixture;
|
|
9
|
-
//# sourceMappingURL=TypographyA11yFixture.svelte.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TypographyA11yFixture.svelte.d.ts","sourceRoot":"","sources":["../../src/typography/TypographyA11yFixture.svelte.ts"],"names":[],"mappings":"AASE,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAuBH,QAAA,MAAM,qBAAqB,2CAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Upload.a11y.test.d.ts","sourceRoot":"","sources":["../../src/upload/Upload.a11y.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
// Upload a11y:触发按钮/拖拽区 locale 可访问名;文件列表删除按钮可访问名。
|
|
2
|
-
// 经 UploadA11yFixture 渲染(harness 注入的空 children 插槽会命中 Upload 的
|
|
3
|
-
// {#if children} 分支,吞掉内置 locale 文案 → 触发按钮空名,故走 fixture 绕过)。
|
|
4
|
-
import { describe, it, expect } from 'vitest';
|
|
5
|
-
import { render } from '@testing-library/svelte';
|
|
6
|
-
import { expectNoAxeViolations } from '../test-utils/a11y.js';
|
|
7
|
-
import Fixture from './UploadA11yFixture.svelte';
|
|
8
|
-
const renderFixture = (props = {}) => render(Fixture, { props });
|
|
9
|
-
describe('Upload a11y', () => {
|
|
10
|
-
it('默认渲染:触发按钮有 locale 文本可访问名,无 axe violations', async () => {
|
|
11
|
-
const { container } = renderFixture();
|
|
12
|
-
const trigger = container.querySelector('.cd-upload__trigger');
|
|
13
|
-
expect(trigger).not.toBeNull();
|
|
14
|
-
// 触发按钮可访问名来自 en_US locale(Upload.trigger = 'Select file')。
|
|
15
|
-
expect(trigger?.textContent?.trim()).toBeTruthy();
|
|
16
|
-
expect(trigger?.textContent?.trim()).not.toBe('Upload.trigger');
|
|
17
|
-
await expectNoAxeViolations(container);
|
|
18
|
-
});
|
|
19
|
-
it('drag 模式:拖拽区 role=button + locale 文本,无 axe violations', async () => {
|
|
20
|
-
const { container } = renderFixture({ drag: true });
|
|
21
|
-
const dragger = container.querySelector('.cd-upload__dragger');
|
|
22
|
-
expect(dragger?.getAttribute('role')).toBe('button');
|
|
23
|
-
expect(dragger?.textContent?.trim()).toBeTruthy();
|
|
24
|
-
await expectNoAxeViolations(container);
|
|
25
|
-
});
|
|
26
|
-
it('文件列表(success/error 项):删除按钮 locale 可访问名,无 axe violations', async () => {
|
|
27
|
-
const files = [
|
|
28
|
-
{ uid: 'u1', name: 'doc.pdf', size: 4096, status: 'success', percent: 100 },
|
|
29
|
-
{ uid: 'u2', name: 'big.zip', size: 8192, status: 'error', error: 'Too large' },
|
|
30
|
-
];
|
|
31
|
-
const { container } = renderFixture({ value: files });
|
|
32
|
-
const removeBtns = container.querySelectorAll('.cd-upload__item-remove');
|
|
33
|
-
expect(removeBtns.length).toBe(2);
|
|
34
|
-
const label = removeBtns[0]?.getAttribute('aria-label');
|
|
35
|
-
expect(label).toBeTruthy();
|
|
36
|
-
expect(label).not.toBe('Upload.remove');
|
|
37
|
-
await expectNoAxeViolations(container);
|
|
38
|
-
});
|
|
39
|
-
// uploading 文件项内嵌 Progress 现传入关联文件名的 ariaLabel(Upload.uploadingProgress),
|
|
40
|
-
// progressbar 有可访问名,无 aria-progressbar-name 违规。
|
|
41
|
-
it('uploading 项:内嵌 Progress 有文件名关联可访问名,无 axe violations', async () => {
|
|
42
|
-
const files = [
|
|
43
|
-
{ uid: 'u1', name: 'photo.png', size: 2048, status: 'uploading', percent: 40 },
|
|
44
|
-
];
|
|
45
|
-
const { container } = renderFixture({ value: files });
|
|
46
|
-
expect(container.querySelector('[role="progressbar"]')).not.toBeNull();
|
|
47
|
-
await expectNoAxeViolations(container);
|
|
48
|
-
});
|
|
49
|
-
});
|