@qw-ui/core 0.3.0-next.8 → 0.3.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/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,115 @@
|
|
|
1
|
+
import { type Machine, type Service } from "@zag-js/core";
|
|
2
|
+
import type { NormalizeProps, PropTypes } from "@zag-js/types";
|
|
3
|
+
export declare const CASCADER_PARTS: readonly ["root", "label", "columns", "column", "option", "status", "retry-trigger", "actions", "cancel-trigger", "confirm-trigger", "output"];
|
|
4
|
+
export interface CascaderOption {
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
leaf?: boolean;
|
|
9
|
+
children?: CascaderOption[];
|
|
10
|
+
}
|
|
11
|
+
export interface CascaderValueChangeDetails {
|
|
12
|
+
value: string[];
|
|
13
|
+
labels: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface CascaderLoadDetails {
|
|
16
|
+
option: CascaderOption;
|
|
17
|
+
path: string[];
|
|
18
|
+
signal: AbortSignal;
|
|
19
|
+
}
|
|
20
|
+
export interface QwCascaderProps {
|
|
21
|
+
id?: string;
|
|
22
|
+
label?: string;
|
|
23
|
+
options: CascaderOption[];
|
|
24
|
+
value?: string[];
|
|
25
|
+
defaultValue?: string[];
|
|
26
|
+
dir?: "ltr" | "rtl";
|
|
27
|
+
loadChildren?: (details: CascaderLoadDetails) => Promise<CascaderOption[]>;
|
|
28
|
+
loadingText?: string;
|
|
29
|
+
errorText?: string;
|
|
30
|
+
retryText?: string;
|
|
31
|
+
cancelText?: string;
|
|
32
|
+
confirmText?: string;
|
|
33
|
+
onValueChange?: (details: CascaderValueChangeDetails) => void;
|
|
34
|
+
onCancel?: () => void;
|
|
35
|
+
onConfirm?: (details: CascaderValueChangeDetails) => void;
|
|
36
|
+
}
|
|
37
|
+
export declare function normalizeCascaderOptions(options?: readonly CascaderOption[], owner?: string): CascaderOption[];
|
|
38
|
+
export declare function resolveCascaderPath(options: readonly CascaderOption[], path: readonly string[]): CascaderOption[];
|
|
39
|
+
export declare function normalizeCascaderValue(options: readonly CascaderOption[], path?: readonly string[]): string[];
|
|
40
|
+
export declare function getCascaderLabels(options: readonly CascaderOption[], path: readonly string[]): string[];
|
|
41
|
+
export declare function updateCascaderChildren(options: readonly CascaderOption[], path: readonly string[], children: CascaderOption[]): CascaderOption[];
|
|
42
|
+
export interface CascaderColumn {
|
|
43
|
+
depth: number;
|
|
44
|
+
options: readonly CascaderOption[];
|
|
45
|
+
selected?: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function getCascaderColumns(options: readonly CascaderOption[], path: readonly string[]): CascaderColumn[];
|
|
48
|
+
export declare function createCascaderProps(props: QwCascaderProps): QwCascaderProps;
|
|
49
|
+
export interface QwCascaderSchema {
|
|
50
|
+
props: QwCascaderProps;
|
|
51
|
+
context: {
|
|
52
|
+
value: string[];
|
|
53
|
+
draft: string[];
|
|
54
|
+
options: CascaderOption[];
|
|
55
|
+
loadingPath: string[];
|
|
56
|
+
errorPath: string[];
|
|
57
|
+
request: number;
|
|
58
|
+
};
|
|
59
|
+
refs: {
|
|
60
|
+
controller: AbortController | null;
|
|
61
|
+
active: boolean;
|
|
62
|
+
};
|
|
63
|
+
state: "idle";
|
|
64
|
+
action: "select" | "cancel" | "confirm" | "loadSuccess" | "loadError" | "retry" | "sync";
|
|
65
|
+
effect: "lifecycle";
|
|
66
|
+
event: {
|
|
67
|
+
type: "SELECT";
|
|
68
|
+
depth: number;
|
|
69
|
+
value: string;
|
|
70
|
+
} | {
|
|
71
|
+
type: "CANCEL";
|
|
72
|
+
} | {
|
|
73
|
+
type: "CONFIRM";
|
|
74
|
+
} | {
|
|
75
|
+
type: "LOAD.SUCCESS";
|
|
76
|
+
ticket: number;
|
|
77
|
+
path: string[];
|
|
78
|
+
children: CascaderOption[];
|
|
79
|
+
} | {
|
|
80
|
+
type: "LOAD.ERROR";
|
|
81
|
+
ticket: number;
|
|
82
|
+
path: string[];
|
|
83
|
+
} | {
|
|
84
|
+
type: "RETRY";
|
|
85
|
+
} | {
|
|
86
|
+
type: "PROPS.SYNC";
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export type QwCascaderMachine = Machine<QwCascaderSchema>;
|
|
90
|
+
export type QwCascaderService = Service<QwCascaderSchema>;
|
|
91
|
+
export declare const cascaderMachine: QwCascaderMachine;
|
|
92
|
+
export interface QwCascaderApi<T extends PropTypes = PropTypes> {
|
|
93
|
+
value: string[];
|
|
94
|
+
draft: string[];
|
|
95
|
+
labels: string[];
|
|
96
|
+
columns: CascaderColumn[];
|
|
97
|
+
loading: boolean;
|
|
98
|
+
error: boolean;
|
|
99
|
+
select(depth: number, value: string): void;
|
|
100
|
+
retry(): void;
|
|
101
|
+
cancel(): void;
|
|
102
|
+
confirm(): void;
|
|
103
|
+
getRootProps(): T["element"];
|
|
104
|
+
getLabelProps(): T["element"];
|
|
105
|
+
getColumnsProps(): T["element"];
|
|
106
|
+
getColumnProps(column: CascaderColumn): T["element"];
|
|
107
|
+
getOptionProps(column: CascaderColumn, option: CascaderOption): T["button"];
|
|
108
|
+
getStatusProps(): T["element"];
|
|
109
|
+
getRetryTriggerProps(): T["button"];
|
|
110
|
+
getActionsProps(): T["element"];
|
|
111
|
+
getCancelTriggerProps(): T["button"];
|
|
112
|
+
getConfirmTriggerProps(): T["button"];
|
|
113
|
+
getOutputProps(): T["element"];
|
|
114
|
+
}
|
|
115
|
+
export declare function connectCascader<T extends PropTypes>(service: QwCascaderService, normalize: NormalizeProps<T>): QwCascaderApi<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./cascader.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as getCascaderColumns, c as normalizeCascaderValue, i as createCascaderProps, l as resolveCascaderPath, n as cascaderMachine, o as getCascaderLabels, r as connectCascader, s as normalizeCascaderOptions, t as CASCADER_PARTS, u as updateCascaderChildren } from "../cascader-D-xMjs7P.js";
|
|
2
|
+
export { CASCADER_PARTS, cascaderMachine, connectCascader, createCascaderProps, getCascaderColumns, getCascaderLabels, normalizeCascaderOptions, normalizeCascaderValue, resolveCascaderPath, updateCascaderChildren };
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { createMachine } from "@zag-js/core";
|
|
2
|
+
import { dataAttr } from "@zag-js/dom-query";
|
|
3
|
+
//#region src/cascader/cascader.ts
|
|
4
|
+
const CASCADER_PARTS = [
|
|
5
|
+
"root",
|
|
6
|
+
"label",
|
|
7
|
+
"columns",
|
|
8
|
+
"column",
|
|
9
|
+
"option",
|
|
10
|
+
"status",
|
|
11
|
+
"retry-trigger",
|
|
12
|
+
"actions",
|
|
13
|
+
"cancel-trigger",
|
|
14
|
+
"confirm-trigger",
|
|
15
|
+
"output"
|
|
16
|
+
];
|
|
17
|
+
const clean = (value) => typeof value === "string" ? value.trim() : "";
|
|
18
|
+
function normalizeCascaderOptions(options = [], owner = "Cascader") {
|
|
19
|
+
const seen = /* @__PURE__ */ new Set();
|
|
20
|
+
return options.map((item) => {
|
|
21
|
+
const value = clean(item.value), label = clean(item.label);
|
|
22
|
+
if (!value || !label) throw new TypeError(`${owner} options require nonempty value and label`);
|
|
23
|
+
if (seen.has(value)) throw new TypeError(`${owner} sibling values must be unique: ${value}`);
|
|
24
|
+
seen.add(value);
|
|
25
|
+
return {
|
|
26
|
+
value,
|
|
27
|
+
label,
|
|
28
|
+
disabled: !!item.disabled || void 0,
|
|
29
|
+
leaf: !!item.leaf || void 0,
|
|
30
|
+
children: item.children ? [...normalizeCascaderOptions(item.children, owner)] : void 0
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function resolveCascaderPath(options, path) {
|
|
35
|
+
const result = [];
|
|
36
|
+
let level = options;
|
|
37
|
+
for (const value of path) {
|
|
38
|
+
const found = level.find((item) => item.value === value);
|
|
39
|
+
if (!found) break;
|
|
40
|
+
result.push(found);
|
|
41
|
+
level = found.children ?? [];
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
function normalizeCascaderValue(options, path = []) {
|
|
46
|
+
return resolveCascaderPath(options, path.map(clean).filter(Boolean)).map((item) => item.value);
|
|
47
|
+
}
|
|
48
|
+
function getCascaderLabels(options, path) {
|
|
49
|
+
return resolveCascaderPath(options, path).map((item) => item.label);
|
|
50
|
+
}
|
|
51
|
+
function updateCascaderChildren(options, path, children) {
|
|
52
|
+
if (!path.length) return [...options];
|
|
53
|
+
const [value, ...rest] = path;
|
|
54
|
+
return options.map((item) => item.value !== value ? item : rest.length ? {
|
|
55
|
+
...item,
|
|
56
|
+
children: updateCascaderChildren(item.children ?? [], rest, children)
|
|
57
|
+
} : {
|
|
58
|
+
...item,
|
|
59
|
+
children
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function getCascaderColumns(options, path) {
|
|
63
|
+
const columns = [];
|
|
64
|
+
let level = options;
|
|
65
|
+
for (let depth = 0; level.length; depth++) {
|
|
66
|
+
columns.push({
|
|
67
|
+
depth,
|
|
68
|
+
options: level,
|
|
69
|
+
selected: path[depth]
|
|
70
|
+
});
|
|
71
|
+
const selected = level.find((item) => item.value === path[depth]);
|
|
72
|
+
if (!selected?.children?.length) break;
|
|
73
|
+
level = selected.children;
|
|
74
|
+
}
|
|
75
|
+
return columns;
|
|
76
|
+
}
|
|
77
|
+
function createCascaderProps(props) {
|
|
78
|
+
return {
|
|
79
|
+
...props,
|
|
80
|
+
label: clean(props.label) || "级联选择",
|
|
81
|
+
options: normalizeCascaderOptions(props.options ?? []),
|
|
82
|
+
loadingText: clean(props.loadingText) || "加载中",
|
|
83
|
+
errorText: clean(props.errorText) || "加载失败",
|
|
84
|
+
retryText: clean(props.retryText) || "重试",
|
|
85
|
+
cancelText: clean(props.cancelText) || "取消",
|
|
86
|
+
confirmText: clean(props.confirmText) || "确认"
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function details(options, value) {
|
|
90
|
+
return {
|
|
91
|
+
value: [...value],
|
|
92
|
+
labels: getCascaderLabels(options, value)
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function invalidateLoad(params) {
|
|
96
|
+
params.refs.get("controller")?.abort();
|
|
97
|
+
params.refs.set("controller", null);
|
|
98
|
+
params.context.set("request", params.context.get("request") + 1);
|
|
99
|
+
params.context.set("loadingPath", []);
|
|
100
|
+
}
|
|
101
|
+
function requestLoad(params, path) {
|
|
102
|
+
const loader = params.prop("loadChildren");
|
|
103
|
+
if (!loader) return;
|
|
104
|
+
const option = resolveCascaderPath(params.context.get("options"), path).at(-1);
|
|
105
|
+
if (!option || option.leaf || option.disabled) return;
|
|
106
|
+
invalidateLoad(params);
|
|
107
|
+
const ticket = params.context.get("request"), controller = new AbortController();
|
|
108
|
+
params.refs.set("controller", controller);
|
|
109
|
+
params.context.set("loadingPath", path);
|
|
110
|
+
params.context.set("errorPath", []);
|
|
111
|
+
Promise.resolve(loader({
|
|
112
|
+
option,
|
|
113
|
+
path: [...path],
|
|
114
|
+
signal: controller.signal
|
|
115
|
+
})).then((children) => {
|
|
116
|
+
if (params.refs.get("active") && !controller.signal.aborted) params.send({
|
|
117
|
+
type: "LOAD.SUCCESS",
|
|
118
|
+
ticket,
|
|
119
|
+
path,
|
|
120
|
+
children
|
|
121
|
+
});
|
|
122
|
+
}, () => {
|
|
123
|
+
if (params.refs.get("active") && !controller.signal.aborted) params.send({
|
|
124
|
+
type: "LOAD.ERROR",
|
|
125
|
+
ticket,
|
|
126
|
+
path
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function scheduleLoad(params, path) {
|
|
131
|
+
const ticket = params.context.get("request");
|
|
132
|
+
queueMicrotask(() => {
|
|
133
|
+
if (params.refs.get("active") && params.context.get("request") === ticket) requestLoad(params, path);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const cascaderMachine = createMachine({
|
|
137
|
+
props: ({ props }) => createCascaderProps({
|
|
138
|
+
...props,
|
|
139
|
+
options: props.options ?? []
|
|
140
|
+
}),
|
|
141
|
+
initialState: () => "idle",
|
|
142
|
+
states: { idle: {} },
|
|
143
|
+
context: ({ bindable, prop }) => {
|
|
144
|
+
const contextOptions = () => normalizeCascaderOptions(prop("options") ?? []), options = contextOptions(), initial = normalizeCascaderValue(options, prop("defaultValue") ?? []);
|
|
145
|
+
return {
|
|
146
|
+
value: bindable(() => ({
|
|
147
|
+
defaultValue: initial,
|
|
148
|
+
value: prop("value") === void 0 ? void 0 : normalizeCascaderValue(contextOptions(), prop("value")),
|
|
149
|
+
hash: (value) => value.join("\0")
|
|
150
|
+
})),
|
|
151
|
+
draft: bindable(() => ({
|
|
152
|
+
defaultValue: initial,
|
|
153
|
+
hash: (value) => value.join("\0")
|
|
154
|
+
})),
|
|
155
|
+
options: bindable(() => ({
|
|
156
|
+
defaultValue: options,
|
|
157
|
+
hash: JSON.stringify
|
|
158
|
+
})),
|
|
159
|
+
loadingPath: bindable(() => ({
|
|
160
|
+
defaultValue: [],
|
|
161
|
+
hash: (value) => value.join("/")
|
|
162
|
+
})),
|
|
163
|
+
errorPath: bindable(() => ({
|
|
164
|
+
defaultValue: [],
|
|
165
|
+
hash: (value) => value.join("/")
|
|
166
|
+
})),
|
|
167
|
+
request: bindable(() => ({ defaultValue: 0 }))
|
|
168
|
+
};
|
|
169
|
+
},
|
|
170
|
+
refs: () => ({
|
|
171
|
+
controller: null,
|
|
172
|
+
active: false
|
|
173
|
+
}),
|
|
174
|
+
effects: ["lifecycle"],
|
|
175
|
+
watch({ track, prop, send }) {
|
|
176
|
+
track([() => JSON.stringify(prop("options") ?? []), () => JSON.stringify(prop("value"))], () => send({ type: "PROPS.SYNC" }));
|
|
177
|
+
},
|
|
178
|
+
on: {
|
|
179
|
+
SELECT: { actions: ["select"] },
|
|
180
|
+
CANCEL: { actions: ["cancel"] },
|
|
181
|
+
CONFIRM: { actions: ["confirm"] },
|
|
182
|
+
"LOAD.SUCCESS": { actions: ["loadSuccess"] },
|
|
183
|
+
"LOAD.ERROR": { actions: ["loadError"] },
|
|
184
|
+
RETRY: { actions: ["retry"] },
|
|
185
|
+
"PROPS.SYNC": { actions: ["sync"] }
|
|
186
|
+
},
|
|
187
|
+
implementations: {
|
|
188
|
+
actions: {
|
|
189
|
+
select(params) {
|
|
190
|
+
const { event, context } = params;
|
|
191
|
+
if (event.type !== "SELECT") return;
|
|
192
|
+
const option = getCascaderColumns(context.get("options"), context.get("draft"))[event.depth]?.options.find((item) => item.value === event.value);
|
|
193
|
+
if (!option || option.disabled) return;
|
|
194
|
+
const path = [...context.get("draft").slice(0, event.depth), option.value];
|
|
195
|
+
invalidateLoad(params);
|
|
196
|
+
context.set("draft", path);
|
|
197
|
+
context.set("errorPath", []);
|
|
198
|
+
if (!option.leaf && !option.children?.length) scheduleLoad(params, path);
|
|
199
|
+
},
|
|
200
|
+
cancel(params) {
|
|
201
|
+
invalidateLoad(params);
|
|
202
|
+
params.context.set("draft", [...params.context.get("value")]);
|
|
203
|
+
params.context.set("errorPath", []);
|
|
204
|
+
params.prop("onCancel")?.();
|
|
205
|
+
},
|
|
206
|
+
confirm({ context, prop }) {
|
|
207
|
+
const value = [...context.get("draft")], change = details(context.get("options"), value);
|
|
208
|
+
context.set("value", value);
|
|
209
|
+
prop("onValueChange")?.(change);
|
|
210
|
+
prop("onConfirm")?.(change);
|
|
211
|
+
},
|
|
212
|
+
loadSuccess({ context, event, refs }) {
|
|
213
|
+
if (event.type !== "LOAD.SUCCESS" || event.ticket !== context.get("request")) return;
|
|
214
|
+
refs.set("controller", null);
|
|
215
|
+
context.set("options", updateCascaderChildren(context.get("options"), event.path, normalizeCascaderOptions(event.children)));
|
|
216
|
+
context.set("loadingPath", []);
|
|
217
|
+
},
|
|
218
|
+
loadError({ context, event, refs }) {
|
|
219
|
+
if (event.type !== "LOAD.ERROR" || event.ticket !== context.get("request")) return;
|
|
220
|
+
refs.set("controller", null);
|
|
221
|
+
context.set("loadingPath", []);
|
|
222
|
+
context.set("errorPath", event.path);
|
|
223
|
+
},
|
|
224
|
+
retry(params) {
|
|
225
|
+
const path = params.context.get("errorPath");
|
|
226
|
+
if (path.length) scheduleLoad(params, path);
|
|
227
|
+
},
|
|
228
|
+
sync(params) {
|
|
229
|
+
invalidateLoad(params);
|
|
230
|
+
const options = normalizeCascaderOptions(params.prop("options") ?? []);
|
|
231
|
+
params.context.set("options", options);
|
|
232
|
+
const ownerValue = params.prop("value");
|
|
233
|
+
params.context.set("draft", normalizeCascaderValue(options, ownerValue === void 0 ? params.context.get("draft") : ownerValue));
|
|
234
|
+
params.context.set("errorPath", []);
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
effects: { lifecycle({ refs }) {
|
|
238
|
+
refs.set("active", true);
|
|
239
|
+
return () => {
|
|
240
|
+
refs.set("active", false);
|
|
241
|
+
refs.get("controller")?.abort();
|
|
242
|
+
refs.set("controller", null);
|
|
243
|
+
};
|
|
244
|
+
} }
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
function connectCascader(service, normalize) {
|
|
248
|
+
const options = service.context.get("options"), value = service.context.get("value"), draft = service.context.get("draft"), columns = getCascaderColumns(options, draft), loading = service.context.get("loadingPath").length > 0, error = service.context.get("errorPath").length > 0, part = (name) => ({
|
|
249
|
+
"data-scope": "cascader",
|
|
250
|
+
"data-part": name
|
|
251
|
+
});
|
|
252
|
+
return {
|
|
253
|
+
value,
|
|
254
|
+
draft,
|
|
255
|
+
columns,
|
|
256
|
+
labels: getCascaderLabels(options, draft),
|
|
257
|
+
loading,
|
|
258
|
+
error,
|
|
259
|
+
select: (depth, option) => service.send({
|
|
260
|
+
type: "SELECT",
|
|
261
|
+
depth,
|
|
262
|
+
value: option
|
|
263
|
+
}),
|
|
264
|
+
retry: () => service.send({ type: "RETRY" }),
|
|
265
|
+
cancel: () => service.send({ type: "CANCEL" }),
|
|
266
|
+
confirm: () => service.send({ type: "CONFIRM" }),
|
|
267
|
+
getRootProps: () => normalize.element({
|
|
268
|
+
...part("root"),
|
|
269
|
+
dir: service.prop("dir")
|
|
270
|
+
}),
|
|
271
|
+
getLabelProps: () => normalize.element(part("label")),
|
|
272
|
+
getColumnsProps: () => normalize.element(part("columns")),
|
|
273
|
+
getColumnProps: (column) => normalize.element({
|
|
274
|
+
...part("column"),
|
|
275
|
+
role: "listbox",
|
|
276
|
+
"aria-label": `第 ${column.depth + 1} 级`,
|
|
277
|
+
"aria-orientation": "vertical"
|
|
278
|
+
}),
|
|
279
|
+
getOptionProps: (column, option) => normalize.button({
|
|
280
|
+
...part("option"),
|
|
281
|
+
type: "button",
|
|
282
|
+
role: "option",
|
|
283
|
+
disabled: option.disabled,
|
|
284
|
+
"aria-selected": column.selected === option.value,
|
|
285
|
+
"data-selected": dataAttr(column.selected === option.value),
|
|
286
|
+
onClick: () => service.send({
|
|
287
|
+
type: "SELECT",
|
|
288
|
+
depth: column.depth,
|
|
289
|
+
value: option.value
|
|
290
|
+
}),
|
|
291
|
+
onKeyDown(event) {
|
|
292
|
+
if ((service.prop("dir") === "rtl" ? event.key === "ArrowLeft" : event.key === "ArrowRight") && option.children?.length) {
|
|
293
|
+
event.preventDefault();
|
|
294
|
+
service.send({
|
|
295
|
+
type: "SELECT",
|
|
296
|
+
depth: column.depth,
|
|
297
|
+
value: option.value
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}),
|
|
302
|
+
getStatusProps: () => normalize.element({
|
|
303
|
+
...part("status"),
|
|
304
|
+
role: error ? "alert" : "status",
|
|
305
|
+
hidden: !loading && !error
|
|
306
|
+
}),
|
|
307
|
+
getRetryTriggerProps: () => normalize.button({
|
|
308
|
+
...part("retry-trigger"),
|
|
309
|
+
type: "button",
|
|
310
|
+
hidden: !error,
|
|
311
|
+
onClick: () => service.send({ type: "RETRY" })
|
|
312
|
+
}),
|
|
313
|
+
getActionsProps: () => normalize.element(part("actions")),
|
|
314
|
+
getCancelTriggerProps: () => normalize.button({
|
|
315
|
+
...part("cancel-trigger"),
|
|
316
|
+
type: "button",
|
|
317
|
+
onClick: () => service.send({ type: "CANCEL" })
|
|
318
|
+
}),
|
|
319
|
+
getConfirmTriggerProps: () => normalize.button({
|
|
320
|
+
...part("confirm-trigger"),
|
|
321
|
+
type: "button",
|
|
322
|
+
onClick: () => service.send({ type: "CONFIRM" })
|
|
323
|
+
}),
|
|
324
|
+
getOutputProps: () => normalize.element({
|
|
325
|
+
...part("output"),
|
|
326
|
+
"aria-live": "polite"
|
|
327
|
+
})
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
//#endregion
|
|
331
|
+
export { getCascaderColumns as a, normalizeCascaderValue as c, createCascaderProps as i, resolveCascaderPath as l, cascaderMachine as n, getCascaderLabels as o, connectCascader as r, normalizeCascaderOptions as s, CASCADER_PARTS as t, updateCascaderChildren as u };
|
|
332
|
+
|
|
333
|
+
//# sourceMappingURL=cascader-D-xMjs7P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascader-D-xMjs7P.js","names":[],"sources":["../src/cascader/cascader.ts"],"sourcesContent":["import { createMachine, type Machine, type Params as ZagParams, type Service } from \"@zag-js/core\";\nimport { dataAttr } from \"@zag-js/dom-query\";\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\";\n\nexport const CASCADER_PARTS = [\"root\", \"label\", \"columns\", \"column\", \"option\", \"status\", \"retry-trigger\", \"actions\", \"cancel-trigger\", \"confirm-trigger\", \"output\"] as const;\nexport interface CascaderOption { value: string; label: string; disabled?: boolean; leaf?: boolean; children?: CascaderOption[] }\nexport interface CascaderValueChangeDetails { value: string[]; labels: string[] }\nexport interface CascaderLoadDetails { option: CascaderOption; path: string[]; signal: AbortSignal }\nexport interface QwCascaderProps { id?: string; label?: string; options: CascaderOption[]; value?: string[]; defaultValue?: string[]; dir?: \"ltr\" | \"rtl\"; loadChildren?: (details: CascaderLoadDetails) => Promise<CascaderOption[]>; loadingText?: string; errorText?: string; retryText?: string; cancelText?: string; confirmText?: string; onValueChange?: (details: CascaderValueChangeDetails) => void; onCancel?: () => void; onConfirm?: (details: CascaderValueChangeDetails) => void }\nconst clean = (value: unknown): string => typeof value === \"string\" ? value.trim() : \"\";\nexport function normalizeCascaderOptions(options: readonly CascaderOption[] = [], owner = \"Cascader\"): CascaderOption[] { const seen = new Set<string>(); return options.map((item) => { const value = clean(item.value), label = clean(item.label); if (!value || !label) throw new TypeError(`${owner} options require nonempty value and label`); if (seen.has(value)) throw new TypeError(`${owner} sibling values must be unique: ${value}`); seen.add(value); return { value, label, disabled: !!item.disabled || undefined, leaf: !!item.leaf || undefined, children: item.children ? [...normalizeCascaderOptions(item.children, owner)] : undefined }; }); }\nexport function resolveCascaderPath(options: readonly CascaderOption[], path: readonly string[]): CascaderOption[] { const result: CascaderOption[] = []; let level = options; for (const value of path) { const found = level.find((item) => item.value === value); if (!found) break; result.push(found); level = found.children ?? []; } return result; }\nexport function normalizeCascaderValue(options: readonly CascaderOption[], path: readonly string[] = []): string[] { return resolveCascaderPath(options, path.map(clean).filter(Boolean)).map((item) => item.value); }\nexport function getCascaderLabels(options: readonly CascaderOption[], path: readonly string[]): string[] { return resolveCascaderPath(options, path).map((item) => item.label); }\nexport function updateCascaderChildren(options: readonly CascaderOption[], path: readonly string[], children: CascaderOption[]): CascaderOption[] { if (!path.length) return [...options]; const [value, ...rest] = path; return options.map((item) => item.value !== value ? item : rest.length ? { ...item, children: updateCascaderChildren(item.children ?? [], rest, children) } : { ...item, children }); }\nexport interface CascaderColumn { depth: number; options: readonly CascaderOption[]; selected?: string }\nexport function getCascaderColumns(options: readonly CascaderOption[], path: readonly string[]): CascaderColumn[] { const columns: CascaderColumn[] = []; let level = options; for (let depth = 0; level.length; depth++) { columns.push({ depth, options: level, selected: path[depth] }); const selected = level.find((item) => item.value === path[depth]); if (!selected?.children?.length) break; level = selected.children; } return columns; }\nexport function createCascaderProps(props: QwCascaderProps): QwCascaderProps { return { ...props, label: clean(props.label) || \"级联选择\", options: normalizeCascaderOptions(props.options ?? []), loadingText: clean(props.loadingText) || \"加载中\", errorText: clean(props.errorText) || \"加载失败\", retryText: clean(props.retryText) || \"重试\", cancelText: clean(props.cancelText) || \"取消\", confirmText: clean(props.confirmText) || \"确认\" }; }\nexport interface QwCascaderSchema { props: QwCascaderProps; context: { value: string[]; draft: string[]; options: CascaderOption[]; loadingPath: string[]; errorPath: string[]; request: number }; refs: { controller: AbortController | null; active: boolean }; state: \"idle\"; action: \"select\" | \"cancel\" | \"confirm\" | \"loadSuccess\" | \"loadError\" | \"retry\" | \"sync\"; effect: \"lifecycle\"; event: { type: \"SELECT\"; depth: number; value: string } | { type: \"CANCEL\" } | { type: \"CONFIRM\" } | { type: \"LOAD.SUCCESS\"; ticket: number; path: string[]; children: CascaderOption[] } | { type: \"LOAD.ERROR\"; ticket: number; path: string[] } | { type: \"RETRY\" } | { type: \"PROPS.SYNC\" } }\nexport type QwCascaderMachine = Machine<QwCascaderSchema>; export type QwCascaderService = Service<QwCascaderSchema>;\nfunction details(options: CascaderOption[], value: string[]): CascaderValueChangeDetails { return { value: [...value], labels: getCascaderLabels(options, value) }; }\ntype LoadParams = Pick<ZagParams<QwCascaderSchema>, \"context\" | \"prop\" | \"refs\" | \"send\">;\nfunction invalidateLoad(params: Pick<LoadParams, \"context\" | \"refs\">): void {\n params.refs.get(\"controller\")?.abort(); params.refs.set(\"controller\", null); params.context.set(\"request\", params.context.get(\"request\") + 1); params.context.set(\"loadingPath\", []);\n}\nfunction requestLoad(params: LoadParams, path: string[]): void {\n const loader = params.prop(\"loadChildren\"); if (!loader) return;\n const option = resolveCascaderPath(params.context.get(\"options\"), path).at(-1); if (!option || option.leaf || option.disabled) return;\n invalidateLoad(params); const ticket = params.context.get(\"request\"), controller = new AbortController(); params.refs.set(\"controller\", controller); params.context.set(\"loadingPath\", path); params.context.set(\"errorPath\", []);\n Promise.resolve(loader({ option, path: [...path], signal: controller.signal })).then(\n children => { if (params.refs.get(\"active\") && !controller.signal.aborted) params.send({ type: \"LOAD.SUCCESS\", ticket, path, children }); },\n () => { if (params.refs.get(\"active\") && !controller.signal.aborted) params.send({ type: \"LOAD.ERROR\", ticket, path }); },\n );\n}\nfunction scheduleLoad(params: LoadParams, path: string[]): void {\n const ticket = params.context.get(\"request\");\n queueMicrotask(() => { if (params.refs.get(\"active\") && params.context.get(\"request\") === ticket) requestLoad(params, path); });\n}\nexport const cascaderMachine: QwCascaderMachine = createMachine<QwCascaderSchema>({\n props: ({ props }) => createCascaderProps({ ...props, options: props.options ?? [] }), initialState: () => \"idle\", states: { idle: {} },\n context: ({ bindable, prop }) => { const contextOptions = () => normalizeCascaderOptions(prop(\"options\") ?? []), options = contextOptions(), initial = normalizeCascaderValue(options, prop(\"defaultValue\") ?? []); return { value: bindable(() => ({ defaultValue: initial, value: prop(\"value\") === undefined ? undefined : normalizeCascaderValue(contextOptions(), prop(\"value\")), hash: (value) => value.join(\"\\u0000\") })), draft: bindable(() => ({ defaultValue: initial, hash: (value) => value.join(\"\\u0000\") })), options: bindable(() => ({ defaultValue: options, hash: JSON.stringify })), loadingPath: bindable<string[]>(() => ({ defaultValue: [], hash: (value) => value.join(\"/\") })), errorPath: bindable<string[]>(() => ({ defaultValue: [], hash: (value) => value.join(\"/\") })), request: bindable(() => ({ defaultValue: 0 })) }; },\n refs: () => ({ controller: null, active: false }), effects: [\"lifecycle\"],\n watch({ track, prop, send }) { track([() => JSON.stringify(prop(\"options\") ?? []), () => JSON.stringify(prop(\"value\"))], () => send({ type: \"PROPS.SYNC\" })); },\n on: { SELECT: { actions: [\"select\"] }, CANCEL: { actions: [\"cancel\"] }, CONFIRM: { actions: [\"confirm\"] }, \"LOAD.SUCCESS\": { actions: [\"loadSuccess\"] }, \"LOAD.ERROR\": { actions: [\"loadError\"] }, RETRY: { actions: [\"retry\"] }, \"PROPS.SYNC\": { actions: [\"sync\"] } },\n implementations: { actions: {\n select(params) { const { event, context } = params; if (event.type !== \"SELECT\") return; const columns = getCascaderColumns(context.get(\"options\"), context.get(\"draft\")), option = columns[event.depth]?.options.find((item) => item.value === event.value); if (!option || option.disabled) return; const path = [...context.get(\"draft\").slice(0, event.depth), option.value]; invalidateLoad(params); context.set(\"draft\", path); context.set(\"errorPath\", []); if (!option.leaf && !option.children?.length) scheduleLoad(params, path); },\n cancel(params) { invalidateLoad(params); params.context.set(\"draft\", [...params.context.get(\"value\")]); params.context.set(\"errorPath\", []); params.prop(\"onCancel\")?.(); },\n confirm({ context, prop }) { const value = [...context.get(\"draft\")], change = details(context.get(\"options\"), value); context.set(\"value\", value); prop(\"onValueChange\")?.(change); prop(\"onConfirm\")?.(change); },\n loadSuccess({ context, event, refs }) { if (event.type !== \"LOAD.SUCCESS\" || event.ticket !== context.get(\"request\")) return; refs.set(\"controller\", null); context.set(\"options\", updateCascaderChildren(context.get(\"options\"), event.path, normalizeCascaderOptions(event.children))); context.set(\"loadingPath\", []); },\n loadError({ context, event, refs }) { if (event.type !== \"LOAD.ERROR\" || event.ticket !== context.get(\"request\")) return; refs.set(\"controller\", null); context.set(\"loadingPath\", []); context.set(\"errorPath\", event.path); },\n retry(params) { const path = params.context.get(\"errorPath\"); if (path.length) scheduleLoad(params, path); },\n sync(params) { invalidateLoad(params); const options = normalizeCascaderOptions(params.prop(\"options\") ?? []); params.context.set(\"options\", options); const ownerValue = params.prop(\"value\"); params.context.set(\"draft\", normalizeCascaderValue(options, ownerValue === undefined ? params.context.get(\"draft\") : ownerValue)); params.context.set(\"errorPath\", []); },\n }, effects: { lifecycle({ refs }) { refs.set(\"active\", true); return () => { refs.set(\"active\", false); refs.get(\"controller\")?.abort(); refs.set(\"controller\", null); }; } } },\n});\nexport interface QwCascaderApi<T extends PropTypes = PropTypes> { value: string[]; draft: string[]; labels: string[]; columns: CascaderColumn[]; loading: boolean; error: boolean; select(depth: number, value: string): void; retry(): void; cancel(): void; confirm(): void; getRootProps(): T[\"element\"]; getLabelProps(): T[\"element\"]; getColumnsProps(): T[\"element\"]; getColumnProps(column: CascaderColumn): T[\"element\"]; getOptionProps(column: CascaderColumn, option: CascaderOption): T[\"button\"]; getStatusProps(): T[\"element\"]; getRetryTriggerProps(): T[\"button\"]; getActionsProps(): T[\"element\"]; getCancelTriggerProps(): T[\"button\"]; getConfirmTriggerProps(): T[\"button\"]; getOutputProps(): T[\"element\"] }\nexport function connectCascader<T extends PropTypes>(service: QwCascaderService, normalize: NormalizeProps<T>): QwCascaderApi<T> { const options = service.context.get(\"options\"), value = service.context.get(\"value\"), draft = service.context.get(\"draft\"), columns = getCascaderColumns(options, draft), loading = service.context.get(\"loadingPath\").length > 0, error = service.context.get(\"errorPath\").length > 0, part = (name: string) => ({ \"data-scope\": \"cascader\", \"data-part\": name }); return { value, draft, columns, labels: getCascaderLabels(options, draft), loading, error, select: (depth, option) => service.send({ type: \"SELECT\", depth, value: option }), retry: () => service.send({ type: \"RETRY\" }), cancel: () => service.send({ type: \"CANCEL\" }), confirm: () => service.send({ type: \"CONFIRM\" }), getRootProps: () => normalize.element({ ...part(\"root\"), dir: service.prop(\"dir\") }), getLabelProps: () => normalize.element(part(\"label\")), getColumnsProps: () => normalize.element(part(\"columns\")), getColumnProps: (column) => normalize.element({ ...part(\"column\"), role: \"listbox\", \"aria-label\": `第 ${column.depth + 1} 级`, \"aria-orientation\": \"vertical\" }), getOptionProps: (column, option) => normalize.button({ ...part(\"option\"), type: \"button\", role: \"option\", disabled: option.disabled, \"aria-selected\": column.selected === option.value, \"data-selected\": dataAttr(column.selected === option.value), onClick: () => service.send({ type: \"SELECT\", depth: column.depth, value: option.value }), onKeyDown(event) { if ((service.prop(\"dir\") === \"rtl\" ? event.key === \"ArrowLeft\" : event.key === \"ArrowRight\") && option.children?.length) { event.preventDefault(); service.send({ type: \"SELECT\", depth: column.depth, value: option.value }); } } }), getStatusProps: () => normalize.element({ ...part(\"status\"), role: error ? \"alert\" : \"status\", hidden: !loading && !error }), getRetryTriggerProps: () => normalize.button({ ...part(\"retry-trigger\"), type: \"button\", hidden: !error, onClick: () => service.send({ type: \"RETRY\" }) }), getActionsProps: () => normalize.element(part(\"actions\")), getCancelTriggerProps: () => normalize.button({ ...part(\"cancel-trigger\"), type: \"button\", onClick: () => service.send({ type: \"CANCEL\" }) }), getConfirmTriggerProps: () => normalize.button({ ...part(\"confirm-trigger\"), type: \"button\", onClick: () => service.send({ type: \"CONFIRM\" }) }), getOutputProps: () => normalize.element({ ...part(\"output\"), \"aria-live\": \"polite\" }) }; }\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Native information row contract, shared by all adapters. */
|
|
2
|
+
export declare const CELL_KINDS: readonly ["display", "action", "link"];
|
|
3
|
+
export type CellKind = (typeof CELL_KINDS)[number];
|
|
4
|
+
export interface QwCellProps {
|
|
5
|
+
/** Main text and accessible content. */
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
value?: string;
|
|
9
|
+
/** Native div, button or anchor semantics. Default: display. */
|
|
10
|
+
kind?: CellKind;
|
|
11
|
+
href?: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
/** Defaults to true for action/link rows. */
|
|
14
|
+
arrow?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ResolvedCellState {
|
|
17
|
+
tag: "div" | "button" | "a";
|
|
18
|
+
kind: CellKind;
|
|
19
|
+
disabled: boolean;
|
|
20
|
+
arrow: boolean;
|
|
21
|
+
href?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface CellRootProps {
|
|
24
|
+
"data-scope": "cell";
|
|
25
|
+
"data-part": "root";
|
|
26
|
+
"data-kind": CellKind;
|
|
27
|
+
"data-disabled"?: "true";
|
|
28
|
+
type?: "button";
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
href?: string;
|
|
31
|
+
"aria-disabled"?: true;
|
|
32
|
+
tabIndex?: -1;
|
|
33
|
+
onClick?: (event: CellActivationEvent) => void;
|
|
34
|
+
}
|
|
35
|
+
/** Minimal event surface keeps Core independent of DOM and framework event types. */
|
|
36
|
+
export interface CellActivationEvent {
|
|
37
|
+
preventDefault(): void;
|
|
38
|
+
stopPropagation(): void;
|
|
39
|
+
}
|
|
40
|
+
export declare function resolveCellState(props: QwCellProps): ResolvedCellState;
|
|
41
|
+
export declare function getCellRootProps(state: ResolvedCellState): CellRootProps;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./cell.js";
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/cell/cell.ts
|
|
2
|
+
/** Native information row contract, shared by all adapters. */
|
|
3
|
+
const CELL_KINDS = [
|
|
4
|
+
"display",
|
|
5
|
+
"action",
|
|
6
|
+
"link"
|
|
7
|
+
];
|
|
8
|
+
function preventDisabledLink(event) {
|
|
9
|
+
event.preventDefault();
|
|
10
|
+
event.stopPropagation();
|
|
11
|
+
}
|
|
12
|
+
function resolveCellState(props) {
|
|
13
|
+
const kind = props.kind ?? "display";
|
|
14
|
+
return {
|
|
15
|
+
tag: kind === "action" ? "button" : kind === "link" ? "a" : "div",
|
|
16
|
+
kind,
|
|
17
|
+
disabled: props.disabled ?? false,
|
|
18
|
+
arrow: props.arrow ?? kind !== "display",
|
|
19
|
+
href: props.href
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function getCellRootProps(state) {
|
|
23
|
+
return {
|
|
24
|
+
"data-scope": "cell",
|
|
25
|
+
"data-part": "root",
|
|
26
|
+
"data-kind": state.kind,
|
|
27
|
+
...state.disabled ? { "data-disabled": "true" } : {},
|
|
28
|
+
...state.kind === "action" ? {
|
|
29
|
+
type: "button",
|
|
30
|
+
disabled: state.disabled
|
|
31
|
+
} : {},
|
|
32
|
+
...state.kind === "link" && !state.disabled && state.href ? { href: state.href } : {},
|
|
33
|
+
...state.kind === "link" && state.disabled ? {
|
|
34
|
+
"aria-disabled": true,
|
|
35
|
+
tabIndex: -1,
|
|
36
|
+
onClick: preventDisabledLink
|
|
37
|
+
} : {}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { CELL_KINDS, getCellRootProps, resolveCellState };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/cell/cell.ts"],"sourcesContent":["/** Native information row contract, shared by all adapters. */\nexport const CELL_KINDS = [\"display\", \"action\", \"link\"] as const;\nexport type CellKind = (typeof CELL_KINDS)[number];\nexport interface QwCellProps {\n /** Main text and accessible content. */\n title: string;\n description?: string;\n value?: string;\n /** Native div, button or anchor semantics. Default: display. */\n kind?: CellKind;\n href?: string;\n disabled?: boolean;\n /** Defaults to true for action/link rows. */\n arrow?: boolean;\n}\nexport interface ResolvedCellState {\n tag: \"div\" | \"button\" | \"a\";\n kind: CellKind;\n disabled: boolean;\n arrow: boolean;\n href?: string;\n}\nexport interface CellRootProps {\n \"data-scope\": \"cell\";\n \"data-part\": \"root\";\n \"data-kind\": CellKind;\n \"data-disabled\"?: \"true\";\n type?: \"button\";\n disabled?: boolean;\n href?: string;\n \"aria-disabled\"?: true;\n tabIndex?: -1;\n onClick?: (event: CellActivationEvent) => void;\n}\n/** Minimal event surface keeps Core independent of DOM and framework event types. */\nexport interface CellActivationEvent {\n preventDefault(): void;\n stopPropagation(): void;\n}\nfunction preventDisabledLink(event: CellActivationEvent): void {\n event.preventDefault();\n event.stopPropagation();\n}\nexport function resolveCellState(props: QwCellProps): ResolvedCellState {\n const kind = props.kind ?? \"display\";\n return {\n tag: kind === \"action\" ? \"button\" : kind === \"link\" ? \"a\" : \"div\",\n kind,\n disabled: props.disabled ?? false,\n arrow: props.arrow ?? kind !== \"display\",\n href: props.href,\n };\n}\nexport function getCellRootProps(state: ResolvedCellState): CellRootProps {\n return {\n \"data-scope\": \"cell\", \"data-part\": \"root\", \"data-kind\": state.kind,\n ...(state.disabled ? { \"data-disabled\": \"true\" as const } : {}),\n ...(state.kind === \"action\" ? { type: \"button\" as const, disabled: state.disabled } : {}),\n ...(state.kind === \"link\" && !state.disabled && state.href ? { href: state.href } : {}),\n ...(state.kind === \"link\" && state.disabled ? { \"aria-disabled\": true as const, tabIndex: -1 as const, onClick: preventDisabledLink } : {}),\n };\n}\n"],"mappings":";;AACA,MAAa,aAAa;CAAC;CAAW;CAAU;AAAM;AAsCtD,SAAS,oBAAoB,OAAkC;CAC7D,MAAM,eAAe;CACrB,MAAM,gBAAgB;AACxB;AACA,SAAgB,iBAAiB,OAAuC;CACtE,MAAM,OAAO,MAAM,QAAQ;CAC3B,OAAO;EACL,KAAK,SAAS,WAAW,WAAW,SAAS,SAAS,MAAM;EAC5D;EACA,UAAU,MAAM,YAAY;EAC5B,OAAO,MAAM,SAAS,SAAS;EAC/B,MAAM,MAAM;CACd;AACF;AACA,SAAgB,iBAAiB,OAAyC;CACxE,OAAO;EACL,cAAc;EAAQ,aAAa;EAAQ,aAAa,MAAM;EAC9D,GAAI,MAAM,WAAW,EAAE,iBAAiB,OAAgB,IAAI,CAAC;EAC7D,GAAI,MAAM,SAAS,WAAW;GAAE,MAAM;GAAmB,UAAU,MAAM;EAAS,IAAI,CAAC;EACvF,GAAI,MAAM,SAAS,UAAU,CAAC,MAAM,YAAY,MAAM,OAAO,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;EACrF,GAAI,MAAM,SAAS,UAAU,MAAM,WAAW;GAAE,iBAAiB;GAAe,UAAU;GAAa,SAAS;EAAoB,IAAI,CAAC;CAC3I;AACF"}
|