@chenzy-design/svelte 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.json +1 -1
- package/package.json +7 -8
- package/src/_floating/use-floating.ts +0 -208
- package/src/anchor/Anchor.a11y.test.ts +0 -49
- package/src/anchor/Anchor.kbd.test.ts +0 -70
- package/src/anchor/Anchor.svelte +0 -359
- package/src/anchor/AnchorKbdFixture.svelte +0 -24
- package/src/anchor/index.ts +0 -3
- package/src/anchor/meta.ts +0 -70
- package/src/anchor/types.ts +0 -8
- package/src/autocomplete/AutoComplete.a11y.test.ts +0 -49
- package/src/autocomplete/AutoComplete.kbd.test.ts +0 -69
- package/src/autocomplete/AutoComplete.svelte +0 -706
- package/src/autocomplete/AutoCompleteKbdFixture.svelte +0 -24
- package/src/autocomplete/index.ts +0 -2
- package/src/autocomplete/meta.ts +0 -41
- package/src/avatar/Avatar.a11y.test.ts +0 -37
- package/src/avatar/Avatar.svelte +0 -315
- package/src/avatar/AvatarGroup.svelte +0 -142
- package/src/avatar/context.ts +0 -21
- package/src/avatar/index.ts +0 -10
- package/src/avatar/meta.ts +0 -73
- package/src/back-top/BackTop.a11y.test.ts +0 -40
- package/src/back-top/BackTop.svelte +0 -314
- package/src/back-top/index.ts +0 -2
- package/src/back-top/meta.ts +0 -108
- package/src/badge/Badge.a11y.test.ts +0 -35
- package/src/badge/Badge.svelte +0 -328
- package/src/badge/BadgeA11yFixture.svelte +0 -18
- package/src/badge/index.ts +0 -2
- package/src/badge/meta.ts +0 -62
- package/src/banner/Banner.a11y.test.ts +0 -48
- package/src/banner/Banner.svelte +0 -368
- package/src/banner/index.ts +0 -3
- package/src/banner/meta.ts +0 -121
- package/src/breadcrumb/Breadcrumb.a11y.test.ts +0 -35
- package/src/breadcrumb/Breadcrumb.kbd.test.ts +0 -45
- package/src/breadcrumb/Breadcrumb.svelte +0 -414
- package/src/breadcrumb/BreadcrumbKbdFixture.svelte +0 -23
- package/src/breadcrumb/Item.svelte +0 -77
- package/src/breadcrumb/context.ts +0 -27
- package/src/breadcrumb/index.ts +0 -21
- package/src/breadcrumb/meta.ts +0 -128
- package/src/breadcrumb/types.ts +0 -4
- package/src/button/Button.a11y.test.ts +0 -54
- package/src/button/Button.svelte +0 -176
- package/src/button/index.ts +0 -2
- package/src/button/meta.ts +0 -28
- package/src/calendar/Calendar.a11y.test.ts +0 -51
- package/src/calendar/Calendar.kbd.test.ts +0 -59
- package/src/calendar/Calendar.svelte +0 -1344
- package/src/calendar/CalendarKbdFixture.svelte +0 -23
- package/src/calendar/index.ts +0 -3
- package/src/calendar/meta.ts +0 -117
- package/src/card/Card.a11y.test.ts +0 -38
- package/src/card/Card.svelte +0 -341
- package/src/card/CardMeta.svelte +0 -60
- package/src/card/index.ts +0 -8
- package/src/card/meta.ts +0 -83
- package/src/carousel/Carousel.a11y.test.ts +0 -53
- package/src/carousel/Carousel.kbd.test.ts +0 -67
- package/src/carousel/Carousel.svelte +0 -806
- package/src/carousel/CarouselA11yFixture.svelte +0 -25
- package/src/carousel/CarouselKbdFixture.svelte +0 -24
- package/src/carousel/index.ts +0 -2
- package/src/carousel/meta.ts +0 -74
- package/src/cascader/Cascader.a11y.test.ts +0 -59
- package/src/cascader/Cascader.kbd.test.ts +0 -56
- package/src/cascader/Cascader.svelte +0 -1570
- package/src/cascader/CascaderKbdFixture.svelte +0 -31
- package/src/cascader/index.ts +0 -3
- package/src/cascader/meta.ts +0 -57
- package/src/cascader/types.ts +0 -9
- package/src/checkbox/Checkbox.svelte +0 -281
- package/src/checkbox/CheckboxGroup.a11y.test.ts +0 -43
- package/src/checkbox/CheckboxGroup.kbd.test.ts +0 -40
- package/src/checkbox/CheckboxGroup.svelte +0 -122
- package/src/checkbox/CheckboxGroupKbdFixture.svelte +0 -20
- package/src/checkbox/context.ts +0 -31
- package/src/checkbox/index.ts +0 -4
- package/src/checkbox/meta.ts +0 -67
- package/src/collapse/Collapse.a11y.test.ts +0 -53
- package/src/collapse/Collapse.kbd.test.ts +0 -89
- package/src/collapse/Collapse.svelte +0 -406
- package/src/collapse/CollapseA11yFixture.svelte +0 -27
- package/src/collapse/CollapseKbdFixture.svelte +0 -25
- package/src/collapse/CollapsePanel.svelte +0 -102
- package/src/collapse/context.ts +0 -54
- package/src/collapse/index.ts +0 -17
- package/src/collapse/meta.ts +0 -79
- package/src/collapse/types.ts +0 -5
- package/src/color-picker/ColorPicker.a11y.test.ts +0 -60
- package/src/color-picker/ColorPicker.kbd.test.ts +0 -73
- package/src/color-picker/ColorPicker.svelte +0 -985
- package/src/color-picker/ColorPickerKbdFixture.svelte +0 -25
- package/src/color-picker/index.ts +0 -2
- package/src/color-picker/meta.ts +0 -47
- package/src/config-provider/ConfigProvider.svelte +0 -227
- package/src/config-provider/context.ts +0 -29
- package/src/config-provider/index.ts +0 -48
- package/src/config-provider/meta.ts +0 -128
- package/src/date-picker/DatePicker.a11y.test.ts +0 -45
- package/src/date-picker/DatePicker.kbd.test.ts +0 -71
- package/src/date-picker/DatePicker.svelte +0 -1798
- package/src/date-picker/DatePickerKbdFixture.svelte +0 -26
- package/src/date-picker/RangePicker.kbd.test.ts +0 -69
- package/src/date-picker/RangePicker.svelte +0 -775
- package/src/date-picker/RangePickerKbdFixture.svelte +0 -30
- package/src/date-picker/index.ts +0 -4
- package/src/date-picker/meta.ts +0 -67
- package/src/date-picker/range-meta.ts +0 -44
- package/src/descriptions/Descriptions.a11y.test.ts +0 -33
- package/src/descriptions/Descriptions.svelte +0 -287
- package/src/descriptions/DescriptionsItem.svelte +0 -43
- package/src/descriptions/context.ts +0 -21
- package/src/descriptions/index.ts +0 -16
- package/src/descriptions/meta.ts +0 -45
- package/src/descriptions/types.ts +0 -6
- package/src/divider/Divider.a11y.test.ts +0 -23
- package/src/divider/Divider.svelte +0 -154
- package/src/divider/index.ts +0 -2
- package/src/divider/meta.ts +0 -23
- package/src/drawer/Drawer.a11y.test.ts +0 -41
- package/src/drawer/Drawer.kbd.test.ts +0 -67
- package/src/drawer/Drawer.svelte +0 -554
- package/src/drawer/DrawerKbdFixture.svelte +0 -28
- package/src/drawer/index.ts +0 -2
- package/src/drawer/meta.ts +0 -127
- package/src/dropdown/Dropdown.a11y.test.ts +0 -46
- package/src/dropdown/Dropdown.kbd.test.ts +0 -56
- package/src/dropdown/Dropdown.svelte +0 -573
- package/src/dropdown/DropdownA11yFixture.svelte +0 -24
- package/src/dropdown/DropdownDivider.svelte +0 -17
- package/src/dropdown/DropdownItem.svelte +0 -127
- package/src/dropdown/DropdownItemNode.svelte +0 -355
- package/src/dropdown/DropdownKbdFixture.svelte +0 -26
- package/src/dropdown/DropdownMenu.svelte +0 -24
- package/src/dropdown/DropdownSubMenu.svelte +0 -212
- package/src/dropdown/DropdownTitle.svelte +0 -34
- package/src/dropdown/context.ts +0 -13
- package/src/dropdown/index.ts +0 -36
- package/src/dropdown/meta.ts +0 -97
- package/src/dropdown/types.test.ts +0 -50
- package/src/dropdown/types.ts +0 -67
- package/src/empty/Empty.a11y.test.ts +0 -24
- package/src/empty/Empty.svelte +0 -304
- package/src/empty/index.ts +0 -2
- package/src/empty/meta.ts +0 -41
- package/src/form/Field.svelte +0 -492
- package/src/form/FieldArray.svelte +0 -75
- package/src/form/Form.a11y.test.ts +0 -39
- package/src/form/Form.svelte +0 -243
- package/src/form/FormA11yFixture.svelte +0 -31
- package/src/form/FormCascader.svelte +0 -82
- package/src/form/FormCheckbox.svelte +0 -83
- package/src/form/FormDatePicker.svelte +0 -80
- package/src/form/FormErrorMessage.svelte +0 -44
- package/src/form/FormInput.svelte +0 -95
- package/src/form/FormLabel.svelte +0 -46
- package/src/form/FormRadio.svelte +0 -83
- package/src/form/FormRating.svelte +0 -85
- package/src/form/FormSection.svelte +0 -45
- package/src/form/FormSelect.svelte +0 -96
- package/src/form/FormSlider.svelte +0 -95
- package/src/form/FormSlot.svelte +0 -51
- package/src/form/FormSwitch.svelte +0 -82
- package/src/form/FormTagInput.svelte +0 -79
- package/src/form/FormTreeSelect.svelte +0 -85
- package/src/form/FormUpload.svelte +0 -92
- package/src/form/context.ts +0 -47
- package/src/form/index.ts +0 -22
- package/src/form/meta.ts +0 -85
- package/src/grid/Col.svelte +0 -142
- package/src/grid/Grid.a11y.test.ts +0 -14
- package/src/grid/GridA11yFixture.svelte +0 -12
- package/src/grid/Row.svelte +0 -116
- package/src/grid/index.ts +0 -3
- package/src/grid/meta.ts +0 -72
- package/src/grid/use-breakpoint.svelte.ts +0 -48
- package/src/highlight/Highlight.a11y.test.ts +0 -25
- package/src/highlight/Highlight.svelte +0 -99
- package/src/highlight/index.ts +0 -2
- package/src/highlight/meta.ts +0 -80
- package/src/icon/Icon.svelte +0 -156
- package/src/icon/index.ts +0 -2
- package/src/icon/meta.ts +0 -41
- package/src/image/Image.a11y.test.ts +0 -30
- package/src/image/Image.svelte +0 -387
- package/src/image/ImagePreview.kbd.test.ts +0 -52
- package/src/image/ImagePreview.svelte +0 -309
- package/src/image/ImagePreviewGroup.svelte +0 -93
- package/src/image/ImagePreviewKbdFixture.svelte +0 -32
- package/src/image/context.ts +0 -26
- package/src/image/index.ts +0 -15
- package/src/image/meta.ts +0 -131
- package/src/index.ts +0 -208
- package/src/input/Input.a11y.test.ts +0 -58
- package/src/input/Input.svelte +0 -505
- package/src/input/index.ts +0 -2
- package/src/input/meta.ts +0 -40
- package/src/input-number/InputNumber.a11y.test.ts +0 -43
- package/src/input-number/InputNumber.kbd.test.ts +0 -41
- package/src/input-number/InputNumber.svelte +0 -674
- package/src/input-number/InputNumberKbdFixture.svelte +0 -15
- package/src/input-number/index.ts +0 -2
- package/src/input-number/meta.ts +0 -65
- package/src/layout/Content.svelte +0 -37
- package/src/layout/Footer.svelte +0 -49
- package/src/layout/Header.svelte +0 -46
- package/src/layout/Layout.a11y.test.ts +0 -34
- package/src/layout/Layout.svelte +0 -60
- package/src/layout/LayoutA11yFixture.svelte +0 -21
- package/src/layout/Sider.svelte +0 -207
- package/src/layout/index.ts +0 -26
- package/src/layout/meta.ts +0 -116
- package/src/list/List.a11y.test.ts +0 -69
- package/src/list/List.bench.ts +0 -26
- package/src/list/List.kbd.test.ts +0 -71
- package/src/list/List.svelte +0 -920
- package/src/list/ListA11yFixture.svelte +0 -38
- package/src/list/ListBenchFixture.svelte +0 -22
- package/src/list/ListItem.svelte +0 -175
- package/src/list/ListKbdFixture.svelte +0 -31
- package/src/list/ListMeta.svelte +0 -73
- package/src/list/context.ts +0 -39
- package/src/list/index.ts +0 -21
- package/src/list/meta.ts +0 -99
- package/src/locale-provider/LocaleProvider.svelte +0 -110
- package/src/locale-provider/context.ts +0 -22
- package/src/locale-provider/index.ts +0 -21
- package/src/locale-provider/meta.ts +0 -93
- package/src/locale-provider/use-locale.ts +0 -25
- package/src/lottie-icon/LottieIcon.svelte +0 -330
- package/src/lottie-icon/index.ts +0 -9
- package/src/lottie-icon/meta.ts +0 -162
- package/src/menu/Menu.a11y.test.ts +0 -54
- package/src/menu/Menu.kbd.test.ts +0 -69
- package/src/menu/Menu.svelte +0 -762
- package/src/menu/MenuKbdFixture.svelte +0 -22
- package/src/menu/MenuPopupNode.svelte +0 -525
- package/src/menu/index.ts +0 -4
- package/src/menu/meta.ts +0 -137
- package/src/menu/types.ts +0 -120
- package/src/meta.test.ts +0 -173
- package/src/modal/ConfirmModal.svelte +0 -173
- package/src/modal/Modal.a11y.test.ts +0 -46
- package/src/modal/Modal.kbd.test.ts +0 -65
- package/src/modal/Modal.svelte +0 -511
- package/src/modal/ModalKbdFixture.svelte +0 -24
- package/src/modal/command.svelte.ts +0 -103
- package/src/modal/index.ts +0 -30
- package/src/modal/meta.ts +0 -165
- package/src/modal/z-stack.ts +0 -26
- package/src/notification/NotificationContainer.svelte +0 -192
- package/src/notification/NotificationItem.a11y.test.ts +0 -73
- package/src/notification/NotificationItem.svelte +0 -368
- package/src/notification/index.ts +0 -9
- package/src/notification/meta.ts +0 -120
- package/src/notification/store.ts +0 -191
- package/src/overflow-list/OverflowList.a11y.test.ts +0 -46
- package/src/overflow-list/OverflowList.kbd.test.ts +0 -34
- package/src/overflow-list/OverflowList.svelte +0 -539
- package/src/overflow-list/OverflowListA11yFixture.svelte +0 -22
- package/src/overflow-list/OverflowListKbdFixture.svelte +0 -21
- package/src/overflow-list/index.ts +0 -2
- package/src/overflow-list/meta.ts +0 -138
- package/src/pagination/Pagination.a11y.test.ts +0 -62
- package/src/pagination/Pagination.kbd.test.ts +0 -66
- package/src/pagination/Pagination.svelte +0 -428
- package/src/pagination/PaginationKbdFixture.svelte +0 -15
- package/src/pagination/index.ts +0 -2
- package/src/pagination/meta.ts +0 -73
- package/src/popconfirm/Popconfirm.a11y.test.ts +0 -46
- package/src/popconfirm/Popconfirm.kbd.test.ts +0 -42
- package/src/popconfirm/Popconfirm.svelte +0 -724
- package/src/popconfirm/PopconfirmA11yFixture.svelte +0 -34
- package/src/popconfirm/PopconfirmKbdFixture.svelte +0 -17
- package/src/popconfirm/index.ts +0 -2
- package/src/popconfirm/meta.ts +0 -200
- package/src/popover/Popover.a11y.test.ts +0 -58
- package/src/popover/Popover.kbd.test.ts +0 -42
- package/src/popover/Popover.svelte +0 -643
- package/src/popover/PopoverA11yFixture.svelte +0 -35
- package/src/popover/PopoverKbdFixture.svelte +0 -18
- package/src/popover/index.ts +0 -2
- package/src/popover/meta.ts +0 -103
- package/src/progress/Progress.a11y.test.ts +0 -37
- package/src/progress/Progress.svelte +0 -423
- package/src/progress/index.ts +0 -3
- package/src/progress/meta.ts +0 -132
- package/src/radio/Radio.svelte +0 -330
- package/src/radio/RadioGroup.a11y.test.ts +0 -43
- package/src/radio/RadioGroup.kbd.test.ts +0 -75
- package/src/radio/RadioGroup.svelte +0 -199
- package/src/radio/RadioGroupKbdFixture.svelte +0 -21
- package/src/radio/context.ts +0 -42
- package/src/radio/index.ts +0 -4
- package/src/radio/meta.ts +0 -68
- package/src/rating/Rating.a11y.test.ts +0 -41
- package/src/rating/Rating.kbd.test.ts +0 -48
- package/src/rating/Rating.svelte +0 -407
- package/src/rating/RatingKbdFixture.svelte +0 -15
- package/src/rating/index.ts +0 -2
- package/src/rating/meta.ts +0 -40
- package/src/resize-observer/ResizeObserver.svelte +0 -169
- package/src/resize-observer/action.ts +0 -80
- package/src/resize-observer/index.ts +0 -9
- package/src/resize-observer/meta.ts +0 -102
- package/src/scroll-list/ScrollColumn.svelte +0 -592
- package/src/scroll-list/ScrollList.svelte +0 -257
- package/src/scroll-list/index.ts +0 -4
- package/src/scroll-list/meta.ts +0 -93
- package/src/scroll-list/types.ts +0 -18
- package/src/select/Select.a11y.test.ts +0 -59
- package/src/select/Select.kbd.test.ts +0 -59
- package/src/select/Select.svelte +0 -1155
- package/src/select/SelectKbdFixture.svelte +0 -29
- package/src/select/index.ts +0 -3
- package/src/select/meta.ts +0 -78
- package/src/select/types.ts +0 -2
- package/src/side-sheet/SideSheet.a11y.test.ts +0 -53
- package/src/side-sheet/SideSheet.kbd.test.ts +0 -63
- package/src/side-sheet/SideSheet.svelte +0 -659
- package/src/side-sheet/SideSheetKbdFixture.svelte +0 -30
- package/src/side-sheet/index.ts +0 -2
- package/src/side-sheet/meta.ts +0 -116
- package/src/skeleton/Skeleton.a11y.test.ts +0 -35
- package/src/skeleton/Skeleton.svelte +0 -131
- package/src/skeleton/SkeletonAvatar.svelte +0 -82
- package/src/skeleton/SkeletonButton.svelte +0 -90
- package/src/skeleton/SkeletonImage.svelte +0 -100
- package/src/skeleton/SkeletonParagraph.svelte +0 -103
- package/src/skeleton/SkeletonTitle.svelte +0 -74
- package/src/skeleton/context.ts +0 -11
- package/src/skeleton/index.ts +0 -8
- package/src/skeleton/meta.ts +0 -65
- package/src/slider/Slider.a11y.test.ts +0 -44
- package/src/slider/Slider.kbd.test.ts +0 -74
- package/src/slider/Slider.svelte +0 -716
- package/src/slider/SliderKbdFixture.svelte +0 -21
- package/src/slider/index.ts +0 -2
- package/src/slider/meta.ts +0 -55
- package/src/space/Space.a11y.test.ts +0 -22
- package/src/space/Space.svelte +0 -109
- package/src/space/SpaceA11yFixture.svelte +0 -17
- package/src/space/index.ts +0 -2
- package/src/space/meta.ts +0 -27
- package/src/spin/Spin.a11y.test.ts +0 -29
- package/src/spin/Spin.svelte +0 -293
- package/src/spin/SpinA11yFixture.svelte +0 -18
- package/src/spin/index.ts +0 -2
- package/src/spin/meta.ts +0 -72
- package/src/steps/Steps.a11y.test.ts +0 -39
- package/src/steps/Steps.kbd.test.ts +0 -73
- package/src/steps/Steps.svelte +0 -392
- package/src/steps/StepsKbdFixture.svelte +0 -21
- package/src/steps/index.ts +0 -3
- package/src/steps/meta.ts +0 -59
- package/src/steps/types.ts +0 -8
- package/src/switch/Switch.a11y.test.ts +0 -46
- package/src/switch/Switch.kbd.test.ts +0 -40
- package/src/switch/Switch.svelte +0 -310
- package/src/switch/SwitchKbdFixture.svelte +0 -22
- package/src/switch/index.ts +0 -2
- package/src/switch/meta.ts +0 -44
- package/src/table/Table.a11y.test.ts +0 -70
- package/src/table/Table.bench.ts +0 -51
- package/src/table/Table.kbd.test.ts +0 -94
- package/src/table/Table.svelte +0 -2327
- package/src/table/TableKbdFixture.svelte +0 -35
- package/src/table/grid-nav.test.ts +0 -173
- package/src/table/grid-nav.ts +0 -146
- package/src/table/index.ts +0 -13
- package/src/table/meta.ts +0 -121
- package/src/table/types.ts +0 -133
- package/src/tabs/TabPane.svelte +0 -92
- package/src/tabs/Tabs.a11y.test.ts +0 -47
- package/src/tabs/Tabs.kbd.test.ts +0 -74
- package/src/tabs/Tabs.svelte +0 -1128
- package/src/tabs/TabsA11yFixture.svelte +0 -20
- package/src/tabs/TabsKbdFixture.svelte +0 -25
- package/src/tabs/context.ts +0 -43
- package/src/tabs/index.ts +0 -14
- package/src/tabs/meta.ts +0 -152
- package/src/tabs/types.ts +0 -6
- package/src/tag/Tag.a11y.test.ts +0 -33
- package/src/tag/Tag.svelte +0 -366
- package/src/tag/TagA11yFixture.svelte +0 -18
- package/src/tag/index.ts +0 -2
- package/src/tag/meta.ts +0 -92
- package/src/tag-input/TagInput.a11y.test.ts +0 -41
- package/src/tag-input/TagInput.svelte +0 -544
- package/src/tag-input/index.ts +0 -2
- package/src/tag-input/meta.ts +0 -43
- package/src/tag-input/reorder.test.ts +0 -59
- package/src/tag-input/reorder.ts +0 -41
- package/src/test-utils/LocaleHarness.svelte +0 -29
- package/src/test-utils/a11y.ts +0 -108
- package/src/test-utils/kbd.ts +0 -52
- package/src/textarea/TextArea.a11y.test.ts +0 -44
- package/src/textarea/TextArea.svelte +0 -420
- package/src/textarea/index.ts +0 -2
- package/src/textarea/meta.ts +0 -104
- package/src/time-picker/TimePicker.a11y.test.ts +0 -45
- package/src/time-picker/TimePicker.kbd.test.ts +0 -70
- package/src/time-picker/TimePicker.svelte +0 -1023
- package/src/time-picker/TimePickerKbdFixture.svelte +0 -23
- package/src/time-picker/index.ts +0 -2
- package/src/time-picker/meta.ts +0 -64
- package/src/timeline/Timeline.a11y.test.ts +0 -54
- package/src/timeline/Timeline.svelte +0 -599
- package/src/timeline/TimelineItem.svelte +0 -164
- package/src/timeline/context.ts +0 -28
- package/src/timeline/index.ts +0 -16
- package/src/timeline/meta.ts +0 -129
- package/src/timeline/types.ts +0 -9
- package/src/toast/Toast.a11y.test.ts +0 -67
- package/src/toast/ToastContainer.svelte +0 -184
- package/src/toast/ToastItem.svelte +0 -247
- package/src/toast/index.ts +0 -9
- package/src/toast/live-region.ts +0 -78
- package/src/toast/meta.ts +0 -95
- package/src/toast/store.ts +0 -187
- package/src/tooltip/Tooltip.a11y.test.ts +0 -41
- package/src/tooltip/Tooltip.kbd.test.ts +0 -37
- package/src/tooltip/Tooltip.svelte +0 -416
- package/src/tooltip/TooltipA11yFixture.svelte +0 -31
- package/src/tooltip/TooltipKbdFixture.svelte +0 -16
- package/src/tooltip/index.ts +0 -2
- package/src/tooltip/meta.ts +0 -59
- package/src/tooltip/placement.ts +0 -6
- package/src/transfer/Transfer.a11y.test.ts +0 -63
- package/src/transfer/Transfer.kbd.test.ts +0 -75
- package/src/transfer/Transfer.svelte +0 -1451
- package/src/transfer/TransferKbdFixture.svelte +0 -23
- package/src/transfer/group.test.ts +0 -55
- package/src/transfer/group.ts +0 -61
- package/src/transfer/index.ts +0 -3
- package/src/transfer/meta.ts +0 -55
- package/src/transfer/reorder.test.ts +0 -52
- package/src/transfer/reorder.ts +0 -42
- package/src/transfer/tree.test.ts +0 -44
- package/src/transfer/tree.ts +0 -52
- package/src/transfer/types.ts +0 -32
- package/src/tree/Tree.a11y.test.ts +0 -63
- package/src/tree/Tree.kbd.test.ts +0 -91
- package/src/tree/Tree.svelte +0 -1500
- package/src/tree/TreeKbdFixture.svelte +0 -30
- package/src/tree/index.ts +0 -3
- package/src/tree/meta.ts +0 -152
- package/src/tree-select/TreeSelect.a11y.test.ts +0 -52
- package/src/tree-select/TreeSelect.kbd.test.ts +0 -53
- package/src/tree-select/TreeSelect.svelte +0 -1611
- package/src/tree-select/TreeSelectKbdFixture.svelte +0 -20
- package/src/tree-select/index.ts +0 -3
- package/src/tree-select/meta.ts +0 -73
- package/src/tree-select/types.ts +0 -11
- package/src/tree-select/virtual.test.ts +0 -104
- package/src/typography/Link.svelte +0 -120
- package/src/typography/Paragraph.svelte +0 -92
- package/src/typography/Text.svelte +0 -93
- package/src/typography/Title.svelte +0 -91
- package/src/typography/Typography.a11y.test.ts +0 -34
- package/src/typography/TypographyA11yFixture.svelte +0 -27
- package/src/typography/TypographyBase.svelte +0 -807
- package/src/typography/index.ts +0 -16
- package/src/typography/meta.ts +0 -158
- package/src/upload/Upload.a11y.test.ts +0 -58
- package/src/upload/Upload.svelte +0 -1094
- package/src/upload/UploadA11yFixture.svelte +0 -23
- package/src/upload/index.ts +0 -3
- package/src/upload/meta.ts +0 -64
- package/src/upload/types.ts +0 -16
- package/src/virtual-list/VirtualList.svelte +0 -401
- package/src/virtual-list/index.ts +0 -2
- package/src/virtual-list/meta.ts +0 -106
package/src/side-sheet/meta.ts
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Machine-readable component metadata for AI/docs consumption.
|
|
3
|
-
* SideSheet — see specs/components/feedback/SideSheet.spec.md
|
|
4
|
-
*/
|
|
5
|
-
export const meta = {
|
|
6
|
-
name: 'SideSheet',
|
|
7
|
-
category: 'feedback',
|
|
8
|
-
stage: 'M5',
|
|
9
|
-
semiEquivalent: 'SideSheet',
|
|
10
|
-
description:
|
|
11
|
-
'侧边滑出浮层:从视口四边(left/right/top/bottom)滑入的容器,承载次要任务流/详情/筛选/表单,比 Modal 提供更大可滚动内容区。与 Modal 同构复用浮层基建——portal 到 body(或 getContainer)脱离父层叠上下文;role=dialog,mask 时加 aria-modal;useFocusTrap 焦点捕获与归还(仅 mask=true)、useDismiss Esc 关闭(closeOnEsc),mask 时 useScrollLock 锁背景滚动(可 disableScrollLock 关闭)。mask=true 模态(遮罩+锁滚+陷阱),mask=false 非模态(无遮罩、不锁滚动、不抢焦点,outsideClosable 时点外部关闭)。size(small/default/large) 预设宽(横向)/高(纵向),width/height 显式覆盖;窄视口近铺满。Header/Body/Footer 三段式,footer 暴露 close()。滑入过渡为 CSS transform/opacity(token 时长缓动,reduced-motion 与 motionDisabled 退化为即时显隐)。lazyMount 首开前惰性挂载,destroyOnClose 关闭即卸载内容(出场过渡结束后 onAfterClose)。堆叠 z-index 复用 modal/z-stack 模块级计数器,与 Modal 统一层栈、后开者在上、Esc 仅关栈顶。受控 open(不回写),仅经 onOpenChange({open, reason}) 通知,reason 覆盖 esc/mask/outside/closeButton/programmatic。',
|
|
12
|
-
exports: ['SideSheet'],
|
|
13
|
-
a11yPattern: 'dialog-modal',
|
|
14
|
-
apgRef: 'dialog (modal)',
|
|
15
|
-
replaces: ['Drawer'],
|
|
16
|
-
relatedComponents: ['Modal', 'Popover', 'Notification'],
|
|
17
|
-
usageHints:
|
|
18
|
-
'承载次要任务流/详情/筛选;模态用 mask=true,协作式(打开仍可操作主页面)用 mask=false。承载单一确认/决策用 Modal,不要混用。',
|
|
19
|
-
dangerousActions:
|
|
20
|
-
'footer 危险操作(删除/清空等不可逆)使用 --cd-color-danger 与具体动词文案,并由业务侧拦截 onOpenChange 对未保存内容做二次确认。',
|
|
21
|
-
props: [
|
|
22
|
-
{ name: 'open', type: 'boolean', default: 'false', desc: '受控显隐;受控时不回写,仅 onOpenChange 通知' },
|
|
23
|
-
{ name: 'placement', type: "'left'|'right'|'top'|'bottom'", default: "'right'", desc: '滑出方向(贴附边缘);RTL 下 left/right 镜像' },
|
|
24
|
-
{ name: 'size', type: "'small'|'default'|'large'", default: "'default'", desc: '预设尺度(横向→宽度,纵向→高度)' },
|
|
25
|
-
{ name: 'width', type: 'number|string', default: 'undefined', desc: 'left/right 显式宽度,覆盖 size;数字按 px' },
|
|
26
|
-
{ name: 'height', type: 'number|string', default: 'undefined', desc: 'top/bottom 显式高度,覆盖 size;数字按 px' },
|
|
27
|
-
{ name: 'title', type: 'string', default: 'undefined', desc: '标题文案' },
|
|
28
|
-
{ name: 'titleSnippet', type: 'Snippet', default: 'undefined', desc: '自定义标题区,覆盖 title' },
|
|
29
|
-
{ name: 'headerExtra', type: 'Snippet', default: 'undefined', desc: 'Header 右侧额外操作(关闭按钮之前)' },
|
|
30
|
-
{ name: 'closeIcon', type: 'Snippet', default: 'undefined', desc: '自定义关闭图标' },
|
|
31
|
-
{ name: 'mask', type: 'boolean', default: 'true', desc: '显示遮罩并以模态呈现(锁滚动+focus trap);false 非模态' },
|
|
32
|
-
{ name: 'maskClosable', type: 'boolean', default: 'true', desc: '点击遮罩是否关闭(mask=true 生效)' },
|
|
33
|
-
{ name: 'outsideClosable', type: 'boolean', default: 'false', desc: 'mask=false 时点击面板外部是否关闭' },
|
|
34
|
-
{ name: 'closeOnEsc', type: 'boolean', default: 'true', desc: '按 Esc 是否关闭(仅作用于浮层栈顶)' },
|
|
35
|
-
{ name: 'closable', type: 'boolean', default: 'true', desc: 'Header 是否显示关闭按钮' },
|
|
36
|
-
{ name: 'lazyMount', type: 'boolean', default: 'true', desc: '首次打开前是否惰性挂载内容' },
|
|
37
|
-
{ name: 'keepDOM', type: 'boolean', default: 'undefined', desc: 'true 时保留 DOM(禁用惰性挂载);lazyMount 优先' },
|
|
38
|
-
{ name: 'destroyOnClose', type: 'boolean', default: 'false', desc: '关闭后是否销毁内部内容(出场过渡结束后卸载),重开重建' },
|
|
39
|
-
{ name: 'getContainer', type: '() => HTMLElement | null', default: '() => document.body', desc: 'Portal 挂载容器' },
|
|
40
|
-
{ name: 'zIndex', type: 'number', default: '1000', desc: '浮层基准层级(栈内自动递增)' },
|
|
41
|
-
{ name: 'disableScrollLock', type: 'boolean', default: 'false', desc: '强制不锁背景滚动(即便 mask=true)' },
|
|
42
|
-
{ name: 'returnFocusTo', type: 'HTMLElement | (() => HTMLElement | null) | null', default: '触发元素', desc: '关闭后焦点返回目标' },
|
|
43
|
-
{ name: 'motionDisabled', type: 'boolean', default: 'false', desc: '关闭进出动效(独立于 reduced-motion)' },
|
|
44
|
-
{ name: 'footer', type: 'Snippet<[{ close: () => void }]>|null', default: 'undefined', desc: 'Footer 操作区;提供 close() 关闭面板;未提供不渲染' },
|
|
45
|
-
{ name: 'children', type: 'Snippet', default: 'undefined', desc: 'Body 主内容区(可滚动)' },
|
|
46
|
-
{ name: 'ariaLabel', type: 'string', default: 'undefined', desc: '无可见标题时提供 aria-label' },
|
|
47
|
-
{ name: 'class', type: 'string', default: 'undefined', desc: '面板自定义类名' },
|
|
48
|
-
{ name: 'bodyClass', type: 'string', default: 'undefined', desc: 'Body 自定义类名' },
|
|
49
|
-
{ name: 'maskClass', type: 'string', default: 'undefined', desc: '遮罩自定义类名' },
|
|
50
|
-
{ name: 'onOpenChange', type: '(e: { open: boolean; reason: Reason }) => void', default: 'undefined', desc: '显隐意图变化(受控,需外部回写 open)' },
|
|
51
|
-
{ name: 'onAfterOpen', type: '() => void', default: 'undefined', desc: '进入动效结束、内容完全可见后触发' },
|
|
52
|
-
{ name: 'onAfterClose', type: '() => void', default: 'undefined', desc: '退出动效结束、DOM 卸载后触发' },
|
|
53
|
-
{ name: 'onCancel', type: '(e: { reason: Reason }) => void', default: 'undefined', desc: '用户主动取消(Esc/遮罩/外部/关闭按钮)' },
|
|
54
|
-
],
|
|
55
|
-
events: [
|
|
56
|
-
{ name: 'onOpenChange', desc: '显隐意图变化,payload { open, reason: esc|mask|outside|closeButton|programmatic }' },
|
|
57
|
-
{ name: 'onAfterOpen', desc: '进入动效结束后触发' },
|
|
58
|
-
{ name: 'onAfterClose', desc: '退出动效结束、DOM 卸载后触发' },
|
|
59
|
-
{ name: 'onCancel', desc: '用户主动取消,payload { reason }' },
|
|
60
|
-
],
|
|
61
|
-
slots: [
|
|
62
|
-
{ name: 'children', desc: 'Body 主内容区(可滚动)' },
|
|
63
|
-
{ name: 'titleSnippet', desc: '自定义标题区,覆盖 title' },
|
|
64
|
-
{ name: 'headerExtra', desc: 'Header 右侧额外操作(关闭按钮之前)' },
|
|
65
|
-
{ name: 'footer', desc: 'Footer 操作区,提供 close()' },
|
|
66
|
-
{ name: 'closeIcon', desc: '自定义关闭图标' },
|
|
67
|
-
],
|
|
68
|
-
a11y: {
|
|
69
|
-
hasRole: true,
|
|
70
|
-
focusable: true,
|
|
71
|
-
note: 'role=dialog;mask=true 加 aria-modal=true(非模态不设,避免误导锁定语义);有 title 用 aria-labelledby,无则 ariaLabel;mask 时 useFocusTrap 捕获 Tab 焦点循环并在关闭归还 returnFocusTo/触发元素;closeOnEsc 控制 Esc(仅栈顶);mask 时 useScrollLock 锁背景滚动;关闭按钮 aria-label 经 SideSheet.closeAriaLabel;reduced-motion / motionDisabled 退化即时显隐。',
|
|
72
|
-
},
|
|
73
|
-
tokens: [
|
|
74
|
-
'--cd-sidesheet-bg',
|
|
75
|
-
'--cd-sidesheet-color',
|
|
76
|
-
'--cd-sidesheet-mask-bg',
|
|
77
|
-
'--cd-sidesheet-border',
|
|
78
|
-
'--cd-sidesheet-radius',
|
|
79
|
-
'--cd-sidesheet-shadow',
|
|
80
|
-
'--cd-sidesheet-padding',
|
|
81
|
-
'--cd-sidesheet-header-padding',
|
|
82
|
-
'--cd-sidesheet-footer-padding',
|
|
83
|
-
'--cd-sidesheet-title-color',
|
|
84
|
-
'--cd-sidesheet-title-size',
|
|
85
|
-
'--cd-sidesheet-close-color',
|
|
86
|
-
'--cd-sidesheet-close-color-hover',
|
|
87
|
-
'--cd-sidesheet-close-hover-bg',
|
|
88
|
-
'--cd-sidesheet-width-small',
|
|
89
|
-
'--cd-sidesheet-width',
|
|
90
|
-
'--cd-sidesheet-width-large',
|
|
91
|
-
'--cd-sidesheet-height-small',
|
|
92
|
-
'--cd-sidesheet-height',
|
|
93
|
-
'--cd-sidesheet-height-large',
|
|
94
|
-
'--cd-sidesheet-z',
|
|
95
|
-
'--cd-sidesheet-motion-duration',
|
|
96
|
-
],
|
|
97
|
-
responsive: true,
|
|
98
|
-
examples: [
|
|
99
|
-
{
|
|
100
|
-
title: '右侧模态面板',
|
|
101
|
-
code: '<SideSheet open={visible} title="编辑用户" onOpenChange={(e) => (visible = e.open)}>表单</SideSheet>',
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
title: '左侧导航面板',
|
|
105
|
-
code: '<SideSheet open={visible} placement="left" title="菜单" onOpenChange={(e) => (visible = e.open)}>导航</SideSheet>',
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
title: '非模态协作面板',
|
|
109
|
-
code: '<SideSheet open={visible} mask={false} outsideClosable title="通知中心" onOpenChange={(e) => (visible = e.open)}>列表</SideSheet>',
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
title: 'Footer 操作区',
|
|
113
|
-
code: '<SideSheet open={visible} title="筛选" onOpenChange={(e) => (visible = e.open)}>{#snippet footer({ close })}<Button onclick={close}>取消</Button><Button type="primary">应用筛选</Button>{/snippet}内容</SideSheet>',
|
|
114
|
-
},
|
|
115
|
-
],
|
|
116
|
-
} as const;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// Skeleton a11y:loading 占位容器 aria-busy + aria-live=polite + aria-label。
|
|
2
|
-
//
|
|
3
|
-
// 已知 violation(组件源码缺口,本批不改源码):占位容器是裸 <div>,带 aria-label/aria-live
|
|
4
|
-
// 但无 role,axe 规则 [aria-prohibited-attr] 报「aria-label cannot be used on a div with no
|
|
5
|
-
// valid role」。修复需给容器加 role(如 role="status"),属组件改动,故相关 axe 断言 it.skip。
|
|
6
|
-
// 结构性 ARIA 断言(aria-busy/aria-live/aria-label 存在)仍作为非 skip 用例保留。
|
|
7
|
-
import { describe, it, expect } from 'vitest';
|
|
8
|
-
import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
|
|
9
|
-
import Skeleton from './Skeleton.svelte';
|
|
10
|
-
|
|
11
|
-
describe('Skeleton a11y', () => {
|
|
12
|
-
it('loading:占位容器 aria-busy + aria-live + aria-label 结构正确', () => {
|
|
13
|
-
const { container } = renderWithLocale(Skeleton, {
|
|
14
|
-
props: { loading: true },
|
|
15
|
-
});
|
|
16
|
-
const root = container.querySelector('.cd-skeleton');
|
|
17
|
-
expect(root?.getAttribute('aria-busy')).toBe('true');
|
|
18
|
-
expect(root?.getAttribute('aria-live')).toBe('polite');
|
|
19
|
-
expect(root?.getAttribute('aria-label')).toBeTruthy();
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('loading:无 axe violations(占位容器 role=status)', async () => {
|
|
23
|
-
const { container } = renderWithLocale(Skeleton, {
|
|
24
|
-
props: { loading: true },
|
|
25
|
-
});
|
|
26
|
-
await expectNoAxeViolations(container);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('active:无 axe violations(占位容器 role=status)', async () => {
|
|
30
|
-
const { container } = renderWithLocale(Skeleton, {
|
|
31
|
-
props: { loading: true, active: true },
|
|
32
|
-
});
|
|
33
|
-
await expectNoAxeViolations(container);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Skeleton — 骨架屏容器。
|
|
3
|
-
loading 切换占位/真实内容;active 控制 shimmer 动画(经 context 传给原子子组件)。
|
|
4
|
-
loading 受控不回写(红线 #1):仅由父级 prop 驱动,组件内部不修改。
|
|
5
|
-
占位容器 aria-busy + aria-live=polite + aria-label;骨架块本身 aria-hidden。
|
|
6
|
-
unmountPlaceholder=true(默认):{#if} 条件渲染,未激活的一侧从 DOM 卸载。
|
|
7
|
-
unmountPlaceholder=false(keepDOM):占位与真实内容同时挂载,靠 display:none 切换,避免重挂开销。
|
|
8
|
-
-->
|
|
9
|
-
<script lang="ts">
|
|
10
|
-
import type { Snippet } from 'svelte';
|
|
11
|
-
import { setContext } from 'svelte';
|
|
12
|
-
import { SKELETON_KEY, type SkeletonContext } from './context.js';
|
|
13
|
-
import SkeletonAvatar from './SkeletonAvatar.svelte';
|
|
14
|
-
import SkeletonTitle from './SkeletonTitle.svelte';
|
|
15
|
-
import SkeletonParagraph from './SkeletonParagraph.svelte';
|
|
16
|
-
import { useLocale } from '../locale-provider/index.js';
|
|
17
|
-
|
|
18
|
-
interface Props {
|
|
19
|
-
loading?: boolean;
|
|
20
|
-
active?: boolean;
|
|
21
|
-
unmountPlaceholder?: boolean;
|
|
22
|
-
placeholder?: Snippet;
|
|
23
|
-
children?: Snippet;
|
|
24
|
-
ariaLabel?: string;
|
|
25
|
-
class?: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
let {
|
|
29
|
-
loading = true,
|
|
30
|
-
active = false,
|
|
31
|
-
// unmountPlaceholder=true(默认)走 {#if} 卸载;false 走 keepDOM(display:none 切换)。
|
|
32
|
-
unmountPlaceholder = true,
|
|
33
|
-
placeholder,
|
|
34
|
-
children,
|
|
35
|
-
ariaLabel,
|
|
36
|
-
class: className,
|
|
37
|
-
}: Props = $props();
|
|
38
|
-
|
|
39
|
-
const loc = useLocale();
|
|
40
|
-
|
|
41
|
-
// setContext 一个带 getter 的对象:原子子组件读取 ctx.active 即建立响应式依赖。
|
|
42
|
-
const ctx: SkeletonContext = {
|
|
43
|
-
get active() {
|
|
44
|
-
return active;
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
setContext(SKELETON_KEY, ctx);
|
|
48
|
-
|
|
49
|
-
const cls = $derived(
|
|
50
|
-
['cd-skeleton', active && 'cd-skeleton--active', className]
|
|
51
|
-
.filter(Boolean)
|
|
52
|
-
.join(' '),
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
// 状态渲染派生纯函数(红线 #2):仅由入参算出隐藏标记,不产生副作用。
|
|
56
|
-
function hidden(isLoading: boolean, showWhenLoading: boolean): boolean {
|
|
57
|
-
return showWhenLoading ? !isLoading : isLoading;
|
|
58
|
-
}
|
|
59
|
-
</script>
|
|
60
|
-
|
|
61
|
-
{#snippet placeholderBody()}
|
|
62
|
-
{#if placeholder}
|
|
63
|
-
{@render placeholder()}
|
|
64
|
-
{:else}
|
|
65
|
-
<div class="cd-skeleton__default">
|
|
66
|
-
<SkeletonAvatar />
|
|
67
|
-
<div class="cd-skeleton__default-body">
|
|
68
|
-
<SkeletonTitle />
|
|
69
|
-
<SkeletonParagraph />
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
{/if}
|
|
73
|
-
{/snippet}
|
|
74
|
-
|
|
75
|
-
{#if unmountPlaceholder}
|
|
76
|
-
{#if loading}
|
|
77
|
-
<div class={cls} role="status" aria-busy="true" aria-live="polite" aria-label={ariaLabel ?? loc().t('Skeleton.loading')}>
|
|
78
|
-
{@render placeholderBody()}
|
|
79
|
-
</div>
|
|
80
|
-
{:else}
|
|
81
|
-
{@render children?.()}
|
|
82
|
-
{/if}
|
|
83
|
-
{:else}
|
|
84
|
-
<!-- keepDOM:两侧均挂载,靠 display:none 切换;隐藏侧加 inert/aria-hidden 防焦点与朗读。 -->
|
|
85
|
-
<div
|
|
86
|
-
class={cls}
|
|
87
|
-
role="status"
|
|
88
|
-
aria-busy="true"
|
|
89
|
-
aria-live="polite"
|
|
90
|
-
aria-label={ariaLabel ?? loc().t('Skeleton.loading')}
|
|
91
|
-
aria-hidden={hidden(loading, true) ? 'true' : undefined}
|
|
92
|
-
inert={hidden(loading, true)}
|
|
93
|
-
hidden={hidden(loading, true)}
|
|
94
|
-
>
|
|
95
|
-
{@render placeholderBody()}
|
|
96
|
-
</div>
|
|
97
|
-
<div
|
|
98
|
-
class="cd-skeleton__content"
|
|
99
|
-
aria-hidden={hidden(loading, false) ? 'true' : undefined}
|
|
100
|
-
inert={hidden(loading, false)}
|
|
101
|
-
hidden={hidden(loading, false)}
|
|
102
|
-
>
|
|
103
|
-
{@render children?.()}
|
|
104
|
-
</div>
|
|
105
|
-
{/if}
|
|
106
|
-
|
|
107
|
-
<style>
|
|
108
|
-
.cd-skeleton {
|
|
109
|
-
display: block;
|
|
110
|
-
}
|
|
111
|
-
.cd-skeleton__content {
|
|
112
|
-
display: contents;
|
|
113
|
-
}
|
|
114
|
-
/* keepDOM 隐藏侧:[hidden] 须压过 .cd-skeleton 的 display:block 与 __content 的 display:contents。 */
|
|
115
|
-
.cd-skeleton[hidden],
|
|
116
|
-
.cd-skeleton__content[hidden] {
|
|
117
|
-
display: none;
|
|
118
|
-
}
|
|
119
|
-
.cd-skeleton__default {
|
|
120
|
-
display: flex;
|
|
121
|
-
gap: var(--cd-skeleton-gap);
|
|
122
|
-
align-items: flex-start;
|
|
123
|
-
}
|
|
124
|
-
.cd-skeleton__default-body {
|
|
125
|
-
display: flex;
|
|
126
|
-
flex: 1 1 auto;
|
|
127
|
-
flex-direction: column;
|
|
128
|
-
gap: var(--cd-skeleton-gap);
|
|
129
|
-
min-inline-size: 0;
|
|
130
|
-
}
|
|
131
|
-
</style>
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
SkeletonAvatar — 头像骨架块(圆形 / 方形)。
|
|
3
|
-
size 映射 small 24 / default 32 / large 40 / 数字直接 px。
|
|
4
|
-
active 优先从 context 读(无 context 默认 false)。
|
|
5
|
-
-->
|
|
6
|
-
<script lang="ts">
|
|
7
|
-
import { getContext } from 'svelte';
|
|
8
|
-
import { SKELETON_KEY, type SkeletonContext } from './context.js';
|
|
9
|
-
|
|
10
|
-
interface Props {
|
|
11
|
-
shape?: 'circle' | 'square';
|
|
12
|
-
size?: 'small' | 'default' | 'large' | number;
|
|
13
|
-
class?: string;
|
|
14
|
-
style?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
let { shape = 'circle', size = 'default', class: className, style }: Props = $props();
|
|
18
|
-
|
|
19
|
-
const ctx = getContext<SkeletonContext | undefined>(SKELETON_KEY);
|
|
20
|
-
const active = $derived(ctx?.active ?? false);
|
|
21
|
-
|
|
22
|
-
const px = $derived.by(() => {
|
|
23
|
-
if (typeof size === 'number') return size;
|
|
24
|
-
if (size === 'small') return 24;
|
|
25
|
-
if (size === 'large') return 40;
|
|
26
|
-
return 32;
|
|
27
|
-
});
|
|
28
|
-
const radius = $derived(
|
|
29
|
-
shape === 'circle'
|
|
30
|
-
? 'var(--cd-skeleton-radius-pill)'
|
|
31
|
-
: 'var(--cd-skeleton-radius)',
|
|
32
|
-
);
|
|
33
|
-
const cls = $derived(
|
|
34
|
-
['cd-skeleton__block', 'cd-skeleton__avatar', className].filter(Boolean).join(' '),
|
|
35
|
-
);
|
|
36
|
-
</script>
|
|
37
|
-
|
|
38
|
-
<div
|
|
39
|
-
class={cls}
|
|
40
|
-
class:cd-skeleton__block--active={active}
|
|
41
|
-
aria-hidden="true"
|
|
42
|
-
style="inline-size:{px}px; block-size:{px}px; border-radius:{radius}; {style ?? ''}"
|
|
43
|
-
></div>
|
|
44
|
-
|
|
45
|
-
<style>
|
|
46
|
-
.cd-skeleton__avatar {
|
|
47
|
-
flex: 0 0 auto;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.cd-skeleton__block {
|
|
51
|
-
background: var(--cd-skeleton-color-bg);
|
|
52
|
-
border-radius: var(--cd-skeleton-radius);
|
|
53
|
-
}
|
|
54
|
-
.cd-skeleton__block--active {
|
|
55
|
-
background-image: linear-gradient(
|
|
56
|
-
90deg,
|
|
57
|
-
var(--cd-skeleton-color-bg) 25%,
|
|
58
|
-
var(--cd-skeleton-color-highlight) 37%,
|
|
59
|
-
var(--cd-skeleton-color-bg) 63%
|
|
60
|
-
);
|
|
61
|
-
background-size: 400% 100%;
|
|
62
|
-
animation: -global-cd-skeleton-shimmer var(--cd-skeleton-anim-duration)
|
|
63
|
-
var(--cd-skeleton-anim-timing) infinite;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
@keyframes -global-cd-skeleton-shimmer {
|
|
67
|
-
0% {
|
|
68
|
-
background-position: 100% 50%;
|
|
69
|
-
}
|
|
70
|
-
100% {
|
|
71
|
-
background-position: 0 50%;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
@media (prefers-reduced-motion: reduce) {
|
|
76
|
-
.cd-skeleton__block--active {
|
|
77
|
-
animation: none;
|
|
78
|
-
background-image: none;
|
|
79
|
-
background: var(--cd-skeleton-color-bg);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
</style>
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
SkeletonButton — 按钮骨架块(矩形 / 胶囊)。
|
|
3
|
-
size 映射高度 small 24 / default 32 / large 40;block 时宽 100%,否则默认约 64px。
|
|
4
|
-
active 优先从 context 读(无 context 默认 false)。
|
|
5
|
-
-->
|
|
6
|
-
<script lang="ts">
|
|
7
|
-
import { getContext } from 'svelte';
|
|
8
|
-
import { SKELETON_KEY, type SkeletonContext } from './context.js';
|
|
9
|
-
|
|
10
|
-
interface Props {
|
|
11
|
-
size?: 'small' | 'default' | 'large';
|
|
12
|
-
block?: boolean;
|
|
13
|
-
pill?: boolean;
|
|
14
|
-
width?: string | number;
|
|
15
|
-
class?: string;
|
|
16
|
-
style?: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
let {
|
|
20
|
-
size = 'default',
|
|
21
|
-
block = false,
|
|
22
|
-
pill = false,
|
|
23
|
-
width,
|
|
24
|
-
class: className,
|
|
25
|
-
style,
|
|
26
|
-
}: Props = $props();
|
|
27
|
-
|
|
28
|
-
const ctx = getContext<SkeletonContext | undefined>(SKELETON_KEY);
|
|
29
|
-
const active = $derived(ctx?.active ?? false);
|
|
30
|
-
|
|
31
|
-
const heightPx = $derived(size === 'small' ? 24 : size === 'large' ? 40 : 32);
|
|
32
|
-
const inlineSize = $derived.by(() => {
|
|
33
|
-
if (block) return '100%';
|
|
34
|
-
if (width !== undefined) return typeof width === 'number' ? `${width}px` : width;
|
|
35
|
-
return '64px';
|
|
36
|
-
});
|
|
37
|
-
const radius = $derived(
|
|
38
|
-
pill ? 'var(--cd-skeleton-radius-pill)' : 'var(--cd-skeleton-radius)',
|
|
39
|
-
);
|
|
40
|
-
const cls = $derived(
|
|
41
|
-
['cd-skeleton__block', 'cd-skeleton__button', className].filter(Boolean).join(' '),
|
|
42
|
-
);
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<div
|
|
46
|
-
class={cls}
|
|
47
|
-
class:cd-skeleton__block--active={active}
|
|
48
|
-
aria-hidden="true"
|
|
49
|
-
style="inline-size:{inlineSize}; block-size:{heightPx}px; border-radius:{radius}; {style ??
|
|
50
|
-
''}"
|
|
51
|
-
></div>
|
|
52
|
-
|
|
53
|
-
<style>
|
|
54
|
-
.cd-skeleton__button {
|
|
55
|
-
display: inline-block;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.cd-skeleton__block {
|
|
59
|
-
background: var(--cd-skeleton-color-bg);
|
|
60
|
-
border-radius: var(--cd-skeleton-radius);
|
|
61
|
-
}
|
|
62
|
-
.cd-skeleton__block--active {
|
|
63
|
-
background-image: linear-gradient(
|
|
64
|
-
90deg,
|
|
65
|
-
var(--cd-skeleton-color-bg) 25%,
|
|
66
|
-
var(--cd-skeleton-color-highlight) 37%,
|
|
67
|
-
var(--cd-skeleton-color-bg) 63%
|
|
68
|
-
);
|
|
69
|
-
background-size: 400% 100%;
|
|
70
|
-
animation: -global-cd-skeleton-shimmer var(--cd-skeleton-anim-duration)
|
|
71
|
-
var(--cd-skeleton-anim-timing) infinite;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
@keyframes -global-cd-skeleton-shimmer {
|
|
75
|
-
0% {
|
|
76
|
-
background-position: 100% 50%;
|
|
77
|
-
}
|
|
78
|
-
100% {
|
|
79
|
-
background-position: 0 50%;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
@media (prefers-reduced-motion: reduce) {
|
|
84
|
-
.cd-skeleton__block--active {
|
|
85
|
-
animation: none;
|
|
86
|
-
background-image: none;
|
|
87
|
-
background: var(--cd-skeleton-color-bg);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
</style>
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
SkeletonImage — 大矩形图片骨架块,showIcon 时中心放弱色图片图标。
|
|
3
|
-
active 优先从 context 读(无 context 默认 false)。
|
|
4
|
-
-->
|
|
5
|
-
<script lang="ts">
|
|
6
|
-
import { getContext } from 'svelte';
|
|
7
|
-
import { SKELETON_KEY, type SkeletonContext } from './context.js';
|
|
8
|
-
|
|
9
|
-
interface Props {
|
|
10
|
-
width?: string | number;
|
|
11
|
-
height?: string | number;
|
|
12
|
-
showIcon?: boolean;
|
|
13
|
-
class?: string;
|
|
14
|
-
style?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
let {
|
|
18
|
-
width = '100%',
|
|
19
|
-
height = '120px',
|
|
20
|
-
showIcon = true,
|
|
21
|
-
class: className,
|
|
22
|
-
style,
|
|
23
|
-
}: Props = $props();
|
|
24
|
-
|
|
25
|
-
const ctx = getContext<SkeletonContext | undefined>(SKELETON_KEY);
|
|
26
|
-
const active = $derived(ctx?.active ?? false);
|
|
27
|
-
|
|
28
|
-
const inlineSize = $derived(typeof width === 'number' ? `${width}px` : width);
|
|
29
|
-
const blockSize = $derived(typeof height === 'number' ? `${height}px` : height);
|
|
30
|
-
const cls = $derived(
|
|
31
|
-
['cd-skeleton__block', 'cd-skeleton__image', className].filter(Boolean).join(' '),
|
|
32
|
-
);
|
|
33
|
-
</script>
|
|
34
|
-
|
|
35
|
-
<div
|
|
36
|
-
class={cls}
|
|
37
|
-
class:cd-skeleton__block--active={active}
|
|
38
|
-
aria-hidden="true"
|
|
39
|
-
style="inline-size:{inlineSize}; block-size:{blockSize}; {style ?? ''}"
|
|
40
|
-
>
|
|
41
|
-
{#if showIcon}
|
|
42
|
-
<svg
|
|
43
|
-
class="cd-skeleton__image-icon"
|
|
44
|
-
viewBox="0 0 48 48"
|
|
45
|
-
width="32"
|
|
46
|
-
height="32"
|
|
47
|
-
aria-hidden="true"
|
|
48
|
-
focusable="false"
|
|
49
|
-
>
|
|
50
|
-
<path
|
|
51
|
-
fill="currentColor"
|
|
52
|
-
d="M40 8H8a4 4 0 0 0-4 4v24a4 4 0 0 0 4 4h32a4 4 0 0 0 4-4V12a4 4 0 0 0-4-4Zm0 28H8v-6l8-8 6 6 10-10 8 8v10ZM16 22a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z"
|
|
53
|
-
/>
|
|
54
|
-
</svg>
|
|
55
|
-
{/if}
|
|
56
|
-
</div>
|
|
57
|
-
|
|
58
|
-
<style>
|
|
59
|
-
.cd-skeleton__image {
|
|
60
|
-
display: flex;
|
|
61
|
-
align-items: center;
|
|
62
|
-
justify-content: center;
|
|
63
|
-
}
|
|
64
|
-
.cd-skeleton__image-icon {
|
|
65
|
-
color: var(--cd-color-text-3);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.cd-skeleton__block {
|
|
69
|
-
background: var(--cd-skeleton-color-bg);
|
|
70
|
-
border-radius: var(--cd-skeleton-radius);
|
|
71
|
-
}
|
|
72
|
-
.cd-skeleton__block--active {
|
|
73
|
-
background-image: linear-gradient(
|
|
74
|
-
90deg,
|
|
75
|
-
var(--cd-skeleton-color-bg) 25%,
|
|
76
|
-
var(--cd-skeleton-color-highlight) 37%,
|
|
77
|
-
var(--cd-skeleton-color-bg) 63%
|
|
78
|
-
);
|
|
79
|
-
background-size: 400% 100%;
|
|
80
|
-
animation: -global-cd-skeleton-shimmer var(--cd-skeleton-anim-duration)
|
|
81
|
-
var(--cd-skeleton-anim-timing) infinite;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
@keyframes -global-cd-skeleton-shimmer {
|
|
85
|
-
0% {
|
|
86
|
-
background-position: 100% 50%;
|
|
87
|
-
}
|
|
88
|
-
100% {
|
|
89
|
-
background-position: 0 50%;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
@media (prefers-reduced-motion: reduce) {
|
|
94
|
-
.cd-skeleton__block--active {
|
|
95
|
-
animation: none;
|
|
96
|
-
background-image: none;
|
|
97
|
-
background: var(--cd-skeleton-color-bg);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
</style>
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
SkeletonParagraph — 多行段落骨架块。
|
|
3
|
-
宽度规则:width 是数组按行取(越界用 100%);是单值时全部行用该值;
|
|
4
|
-
未给 width 时末行收窄到 61%、其余 100%。
|
|
5
|
-
active 优先从 context 读(无 context 默认 false)。
|
|
6
|
-
-->
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import { getContext } from 'svelte';
|
|
9
|
-
import { SKELETON_KEY, type SkeletonContext } from './context.js';
|
|
10
|
-
|
|
11
|
-
interface Props {
|
|
12
|
-
rows?: number;
|
|
13
|
-
width?: string | number | Array<string | number>;
|
|
14
|
-
class?: string;
|
|
15
|
-
style?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
let { rows = 3, width, class: className, style }: Props = $props();
|
|
19
|
-
|
|
20
|
-
const ctx = getContext<SkeletonContext | undefined>(SKELETON_KEY);
|
|
21
|
-
const active = $derived(ctx?.active ?? false);
|
|
22
|
-
|
|
23
|
-
function toLength(value: string | number): string {
|
|
24
|
-
return typeof value === 'number' ? `${value}px` : value;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const widths = $derived.by(() => {
|
|
28
|
-
const list: string[] = [];
|
|
29
|
-
for (let i = 0; i < rows; i++) {
|
|
30
|
-
const last = i === rows - 1;
|
|
31
|
-
if (Array.isArray(width)) {
|
|
32
|
-
const v = width[i];
|
|
33
|
-
list.push(v === undefined ? '100%' : toLength(v));
|
|
34
|
-
} else if (width === undefined) {
|
|
35
|
-
list.push(last ? '61%' : '100%');
|
|
36
|
-
} else {
|
|
37
|
-
list.push(toLength(width));
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return list;
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
const cls = $derived(
|
|
44
|
-
['cd-skeleton__paragraph', className].filter(Boolean).join(' '),
|
|
45
|
-
);
|
|
46
|
-
</script>
|
|
47
|
-
|
|
48
|
-
<ul class={cls} aria-hidden="true" style={style}>
|
|
49
|
-
{#each widths as w, i (i)}
|
|
50
|
-
<li
|
|
51
|
-
class="cd-skeleton__block cd-skeleton__paragraph-row"
|
|
52
|
-
class:cd-skeleton__block--active={active}
|
|
53
|
-
style="inline-size:{w}"
|
|
54
|
-
></li>
|
|
55
|
-
{/each}
|
|
56
|
-
</ul>
|
|
57
|
-
|
|
58
|
-
<style>
|
|
59
|
-
.cd-skeleton__paragraph {
|
|
60
|
-
display: flex;
|
|
61
|
-
flex-direction: column;
|
|
62
|
-
gap: var(--cd-skeleton-gap);
|
|
63
|
-
margin: 0;
|
|
64
|
-
padding: 0;
|
|
65
|
-
list-style: none;
|
|
66
|
-
}
|
|
67
|
-
.cd-skeleton__paragraph-row {
|
|
68
|
-
block-size: var(--cd-skeleton-paragraph-height);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.cd-skeleton__block {
|
|
72
|
-
background: var(--cd-skeleton-color-bg);
|
|
73
|
-
border-radius: var(--cd-skeleton-radius);
|
|
74
|
-
}
|
|
75
|
-
.cd-skeleton__block--active {
|
|
76
|
-
background-image: linear-gradient(
|
|
77
|
-
90deg,
|
|
78
|
-
var(--cd-skeleton-color-bg) 25%,
|
|
79
|
-
var(--cd-skeleton-color-highlight) 37%,
|
|
80
|
-
var(--cd-skeleton-color-bg) 63%
|
|
81
|
-
);
|
|
82
|
-
background-size: 400% 100%;
|
|
83
|
-
animation: -global-cd-skeleton-shimmer var(--cd-skeleton-anim-duration)
|
|
84
|
-
var(--cd-skeleton-anim-timing) infinite;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
@keyframes -global-cd-skeleton-shimmer {
|
|
88
|
-
0% {
|
|
89
|
-
background-position: 100% 50%;
|
|
90
|
-
}
|
|
91
|
-
100% {
|
|
92
|
-
background-position: 0 50%;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
@media (prefers-reduced-motion: reduce) {
|
|
97
|
-
.cd-skeleton__block--active {
|
|
98
|
-
animation: none;
|
|
99
|
-
background-image: none;
|
|
100
|
-
background: var(--cd-skeleton-color-bg);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
</style>
|