@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/input-number/meta.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Machine-readable component metadata for AI/docs consumption.
|
|
3
|
-
* See specs/00-foundation/ai-friendly.spec.md.
|
|
4
|
-
*/
|
|
5
|
-
export const meta = {
|
|
6
|
-
name: 'InputNumber',
|
|
7
|
-
category: 'input',
|
|
8
|
-
description: '受约束的数值录入框,含步进按钮、键盘步进、精度与范围 clamp,复用 Input 视觉。',
|
|
9
|
-
props: [
|
|
10
|
-
{ name: 'value', type: 'number | null', default: 'undefined', desc: '受控值;提供则为受控' },
|
|
11
|
-
{ name: 'defaultValue', type: 'number | null', default: 'null', desc: '非受控初始值' },
|
|
12
|
-
{ name: 'min', type: 'number', default: '-Infinity' },
|
|
13
|
-
{ name: 'max', type: 'number', default: 'Infinity' },
|
|
14
|
-
{ name: 'step', type: 'number', default: '1' },
|
|
15
|
-
{ name: 'shiftStep', type: 'number', default: 'step * 10', desc: 'Shift+↑↓ 步长' },
|
|
16
|
-
{ name: 'precision', type: 'number', default: 'undefined', desc: '失焦四舍五入保留小数位' },
|
|
17
|
-
{ name: 'boundaryMode', type: "'clamp'|'strict'", default: 'clamp', desc: '越界处理:钳制 / 拒绝回滚' },
|
|
18
|
-
{ name: 'formatter', type: '(n: number) => string', default: 'undefined', desc: '自定义显示格式化(仅非编辑态)' },
|
|
19
|
-
{ name: 'parser', type: '(s: string) => number', default: 'undefined', desc: '自定义解析' },
|
|
20
|
-
{ name: 'size', type: "'small'|'default'|'large'", default: 'default' },
|
|
21
|
-
{ name: 'disabled', type: 'boolean', default: 'false' },
|
|
22
|
-
{ name: 'readonly', type: 'boolean', default: 'false' },
|
|
23
|
-
{ name: 'status', type: "'default'|'warning'|'error'", default: 'default' },
|
|
24
|
-
{ name: 'controls', type: 'boolean', default: 'true', desc: '是否显示步进按钮' },
|
|
25
|
-
{ name: 'controlsPosition', type: "'right'|'sides'", default: 'right', desc: '步进按钮布局:右侧 stacked / 两侧' },
|
|
26
|
-
{ name: 'innerButtons', type: 'boolean', default: 'false', desc: '按钮内嵌悬浮(hover/focus 显形)' },
|
|
27
|
-
{ name: 'keyboard', type: 'boolean', default: 'true', desc: '是否启用 ↑↓/PageUp·Down 步进' },
|
|
28
|
-
{ name: 'mouseWheel', type: 'boolean', default: 'false', desc: '聚焦时滚轮步进' },
|
|
29
|
-
{ name: 'placeholder', type: 'string', default: 'undefined' },
|
|
30
|
-
{ name: 'prefix', type: 'string | Snippet', default: 'undefined', desc: '输入框前置内容(如货币符号、单位)' },
|
|
31
|
-
{ name: 'suffix', type: 'string | Snippet', default: 'undefined', desc: '输入框后置内容(如单位 %、kg)' },
|
|
32
|
-
{ name: 'name', type: 'string', default: 'undefined' },
|
|
33
|
-
{ name: 'id', type: 'string', default: '自动生成', desc: 'input 元素 id,关联外部 label' },
|
|
34
|
-
{ name: 'ariaLabel', type: 'string', default: 'undefined' },
|
|
35
|
-
{ name: 'autofocus', type: 'boolean', default: 'false', desc: '挂载自动聚焦' },
|
|
36
|
-
{ name: 'selectOnFocus', type: 'boolean', default: 'false', desc: '聚焦时全选文本' },
|
|
37
|
-
{ name: 'locale', type: 'string', default: 'undefined', desc: '数字格式化 locale(仅未提供 formatter 时生效)' },
|
|
38
|
-
{ name: 'onChange', type: '(v: number | null) => void', default: 'undefined', desc: '归一化后值变化' },
|
|
39
|
-
{ name: 'onBoundaryHit', type: "(e: { boundary: 'min'|'max'; value: number }) => void", default: 'undefined', desc: '触达/试图越过边界' },
|
|
40
|
-
],
|
|
41
|
-
events: [
|
|
42
|
-
{ name: 'change', payload: '{ value: number | null }', desc: '归一化后值变化(受控核心事件)' },
|
|
43
|
-
{ name: 'boundaryHit', payload: "{ boundary: 'min'|'max'; value: number }", desc: '触达/试图越过边界' },
|
|
44
|
-
{
|
|
45
|
-
name: 'step',
|
|
46
|
-
payload: "{ value: number; direction: 'up'|'down'; source: 'button'|'keyboard'|'wheel' }",
|
|
47
|
-
desc: '任一步进动作完成',
|
|
48
|
-
},
|
|
49
|
-
{ name: 'focus', payload: 'FocusEvent', desc: '聚焦' },
|
|
50
|
-
{ name: 'blur', payload: 'FocusEvent', desc: '失焦(已完成 commit 归一化)' },
|
|
51
|
-
{ name: 'keydown', payload: 'KeyboardEvent', desc: '透传原生 keydown' },
|
|
52
|
-
],
|
|
53
|
-
a11y: {
|
|
54
|
-
role: 'spinbutton',
|
|
55
|
-
keyboard: ['ArrowUp', 'ArrowDown', 'Shift+ArrowUp', 'Shift+ArrowDown', 'PageUp', 'PageDown', 'Enter'],
|
|
56
|
-
notes: [
|
|
57
|
-
'input role=spinbutton + aria-valuenow/valuemin/valuemax',
|
|
58
|
-
'失焦按 precision 四舍五入并 clamp 到 [min,max]',
|
|
59
|
-
'到 min/max 时对应步进按钮 disabled',
|
|
60
|
-
'步进按钮 tabindex=-1,mousedown.preventDefault 不夺焦',
|
|
61
|
-
'disabled→aria-disabled,readonly→aria-readonly,error→aria-invalid',
|
|
62
|
-
],
|
|
63
|
-
},
|
|
64
|
-
tokens: ['--cd-input-*', '--cd-color-*', '--cd-spacing-*', '--cd-focus-ring', '--cd-motion-*'],
|
|
65
|
-
} as const;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Content — main region within Layout. Grows to fill, token-driven background.
|
|
3
|
-
-->
|
|
4
|
-
<script lang="ts">
|
|
5
|
-
import type { Snippet } from 'svelte';
|
|
6
|
-
|
|
7
|
-
interface Props {
|
|
8
|
-
/** true→token padding; number→px; string→raw; false→0 */
|
|
9
|
-
padding?: string | number | boolean;
|
|
10
|
-
class?: string;
|
|
11
|
-
children?: Snippet;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
let { padding = false, class: className = '', children }: Props = $props();
|
|
15
|
-
|
|
16
|
-
const paddingCss = $derived.by(() => {
|
|
17
|
-
if (padding === true) return 'var(--cd-layout-content-padding)';
|
|
18
|
-
if (padding === false) return '0';
|
|
19
|
-
return typeof padding === 'number' ? `${padding}px` : padding;
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const cls = $derived(['cd-layout-content', className].filter(Boolean).join(' '));
|
|
23
|
-
|
|
24
|
-
const inlineStyle = $derived(`padding:${paddingCss}`);
|
|
25
|
-
</script>
|
|
26
|
-
|
|
27
|
-
<main class={cls} style={inlineStyle}>
|
|
28
|
-
{@render children?.()}
|
|
29
|
-
</main>
|
|
30
|
-
|
|
31
|
-
<style>
|
|
32
|
-
.cd-layout-content {
|
|
33
|
-
flex: 1;
|
|
34
|
-
min-height: 0;
|
|
35
|
-
background: var(--cd-layout-content-bg);
|
|
36
|
-
}
|
|
37
|
-
</style>
|
package/src/layout/Footer.svelte
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Footer — bottom bar within Layout. Token-driven background/color.
|
|
3
|
-
-->
|
|
4
|
-
<script lang="ts">
|
|
5
|
-
import type { Snippet } from 'svelte';
|
|
6
|
-
|
|
7
|
-
interface Props {
|
|
8
|
-
sticky?: boolean;
|
|
9
|
-
/** override height; number→px, string→raw */
|
|
10
|
-
height?: string | number;
|
|
11
|
-
class?: string;
|
|
12
|
-
children?: Snippet;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
let { sticky = false, height, class: className = '', children }: Props = $props();
|
|
16
|
-
|
|
17
|
-
const heightCss = $derived.by(() => {
|
|
18
|
-
if (height === undefined) return undefined;
|
|
19
|
-
return typeof height === 'number' ? `${height}px` : height;
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const cls = $derived(
|
|
23
|
-
['cd-layout-footer', sticky && 'cd-layout-footer--sticky', className].filter(Boolean).join(' '),
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
const inlineStyle = $derived(heightCss ? `height:${heightCss}` : undefined);
|
|
27
|
-
</script>
|
|
28
|
-
|
|
29
|
-
<footer class={cls} style={inlineStyle}>
|
|
30
|
-
{@render children?.()}
|
|
31
|
-
</footer>
|
|
32
|
-
|
|
33
|
-
<style>
|
|
34
|
-
.cd-layout-footer {
|
|
35
|
-
display: flex;
|
|
36
|
-
flex: 0 0 auto;
|
|
37
|
-
align-items: center;
|
|
38
|
-
justify-content: center;
|
|
39
|
-
padding-block: var(--cd-spacing-4);
|
|
40
|
-
padding-inline: var(--cd-spacing-6);
|
|
41
|
-
background: var(--cd-layout-footer-bg);
|
|
42
|
-
color: var(--cd-layout-footer-color);
|
|
43
|
-
text-align: center;
|
|
44
|
-
}
|
|
45
|
-
.cd-layout-footer--sticky {
|
|
46
|
-
position: sticky;
|
|
47
|
-
inset-block-end: 0;
|
|
48
|
-
}
|
|
49
|
-
</style>
|
package/src/layout/Header.svelte
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Header — top bar within Layout. Token-driven background/height.
|
|
3
|
-
-->
|
|
4
|
-
<script lang="ts">
|
|
5
|
-
import type { Snippet } from 'svelte';
|
|
6
|
-
|
|
7
|
-
interface Props {
|
|
8
|
-
sticky?: boolean;
|
|
9
|
-
/** override token height; number→px, string→raw */
|
|
10
|
-
height?: string | number;
|
|
11
|
-
class?: string;
|
|
12
|
-
children?: Snippet;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
let { sticky = false, height, class: className = '', children }: Props = $props();
|
|
16
|
-
|
|
17
|
-
const heightCss = $derived.by(() => {
|
|
18
|
-
if (height === undefined) return undefined;
|
|
19
|
-
return typeof height === 'number' ? `${height}px` : height;
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const cls = $derived(
|
|
23
|
-
['cd-layout-header', sticky && 'cd-layout-header--sticky', className].filter(Boolean).join(' '),
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
const inlineStyle = $derived(heightCss ? `height:${heightCss}` : undefined);
|
|
27
|
-
</script>
|
|
28
|
-
|
|
29
|
-
<header class={cls} style={inlineStyle}>
|
|
30
|
-
{@render children?.()}
|
|
31
|
-
</header>
|
|
32
|
-
|
|
33
|
-
<style>
|
|
34
|
-
.cd-layout-header {
|
|
35
|
-
display: flex;
|
|
36
|
-
flex: 0 0 auto;
|
|
37
|
-
align-items: center;
|
|
38
|
-
height: var(--cd-layout-header-height);
|
|
39
|
-
background: var(--cd-layout-header-bg);
|
|
40
|
-
}
|
|
41
|
-
.cd-layout-header--sticky {
|
|
42
|
-
position: sticky;
|
|
43
|
-
inset-block-start: 0;
|
|
44
|
-
z-index: var(--cd-layout-header-z);
|
|
45
|
-
}
|
|
46
|
-
</style>
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
// Layout a11y:页面级布局骨架(section + header/main/footer/aside 语义元素)。
|
|
2
|
-
// 纯布局,不引入额外 role;Sider collapsible 触发器为原生 button + aria-expanded/aria-controls/aria-label。
|
|
3
|
-
import { describe, it, expect } from 'vitest';
|
|
4
|
-
import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
|
|
5
|
-
import LayoutFixture from './LayoutA11yFixture.svelte';
|
|
6
|
-
|
|
7
|
-
describe('Layout a11y', () => {
|
|
8
|
-
it('默认渲染:语义布局元素齐全,无 axe violations', async () => {
|
|
9
|
-
const { container } = renderWithLocale(LayoutFixture, {});
|
|
10
|
-
expect(container.querySelector('section.cd-layout')).not.toBeNull();
|
|
11
|
-
expect(container.querySelector('header.cd-layout-header')).not.toBeNull();
|
|
12
|
-
expect(container.querySelector('main.cd-layout-content')).not.toBeNull();
|
|
13
|
-
expect(container.querySelector('footer.cd-layout-footer')).not.toBeNull();
|
|
14
|
-
expect(container.querySelector('aside.cd-layout-sider')).not.toBeNull();
|
|
15
|
-
await expectNoAxeViolations(container);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('collapsible Sider:触发器 button aria-expanded/aria-controls/aria-label,无 axe violations', async () => {
|
|
19
|
-
const { container } = renderWithLocale(LayoutFixture, {
|
|
20
|
-
props: { collapsible: true },
|
|
21
|
-
});
|
|
22
|
-
const trigger = container.querySelector('button.cd-layout-sider__trigger');
|
|
23
|
-
expect(trigger).not.toBeNull();
|
|
24
|
-
// 展开态 aria-expanded=true。
|
|
25
|
-
expect(trigger?.getAttribute('aria-expanded')).toBe('true');
|
|
26
|
-
// aria-controls 指向 Sider id(不悬空)。
|
|
27
|
-
const controls = trigger?.getAttribute('aria-controls');
|
|
28
|
-
expect(controls).toBeTruthy();
|
|
29
|
-
expect(container.ownerDocument.getElementById(controls!)).not.toBeNull();
|
|
30
|
-
// aria-label 来自 i18n(验证 LocaleProvider 管线)。
|
|
31
|
-
expect(trigger?.getAttribute('aria-label')).toBeTruthy();
|
|
32
|
-
await expectNoAxeViolations(container);
|
|
33
|
-
});
|
|
34
|
-
});
|
package/src/layout/Layout.svelte
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Layout — root flex container. Column by default; row when a Sider is present.
|
|
3
|
-
Sider auto-detection: Sider registers itself via context on mount, flipping the
|
|
4
|
-
direction to row. Explicit `hasSider` always wins.
|
|
5
|
-
NOTE: child onMount runs after the parent, so SSR/first frame may render column
|
|
6
|
-
then switch to row. For SSR correctness pass `hasSider` explicitly.
|
|
7
|
-
-->
|
|
8
|
-
<script lang="ts" module>
|
|
9
|
-
export const LAYOUT_CONTEXT_KEY = Symbol('cd-layout');
|
|
10
|
-
|
|
11
|
-
export interface LayoutContext {
|
|
12
|
-
registerSider: () => void;
|
|
13
|
-
}
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<script lang="ts">
|
|
17
|
-
import type { Snippet } from 'svelte';
|
|
18
|
-
import { setContext } from 'svelte';
|
|
19
|
-
|
|
20
|
-
interface Props {
|
|
21
|
-
hasSider?: boolean;
|
|
22
|
-
class?: string;
|
|
23
|
-
children?: Snippet;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
let { hasSider, class: className = '', children }: Props = $props();
|
|
27
|
-
|
|
28
|
-
let hasSiderDetected = $state(false);
|
|
29
|
-
|
|
30
|
-
setContext<LayoutContext>(LAYOUT_CONTEXT_KEY, {
|
|
31
|
-
registerSider: () => {
|
|
32
|
-
hasSiderDetected = true;
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
const isRow = $derived(hasSider ?? hasSiderDetected);
|
|
37
|
-
|
|
38
|
-
const cls = $derived(
|
|
39
|
-
['cd-layout', isRow ? 'cd-layout--has-sider' : 'cd-layout--column', className]
|
|
40
|
-
.filter(Boolean)
|
|
41
|
-
.join(' '),
|
|
42
|
-
);
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<section class={cls}>
|
|
46
|
-
{@render children?.()}
|
|
47
|
-
</section>
|
|
48
|
-
|
|
49
|
-
<style>
|
|
50
|
-
.cd-layout {
|
|
51
|
-
display: flex;
|
|
52
|
-
flex: auto;
|
|
53
|
-
flex-direction: column;
|
|
54
|
-
min-height: 0;
|
|
55
|
-
background: var(--cd-layout-bg);
|
|
56
|
-
}
|
|
57
|
-
.cd-layout--has-sider {
|
|
58
|
-
flex-direction: row;
|
|
59
|
-
}
|
|
60
|
-
</style>
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
仅供 Layout.a11y.test.ts 使用的测试夹具:Layout 根 + Header/Sider/Content/Footer。
|
|
3
|
-
Sider collapsible 渲染原生 button 触发器(aria-expanded/aria-controls/aria-label)。
|
|
4
|
-
-->
|
|
5
|
-
<script lang="ts">
|
|
6
|
-
import { Layout } from './index.js';
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
collapsible?: boolean;
|
|
10
|
-
}
|
|
11
|
-
let { collapsible = false }: Props = $props();
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
<Layout hasSider>
|
|
15
|
-
<Layout.Sider {collapsible}>Navigation</Layout.Sider>
|
|
16
|
-
<Layout>
|
|
17
|
-
<Layout.Header>Page header</Layout.Header>
|
|
18
|
-
<Layout.Content padding>Main content</Layout.Content>
|
|
19
|
-
<Layout.Footer>Page footer</Layout.Footer>
|
|
20
|
-
</Layout>
|
|
21
|
-
</Layout>
|
package/src/layout/Sider.svelte
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Sider — collapsible side panel. Backed by headless createSider from core.
|
|
3
|
-
Registers with Layout (context) so Layout switches to row direction.
|
|
4
|
-
aria-label 文案经 useLocale 取自 locale 包(Sider.expand/collapse)。
|
|
5
|
-
-->
|
|
6
|
-
<script lang="ts">
|
|
7
|
-
import type { Snippet } from 'svelte';
|
|
8
|
-
import { getContext, onMount, untrack } from 'svelte';
|
|
9
|
-
import {
|
|
10
|
-
createSider,
|
|
11
|
-
type Breakpoint,
|
|
12
|
-
type SiderOptions,
|
|
13
|
-
type SiderTrigger,
|
|
14
|
-
} from '@chenzy-design/core';
|
|
15
|
-
import { LAYOUT_CONTEXT_KEY, type LayoutContext } from './Layout.svelte';
|
|
16
|
-
import { useLocale } from '../locale-provider/index.js';
|
|
17
|
-
|
|
18
|
-
interface Props {
|
|
19
|
-
/** controlled collapsed value */
|
|
20
|
-
collapsed?: boolean;
|
|
21
|
-
defaultCollapsed?: boolean;
|
|
22
|
-
collapsible?: boolean;
|
|
23
|
-
width?: string | number;
|
|
24
|
-
collapsedWidth?: string | number;
|
|
25
|
-
breakpoint?: Breakpoint;
|
|
26
|
-
reverseArrow?: boolean;
|
|
27
|
-
placement?: 'left' | 'right';
|
|
28
|
-
class?: string;
|
|
29
|
-
onCollapse?: (collapsed: boolean, trigger: SiderTrigger) => void;
|
|
30
|
-
children?: Snippet;
|
|
31
|
-
/** custom trigger; receives current collapsed + toggle */
|
|
32
|
-
trigger?: Snippet<[{ collapsed: boolean; toggle: () => void }]>;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
let {
|
|
36
|
-
collapsed,
|
|
37
|
-
defaultCollapsed = false,
|
|
38
|
-
collapsible = false,
|
|
39
|
-
width = 200,
|
|
40
|
-
collapsedWidth = 60,
|
|
41
|
-
breakpoint,
|
|
42
|
-
reverseArrow = false,
|
|
43
|
-
placement = 'left',
|
|
44
|
-
class: className = '',
|
|
45
|
-
onCollapse,
|
|
46
|
-
children,
|
|
47
|
-
trigger,
|
|
48
|
-
}: Props = $props();
|
|
49
|
-
|
|
50
|
-
const loc = useLocale();
|
|
51
|
-
|
|
52
|
-
const layout = getContext<LayoutContext | undefined>(LAYOUT_CONTEXT_KEY);
|
|
53
|
-
|
|
54
|
-
// Headless machine is created once with the initial prop values; later changes
|
|
55
|
-
// to the controlled `collapsed` prop are applied via the $derived below.
|
|
56
|
-
// untrack documents that we intentionally capture only the initial values here.
|
|
57
|
-
const sider = untrack(() => {
|
|
58
|
-
// Build options conditionally — exactOptionalPropertyTypes forbids passing
|
|
59
|
-
// `undefined` for optional props typed without `| undefined`.
|
|
60
|
-
const options: SiderOptions = {
|
|
61
|
-
defaultCollapsed,
|
|
62
|
-
onChange: (value, t) => onCollapse?.(value, t),
|
|
63
|
-
};
|
|
64
|
-
if (collapsed !== undefined) options.collapsed = collapsed;
|
|
65
|
-
if (breakpoint !== undefined) options.breakpoint = breakpoint;
|
|
66
|
-
return createSider(options);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// Tracks the headless machine's uncontrolled collapsed state.
|
|
70
|
-
let internalCollapsed = $state(sider.getCollapsed());
|
|
71
|
-
|
|
72
|
-
// Controlled `collapsed` prop always wins over the internal value.
|
|
73
|
-
const collapsedState = $derived(collapsed ?? internalCollapsed);
|
|
74
|
-
|
|
75
|
-
// Notify Layout once so it switches to row direction.
|
|
76
|
-
onMount(() => {
|
|
77
|
-
layout?.registerSider();
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// Bridge the headless subscription/breakpoint watcher into Svelte reactivity.
|
|
81
|
-
// This is the intended escape-hatch use of $effect: syncing an external store.
|
|
82
|
-
$effect(() => {
|
|
83
|
-
const unsubscribe = sider.subscribe((value) => {
|
|
84
|
-
internalCollapsed = value;
|
|
85
|
-
});
|
|
86
|
-
const stopWatch = sider.watchBreakpoint();
|
|
87
|
-
return () => {
|
|
88
|
-
unsubscribe();
|
|
89
|
-
stopWatch();
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
function toggle(): void {
|
|
94
|
-
sider.toggle();
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function toCss(value: string | number): string {
|
|
98
|
-
return typeof value === 'number' ? `${value}px` : value;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const widthCss = $derived(collapsedState ? toCss(collapsedWidth) : toCss(width));
|
|
102
|
-
|
|
103
|
-
const isCollapsedToZero = $derived(
|
|
104
|
-
collapsedState && (collapsedWidth === 0 || collapsedWidth === '0' || collapsedWidth === '0px'),
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
const cls = $derived(
|
|
108
|
-
[
|
|
109
|
-
'cd-layout-sider',
|
|
110
|
-
`cd-layout-sider--${placement}`,
|
|
111
|
-
collapsedState && 'cd-layout-sider--collapsed',
|
|
112
|
-
className,
|
|
113
|
-
]
|
|
114
|
-
.filter(Boolean)
|
|
115
|
-
.join(' '),
|
|
116
|
-
);
|
|
117
|
-
|
|
118
|
-
const inlineStyle = $derived(`flex: 0 0 ${widthCss}; width: ${widthCss}; max-width: ${widthCss}`);
|
|
119
|
-
|
|
120
|
-
// Arrow direction: point "outward" to expand, "inward" to collapse.
|
|
121
|
-
// placement + reverseArrow flip which glyph means which.
|
|
122
|
-
const pointsStart = $derived.by(() => {
|
|
123
|
-
const base = placement === 'left' ? collapsedState : !collapsedState;
|
|
124
|
-
return reverseArrow ? !base : base;
|
|
125
|
-
});
|
|
126
|
-
</script>
|
|
127
|
-
|
|
128
|
-
<aside class={cls} style={inlineStyle}>
|
|
129
|
-
<div
|
|
130
|
-
id={sider.id}
|
|
131
|
-
class="cd-layout-sider__children"
|
|
132
|
-
aria-hidden={isCollapsedToZero || undefined}
|
|
133
|
-
>
|
|
134
|
-
{@render children?.()}
|
|
135
|
-
</div>
|
|
136
|
-
|
|
137
|
-
{#if trigger}
|
|
138
|
-
{@render trigger({ collapsed: collapsedState, toggle })}
|
|
139
|
-
{:else if collapsible}
|
|
140
|
-
<button
|
|
141
|
-
type="button"
|
|
142
|
-
class="cd-layout-sider__trigger"
|
|
143
|
-
aria-expanded={!collapsedState}
|
|
144
|
-
aria-controls={sider.id}
|
|
145
|
-
aria-label={collapsedState ? loc().t('Sider.expand') : loc().t('Sider.collapse')}
|
|
146
|
-
onclick={toggle}
|
|
147
|
-
>
|
|
148
|
-
<span class="cd-layout-sider__arrow" aria-hidden="true">{pointsStart ? '‹' : '›'}</span>
|
|
149
|
-
</button>
|
|
150
|
-
{/if}
|
|
151
|
-
</aside>
|
|
152
|
-
|
|
153
|
-
<style>
|
|
154
|
-
.cd-layout-sider {
|
|
155
|
-
position: relative;
|
|
156
|
-
display: flex;
|
|
157
|
-
flex-direction: column;
|
|
158
|
-
min-height: 0;
|
|
159
|
-
background: var(--cd-layout-sider-bg);
|
|
160
|
-
transition:
|
|
161
|
-
flex-basis var(--cd-layout-motion-duration) var(--cd-layout-motion-ease),
|
|
162
|
-
width var(--cd-layout-motion-duration) var(--cd-layout-motion-ease),
|
|
163
|
-
max-width var(--cd-layout-motion-duration) var(--cd-layout-motion-ease);
|
|
164
|
-
}
|
|
165
|
-
.cd-layout-sider--left {
|
|
166
|
-
border-inline-end: var(--cd-layout-sider-border);
|
|
167
|
-
}
|
|
168
|
-
.cd-layout-sider--right {
|
|
169
|
-
border-inline-start: var(--cd-layout-sider-border);
|
|
170
|
-
}
|
|
171
|
-
.cd-layout-sider__children {
|
|
172
|
-
flex: 1;
|
|
173
|
-
min-height: 0;
|
|
174
|
-
overflow: hidden;
|
|
175
|
-
}
|
|
176
|
-
.cd-layout-sider__trigger {
|
|
177
|
-
display: flex;
|
|
178
|
-
flex: 0 0 auto;
|
|
179
|
-
align-items: center;
|
|
180
|
-
justify-content: center;
|
|
181
|
-
height: var(--cd-layout-header-height);
|
|
182
|
-
padding: 0;
|
|
183
|
-
border: none;
|
|
184
|
-
background: var(--cd-layout-sider-trigger-bg);
|
|
185
|
-
color: var(--cd-layout-sider-trigger-color);
|
|
186
|
-
cursor: pointer;
|
|
187
|
-
transition: background-color var(--cd-layout-motion-duration) var(--cd-layout-motion-ease);
|
|
188
|
-
}
|
|
189
|
-
.cd-layout-sider__trigger:hover {
|
|
190
|
-
background: var(--cd-layout-sider-trigger-hover-bg);
|
|
191
|
-
}
|
|
192
|
-
.cd-layout-sider__trigger:focus-visible {
|
|
193
|
-
outline: none;
|
|
194
|
-
box-shadow: var(--cd-focus-ring);
|
|
195
|
-
}
|
|
196
|
-
.cd-layout-sider__arrow {
|
|
197
|
-
display: inline-flex;
|
|
198
|
-
font-size: var(--cd-font-size-3);
|
|
199
|
-
line-height: 1;
|
|
200
|
-
}
|
|
201
|
-
@media (prefers-reduced-motion: reduce) {
|
|
202
|
-
.cd-layout-sider,
|
|
203
|
-
.cd-layout-sider__trigger {
|
|
204
|
-
transition: none;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
</style>
|
package/src/layout/index.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import LayoutRoot from './Layout.svelte';
|
|
2
|
-
import Header from './Header.svelte';
|
|
3
|
-
import Footer from './Footer.svelte';
|
|
4
|
-
import Content from './Content.svelte';
|
|
5
|
-
import Sider from './Sider.svelte';
|
|
6
|
-
|
|
7
|
-
/** Named exports (also usable directly). */
|
|
8
|
-
export {
|
|
9
|
-
Header as LayoutHeader,
|
|
10
|
-
Footer as LayoutFooter,
|
|
11
|
-
Content as LayoutContent,
|
|
12
|
-
Sider as LayoutSider,
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Aggregated namespace export: enables <Layout.Header /> etc.
|
|
17
|
-
* Explicit type annotation avoids leaking component Props type errors.
|
|
18
|
-
*/
|
|
19
|
-
export const Layout: typeof LayoutRoot & {
|
|
20
|
-
Header: typeof Header;
|
|
21
|
-
Footer: typeof Footer;
|
|
22
|
-
Content: typeof Content;
|
|
23
|
-
Sider: typeof Sider;
|
|
24
|
-
} = Object.assign(LayoutRoot, { Header, Footer, Content, Sider });
|
|
25
|
-
|
|
26
|
-
export { meta as layoutMeta } from './meta.js';
|
package/src/layout/meta.ts
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Machine-readable component metadata for AI/docs consumption.
|
|
3
|
-
* Aggregated metadata for the Layout family (root + Header/Sider/Content/Footer).
|
|
4
|
-
*/
|
|
5
|
-
export const meta = {
|
|
6
|
-
name: 'Layout',
|
|
7
|
-
category: 'basic',
|
|
8
|
-
description: '页面级布局骨架:Layout 根容器 + Header / Sider / Content / Footer 子组件。',
|
|
9
|
-
subComponents: [
|
|
10
|
-
{
|
|
11
|
-
name: 'Layout',
|
|
12
|
-
element: 'section',
|
|
13
|
-
props: [
|
|
14
|
-
{
|
|
15
|
-
name: 'hasSider',
|
|
16
|
-
type: 'boolean',
|
|
17
|
-
default: 'undefined',
|
|
18
|
-
desc: '显式声明含侧边栏→row 方向;不传则由 Sider 挂载时自动检测',
|
|
19
|
-
},
|
|
20
|
-
{ name: 'class', type: 'string', default: "''" },
|
|
21
|
-
],
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: 'Layout.Header',
|
|
25
|
-
element: 'header',
|
|
26
|
-
props: [
|
|
27
|
-
{ name: 'sticky', type: 'boolean', default: 'false', desc: 'position:sticky top:0' },
|
|
28
|
-
{ name: 'height', type: 'string|number', default: 'undefined', desc: 'number→px,覆盖 token 高度' },
|
|
29
|
-
{ name: 'class', type: 'string', default: "''" },
|
|
30
|
-
],
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
name: 'Layout.Footer',
|
|
34
|
-
element: 'footer',
|
|
35
|
-
props: [
|
|
36
|
-
{ name: 'sticky', type: 'boolean', default: 'false', desc: 'position:sticky bottom:0' },
|
|
37
|
-
{ name: 'height', type: 'string|number', default: 'undefined' },
|
|
38
|
-
{ name: 'class', type: 'string', default: "''" },
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
name: 'Layout.Content',
|
|
43
|
-
element: 'main',
|
|
44
|
-
props: [
|
|
45
|
-
{
|
|
46
|
-
name: 'padding',
|
|
47
|
-
type: 'string|number|boolean',
|
|
48
|
-
default: 'false',
|
|
49
|
-
desc: 'true→token padding;number→px;string→原样;false→0',
|
|
50
|
-
},
|
|
51
|
-
{ name: 'class', type: 'string', default: "''" },
|
|
52
|
-
],
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
name: 'Layout.Sider',
|
|
56
|
-
element: 'aside',
|
|
57
|
-
props: [
|
|
58
|
-
{ name: 'collapsed', type: 'boolean', default: 'undefined', desc: '受控收起状态' },
|
|
59
|
-
{ name: 'defaultCollapsed', type: 'boolean', default: 'false' },
|
|
60
|
-
{ name: 'collapsible', type: 'boolean', default: 'false', desc: 'true→渲染默认触发器' },
|
|
61
|
-
{ name: 'width', type: 'string|number', default: '200', desc: 'number→px' },
|
|
62
|
-
{ name: 'collapsedWidth', type: 'string|number', default: '60', desc: '0 时收起隐藏内容' },
|
|
63
|
-
{ name: 'breakpoint', type: "'xs'|'sm'|'md'|'lg'|'xl'|'xxl'", default: 'undefined', desc: '低于断点自动收起' },
|
|
64
|
-
{ name: 'reverseArrow', type: 'boolean', default: 'false', desc: '反转触发器箭头方向' },
|
|
65
|
-
{ name: 'placement', type: "'left'|'right'", default: "'left'" },
|
|
66
|
-
{ name: 'class', type: 'string', default: "''" },
|
|
67
|
-
{ name: 'onCollapse', type: "(collapsed, trigger:'click'|'breakpoint')=>void", default: 'undefined' },
|
|
68
|
-
{ name: 'trigger', type: 'Snippet<[{collapsed,toggle}]>', default: 'undefined', desc: '自定义触发器' },
|
|
69
|
-
],
|
|
70
|
-
},
|
|
71
|
-
],
|
|
72
|
-
events: [
|
|
73
|
-
{ name: 'onCollapse', desc: 'Sider 收起状态变化,第二参数区分 click / breakpoint 触发来源' },
|
|
74
|
-
],
|
|
75
|
-
slots: [
|
|
76
|
-
{ name: 'children', desc: '各子组件内容' },
|
|
77
|
-
{ name: 'trigger', desc: 'Sider 自定义触发器,接收 {collapsed, toggle}' },
|
|
78
|
-
],
|
|
79
|
-
a11y: {
|
|
80
|
-
hasRole: false,
|
|
81
|
-
focusable: false,
|
|
82
|
-
sider: 'Sider 触发器为原生 button,含 aria-expanded / aria-controls / aria-label;collapsedWidth=0 时内容 aria-hidden',
|
|
83
|
-
note: 'reduced-motion 下移除 Sider 过渡',
|
|
84
|
-
},
|
|
85
|
-
tokens: [
|
|
86
|
-
'--cd-layout-bg',
|
|
87
|
-
'--cd-layout-header-bg',
|
|
88
|
-
'--cd-layout-header-height',
|
|
89
|
-
'--cd-layout-header-z',
|
|
90
|
-
'--cd-layout-footer-bg',
|
|
91
|
-
'--cd-layout-footer-color',
|
|
92
|
-
'--cd-layout-content-bg',
|
|
93
|
-
'--cd-layout-content-padding',
|
|
94
|
-
'--cd-layout-sider-bg',
|
|
95
|
-
'--cd-layout-sider-width',
|
|
96
|
-
'--cd-layout-sider-collapsed-width',
|
|
97
|
-
'--cd-layout-sider-border',
|
|
98
|
-
'--cd-layout-sider-trigger-bg',
|
|
99
|
-
'--cd-layout-sider-trigger-color',
|
|
100
|
-
'--cd-layout-sider-trigger-hover-bg',
|
|
101
|
-
'--cd-layout-motion-duration',
|
|
102
|
-
'--cd-layout-motion-ease',
|
|
103
|
-
],
|
|
104
|
-
aiHints: [
|
|
105
|
-
'SSR/首屏含侧边栏时显式传 hasSider,避免 column→row 闪动。',
|
|
106
|
-
'Sider 受控用 collapsed + onCollapse;非受控用 defaultCollapsed。',
|
|
107
|
-
'需要响应式自动收起时传 breakpoint。',
|
|
108
|
-
'Layout.Header / Layout.Sider 等命名空间用法与具名 LayoutHeader 等价。',
|
|
109
|
-
],
|
|
110
|
-
examples: [
|
|
111
|
-
{
|
|
112
|
-
title: '经典后台布局',
|
|
113
|
-
code: '<Layout hasSider><Layout.Sider collapsible /><Layout><Layout.Header /><Layout.Content padding>内容</Layout.Content><Layout.Footer>底部</Layout.Footer></Layout></Layout>',
|
|
114
|
-
},
|
|
115
|
-
],
|
|
116
|
-
} as const;
|