pxd 0.0.64 → 0.1.2
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 -10
- package/dist/components/_internal/calendar-day.d.vue.ts +33 -0
- package/dist/components/_internal/calendar-day.vue +85 -0
- package/dist/components/_internal/dismiss-container.vue +68 -121
- package/dist/components/_internal/fragment-container.vue +3 -3
- package/dist/components/_internal/loading-mask.d.vue.ts +8 -0
- package/dist/components/_internal/loading-mask.vue +25 -0
- package/dist/components/_internal/mention-editor.d.vue.ts +42 -0
- package/dist/components/_internal/mention-editor.vue +114 -0
- package/dist/components/_internal/popover-arrow.vue +8 -5
- package/dist/components/_internal/tree-node.d.vue.ts +72 -0
- package/dist/components/_internal/tree-node.vue +260 -0
- package/dist/components/active-graph/index.d.vue.ts +2 -2
- package/dist/components/active-graph/index.vue +381 -239
- package/dist/components/active-graph/types.d.ts +2 -1
- package/dist/components/approval-card/index.d.vue.ts +28 -0
- package/dist/components/approval-card/index.vue +235 -0
- package/dist/components/approval-card/types.d.ts +37 -0
- package/dist/components/avatar/index.d.vue.ts +2 -2
- package/dist/components/avatar/index.vue +43 -72
- package/dist/components/avatar-group/index.d.vue.ts +1 -1
- package/dist/components/avatar-group/index.vue +38 -25
- package/dist/components/backtop/index.d.vue.ts +10 -3
- package/dist/components/backtop/index.vue +97 -54
- package/dist/components/backtop/types.d.ts +10 -3
- package/dist/components/badge/index.d.vue.ts +6 -3
- package/dist/components/badge/index.vue +126 -79
- package/dist/components/badge/types.d.ts +3 -2
- package/dist/components/book/index.vue +57 -162
- package/dist/components/border-beam/index.d.vue.ts +18 -0
- package/dist/components/border-beam/index.vue +64 -0
- package/dist/components/border-beam/types.d.ts +8 -0
- package/dist/components/{resizable-panel → breadcrumb}/index.d.vue.ts +3 -4
- package/dist/components/breadcrumb/index.vue +32 -0
- package/dist/components/breadcrumb/types.d.ts +6 -0
- package/dist/components/breadcrumb-item/index.d.vue.ts +16 -0
- package/dist/components/breadcrumb-item/index.vue +50 -0
- package/dist/components/breadcrumb-item/types.d.ts +4 -0
- package/dist/components/browser/index.d.vue.ts +2 -2
- package/dist/components/browser/index.vue +13 -28
- package/dist/components/bubble/index.d.vue.ts +6 -3
- package/dist/components/bubble/index.vue +85 -18
- package/dist/components/bubble/types.d.ts +3 -1
- package/dist/components/bubble-group/index.d.vue.ts +19 -0
- package/dist/components/bubble-group/index.vue +86 -0
- package/dist/components/bubble-group/types.d.ts +6 -0
- package/dist/components/bubble-group/types.js +0 -0
- package/dist/components/button/index.d.vue.ts +2 -1
- package/dist/components/button/index.vue +121 -86
- package/dist/components/button-group/index.vue +20 -7
- package/dist/components/calendar/index.d.vue.ts +41 -0
- package/dist/components/calendar/index.vue +247 -0
- package/dist/components/calendar/types.d.ts +37 -0
- package/dist/components/card/index.d.vue.ts +21 -0
- package/dist/components/card/index.vue +47 -0
- package/dist/components/card/types.d.ts +6 -0
- package/dist/components/carousel/index.d.vue.ts +8 -4
- package/dist/components/carousel/index.vue +232 -283
- package/dist/components/carousel/types.d.ts +15 -1
- package/dist/components/checkbox/index.d.vue.ts +6 -5
- package/dist/components/checkbox/index.vue +107 -90
- package/dist/components/checkbox/types.d.ts +6 -4
- package/dist/components/checkbox-group/index.d.vue.ts +6 -6
- package/dist/components/checkbox-group/index.vue +26 -11
- package/dist/components/checkbox-group/types.d.ts +3 -1
- package/dist/components/checkerboard/index.d.vue.ts +14 -0
- package/dist/components/checkerboard/index.vue +37 -0
- package/dist/components/checkerboard/types.d.ts +5 -0
- package/dist/components/chip/index.d.vue.ts +3 -1
- package/dist/components/chip/index.vue +49 -46
- package/dist/components/choicebox/index.d.vue.ts +7 -7
- package/dist/components/choicebox/index.vue +52 -30
- package/dist/components/choicebox-item/index.d.vue.ts +7 -5
- package/dist/components/choicebox-item/index.vue +172 -53
- package/dist/components/choicebox-item/types.d.ts +3 -7
- package/dist/components/collapse/index.d.vue.ts +2 -2
- package/dist/components/collapse/index.vue +72 -98
- package/dist/components/collapse-group/index.vue +43 -32
- package/dist/components/color-selector/index.vue +45 -41
- package/dist/components/command-menu/index.d.vue.ts +10 -7
- package/dist/components/command-menu/index.vue +103 -45
- package/dist/components/command-menu/types.d.ts +3 -2
- package/dist/components/config-provider/index.d.vue.ts +77 -3
- package/dist/components/config-provider/index.vue +54 -11
- package/dist/components/config-provider/types.d.ts +5 -3
- package/dist/components/copy-button/index.d.vue.ts +24 -0
- package/dist/components/copy-button/index.vue +40 -0
- package/dist/components/copy-button/types.d.ts +7 -0
- package/dist/components/countdown/index.d.vue.ts +1 -1
- package/dist/components/countdown/index.vue +77 -29
- package/dist/components/dash-line/index.d.vue.ts +2 -1
- package/dist/components/dash-line/index.vue +78 -76
- package/dist/components/date-picker/index.d.vue.ts +16 -0
- package/dist/components/date-picker/index.vue +295 -0
- package/dist/components/date-picker/types.d.ts +20 -0
- package/dist/components/description/index.vue +16 -7
- package/dist/components/drawer/index.d.vue.ts +5 -5
- package/dist/components/drawer/index.vue +138 -67
- package/dist/components/drawer/types.d.ts +1 -0
- package/dist/components/effort-slider/index.d.vue.ts +10 -0
- package/dist/components/effort-slider/index.vue +347 -0
- package/dist/components/effort-slider/types.d.ts +14 -0
- package/dist/components/ellipsis-text/index.d.vue.ts +1 -1
- package/dist/components/ellipsis-text/index.vue +208 -165
- package/dist/components/empty-state/index.vue +11 -4
- package/dist/components/error/index.d.vue.ts +3 -1
- package/dist/components/error/index.vue +42 -28
- package/dist/components/error/types.d.ts +1 -0
- package/dist/components/fader/index.d.vue.ts +1 -1
- package/dist/components/fader/index.vue +56 -112
- package/dist/components/fader/types.d.ts +2 -1
- package/dist/components/feedback-bar/index.d.vue.ts +12 -0
- package/dist/components/feedback-bar/index.vue +81 -0
- package/dist/components/feedback-bar/types.d.ts +9 -0
- package/dist/components/gauge/index.vue +89 -69
- package/dist/components/grid/index.vue +58 -52
- package/dist/components/grid-item/index.vue +44 -39
- package/dist/components/hold-button/index.vue +111 -115
- package/dist/components/hue-text/index.d.vue.ts +16 -0
- package/dist/components/hue-text/index.vue +48 -0
- package/dist/components/hue-text/types.d.ts +4 -0
- package/dist/components/index.d.ts +40 -5
- package/dist/components/index.js +40 -5
- package/dist/components/input/index.d.vue.ts +5 -4
- package/dist/components/input/index.vue +250 -134
- package/dist/components/input/types.d.ts +9 -6
- package/dist/components/intersection-observer/index.vue +65 -42
- package/dist/components/kbd/index.vue +45 -23
- package/dist/components/label/index.vue +7 -3
- package/dist/components/link-button/index.vue +49 -32
- package/dist/components/list/index.d.vue.ts +22 -14
- package/dist/components/list/index.vue +238 -77
- package/dist/components/list/types.d.ts +39 -11
- package/dist/components/list-group/index.d.vue.ts +4 -0
- package/dist/components/list-group/index.vue +22 -0
- package/dist/components/list-group/types.d.ts +5 -0
- package/dist/components/list-item/index.d.vue.ts +7 -7
- package/dist/components/list-item/index.vue +78 -76
- package/dist/components/list-item/types.d.ts +7 -4
- package/dist/components/loading-bar/index.vue +152 -145
- package/dist/components/loading-dots/index.d.vue.ts +1 -13
- package/dist/components/loading-dots/index.vue +13 -15
- package/dist/components/marching-ants/index.d.vue.ts +25 -0
- package/dist/components/marching-ants/index.vue +486 -0
- package/dist/components/marching-ants/types.d.ts +9 -0
- package/dist/components/marquee/index.d.vue.ts +37 -0
- package/dist/components/marquee/index.vue +242 -0
- package/dist/components/marquee/types.d.ts +18 -0
- package/dist/components/material/index.vue +22 -28
- package/dist/components/mention/index.d.vue.ts +38 -0
- package/dist/components/mention/index.vue +251 -0
- package/dist/components/mention/types.d.ts +35 -0
- package/dist/components/menu/index.d.vue.ts +17 -10
- package/dist/components/menu/index.vue +98 -27
- package/dist/components/menu/types.d.ts +7 -5
- package/dist/components/message/composables/use-group-expand.js +1 -1
- package/dist/components/message/composables/use-message-timer.js +2 -1
- package/dist/components/message/composables/use-promise-message.js +4 -4
- package/dist/components/message/index.d.vue.ts +7 -7
- package/dist/components/message/index.vue +141 -234
- package/dist/components/message-item/index.vue +50 -62
- package/dist/components/modal/index.d.vue.ts +4 -4
- package/dist/components/modal/index.vue +125 -63
- package/dist/components/modal/types.d.ts +1 -3
- package/dist/components/more-button/index.vue +25 -13
- package/dist/components/noise-background/index.d.vue.ts +0 -16
- package/dist/components/noise-background/index.vue +70 -9
- package/dist/components/noise-background/types.d.ts +4 -0
- package/dist/components/note/index.d.vue.ts +1 -1
- package/dist/components/note/index.vue +108 -98
- package/dist/components/note/types.d.ts +1 -0
- package/dist/components/number-input/index.d.vue.ts +1 -3
- package/dist/components/number-input/index.vue +196 -161
- package/dist/components/number-input/types.d.ts +1 -2
- package/dist/components/overlay/index.d.vue.ts +2 -2
- package/dist/components/overlay/index.vue +110 -68
- package/dist/components/page-number/index.d.vue.ts +18 -0
- package/dist/components/page-number/index.vue +232 -0
- package/dist/components/page-number/types.d.ts +18 -0
- package/dist/components/pagination/index.vue +14 -7
- package/dist/components/pin-input/index.d.vue.ts +2 -2
- package/dist/components/pin-input/index.vue +191 -173
- package/dist/components/placeholder/index.vue +22 -32
- package/dist/components/popover/index.d.vue.ts +0 -47
- package/dist/components/popover/index.vue +528 -345
- package/dist/components/popover/types.d.ts +7 -0
- package/dist/components/progress/index.d.vue.ts +2 -8
- package/dist/components/progress/index.vue +84 -62
- package/dist/components/progress/types.d.ts +0 -5
- package/dist/components/project-banner/index.d.vue.ts +3 -1
- package/dist/components/project-banner/index.vue +36 -34
- package/dist/components/project-banner/types.d.ts +1 -1
- package/dist/components/questionnaire/index.d.vue.ts +10 -0
- package/dist/components/questionnaire/index.vue +353 -0
- package/dist/components/questionnaire/types.d.ts +30 -0
- package/dist/components/radial-burst/index.d.vue.ts +14 -0
- package/dist/components/radial-burst/index.vue +53 -0
- package/dist/components/radial-burst/types.d.ts +5 -0
- package/dist/components/radio/index.d.vue.ts +4 -4
- package/dist/components/radio/index.vue +56 -74
- package/dist/components/radio-group/index.d.vue.ts +4 -4
- package/dist/components/radio-group/index.vue +26 -12
- package/dist/components/rating/index.d.vue.ts +17 -0
- package/dist/components/rating/index.vue +253 -0
- package/dist/components/rating/types.d.ts +18 -0
- package/dist/components/reasoning/index.d.vue.ts +16 -0
- package/dist/components/reasoning/index.vue +68 -0
- package/dist/components/reasoning/types.d.ts +3 -0
- package/dist/components/resizable/index.d.vue.ts +27 -4
- package/dist/components/resizable/index.vue +404 -158
- package/dist/components/resizable/types.d.ts +20 -13
- package/dist/components/resizable/utils.d.ts +4 -0
- package/dist/components/resizable/utils.js +10 -0
- package/dist/components/reveal/index.d.vue.ts +22 -0
- package/dist/components/reveal/index.vue +100 -0
- package/dist/components/reveal/types.d.ts +15 -0
- package/dist/components/rolling-number/index.d.vue.ts +17 -0
- package/dist/components/rolling-number/index.vue +252 -0
- package/dist/components/rolling-number/types.d.ts +11 -0
- package/dist/components/scalable-text/index.vue +113 -110
- package/dist/components/scroll-progress/index.d.vue.ts +22 -0
- package/dist/components/scroll-progress/index.vue +75 -0
- package/dist/components/scroll-progress/types.d.ts +9 -0
- package/dist/components/scroll-text/index.d.vue.ts +18 -0
- package/dist/components/scroll-text/index.vue +123 -0
- package/dist/components/scroll-text/types.d.ts +7 -0
- package/dist/components/scrollable/index.d.vue.ts +3 -3
- package/dist/components/scrollable/index.vue +281 -222
- package/dist/components/search-input/index.d.vue.ts +152 -0
- package/dist/components/search-input/index.vue +55 -0
- package/dist/components/search-input/types.d.ts +7 -0
- package/dist/components/select/index.d.vue.ts +33 -0
- package/dist/components/select/index.vue +134 -0
- package/dist/components/select/types.d.ts +23 -0
- package/dist/components/separator/index.vue +9 -6
- package/dist/components/shimmer-text/index.d.vue.ts +18 -0
- package/dist/components/shimmer-text/index.vue +216 -0
- package/dist/components/shimmer-text/types.d.ts +14 -0
- package/dist/components/skeleton/index.d.vue.ts +2 -2
- package/dist/components/skeleton/index.vue +59 -51
- package/dist/components/slider/index.d.vue.ts +2 -2
- package/dist/components/slider/index.vue +391 -261
- package/dist/components/slider/types.d.ts +3 -1
- package/dist/components/snippet/index.d.vue.ts +2 -1
- package/dist/components/snippet/index.vue +80 -69
- package/dist/components/snippet/types.d.ts +3 -3
- package/dist/components/spinner/index.vue +9 -8
- package/dist/components/spinner-dots/index.d.vue.ts +7 -0
- package/dist/components/spinner-dots/index.vue +232 -0
- package/dist/components/spinner-dots/types.d.ts +9 -0
- package/dist/components/split-button/index.d.vue.ts +31 -0
- package/dist/components/split-button/index.vue +93 -0
- package/dist/components/split-button/types.d.ts +18 -0
- package/dist/components/stack/index.d.vue.ts +1 -1
- package/dist/components/stack/index.vue +98 -84
- package/dist/components/status-dot/index.d.vue.ts +1 -1
- package/dist/components/status-dot/index.vue +34 -20
- package/dist/components/steps/index.d.vue.ts +28 -0
- package/dist/components/steps/index.vue +143 -0
- package/dist/components/steps/step-item.d.vue.ts +24 -0
- package/dist/components/steps/step-item.vue +86 -0
- package/dist/components/steps/types.d.ts +25 -0
- package/dist/components/stick-to-bottom/index.d.vue.ts +35 -0
- package/dist/components/stick-to-bottom/index.vue +78 -0
- package/dist/components/stick-to-bottom/types.d.ts +13 -0
- package/dist/components/swipe-cell/index.d.vue.ts +53 -0
- package/dist/components/swipe-cell/index.vue +412 -0
- package/dist/components/swipe-cell/instances.d.ts +7 -0
- package/dist/components/swipe-cell/instances.js +17 -0
- package/dist/components/swipe-cell/types.d.ts +52 -0
- package/dist/components/switch/index.d.vue.ts +1 -1
- package/dist/components/switch/index.vue +42 -21
- package/dist/components/switch-item/index.vue +36 -37
- package/dist/components/tabs/index.d.vue.ts +8 -6
- package/dist/components/tabs/index.vue +242 -196
- package/dist/components/tabs/tab-slot.d.ts +24 -0
- package/dist/components/tabs/tab-slot.js +13 -0
- package/dist/components/tabs/types.d.ts +11 -5
- package/dist/components/teleport/index.vue +69 -60
- package/dist/components/text/index.d.vue.ts +1 -1
- package/dist/components/text/index.vue +68 -57
- package/dist/components/textarea/index.d.vue.ts +7 -5
- package/dist/components/textarea/index.vue +148 -71
- package/dist/components/textarea/types.d.ts +5 -2
- package/dist/components/theme-switcher/index.d.vue.ts +2 -2
- package/dist/components/theme-switcher/index.vue +8 -12
- package/dist/components/time-picker/index.d.vue.ts +7 -8
- package/dist/components/time-picker/index.vue +246 -183
- package/dist/components/time-picker/types.d.ts +7 -7
- package/dist/components/timeline/index.d.vue.ts +6 -0
- package/dist/components/timeline/index.vue +52 -0
- package/dist/components/timeline/types.d.ts +6 -0
- package/dist/components/timeline-item/index.d.vue.ts +22 -0
- package/dist/components/timeline-item/index.vue +110 -0
- package/dist/components/timeline-item/types.d.ts +16 -0
- package/dist/components/toc/index.d.vue.ts +37 -0
- package/dist/components/toc/index.vue +199 -0
- package/dist/components/toc/types.d.ts +28 -0
- package/dist/components/todo-list/index.d.vue.ts +64 -0
- package/dist/components/todo-list/index.vue +357 -0
- package/dist/components/todo-list/types.d.ts +53 -0
- package/dist/components/toggle/index.d.vue.ts +6 -6
- package/dist/components/toggle/index.vue +92 -41
- package/dist/components/toggle/types.d.ts +1 -1
- package/dist/components/toggle-button/index.d.vue.ts +5 -5
- package/dist/components/toggle-button/index.vue +120 -84
- package/dist/components/toggle-button/types.d.ts +6 -4
- package/dist/components/toggle-button-group/index.d.vue.ts +7 -6
- package/dist/components/toggle-button-group/index.vue +63 -43
- package/dist/components/tool-call/index.d.vue.ts +6 -0
- package/dist/components/tool-call/index.vue +209 -0
- package/dist/components/tool-call/types.d.ts +8 -0
- package/dist/components/tooltip/index.d.vue.ts +5 -2
- package/dist/components/tooltip/index.vue +105 -50
- package/dist/components/tooltip/types.d.ts +1 -0
- package/dist/components/tree/index.d.vue.ts +108 -0
- package/dist/components/tree/index.vue +684 -0
- package/dist/components/tree/types.d.ts +126 -0
- package/dist/components/virtual-list/index.d.vue.ts +7 -9
- package/dist/components/virtual-list/index.vue +120 -54
- package/dist/components/virtual-list/types.d.ts +0 -1
- package/dist/composables/_internal/use-collapse-motion.d.ts +6 -0
- package/dist/composables/_internal/use-collapse-motion.js +85 -0
- package/dist/composables/{use-focus-trap.d.ts → _internal/use-focus-trap.d.ts} +2 -2
- package/dist/composables/_internal/use-focus-trap.js +64 -0
- package/dist/composables/{use-forward-ref-expose.js → _internal/use-forward-ref-expose.js} +1 -1
- package/dist/composables/_internal/use-list-filter.d.ts +15 -0
- package/dist/composables/_internal/use-list-filter.js +48 -0
- package/dist/composables/_internal/use-list-keyboard-controller.d.ts +21 -0
- package/dist/composables/_internal/use-list-keyboard-controller.js +27 -0
- package/dist/composables/_internal/use-list-navigation.d.ts +25 -0
- package/dist/composables/_internal/use-list-navigation.js +141 -0
- package/dist/composables/_internal/use-list-rows.d.ts +29 -0
- package/dist/composables/_internal/use-list-rows.js +58 -0
- package/dist/composables/_internal/use-list-selection.d.ts +23 -0
- package/dist/composables/_internal/use-list-selection.js +41 -0
- package/dist/composables/_internal/use-lock-scroll.js +57 -0
- package/dist/composables/_internal/use-mention-editor.d.ts +35 -0
- package/dist/composables/_internal/use-mention-editor.js +508 -0
- package/dist/composables/_internal/use-mention-suggest.d.ts +23 -0
- package/dist/composables/_internal/use-mention-suggest.js +113 -0
- package/dist/composables/{use-model-value.d.ts → _internal/use-model-value.d.ts} +1 -1
- package/dist/composables/_internal/use-model-value.js +13 -0
- package/dist/composables/_internal/use-motion-reduce.d.ts +6 -0
- package/dist/composables/_internal/use-motion-reduce.js +40 -0
- package/dist/composables/_internal/use-overlay-dialog.d.ts +25 -0
- package/dist/composables/_internal/use-overlay-dialog.js +25 -0
- package/dist/composables/{use-overlay-manager.js → _internal/use-overlay-manager.js} +2 -2
- package/dist/composables/{use-popover-responsive.js → _internal/use-popover-responsive.js} +1 -1
- package/dist/composables/_internal/use-selected-list-item.d.ts +6 -0
- package/dist/composables/_internal/use-selected-list-item.js +36 -0
- package/dist/composables/_internal/use-swipe-gesture.d.ts +88 -0
- package/dist/composables/_internal/use-swipe-gesture.js +345 -0
- package/dist/composables/_internal/use-tailwind-variant.d.ts +31 -0
- package/dist/composables/_internal/use-tailwind-variant.js +62 -0
- package/dist/composables/_internal/use-tree-drag.d.ts +23 -0
- package/dist/composables/_internal/use-tree-drag.js +196 -0
- package/dist/composables/_internal/use-tree-move.d.ts +20 -0
- package/dist/composables/_internal/use-tree-move.js +96 -0
- package/dist/composables/_internal/use-tree-rows.d.ts +46 -0
- package/dist/composables/_internal/use-tree-rows.js +101 -0
- package/dist/composables/_internal/use-tree-selection.d.ts +22 -0
- package/dist/composables/_internal/use-tree-selection.js +87 -0
- package/dist/composables/_internal/use-word-limit.d.ts +24 -0
- package/dist/composables/_internal/use-word-limit.js +36 -0
- package/dist/composables/index.d.ts +7 -10
- package/dist/composables/index.js +7 -10
- package/dist/composables/use-backoff-retry.d.ts +51 -0
- package/dist/composables/use-backoff-retry.js +116 -0
- package/dist/composables/use-color-scheme.js +28 -25
- package/dist/composables/use-copy-click.d.ts +2 -1
- package/dist/composables/use-copy-click.js +21 -18
- package/dist/composables/use-countdown.d.ts +0 -9
- package/dist/composables/use-countdown.js +12 -4
- package/dist/composables/use-deferred-value.js +1 -1
- package/dist/composables/use-delay-change.js +6 -2
- package/dist/composables/use-delay-destroy.d.ts +1 -1
- package/dist/composables/use-delay-destroy.js +16 -9
- package/dist/composables/use-intersection-observer.d.ts +6 -0
- package/dist/composables/use-intersection-observer.js +38 -0
- package/dist/composables/use-media-query.d.ts +0 -3
- package/dist/composables/use-media-query.js +19 -19
- package/dist/composables/use-mutation-observer.d.ts +6 -0
- package/dist/composables/use-mutation-observer.js +42 -0
- package/dist/composables/use-outside-click.d.ts +6 -4
- package/dist/composables/use-outside-click.js +18 -10
- package/dist/composables/use-repeat-action.js +31 -20
- package/dist/composables/use-resize-observer.d.ts +6 -0
- package/dist/composables/use-resize-observer.js +22 -0
- package/dist/composables/use-scrollspy.d.ts +15 -0
- package/dist/composables/use-scrollspy.js +98 -0
- package/dist/composables/use-stick-to-bottom.d.ts +32 -0
- package/dist/composables/use-stick-to-bottom.js +106 -0
- package/dist/composables/use-view-transition.d.ts +20 -0
- package/dist/composables/use-view-transition.js +79 -0
- package/dist/composables/use-virtual-list.d.ts +8 -5
- package/dist/composables/use-virtual-list.js +86 -19
- package/dist/contexts/breadcrumb.d.ts +2 -0
- package/dist/contexts/breadcrumb.js +2 -0
- package/dist/contexts/choicebox.d.ts +1 -0
- package/dist/contexts/config-provider.d.ts +3 -2
- package/dist/contexts/config-provider.js +4 -3
- package/dist/contexts/list.d.ts +4 -25
- package/dist/contexts/list.js +0 -8
- package/dist/locales/en-us.d.ts +56 -28
- package/dist/locales/en-us.js +56 -28
- package/dist/locales/index.d.ts +1 -0
- package/dist/locales/zh-cn.d.ts +55 -28
- package/dist/locales/zh-cn.js +69 -28
- package/dist/plugins/dayjs-millisecond-token.d.ts +2 -4
- package/dist/plugins/dayjs-millisecond-token.js +1 -2
- package/dist/styles/source.css +55 -20
- package/dist/styles/styles.css +2 -2
- package/dist/styles/tw.css +54 -20
- package/dist/types/shared/props.d.ts +5 -3
- package/dist/types/shared/utils.d.ts +7 -0
- package/dist/utils/context.js +2 -1
- package/dist/utils/date.d.ts +1 -15
- package/dist/utils/date.js +2 -11
- package/dist/utils/dom.d.ts +19 -21
- package/dist/utils/dom.js +57 -28
- package/dist/utils/event.d.ts +14 -2
- package/dist/utils/event.js +65 -27
- package/dist/utils/format.d.ts +5 -4
- package/dist/utils/format.js +33 -13
- package/dist/utils/fuzzy-match.d.ts +2 -0
- package/dist/utils/fuzzy-match.js +182 -0
- package/dist/utils/helper.d.ts +17 -0
- package/dist/utils/helper.js +57 -0
- package/dist/utils/is.d.ts +5 -1
- package/dist/utils/is.js +10 -2
- package/dist/utils/mention-html.d.ts +33 -0
- package/dist/utils/mention-html.js +146 -0
- package/dist/utils/merge.d.ts +1 -0
- package/dist/utils/merge.js +19 -0
- package/dist/utils/observer.d.ts +42 -0
- package/dist/utils/observer.js +173 -0
- package/dist/utils/timing.d.ts +19 -6
- package/dist/utils/timing.js +74 -16
- package/package.json +48 -37
- package/volar.d.ts +40 -5
- package/dist/components/carousel-item/index.d.vue.ts +0 -13
- package/dist/components/carousel-item/index.vue +0 -54
- package/dist/components/command-menu-group/index.d.vue.ts +0 -14
- package/dist/components/command-menu-group/index.vue +0 -31
- package/dist/components/command-menu-group/types.d.ts +0 -5
- package/dist/components/resizable-handle/index.d.vue.ts +0 -6
- package/dist/components/resizable-handle/index.vue +0 -116
- package/dist/components/resizable-panel/index.vue +0 -57
- package/dist/components/resizable-panel/types.d.ts +0 -4
- package/dist/components/tabs-item/index.d.vue.ts +0 -4
- package/dist/components/tabs-item/index.vue +0 -16
- package/dist/components/tabs-item/types.d.ts +0 -10
- package/dist/composables/use-browser-observer.d.ts +0 -12
- package/dist/composables/use-browser-observer.js +0 -74
- package/dist/composables/use-focus-trap.js +0 -54
- package/dist/composables/use-list-filter.d.ts +0 -11
- package/dist/composables/use-list-filter.js +0 -56
- package/dist/composables/use-list-navigation.d.ts +0 -27
- package/dist/composables/use-list-navigation.js +0 -159
- package/dist/composables/use-lock-scroll.js +0 -37
- package/dist/composables/use-model-value.js +0 -13
- package/dist/composables/use-swipe-gesture.d.ts +0 -65
- package/dist/composables/use-swipe-gesture.js +0 -98
- package/dist/contexts/carousel.d.ts +0 -14
- package/dist/contexts/carousel.js +0 -2
- package/dist/contexts/resizable.d.ts +0 -27
- package/dist/contexts/resizable.js +0 -2
- package/dist/contexts/tabs.d.ts +0 -15
- package/dist/contexts/tabs.js +0 -2
- package/dist/plugins/any-touch.d.ts +0 -213
- package/dist/plugins/any-touch.js +0 -592
- package/dist/utils/fuzzy-search.d.ts +0 -7
- package/dist/utils/fuzzy-search.js +0 -61
- package/dist/utils/get.d.ts +0 -9
- package/dist/utils/get.js +0 -55
- package/dist/utils/index.d.ts +0 -10
- package/dist/utils/index.js +0 -10
- package/dist/utils/ref.d.ts +0 -5
- package/dist/utils/ref.js +0 -8
- package/dist/utils/uid.d.ts +0 -1
- package/dist/utils/uid.js +0 -4
- /package/dist/composables/{use-forward-ref-expose.d.ts → _internal/use-forward-ref-expose.d.ts} +0 -0
- /package/dist/composables/{use-lock-scroll.d.ts → _internal/use-lock-scroll.d.ts} +0 -0
- /package/dist/composables/{use-overlay-manager.d.ts → _internal/use-overlay-manager.d.ts} +0 -0
- /package/dist/composables/{use-popover-responsive.d.ts → _internal/use-popover-responsive.d.ts} +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
interface OverlayDialogProps {
|
|
3
|
+
autoFocusElement?: string | boolean;
|
|
4
|
+
closeOnPressEscape?: boolean;
|
|
5
|
+
closeOnClickOverlay?: boolean;
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface OverlayDialogEmits {
|
|
9
|
+
(event: 'outside-click', ev: PointerEvent): void;
|
|
10
|
+
}
|
|
11
|
+
interface OverlayDialogOptions {
|
|
12
|
+
props: OverlayDialogProps;
|
|
13
|
+
emits: OverlayDialogEmits;
|
|
14
|
+
elementRef: Ref<HTMLElement | undefined>;
|
|
15
|
+
onClose: () => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Shared dialog (Modal/Drawer) behaviors: focus trap wiring and overlay
|
|
19
|
+
* click/escape close handlers.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useOverlayDialog({ props, emits, elementRef, onClose }: OverlayDialogOptions): {
|
|
22
|
+
closeOverlayIfNeed: () => void;
|
|
23
|
+
onOverlayClick: (ev: PointerEvent) => void;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { computed } from "vue";
|
|
2
|
+
import { isTruthyProp } from "../../utils/format.js";
|
|
3
|
+
import { useFocusTrap } from "./use-focus-trap.js";
|
|
4
|
+
export function useOverlayDialog({ props, emits, elementRef, onClose }) {
|
|
5
|
+
const focusTrapOptions = computed(() => ({
|
|
6
|
+
autoFocusElement: props.autoFocusElement,
|
|
7
|
+
escapeDeactivates: props.closeOnPressEscape,
|
|
8
|
+
clickOutsideDeactivates: props.closeOnClickOverlay
|
|
9
|
+
}));
|
|
10
|
+
useFocusTrap(elementRef, focusTrapOptions);
|
|
11
|
+
function closeOverlayIfNeed() {
|
|
12
|
+
if (isTruthyProp(props.loading)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
onClose();
|
|
16
|
+
}
|
|
17
|
+
function onOverlayClick(ev) {
|
|
18
|
+
emits("outside-click", ev);
|
|
19
|
+
if (!isTruthyProp(props.closeOnClickOverlay)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
closeOverlayIfNeed();
|
|
23
|
+
}
|
|
24
|
+
return { closeOverlayIfNeed, onOverlayClick };
|
|
25
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { onScopeDispose } from "vue";
|
|
2
|
-
import { cachedOff, cachedOn } from "
|
|
3
|
-
import { toValue } from "
|
|
2
|
+
import { cachedOff, cachedOn } from "../../utils/event.js";
|
|
3
|
+
import { toValue } from "../../utils/helper.js";
|
|
4
4
|
let isKeydownListening = false;
|
|
5
5
|
const overlayStack = [];
|
|
6
6
|
function getTopOverlay() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computed } from "vue";
|
|
2
|
-
import { PRESET_MEDIA_QUERIES, useMediaQuery } from "
|
|
2
|
+
import { PRESET_MEDIA_QUERIES, useMediaQuery } from "../use-media-query.js";
|
|
3
3
|
export function usePopoverResponsive() {
|
|
4
4
|
const isAdaptive = useMediaQuery(PRESET_MEDIA_QUERIES.IS_XS);
|
|
5
5
|
const responsiveClasses = computed(() => {
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ListOption, ListOptionEntry, ListOptionGroup, ListOptions, ListOptionSelected } from '../../components/list/types';
|
|
2
|
+
import type { MaybeRefOrGetter } from 'vue';
|
|
3
|
+
export declare function isListOptionGroup(option: ListOptionEntry): option is ListOptionGroup;
|
|
4
|
+
export declare function resolveOptionByValue(options: ListOptionEntry[], value: ListOptionSelected['value']): ListOption | null;
|
|
5
|
+
export declare function useSelectedListItems(options: MaybeRefOrGetter<ListOptions>, modelValue: MaybeRefOrGetter<unknown>): import("vue").ComputedRef<ListOption[]>;
|
|
6
|
+
export declare function useSelectedListItem(options: MaybeRefOrGetter<ListOptions>, modelValue: MaybeRefOrGetter<unknown>): import("vue").ComputedRef<ListOption>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { computed } from "vue";
|
|
2
|
+
import { toArray } from "../../utils/format.js";
|
|
3
|
+
import { toValue } from "../../utils/helper.js";
|
|
4
|
+
export function isListOptionGroup(option) {
|
|
5
|
+
return option.type === "group";
|
|
6
|
+
}
|
|
7
|
+
export function resolveOptionByValue(options, value) {
|
|
8
|
+
for (const entry of options) {
|
|
9
|
+
if (isListOptionGroup(entry)) {
|
|
10
|
+
const matchedOption = resolveOptionByValue(entry.options, value);
|
|
11
|
+
if (matchedOption) {
|
|
12
|
+
return matchedOption;
|
|
13
|
+
}
|
|
14
|
+
} else if (entry.value === value) {
|
|
15
|
+
return entry;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
function resolveSelectedListItems(options, modelValue) {
|
|
21
|
+
const selectedOptions = [];
|
|
22
|
+
for (const value of toArray(modelValue)) {
|
|
23
|
+
const matchedOption = resolveOptionByValue(options, value);
|
|
24
|
+
if (matchedOption) {
|
|
25
|
+
selectedOptions.push(matchedOption);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return selectedOptions;
|
|
29
|
+
}
|
|
30
|
+
export function useSelectedListItems(options, modelValue) {
|
|
31
|
+
return computed(() => resolveSelectedListItems(toValue(options) ?? [], toValue(modelValue)));
|
|
32
|
+
}
|
|
33
|
+
export function useSelectedListItem(options, modelValue) {
|
|
34
|
+
const selectedItems = useSelectedListItems(options, modelValue);
|
|
35
|
+
return computed(() => selectedItems.value[0] ?? null);
|
|
36
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { MaybeElementRef } from '../../types/shared';
|
|
2
|
+
import type { MaybeRefOrGetter } from 'vue';
|
|
3
|
+
export type SwipeDirection = 'left' | 'right' | 'top' | 'bottom';
|
|
4
|
+
export interface SwipePressState {
|
|
5
|
+
size: number;
|
|
6
|
+
/** The pointerdown event that opened the gesture. */
|
|
7
|
+
event: PointerEvent;
|
|
8
|
+
}
|
|
9
|
+
export interface SwipeFollowState {
|
|
10
|
+
/** Movement since the previous event along the active axis (px). */
|
|
11
|
+
delta: number;
|
|
12
|
+
/** Signed velocity (px / ms) since the previous event along the active axis. */
|
|
13
|
+
velocity: number;
|
|
14
|
+
/** `displacement / containerSize` signed ratio, typically in the range of -1 to 1. */
|
|
15
|
+
offset: number;
|
|
16
|
+
/** Signed displacement from the start point along the active axis (px). */
|
|
17
|
+
displacement: number;
|
|
18
|
+
/** The pointermove event that produced this sample. */
|
|
19
|
+
event: PointerEvent;
|
|
20
|
+
}
|
|
21
|
+
export interface SwipeReleaseState {
|
|
22
|
+
/** Whether the gesture qualified as a successful swipe (by velocity or distance). */
|
|
23
|
+
swiped: boolean;
|
|
24
|
+
/** Physical swipe direction. `undefined` when `swiped` is `false`. */
|
|
25
|
+
direction?: SwipeDirection;
|
|
26
|
+
/** Signed displacement at release along the active axis (px). */
|
|
27
|
+
displacement: number;
|
|
28
|
+
/** Signed velocity at release (px / ms). */
|
|
29
|
+
velocity: number;
|
|
30
|
+
/** Whether the gesture stayed on the target axis from the moment it was locked. */
|
|
31
|
+
axisLocked: boolean;
|
|
32
|
+
/** The pointerup or pointercancel event that ended the gesture. */
|
|
33
|
+
event: PointerEvent;
|
|
34
|
+
}
|
|
35
|
+
export interface SwipeTapState {
|
|
36
|
+
/** The pointerup event that ended the interaction. */
|
|
37
|
+
event: PointerEvent;
|
|
38
|
+
/**
|
|
39
|
+
* The pointerdown event that started it. A release that never became a pan can
|
|
40
|
+
* land on a different element, so hit-testing should use what the user pressed.
|
|
41
|
+
*/
|
|
42
|
+
startEvent: PointerEvent | null;
|
|
43
|
+
/**
|
|
44
|
+
* `true` when `beforeStart` discarded the gesture, `false` when the pointer
|
|
45
|
+
* simply never travelled far enough to be recognized.
|
|
46
|
+
*/
|
|
47
|
+
vetoed: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface SwipeGestureOptions {
|
|
50
|
+
disabled?: MaybeRefOrGetter<boolean>;
|
|
51
|
+
/** CSS selector for the drag handle element within the container. */
|
|
52
|
+
handleSelector?: string;
|
|
53
|
+
/** Swipe axis. Reactive; accepts a ref or getter. */
|
|
54
|
+
axis?: MaybeRefOrGetter<'horizontal' | 'vertical'>;
|
|
55
|
+
/** Minimum movement (px) before locking the gesture axis. */
|
|
56
|
+
axisLockThreshold?: number;
|
|
57
|
+
/** Main-axis movement must be at least this multiple of cross-axis movement. */
|
|
58
|
+
axisLockRatio?: number;
|
|
59
|
+
/** Minimum swipe distance (px) before movement events start. */
|
|
60
|
+
swipeThreshold?: number;
|
|
61
|
+
/** Fraction of the container size the finger must travel for a slow-drag swipe. */
|
|
62
|
+
distanceThreshold?: number;
|
|
63
|
+
/** Minimum absolute velocity (px / ms) for a quick-flick swipe. */
|
|
64
|
+
velocityThreshold?: number;
|
|
65
|
+
/**
|
|
66
|
+
* Gate evaluated once the gesture is recognized. Resolving `false` discards the
|
|
67
|
+
* gesture: `onFollow` never fires and the release is reported through `onTap`
|
|
68
|
+
* with `vetoed: true`. Movement arriving while a promise is pending is dropped,
|
|
69
|
+
* and a release inside that window waits for the verdict.
|
|
70
|
+
*/
|
|
71
|
+
beforeStart?: (state: SwipePressState) => boolean | Promise<boolean>;
|
|
72
|
+
onPress?: (state: SwipePressState) => void;
|
|
73
|
+
onFollow?: (state: SwipeFollowState) => void;
|
|
74
|
+
/**
|
|
75
|
+
* Receives the raw release metrics. `swiped` and `direction` follow
|
|
76
|
+
* `distanceThreshold` / `velocityThreshold` against the container size; consumers
|
|
77
|
+
* that measure against something else decide from `displacement` themselves.
|
|
78
|
+
*/
|
|
79
|
+
onRelease?: (state: SwipeReleaseState) => void;
|
|
80
|
+
/**
|
|
81
|
+
* Called on release when no swipe was ever recognized: the pointer travelled less
|
|
82
|
+
* than `swipeThreshold`, or `beforeStart` discarded it.
|
|
83
|
+
*/
|
|
84
|
+
onTap?: (state: SwipeTapState) => void;
|
|
85
|
+
}
|
|
86
|
+
export declare function useSwipeGesture(containerRef: MaybeElementRef<HTMLElement>, options?: SwipeGestureOptions): {
|
|
87
|
+
stop: () => void;
|
|
88
|
+
};
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
import { nextTick, onScopeDispose, watch } from "vue";
|
|
2
|
+
import { getElement } from "../../utils/dom.js";
|
|
3
|
+
import { toValue } from "../../utils/helper.js";
|
|
4
|
+
function isThenable(value) {
|
|
5
|
+
return typeof value === "object" && value !== null && typeof value.then === "function";
|
|
6
|
+
}
|
|
7
|
+
export function useSwipeGesture(containerRef, options = {}) {
|
|
8
|
+
const {
|
|
9
|
+
handleSelector,
|
|
10
|
+
axisLockThreshold = 0,
|
|
11
|
+
axisLockRatio = 1,
|
|
12
|
+
distanceThreshold = 0.35,
|
|
13
|
+
velocityThreshold = 0.3,
|
|
14
|
+
swipeThreshold = 10,
|
|
15
|
+
beforeStart,
|
|
16
|
+
onPress,
|
|
17
|
+
onFollow,
|
|
18
|
+
onRelease,
|
|
19
|
+
onTap
|
|
20
|
+
} = options;
|
|
21
|
+
let recognizer = null;
|
|
22
|
+
let stopped = false;
|
|
23
|
+
function isHorizontal() {
|
|
24
|
+
return (toValue(options.axis) ?? "horizontal") === "horizontal";
|
|
25
|
+
}
|
|
26
|
+
function getAxisValue(event, horizontal) {
|
|
27
|
+
return horizontal ? {
|
|
28
|
+
displacement: event.displacementX,
|
|
29
|
+
crossDisplacement: event.displacementY,
|
|
30
|
+
delta: event.deltaX,
|
|
31
|
+
velocity: event.velocityX
|
|
32
|
+
} : {
|
|
33
|
+
displacement: event.displacementY,
|
|
34
|
+
crossDisplacement: event.displacementX,
|
|
35
|
+
delta: event.deltaY,
|
|
36
|
+
velocity: event.velocityY
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function resolveDirection(displacement, horizontal) {
|
|
40
|
+
return horizontal ? displacement > 0 ? "right" : "left" : displacement > 0 ? "bottom" : "top";
|
|
41
|
+
}
|
|
42
|
+
function resolveAxisLock(event, horizontal) {
|
|
43
|
+
const { displacement, crossDisplacement } = getAxisValue(event, horizontal);
|
|
44
|
+
const mainDistance = Math.abs(displacement);
|
|
45
|
+
const crossDistance = Math.abs(crossDisplacement);
|
|
46
|
+
if (Math.hypot(mainDistance, crossDistance) < axisLockThreshold) {
|
|
47
|
+
return "pending";
|
|
48
|
+
}
|
|
49
|
+
return mainDistance >= crossDistance * axisLockRatio ? "accepted" : "rejected";
|
|
50
|
+
}
|
|
51
|
+
function getTouchAction() {
|
|
52
|
+
return isHorizontal() ? "pan-y" : "pan-x";
|
|
53
|
+
}
|
|
54
|
+
function bind() {
|
|
55
|
+
const container = getElement(containerRef);
|
|
56
|
+
if (!container) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
unbind();
|
|
60
|
+
const handle = handleSelector ? container.querySelector(handleSelector) : container;
|
|
61
|
+
if (!handle) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
let containerSize = 0;
|
|
65
|
+
let axisLockState = "pending";
|
|
66
|
+
let startVerdict = "pending";
|
|
67
|
+
let startGate = null;
|
|
68
|
+
let released = false;
|
|
69
|
+
function resetGesture() {
|
|
70
|
+
axisLockState = "pending";
|
|
71
|
+
startVerdict = "pending";
|
|
72
|
+
startGate = null;
|
|
73
|
+
}
|
|
74
|
+
function emitTap(event, startEvent) {
|
|
75
|
+
const verdict = startVerdict;
|
|
76
|
+
const gate = startGate;
|
|
77
|
+
if (!onTap) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (verdict === "pending" && gate) {
|
|
81
|
+
void gate.then((allowed) => onTap?.({ event, startEvent, vetoed: !allowed }));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
onTap({ event, startEvent, vetoed: verdict === "vetoed" });
|
|
85
|
+
}
|
|
86
|
+
function resolveStart(event) {
|
|
87
|
+
const state = { size: containerSize, event };
|
|
88
|
+
if (!beforeStart) {
|
|
89
|
+
startVerdict = "allowed";
|
|
90
|
+
onPress?.(state);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const verdict = beforeStart(state);
|
|
94
|
+
if (isThenable(verdict)) {
|
|
95
|
+
startGate = verdict;
|
|
96
|
+
void verdict.then((allowed) => {
|
|
97
|
+
if (released) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
startVerdict = allowed ? "allowed" : "vetoed";
|
|
101
|
+
if (startVerdict === "allowed") {
|
|
102
|
+
onPress?.(state);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
startVerdict = verdict ? "allowed" : "vetoed";
|
|
108
|
+
if (startVerdict === "allowed") {
|
|
109
|
+
onPress?.(state);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
recognizer = new PointerSwipeRecognizer(handle, {
|
|
113
|
+
threshold: swipeThreshold,
|
|
114
|
+
touchAction: getTouchAction(),
|
|
115
|
+
onStart: (event) => {
|
|
116
|
+
axisLockState = "pending";
|
|
117
|
+
released = false;
|
|
118
|
+
containerSize = isHorizontal() ? container.offsetWidth : container.offsetHeight;
|
|
119
|
+
resolveStart(event.event);
|
|
120
|
+
},
|
|
121
|
+
onMove: (event) => {
|
|
122
|
+
if (startVerdict !== "allowed") {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const h = isHorizontal();
|
|
126
|
+
if (axisLockState === "pending") {
|
|
127
|
+
axisLockState = resolveAxisLock(event, h);
|
|
128
|
+
}
|
|
129
|
+
if (axisLockState !== "accepted") {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const { displacement, delta, velocity } = getAxisValue(event, h);
|
|
133
|
+
onFollow?.({
|
|
134
|
+
delta,
|
|
135
|
+
velocity,
|
|
136
|
+
displacement,
|
|
137
|
+
offset: containerSize > 0 ? displacement / containerSize : 0,
|
|
138
|
+
event: event.event
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
onEnd: (event) => {
|
|
142
|
+
released = true;
|
|
143
|
+
if (startVerdict !== "allowed") {
|
|
144
|
+
emitTap(event.event, event.startEvent);
|
|
145
|
+
resetGesture();
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const h = isHorizontal();
|
|
149
|
+
if (axisLockState === "pending") {
|
|
150
|
+
axisLockState = resolveAxisLock(event, h);
|
|
151
|
+
}
|
|
152
|
+
const { displacement, velocity } = getAxisValue(event, h);
|
|
153
|
+
const axisLocked = axisLockState === "accepted";
|
|
154
|
+
const swiped = axisLocked && containerSize > 0 && displacement !== 0 && (Math.abs(velocity) >= velocityThreshold || Math.abs(displacement) / containerSize >= distanceThreshold);
|
|
155
|
+
onRelease?.({
|
|
156
|
+
swiped,
|
|
157
|
+
direction: swiped ? resolveDirection(displacement, h) : void 0,
|
|
158
|
+
displacement,
|
|
159
|
+
velocity,
|
|
160
|
+
axisLocked,
|
|
161
|
+
event: event.event
|
|
162
|
+
});
|
|
163
|
+
resetGesture();
|
|
164
|
+
},
|
|
165
|
+
onIdle: (event, startEvent) => {
|
|
166
|
+
released = true;
|
|
167
|
+
emitTap(event, startEvent);
|
|
168
|
+
resetGesture();
|
|
169
|
+
},
|
|
170
|
+
onCancel: (event) => {
|
|
171
|
+
released = true;
|
|
172
|
+
onRelease?.({
|
|
173
|
+
swiped: false,
|
|
174
|
+
displacement: 0,
|
|
175
|
+
velocity: 0,
|
|
176
|
+
axisLocked: false,
|
|
177
|
+
event
|
|
178
|
+
});
|
|
179
|
+
resetGesture();
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
function unbind() {
|
|
184
|
+
recognizer?.destroy();
|
|
185
|
+
recognizer = null;
|
|
186
|
+
}
|
|
187
|
+
function stop() {
|
|
188
|
+
stopped = true;
|
|
189
|
+
unwatch();
|
|
190
|
+
unbind();
|
|
191
|
+
}
|
|
192
|
+
const unwatch = watch(
|
|
193
|
+
() => [getElement(containerRef), toValue(options.disabled), toValue(options.axis)],
|
|
194
|
+
async ([el, disabled]) => {
|
|
195
|
+
if (!el || disabled) {
|
|
196
|
+
unbind();
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
await nextTick();
|
|
200
|
+
if (stopped || getElement(containerRef) !== el || toValue(options.disabled)) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
bind();
|
|
204
|
+
},
|
|
205
|
+
{ immediate: true, flush: "post" }
|
|
206
|
+
);
|
|
207
|
+
onScopeDispose(() => {
|
|
208
|
+
stop();
|
|
209
|
+
});
|
|
210
|
+
return {
|
|
211
|
+
stop
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function getPointerPoint(event) {
|
|
215
|
+
return { x: event.clientX, y: event.clientY };
|
|
216
|
+
}
|
|
217
|
+
class PointerSwipeRecognizer {
|
|
218
|
+
constructor(el, options = {}) {
|
|
219
|
+
this.el = el;
|
|
220
|
+
this.options = options;
|
|
221
|
+
;
|
|
222
|
+
el.style.webkitTapHighlightColor = "rgba(0,0,0,0)";
|
|
223
|
+
this.originalTouchAction = el.style.touchAction;
|
|
224
|
+
el.style.touchAction = options.touchAction ?? "none";
|
|
225
|
+
this.cleanup = this.bindEvents(el);
|
|
226
|
+
}
|
|
227
|
+
cleanup = null;
|
|
228
|
+
startPoint = null;
|
|
229
|
+
previousPoint = null;
|
|
230
|
+
previousTime = 0;
|
|
231
|
+
lastVelocity = { x: 0, y: 0 };
|
|
232
|
+
activePointerId = null;
|
|
233
|
+
hasRecognizedPan = false;
|
|
234
|
+
startEvent = null;
|
|
235
|
+
originalTouchAction = "";
|
|
236
|
+
destroy() {
|
|
237
|
+
this.cleanup?.();
|
|
238
|
+
this.cleanup = null;
|
|
239
|
+
this.el.style.touchAction = this.originalTouchAction;
|
|
240
|
+
}
|
|
241
|
+
bindEvents(el) {
|
|
242
|
+
const onPointerDown = (event) => {
|
|
243
|
+
if (!event.isPrimary || event.button !== 0) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
this.activePointerId = event.pointerId;
|
|
247
|
+
this.startEvent = event;
|
|
248
|
+
this.startPoint = getPointerPoint(event);
|
|
249
|
+
this.previousPoint = this.startPoint;
|
|
250
|
+
this.previousTime = Date.now();
|
|
251
|
+
this.lastVelocity = { x: 0, y: 0 };
|
|
252
|
+
this.hasRecognizedPan = (this.options.threshold ?? 10) <= 0;
|
|
253
|
+
el.setPointerCapture?.(event.pointerId);
|
|
254
|
+
if (this.hasRecognizedPan) {
|
|
255
|
+
this.emitPan(this.options.onStart, event, this.startPoint, 0, 0);
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
const onPointerMove = (event) => {
|
|
259
|
+
if (event.pointerId !== this.activePointerId || !this.startPoint || !this.previousPoint) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const point = getPointerPoint(event);
|
|
263
|
+
const displacementX = point.x - this.startPoint.x;
|
|
264
|
+
const displacementY = point.y - this.startPoint.y;
|
|
265
|
+
const distance = Math.hypot(displacementX, displacementY);
|
|
266
|
+
if (!this.hasRecognizedPan) {
|
|
267
|
+
if (distance < (this.options.threshold ?? 10)) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
this.hasRecognizedPan = true;
|
|
271
|
+
this.emitPan(this.options.onStart, event, point, displacementX, displacementY);
|
|
272
|
+
}
|
|
273
|
+
this.emitPan(this.options.onMove, event, point, displacementX, displacementY);
|
|
274
|
+
};
|
|
275
|
+
const onPointerUp = (event) => {
|
|
276
|
+
if (event.pointerId !== this.activePointerId || !this.startPoint) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
const point = getPointerPoint(event);
|
|
280
|
+
if (this.hasRecognizedPan) {
|
|
281
|
+
this.emitPan(
|
|
282
|
+
this.options.onEnd,
|
|
283
|
+
event,
|
|
284
|
+
point,
|
|
285
|
+
point.x - this.startPoint.x,
|
|
286
|
+
point.y - this.startPoint.y
|
|
287
|
+
);
|
|
288
|
+
} else {
|
|
289
|
+
this.options.onIdle?.(event, this.startEvent);
|
|
290
|
+
}
|
|
291
|
+
el.releasePointerCapture?.(event.pointerId);
|
|
292
|
+
this.reset();
|
|
293
|
+
};
|
|
294
|
+
const onPointerCancel = (event) => {
|
|
295
|
+
if (event.pointerId !== this.activePointerId) {
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
this.options.onCancel?.(event);
|
|
299
|
+
el.releasePointerCapture?.(event.pointerId);
|
|
300
|
+
this.reset();
|
|
301
|
+
};
|
|
302
|
+
el.addEventListener("pointerdown", onPointerDown);
|
|
303
|
+
window.addEventListener("pointermove", onPointerMove);
|
|
304
|
+
window.addEventListener("pointerup", onPointerUp);
|
|
305
|
+
window.addEventListener("pointercancel", onPointerCancel);
|
|
306
|
+
return () => {
|
|
307
|
+
el.removeEventListener("pointerdown", onPointerDown);
|
|
308
|
+
window.removeEventListener("pointermove", onPointerMove);
|
|
309
|
+
window.removeEventListener("pointerup", onPointerUp);
|
|
310
|
+
window.removeEventListener("pointercancel", onPointerCancel);
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
emitPan(callback, source, point, displacementX, displacementY) {
|
|
314
|
+
const now = Date.now();
|
|
315
|
+
const elapsed = Math.max(1, now - this.previousTime);
|
|
316
|
+
const deltaX = point.x - (this.previousPoint?.x ?? point.x);
|
|
317
|
+
const deltaY = point.y - (this.previousPoint?.y ?? point.y);
|
|
318
|
+
const velocityX = deltaX === 0 ? this.lastVelocity.x : deltaX / elapsed;
|
|
319
|
+
const velocityY = deltaY === 0 ? this.lastVelocity.y : deltaY / elapsed;
|
|
320
|
+
if (deltaX !== 0 || deltaY !== 0) {
|
|
321
|
+
this.lastVelocity = { x: velocityX, y: velocityY };
|
|
322
|
+
}
|
|
323
|
+
this.previousPoint = point;
|
|
324
|
+
this.previousTime = now;
|
|
325
|
+
callback?.({
|
|
326
|
+
displacementX,
|
|
327
|
+
displacementY,
|
|
328
|
+
deltaX,
|
|
329
|
+
deltaY,
|
|
330
|
+
velocityX,
|
|
331
|
+
velocityY,
|
|
332
|
+
event: source,
|
|
333
|
+
startEvent: this.startEvent
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
reset() {
|
|
337
|
+
this.startPoint = null;
|
|
338
|
+
this.previousPoint = null;
|
|
339
|
+
this.previousTime = 0;
|
|
340
|
+
this.lastVelocity = { x: 0, y: 0 };
|
|
341
|
+
this.activePointerId = null;
|
|
342
|
+
this.hasRecognizedPan = false;
|
|
343
|
+
this.startEvent = null;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ClassValue } from 'cn';
|
|
2
|
+
type TailwindVariantSchema = Record<string, Record<string, ClassValue>>;
|
|
3
|
+
type TailwindVariantFallback = string | number | boolean;
|
|
4
|
+
type TailwindVariantPrimitive<T> = T extends 'true' ? true : T extends 'false' ? false : T extends `${infer Value extends number}` ? Value : T;
|
|
5
|
+
type TailwindVariantValue<T extends Record<string, ClassValue>> = ([keyof T] extends [never] ? TailwindVariantFallback : Extract<keyof T, 'true' | 'false'> extends never ? TailwindVariantPrimitive<keyof T> | keyof T : boolean | keyof T) | null | undefined;
|
|
6
|
+
type TailwindCompoundVariant<T extends TailwindVariantSchema> = Partial<{
|
|
7
|
+
[K in keyof T]: TailwindVariantValue<T[K]> | ReadonlyArray<TailwindVariantValue<T[K]>>;
|
|
8
|
+
}> & {
|
|
9
|
+
class: ClassValue;
|
|
10
|
+
};
|
|
11
|
+
export type TailwindVariantSelection<T extends TailwindVariantSchema> = Partial<{
|
|
12
|
+
[K in keyof T]: TailwindVariantValue<T[K]>;
|
|
13
|
+
}>;
|
|
14
|
+
export interface TailwindVariantConfig<T extends TailwindVariantSchema> {
|
|
15
|
+
base?: ClassValue;
|
|
16
|
+
variants?: T;
|
|
17
|
+
compoundVariants?: ReadonlyArray<TailwindCompoundVariant<T>>;
|
|
18
|
+
}
|
|
19
|
+
export interface UseTailwindVariantOptions<T extends TailwindVariantSchema> {
|
|
20
|
+
selection?: () => TailwindVariantSelection<T>;
|
|
21
|
+
mergeAttrsClass?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function createTailwindVariant<T extends TailwindVariantSchema>(config: TailwindVariantConfig<T>): (selection?: TailwindVariantSelection<T>) => string;
|
|
24
|
+
export declare function useTailwindVariant<T extends TailwindVariantSchema>(config: TailwindVariantConfig<T>, options?: UseTailwindVariantOptions<T>): {
|
|
25
|
+
attrs: import("vue").ComputedRef<{
|
|
26
|
+
[x: string]: unknown;
|
|
27
|
+
style?: import("vue").StyleValue;
|
|
28
|
+
}>;
|
|
29
|
+
classes: import("vue").ComputedRef<string>;
|
|
30
|
+
};
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { cn } from "cn";
|
|
2
|
+
import { computed, useAttrs } from "vue";
|
|
3
|
+
function createTailwindVariantResolver(config) {
|
|
4
|
+
const compoundVariants = config.compoundVariants?.map(({ class: classes, ...conditions }) => ({
|
|
5
|
+
classes,
|
|
6
|
+
conditions: Object.entries(conditions).map(([key, expected]) => [
|
|
7
|
+
key,
|
|
8
|
+
(Array.isArray(expected) ? expected : [expected]).map(String)
|
|
9
|
+
])
|
|
10
|
+
}));
|
|
11
|
+
return (selection = {}, additionalClasses) => {
|
|
12
|
+
const classes = [config.base];
|
|
13
|
+
for (const key in selection) {
|
|
14
|
+
if (!Object.hasOwn(selection, key)) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const value = selection[key];
|
|
18
|
+
if (value == null) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const valueClasses = config.variants?.[key]?.[String(value)];
|
|
22
|
+
if (valueClasses != null) {
|
|
23
|
+
classes.push(valueClasses);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (compoundVariants) {
|
|
27
|
+
compoundVariantLoop: for (const compoundVariant of compoundVariants) {
|
|
28
|
+
for (const [key, expected] of compoundVariant.conditions) {
|
|
29
|
+
if (!expected.includes(String(selection[key]))) {
|
|
30
|
+
continue compoundVariantLoop;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
classes.push(compoundVariant.classes);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
classes.push(additionalClasses);
|
|
37
|
+
return cn(classes);
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function createTailwindVariant(config) {
|
|
41
|
+
const resolveClasses = createTailwindVariantResolver(config);
|
|
42
|
+
return (selection = {}) => resolveClasses(selection);
|
|
43
|
+
}
|
|
44
|
+
export function useTailwindVariant(config, options = {}) {
|
|
45
|
+
const rawAttrs = useAttrs();
|
|
46
|
+
const shouldMergeAttrsClass = options.mergeAttrsClass !== false;
|
|
47
|
+
const resolveClasses = createTailwindVariantResolver(config);
|
|
48
|
+
const attrs = computed(() => {
|
|
49
|
+
if (!shouldMergeAttrsClass) {
|
|
50
|
+
return rawAttrs;
|
|
51
|
+
}
|
|
52
|
+
const { class: _class, ...restAttrs } = rawAttrs;
|
|
53
|
+
return restAttrs;
|
|
54
|
+
});
|
|
55
|
+
const classes = computed(
|
|
56
|
+
() => resolveClasses(options.selection?.(), shouldMergeAttrsClass ? rawAttrs.class : void 0)
|
|
57
|
+
);
|
|
58
|
+
return {
|
|
59
|
+
attrs,
|
|
60
|
+
classes
|
|
61
|
+
};
|
|
62
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { TreeDropPosition, TreeDropTarget, TreeFlatNode } from '../../components/tree/types';
|
|
2
|
+
import type { MaybeElementRef } from '../../types/shared';
|
|
3
|
+
import type { ComponentValue } from '../../types/shared';
|
|
4
|
+
import type { MaybeRefOrGetter } from 'vue';
|
|
5
|
+
export interface UseTreeDragOptions {
|
|
6
|
+
container: MaybeElementRef<HTMLElement>;
|
|
7
|
+
/** Rendered rows, the only ones the pointer can be measured against. */
|
|
8
|
+
rows: MaybeRefOrGetter<TreeFlatNode[]>;
|
|
9
|
+
/** Whole-session gate: off while searching, while disabled, or without the prop. */
|
|
10
|
+
enabled: MaybeRefOrGetter<boolean>;
|
|
11
|
+
/** Rejects a position the tree will refuse, so no indicator is ever painted for it. */
|
|
12
|
+
canDrop: (value: ComponentValue, targetValue: ComponentValue, position: TreeDropPosition) => boolean;
|
|
13
|
+
onExpand: (value: ComponentValue) => void;
|
|
14
|
+
onCommit: (value: ComponentValue, target: TreeDropTarget) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function useTreeDrag(options: UseTreeDragOptions): {
|
|
17
|
+
value: import("vue").ShallowRef<ComponentValue | undefined, ComponentValue | undefined>;
|
|
18
|
+
target: import("vue").ShallowRef<TreeDropTarget | undefined, TreeDropTarget | undefined>;
|
|
19
|
+
x: import("vue").ShallowRef<number, number>;
|
|
20
|
+
y: import("vue").ShallowRef<number, number>;
|
|
21
|
+
onPointerDown: (nodeValue: ComponentValue, event: PointerEvent) => void;
|
|
22
|
+
cancel: () => void;
|
|
23
|
+
};
|