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
|
@@ -1,177 +1,423 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { computed, shallowRef, watch } from "vue";
|
|
3
|
+
import { useModelValue } from "../../composables/_internal/use-model-value.js";
|
|
4
|
+
import { throttleByRaf } from "../../utils/event.js";
|
|
5
|
+
import { getUniqueId } from "../../utils/helper.js";
|
|
6
|
+
import { isNil } from "../../utils/is.js";
|
|
7
|
+
import { clamp, PERCENT_TOTAL, roundSize, toPair } from "./utils";
|
|
4
8
|
defineOptions({
|
|
5
|
-
|
|
6
|
-
|
|
9
|
+
name: "PResizable",
|
|
10
|
+
inheritAttrs: false,
|
|
11
|
+
model: {
|
|
12
|
+
prop: "modelValue",
|
|
13
|
+
event: "update:modelValue"
|
|
14
|
+
}
|
|
7
15
|
});
|
|
8
16
|
const props = defineProps({
|
|
9
|
-
|
|
17
|
+
direction: {
|
|
18
|
+
type: String,
|
|
19
|
+
required: false,
|
|
20
|
+
default: "horizontal"
|
|
21
|
+
},
|
|
22
|
+
minSize: {
|
|
23
|
+
type: Array,
|
|
24
|
+
required: false,
|
|
25
|
+
default: () => [0, 0]
|
|
26
|
+
},
|
|
27
|
+
handle: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
required: false,
|
|
30
|
+
default: false
|
|
31
|
+
},
|
|
32
|
+
disabled: {
|
|
33
|
+
type: Boolean,
|
|
34
|
+
required: false,
|
|
35
|
+
default: false
|
|
36
|
+
},
|
|
37
|
+
defaultValue: {
|
|
38
|
+
type: Array,
|
|
39
|
+
required: false,
|
|
40
|
+
default: () => [PERCENT_TOTAL / 2, PERCENT_TOTAL / 2]
|
|
41
|
+
},
|
|
42
|
+
modelValue: {
|
|
43
|
+
type: [Array, null],
|
|
44
|
+
required: false,
|
|
45
|
+
default: null
|
|
46
|
+
}
|
|
10
47
|
});
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
48
|
+
const emits = defineEmits([
|
|
49
|
+
"change",
|
|
50
|
+
"reset",
|
|
51
|
+
"update:modelValue"
|
|
52
|
+
]);
|
|
53
|
+
const uid = getUniqueId("pxd-resizable");
|
|
15
54
|
const containerRef = shallowRef();
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
function registerHandle(config) {
|
|
40
|
-
const existingIndex = handleConfigs.value.findIndex((h) => h.id === config.id);
|
|
41
|
-
if (existingIndex === -1) {
|
|
42
|
-
handleConfigs.value.push({ ...config, order: orderCounter.value++ });
|
|
43
|
-
} else {
|
|
44
|
-
handleConfigs.value[existingIndex] = {
|
|
45
|
-
...config,
|
|
46
|
-
order: handleConfigs.value[existingIndex].order
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
handleConfigs.value.sort((a, b) => a.order - b.order);
|
|
50
|
-
}
|
|
51
|
-
function unregisterHandle(id) {
|
|
52
|
-
const index = handleConfigs.value.findIndex((h) => h.id === id);
|
|
53
|
-
if (index !== -1) {
|
|
54
|
-
handleConfigs.value.splice(index, 1);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
function getPanelSize(id) {
|
|
58
|
-
return panelSizes.value[id] || 0;
|
|
59
|
-
}
|
|
60
|
-
function onHandleDrag(handleId, delta) {
|
|
61
|
-
const handleOrder = handleConfigs.value.find((h) => h.id === handleId)?.order;
|
|
62
|
-
if (handleOrder === void 0) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const panelsBeforeThisHandle = panelConfigs.value.filter((p) => p.order < handleOrder).length;
|
|
66
|
-
const panelIndex = panelsBeforeThisHandle - 1;
|
|
67
|
-
if (panelIndex >= 0 && panelIndex + 1 < panelConfigs.value.length) {
|
|
68
|
-
onDrag(panelIndex, delta);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
function calculateContainerSize() {
|
|
72
|
-
if (!containerRef.value) {
|
|
73
|
-
return 0;
|
|
74
|
-
}
|
|
75
|
-
return props.direction === "horizontal" ? containerRef.value.offsetWidth : containerRef.value.offsetHeight;
|
|
76
|
-
}
|
|
77
|
-
function calculateInitialPanelSizes() {
|
|
78
|
-
const sizes = {};
|
|
79
|
-
let remainingSize = 100;
|
|
80
|
-
const autoSizedPanelIds = [];
|
|
81
|
-
const sortedConfigs = [...panelConfigs.value].sort((a, b) => a.order - b.order);
|
|
82
|
-
sortedConfigs.forEach((config) => {
|
|
83
|
-
const minSize = config.minSize || 0;
|
|
84
|
-
const initialSizeNum = config.size;
|
|
85
|
-
if (initialSizeNum !== null && initialSizeNum !== void 0) {
|
|
86
|
-
sizes[config.id] = Math.max(initialSizeNum, minSize);
|
|
87
|
-
remainingSize -= sizes[config.id];
|
|
88
|
-
} else {
|
|
89
|
-
sizes[config.id] = minSize;
|
|
90
|
-
remainingSize -= minSize;
|
|
91
|
-
autoSizedPanelIds.push(config.id);
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
return { sizes, remainingSize, autoSizedPanelIds };
|
|
95
|
-
}
|
|
96
|
-
function distributeRemainingSpace(sizes, remainingSize, autoSizedPanelIds) {
|
|
97
|
-
if (autoSizedPanelIds.length === 0 || remainingSize <= 0) {
|
|
98
|
-
return sizes;
|
|
99
|
-
}
|
|
100
|
-
const updatedSizes = { ...sizes };
|
|
101
|
-
const avgSize = remainingSize / autoSizedPanelIds.length;
|
|
102
|
-
autoSizedPanelIds.forEach((id) => {
|
|
103
|
-
updatedSizes[id] += avgSize;
|
|
104
|
-
});
|
|
105
|
-
return updatedSizes;
|
|
106
|
-
}
|
|
107
|
-
async function initPanelSizes() {
|
|
108
|
-
if (panelConfigs.value.length === 0) {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
await nextTick();
|
|
112
|
-
const { sizes, remainingSize, autoSizedPanelIds } = calculateInitialPanelSizes();
|
|
113
|
-
panelSizes.value = distributeRemainingSpace(sizes, remainingSize, autoSizedPanelIds);
|
|
114
|
-
}
|
|
115
|
-
function onDrag(index, { deltaX, deltaY }) {
|
|
116
|
-
if (index < 0 || index + 1 >= panelConfigs.value.length) {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
const containerSize = calculateContainerSize();
|
|
120
|
-
if (containerSize <= 0) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
const prevId = panelConfigs.value[index].id;
|
|
124
|
-
const nextId = panelConfigs.value[index + 1].id;
|
|
125
|
-
const delta = props.direction === "horizontal" ? deltaX : deltaY;
|
|
126
|
-
const deltaPercent = delta / containerSize * 100;
|
|
127
|
-
const prevSize = panelSizes.value[prevId] || 0;
|
|
128
|
-
const nextSize = panelSizes.value[nextId] || 0;
|
|
129
|
-
const prevMinSize = panelConfigs.value[index]?.minSize || 0;
|
|
130
|
-
const nextMinSize = panelConfigs.value[index + 1]?.minSize || 0;
|
|
131
|
-
let newPrevSize = prevSize + deltaPercent;
|
|
132
|
-
let newNextSize = nextSize - deltaPercent;
|
|
133
|
-
if (newPrevSize < prevMinSize) {
|
|
134
|
-
const diff = prevMinSize - newPrevSize;
|
|
135
|
-
newPrevSize = prevMinSize;
|
|
136
|
-
newNextSize -= diff;
|
|
137
|
-
} else if (newNextSize < nextMinSize) {
|
|
138
|
-
const diff = nextMinSize - newNextSize;
|
|
139
|
-
newNextSize = nextMinSize;
|
|
140
|
-
newPrevSize -= diff;
|
|
141
|
-
}
|
|
142
|
-
if (newPrevSize < prevMinSize) {
|
|
143
|
-
newPrevSize = prevMinSize;
|
|
144
|
-
}
|
|
145
|
-
if (newNextSize < nextMinSize) {
|
|
146
|
-
newNextSize = nextMinSize;
|
|
147
|
-
}
|
|
148
|
-
panelSizes.value[prevId] = newPrevSize;
|
|
149
|
-
panelSizes.value[nextId] = newNextSize;
|
|
150
|
-
}
|
|
151
|
-
provideResizableContext({
|
|
152
|
-
props,
|
|
153
|
-
panelSizes,
|
|
154
|
-
registerPanel,
|
|
155
|
-
unregisterPanel,
|
|
156
|
-
registerHandle,
|
|
157
|
-
unregisterHandle,
|
|
158
|
-
getPanelSize,
|
|
159
|
-
onHandleDrag,
|
|
160
|
-
resetPanels: initPanelSizes
|
|
55
|
+
const handleRef = shallowRef();
|
|
56
|
+
const modelValue = useModelValue(props, emits, { withChange: false });
|
|
57
|
+
const isControlled = computed(() => !isNil(props.modelValue));
|
|
58
|
+
const innerSizes = shallowRef(toPair(props.defaultValue));
|
|
59
|
+
const sizes = computed(() => isControlled.value ? toPair(props.modelValue) : innerSizes.value);
|
|
60
|
+
/**
|
|
61
|
+
* The range the leading panel may travel through. The trailing panel needs no
|
|
62
|
+
* bounds of its own: the pair always sums to 100, so the leading panel's floor
|
|
63
|
+
* already is the trailing panel's ceiling and the other way round.
|
|
64
|
+
*/
|
|
65
|
+
const bounds = computed(() => {
|
|
66
|
+
const [leading, trailing] = toPair(props.minSize);
|
|
67
|
+
if (leading + trailing > PERCENT_TOTAL) {
|
|
68
|
+
return {
|
|
69
|
+
min: 0,
|
|
70
|
+
max: PERCENT_TOTAL
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
min: leading,
|
|
75
|
+
max: PERCENT_TOTAL - trailing
|
|
76
|
+
};
|
|
161
77
|
});
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
78
|
+
const leadingId = `${uid}-leading`;
|
|
79
|
+
const trailingId = `${uid}-trailing`;
|
|
80
|
+
const collapsed = shallowRef(false);
|
|
81
|
+
// The pair as it was before folding, so expanding gives back what the user was
|
|
82
|
+
// working with rather than the configured starting point.
|
|
83
|
+
let expandedPair = null;
|
|
84
|
+
let initialPair = null;
|
|
85
|
+
watch(sizes, ([leading, trailing]) => {
|
|
86
|
+
initialPair ??= [leading, trailing];
|
|
87
|
+
}, {
|
|
88
|
+
immediate: true,
|
|
89
|
+
flush: "sync"
|
|
90
|
+
});
|
|
91
|
+
function setSizes(next) {
|
|
92
|
+
const current = sizes.value;
|
|
93
|
+
const rounded = [roundSize(next[0]), roundSize(next[1])];
|
|
94
|
+
if (rounded[0] === current[0] && rounded[1] === current[1]) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
if (!isControlled.value) {
|
|
98
|
+
innerSizes.value = rounded;
|
|
99
|
+
}
|
|
100
|
+
modelValue.value = rounded;
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
function resize(deltaPercent) {
|
|
104
|
+
const [leading, trailing] = sizes.value;
|
|
105
|
+
const { min, max } = bounds.value;
|
|
106
|
+
// Clamp the movement so the leading panel stays inside its own range, then
|
|
107
|
+
// hand the trailing panel the same delta so the pair keeps summing to 100%.
|
|
108
|
+
const applied = clamp(deltaPercent, min - leading, max - leading);
|
|
109
|
+
if (applied === 0) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
// The trailing panel is derived from the already rounded value, so the pair
|
|
113
|
+
// keeps the exact sum it had and repeated drags cannot drift.
|
|
114
|
+
const newLeading = roundSize(leading + applied);
|
|
115
|
+
return setSizes([newLeading, roundSize(leading + trailing - newLeading)]);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Moving the divider brings a folded pair back, so a collapsed panel is never a
|
|
119
|
+
* dead end. The remembered sizes go with it: they described a pair that no
|
|
120
|
+
* longer exists once it has been moved somewhere else.
|
|
121
|
+
*/
|
|
122
|
+
function applyDelta(deltaPercent) {
|
|
123
|
+
const changed = resize(deltaPercent);
|
|
124
|
+
if (changed && collapsed.value) {
|
|
125
|
+
collapsed.value = false;
|
|
126
|
+
expandedPair = null;
|
|
127
|
+
}
|
|
128
|
+
return changed;
|
|
129
|
+
}
|
|
130
|
+
function resizeByPixels(delta) {
|
|
131
|
+
const container = containerRef.value;
|
|
132
|
+
if (!container) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const containerSize = props.direction === "horizontal" ? container.offsetWidth : container.offsetHeight;
|
|
136
|
+
if (containerSize <= 0) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
return applyDelta(delta / containerSize * PERCENT_TOTAL);
|
|
140
|
+
}
|
|
141
|
+
function commitChange() {
|
|
142
|
+
emits("change", sizes.value.slice());
|
|
143
|
+
}
|
|
144
|
+
function toggleCollapse() {
|
|
145
|
+
if (props.disabled) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const [leading, trailing] = sizes.value;
|
|
149
|
+
if (collapsed.value) {
|
|
150
|
+
const restore = expandedPair ?? initialPair ?? [leading, trailing];
|
|
151
|
+
expandedPair = null;
|
|
152
|
+
collapsed.value = false;
|
|
153
|
+
if (setSizes([restore[0], restore[1]])) {
|
|
154
|
+
commitChange();
|
|
155
|
+
}
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
expandedPair = [leading, trailing];
|
|
159
|
+
collapsed.value = true;
|
|
160
|
+
const { min } = bounds.value;
|
|
161
|
+
// Whatever the leading panel gives up goes to its neighbour, so the pair keeps
|
|
162
|
+
// summing to 100% while folded.
|
|
163
|
+
if (setSizes([min, PERCENT_TOTAL - min])) {
|
|
164
|
+
commitChange();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function reset() {
|
|
168
|
+
const restore = initialPair ?? toPair(props.defaultValue);
|
|
169
|
+
expandedPair = null;
|
|
170
|
+
collapsed.value = false;
|
|
171
|
+
if (setSizes([restore[0], restore[1]])) {
|
|
172
|
+
emits("reset", sizes.value.slice());
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
let activePointerId = null;
|
|
176
|
+
let startPosition = 0;
|
|
177
|
+
let accumulated = 0;
|
|
178
|
+
let resized = false;
|
|
179
|
+
function axisOf(event) {
|
|
180
|
+
return props.direction === "horizontal" ? event.clientX : event.clientY;
|
|
181
|
+
}
|
|
182
|
+
const flushResize = throttleByRaf(() => {
|
|
183
|
+
if (accumulated === 0) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const delta = accumulated;
|
|
187
|
+
accumulated = 0;
|
|
188
|
+
resized = resizeByPixels(delta) || resized;
|
|
189
|
+
});
|
|
190
|
+
// The capture target is the handle itself, never `event.target`: a child element
|
|
191
|
+
// can be swapped mid-drag, which would both throw on release and strand the drag.
|
|
192
|
+
// Holding the capture also keeps the drag alive when the pointer leaves the window.
|
|
193
|
+
function releaseCapture() {
|
|
194
|
+
const id = activePointerId;
|
|
195
|
+
const el = handleRef.value;
|
|
196
|
+
activePointerId = null;
|
|
197
|
+
if (!el || id === null) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
el.releasePointerCapture(id);
|
|
202
|
+
} catch {}
|
|
203
|
+
}
|
|
204
|
+
function resetDragging() {
|
|
205
|
+
startPosition = 0;
|
|
206
|
+
accumulated = 0;
|
|
207
|
+
resized = false;
|
|
208
|
+
flushResize.cancel();
|
|
209
|
+
releaseCapture();
|
|
210
|
+
}
|
|
211
|
+
function handlePointerDown(event) {
|
|
212
|
+
if (props.disabled) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
activePointerId = event.pointerId;
|
|
216
|
+
startPosition = axisOf(event);
|
|
217
|
+
accumulated = 0;
|
|
218
|
+
resized = false;
|
|
219
|
+
try {
|
|
220
|
+
handleRef.value?.setPointerCapture(event.pointerId);
|
|
221
|
+
} catch {}
|
|
222
|
+
}
|
|
223
|
+
function handlePointerMove(event) {
|
|
224
|
+
if (event.pointerId !== activePointerId) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
event.preventDefault();
|
|
228
|
+
const position = axisOf(event);
|
|
229
|
+
accumulated += position - startPosition;
|
|
230
|
+
startPosition = position;
|
|
231
|
+
flushResize();
|
|
232
|
+
}
|
|
233
|
+
function handlePointerUp(event) {
|
|
234
|
+
if (event.pointerId !== activePointerId) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
flushResize.cancel();
|
|
238
|
+
if (accumulated !== 0) {
|
|
239
|
+
const delta = accumulated;
|
|
240
|
+
accumulated = 0;
|
|
241
|
+
resized = resizeByPixels(delta) || resized;
|
|
242
|
+
}
|
|
243
|
+
const didResize = resized;
|
|
244
|
+
resetDragging();
|
|
245
|
+
if (didResize) {
|
|
246
|
+
commitChange();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function handlePointerCancel(event) {
|
|
250
|
+
if (event.pointerId !== activePointerId) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
resetDragging();
|
|
254
|
+
}
|
|
255
|
+
function handleLostCapture() {
|
|
256
|
+
if (activePointerId === null) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
resetDragging();
|
|
260
|
+
}
|
|
261
|
+
const KEYBOARD_STEP = 1;
|
|
262
|
+
const KEYBOARD_STEP_LARGE = 10;
|
|
263
|
+
function handleKeydown(event) {
|
|
264
|
+
if (props.disabled) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const step = event.shiftKey ? KEYBOARD_STEP_LARGE : KEYBOARD_STEP;
|
|
268
|
+
const horizontal = props.direction === "horizontal";
|
|
269
|
+
let delta = null;
|
|
270
|
+
if (event.key === (horizontal ? "ArrowLeft" : "ArrowUp")) {
|
|
271
|
+
delta = -step;
|
|
272
|
+
} else if (event.key === (horizontal ? "ArrowRight" : "ArrowDown")) {
|
|
273
|
+
delta = step;
|
|
274
|
+
} else if (event.key === "Home") {
|
|
275
|
+
delta = bounds.value.min - position.value;
|
|
276
|
+
} else if (event.key === "End") {
|
|
277
|
+
delta = bounds.value.max - position.value;
|
|
278
|
+
}
|
|
279
|
+
if (delta === null) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
event.preventDefault();
|
|
283
|
+
if (applyDelta(delta)) {
|
|
284
|
+
commitChange();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function isPercent(value) {
|
|
288
|
+
return value >= 0 && value <= PERCENT_TOTAL;
|
|
289
|
+
}
|
|
290
|
+
function warnLength(name, value) {
|
|
291
|
+
warn(`${name} holds ${value.length} value${value.length === 1 ? "" : "s"} but the group has 2 panels; only the first two are used.`);
|
|
292
|
+
}
|
|
293
|
+
function warn(message) {
|
|
294
|
+
if (import.meta.env?.DEV) {
|
|
295
|
+
console.warn(`[pxd] PResizable: ${message}`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
function warnSum(name, value) {
|
|
299
|
+
const total = roundSize(value[0] + value[1]);
|
|
300
|
+
if (Math.abs(total - PERCENT_TOTAL) > .01) {
|
|
301
|
+
warn(`${name} adds up to ${total}% instead of ${PERCENT_TOTAL}%; the panels keep the sizes they were given.`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// The model is the caller's truth, so a value the group would rather correct is
|
|
305
|
+
// reported rather than rewritten: silently rewriting it would fight whatever
|
|
306
|
+
// writes it back.
|
|
307
|
+
watch(() => [
|
|
308
|
+
props.modelValue,
|
|
309
|
+
props.minSize,
|
|
310
|
+
props.defaultValue
|
|
311
|
+
], () => {
|
|
312
|
+
if (!import.meta.env?.DEV) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
const mins = toPair(props.minSize);
|
|
316
|
+
if (props.minSize.length !== 2) {
|
|
317
|
+
warnLength("min-size", props.minSize);
|
|
318
|
+
}
|
|
319
|
+
if (!isPercent(mins[0]) || !isPercent(mins[1])) {
|
|
320
|
+
warn(`min-size values must be between 0 and ${PERCENT_TOTAL}, got [${mins.join(", ")}].`);
|
|
321
|
+
} else if (mins[0] + mins[1] > PERCENT_TOTAL) {
|
|
322
|
+
warn(`min-size [${mins.join(", ")}] adds up to more than ${PERCENT_TOTAL}%, so no split fits and the constraint is ignored.`);
|
|
323
|
+
}
|
|
324
|
+
for (const [name, value] of [["model-value", props.modelValue], ["default-value", props.defaultValue]]) {
|
|
325
|
+
if (isNil(value)) {
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
if (value.length !== 2) {
|
|
329
|
+
warnLength(name, value);
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
warnSum(name, [value[0], value[1]]);
|
|
333
|
+
}
|
|
334
|
+
const { min, max } = bounds.value;
|
|
335
|
+
const leading = sizes.value[0];
|
|
336
|
+
if (leading < min || leading > max) {
|
|
337
|
+
warn(`the leading panel sits at ${leading}%, outside its ${min}-${max}% range; it keeps that size until it is dragged.`);
|
|
338
|
+
}
|
|
339
|
+
}, {
|
|
340
|
+
immediate: true,
|
|
341
|
+
flush: "post"
|
|
342
|
+
});
|
|
343
|
+
const position = computed(() => sizes.value[0]);
|
|
344
|
+
const ariaValueNow = computed(() => roundSize(position.value));
|
|
345
|
+
// A bare number is announced as "30" - no unit, and nothing about the fold.
|
|
346
|
+
// valuetext is the only place a separator can put either, since it has no
|
|
347
|
+
// aria-expanded to lean on.
|
|
348
|
+
const ariaValueText = computed(() => collapsed.value ? `${ariaValueNow.value}%, folded` : `${ariaValueNow.value}%`);
|
|
349
|
+
function panelStyle(index) {
|
|
350
|
+
return {
|
|
351
|
+
flexBasis: `${sizes.value[index]}%`,
|
|
352
|
+
flexGrow: 0,
|
|
353
|
+
flexShrink: 1
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
defineExpose({
|
|
357
|
+
getPanelSizes: () => sizes.value.slice(),
|
|
358
|
+
reset
|
|
165
359
|
});
|
|
166
360
|
</script>
|
|
167
361
|
|
|
168
362
|
<template>
|
|
169
363
|
<div
|
|
364
|
+
data-resizable
|
|
170
365
|
ref="containerRef"
|
|
171
366
|
:data-orientation="direction"
|
|
172
367
|
class="pxd-resizable flex size-full max-w-full flex-row overflow-hidden data-[orientation=vertical]:flex-col"
|
|
173
368
|
v-bind="$attrs"
|
|
174
369
|
>
|
|
175
|
-
<
|
|
370
|
+
<div
|
|
371
|
+
:id="leadingId"
|
|
372
|
+
class="pxd-resizable-panel min-w-0 min-h-0 overflow-hidden"
|
|
373
|
+
:style="panelStyle(0)"
|
|
374
|
+
>
|
|
375
|
+
<slot name="leading" :size="sizes[0]" />
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
<!--
|
|
379
|
+
A *focusable* separator is a widget, and only that flavour may carry
|
|
380
|
+
aria-valuenow / aria-valuemin / aria-valuemax - which is why it takes a
|
|
381
|
+
tabindex and the key handler below, not just a pointer drag. aria-expanded
|
|
382
|
+
is not a separator state at any focusability: it marks control over
|
|
383
|
+
visibility, and folding a panel never hides it. The fold therefore rides
|
|
384
|
+
on aria-valuetext.
|
|
385
|
+
-->
|
|
386
|
+
<div
|
|
387
|
+
ref="handleRef"
|
|
388
|
+
role="separator"
|
|
389
|
+
:tabindex="disabled ? -1 : 0"
|
|
390
|
+
aria-label="Resize the panels"
|
|
391
|
+
:aria-orientation="direction"
|
|
392
|
+
:aria-valuenow="ariaValueNow"
|
|
393
|
+
:aria-valuemin="bounds.min"
|
|
394
|
+
:aria-valuemax="bounds.max"
|
|
395
|
+
:aria-valuetext="ariaValueText"
|
|
396
|
+
:aria-controls="`${leadingId} ${trailingId}`"
|
|
397
|
+
:aria-disabled="disabled || void 0"
|
|
398
|
+
:data-collapsed="collapsed || void 0"
|
|
399
|
+
:data-handler="handle"
|
|
400
|
+
:data-orientation="direction"
|
|
401
|
+
class="pxd-resizable-handle relative shrink-0 touch-none bg-border self-focus-ring select-none hover:after:bg-primary/15 active:after:bg-primary/20 aria-disabled:cursor-default motion-safe:transition-colors after:motion-safe:transition-colors"
|
|
402
|
+
@pointerdown.prevent="handlePointerDown"
|
|
403
|
+
@pointermove="handlePointerMove"
|
|
404
|
+
@pointerup="handlePointerUp"
|
|
405
|
+
@pointercancel="handlePointerCancel"
|
|
406
|
+
@lostpointercapture="handleLostCapture"
|
|
407
|
+
@keydown="handleKeydown"
|
|
408
|
+
@dblclick.prevent.stop="toggleCollapse"
|
|
409
|
+
/>
|
|
410
|
+
|
|
411
|
+
<div
|
|
412
|
+
:id="trailingId"
|
|
413
|
+
class="pxd-resizable-panel min-w-0 min-h-0 overflow-hidden"
|
|
414
|
+
:style="panelStyle(1)"
|
|
415
|
+
>
|
|
416
|
+
<slot name="trailing" :size="sizes[1]" />
|
|
417
|
+
</div>
|
|
176
418
|
</div>
|
|
177
419
|
</template>
|
|
420
|
+
|
|
421
|
+
<style>
|
|
422
|
+
.pxd-resizable-handle[data-handler=true]:before{background-color:var(--color-gray-300);border-radius:.5rem;content:"";left:50%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}.pxd-resizable-handle[data-collapsed=true]:before{opacity:.4}.pxd-resizable-handle:after{content:"";left:50%;padding:4px;position:absolute;top:50%;transform:translate(-50%,-50%)}.pxd-resizable-handle[data-orientation=horizontal]{cursor:ew-resize;height:100%;width:1px}.pxd-resizable-handle[data-orientation=horizontal]:before{height:1.5rem;width:.375rem}.pxd-resizable-handle[data-orientation=horizontal]:after{height:100%}.pxd-resizable-handle[data-orientation=vertical]{cursor:ns-resize;height:1px;width:100%}.pxd-resizable-handle[data-orientation=vertical]:before{height:.375rem;width:1.5rem}.pxd-resizable-handle[data-orientation=vertical]:after{width:100%}
|
|
423
|
+
</style>
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import type { ComponentDirection } from '../../types/shared'
|
|
2
2
|
|
|
3
|
-
export interface PanelConfig {
|
|
4
|
-
id: string
|
|
5
|
-
size?: number | null
|
|
6
|
-
order: number
|
|
7
|
-
minSize?: number
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface HandleConfig {
|
|
11
|
-
id: string
|
|
12
|
-
order: number
|
|
13
|
-
onDrag: (delta: { deltaX: number; deltaY: number }) => void
|
|
14
|
-
}
|
|
15
|
-
|
|
16
3
|
export interface ResizableProps {
|
|
17
4
|
direction?: ComponentDirection
|
|
5
|
+
/**
|
|
6
|
+
* Per-panel floors as percentages. The group always sums to 100, so one panel's
|
|
7
|
+
* floor is the other panel's ceiling: `[20, 40]` means leading 20-60 and
|
|
8
|
+
* trailing 40-80. Adding up to more than 100 leaves no split that fits, so the
|
|
9
|
+
* constraint is ignored.
|
|
10
|
+
*/
|
|
11
|
+
minSize?: number[]
|
|
12
|
+
/** Draw the grip in the middle of the handle. */
|
|
13
|
+
handle?: boolean
|
|
14
|
+
/** Stop the handle from dragging or folding. */
|
|
15
|
+
disabled?: boolean
|
|
16
|
+
/** Starting sizes when uncontrolled. Read once, on setup. */
|
|
17
|
+
defaultValue?: number[]
|
|
18
|
+
modelValue?: number[] | null
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ResizableEmits {
|
|
22
|
+
change: [number[]]
|
|
23
|
+
reset: [number[]]
|
|
24
|
+
'update:modelValue': [number[]]
|
|
18
25
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const PERCENT_TOTAL = 100;
|
|
2
|
+
export function clamp(value, min, max) {
|
|
3
|
+
return Math.min(Math.max(value, min), max);
|
|
4
|
+
}
|
|
5
|
+
export function roundSize(value) {
|
|
6
|
+
return Math.round(value * 100) / 100;
|
|
7
|
+
}
|
|
8
|
+
export function toPair(value) {
|
|
9
|
+
return [value?.[0] ?? 0, value?.[1] ?? 0];
|
|
10
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RevealProps } from './types';
|
|
2
|
+
declare var __VLS_1: {};
|
|
3
|
+
type __VLS_Slots = {} & {
|
|
4
|
+
default?: (props: typeof __VLS_1) => any;
|
|
5
|
+
};
|
|
6
|
+
declare const __VLS_base: import("vue").DefineComponent<RevealProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<RevealProps> & Readonly<{}>, {
|
|
7
|
+
delay: number | string;
|
|
8
|
+
duration: number | string;
|
|
9
|
+
threshold: number | number[];
|
|
10
|
+
direction: import("../../types/shared/props.js").BasePosition;
|
|
11
|
+
trigger: import("./types").RevealTrigger;
|
|
12
|
+
rootMargin: string;
|
|
13
|
+
distance: number | string;
|
|
14
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
16
|
+
declare const _default: typeof __VLS_export;
|
|
17
|
+
export default _default;
|
|
18
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
19
|
+
new (): {
|
|
20
|
+
$slots: S;
|
|
21
|
+
};
|
|
22
|
+
};
|