@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,25 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
仅供 Tabs.kbd.test.ts(browser project)使用的 tablist roving 键盘 e2e 夹具。
|
|
3
|
-
声明式 <Tabs.Pane> 用法:tab 的 aria-controls 指向真实面板,面板按 activeKey 显隐,
|
|
4
|
-
便于断言 keyboardActivation='auto'(默认)下「焦点移动即激活」。
|
|
5
|
-
菜单前后各放一个按钮,用于验证 roving 单停靠点(Tab 只进一个 tab,其余 tabindex=-1)。
|
|
6
|
-
-->
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import { LocaleProvider } from '../locale-provider/index.js';
|
|
9
|
-
import { Tabs } from './index.js';
|
|
10
|
-
|
|
11
|
-
interface Props {
|
|
12
|
-
defaultValue?: string;
|
|
13
|
-
}
|
|
14
|
-
let { defaultValue = 'overview' }: Props = $props();
|
|
15
|
-
</script>
|
|
16
|
-
|
|
17
|
-
<LocaleProvider locale="en_US">
|
|
18
|
-
<button type="button" data-testid="before">before</button>
|
|
19
|
-
<Tabs {defaultValue} type="line">
|
|
20
|
-
<Tabs.Pane itemKey="overview" tab="Overview">Overview content</Tabs.Pane>
|
|
21
|
-
<Tabs.Pane itemKey="details" tab="Details">Details content</Tabs.Pane>
|
|
22
|
-
<Tabs.Pane itemKey="history" tab="History">History content</Tabs.Pane>
|
|
23
|
-
</Tabs>
|
|
24
|
-
<button type="button" data-testid="after">after</button>
|
|
25
|
-
</LocaleProvider>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TabsKbdFixture.svelte.d.ts","sourceRoot":"","sources":["../../src/tabs/TabsKbdFixture.svelte.ts"],"names":[],"mappings":"AAOE,UAAU,KAAK;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAqBH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tag.a11y.test.d.ts","sourceRoot":"","sources":["../../src/tag/Tag.a11y.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
// Tag a11y:closable 关闭按钮有可访问名(locale 派生);checkable 取 role=checkbox + aria-checked。
|
|
2
|
-
// 经 TagA11yFixture 提供真实文本 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 TagA11yFixture from './TagA11yFixture.svelte';
|
|
7
|
-
describe('Tag a11y', () => {
|
|
8
|
-
it('基础:渲染文本内容,无 axe violations', async () => {
|
|
9
|
-
const { container } = render(TagA11yFixture, { props: { text: 'Done' } });
|
|
10
|
-
expect(container.querySelector('.cd-tag')?.textContent).toContain('Done');
|
|
11
|
-
await expectNoAxeViolations(container);
|
|
12
|
-
});
|
|
13
|
-
it('closable:关闭按钮带 aria-label(来自 locale),无 axe violations', async () => {
|
|
14
|
-
const { container } = render(TagA11yFixture, {
|
|
15
|
-
props: { text: 'Done', props: { closable: true, tagText: 'Done' } },
|
|
16
|
-
});
|
|
17
|
-
const closeBtn = container.querySelector('.cd-tag__close');
|
|
18
|
-
expect(closeBtn?.getAttribute('aria-label')).toBeTruthy();
|
|
19
|
-
await expectNoAxeViolations(container);
|
|
20
|
-
});
|
|
21
|
-
it('checkable:role=checkbox + aria-checked,无 axe violations', async () => {
|
|
22
|
-
const { container } = render(TagA11yFixture, {
|
|
23
|
-
props: { text: 'Filter', props: { checkable: true, checked: true } },
|
|
24
|
-
});
|
|
25
|
-
const root = container.querySelector('.cd-tag');
|
|
26
|
-
expect(root?.getAttribute('role')).toBe('checkbox');
|
|
27
|
-
expect(root?.getAttribute('aria-checked')).toBe('true');
|
|
28
|
-
await expectNoAxeViolations(container);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Tag a11y 测试夹具:提供真实文本 children(createRawSnippet 在 harness 下不渲染文本)。
|
|
3
|
-
自带 LocaleProvider,故测试直接 render 本夹具。
|
|
4
|
-
-->
|
|
5
|
-
<script lang="ts">
|
|
6
|
-
import { LocaleProvider } from '../locale-provider/index.js';
|
|
7
|
-
import Tag from './Tag.svelte';
|
|
8
|
-
|
|
9
|
-
interface Props {
|
|
10
|
-
text?: string;
|
|
11
|
-
props?: Record<string, unknown>;
|
|
12
|
-
}
|
|
13
|
-
let { text = 'Done', props = {} }: Props = $props();
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<LocaleProvider locale="en_US">
|
|
17
|
-
<Tag {...props}>{text}</Tag>
|
|
18
|
-
</LocaleProvider>
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
interface Props {
|
|
2
|
-
text?: string;
|
|
3
|
-
props?: Record<string, unknown>;
|
|
4
|
-
}
|
|
5
|
-
declare const TagA11yFixture: import("svelte").Component<Props, {}, "">;
|
|
6
|
-
type TagA11yFixture = ReturnType<typeof TagA11yFixture>;
|
|
7
|
-
export default TagA11yFixture;
|
|
8
|
-
//# sourceMappingURL=TagA11yFixture.svelte.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TagA11yFixture.svelte.d.ts","sourceRoot":"","sources":["../../src/tag/TagA11yFixture.svelte.ts"],"names":[],"mappings":"AAOE,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAeH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TagInput.a11y.test.d.ts","sourceRoot":"","sources":["../../src/tag-input/TagInput.a11y.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// TagInput a11y:role=group + ariaLabel 容器可访问名;输入框可访问名;
|
|
2
|
-
// 标签删除按钮 locale 可访问名。
|
|
3
|
-
import { describe, it, expect } from 'vitest';
|
|
4
|
-
import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
|
|
5
|
-
import TagInput from './TagInput.svelte';
|
|
6
|
-
describe('TagInput a11y', () => {
|
|
7
|
-
it('默认渲染:role=group + ariaLabel,输入框有可访问名,无 axe violations', async () => {
|
|
8
|
-
const { container } = renderWithLocale(TagInput, {
|
|
9
|
-
props: { ariaLabel: 'Tags', placeholder: 'Add tag' },
|
|
10
|
-
});
|
|
11
|
-
const group = container.querySelector('[role="group"]');
|
|
12
|
-
expect(group).not.toBeNull();
|
|
13
|
-
expect(group?.getAttribute('aria-label')).toBe('Tags');
|
|
14
|
-
// 输入框同样以 ariaLabel 暴露可访问名(无可见 label)。
|
|
15
|
-
const input = container.querySelector('input');
|
|
16
|
-
expect(input?.getAttribute('aria-label')).toBe('Tags');
|
|
17
|
-
await expectNoAxeViolations(container);
|
|
18
|
-
});
|
|
19
|
-
it('已有标签:删除按钮 locale 可访问名,无 axe violations', async () => {
|
|
20
|
-
const { container } = renderWithLocale(TagInput, {
|
|
21
|
-
props: { ariaLabel: 'Skills', defaultValue: ['svelte', 'a11y'] },
|
|
22
|
-
});
|
|
23
|
-
const removeBtns = container.querySelectorAll('.cd-tag-input__remove');
|
|
24
|
-
expect(removeBtns.length).toBe(2);
|
|
25
|
-
const label = removeBtns[0]?.getAttribute('aria-label');
|
|
26
|
-
expect(label).toBeTruthy();
|
|
27
|
-
expect(label).not.toBe('TagInput.remove');
|
|
28
|
-
await expectNoAxeViolations(container);
|
|
29
|
-
});
|
|
30
|
-
it('disabled:aria-disabled=true,无 axe violations', async () => {
|
|
31
|
-
const { container } = renderWithLocale(TagInput, {
|
|
32
|
-
props: { ariaLabel: 'Tags', defaultValue: ['a'], disabled: true },
|
|
33
|
-
});
|
|
34
|
-
const group = container.querySelector('[role="group"]');
|
|
35
|
-
expect(group?.getAttribute('aria-disabled')).toBe('true');
|
|
36
|
-
await expectNoAxeViolations(container);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reorder.test.d.ts","sourceRoot":"","sources":["../../src/tag-input/reorder.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { computeInsertSide, reorder } from './reorder.js';
|
|
3
|
-
describe('tag-input/reorder', () => {
|
|
4
|
-
describe('computeInsertSide', () => {
|
|
5
|
-
it('left half → before', () => {
|
|
6
|
-
expect(computeInsertSide(0, 100)).toBe('before');
|
|
7
|
-
expect(computeInsertSide(49, 100)).toBe('before');
|
|
8
|
-
});
|
|
9
|
-
it('mid and right half → after', () => {
|
|
10
|
-
expect(computeInsertSide(50, 100)).toBe('after');
|
|
11
|
-
expect(computeInsertSide(99, 100)).toBe('after');
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
describe('reorder', () => {
|
|
15
|
-
const list = ['a', 'b', 'c', 'd'];
|
|
16
|
-
it('moves an item forward (before a later target)', () => {
|
|
17
|
-
expect(reorder(list, 0, 2, 'before')).toEqual(['b', 'a', 'c', 'd']);
|
|
18
|
-
});
|
|
19
|
-
it('moves an item forward (after a later target)', () => {
|
|
20
|
-
expect(reorder(list, 0, 2, 'after')).toEqual(['b', 'c', 'a', 'd']);
|
|
21
|
-
});
|
|
22
|
-
it('moves an item backward (before an earlier target)', () => {
|
|
23
|
-
expect(reorder(list, 3, 1, 'before')).toEqual(['a', 'd', 'b', 'c']);
|
|
24
|
-
});
|
|
25
|
-
it('moves an item backward (after an earlier target)', () => {
|
|
26
|
-
expect(reorder(list, 3, 1, 'after')).toEqual(['a', 'b', 'd', 'c']);
|
|
27
|
-
});
|
|
28
|
-
it('moves to the very end', () => {
|
|
29
|
-
expect(reorder(list, 0, 3, 'after')).toEqual(['b', 'c', 'd', 'a']);
|
|
30
|
-
});
|
|
31
|
-
it('moves to the very start', () => {
|
|
32
|
-
expect(reorder(list, 3, 0, 'before')).toEqual(['d', 'a', 'b', 'c']);
|
|
33
|
-
});
|
|
34
|
-
it('no-op when result position equals source (drop after previous neighbor)', () => {
|
|
35
|
-
expect(reorder(list, 1, 0, 'after')).toEqual(list);
|
|
36
|
-
expect(reorder(list, 1, 2, 'before')).toEqual(list);
|
|
37
|
-
});
|
|
38
|
-
it('returns a new array (immutable)', () => {
|
|
39
|
-
const out = reorder(list, 0, 1, 'after');
|
|
40
|
-
expect(out).not.toBe(list);
|
|
41
|
-
expect(list).toEqual(['a', 'b', 'c', 'd']);
|
|
42
|
-
});
|
|
43
|
-
it('out-of-range indices return a copy unchanged', () => {
|
|
44
|
-
expect(reorder(list, -1, 2, 'before')).toEqual(list);
|
|
45
|
-
expect(reorder(list, 0, 9, 'after')).toEqual(list);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
LocaleHarness — a11y 测试专用包装组件。
|
|
3
|
-
把被测组件包进 <LocaleProvider>,使 useLocale() 能拿到 context(默认 en_US)。
|
|
4
|
-
通过 component prop 接收被测组件构造器,props 透传,children 作为默认插槽渲染。
|
|
5
|
-
注意:仅用于测试,不对外导出。
|
|
6
|
-
-->
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import type { Component, Snippet } from 'svelte';
|
|
9
|
-
import { LocaleProvider } from '../locale-provider/index.js';
|
|
10
|
-
|
|
11
|
-
interface Props {
|
|
12
|
-
// 被测组件构造器(Svelte 5 Component)。
|
|
13
|
-
component: Component<any>;
|
|
14
|
-
// 透传给被测组件的 props。
|
|
15
|
-
props?: Record<string, unknown>;
|
|
16
|
-
// 语言码,默认 en_US。
|
|
17
|
-
locale?: string;
|
|
18
|
-
// 默认插槽内容(如 Button 的文字)。
|
|
19
|
-
children?: Snippet;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
let { component: Cmp, props = {}, locale = 'en_US', children }: Props = $props();
|
|
23
|
-
</script>
|
|
24
|
-
|
|
25
|
-
<LocaleProvider {locale}>
|
|
26
|
-
<Cmp {...props}>
|
|
27
|
-
{#if children}{@render children()}{/if}
|
|
28
|
-
</Cmp>
|
|
29
|
-
</LocaleProvider>
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Component, Snippet } from 'svelte';
|
|
2
|
-
interface Props {
|
|
3
|
-
component: Component<any>;
|
|
4
|
-
props?: Record<string, unknown>;
|
|
5
|
-
locale?: string;
|
|
6
|
-
children?: Snippet;
|
|
7
|
-
}
|
|
8
|
-
declare const LocaleHarness: Component<Props, {}, "">;
|
|
9
|
-
type LocaleHarness = ReturnType<typeof LocaleHarness>;
|
|
10
|
-
export default LocaleHarness;
|
|
11
|
-
//# sourceMappingURL=LocaleHarness.svelte.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LocaleHarness.svelte.d.ts","sourceRoot":"","sources":["../../src/test-utils/LocaleHarness.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAI/C,UAAU,KAAK;IAEb,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IAE1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkBH,QAAA,MAAM,aAAa,0BAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { type RenderResult } from '@testing-library/svelte';
|
|
2
|
-
import type { Component } from 'svelte';
|
|
3
|
-
import { type RunOptions } from 'axe-core';
|
|
4
|
-
type AnyComponent = Component<Record<string, unknown>>;
|
|
5
|
-
export interface RenderWithLocaleOptions {
|
|
6
|
-
/** 透传给被测组件的 props。 */
|
|
7
|
-
props?: Record<string, unknown>;
|
|
8
|
-
/** 语言码,默认 en_US。 */
|
|
9
|
-
locale?: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* 把组件包进 LocaleProvider 渲染到 jsdom。
|
|
13
|
-
* 返回 testing-library 的 RenderResult(含 container / baseElement / queries)。
|
|
14
|
-
*
|
|
15
|
-
* 用法:
|
|
16
|
-
* const { container } = renderWithLocale(Button, { props: { type: 'primary' } });
|
|
17
|
-
*
|
|
18
|
-
* 纯展示组件(无 useLocale)同样可用——Provider 包裹无副作用。
|
|
19
|
-
*/
|
|
20
|
-
export declare function renderWithLocale(component: AnyComponent, options?: RenderWithLocaleOptions): RenderResult<AnyComponent>;
|
|
21
|
-
export interface AxeAssertOptions {
|
|
22
|
-
/** 额外要禁用的规则 id(在默认禁用项之外追加)。 */
|
|
23
|
-
disableRules?: string[];
|
|
24
|
-
/** 覆盖默认 runOptions(一般不需要)。 */
|
|
25
|
-
runOptions?: RunOptions;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* 对容器跑 axe-core,断言 0 violations。
|
|
29
|
-
* 默认规则集:WCAG 2.0/2.1 A & AA(axe tags wcag2a/wcag2aa/wcag21a/wcag21aa)。
|
|
30
|
-
* 默认禁用 jsdom 下不可靠的规则(见 JSDOM_DISABLED_RULES)。
|
|
31
|
-
*
|
|
32
|
-
* 用法:await expectNoAxeViolations(container);
|
|
33
|
-
*/
|
|
34
|
-
export declare function expectNoAxeViolations(container: Element, options?: AxeAssertOptions): Promise<void>;
|
|
35
|
-
export {};
|
|
36
|
-
//# sourceMappingURL=a11y.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../src/test-utils/a11y.ts"],"names":[],"mappings":"AAUA,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAY,EAAE,KAAK,UAAU,EAAe,MAAM,UAAU,CAAC;AAI7D,KAAK,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAIvD,MAAM,WAAW,uBAAuB;IACtC,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,YAAY,EACvB,OAAO,GAAE,uBAA4B,GACpC,YAAY,CAAC,YAAY,CAAC,CAK5B;AAQD,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAWD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,OAAO,EAClB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
package/dist/test-utils/a11y.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
// a11y 渲染测试基建(仅 dom project / jsdom 下使用)。
|
|
2
|
-
//
|
|
3
|
-
// 提供两个帮手:
|
|
4
|
-
// - renderWithLocale:用 testing-library 的 render 把组件挂到 jsdom,
|
|
5
|
-
// 并用 LocaleHarness 包一层 LocaleProvider(默认 en_US),使 useLocale() 可用。
|
|
6
|
-
// - expectNoAxeViolations:对容器跑 axe-core,断言 0 violations。
|
|
7
|
-
//
|
|
8
|
-
// 设计取舍:本套件只做 axe 静态规则 + role/aria 断言,不测真实键盘/焦点行为
|
|
9
|
-
// (jsdom 焦点模型不完整、委托事件合成不可靠——见项目已知教训)。焦点陷阱/键盘
|
|
10
|
-
// 导航留给将来 Playwright。
|
|
11
|
-
import { render } from '@testing-library/svelte';
|
|
12
|
-
import axe from 'axe-core';
|
|
13
|
-
import { expect } from 'vitest';
|
|
14
|
-
import LocaleHarness from './LocaleHarness.svelte';
|
|
15
|
-
/**
|
|
16
|
-
* 把组件包进 LocaleProvider 渲染到 jsdom。
|
|
17
|
-
* 返回 testing-library 的 RenderResult(含 container / baseElement / queries)。
|
|
18
|
-
*
|
|
19
|
-
* 用法:
|
|
20
|
-
* const { container } = renderWithLocale(Button, { props: { type: 'primary' } });
|
|
21
|
-
*
|
|
22
|
-
* 纯展示组件(无 useLocale)同样可用——Provider 包裹无副作用。
|
|
23
|
-
*/
|
|
24
|
-
export function renderWithLocale(component, options = {}) {
|
|
25
|
-
const { props = {}, locale = 'en_US' } = options;
|
|
26
|
-
return render(LocaleHarness, {
|
|
27
|
-
props: { component, props, locale },
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
// jsdom 下不可靠 / 无意义、需禁用的 axe 规则及原因:
|
|
31
|
-
// - color-contrast:jsdom 不做布局与渲染,拿不到真实计算后的颜色/尺寸,
|
|
32
|
-
// 对比度无法计算(axe 本就会 incomplete,这里显式关掉避免噪音)。对比度
|
|
33
|
-
// 交给将来的真实浏览器(Playwright)或专门的 token 对比度校验。
|
|
34
|
-
const JSDOM_DISABLED_RULES = ['color-contrast'];
|
|
35
|
-
function formatViolations(violations) {
|
|
36
|
-
return violations
|
|
37
|
-
.map((v) => {
|
|
38
|
-
const nodes = v.nodes.map((n) => ` - ${n.html}\n ${n.failureSummary ?? ''}`).join('\n');
|
|
39
|
-
return ` [${v.id}] ${v.help} (${v.impact ?? 'n/a'})\n ${v.helpUrl}\n${nodes}`;
|
|
40
|
-
})
|
|
41
|
-
.join('\n\n');
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* 对容器跑 axe-core,断言 0 violations。
|
|
45
|
-
* 默认规则集:WCAG 2.0/2.1 A & AA(axe tags wcag2a/wcag2aa/wcag21a/wcag21aa)。
|
|
46
|
-
* 默认禁用 jsdom 下不可靠的规则(见 JSDOM_DISABLED_RULES)。
|
|
47
|
-
*
|
|
48
|
-
* 用法:await expectNoAxeViolations(container);
|
|
49
|
-
*/
|
|
50
|
-
export async function expectNoAxeViolations(container, options = {}) {
|
|
51
|
-
const { disableRules = [], runOptions } = options;
|
|
52
|
-
const rules = {};
|
|
53
|
-
for (const id of [...JSDOM_DISABLED_RULES, ...disableRules]) {
|
|
54
|
-
rules[id] = { enabled: false };
|
|
55
|
-
}
|
|
56
|
-
const results = await axe.run(container, runOptions ?? {
|
|
57
|
-
runOnly: {
|
|
58
|
-
type: 'tag',
|
|
59
|
-
values: ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'],
|
|
60
|
-
},
|
|
61
|
-
rules,
|
|
62
|
-
});
|
|
63
|
-
if (results.violations.length > 0) {
|
|
64
|
-
throw new Error(`Expected no axe violations but found ${results.violations.length}:\n\n${formatViolations(results.violations)}`);
|
|
65
|
-
}
|
|
66
|
-
// 给 vitest 一个显式断言计数,便于报告/快照。
|
|
67
|
-
expect(results.violations).toHaveLength(0);
|
|
68
|
-
}
|
package/dist/test-utils/kbd.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { userEvent } from 'vitest/browser';
|
|
2
|
-
import type { Component } from 'svelte';
|
|
3
|
-
type AnyComponent = Component<Record<string, unknown>>;
|
|
4
|
-
export interface RenderKbdOptions {
|
|
5
|
-
/** 透传给被测组件的 props。 */
|
|
6
|
-
props?: Record<string, unknown>;
|
|
7
|
-
/** 语言码,默认 en_US。 */
|
|
8
|
-
locale?: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* 在真实浏览器里把组件包进 LocaleProvider 渲染。
|
|
12
|
-
* 返回 vitest-browser-svelte 的 RenderResult(含 baseElement / container / 各 locator 查询)。
|
|
13
|
-
*
|
|
14
|
-
* 用法:
|
|
15
|
-
* const screen = renderKbd(Modal, { props: { open: true, title: '...' } });
|
|
16
|
-
* const dialog = screen.baseElement.querySelector('[role="dialog"]');
|
|
17
|
-
*/
|
|
18
|
-
export declare function renderKbd(component: AnyComponent, options?: RenderKbdOptions): import("vitest-browser-svelte").RenderResult<AnyComponent> & PromiseLike<import("vitest-browser-svelte").RenderResult<AnyComponent>>;
|
|
19
|
-
/**
|
|
20
|
-
* 直接渲染一个已自带 LocaleProvider/不需要 locale 的 fixture 组件。
|
|
21
|
-
* fixture 通常无 props(构造器类型为 Component<Record<string, never>>),
|
|
22
|
-
* 故入参用宽松的 Component<any> 接收,避免与具体 fixture 的精确 props 类型冲突。
|
|
23
|
-
*/
|
|
24
|
-
export declare function renderKbdFixture(component: Component<any>, props?: Record<string, unknown>): import("vitest-browser-svelte").RenderResult<AnyComponent> & PromiseLike<import("vitest-browser-svelte").RenderResult<AnyComponent>>;
|
|
25
|
-
export { userEvent };
|
|
26
|
-
//# sourceMappingURL=kbd.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../src/test-utils/kbd.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIxC,KAAK,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,GAAE,gBAAqB,wIAKhF;AAED;;;;GAIG;AAEH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,wIAE9F;AAGD,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/test-utils/kbd.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// 键盘 e2e 测试基建(仅 browser project / 真实 chromium 下使用)。
|
|
2
|
-
//
|
|
3
|
-
// 与 a11y.ts(jsdom + axe)的关键区别:本套件在真实 chromium 里 mount 组件,
|
|
4
|
-
// 用 vitest browser 的 userEvent 触发真实键盘/Tab,并用 page locator 的
|
|
5
|
-
// `.toHaveFocus()` 断言真实 document.activeElement。jsdom 测不了的焦点陷阱、
|
|
6
|
-
// roving 漫游、焦点归还都在这里覆盖。
|
|
7
|
-
//
|
|
8
|
-
// 渲染走 vitest-browser-svelte 的 render(基于 @testing-library/svelte-core,
|
|
9
|
-
// 真实 mount 到 document.body),外层用 LocaleHarness 包一层 LocaleProvider
|
|
10
|
-
// (复用 a11y 套件的同一 harness),使 useLocale() 可用。
|
|
11
|
-
import { render } from 'vitest-browser-svelte';
|
|
12
|
-
import { userEvent } from 'vitest/browser';
|
|
13
|
-
import LocaleHarness from './LocaleHarness.svelte';
|
|
14
|
-
/**
|
|
15
|
-
* 在真实浏览器里把组件包进 LocaleProvider 渲染。
|
|
16
|
-
* 返回 vitest-browser-svelte 的 RenderResult(含 baseElement / container / 各 locator 查询)。
|
|
17
|
-
*
|
|
18
|
-
* 用法:
|
|
19
|
-
* const screen = renderKbd(Modal, { props: { open: true, title: '...' } });
|
|
20
|
-
* const dialog = screen.baseElement.querySelector('[role="dialog"]');
|
|
21
|
-
*/
|
|
22
|
-
export function renderKbd(component, options = {}) {
|
|
23
|
-
const { props = {}, locale = 'en_US' } = options;
|
|
24
|
-
return render(LocaleHarness, {
|
|
25
|
-
props: { component, props, locale },
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* 直接渲染一个已自带 LocaleProvider/不需要 locale 的 fixture 组件。
|
|
30
|
-
* fixture 通常无 props(构造器类型为 Component<Record<string, never>>),
|
|
31
|
-
* 故入参用宽松的 Component<any> 接收,避免与具体 fixture 的精确 props 类型冲突。
|
|
32
|
-
*/
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
-
export function renderKbdFixture(component, props = {}) {
|
|
35
|
-
return render(component, { props });
|
|
36
|
-
}
|
|
37
|
-
// 重新导出 userEvent,键盘 e2e 统一从这里取(tab()/keyboard()/click())。
|
|
38
|
-
export { userEvent };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TextArea.a11y.test.d.ts","sourceRoot":"","sources":["../../src/textarea/TextArea.a11y.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
// TextArea a11y:原生 <textarea> + ariaLabel 可访问名;error 态 aria-invalid;
|
|
2
|
-
// showClear 清除按钮 locale 可访问名。
|
|
3
|
-
import { describe, it, expect } from 'vitest';
|
|
4
|
-
import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
|
|
5
|
-
import TextArea from './TextArea.svelte';
|
|
6
|
-
describe('TextArea a11y', () => {
|
|
7
|
-
it('默认渲染:ariaLabel 提供可访问名,无 axe violations', async () => {
|
|
8
|
-
const { container } = renderWithLocale(TextArea, {
|
|
9
|
-
props: { ariaLabel: 'Bio', placeholder: 'Tell us about yourself' },
|
|
10
|
-
});
|
|
11
|
-
const ta = container.querySelector('textarea');
|
|
12
|
-
expect(ta).not.toBeNull();
|
|
13
|
-
expect(ta?.getAttribute('aria-label')).toBe('Bio');
|
|
14
|
-
await expectNoAxeViolations(container);
|
|
15
|
-
});
|
|
16
|
-
it('error 状态:aria-invalid=true', async () => {
|
|
17
|
-
const { container } = renderWithLocale(TextArea, {
|
|
18
|
-
props: { ariaLabel: 'Notes', status: 'error' },
|
|
19
|
-
});
|
|
20
|
-
const ta = container.querySelector('textarea');
|
|
21
|
-
expect(ta?.getAttribute('aria-invalid')).toBe('true');
|
|
22
|
-
await expectNoAxeViolations(container);
|
|
23
|
-
});
|
|
24
|
-
it('showClear + showCount:清除按钮 locale 可访问名,无 axe violations', async () => {
|
|
25
|
-
const { container } = renderWithLocale(TextArea, {
|
|
26
|
-
props: {
|
|
27
|
-
ariaLabel: 'Comment',
|
|
28
|
-
defaultValue: 'hello',
|
|
29
|
-
showClear: true,
|
|
30
|
-
showCount: true,
|
|
31
|
-
maxLength: 100,
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
const clearBtn = container.querySelector('.cd-textarea__clear');
|
|
35
|
-
expect(clearBtn).not.toBeNull();
|
|
36
|
-
const label = clearBtn?.getAttribute('aria-label');
|
|
37
|
-
expect(label).toBeTruthy();
|
|
38
|
-
expect(label).not.toBe('Textarea.clear');
|
|
39
|
-
await expectNoAxeViolations(container);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimePicker.a11y.test.d.ts","sourceRoot":"","sources":["../../src/time-picker/TimePicker.a11y.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// TimePicker a11y:触发器(button)+ role=dialog 面板 + 时/分 role=listbox/option 列。
|
|
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 TimePicker from './TimePicker.svelte';
|
|
7
|
-
describe('TimePicker a11y', () => {
|
|
8
|
-
it('关闭态:触发器 aria-haspopup=dialog / aria-expanded=false,无 axe violations', async () => {
|
|
9
|
-
const { container } = renderWithLocale(TimePicker, {
|
|
10
|
-
props: { ariaLabel: 'Meeting time' },
|
|
11
|
-
});
|
|
12
|
-
const trigger = container.querySelector('.cd-time-picker__trigger');
|
|
13
|
-
expect(trigger).not.toBeNull();
|
|
14
|
-
expect(trigger?.getAttribute('aria-haspopup')).toBe('dialog');
|
|
15
|
-
expect(trigger?.getAttribute('aria-expanded')).toBe('false');
|
|
16
|
-
expect(trigger?.getAttribute('aria-label')).toBe('Meeting time');
|
|
17
|
-
await expectNoAxeViolations(container);
|
|
18
|
-
});
|
|
19
|
-
it('打开态:role=dialog 面板 + listbox/option 列(portal 到 body),无 axe violations', async () => {
|
|
20
|
-
renderWithLocale(TimePicker, {
|
|
21
|
-
props: { defaultOpen: true, ariaLabel: 'Meeting time' },
|
|
22
|
-
});
|
|
23
|
-
const dialog = document.querySelector('[role="dialog"]');
|
|
24
|
-
expect(dialog).not.toBeNull();
|
|
25
|
-
expect(dialog?.getAttribute('aria-label')).toBeTruthy();
|
|
26
|
-
const listboxes = document.querySelectorAll('[role="listbox"]');
|
|
27
|
-
expect(listboxes.length).toBeGreaterThan(0);
|
|
28
|
-
const options = document.querySelectorAll('[role="option"]');
|
|
29
|
-
expect(options.length).toBeGreaterThan(0);
|
|
30
|
-
await expectNoAxeViolations(document.body);
|
|
31
|
-
});
|
|
32
|
-
it('已选值:选中 option aria-selected=true + 触发器 aria-expanded=true', async () => {
|
|
33
|
-
renderWithLocale(TimePicker, {
|
|
34
|
-
props: { defaultOpen: true, defaultValue: '09:30:00', ariaLabel: 'Meeting time' },
|
|
35
|
-
});
|
|
36
|
-
const trigger = document.querySelector('.cd-time-picker__trigger');
|
|
37
|
-
expect(trigger?.getAttribute('aria-expanded')).toBe('true');
|
|
38
|
-
const selected = document.querySelector('[role="option"][aria-selected="true"]');
|
|
39
|
-
expect(selected).not.toBeNull();
|
|
40
|
-
await expectNoAxeViolations(document.body);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimePicker.kbd.test.d.ts","sourceRoot":"","sources":["../../src/time-picker/TimePicker.kbd.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// TimePicker 键盘 e2e(browser project / 真实 chromium)。
|
|
2
|
-
// 时间列用真实焦点 roving(APG listbox):每列单一 Tab 停靠点(选中项 tabindex=0,
|
|
3
|
-
// 其余 -1),列内 ↑↓ 命令式移动 DOM 焦点(循环)、Home/End 跳首末,列间用 Tab。
|
|
4
|
-
// 故断言真实 .toHaveFocus()(先读源码 onColKeydown 确认是命令式 focus,非 activedescendant)。
|
|
5
|
-
// 1. 打开后焦点落进小时列选中项(value=08:30:45 → 小时 08)。
|
|
6
|
-
// 2. 列内 ↓↑ 移动焦点(相邻项),Home/End 跳首末项。
|
|
7
|
-
// 3. Tab 进入下一列(分钟列)的停靠点(选中项 30)。
|
|
8
|
-
// 4. Esc 关闭面板。
|
|
9
|
-
import { describe, it, expect } from 'vitest';
|
|
10
|
-
import { page } from 'vitest/browser';
|
|
11
|
-
import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
|
|
12
|
-
import TimePickerKbdFixture from './TimePickerKbdFixture.svelte';
|
|
13
|
-
function loc(el) {
|
|
14
|
-
return page.elementLocator(el);
|
|
15
|
-
}
|
|
16
|
-
describe('TimePicker 键盘 e2e(列内 roving 真实焦点)', () => {
|
|
17
|
-
it('小时列 ↓↑ + Home/End 移动焦点;Tab 进分钟列;Esc 关闭', async () => {
|
|
18
|
-
const { baseElement } = renderKbdFixture(TimePickerKbdFixture);
|
|
19
|
-
const trigger = baseElement.querySelector('[data-testid="before"]');
|
|
20
|
-
expect(trigger).not.toBeNull();
|
|
21
|
-
await userEvent.click(trigger);
|
|
22
|
-
const dialog = document.querySelector('[role="dialog"]');
|
|
23
|
-
expect(dialog).not.toBeNull();
|
|
24
|
-
const cols = Array.from(dialog.querySelectorAll('[role="listbox"]'));
|
|
25
|
-
expect(cols.length).toBe(3); // 时/分/秒
|
|
26
|
-
const [hourCol, minuteCol] = cols;
|
|
27
|
-
const hourOptions = Array.from(hourCol.querySelectorAll('[role="option"]'));
|
|
28
|
-
// value=08:30:45 → 小时列选中项 08(文本 '08')。
|
|
29
|
-
const hour08 = hourOptions.find((el) => el.textContent?.trim() === '08');
|
|
30
|
-
const hour09 = hourOptions.find((el) => el.textContent?.trim() === '09');
|
|
31
|
-
const hour07 = hourOptions.find((el) => el.textContent?.trim() === '07');
|
|
32
|
-
// 1. 打开后焦点落进小时列选中项(08)。
|
|
33
|
-
await expect.element(loc(hour08)).toHaveFocus();
|
|
34
|
-
expect(hour08.tabIndex).toBe(0);
|
|
35
|
-
// 2a. ↓ → 下一项(09),真实焦点跟随、停靠点收敛。
|
|
36
|
-
await userEvent.keyboard('{ArrowDown}');
|
|
37
|
-
await expect.element(loc(hour09)).toHaveFocus();
|
|
38
|
-
expect(hour09.tabIndex).toBe(0);
|
|
39
|
-
expect(hour08.tabIndex).toBe(-1);
|
|
40
|
-
// 2b. ↑↑ → 回到 08 再到 07。
|
|
41
|
-
await userEvent.keyboard('{ArrowUp}');
|
|
42
|
-
await expect.element(loc(hour08)).toHaveFocus();
|
|
43
|
-
await userEvent.keyboard('{ArrowUp}');
|
|
44
|
-
await expect.element(loc(hour07)).toHaveFocus();
|
|
45
|
-
// 2c. Home/End → 列首(00)/列末(23)。
|
|
46
|
-
await userEvent.keyboard('{Home}');
|
|
47
|
-
await expect.element(loc(hourOptions[0])).toHaveFocus();
|
|
48
|
-
await userEvent.keyboard('{End}');
|
|
49
|
-
await expect.element(loc(hourOptions[hourOptions.length - 1])).toHaveFocus();
|
|
50
|
-
// 3. Tab → 进入分钟列的停靠点(选中项 30)。
|
|
51
|
-
const minuteOptions = Array.from(minuteCol.querySelectorAll('[role="option"]'));
|
|
52
|
-
const minute30 = minuteOptions.find((el) => el.textContent?.trim() === '30');
|
|
53
|
-
await userEvent.tab();
|
|
54
|
-
await expect.element(loc(minute30)).toHaveFocus();
|
|
55
|
-
// 4. Esc 关闭面板(useDismiss escape)。
|
|
56
|
-
await userEvent.keyboard('{Escape}');
|
|
57
|
-
await expect.poll(() => document.querySelector('[role="dialog"]')).toBeNull();
|
|
58
|
-
});
|
|
59
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
仅供 TimePicker.kbd.test.ts(browser project)使用的列内 roving 键盘 e2e 夹具。
|
|
3
|
-
trigger 控制 open(受控);固定 value=08:30:45 让各列选中项稳定(停靠点 = 选中项)。
|
|
4
|
-
三列(时/分/秒)listbox,列内 ↑↓ roving + Home/End,列间 Tab。
|
|
5
|
-
-->
|
|
6
|
-
<script lang="ts">
|
|
7
|
-
import { LocaleProvider } from '../locale-provider/index.js';
|
|
8
|
-
import TimePicker from './TimePicker.svelte';
|
|
9
|
-
|
|
10
|
-
let open = $state(false);
|
|
11
|
-
const value = new Date(2024, 0, 1, 8, 30, 45);
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
<LocaleProvider locale="en_US">
|
|
15
|
-
<button type="button" data-testid="before" onclick={() => (open = true)}>open time picker</button>
|
|
16
|
-
<TimePicker
|
|
17
|
-
{open}
|
|
18
|
-
{value}
|
|
19
|
-
locale="en-US"
|
|
20
|
-
ariaLabel="pick time"
|
|
21
|
-
onOpenChange={(v) => (open = v)}
|
|
22
|
-
/>
|
|
23
|
-
</LocaleProvider>
|