@qw-ui/core 0.3.0-next.4 → 0.3.0-next.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -37
- package/dist/action-sheet/action-sheet.d.ts +110 -0
- package/dist/action-sheet/index.d.ts +2 -0
- package/dist/action-sheet/index.js +2 -0
- package/dist/action-sheet-Cvcr1S_m.js +183 -0
- package/dist/action-sheet-Cvcr1S_m.js.map +1 -0
- package/dist/area-picker/area-picker.d.ts +113 -0
- package/dist/area-picker/index.d.ts +1 -0
- package/dist/area-picker/index.js +348 -0
- package/dist/area-picker/index.js.map +1 -0
- package/dist/aria-description-CimD2M_C.js +13 -0
- package/dist/aria-description-CimD2M_C.js.map +1 -0
- package/dist/aria-description.d.ts +2 -0
- package/dist/avatar/avatar-load.d.ts +76 -0
- package/dist/avatar/avatar.d.ts +22 -5
- package/dist/avatar/index.d.ts +1 -0
- package/dist/avatar/index.js +57 -18
- package/dist/avatar/index.js.map +1 -1
- package/dist/avatar-load-w9dq05oV.js +139 -0
- package/dist/avatar-load-w9dq05oV.js.map +1 -0
- package/dist/back-top/back-top.d.ts +77 -0
- package/dist/back-top/index.d.ts +1 -0
- package/dist/back-top/index.js +189 -0
- package/dist/back-top/index.js.map +1 -0
- package/dist/badge/badge.d.ts +85 -0
- package/dist/badge/index.d.ts +1 -0
- package/dist/badge/index.js +88 -0
- package/dist/badge/index.js.map +1 -0
- package/dist/button/button.d.ts +13 -0
- package/dist/button/index.js +3 -5
- package/dist/button/index.js.map +1 -1
- package/dist/calendar/calendar.d.ts +100 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.js +2 -0
- package/dist/calendar-CmpK3stz.js +363 -0
- package/dist/calendar-CmpK3stz.js.map +1 -0
- package/dist/card/card.d.ts +68 -0
- package/dist/card/index.d.ts +2 -0
- package/dist/card/index.js +2 -0
- package/dist/card-DRtWa6Cr.js +107 -0
- package/dist/card-DRtWa6Cr.js.map +1 -0
- package/dist/cascader/cascader.d.ts +115 -0
- package/dist/cascader/index.d.ts +1 -0
- package/dist/cascader/index.js +2 -0
- package/dist/cascader-D-xMjs7P.js +333 -0
- package/dist/cascader-D-xMjs7P.js.map +1 -0
- package/dist/cell/cell.d.ts +41 -0
- package/dist/cell/index.d.ts +1 -0
- package/dist/cell/index.js +43 -0
- package/dist/cell/index.js.map +1 -0
- package/dist/check-list/check-list.d.ts +78 -0
- package/dist/check-list/index.d.ts +2 -0
- package/dist/check-list/index.js +2 -0
- package/dist/check-list-BvZHQt5w.js +60 -0
- package/dist/check-list-BvZHQt5w.js.map +1 -0
- package/dist/checkbox/checkbox.d.ts +59 -0
- package/dist/checkbox/index.d.ts +2 -0
- package/dist/checkbox/index.js +2 -0
- package/dist/checkbox-BlndJrz5.js +127 -0
- package/dist/checkbox-BlndJrz5.js.map +1 -0
- package/dist/checkbox-group/checkbox-group.d.ts +86 -0
- package/dist/checkbox-group/index.d.ts +3 -0
- package/dist/checkbox-group/index.js +2 -0
- package/dist/checkbox-group-gGfsTv-e.js +223 -0
- package/dist/checkbox-group-gGfsTv-e.js.map +1 -0
- package/dist/choice-group-C4c9m0qe.js +373 -0
- package/dist/choice-group-C4c9m0qe.js.map +1 -0
- package/dist/circle/circle.d.ts +97 -0
- package/dist/circle/index.d.ts +1 -0
- package/dist/circle/index.js +119 -0
- package/dist/circle/index.js.map +1 -0
- package/dist/collapse/collapse.d.ts +98 -0
- package/dist/collapse/index.d.ts +2 -0
- package/dist/collapse/index.js +2 -0
- package/dist/collapse-B969h7-H.js +226 -0
- package/dist/collapse-B969h7-H.js.map +1 -0
- package/dist/countdown/countdown.d.ts +114 -0
- package/dist/countdown/index.d.ts +1 -0
- package/dist/countdown/index.js +309 -0
- package/dist/countdown/index.js.map +1 -0
- package/dist/date-picker/date-picker.d.ts +168 -0
- package/dist/date-picker/index.d.ts +1 -0
- package/dist/date-picker/index.js +401 -0
- package/dist/date-picker/index.js.map +1 -0
- package/dist/descriptions/descriptions.d.ts +69 -0
- package/dist/descriptions/index.d.ts +1 -0
- package/dist/descriptions/index.js +86 -0
- package/dist/descriptions/index.js.map +1 -0
- package/dist/dialog/dialog.d.ts +61 -43
- package/dist/dialog/index.js +73 -19
- package/dist/dialog/index.js.map +1 -1
- package/dist/divider/divider.d.ts +18 -2
- package/dist/divider/index.js +20 -2
- package/dist/divider/index.js.map +1 -1
- package/dist/dropdown/dropdown.d.ts +172 -0
- package/dist/dropdown/index.d.ts +2 -0
- package/dist/dropdown/index.js +467 -0
- package/dist/dropdown/index.js.map +1 -0
- package/dist/ellipsis/ellipsis-layout.d.ts +34 -0
- package/dist/ellipsis/ellipsis.d.ts +88 -0
- package/dist/ellipsis/index.d.ts +2 -0
- package/dist/ellipsis/index.js +320 -0
- package/dist/ellipsis/index.js.map +1 -0
- package/dist/empty/empty-illustration.d.ts +3 -0
- package/dist/empty/empty.d.ts +43 -1
- package/dist/empty/index.js +2 -21
- package/dist/empty-CAgyvhUI.js +166 -0
- package/dist/empty-CAgyvhUI.js.map +1 -0
- package/dist/field/field.d.ts +95 -0
- package/dist/field/index.d.ts +2 -0
- package/dist/field/index.js +2 -0
- package/dist/field-DMHGIMZF.js +241 -0
- package/dist/field-DMHGIMZF.js.map +1 -0
- package/dist/floating-bubble/floating-bubble.d.ts +116 -0
- package/dist/floating-bubble/index.d.ts +1 -0
- package/dist/floating-bubble/index.js +333 -0
- package/dist/floating-bubble/index.js.map +1 -0
- package/dist/floating-panel/floating-panel.d.ts +80 -0
- package/dist/floating-panel/index.d.ts +2 -0
- package/dist/floating-panel/index.js +2 -0
- package/dist/floating-panel-Cbm5njBJ.js +363 -0
- package/dist/floating-panel-Cbm5njBJ.js.map +1 -0
- package/dist/footer/footer.d.ts +94 -0
- package/dist/footer/index.d.ts +1 -0
- package/dist/footer/index.js +154 -0
- package/dist/footer/index.js.map +1 -0
- package/dist/form/connect.d.ts +6 -0
- package/dist/form/form.d.ts +100 -0
- package/dist/form/ids.d.ts +14 -0
- package/dist/form/index.d.ts +13 -0
- package/dist/form/index.js +3 -0
- package/dist/form/methods.d.ts +5 -0
- package/dist/form/model.d.ts +24 -0
- package/dist/form/native.d.ts +25 -0
- package/dist/form/rules.d.ts +40 -0
- package/dist/form/ssr.d.ts +7 -0
- package/dist/form/types.d.ts +150 -0
- package/dist/form-BAGkIEMY.js +1354 -0
- package/dist/form-BAGkIEMY.js.map +1 -0
- package/dist/format-BDUY0C_c.js +89 -0
- package/dist/format-BDUY0C_c.js.map +1 -0
- package/dist/gesture-_SRHIvBm.js +30 -0
- package/dist/gesture-_SRHIvBm.js.map +1 -0
- package/dist/grid/grid-item.d.ts +22 -0
- package/dist/grid/grid.d.ts +42 -0
- package/dist/grid/index.d.ts +2 -0
- package/dist/grid/index.js +73 -0
- package/dist/grid/index.js.map +1 -0
- package/dist/icon/icon.d.ts +37 -1
- package/dist/icon/identity.d.ts +3 -0
- package/dist/icon/index.js +2 -20
- package/dist/icon-Cgdbnk1u.js +77 -0
- package/dist/icon-Cgdbnk1u.js.map +1 -0
- package/dist/image/image-load.d.ts +24 -0
- package/dist/image/image.d.ts +45 -8
- package/dist/image/index.d.ts +1 -0
- package/dist/image/index.js +116 -14
- package/dist/image/index.js.map +1 -1
- package/dist/image-preview/image-preview.d.ts +124 -0
- package/dist/image-preview/index.d.ts +1 -0
- package/dist/image-preview/index.js +450 -0
- package/dist/image-preview/index.js.map +1 -0
- package/dist/index-bar/index-bar.d.ts +121 -0
- package/dist/index-bar/index.d.ts +1 -0
- package/dist/index-bar/index.js +386 -0
- package/dist/index-bar/index.js.map +1 -0
- package/dist/index.d.ts +115 -10
- package/dist/index.js +151 -11
- package/dist/index.js.map +1 -0
- package/dist/infinite-scroll/index.d.ts +1 -0
- package/dist/infinite-scroll/index.js +248 -0
- package/dist/infinite-scroll/index.js.map +1 -0
- package/dist/infinite-scroll/infinite-scroll.d.ts +95 -0
- package/dist/input/index.js +181 -22
- package/dist/input/index.js.map +1 -1
- package/dist/input/input.d.ts +44 -1
- package/dist/layer-IpFrl5--.js +414 -0
- package/dist/layer-IpFrl5--.js.map +1 -0
- package/dist/layout-BRSqi4AQ.js +43 -0
- package/dist/layout-BRSqi4AQ.js.map +1 -0
- package/dist/layout.d.ts +13 -0
- package/dist/list/index.d.ts +2 -0
- package/dist/list/index.js +2 -0
- package/dist/list/list.d.ts +30 -0
- package/dist/list-6-iz-Irh.js +28 -0
- package/dist/list-6-iz-Irh.js.map +1 -0
- package/dist/loading/index.js +45 -2
- package/dist/loading/index.js.map +1 -1
- package/dist/loading/loading.d.ts +45 -2
- package/dist/modal-dialog-machine-CF9_z3Dm.js +487 -0
- package/dist/modal-dialog-machine-CF9_z3Dm.js.map +1 -0
- package/dist/modal-dialog-machine.d.ts +21 -0
- package/dist/modal-dismissable-lifetime.d.ts +21 -0
- package/dist/modal-registry.d.ts +24 -0
- package/dist/modal-render-hydration.d.ts +35 -0
- package/dist/modal-render-runtime.d.ts +19 -0
- package/dist/modal-render-scope.d.ts +63 -0
- package/dist/nav-bar/index.d.ts +1 -0
- package/dist/nav-bar/index.js +115 -0
- package/dist/nav-bar/index.js.map +1 -0
- package/dist/nav-bar/nav-bar.d.ts +76 -0
- package/dist/notice-bar/index.d.ts +2 -0
- package/dist/notice-bar/index.js +2 -0
- package/dist/notice-bar/notice-bar.d.ts +103 -0
- package/dist/notice-bar-DMpwLvRb.js +231 -0
- package/dist/notice-bar-DMpwLvRb.js.map +1 -0
- package/dist/notify/index.d.ts +1 -0
- package/dist/notify/index.js +251 -0
- package/dist/notify/index.js.map +1 -0
- package/dist/notify/notify.d.ts +123 -0
- package/dist/number-keyboard/index.d.ts +1 -0
- package/dist/number-keyboard/index.js +333 -0
- package/dist/number-keyboard/index.js.map +1 -0
- package/dist/number-keyboard/number-keyboard.d.ts +141 -0
- package/dist/overlay-panel/index.d.ts +2 -0
- package/dist/overlay-panel/index.js +2 -0
- package/dist/overlay-panel/overlay-panel.d.ts +20 -0
- package/dist/overlay-panel-Z_qdKeBj.js +26 -0
- package/dist/overlay-panel-Z_qdKeBj.js.map +1 -0
- package/dist/page-indicator/index.d.ts +1 -0
- package/dist/page-indicator/index.js +138 -0
- package/dist/page-indicator/index.js.map +1 -0
- package/dist/page-indicator/page-indicator.d.ts +93 -0
- package/dist/pagination/index.d.ts +1 -0
- package/dist/pagination/index.js +198 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/pagination/pagination.d.ts +125 -0
- package/dist/password-input/index.d.ts +1 -0
- package/dist/password-input/index.js +317 -0
- package/dist/password-input/index.js.map +1 -0
- package/dist/password-input/password-input.d.ts +144 -0
- package/dist/picker/index.d.ts +8 -0
- package/dist/picker/index.js +2 -0
- package/dist/picker/picker-machine.d.ts +80 -0
- package/dist/picker/picker.d.ts +121 -0
- package/dist/picker/platform.d.ts +84 -0
- package/dist/picker/selection-connect.d.ts +90 -0
- package/dist/picker/selection-model.d.ts +211 -0
- package/dist/picker-BykFntQN.js +1675 -0
- package/dist/picker-BykFntQN.js.map +1 -0
- package/dist/popover/index.d.ts +3 -0
- package/dist/popover/index.js +253 -0
- package/dist/popover/index.js.map +1 -0
- package/dist/popover/layer.d.ts +44 -0
- package/dist/popover/popover.d.ts +104 -0
- package/dist/popover/positioning.d.ts +132 -0
- package/dist/popup/index.d.ts +2 -0
- package/dist/popup/index.js +2 -0
- package/dist/popup/popup.d.ts +60 -0
- package/dist/popup-z5d8IYCt.js +576 -0
- package/dist/popup-z5d8IYCt.js.map +1 -0
- package/dist/portal-BHCNTWhg.js +78 -0
- package/dist/portal-BHCNTWhg.js.map +1 -0
- package/dist/portal.d.ts +61 -0
- package/dist/price/format.d.ts +19 -0
- package/dist/price/index.d.ts +1 -0
- package/dist/price/index.js +154 -0
- package/dist/price/index.js.map +1 -0
- package/dist/price/price.d.ts +88 -0
- package/dist/progress/index.d.ts +1 -0
- package/dist/progress/index.js +2 -0
- package/dist/progress/progress.d.ts +32 -0
- package/dist/progress-f3iYEfdA.js +37 -0
- package/dist/progress-f3iYEfdA.js.map +1 -0
- package/dist/pull-refresh/index.d.ts +1 -0
- package/dist/pull-refresh/index.js +414 -0
- package/dist/pull-refresh/index.js.map +1 -0
- package/dist/pull-refresh/pull-refresh.d.ts +118 -0
- package/dist/radio-group/index.d.ts +3 -0
- package/dist/radio-group/index.js +2 -0
- package/dist/radio-group/radio-group.d.ts +78 -0
- package/dist/radio-group-BOIMuqnS.js +230 -0
- package/dist/radio-group-BOIMuqnS.js.map +1 -0
- package/dist/rate/index.d.ts +1 -0
- package/dist/rate/index.js +2 -0
- package/dist/rate/rate-form.d.ts +28 -0
- package/dist/rate/rate.d.ts +144 -0
- package/dist/rate-5XsU2QkY.js +631 -0
- package/dist/rate-5XsU2QkY.js.map +1 -0
- package/dist/reorder/index.d.ts +1 -0
- package/dist/reorder/index.js +720 -0
- package/dist/reorder/index.js.map +1 -0
- package/dist/reorder/reorder.d.ts +190 -0
- package/dist/result/index.d.ts +1 -0
- package/dist/result/index.js +123 -0
- package/dist/result/index.js.map +1 -0
- package/dist/result/result.d.ts +88 -0
- package/dist/safe-area/index.d.ts +1 -0
- package/dist/safe-area/index.js +42 -0
- package/dist/safe-area/index.js.map +1 -0
- package/dist/safe-area/safe-area.d.ts +28 -0
- package/dist/search-bar/index.js +4 -2
- package/dist/search-bar/index.js.map +1 -1
- package/dist/search-bar/search-bar.d.ts +6 -0
- package/dist/segmented/index.d.ts +2 -0
- package/dist/segmented/index.js +2 -0
- package/dist/segmented/segmented.d.ts +127 -0
- package/dist/segmented-BaU38_L4.js +367 -0
- package/dist/segmented-BaU38_L4.js.map +1 -0
- package/dist/selection-form-BOM_odUk.js +88 -0
- package/dist/selection-form-BOM_odUk.js.map +1 -0
- package/dist/selection-form.d.ts +27 -0
- package/dist/selection-ivXqO1eu.js +55 -0
- package/dist/selection-ivXqO1eu.js.map +1 -0
- package/dist/selection.d.ts +29 -0
- package/dist/selector/choice-group.d.ts +114 -0
- package/dist/selector/index.d.ts +2 -0
- package/dist/selector/index.js +2 -0
- package/dist/selector/selector.d.ts +90 -0
- package/dist/selector-BU2MMJ4N.js +93 -0
- package/dist/selector-BU2MMJ4N.js.map +1 -0
- package/dist/share-sheet/index.d.ts +1 -0
- package/dist/share-sheet/index.js +138 -0
- package/dist/share-sheet/index.js.map +1 -0
- package/dist/share-sheet/share-sheet.d.ts +139 -0
- package/dist/side-nav/index.d.ts +1 -0
- package/dist/side-nav/index.js +99 -0
- package/dist/side-nav/index.js.map +1 -0
- package/dist/side-nav/side-nav.d.ts +94 -0
- package/dist/skeleton/index.js +51 -2
- package/dist/skeleton/index.js.map +1 -1
- package/dist/skeleton/skeleton.d.ts +34 -3
- package/dist/slider/index.d.ts +1 -0
- package/dist/slider/index.js +482 -0
- package/dist/slider/index.js.map +1 -0
- package/dist/slider/slider.d.ts +174 -0
- package/dist/space/index.d.ts +1 -0
- package/dist/space/index.js +52 -0
- package/dist/space/index.js.map +1 -0
- package/dist/space/space.d.ts +46 -0
- package/dist/statistic/index.d.ts +1 -0
- package/dist/statistic/index.js +152 -0
- package/dist/statistic/index.js.map +1 -0
- package/dist/statistic/statistic.d.ts +101 -0
- package/dist/stepper/index.d.ts +1 -0
- package/dist/stepper/index.js +172 -0
- package/dist/stepper/index.js.map +1 -0
- package/dist/stepper/stepper.d.ts +161 -0
- package/dist/steps/index.d.ts +1 -0
- package/dist/steps/index.js +72 -0
- package/dist/steps/index.js.map +1 -0
- package/dist/steps/steps.d.ts +67 -0
- package/dist/sticky/index.d.ts +1 -0
- package/dist/sticky/index.js +145 -0
- package/dist/sticky/index.js.map +1 -0
- package/dist/sticky/sticky.d.ts +70 -0
- package/dist/swipe-action/index.d.ts +1 -0
- package/dist/swipe-action/index.js +417 -0
- package/dist/swipe-action/index.js.map +1 -0
- package/dist/swipe-action/swipe-action.d.ts +148 -0
- package/dist/swiper/gesture.d.ts +32 -0
- package/dist/swiper/index.d.ts +1 -0
- package/dist/swiper/index.js +2 -0
- package/dist/swiper/swiper.d.ts +177 -0
- package/dist/swiper-BKivDkHp.js +550 -0
- package/dist/swiper-BKivDkHp.js.map +1 -0
- package/dist/switch/index.d.ts +1 -0
- package/dist/switch/index.js +168 -0
- package/dist/switch/index.js.map +1 -0
- package/dist/switch/switch.d.ts +142 -0
- package/dist/tabbar/index.d.ts +1 -0
- package/dist/tabbar/index.js +95 -0
- package/dist/tabbar/index.js.map +1 -0
- package/dist/tabbar/tabbar.d.ts +119 -0
- package/dist/tabs/index.js +22 -1
- package/dist/tabs/index.js.map +1 -1
- package/dist/tabs/tabs.d.ts +12 -8
- package/dist/tag/index.js +123 -2
- package/dist/tag/index.js.map +1 -1
- package/dist/tag/tag.d.ts +67 -1
- package/dist/textarea/index.d.ts +2 -0
- package/dist/textarea/index.js +2 -242
- package/dist/textarea/platform.d.ts +22 -0
- package/dist/textarea/textarea.d.ts +169 -46
- package/dist/textarea-qbnruDUG.js +775 -0
- package/dist/textarea-qbnruDUG.js.map +1 -0
- package/dist/time-picker/index.d.ts +1 -0
- package/dist/time-picker/index.js +228 -0
- package/dist/time-picker/index.js.map +1 -0
- package/dist/time-picker/time-picker.d.ts +83 -0
- package/dist/timeline/index.d.ts +1 -0
- package/dist/timeline/index.js +131 -0
- package/dist/timeline/index.js.map +1 -0
- package/dist/timeline/timeline.d.ts +79 -0
- package/dist/toast/index.js +47 -4
- package/dist/toast/index.js.map +1 -1
- package/dist/toast/toast.d.ts +26 -3
- package/dist/top-bar/index.js +16 -2
- package/dist/top-bar/index.js.map +1 -1
- package/dist/top-bar/top-bar.d.ts +13 -2
- package/dist/tree-select/index.d.ts +1 -0
- package/dist/tree-select/index.js +512 -0
- package/dist/tree-select/index.js.map +1 -0
- package/dist/tree-select/tree-select.d.ts +215 -0
- package/dist/typography/index.d.ts +1 -0
- package/dist/typography/index.js +82 -0
- package/dist/typography/index.js.map +1 -0
- package/dist/typography/typography.d.ts +54 -0
- package/dist/upload/index.d.ts +1 -0
- package/dist/upload/index.js +458 -0
- package/dist/upload/index.js.map +1 -0
- package/dist/upload/upload.d.ts +172 -0
- package/dist/virtual-list/index.d.ts +1 -0
- package/dist/virtual-list/index.js +445 -0
- package/dist/virtual-list/index.js.map +1 -0
- package/dist/virtual-list/virtual-list.d.ts +160 -0
- package/dist/visual-manifest.d.ts +27 -0
- package/dist/watermark/index.d.ts +1 -0
- package/dist/watermark/index.js +260 -0
- package/dist/watermark/index.js.map +1 -0
- package/dist/watermark/watermark.d.ts +106 -0
- package/package.json +417 -44
- package/dist/empty/index.js.map +0 -1
- package/dist/icon/index.js.map +0 -1
- package/dist/textarea/index.js.map +0 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
//#region src/side-nav/side-nav.ts
|
|
2
|
+
/**
|
|
3
|
+
* SideNav 的跨框架行为契约。
|
|
4
|
+
*
|
|
5
|
+
* SideNav 是受控单选的 Prototype A 侧导航列:纵向堆叠的导航项(可选分组
|
|
6
|
+
* 标题),多用于 H5 浮层分类切换。选中项白底加粗,组内直接相邻项获得
|
|
7
|
+
* 16px 邻接圆角。这里仅归一化公开 props、推导选中/邻接视觉态并收口
|
|
8
|
+
* data/aria 属性,React/Vue 适配器不得复制归一化、可见性或推导规则。
|
|
9
|
+
*/
|
|
10
|
+
const SIDENAV_PARTS = [
|
|
11
|
+
"root",
|
|
12
|
+
"group-label",
|
|
13
|
+
"item"
|
|
14
|
+
];
|
|
15
|
+
function resolveItem(item, selectedValue) {
|
|
16
|
+
return {
|
|
17
|
+
value: item.value,
|
|
18
|
+
label: item.label,
|
|
19
|
+
disabled: item.disabled ?? false,
|
|
20
|
+
selected: selectedValue !== void 0 && item.value === selectedValue
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** 组内邻接推导:仅与选中项索引差 1 的项获得 adjacent;分组标题为边界。 */
|
|
24
|
+
function attachAdjacency(items) {
|
|
25
|
+
const selectedIndex = items.findIndex((item) => item.selected);
|
|
26
|
+
if (selectedIndex < 0) return;
|
|
27
|
+
for (const item of items) item.adjacent = null;
|
|
28
|
+
if (selectedIndex > 0) {
|
|
29
|
+
const prev = items[selectedIndex - 1];
|
|
30
|
+
if (prev) prev.adjacent = "prev";
|
|
31
|
+
}
|
|
32
|
+
if (selectedIndex < items.length - 1) {
|
|
33
|
+
const next = items[selectedIndex + 1];
|
|
34
|
+
if (next) next.adjacent = "next";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 将公开输入归一化为唯一的跨框架状态。
|
|
39
|
+
* items 非空时作为最前的无标题隐式组;空组(无项)不产生渲染;
|
|
40
|
+
* 全部为空 → visible=false。
|
|
41
|
+
*/
|
|
42
|
+
function resolveSideNavState(props = {}) {
|
|
43
|
+
const selectedValue = props.value;
|
|
44
|
+
const rawGroups = [];
|
|
45
|
+
if ((props.items ?? []).length > 0) rawGroups.push({ items: props.items ?? [] });
|
|
46
|
+
for (const group of props.groups ?? []) rawGroups.push(group);
|
|
47
|
+
const groups = [];
|
|
48
|
+
let count = 0;
|
|
49
|
+
for (const raw of rawGroups) {
|
|
50
|
+
if (raw.items.length === 0) continue;
|
|
51
|
+
const items = raw.items.map((item) => ({
|
|
52
|
+
...resolveItem(item, selectedValue),
|
|
53
|
+
adjacent: null
|
|
54
|
+
}));
|
|
55
|
+
attachAdjacency(items);
|
|
56
|
+
groups.push({
|
|
57
|
+
...raw.title !== void 0 ? { title: raw.title } : {},
|
|
58
|
+
items
|
|
59
|
+
});
|
|
60
|
+
count += items.length;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
visible: count > 0,
|
|
64
|
+
count,
|
|
65
|
+
...selectedValue !== void 0 ? { selectedValue } : {},
|
|
66
|
+
groups
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** 将归一化结果转成 root 属性。 */
|
|
70
|
+
function getSideNavRootProps(state) {
|
|
71
|
+
return {
|
|
72
|
+
"data-scope": "side-nav",
|
|
73
|
+
"data-part": "root",
|
|
74
|
+
"data-count": String(state.count)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** 分组标题元素属性(无状态入参,纯收口)。 */
|
|
78
|
+
function getSideNavGroupLabelProps() {
|
|
79
|
+
return {
|
|
80
|
+
"data-scope": "side-nav",
|
|
81
|
+
"data-part": "group-label"
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** 将单个归一化导航项转成 button 属性(选中/邻接/禁用收口,适配器不得覆盖)。 */
|
|
85
|
+
function getSideNavItemProps(item) {
|
|
86
|
+
return {
|
|
87
|
+
type: "button",
|
|
88
|
+
"data-scope": "side-nav",
|
|
89
|
+
"data-part": "item",
|
|
90
|
+
"data-state": item.selected ? "selected" : "default",
|
|
91
|
+
...item.selected ? { "aria-current": "true" } : {},
|
|
92
|
+
...item.adjacent !== null ? { "data-adjacent": item.adjacent } : {},
|
|
93
|
+
disabled: item.disabled
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
97
|
+
export { SIDENAV_PARTS, getSideNavGroupLabelProps, getSideNavItemProps, getSideNavRootProps, resolveSideNavState };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/side-nav/side-nav.ts"],"sourcesContent":["/**\n * SideNav 的跨框架行为契约。\n *\n * SideNav 是受控单选的 Prototype A 侧导航列:纵向堆叠的导航项(可选分组\n * 标题),多用于 H5 浮层分类切换。选中项白底加粗,组内直接相邻项获得\n * 16px 邻接圆角。这里仅归一化公开 props、推导选中/邻接视觉态并收口\n * data/aria 属性,React/Vue 适配器不得复制归一化、可见性或推导规则。\n */\n\nexport const SIDENAV_PARTS = [\"root\", \"group-label\", \"item\"] as const;\n\nexport type SideNavPart = (typeof SIDENAV_PARTS)[number];\n\n/** 与选中项直接相邻的方位:prev=上邻项(右下角圆角)、next=下邻项(右上角圆角)。 */\nexport type SideNavItemAdjacent = \"prev\" | \"next\";\n\n/** 单个导航项声明;双栈共享,框架特有的事件通道不进入 Core。 */\nexport interface QwSideNavItemProps {\n /** 唯一标识;受控选中值与 onChange 回传值均用它比对。 */\n value: string;\n /** 纯文本标签,同时作为按钮可访问名。 */\n label: string;\n /** 禁用标记:保留灰底、文字降为 placeholder 语义色,不可激活。 */\n disabled?: boolean;\n}\n\n/** 分组声明;分组标题仅作视觉区隔,不参与选中语义。 */\nexport interface QwSideNavGroupProps {\n /** 分组标题;缺省时该组无标题行。 */\n title?: string;\n /** 该组导航项。 */\n items: readonly QwSideNavItemProps[];\n}\n\n/** 双栈共享的标量 props。 */\nexport interface QwSideNavProps {\n /** 扁平声明;归一化为最前的无标题隐式组。 */\n items?: readonly QwSideNavItemProps[];\n /** 分组声明;追加在隐式组之后。 */\n groups?: readonly QwSideNavGroupProps[];\n /** 受控选中项 value;缺省时全部为默认态。 */\n value?: string;\n /** 项被激活(点击/回车/空格)时回传该项 value;点击已选中项同样触发。 */\n onChange?: (value: string) => void;\n}\n\n/** 逐项归一化结果。 */\nexport interface ResolvedSideNavItemState {\n value: string;\n label: string;\n disabled: boolean;\n /** value 与受控选中值全等。 */\n selected: boolean;\n /** 组内与选中项直接相邻:prev=上邻、next=下邻;否则 null。 */\n adjacent: SideNavItemAdjacent | null;\n}\n\n/** 归一化分组结果。 */\nexport interface ResolvedSideNavGroupState {\n title?: string;\n items: ResolvedSideNavItemState[];\n}\n\n/** 适配器唯一可消费的归一化结果。 */\nexport interface ResolvedSideNavState {\n visible: boolean;\n count: number;\n selectedValue?: string;\n groups: ResolvedSideNavGroupState[];\n}\n\n/** Core 生成、由适配器摊到根元素(原生 nav)的属性。 */\nexport interface SideNavRootProps {\n \"data-scope\": \"side-nav\";\n \"data-part\": \"root\";\n \"data-count\": string;\n}\n\n/** Core 生成、由适配器摊到分组标题元素的属性。 */\nexport interface SideNavGroupLabelProps {\n \"data-scope\": \"side-nav\";\n \"data-part\": \"group-label\";\n}\n\n/** Core 生成、由适配器摊到导航项(原生 button)的属性。 */\nexport interface SideNavItemProps {\n type: \"button\";\n \"data-scope\": \"side-nav\";\n \"data-part\": \"item\";\n \"data-state\": \"selected\" | \"default\";\n \"aria-current\"?: \"true\";\n \"data-adjacent\"?: SideNavItemAdjacent;\n disabled: boolean;\n}\n\nfunction resolveItem(\n item: QwSideNavItemProps,\n selectedValue: string | undefined,\n): Omit<ResolvedSideNavItemState, \"adjacent\"> {\n return {\n value: item.value,\n label: item.label,\n disabled: item.disabled ?? false,\n selected: selectedValue !== undefined && item.value === selectedValue,\n };\n}\n\n/** 组内邻接推导:仅与选中项索引差 1 的项获得 adjacent;分组标题为边界。 */\nfunction attachAdjacency(items: ResolvedSideNavItemState[]): void {\n const selectedIndex = items.findIndex((item) => item.selected);\n if (selectedIndex < 0) return;\n for (const item of items) item.adjacent = null;\n if (selectedIndex > 0) {\n const prev = items[selectedIndex - 1];\n if (prev) prev.adjacent = \"prev\";\n }\n if (selectedIndex < items.length - 1) {\n const next = items[selectedIndex + 1];\n if (next) next.adjacent = \"next\";\n }\n}\n\n/**\n * 将公开输入归一化为唯一的跨框架状态。\n * items 非空时作为最前的无标题隐式组;空组(无项)不产生渲染;\n * 全部为空 → visible=false。\n */\nexport function resolveSideNavState(props: QwSideNavProps = {}): ResolvedSideNavState {\n const selectedValue = props.value;\n const rawGroups: QwSideNavGroupProps[] = [];\n if ((props.items ?? []).length > 0) rawGroups.push({ items: props.items ?? [] });\n for (const group of props.groups ?? []) rawGroups.push(group);\n\n const groups: ResolvedSideNavGroupState[] = [];\n let count = 0;\n for (const raw of rawGroups) {\n if (raw.items.length === 0) continue;\n const items = raw.items.map((item) => ({\n ...resolveItem(item, selectedValue),\n adjacent: null as SideNavItemAdjacent | null,\n }));\n attachAdjacency(items);\n groups.push({ ...(raw.title !== undefined ? { title: raw.title } : {}), items });\n count += items.length;\n }\n\n return {\n visible: count > 0,\n count,\n ...(selectedValue !== undefined ? { selectedValue } : {}),\n groups,\n };\n}\n\n/** 将归一化结果转成 root 属性。 */\nexport function getSideNavRootProps(state: ResolvedSideNavState): SideNavRootProps {\n return {\n \"data-scope\": \"side-nav\",\n \"data-part\": \"root\",\n \"data-count\": String(state.count),\n };\n}\n\n/** 分组标题元素属性(无状态入参,纯收口)。 */\nexport function getSideNavGroupLabelProps(): SideNavGroupLabelProps {\n return {\n \"data-scope\": \"side-nav\",\n \"data-part\": \"group-label\",\n };\n}\n\n/** 将单个归一化导航项转成 button 属性(选中/邻接/禁用收口,适配器不得覆盖)。 */\nexport function getSideNavItemProps(item: ResolvedSideNavItemState): SideNavItemProps {\n return {\n type: \"button\",\n \"data-scope\": \"side-nav\",\n \"data-part\": \"item\",\n \"data-state\": item.selected ? \"selected\" : \"default\",\n ...(item.selected ? { \"aria-current\": \"true\" as const } : {}),\n ...(item.adjacent !== null ? { \"data-adjacent\": item.adjacent } : {}),\n disabled: item.disabled,\n };\n}\n"],"mappings":";;;;;;;;;AASA,MAAa,gBAAgB;CAAC;CAAQ;CAAe;AAAM;AAsF3D,SAAS,YACP,MACA,eAC4C;CAC5C,OAAO;EACL,OAAO,KAAK;EACZ,OAAO,KAAK;EACZ,UAAU,KAAK,YAAY;EAC3B,UAAU,kBAAkB,KAAA,KAAa,KAAK,UAAU;CAC1D;AACF;;AAGA,SAAS,gBAAgB,OAAyC;CAChE,MAAM,gBAAgB,MAAM,WAAW,SAAS,KAAK,QAAQ;CAC7D,IAAI,gBAAgB,GAAG;CACvB,KAAK,MAAM,QAAQ,OAAO,KAAK,WAAW;CAC1C,IAAI,gBAAgB,GAAG;EACrB,MAAM,OAAO,MAAM,gBAAgB;EACnC,IAAI,MAAM,KAAK,WAAW;CAC5B;CACA,IAAI,gBAAgB,MAAM,SAAS,GAAG;EACpC,MAAM,OAAO,MAAM,gBAAgB;EACnC,IAAI,MAAM,KAAK,WAAW;CAC5B;AACF;;;;;;AAOA,SAAgB,oBAAoB,QAAwB,CAAC,GAAyB;CACpF,MAAM,gBAAgB,MAAM;CAC5B,MAAM,YAAmC,CAAC;CAC1C,KAAK,MAAM,SAAS,CAAC,EAAA,CAAG,SAAS,GAAG,UAAU,KAAK,EAAE,OAAO,MAAM,SAAS,CAAC,EAAE,CAAC;CAC/E,KAAK,MAAM,SAAS,MAAM,UAAU,CAAC,GAAG,UAAU,KAAK,KAAK;CAE5D,MAAM,SAAsC,CAAC;CAC7C,IAAI,QAAQ;CACZ,KAAK,MAAM,OAAO,WAAW;EAC3B,IAAI,IAAI,MAAM,WAAW,GAAG;EAC5B,MAAM,QAAQ,IAAI,MAAM,KAAK,UAAU;GACrC,GAAG,YAAY,MAAM,aAAa;GAClC,UAAU;EACZ,EAAE;EACF,gBAAgB,KAAK;EACrB,OAAO,KAAK;GAAE,GAAI,IAAI,UAAU,KAAA,IAAY,EAAE,OAAO,IAAI,MAAM,IAAI,CAAC;GAAI;EAAM,CAAC;EAC/E,SAAS,MAAM;CACjB;CAEA,OAAO;EACL,SAAS,QAAQ;EACjB;EACA,GAAI,kBAAkB,KAAA,IAAY,EAAE,cAAc,IAAI,CAAC;EACvD;CACF;AACF;;AAGA,SAAgB,oBAAoB,OAA+C;CACjF,OAAO;EACL,cAAc;EACd,aAAa;EACb,cAAc,OAAO,MAAM,KAAK;CAClC;AACF;;AAGA,SAAgB,4BAAoD;CAClE,OAAO;EACL,cAAc;EACd,aAAa;CACf;AACF;;AAGA,SAAgB,oBAAoB,MAAkD;CACpF,OAAO;EACL,MAAM;EACN,cAAc;EACd,aAAa;EACb,cAAc,KAAK,WAAW,aAAa;EAC3C,GAAI,KAAK,WAAW,EAAE,gBAAgB,OAAgB,IAAI,CAAC;EAC3D,GAAI,KAAK,aAAa,OAAO,EAAE,iBAAiB,KAAK,SAAS,IAAI,CAAC;EACnE,UAAU,KAAK;CACjB;AACF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SideNav 的跨框架行为契约。
|
|
3
|
+
*
|
|
4
|
+
* SideNav 是受控单选的 Prototype A 侧导航列:纵向堆叠的导航项(可选分组
|
|
5
|
+
* 标题),多用于 H5 浮层分类切换。选中项白底加粗,组内直接相邻项获得
|
|
6
|
+
* 16px 邻接圆角。这里仅归一化公开 props、推导选中/邻接视觉态并收口
|
|
7
|
+
* data/aria 属性,React/Vue 适配器不得复制归一化、可见性或推导规则。
|
|
8
|
+
*/
|
|
9
|
+
export declare const SIDENAV_PARTS: readonly ["root", "group-label", "item"];
|
|
10
|
+
export type SideNavPart = (typeof SIDENAV_PARTS)[number];
|
|
11
|
+
/** 与选中项直接相邻的方位:prev=上邻项(右下角圆角)、next=下邻项(右上角圆角)。 */
|
|
12
|
+
export type SideNavItemAdjacent = "prev" | "next";
|
|
13
|
+
/** 单个导航项声明;双栈共享,框架特有的事件通道不进入 Core。 */
|
|
14
|
+
export interface QwSideNavItemProps {
|
|
15
|
+
/** 唯一标识;受控选中值与 onChange 回传值均用它比对。 */
|
|
16
|
+
value: string;
|
|
17
|
+
/** 纯文本标签,同时作为按钮可访问名。 */
|
|
18
|
+
label: string;
|
|
19
|
+
/** 禁用标记:保留灰底、文字降为 placeholder 语义色,不可激活。 */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** 分组声明;分组标题仅作视觉区隔,不参与选中语义。 */
|
|
23
|
+
export interface QwSideNavGroupProps {
|
|
24
|
+
/** 分组标题;缺省时该组无标题行。 */
|
|
25
|
+
title?: string;
|
|
26
|
+
/** 该组导航项。 */
|
|
27
|
+
items: readonly QwSideNavItemProps[];
|
|
28
|
+
}
|
|
29
|
+
/** 双栈共享的标量 props。 */
|
|
30
|
+
export interface QwSideNavProps {
|
|
31
|
+
/** 扁平声明;归一化为最前的无标题隐式组。 */
|
|
32
|
+
items?: readonly QwSideNavItemProps[];
|
|
33
|
+
/** 分组声明;追加在隐式组之后。 */
|
|
34
|
+
groups?: readonly QwSideNavGroupProps[];
|
|
35
|
+
/** 受控选中项 value;缺省时全部为默认态。 */
|
|
36
|
+
value?: string;
|
|
37
|
+
/** 项被激活(点击/回车/空格)时回传该项 value;点击已选中项同样触发。 */
|
|
38
|
+
onChange?: (value: string) => void;
|
|
39
|
+
}
|
|
40
|
+
/** 逐项归一化结果。 */
|
|
41
|
+
export interface ResolvedSideNavItemState {
|
|
42
|
+
value: string;
|
|
43
|
+
label: string;
|
|
44
|
+
disabled: boolean;
|
|
45
|
+
/** value 与受控选中值全等。 */
|
|
46
|
+
selected: boolean;
|
|
47
|
+
/** 组内与选中项直接相邻:prev=上邻、next=下邻;否则 null。 */
|
|
48
|
+
adjacent: SideNavItemAdjacent | null;
|
|
49
|
+
}
|
|
50
|
+
/** 归一化分组结果。 */
|
|
51
|
+
export interface ResolvedSideNavGroupState {
|
|
52
|
+
title?: string;
|
|
53
|
+
items: ResolvedSideNavItemState[];
|
|
54
|
+
}
|
|
55
|
+
/** 适配器唯一可消费的归一化结果。 */
|
|
56
|
+
export interface ResolvedSideNavState {
|
|
57
|
+
visible: boolean;
|
|
58
|
+
count: number;
|
|
59
|
+
selectedValue?: string;
|
|
60
|
+
groups: ResolvedSideNavGroupState[];
|
|
61
|
+
}
|
|
62
|
+
/** Core 生成、由适配器摊到根元素(原生 nav)的属性。 */
|
|
63
|
+
export interface SideNavRootProps {
|
|
64
|
+
"data-scope": "side-nav";
|
|
65
|
+
"data-part": "root";
|
|
66
|
+
"data-count": string;
|
|
67
|
+
}
|
|
68
|
+
/** Core 生成、由适配器摊到分组标题元素的属性。 */
|
|
69
|
+
export interface SideNavGroupLabelProps {
|
|
70
|
+
"data-scope": "side-nav";
|
|
71
|
+
"data-part": "group-label";
|
|
72
|
+
}
|
|
73
|
+
/** Core 生成、由适配器摊到导航项(原生 button)的属性。 */
|
|
74
|
+
export interface SideNavItemProps {
|
|
75
|
+
type: "button";
|
|
76
|
+
"data-scope": "side-nav";
|
|
77
|
+
"data-part": "item";
|
|
78
|
+
"data-state": "selected" | "default";
|
|
79
|
+
"aria-current"?: "true";
|
|
80
|
+
"data-adjacent"?: SideNavItemAdjacent;
|
|
81
|
+
disabled: boolean;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 将公开输入归一化为唯一的跨框架状态。
|
|
85
|
+
* items 非空时作为最前的无标题隐式组;空组(无项)不产生渲染;
|
|
86
|
+
* 全部为空 → visible=false。
|
|
87
|
+
*/
|
|
88
|
+
export declare function resolveSideNavState(props?: QwSideNavProps): ResolvedSideNavState;
|
|
89
|
+
/** 将归一化结果转成 root 属性。 */
|
|
90
|
+
export declare function getSideNavRootProps(state: ResolvedSideNavState): SideNavRootProps;
|
|
91
|
+
/** 分组标题元素属性(无状态入参,纯收口)。 */
|
|
92
|
+
export declare function getSideNavGroupLabelProps(): SideNavGroupLabelProps;
|
|
93
|
+
/** 将单个归一化导航项转成 button 属性(选中/邻接/禁用收口,适配器不得覆盖)。 */
|
|
94
|
+
export declare function getSideNavItemProps(item: ResolvedSideNavItemState): SideNavItemProps;
|
package/dist/skeleton/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/skeleton/skeleton.ts
|
|
2
2
|
/**
|
|
3
|
-
* Skeleton 契约 — 原型 A(无状态),
|
|
3
|
+
* Skeleton 契约 — 原型 A(无状态),Core 无 machine,承载三栈共享的类型与渲染契约。
|
|
4
4
|
* 渲染契约:`data-scope="skeleton"`,`aria-hidden="true"`;
|
|
5
5
|
* data-part 为 root / line;流光动效纯 CSS,尊重 `prefers-reduced-motion`。
|
|
6
6
|
*
|
|
@@ -22,7 +22,56 @@ const SKELETON_RADII = [
|
|
|
22
22
|
];
|
|
23
23
|
/** Skeleton 各渲染部位全集(data-part 取值)。 */
|
|
24
24
|
const SKELETON_PARTS = ["root", "line"];
|
|
25
|
+
const radiusVariables = {
|
|
26
|
+
control: "var(--qw-sem-size-radius-control)",
|
|
27
|
+
card: "var(--qw-sem-size-radius-card)",
|
|
28
|
+
full: "var(--qw-sem-size-radius-full)"
|
|
29
|
+
};
|
|
30
|
+
const length = (value) => typeof value === "number" ? `${value}px` : value;
|
|
31
|
+
/** Rendering, dimensions and invalid-input handling are shared by all adapters. */
|
|
32
|
+
function resolveSkeletonState(props = {}) {
|
|
33
|
+
const variant = SKELETON_VARIANTS.includes(props.variant) ? props.variant : "text";
|
|
34
|
+
const animation = SKELETON_ANIMATIONS.includes(props.animation) ? props.animation : "wave";
|
|
35
|
+
const radius = variant !== "circle" && SKELETON_RADII.includes(props.radius) ? props.radius : void 0;
|
|
36
|
+
const lines = Number.isInteger(props.lines) && props.lines > 0 && props.lines <= 4294967295 ? props.lines : 1;
|
|
37
|
+
const style = {};
|
|
38
|
+
if (props.width != null) style["--qw-skeleton-w"] = length(props.width);
|
|
39
|
+
if (props.height != null) style["--qw-skeleton-h"] = length(props.height);
|
|
40
|
+
if (radius) style["--qw-skeleton-r"] = radiusVariables[radius];
|
|
41
|
+
return {
|
|
42
|
+
variant,
|
|
43
|
+
animation,
|
|
44
|
+
radius,
|
|
45
|
+
lines,
|
|
46
|
+
style,
|
|
47
|
+
lineItems: variant === "text" && lines > 1 ? Array.from({ length: lines }, (_, index) => ({
|
|
48
|
+
index,
|
|
49
|
+
last: index === lines - 1
|
|
50
|
+
})) : []
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function getSkeletonRootProps(state) {
|
|
54
|
+
return {
|
|
55
|
+
"data-scope": "skeleton",
|
|
56
|
+
"data-part": "root",
|
|
57
|
+
"data-variant": state.variant,
|
|
58
|
+
"data-animation": state.animation,
|
|
59
|
+
"data-radius": state.radius,
|
|
60
|
+
"data-lines": state.lineItems.length ? state.lines : void 0,
|
|
61
|
+
"aria-hidden": "true"
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function getSkeletonStyle(state) {
|
|
65
|
+
return state.style;
|
|
66
|
+
}
|
|
67
|
+
function getSkeletonLineProps(line) {
|
|
68
|
+
return {
|
|
69
|
+
"data-scope": "skeleton",
|
|
70
|
+
"data-part": "line",
|
|
71
|
+
"data-last": line.last ? "true" : void 0
|
|
72
|
+
};
|
|
73
|
+
}
|
|
25
74
|
//#endregion
|
|
26
|
-
export { SKELETON_ANIMATIONS, SKELETON_PARTS, SKELETON_RADII, SKELETON_VARIANTS };
|
|
75
|
+
export { SKELETON_ANIMATIONS, SKELETON_PARTS, SKELETON_RADII, SKELETON_VARIANTS, getSkeletonLineProps, getSkeletonRootProps, getSkeletonStyle, resolveSkeletonState };
|
|
27
76
|
|
|
28
77
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/skeleton/skeleton.ts"],"sourcesContent":["/**\n * Skeleton 契约 — 原型 A(无状态),
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/skeleton/skeleton.ts"],"sourcesContent":["/**\n * Skeleton 契约 — 原型 A(无状态),Core 无 machine,承载三栈共享的类型与渲染契约。\n * 渲染契约:`data-scope=\"skeleton\"`,`aria-hidden=\"true\"`;\n * data-part 为 root / line;流光动效纯 CSS,尊重 `prefers-reduced-motion`。\n *\n * 形状 / 动效 / 圆角词表以运行时常量数组为唯一事实源(类型从常量推导),__test__ 直接锁死。\n */\n\n/** 形状全集:text 文本条 / circle 头像 / rect 图片卡片块。 */\nexport const SKELETON_VARIANTS = [\"text\", \"circle\", \"rect\"] as const;\n\n/** 动效全集:wave 流光(默认)/ none 静态。 */\nexport const SKELETON_ANIMATIONS = [\"wave\", \"none\"] as const;\n\n/** 圆角档位全集。 */\nexport const SKELETON_RADII = [\"control\", \"card\", \"full\"] as const;\n\n/** Skeleton 各渲染部位全集(data-part 取值)。 */\nexport const SKELETON_PARTS = [\"root\", \"line\"] as const;\n\nexport type SkeletonVariant = (typeof SKELETON_VARIANTS)[number];\nexport type SkeletonAnimation = (typeof SKELETON_ANIMATIONS)[number];\nexport type SkeletonRadius = (typeof SKELETON_RADII)[number];\nexport type SkeletonPart = (typeof SKELETON_PARTS)[number];\n\n/**\n * QwSkeletonProps — 三栈共享的行为与渲染契约。\n * 几何 width/height 的 number|string 形式是框架无关的;\n * 富内容不涉及(骨架不承载文本)。\n */\nexport interface QwSkeletonProps {\n /** 形状,默认 text。 */\n variant?: SkeletonVariant;\n /** 动效,默认 wave。 */\n animation?: SkeletonAnimation;\n /** 宽度,数值按 px 处理。 */\n width?: number | string;\n /** 高度,数值按 px 处理。 */\n height?: number | string;\n /** 圆角档位(circle 使用 full 圆角,忽略此项;显式宽高可独立设置)。 */\n radius?: SkeletonRadius;\n /** 仅 text:一次渲染多行文本条,末行更短。默认 1。 */\n lines?: number;\n}\n\n\nexport interface SkeletonLine { readonly index: number; readonly last: boolean }\nexport interface ResolvedSkeletonState {\n variant: SkeletonVariant; animation: SkeletonAnimation; radius?: SkeletonRadius; lines: number;\n style: Readonly<Record<string, string>>; lineItems: readonly SkeletonLine[];\n}\nconst radiusVariables: Record<SkeletonRadius, string> = {\n control: \"var(--qw-sem-size-radius-control)\", card: \"var(--qw-sem-size-radius-card)\", full: \"var(--qw-sem-size-radius-full)\",\n};\nconst length = (value: number | string): string => typeof value === \"number\" ? `${value}px` : value;\n/** Rendering, dimensions and invalid-input handling are shared by all adapters. */\nexport function resolveSkeletonState(props: QwSkeletonProps = {}): ResolvedSkeletonState {\n const variant = SKELETON_VARIANTS.includes(props.variant!) ? props.variant! : \"text\";\n const animation = SKELETON_ANIMATIONS.includes(props.animation!) ? props.animation! : \"wave\";\n const radius = variant !== \"circle\" && SKELETON_RADII.includes(props.radius!) ? props.radius : undefined;\n const lines = Number.isInteger(props.lines) && props.lines! > 0 && props.lines! <= 0xffff_ffff ? props.lines! : 1;\n const style: Record<string, string> = {};\n if (props.width != null) style[\"--qw-skeleton-w\"] = length(props.width);\n if (props.height != null) style[\"--qw-skeleton-h\"] = length(props.height);\n if (radius) style[\"--qw-skeleton-r\"] = radiusVariables[radius];\n return { variant, animation, radius, lines, style, lineItems: variant === \"text\" && lines > 1 ? Array.from({ length: lines }, (_, index) => ({ index, last: index === lines - 1 })) : [] };\n}\nexport interface SkeletonRootProps {\n \"data-scope\": \"skeleton\"; \"data-part\": \"root\"; \"data-variant\": SkeletonVariant; \"data-animation\": SkeletonAnimation;\n \"data-radius\"?: SkeletonRadius; \"data-lines\"?: number; \"aria-hidden\": \"true\";\n}\nexport function getSkeletonRootProps(state: ResolvedSkeletonState): SkeletonRootProps {\n return { \"data-scope\": \"skeleton\", \"data-part\": \"root\", \"data-variant\": state.variant, \"data-animation\": state.animation,\n \"data-radius\": state.radius, \"data-lines\": state.lineItems.length ? state.lines : undefined, \"aria-hidden\": \"true\" };\n}\nexport function getSkeletonStyle(state: ResolvedSkeletonState): Readonly<Record<string, string>> { return state.style; }\nexport interface SkeletonLineProps { \"data-scope\": \"skeleton\"; \"data-part\": \"line\"; \"data-last\"?: \"true\" }\nexport function getSkeletonLineProps(line: SkeletonLine): SkeletonLineProps {\n return { \"data-scope\": \"skeleton\", \"data-part\": \"line\", \"data-last\": line.last ? \"true\" : undefined };\n}\n"],"mappings":";;;;;;;;;AASA,MAAa,oBAAoB;CAAC;CAAQ;CAAU;AAAM;;AAG1D,MAAa,sBAAsB,CAAC,QAAQ,MAAM;;AAGlD,MAAa,iBAAiB;CAAC;CAAW;CAAQ;AAAM;;AAGxD,MAAa,iBAAiB,CAAC,QAAQ,MAAM;AAiC7C,MAAM,kBAAkD;CACtD,SAAS;CAAqC,MAAM;CAAkC,MAAM;AAC9F;AACA,MAAM,UAAU,UAAmC,OAAO,UAAU,WAAW,GAAG,MAAM,MAAM;;AAE9F,SAAgB,qBAAqB,QAAyB,CAAC,GAA0B;CACvF,MAAM,UAAU,kBAAkB,SAAS,MAAM,OAAQ,IAAI,MAAM,UAAW;CAC9E,MAAM,YAAY,oBAAoB,SAAS,MAAM,SAAU,IAAI,MAAM,YAAa;CACtF,MAAM,SAAS,YAAY,YAAY,eAAe,SAAS,MAAM,MAAO,IAAI,MAAM,SAAS,KAAA;CAC/F,MAAM,QAAQ,OAAO,UAAU,MAAM,KAAK,KAAK,MAAM,QAAS,KAAK,MAAM,SAAU,aAAc,MAAM,QAAS;CAChH,MAAM,QAAgC,CAAC;CACvC,IAAI,MAAM,SAAS,MAAM,MAAM,qBAAqB,OAAO,MAAM,KAAK;CACtE,IAAI,MAAM,UAAU,MAAM,MAAM,qBAAqB,OAAO,MAAM,MAAM;CACxE,IAAI,QAAQ,MAAM,qBAAqB,gBAAgB;CACvD,OAAO;EAAE;EAAS;EAAW;EAAQ;EAAO;EAAO,WAAW,YAAY,UAAU,QAAQ,IAAI,MAAM,KAAK,EAAE,QAAQ,MAAM,IAAI,GAAG,WAAW;GAAE;GAAO,MAAM,UAAU,QAAQ;EAAE,EAAE,IAAI,CAAC;CAAE;AAC3L;AAKA,SAAgB,qBAAqB,OAAiD;CACpF,OAAO;EAAE,cAAc;EAAY,aAAa;EAAQ,gBAAgB,MAAM;EAAS,kBAAkB,MAAM;EAC7G,eAAe,MAAM;EAAQ,cAAc,MAAM,UAAU,SAAS,MAAM,QAAQ,KAAA;EAAW,eAAe;CAAO;AACvH;AACA,SAAgB,iBAAiB,OAAgE;CAAE,OAAO,MAAM;AAAO;AAEvH,SAAgB,qBAAqB,MAAuC;CAC1E,OAAO;EAAE,cAAc;EAAY,aAAa;EAAQ,aAAa,KAAK,OAAO,SAAS,KAAA;CAAU;AACtG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Skeleton 契约 — 原型 A(无状态),
|
|
2
|
+
* Skeleton 契约 — 原型 A(无状态),Core 无 machine,承载三栈共享的类型与渲染契约。
|
|
3
3
|
* 渲染契约:`data-scope="skeleton"`,`aria-hidden="true"`;
|
|
4
4
|
* data-part 为 root / line;流光动效纯 CSS,尊重 `prefers-reduced-motion`。
|
|
5
5
|
*
|
|
@@ -18,7 +18,7 @@ export type SkeletonAnimation = (typeof SKELETON_ANIMATIONS)[number];
|
|
|
18
18
|
export type SkeletonRadius = (typeof SKELETON_RADII)[number];
|
|
19
19
|
export type SkeletonPart = (typeof SKELETON_PARTS)[number];
|
|
20
20
|
/**
|
|
21
|
-
* QwSkeletonProps —
|
|
21
|
+
* QwSkeletonProps — 三栈共享的行为与渲染契约。
|
|
22
22
|
* 几何 width/height 的 number|string 形式是框架无关的;
|
|
23
23
|
* 富内容不涉及(骨架不承载文本)。
|
|
24
24
|
*/
|
|
@@ -31,8 +31,39 @@ export interface QwSkeletonProps {
|
|
|
31
31
|
width?: number | string;
|
|
32
32
|
/** 高度,数值按 px 处理。 */
|
|
33
33
|
height?: number | string;
|
|
34
|
-
/** 圆角档位(circle
|
|
34
|
+
/** 圆角档位(circle 使用 full 圆角,忽略此项;显式宽高可独立设置)。 */
|
|
35
35
|
radius?: SkeletonRadius;
|
|
36
36
|
/** 仅 text:一次渲染多行文本条,末行更短。默认 1。 */
|
|
37
37
|
lines?: number;
|
|
38
38
|
}
|
|
39
|
+
export interface SkeletonLine {
|
|
40
|
+
readonly index: number;
|
|
41
|
+
readonly last: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface ResolvedSkeletonState {
|
|
44
|
+
variant: SkeletonVariant;
|
|
45
|
+
animation: SkeletonAnimation;
|
|
46
|
+
radius?: SkeletonRadius;
|
|
47
|
+
lines: number;
|
|
48
|
+
style: Readonly<Record<string, string>>;
|
|
49
|
+
lineItems: readonly SkeletonLine[];
|
|
50
|
+
}
|
|
51
|
+
/** Rendering, dimensions and invalid-input handling are shared by all adapters. */
|
|
52
|
+
export declare function resolveSkeletonState(props?: QwSkeletonProps): ResolvedSkeletonState;
|
|
53
|
+
export interface SkeletonRootProps {
|
|
54
|
+
"data-scope": "skeleton";
|
|
55
|
+
"data-part": "root";
|
|
56
|
+
"data-variant": SkeletonVariant;
|
|
57
|
+
"data-animation": SkeletonAnimation;
|
|
58
|
+
"data-radius"?: SkeletonRadius;
|
|
59
|
+
"data-lines"?: number;
|
|
60
|
+
"aria-hidden": "true";
|
|
61
|
+
}
|
|
62
|
+
export declare function getSkeletonRootProps(state: ResolvedSkeletonState): SkeletonRootProps;
|
|
63
|
+
export declare function getSkeletonStyle(state: ResolvedSkeletonState): Readonly<Record<string, string>>;
|
|
64
|
+
export interface SkeletonLineProps {
|
|
65
|
+
"data-scope": "skeleton";
|
|
66
|
+
"data-part": "line";
|
|
67
|
+
"data-last"?: "true";
|
|
68
|
+
}
|
|
69
|
+
export declare function getSkeletonLineProps(line: SkeletonLine): SkeletonLineProps;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./slider.js";
|