@v-c/dropdown 1.0.5 → 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.
package/dist/Dropdown.d.ts
CHANGED
|
@@ -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
|
|
15
|
-
const
|
|
16
|
-
return props?.visible ??
|
|
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
|
|
27
|
-
|
|
28
|
-
props.
|
|
27
|
+
const handleOpenChange = (open) => {
|
|
28
|
+
triggerOpen.value = open;
|
|
29
|
+
props.onOpenChange?.(open);
|
|
30
|
+
props.onVisibleChange?.(open);
|
|
29
31
|
};
|
|
30
32
|
useAccessibility({
|
|
31
|
-
|
|
33
|
+
open: mergedOpen,
|
|
32
34
|
triggerRef: childRef,
|
|
33
|
-
|
|
35
|
+
onOpenChange: handleOpenChange,
|
|
34
36
|
autoFocus,
|
|
35
37
|
overlayRef
|
|
36
38
|
});
|
|
37
39
|
const onClick = (e) => {
|
|
38
40
|
const { onOverlayClick } = props;
|
|
39
|
-
|
|
41
|
+
triggerOpen.value = false;
|
|
40
42
|
if (onOverlayClick) onOverlayClick(e);
|
|
41
43
|
};
|
|
42
44
|
return () => {
|
|
43
|
-
|
|
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(
|
|
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":
|
|
88
|
+
"popupVisible": mergedOpen.value,
|
|
83
89
|
"stretch": getMinOverlayWidthMatchTrigger() ? "minWidth" : "",
|
|
84
90
|
"popup": getMenuElementOrLambda(),
|
|
85
|
-
"onOpenChange":
|
|
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
|
-
|
|
3
|
+
open: Ref<boolean>;
|
|
4
4
|
triggerRef: Ref<any>;
|
|
5
|
-
|
|
5
|
+
onOpenChange?: (open: boolean) => void;
|
|
6
6
|
autoFocus?: Ref<boolean>;
|
|
7
7
|
overlayRef?: Ref<any>;
|
|
8
8
|
}
|
|
9
|
-
export default function useAccessibility({
|
|
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({
|
|
6
|
+
function useAccessibility({ open, triggerRef, onOpenChange, autoFocus, overlayRef }) {
|
|
7
7
|
const focusMenuRef = shallowRef(false);
|
|
8
8
|
const handleCloseMenuAndReturnFocus = () => {
|
|
9
|
-
if (
|
|
9
|
+
if (open.value) {
|
|
10
10
|
triggerRef.value?.focus?.();
|
|
11
|
-
|
|
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(
|
|
37
|
-
if (
|
|
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
|
+
"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.1.
|
|
38
|
-
"@v-c/util": "^1.
|
|
37
|
+
"@v-c/trigger": "^1.1.1",
|
|
38
|
+
"@v-c/util": "^1.2.0"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "vite build",
|