@v-c/dropdown 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,8 @@ import { default as Placements } from './placements';
5
5
  export interface DropdownProps extends Pick<TriggerProps, 'getPopupContainer' | 'mouseEnterDelay' | 'mouseLeaveDelay' | 'onPopupAlign' | 'builtinPlacements' | 'autoDestroy'> {
6
6
  minOverlayWidthMatchTrigger?: boolean;
7
7
  arrow?: boolean;
8
+ onOpenChange?: (open: boolean) => void;
9
+ /** @deprecated Use `onOpenChange` instead */
8
10
  onVisibleChange?: (visible: boolean) => void;
9
11
  onOverlayClick?: (e: Event) => void;
10
12
  prefixCls?: string;
@@ -21,6 +23,8 @@ export interface DropdownProps extends Pick<TriggerProps, 'getPopupContainer' |
21
23
  alignPoint?: boolean;
22
24
  showAction?: ActionType[];
23
25
  hideAction?: ActionType[];
26
+ open?: boolean;
27
+ /** @deprecated Use `open` instead */
24
28
  visible?: boolean;
25
29
  autoFocus?: boolean;
26
30
  }
package/dist/Dropdown.js CHANGED
@@ -5,15 +5,16 @@ import { computed, createVNode, defineComponent, isVNode, mergeDefaults, mergePr
5
5
  import { Trigger } from "@v-c/trigger";
6
6
  import { clsx } from "@v-c/util";
7
7
  import { filterEmpty, removeUndefined, toPropsRefs } from "@v-c/util/dist/props-util";
8
+ import warning from "@v-c/util/dist/warning";
8
9
  //#region src/Dropdown.tsx
9
10
  function _isSlot(s) {
10
11
  return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
11
12
  }
12
13
  var Dropdown = /* @__PURE__ */ defineComponent((props, { expose, slots }) => {
13
14
  const { autoFocus } = toPropsRefs(props, "autoFocus");
14
- const triggerVisible = shallowRef();
15
- const mergedVisible = computed(() => {
16
- return props?.visible ?? triggerVisible.value;
15
+ const triggerOpen = shallowRef();
16
+ const mergedOpen = computed(() => {
17
+ return props?.open ?? props?.visible ?? triggerOpen.value;
17
18
  });
18
19
  const mergedMotionName = computed(() => {
19
20
  const { prefixCls, transitionName, animation } = props;
@@ -23,24 +24,29 @@ var Dropdown = /* @__PURE__ */ defineComponent((props, { expose, slots }) => {
23
24
  const overlayRef = shallowRef();
24
25
  const childRef = shallowRef();
25
26
  expose({ triggerRef });
26
- const handleVisibleChange = (visible) => {
27
- triggerVisible.value = visible;
28
- props.onVisibleChange?.(visible);
27
+ const handleOpenChange = (open) => {
28
+ triggerOpen.value = open;
29
+ props.onOpenChange?.(open);
30
+ props.onVisibleChange?.(open);
29
31
  };
30
32
  useAccessibility({
31
- visible: mergedVisible,
33
+ open: mergedOpen,
32
34
  triggerRef: childRef,
33
- onVisibleChange: handleVisibleChange,
35
+ onOpenChange: handleOpenChange,
34
36
  autoFocus,
35
37
  overlayRef
36
38
  });
37
39
  const onClick = (e) => {
38
40
  const { onOverlayClick } = props;
39
- triggerVisible.value = false;
41
+ triggerOpen.value = false;
40
42
  if (onOverlayClick) onOverlayClick(e);
41
43
  };
42
44
  return () => {
43
- const { overlay, prefixCls, arrow, hideAction, trigger, placement, placements, overlayClassName, getPopupContainer, showAction, overlayStyle, align, ...otherProps } = props;
45
+ if (process.env.NODE_ENV !== "production") {
46
+ warning(props.visible === void 0, "`visible` is deprecated. Please use `open` instead.");
47
+ warning(props.onVisibleChange === void 0, "`onVisibleChange` is deprecated. Please use `onOpenChange` instead.");
48
+ }
49
+ const { overlay, prefixCls, arrow, hideAction, trigger, placement, placements, overlayClassName, getPopupContainer, showAction, overlayStyle, align, disabled: _disabled, open: _open, visible: _visible, onOpenChange: _onOpenChange, onVisibleChange: _onVisibleChange, ...otherProps } = props;
44
50
  const getMenuElement = () => createVNode(Overlay, {
45
51
  "ref": overlayRef,
46
52
  "overlay": overlay,
@@ -63,7 +69,7 @@ var Dropdown = /* @__PURE__ */ defineComponent((props, { expose, slots }) => {
63
69
  };
64
70
  const children = filterEmpty(slots?.default?.() ?? [])?.[0];
65
71
  const childrenNode = createVNode(children, {
66
- class: clsx(mergedVisible.value && getOpenClassName()),
72
+ class: clsx(mergedOpen.value && getOpenClassName()),
67
73
  ref: childRef
68
74
  });
69
75
  let triggerHideAction = hideAction;
@@ -79,10 +85,10 @@ var Dropdown = /* @__PURE__ */ defineComponent((props, { expose, slots }) => {
79
85
  "popupPlacement": placement,
80
86
  "popupAlign": align,
81
87
  "popupMotion": { name: mergedMotionName.value },
82
- "popupVisible": mergedVisible.value,
88
+ "popupVisible": mergedOpen.value,
83
89
  "stretch": getMinOverlayWidthMatchTrigger() ? "minWidth" : "",
84
90
  "popup": getMenuElementOrLambda(),
85
- "onOpenChange": handleVisibleChange,
91
+ "onOpenChange": handleOpenChange,
86
92
  "onPopupClick": onClick,
87
93
  "getPopupContainer": getPopupContainer
88
94
  }), _isSlot(childrenNode) ? childrenNode : { default: () => [childrenNode] });
@@ -98,6 +104,11 @@ var Dropdown = /* @__PURE__ */ defineComponent((props, { expose, slots }) => {
98
104
  required: false,
99
105
  default: void 0
100
106
  },
107
+ onOpenChange: {
108
+ type: Function,
109
+ required: false,
110
+ default: void 0
111
+ },
101
112
  onVisibleChange: {
102
113
  type: Function,
103
114
  required: false,
@@ -185,6 +196,11 @@ var Dropdown = /* @__PURE__ */ defineComponent((props, { expose, slots }) => {
185
196
  required: false,
186
197
  default: void 0
187
198
  },
199
+ open: {
200
+ type: Boolean,
201
+ required: false,
202
+ default: void 0
203
+ },
188
204
  visible: {
189
205
  type: Boolean,
190
206
  required: false,
@@ -1,10 +1,10 @@
1
1
  import { Ref } from 'vue';
2
2
  interface UseAccessibilityProps {
3
- visible: Ref<boolean>;
3
+ open: Ref<boolean>;
4
4
  triggerRef: Ref<any>;
5
- onVisibleChange?: (visible: boolean) => void;
5
+ onOpenChange?: (open: boolean) => void;
6
6
  autoFocus?: Ref<boolean>;
7
7
  overlayRef?: Ref<any>;
8
8
  }
9
- export default function useAccessibility({ visible, triggerRef, onVisibleChange, autoFocus, overlayRef, }: UseAccessibilityProps): void;
9
+ export default function useAccessibility({ open, triggerRef, onOpenChange, autoFocus, overlayRef, }: UseAccessibilityProps): void;
10
10
  export {};
@@ -3,12 +3,12 @@ import KeyCode from "@v-c/util/dist/KeyCode";
3
3
  import raf from "@v-c/util/dist/raf";
4
4
  //#region src/hooks/useAccessibility.ts
5
5
  var { ESC, TAB } = KeyCode;
6
- function useAccessibility({ visible, triggerRef, onVisibleChange, autoFocus, overlayRef }) {
6
+ function useAccessibility({ open, triggerRef, onOpenChange, autoFocus, overlayRef }) {
7
7
  const focusMenuRef = shallowRef(false);
8
8
  const handleCloseMenuAndReturnFocus = () => {
9
- if (visible.value) {
9
+ if (open.value) {
10
10
  triggerRef.value?.focus?.();
11
- onVisibleChange?.(false);
11
+ onOpenChange?.(false);
12
12
  }
13
13
  };
14
14
  const focusMenu = () => {
@@ -33,8 +33,8 @@ function useAccessibility({ visible, triggerRef, onVisibleChange, autoFocus, ove
33
33
  }
34
34
  }
35
35
  };
36
- watch(visible, (_n, _o, onCleanup) => {
37
- if (visible.value) {
36
+ watch(open, (_n, _o, onCleanup) => {
37
+ if (open.value) {
38
38
  window.addEventListener("keydown", handleKeyDown);
39
39
  if (autoFocus) raf(focusMenu, 3);
40
40
  onCleanup(() => {
@@ -44,7 +44,7 @@ function useAccessibility({ visible, triggerRef, onVisibleChange, autoFocus, ove
44
44
  } else onCleanup(() => {
45
45
  focusMenuRef.value = false;
46
46
  });
47
- });
47
+ }, { immediate: true });
48
48
  }
49
49
  //#endregion
50
50
  export { useAccessibility as default };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@v-c/dropdown",
3
3
  "type": "module",
4
- "version": "1.0.4",
4
+ "version": "1.1.0",
5
5
  "description": "dropdown ui component for vue",
6
6
  "author": "",
7
7
  "license": "MIT",
@@ -34,8 +34,8 @@
34
34
  "vue": "^3.0.0"
35
35
  },
36
36
  "dependencies": {
37
- "@v-c/trigger": "^1.0.18",
38
- "@v-c/util": "^1.0.21"
37
+ "@v-c/trigger": "^1.1.1",
38
+ "@v-c/util": "^1.2.0"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "vite build",