pxd 0.0.60 → 0.0.62

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.
Files changed (242) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/_internal/dismiss-container.d.vue.ts +28 -0
  3. package/dist/components/_internal/dismiss-container.vue +162 -0
  4. package/dist/components/_internal/popover-arrow.d.vue.ts +9 -0
  5. package/dist/components/_internal/popover-arrow.vue +38 -0
  6. package/dist/components/active-graph/index.vue +5 -5
  7. package/dist/components/avatar/index.vue +5 -7
  8. package/dist/components/avatar-group/index.d.vue.ts +0 -1
  9. package/dist/components/avatar-group/index.vue +1 -1
  10. package/dist/components/backtop/index.vue +1 -1
  11. package/dist/components/badge/index.d.vue.ts +6 -2
  12. package/dist/components/badge/index.vue +19 -5
  13. package/dist/components/badge/types.d.ts +5 -0
  14. package/dist/components/book/index.vue +1 -1
  15. package/dist/components/browser/index.vue +1 -1
  16. package/dist/components/bubble/index.d.vue.ts +22 -0
  17. package/dist/components/bubble/index.vue +59 -0
  18. package/dist/components/bubble/types.d.ts +6 -0
  19. package/dist/components/button/index.d.vue.ts +0 -2
  20. package/dist/components/button/index.vue +31 -22
  21. package/dist/components/button/types.d.ts +3 -2
  22. package/dist/components/button-group/index.d.vue.ts +14 -0
  23. package/dist/components/button-group/index.vue +26 -0
  24. package/dist/components/button-group/types.d.ts +9 -0
  25. package/dist/components/carousel/index.d.vue.ts +3 -3
  26. package/dist/components/carousel/index.vue +146 -113
  27. package/dist/components/carousel/types.d.ts +1 -1
  28. package/dist/components/carousel-item/index.vue +22 -17
  29. package/dist/components/checkbox/index.vue +7 -7
  30. package/dist/components/checkbox-group/index.d.vue.ts +1 -1
  31. package/dist/components/chip/index.d.vue.ts +1 -5
  32. package/dist/components/chip/index.vue +5 -5
  33. package/dist/components/choicebox/index.vue +1 -1
  34. package/dist/components/collapse-group/index.vue +1 -1
  35. package/dist/components/color-selector/index.d.vue.ts +12 -0
  36. package/dist/components/color-selector/index.vue +64 -0
  37. package/dist/components/color-selector/types.d.ts +12 -0
  38. package/dist/components/command-menu/index.d.vue.ts +6 -6
  39. package/dist/components/command-menu/index.vue +24 -33
  40. package/dist/components/command-menu/types.d.ts +1 -1
  41. package/dist/components/command-menu-group/index.vue +15 -6
  42. package/dist/components/command-menu-group/types.d.ts +1 -1
  43. package/dist/components/config-provider/index.d.vue.ts +1 -1
  44. package/dist/components/countdown/index.d.vue.ts +11 -11
  45. package/dist/components/drawer/index.d.vue.ts +8 -8
  46. package/dist/components/drawer/index.vue +13 -10
  47. package/dist/components/drawer/types.d.ts +4 -3
  48. package/dist/components/ellipsis-text/index.d.vue.ts +4 -1
  49. package/dist/components/ellipsis-text/index.vue +86 -109
  50. package/dist/components/ellipsis-text/types.d.ts +2 -1
  51. package/dist/components/error/index.vue +2 -2
  52. package/dist/components/fader/index.vue +5 -9
  53. package/dist/components/gauge/index.vue +34 -29
  54. package/dist/components/grid/index.vue +1 -1
  55. package/dist/components/grid-item/index.vue +1 -1
  56. package/dist/components/hold-button/index.d.vue.ts +8 -10
  57. package/dist/components/hold-button/index.vue +15 -27
  58. package/dist/components/hold-button/types.d.ts +5 -6
  59. package/dist/components/index.d.ts +7 -0
  60. package/dist/components/index.js +7 -0
  61. package/dist/components/input/index.d.vue.ts +8 -8
  62. package/dist/components/input/index.vue +7 -6
  63. package/dist/components/intersection-observer/index.vue +4 -4
  64. package/dist/components/kbd/index.vue +2 -2
  65. package/dist/components/link-button/index.d.vue.ts +4 -4
  66. package/dist/components/link-button/index.vue +5 -7
  67. package/dist/components/link-button/types.d.ts +0 -3
  68. package/dist/components/list/index.d.vue.ts +10 -15
  69. package/dist/components/list/index.vue +58 -131
  70. package/dist/components/list/types.d.ts +4 -4
  71. package/dist/components/list-item/index.d.vue.ts +2 -2
  72. package/dist/components/list-item/index.vue +45 -40
  73. package/dist/components/loading-bar/index.vue +9 -8
  74. package/dist/components/material/index.vue +24 -46
  75. package/dist/components/menu/index.d.vue.ts +6 -8
  76. package/dist/components/menu/index.vue +18 -24
  77. package/dist/components/menu/types.d.ts +1 -2
  78. package/dist/components/message/composables/use-group-expand.d.ts +13 -0
  79. package/dist/components/message/composables/use-group-expand.js +50 -0
  80. package/dist/components/message/composables/use-message-timer.d.ts +9 -0
  81. package/dist/components/message/composables/use-message-timer.js +61 -0
  82. package/dist/components/message/composables/use-promise-message.d.ts +4 -0
  83. package/dist/components/message/composables/use-promise-message.js +49 -0
  84. package/dist/components/message/index.d.vue.ts +6 -33
  85. package/dist/components/message/index.vue +33 -185
  86. package/dist/components/message/types.d.ts +2 -2
  87. package/dist/components/message-item/index.vue +26 -2
  88. package/dist/components/modal/index.d.vue.ts +7 -7
  89. package/dist/components/modal/index.vue +7 -3
  90. package/dist/components/modal/types.d.ts +7 -3
  91. package/dist/components/note/index.vue +3 -3
  92. package/dist/components/number-input/index.d.vue.ts +5 -4
  93. package/dist/components/number-input/index.vue +3 -0
  94. package/dist/components/number-input/types.d.ts +1 -0
  95. package/dist/components/overlay/index.d.vue.ts +6 -3
  96. package/dist/components/overlay/index.vue +63 -68
  97. package/dist/components/overlay/types.d.ts +5 -4
  98. package/dist/components/pagination/index.vue +2 -2
  99. package/dist/components/pin-input/index.d.vue.ts +2 -2
  100. package/dist/components/pin-input/index.vue +9 -8
  101. package/dist/components/placeholder/index.vue +14 -12
  102. package/dist/components/popover/index.d.vue.ts +8 -9
  103. package/dist/components/popover/index.vue +150 -240
  104. package/dist/components/popover/types.d.ts +6 -7
  105. package/dist/components/progress/index.vue +3 -3
  106. package/dist/components/project-banner/index.vue +1 -1
  107. package/dist/components/radio/index.vue +3 -3
  108. package/dist/components/radio-group/index.vue +1 -1
  109. package/dist/components/resizable/index.vue +43 -51
  110. package/dist/components/resizable/types.d.ts +1 -1
  111. package/dist/components/resizable-handle/index.d.vue.ts +4 -1
  112. package/dist/components/resizable-handle/index.vue +29 -3
  113. package/dist/components/resizable-panel/index.vue +3 -7
  114. package/dist/components/scalable-text/index.d.vue.ts +9 -0
  115. package/dist/components/scalable-text/index.vue +147 -0
  116. package/dist/components/scalable-text/types.d.ts +12 -0
  117. package/dist/components/scrollable/index.d.vue.ts +2 -2
  118. package/dist/components/scrollable/index.vue +4 -3
  119. package/dist/components/scrollable/types.d.ts +1 -2
  120. package/dist/components/separator/index.d.vue.ts +6 -0
  121. package/dist/components/separator/index.vue +18 -0
  122. package/dist/components/separator/types.d.ts +5 -0
  123. package/dist/components/skeleton/index.d.vue.ts +1 -1
  124. package/dist/components/skeleton/index.vue +1 -1
  125. package/dist/components/slider/index.d.vue.ts +1 -1
  126. package/dist/components/slider/index.vue +41 -9
  127. package/dist/components/snippet/index.vue +18 -15
  128. package/dist/components/spinner/index.vue +3 -1
  129. package/dist/components/stack/index.d.vue.ts +1 -1
  130. package/dist/components/stack/index.vue +2 -2
  131. package/dist/components/switch/index.d.vue.ts +1 -1
  132. package/dist/components/switch/index.vue +5 -4
  133. package/dist/components/switch-item/index.vue +3 -3
  134. package/dist/components/tabs/index.d.vue.ts +12 -0
  135. package/dist/components/tabs/index.vue +270 -0
  136. package/dist/components/tabs/types.d.ts +12 -0
  137. package/dist/components/tabs-item/index.d.vue.ts +4 -0
  138. package/dist/components/tabs-item/index.vue +16 -0
  139. package/dist/components/tabs-item/types.d.ts +10 -0
  140. package/dist/components/text/index.vue +2 -2
  141. package/dist/components/textarea/index.d.vue.ts +2 -2
  142. package/dist/components/textarea/index.vue +3 -3
  143. package/dist/components/time-picker/index.d.vue.ts +3 -5
  144. package/dist/components/time-picker/index.vue +54 -46
  145. package/dist/components/time-picker/types.d.ts +1 -2
  146. package/dist/components/toggle/index.d.vue.ts +0 -2
  147. package/dist/components/toggle/index.vue +7 -7
  148. package/dist/components/toggle-button/index.vue +11 -9
  149. package/dist/components/toggle-button-group/index.vue +3 -3
  150. package/dist/components/tooltip/index.d.vue.ts +1 -1
  151. package/dist/components/tooltip/index.vue +19 -11
  152. package/dist/components/tooltip/types.d.ts +2 -3
  153. package/dist/components/virtual-list/index.d.vue.ts +8 -8
  154. package/dist/components/virtual-list/index.vue +29 -7
  155. package/dist/components/virtual-list/types.d.ts +3 -0
  156. package/dist/composables/index.d.ts +4 -1
  157. package/dist/composables/index.js +4 -1
  158. package/dist/composables/use-browser-observer.d.ts +1 -1
  159. package/dist/composables/use-browser-observer.js +2 -2
  160. package/dist/composables/use-client-online.js +2 -2
  161. package/dist/composables/use-color-scheme.js +2 -2
  162. package/dist/composables/use-countdown.js +3 -2
  163. package/dist/composables/use-deferred-value.js +2 -2
  164. package/dist/composables/use-delay-destroy.d.ts +1 -1
  165. package/dist/composables/use-delay-destroy.js +11 -6
  166. package/dist/composables/use-document-hidden.js +2 -2
  167. package/dist/composables/use-focus-trap.d.ts +1 -1
  168. package/dist/composables/use-focus-trap.js +2 -2
  169. package/dist/composables/use-list-filter.d.ts +11 -0
  170. package/dist/composables/use-list-filter.js +56 -0
  171. package/dist/composables/use-list-navigation.d.ts +27 -0
  172. package/dist/composables/use-list-navigation.js +159 -0
  173. package/dist/composables/use-lock-scroll.js +12 -12
  174. package/dist/composables/use-media-query.js +2 -2
  175. package/dist/composables/use-message.d.ts +1 -1
  176. package/dist/composables/use-outside-click.d.ts +1 -1
  177. package/dist/composables/use-outside-click.js +8 -11
  178. package/dist/composables/use-overlay-manager.d.ts +18 -0
  179. package/dist/composables/use-overlay-manager.js +80 -0
  180. package/dist/composables/use-popover-responsive.d.ts +6 -8
  181. package/dist/composables/use-popover-responsive.js +9 -12
  182. package/dist/composables/use-repeat-action.d.ts +1 -1
  183. package/dist/composables/use-repeat-action.js +2 -2
  184. package/dist/composables/use-swipe-gesture.d.ts +65 -0
  185. package/dist/composables/use-swipe-gesture.js +99 -0
  186. package/dist/composables/use-virtual-list.d.ts +6 -4
  187. package/dist/composables/use-virtual-list.js +25 -14
  188. package/dist/composables/use-window-size.js +2 -2
  189. package/dist/constants/size.d.ts +12 -0
  190. package/dist/constants/size.js +12 -0
  191. package/dist/contexts/button.d.ts +5 -0
  192. package/dist/contexts/button.js +5 -0
  193. package/dist/contexts/carousel.d.ts +3 -2
  194. package/dist/contexts/checkbox.d.ts +1 -1
  195. package/dist/contexts/choicebox.d.ts +1 -1
  196. package/dist/contexts/collapse.d.ts +1 -1
  197. package/dist/contexts/list.d.ts +23 -3
  198. package/dist/contexts/list.js +6 -2
  199. package/dist/contexts/radio.d.ts +1 -1
  200. package/dist/contexts/resizable.d.ts +3 -11
  201. package/dist/contexts/switch.d.ts +1 -1
  202. package/dist/contexts/tabs.d.ts +15 -0
  203. package/dist/contexts/tabs.js +2 -0
  204. package/dist/contexts/toggle-button.d.ts +1 -1
  205. package/dist/locales/en-us.d.ts +4 -4
  206. package/dist/locales/en-us.js +4 -4
  207. package/dist/locales/zh-cn.d.ts +4 -4
  208. package/dist/locales/zh-cn.js +4 -4
  209. package/dist/plugins/dayjs-millisecond-token.js +1 -1
  210. package/dist/styles/source.css +133 -128
  211. package/dist/styles/styles.css +2 -2
  212. package/dist/styles/tw.css +133 -128
  213. package/dist/types/shared/props.d.ts +1 -0
  214. package/dist/types/shared/utils.d.ts +1 -4
  215. package/dist/utils/date.d.ts +3 -3
  216. package/dist/utils/dom.d.ts +1 -0
  217. package/dist/utils/dom.js +4 -0
  218. package/dist/utils/event.d.ts +2 -1
  219. package/dist/utils/event.js +7 -1
  220. package/dist/utils/format.d.ts +3 -3
  221. package/dist/utils/format.js +5 -4
  222. package/dist/utils/fuzzy-search.d.ts +7 -0
  223. package/dist/utils/fuzzy-search.js +61 -0
  224. package/dist/utils/get.d.ts +2 -0
  225. package/dist/utils/get.js +15 -1
  226. package/dist/utils/index.d.ts +10 -11
  227. package/dist/utils/index.js +2 -3
  228. package/dist/utils/ref.d.ts +2 -2
  229. package/dist/utils/{throttle.d.ts → timing.d.ts} +1 -0
  230. package/dist/utils/{throttle.js → timing.js} +4 -2
  231. package/package.json +67 -63
  232. package/volar.d.ts +7 -0
  233. package/dist/components/overlay/overlay-stack.d.ts +0 -3
  234. package/dist/components/overlay/overlay-stack.js +0 -17
  235. package/dist/composables/use-pointer-gesture.d.ts +0 -180
  236. package/dist/composables/use-pointer-gesture.js +0 -406
  237. package/dist/utils/debounce.d.ts +0 -1
  238. package/dist/utils/debounce.js +0 -1
  239. package/dist/utils/regexp.d.ts +0 -8
  240. package/dist/utils/regexp.js +0 -8
  241. package/dist/utils/responsive.d.ts +0 -3
  242. package/dist/utils/responsive.js +0 -14
@@ -1,12 +1,10 @@
1
1
  export declare function usePopoverResponsive(): {
2
- isXs: import("vue").Ref<boolean, boolean>;
3
- attrs: import("vue").ComputedRef<{
4
- readonly contentClass: "bg-background-100 border w-full rounded-tl-xl rounded-tr-xl";
5
- readonly wrapperClass: "fixed w-screen h-screen items-end pointer-events-none pxd-container-mask";
6
- readonly transitionType: "fade-slide";
2
+ isAdaptive: import("vue").Ref<boolean, boolean>;
3
+ responsiveClasses: import("vue").ComputedRef<{
4
+ readonly content: "bg-background-100 shadow-border-menu w-full rounded-tl-xl rounded-tr-xl";
5
+ readonly wrapper: "fixed w-full h-full items-end pointer-events-none";
7
6
  } | {
8
- readonly contentClass: "bg-background-100 border rounded-xl";
9
- readonly wrapperClass: "";
10
- readonly transitionType: "fade-scale";
7
+ readonly content: "bg-background-100 shadow-border-menu rounded-xl";
8
+ readonly wrapper: "";
11
9
  }>;
12
10
  };
@@ -1,24 +1,21 @@
1
1
  import { computed } from "vue";
2
2
  import { PRESET_MEDIA_QUERIES, useMediaQuery } from "./use-media-query.js";
3
3
  export function usePopoverResponsive() {
4
- const isXs = useMediaQuery(PRESET_MEDIA_QUERIES.IS_XS);
5
- const attrs = computed(() => {
6
- const basicContentClass = "bg-background-100 border";
7
- if (isXs.value) {
4
+ const isAdaptive = useMediaQuery(PRESET_MEDIA_QUERIES.IS_XS);
5
+ const responsiveClasses = computed(() => {
6
+ if (isAdaptive.value) {
8
7
  return {
9
- contentClass: `${basicContentClass} w-full rounded-tl-xl rounded-tr-xl`,
10
- wrapperClass: "fixed w-screen h-screen items-end pointer-events-none pxd-container-mask",
11
- transitionType: "fade-slide"
8
+ content: `bg-background-100 shadow-border-menu w-full rounded-tl-xl rounded-tr-xl`,
9
+ wrapper: "fixed w-full h-full items-end pointer-events-none"
12
10
  };
13
11
  }
14
12
  return {
15
- contentClass: `${basicContentClass} rounded-xl`,
16
- wrapperClass: "",
17
- transitionType: "fade-scale"
13
+ content: `bg-background-100 shadow-border-menu rounded-xl`,
14
+ wrapper: ""
18
15
  };
19
16
  });
20
17
  return {
21
- isXs,
22
- attrs
18
+ isAdaptive,
19
+ responsiveClasses
23
20
  };
24
21
  }
@@ -1,5 +1,5 @@
1
- import type { MaybeRefOrGetter } from 'vue';
2
1
  import type { Callback } from '../types/shared/utils';
2
+ import type { MaybeRefOrGetter } from 'vue';
3
3
  interface Options {
4
4
  action: Callback;
5
5
  disabled?: MaybeRefOrGetter<boolean>;
@@ -1,4 +1,4 @@
1
- import { onBeforeUnmount } from "vue";
1
+ import { onScopeDispose } from "vue";
2
2
  import { off, once } from "../utils/event.js";
3
3
  import { toValue } from "../utils/ref.js";
4
4
  export function useRepeatAction(actionOrOptions) {
@@ -40,7 +40,7 @@ export function useRepeatAction(actionOrOptions) {
40
40
  once(document, "pointerup", stop);
41
41
  once(document, "pointercancel", stop);
42
42
  }
43
- onBeforeUnmount(() => {
43
+ onScopeDispose(() => {
44
44
  off(document, "pointerup", stop);
45
45
  off(document, "pointercancel", stop);
46
46
  });
@@ -0,0 +1,65 @@
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
+ }
7
+ export interface SwipeFollowState {
8
+ /** Movement since the previous event along the active axis (px). */
9
+ delta: number;
10
+ /** Velocity (px / ms) since the previous event along the active axis. */
11
+ velocity: number;
12
+ /** `displacement / containerSize` — signed ratio, typically in the range of -1 to 1. */
13
+ offset: number;
14
+ /** Signed displacement from the start point along the active axis (px). */
15
+ displacement: number;
16
+ }
17
+ export interface SwipeReleaseState {
18
+ /** Whether the gesture qualified as a successful swipe (by velocity or distance). */
19
+ swiped: boolean;
20
+ /** Physical swipe direction. `undefined` when `swiped` is `false`. */
21
+ direction?: SwipeDirection;
22
+ }
23
+ export interface SwipeGestureOptions {
24
+ disabled?: MaybeRefOrGetter<boolean>;
25
+ /**
26
+ * CSS selector for the drag handle element within the container.
27
+ * When set, gesture events bind to this element instead of the container,
28
+ * preventing interference with scrollable content inside the container.
29
+ */
30
+ handleSelector?: string;
31
+ /**
32
+ * Swipe axis. Reactive — accepts a ref or getter.
33
+ * @default 'horizontal'
34
+ */
35
+ direction?: MaybeRefOrGetter<'horizontal' | 'vertical'>;
36
+ /**
37
+ * Minimum swipe distance (px) for a successful swipe.
38
+ * @default 10
39
+ */
40
+ swipeThreshold?: number;
41
+ /**
42
+ * Fraction of the container size (0–1) the finger must travel
43
+ * for a slow-drag to count as a successful swipe.
44
+ * @default 0.35
45
+ */
46
+ distanceThreshold?: number;
47
+ /**
48
+ * Minimum velocity (px / ms) for a quick-flick to count as a swipe,
49
+ * regardless of distance traveled.
50
+ * @default 0.3
51
+ */
52
+ velocityThreshold?: number;
53
+ /** Fires when the pointer touches down and the gesture begins. */
54
+ onPress?: (state: SwipePressState) => void;
55
+ /** Fires continuously while the pointer moves. */
56
+ onFollow?: (state: SwipeFollowState) => void;
57
+ /**
58
+ * Fires on pointer-up or pointer-cancel.
59
+ * Check `state.swiped` to decide whether to commit the transition or snap back.
60
+ */
61
+ onRelease?: (state: SwipeReleaseState) => void;
62
+ }
63
+ export declare function useSwipeGesture(containerRef: MaybeElementRef<HTMLElement>, options?: SwipeGestureOptions): {
64
+ stop: () => void;
65
+ };
@@ -0,0 +1,99 @@
1
+ import Core from "@any-touch/core";
2
+ import Pan from "@any-touch/pan";
3
+ import { onScopeDispose, watch } from "vue";
4
+ import { toValue, unrefElement } from "../utils/ref.js";
5
+ export function useSwipeGesture(containerRef, options = {}) {
6
+ const {
7
+ handleSelector,
8
+ distanceThreshold = 0.35,
9
+ velocityThreshold = 0.3,
10
+ swipeThreshold = 10,
11
+ onPress,
12
+ onFollow,
13
+ onRelease
14
+ } = options;
15
+ let at = null;
16
+ function isHorizontal() {
17
+ return (toValue(options.direction) ?? "horizontal") === "horizontal";
18
+ }
19
+ function resolveDirection(displacement, horizontal) {
20
+ return horizontal ? displacement > 0 ? "right" : "left" : displacement > 0 ? "bottom" : "top";
21
+ }
22
+ function bind() {
23
+ const container = unrefElement(containerRef);
24
+ if (!container) {
25
+ return;
26
+ }
27
+ const handle = handleSelector ? container.querySelector(handleSelector) : container;
28
+ if (!handle) {
29
+ return;
30
+ }
31
+ at = new Core(handle);
32
+ at.use(Pan, { threshold: swipeThreshold });
33
+ let containerSize = 0;
34
+ at.on("panstart", () => {
35
+ const h = isHorizontal();
36
+ containerSize = h ? container.offsetWidth : container.offsetHeight;
37
+ onPress?.({ size: containerSize });
38
+ });
39
+ at.on("panmove", (e) => {
40
+ const h = isHorizontal();
41
+ const displacement = h ? e.displacementX : e.displacementY;
42
+ const delta = h ? e.deltaX : e.deltaY;
43
+ const velocity = h ? e.velocityX : e.velocityY;
44
+ onFollow?.({
45
+ delta,
46
+ velocity,
47
+ displacement,
48
+ offset: containerSize > 0 ? displacement / containerSize : 0
49
+ });
50
+ });
51
+ at.on("panend", (e) => {
52
+ const h = isHorizontal();
53
+ const displacement = h ? e.displacementX : e.displacementY;
54
+ const velocity = h ? e.velocityX : e.velocityY;
55
+ if (containerSize === 0 || displacement === 0) {
56
+ onRelease?.({ swiped: false });
57
+ return;
58
+ }
59
+ const meetsVelocity = velocity >= velocityThreshold;
60
+ const meetsDistance = Math.abs(displacement) / containerSize >= distanceThreshold;
61
+ if (meetsVelocity || meetsDistance) {
62
+ onRelease?.({ swiped: true, direction: resolveDirection(displacement, h) });
63
+ } else {
64
+ onRelease?.({ swiped: false });
65
+ }
66
+ });
67
+ at.on("pancancel", () => {
68
+ onRelease?.({ swiped: false });
69
+ });
70
+ }
71
+ function unbind() {
72
+ if (!at) {
73
+ return;
74
+ }
75
+ at.destroy();
76
+ at = null;
77
+ }
78
+ function stop() {
79
+ unwatch();
80
+ unbind();
81
+ }
82
+ const unwatch = watch(
83
+ () => [unrefElement(containerRef), toValue(options.disabled)],
84
+ ([el, disabled]) => {
85
+ if (!el || disabled) {
86
+ unbind();
87
+ return;
88
+ }
89
+ bind();
90
+ },
91
+ { immediate: true }
92
+ );
93
+ onScopeDispose(() => {
94
+ stop();
95
+ });
96
+ return {
97
+ stop
98
+ };
99
+ }
@@ -1,7 +1,7 @@
1
+ import type { MaybeElementRef } from '../types/shared';
1
2
  import type { VirtualItem } from '@tanstack/virtual-core';
2
3
  import type { ComponentPublicInstance } from 'vue';
3
4
  import { Virtualizer } from '@tanstack/virtual-core';
4
- import type { MaybeElementRef } from '../types/shared';
5
5
  export interface VirtualListItem extends VirtualItem {
6
6
  key: string | number;
7
7
  }
@@ -11,6 +11,8 @@ export interface VirtualListOptions {
11
11
  listData?: any[];
12
12
  itemSize?: number;
13
13
  overScan?: number;
14
+ columnGap?: number;
15
+ columnCount?: number;
14
16
  onBottom?: () => void | Promise<void>;
15
17
  bottomThreshold?: number;
16
18
  }
@@ -18,8 +20,8 @@ export declare function useVirtualList<Options extends VirtualListOptions>(conta
18
20
  virtualItems: import("vue").ComputedRef<VirtualListItem[]>;
19
21
  totalSize: import("vue").ComputedRef<number>;
20
22
  measureElement: (el: Element | ComponentPublicInstance | null) => void;
21
- scrollToIndex: any;
22
- scrollToOffset: any;
23
- scrollBy: any;
23
+ scrollToIndex: (index: number, { align: initialAlign, behavior, }?: import("@tanstack/virtual-core").ScrollToOptions) => void;
24
+ scrollToOffset: (toOffset: number, { align, behavior }?: import("@tanstack/virtual-core").ScrollToOptions) => void;
25
+ scrollBy: (delta: number, { behavior }?: import("@tanstack/virtual-core").ScrollToOptions) => void;
24
26
  getVirtualizer: () => Virtualizer<HTMLElement, HTMLElement>;
25
27
  };
@@ -4,12 +4,14 @@ import {
4
4
  observeElementRect,
5
5
  Virtualizer
6
6
  } from "@tanstack/virtual-core";
7
- import { computed, onMounted, onUnmounted, shallowRef, watch } from "vue";
7
+ import { computed, onMounted, onScopeDispose, watch, shallowRef } from "vue";
8
8
  import { toValue } from "../utils/ref.js";
9
9
  const DEFAULTS = {
10
10
  status: "",
11
11
  itemSize: 50,
12
- overScan: 2
12
+ overScan: 2,
13
+ columnGap: 0,
14
+ columnCount: 1
13
15
  };
14
16
  export function useVirtualList(containerRef, options) {
15
17
  let reachBottomFired = false;
@@ -31,6 +33,9 @@ export function useVirtualList(containerRef, options) {
31
33
  estimateSize: () => options.itemSize ?? DEFAULTS.itemSize,
32
34
  getItemKey,
33
35
  overscan: options.overScan ?? DEFAULTS.overScan,
36
+ lanes: options.columnCount ?? DEFAULTS.columnCount,
37
+ gap: options.columnGap ?? DEFAULTS.columnGap,
38
+ laneAssignmentMode: "measured",
34
39
  observeElementRect,
35
40
  observeElementOffset,
36
41
  scrollToFn: elementScroll,
@@ -54,7 +59,7 @@ export function useVirtualList(containerRef, options) {
54
59
  if (scrollBottom >= totalSize2 - threshold) {
55
60
  if (!reachBottomFired) {
56
61
  reachBottomFired = true;
57
- onBottom();
62
+ void onBottom();
58
63
  }
59
64
  } else {
60
65
  reachBottomFired = false;
@@ -69,33 +74,39 @@ export function useVirtualList(containerRef, options) {
69
74
  void triggerVersion.value;
70
75
  return virtualizer.getTotalSize();
71
76
  });
77
+ function measureElement(el) {
78
+ if (!el) {
79
+ virtualizer.measureElement(null);
80
+ return;
81
+ }
82
+ const htmlEl = el instanceof HTMLElement ? el : el.$el;
83
+ virtualizer.measureElement(htmlEl);
84
+ }
72
85
  function updateVirtualizer() {
73
86
  virtualizer.setOptions({
74
87
  ...virtualizer.options,
75
88
  count: options.listData?.length ?? 0,
76
89
  estimateSize: () => options.itemSize ?? DEFAULTS.itemSize,
77
- getItemKey
90
+ getItemKey,
91
+ lanes: options.columnCount ?? DEFAULTS.columnCount,
92
+ gap: options.columnGap ?? DEFAULTS.columnGap
78
93
  });
79
94
  virtualizer._willUpdate();
80
95
  triggerVersion.value++;
81
96
  }
82
- watch(() => [options.itemSize, options.dataKey], updateVirtualizer);
97
+ watch(
98
+ () => [options.itemSize, options.dataKey, options.columnCount, options.columnGap],
99
+ updateVirtualizer
100
+ );
83
101
  watch(() => [options.listData, options.listData?.length], updateVirtualizer);
84
102
  onMounted(() => {
85
103
  virtualizer._willUpdate();
86
104
  cleanup = virtualizer._didMount();
87
105
  });
88
- onUnmounted(() => {
106
+ onScopeDispose(() => {
89
107
  cleanup?.();
108
+ cleanup = void 0;
90
109
  });
91
- function measureElement(el) {
92
- if (!el) {
93
- virtualizer.measureElement(null);
94
- return;
95
- }
96
- const htmlEl = el instanceof HTMLElement ? el : el.$el;
97
- virtualizer.measureElement(htmlEl);
98
- }
99
110
  return {
100
111
  virtualItems,
101
112
  totalSize,
@@ -1,4 +1,4 @@
1
- import { onBeforeUnmount, onMounted, shallowRef } from "vue";
1
+ import { onScopeDispose, onMounted, shallowRef } from "vue";
2
2
  import { cachedOn, cachedOff } from "../utils/event.js";
3
3
  import { isServer } from "../utils/is.js";
4
4
  export function useWindowSize() {
@@ -16,7 +16,7 @@ export function useWindowSize() {
16
16
  cachedOn(window, "resize", updateSize);
17
17
  cachedOn(window, "orientationchange", updateSize);
18
18
  });
19
- onBeforeUnmount(() => {
19
+ onScopeDispose(() => {
20
20
  cachedOff(window, "resize", updateSize);
21
21
  cachedOff(window, "orientationchange", updateSize);
22
22
  });
@@ -0,0 +1,12 @@
1
+ export declare const BASIC_HEIGHTS: {
2
+ xs: string;
3
+ sm: string;
4
+ md: string;
5
+ lg: string;
6
+ };
7
+ export declare const BASIC_MIN_HEIGHTS: {
8
+ xs: string;
9
+ sm: string;
10
+ md: string;
11
+ lg: string;
12
+ };
@@ -0,0 +1,12 @@
1
+ export const BASIC_HEIGHTS = {
2
+ xs: "h-6",
3
+ sm: "h-7.5",
4
+ md: "h-9",
5
+ lg: "h-11"
6
+ };
7
+ export const BASIC_MIN_HEIGHTS = {
8
+ xs: "min-h-6",
9
+ sm: "min-h-7.5",
10
+ md: "min-h-9",
11
+ lg: "min-h-11"
12
+ };
@@ -0,0 +1,5 @@
1
+ import type { ButtonGroupProps } from '../components/button-group/types';
2
+ export interface ButtonGroupContext {
3
+ props: ButtonGroupProps;
4
+ }
5
+ export declare const provideButtonGroupContext: (contextValue: ButtonGroupContext) => ButtonGroupContext, useButtonGroupContext: (fallback?: ButtonGroupContext | null | undefined) => ButtonGroupContext | null;
@@ -0,0 +1,5 @@
1
+ import { createContext } from "../utils/context.js";
2
+ export const [provideButtonGroupContext, useButtonGroupContext] = createContext(
3
+ "ButtonGroup",
4
+ null
5
+ );
@@ -1,12 +1,13 @@
1
- import type { Ref } from 'vue';
2
1
  import type { CarouselProps } from '../components/carousel/types';
2
+ import type { Ref } from 'vue';
3
3
  export interface CarouselState {
4
4
  uid: string;
5
- translateItem: (index: number, activeIndex: number) => void;
5
+ updateItemIndex: (index: number) => void;
6
6
  }
7
7
  export interface CarouselContext {
8
8
  props: CarouselProps;
9
9
  carousels: Ref<CarouselState[]>;
10
+ virtualIndex: Ref<number>;
10
11
  registerCarousel: (state: CarouselState) => void;
11
12
  unregisterCarousel: (id: string) => void;
12
13
  }
@@ -1,5 +1,5 @@
1
- import type { EmitFn } from 'vue';
2
1
  import type { CheckboxGroupProps, CheckboxGroupEmits } from '../components/checkbox-group/types';
2
+ import type { EmitFn } from 'vue';
3
3
  export interface CheckboxGroupContext {
4
4
  props: CheckboxGroupProps;
5
5
  emits: EmitFn<CheckboxGroupEmits>;
@@ -1,5 +1,5 @@
1
- import type { EmitFn } from 'vue';
2
1
  import type { ChoiceboxEmits, ChoiceboxProps } from '../components/choicebox/types';
2
+ import type { EmitFn } from 'vue';
3
3
  interface ChoiceboxContext {
4
4
  props: ChoiceboxProps;
5
5
  emits: EmitFn<ChoiceboxEmits>;
@@ -1,5 +1,5 @@
1
- import type { Ref } from 'vue';
2
1
  import type { CollapseGroupProps } from '../components/collapse-group/types';
2
+ import type { Ref } from 'vue';
3
3
  export interface CollapseGroupContext {
4
4
  expandedIds: Ref<Set<string>>;
5
5
  props: CollapseGroupProps;
@@ -1,8 +1,28 @@
1
- import type { Ref } from 'vue';
2
1
  import type { ListOption } from '../components/list/types';
2
+ import type { ComputedRef, Ref } from 'vue';
3
3
  export interface ListContext {
4
- activeValue: Ref<string>;
4
+ activeIndex: Ref<number>;
5
+ registerItem: (el: HTMLElement, indexRef: Ref<number>) => void;
6
+ unregisterItem: (el: HTMLElement) => void;
5
7
  onOptionClick: ListOption['onClick'];
6
8
  }
7
9
  export declare const provideListContext: (contextValue: ListContext) => ListContext, useListContext: ((fallback?: ListContext | undefined) => ListContext) & ((fallback: null) => ListContext | null);
8
- export declare const provideListFilterValue: (contextValue: Ref<string, string>) => Ref<string, string>, useListFilterValue: (fallback?: Ref<string, string> | null | undefined) => Ref<string, string> | null;
10
+ export interface ListFilterItemPayload {
11
+ groupId: string | null;
12
+ getValue: () => string;
13
+ getKeywords: () => string[];
14
+ }
15
+ export interface ListFilterContext {
16
+ searchValue: Ref<string>;
17
+ visibleCount: ComputedRef<number>;
18
+ isItemVisible: (id: string) => boolean;
19
+ isGroupVisible: (id: string) => boolean;
20
+ registerItem: (id: string, payload: ListFilterItemPayload) => void;
21
+ unregisterItem: (id: string) => void;
22
+ }
23
+ export declare const provideListFilterContext: (contextValue: ListFilterContext) => ListFilterContext, useListFilterContext: (fallback?: ListFilterContext | null | undefined) => ListFilterContext | null;
24
+ /**
25
+ * Provided by group containers so nested list items know which group to
26
+ * register into.
27
+ */
28
+ export declare const provideListFilterGroupId: (contextValue: string) => string, useListFilterGroupId: (fallback?: string | null | undefined) => string | null;
@@ -1,6 +1,10 @@
1
1
  import { createContext } from "../utils/context.js";
2
2
  export const [provideListContext, useListContext] = createContext("List");
3
- export const [provideListFilterValue, useListFilterValue] = createContext(
4
- "ListFilterValue",
3
+ export const [provideListFilterContext, useListFilterContext] = createContext(
4
+ "ListFilter",
5
+ null
6
+ );
7
+ export const [provideListFilterGroupId, useListFilterGroupId] = createContext(
8
+ "ListFilterGroupId",
5
9
  null
6
10
  );
@@ -1,5 +1,5 @@
1
- import type { EmitFn } from 'vue';
2
1
  import type { RadioGroupEmits, RadioGroupProps } from '../components/radio-group/types';
2
+ import type { EmitFn } from 'vue';
3
3
  export interface RadioGroupContext {
4
4
  name: string;
5
5
  props: RadioGroupProps;
@@ -1,15 +1,8 @@
1
+ import type { ResizableProps } from '../components/resizable/types';
1
2
  import type { Ref } from 'vue';
2
- import type { ComponentDirection } from '../types/shared/props';
3
- interface PanelConfig {
4
- id: string;
5
- order: number;
6
- size?: number | null;
7
- minSize?: number;
8
- }
9
3
  export interface ResizableContext {
10
- direction: Ref<ComponentDirection>;
11
- panelSizes: Ref<number[]>;
12
- panelConfigs: Ref<PanelConfig[]>;
4
+ props: ResizableProps;
5
+ panelSizes: Ref<Record<string, number>>;
13
6
  getPanelSize: (id: string) => number;
14
7
  onHandleDrag: (id: string, delta: {
15
8
  deltaX: number;
@@ -32,4 +25,3 @@ export interface ResizableContext {
32
25
  unregisterHandle: (id: string) => void;
33
26
  }
34
27
  export declare const provideResizableContext: (contextValue: ResizableContext) => ResizableContext, useResizableContext: ((fallback?: ResizableContext | undefined) => ResizableContext) & ((fallback: null) => ResizableContext | null);
35
- export {};
@@ -1,5 +1,5 @@
1
- import type { EmitFn } from 'vue';
2
1
  import type { SwitchEmits, SwitchProps } from '../components/switch/types';
2
+ import type { EmitFn } from 'vue';
3
3
  export interface SwitchContext {
4
4
  name: string;
5
5
  props: SwitchProps;
@@ -0,0 +1,15 @@
1
+ import type { TabsEmits, TabsProps, TabsValue } from '../components/tabs/types';
2
+ import type { ComponentLabel } from '../types/shared';
3
+ import type { EmitFn, Slots } from 'vue';
4
+ export interface TabsItemState {
5
+ id: string;
6
+ value: TabsValue;
7
+ label?: ComponentLabel;
8
+ disabled?: boolean;
9
+ slots: Slots;
10
+ }
11
+ export interface TabsContext {
12
+ props: TabsProps;
13
+ emits: EmitFn<TabsEmits>;
14
+ }
15
+ export declare const provideTabsContext: (contextValue: TabsContext) => TabsContext, useTabsContext: ((fallback?: TabsContext | undefined) => TabsContext) & ((fallback: null) => TabsContext | null);
@@ -0,0 +1,2 @@
1
+ import { createContext } from "../utils/context.js";
2
+ export const [provideTabsContext, useTabsContext] = createContext("Tabs");
@@ -1,5 +1,5 @@
1
- import type { EmitFn } from 'vue';
2
1
  import type { ToggleButtonGroupProps, ToggleButtonGroupEmits } from '../components/toggle-button-group/types';
2
+ import type { EmitFn } from 'vue';
3
3
  export interface ToggleButtonGroupContext {
4
4
  props: ToggleButtonGroupProps;
5
5
  emits: EmitFn<ToggleButtonGroupEmits>;
@@ -31,14 +31,14 @@ declare const _default: {
31
31
  next: string;
32
32
  prev: string;
33
33
  };
34
- empty: {
35
- search: string;
36
- noData: string;
37
- };
38
34
  confirm: {
39
35
  ok: string;
40
36
  conform: string;
41
37
  cancel: string;
42
38
  };
39
+ results: {
40
+ searchText: string;
41
+ noData: string;
42
+ };
43
43
  };
44
44
  export default _default;
@@ -31,13 +31,13 @@ export default {
31
31
  next: "Next",
32
32
  prev: "Previous"
33
33
  },
34
- empty: {
35
- search: "No results found for",
36
- noData: "No data available"
37
- },
38
34
  confirm: {
39
35
  ok: "OK",
40
36
  conform: "Confirm",
41
37
  cancel: "Cancel"
38
+ },
39
+ results: {
40
+ searchText: "No results found for",
41
+ noData: "No data available"
42
42
  }
43
43
  };
@@ -31,14 +31,14 @@ declare const _default: {
31
31
  next: string;
32
32
  prev: string;
33
33
  };
34
- empty: {
35
- search: string;
36
- noData: string;
37
- };
38
34
  confirm: {
39
35
  ok: string;
40
36
  conform: string;
41
37
  cancel: string;
42
38
  };
39
+ results: {
40
+ searchText: string;
41
+ noData: string;
42
+ };
43
43
  };
44
44
  export default _default;
@@ -31,13 +31,13 @@ export default {
31
31
  next: "\u4E4B\u540E",
32
32
  prev: "\u4E4B\u524D"
33
33
  },
34
- empty: {
35
- search: "\u672A\u627E\u5230\u7ED3\u679C",
36
- noData: "\u6682\u65E0\u6570\u636E"
37
- },
38
34
  confirm: {
39
35
  ok: "\u786E\u5B9A",
40
36
  conform: "\u786E\u8BA4",
41
37
  cancel: "\u53D6\u6D88"
38
+ },
39
+ results: {
40
+ searchText: "\u672A\u627E\u5230\u7ED3\u679C\uFF1A",
41
+ noData: "\u6682\u65E0\u6570\u636E"
42
42
  }
43
43
  };
@@ -16,7 +16,7 @@ function processFormat(ms, formatStr, maxDigits) {
16
16
  const msValue = normalizeMilliseconds(ms);
17
17
  return replaceToken(formatStr, msValue, maxDigits);
18
18
  }
19
- const millisecondTokenPlugin = (options = {}, DayjsClass, dayjsFactory) => {
19
+ const millisecondTokenPlugin = (options, DayjsClass, dayjsFactory) => {
20
20
  const maxDigits = Math.max(1, Math.min(3, options?.maxDigits ?? 3));
21
21
  const originalFormat = DayjsClass.prototype.format;
22
22
  const originalDurationFormat = dayjsFactory.duration?.(0)?.format;