@sdata/web-vue 3.13.0 → 3.14.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/sd.css +141 -111
- package/dist/sd.min.css +2 -2
- package/es/_components/input-label/input-label.d.ts +2 -0
- package/es/_components/input-label/input-label.js +4 -2
- package/es/_components/input-label/style/index.css +2 -2
- package/es/_components/picker/style/index.scss +8 -2
- package/es/_components/resize-observer.js +1 -1
- package/es/_components/resize-trigger.vue_vue_type_script_setup_true_lang.js +9 -2
- package/es/_components/select-view/select-view.d.ts +2 -0
- package/es/_components/select-view/select-view.js +5 -1
- package/es/_components/select-view/style/index.css +5 -5
- package/es/_hooks/use-focus-trap.d.ts +10 -0
- package/es/_hooks/use-focus-trap.js +115 -0
- package/es/_utils/dom.js +1 -10
- package/es/_utils/keyboard.d.ts +4 -0
- package/es/_utils/keyboard.js +21 -2
- package/es/alert/alert.vue.d.ts +2 -2
- package/es/alert/alert.vue_vue_type_script_setup_true_lang.js +12 -3
- package/es/alert/index.d.ts +5 -5
- package/es/alert/style/index.css +1 -1
- package/es/alert/style/index.scss +1 -1
- package/es/anchor/anchor-link.vue_vue_type_script_setup_true_lang.js +3 -1
- package/es/anchor/anchor.vue_vue_type_script_setup_true_lang.js +2 -0
- package/es/anchor/style/index.css +1 -1
- package/es/anchor/style/index.scss +3 -1
- package/es/auto-complete/auto-complete.js +8 -0
- package/es/avatar/avatar.vue_vue_type_script_setup_true_lang.js +8 -2
- package/es/avatar/style/index.css +2 -2
- package/es/avatar/style/index.scss +2 -2
- package/es/back-top/back-top.vue_vue_type_script_setup_true_lang.js +5 -1
- package/es/back-top/style/index.css +1 -1
- package/es/back-top/style/index.scss +2 -1
- package/es/badge/badge.js +4 -1
- package/es/badge/style/index.css +3 -3
- package/es/badge/style/index.scss +3 -3
- package/es/breadcrumb/breadcrumb.js +1 -0
- package/es/button/button.vue_vue_type_script_setup_true_lang.js +10 -5
- package/es/button/style/index.css +15 -6
- package/es/button/style/index.scss +25 -7
- package/es/calendar/style/event.scss +2 -2
- package/es/calendar/style/index.css +2 -2
- package/es/card/style/index.css +3 -3
- package/es/card/style/index.scss +3 -3
- package/es/carousel/carousel-arrow.vue.d.ts +4 -4
- package/es/carousel/carousel-arrow.vue_vue_type_script_setup_true_lang.js +20 -4
- package/es/carousel/carousel-indicator.vue_vue_type_script_setup_true_lang.js +23 -4
- package/es/carousel/carousel-item.vue_vue_type_script_setup_true_lang.js +8 -1
- package/es/carousel/carousel.js +18 -1
- package/es/carousel/style/index.css +1 -1
- package/es/carousel/style/index.scss +1 -1
- package/es/cascader/cascader.vue_vue_type_script_setup_true_lang.js +11 -2
- package/es/cascader/style/index.css +2 -2
- package/es/cascader/style/index.scss +3 -1
- package/es/checkbox/checkbox-group.js +4 -1
- package/es/checkbox/checkbox.d.ts +9 -0
- package/es/checkbox/checkbox.js +14 -0
- package/es/checkbox/index.d.ts +15 -0
- package/es/checkbox/style/index.css +1 -1
- package/es/checkbox/style/index.scss +1 -1
- package/es/collapse/collapse-item.js +21 -3
- package/es/collapse/context.d.ts +1 -1
- package/es/color-picker/color-picker.js +6 -0
- package/es/copy/copy.vue_vue_type_script_setup_true_lang.js +10 -2
- package/es/date-picker/panels/body.vue_vue_type_script_setup_true_lang.js +14 -1
- package/es/date-picker/picker.vue_vue_type_script_setup_true_lang.js +1 -0
- package/es/date-picker/style/index.css +5 -5
- package/es/date-picker/style/index.scss +4 -3
- package/es/drawer/drawer.vue.d.ts +1 -1
- package/es/drawer/drawer.vue_vue_type_script_setup_true_lang.js +28 -7
- package/es/drawer/index.d.ts +3 -3
- package/es/dropdown/dropdown-option.vue_vue_type_script_setup_true_lang.js +5 -1
- package/es/dropdown/dropdown-panel.vue.d.ts +9 -0
- package/es/dropdown/dropdown-panel.vue_vue_type_script_setup_true_lang.js +75 -2
- package/es/dropdown/dropdown-submenu.vue_vue_type_script_setup_true_lang.js +5 -2
- package/es/dropdown/dropdown.vue_vue_type_script_setup_true_lang.js +4 -2
- package/es/dropdown/style/index.css +1 -1
- package/es/dropdown/style/index.scss +3 -1
- package/es/file-previewer/file-previewer.vue.d.ts +1 -1
- package/es/file-previewer/file-previewer.vue_vue_type_script_setup_true_lang.js +7 -3
- package/es/file-previewer/index.d.ts +3 -3
- package/es/form/context.d.ts +1 -0
- package/es/form/form-item.vue_vue_type_script_setup_true_lang.js +6 -2
- package/es/form/style/index.css +2 -2
- package/es/form/style/index.scss +2 -2
- package/es/image/preview.vue.d.ts +1 -1
- package/es/image/preview.vue_vue_type_script_setup_true_lang.js +1 -1
- package/es/index.css +141 -111
- package/es/input/input.js +16 -2
- package/es/input/style/index.css +2 -2
- package/es/input/style/input.scss +4 -4
- package/es/input-number/input-number.js +5 -1
- package/es/input-number/style/index.css +3 -3
- package/es/input-number/style/index.scss +5 -1
- package/es/input-tag/index.d.ts +3 -0
- package/es/input-tag/input-tag.d.ts +2 -0
- package/es/input-tag/input-tag.js +34 -30
- package/es/input-tag/style/index.css +8 -8
- package/es/input-tag/style/index.scss +11 -5
- package/es/layout/sider.vue_vue_type_script_setup_true_lang.js +31 -6
- package/es/layout/style/index.css +2 -2
- package/es/layout/style/index.scss +4 -2
- package/es/link/style/index.css +1 -1
- package/es/link/style/index.scss +3 -1
- package/es/mention/mention.js +8 -0
- package/es/menu/base-menu.vue_vue_type_script_setup_true_lang.js +29 -3
- package/es/menu/item.js +14 -1
- package/es/menu/style/index.css +6 -6
- package/es/menu/style/index.scss +5 -3
- package/es/message/style/index.css +3 -3
- package/es/message/style/index.scss +5 -3
- package/es/modal/index.d.ts +3 -3
- package/es/modal/modal.vue.d.ts +1 -1
- package/es/modal/modal.vue_vue_type_script_setup_true_lang.js +28 -13
- package/es/modal/style/index.css +2 -2
- package/es/modal/style/index.scss +3 -2
- package/es/notification/style/index.css +3 -3
- package/es/notification/style/index.scss +11 -3
- package/es/page-header/page-header.vue.d.ts +6 -6
- package/es/page-header/page-header.vue_vue_type_script_setup_true_lang.js +12 -1
- package/es/pagination/page-item-ellipsis.vue_vue_type_script_setup_true_lang.js +12 -2
- package/es/pagination/page-item-step.vue.d.ts +2 -2
- package/es/pagination/page-item-step.vue_vue_type_script_setup_true_lang.js +19 -2
- package/es/pagination/page-item.vue.d.ts +2 -2
- package/es/pagination/page-item.vue_vue_type_script_setup_true_lang.js +21 -3
- package/es/pagination/pagination.js +5 -1
- package/es/pagination/style/index.css +6 -1
- package/es/pagination/style/index.scss +9 -3
- package/es/popconfirm/popconfirm.vue_vue_type_script_setup_true_lang.js +2 -0
- package/es/popover/popover.vue_vue_type_script_setup_true_lang.js +2 -0
- package/es/progress/style/index.css +2 -2
- package/es/progress/style/index.scss +5 -3
- package/es/qr-code/qr-code-status.vue_vue_type_script_setup_true_lang.js +5 -1
- package/es/qr-code/qr-code.vue_vue_type_script_setup_true_lang.js +11 -6
- package/es/radio/context.d.ts +1 -0
- package/es/radio/radio-group.js +6 -2
- package/es/radio/radio.js +1 -0
- package/es/radio/style/index.css +2 -2
- package/es/radio/style/index.scss +4 -2
- package/es/rate/rate.js +25 -1
- package/es/resize-box/resize-box.vue.d.ts +4 -4
- package/es/resize-box/resize-box.vue_vue_type_script_setup_true_lang.js +30 -1
- package/es/result/result.vue_vue_type_script_setup_true_lang.js +7 -4
- package/es/select/index.d.ts +124 -0
- package/es/select/select-dropdown.vue_vue_type_script_setup_true_lang.js +4 -1
- package/es/select/select.d.ts +62 -0
- package/es/select/select.js +18 -2
- package/es/select/style/index.css +1 -1
- package/es/select/style/index.scss +3 -1
- package/es/selectable-card/style/index.css +2 -2
- package/es/selectable-card/style/index.scss +5 -5
- package/es/skeleton/skeleton.vue_vue_type_script_setup_true_lang.js +5 -1
- package/es/slider/slider-button.vue.d.ts +2 -0
- package/es/slider/slider-button.vue_vue_type_script_setup_true_lang.js +7 -2
- package/es/slider/slider.vue_vue_type_script_setup_true_lang.js +23 -2
- package/es/slider/style/index.css +1 -1
- package/es/slider/style/index.scss +3 -1
- package/es/spin/spin.js +7 -2
- package/es/spin/style/index.css +1 -1
- package/es/spin/style/index.scss +1 -1
- package/es/split/split.vue.d.ts +4 -4
- package/es/split/split.vue_vue_type_script_setup_true_lang.js +27 -3
- package/es/steps/context.d.ts +1 -0
- package/es/steps/step.vue_vue_type_script_setup_true_lang.js +15 -2
- package/es/steps/steps.vue_vue_type_script_setup_true_lang.js +6 -1
- package/es/steps/style/index.css +1 -1
- package/es/steps/style/index.scss +1 -1
- package/es/style/animation/index.scss +1 -0
- package/es/style/animation/reduced-motion.scss +22 -0
- package/es/style/animation/zoom.scss +7 -6
- package/es/style/icon.scss +9 -1
- package/es/switch/style/index.css +1 -1
- package/es/switch/style/index.scss +4 -1
- package/es/switch/switch.vue_vue_type_script_setup_true_lang.js +6 -1
- package/es/table/style/index.css +8 -8
- package/es/table/style/index.scss +11 -8
- package/es/table/table-operation-td.d.ts +15 -0
- package/es/table/table-tbody.js +4 -1
- package/es/table/table-td.js +2 -1
- package/es/table/table-th.js +4 -2
- package/es/table/table-thead.js +4 -1
- package/es/table/table-tr.js +4 -1
- package/es/table/table.js +6 -2
- package/es/tabs/context.d.ts +1 -0
- package/es/tabs/style/index.css +5 -5
- package/es/tabs/style/index.scss +7 -7
- package/es/tabs/tab-pane.vue_vue_type_script_setup_true_lang.js +21 -2
- package/es/tabs/tabs-nav.js +34 -1
- package/es/tabs/tabs-tab.vue_vue_type_script_setup_true_lang.js +27 -4
- package/es/tabs/tabs.js +4 -2
- package/es/tag/index.d.ts +5 -5
- package/es/tag/style/index.css +1 -1
- package/es/tag/style/index.scss +3 -1
- package/es/tag/tag.vue.d.ts +2 -2
- package/es/tag/tag.vue_vue_type_script_setup_true_lang.js +19 -2
- package/es/textarea/style/index.css +2 -2
- package/es/textarea/textarea.vue_vue_type_script_setup_true_lang.js +15 -3
- package/es/time-picker/time-column.vue_vue_type_script_setup_true_lang.js +11 -3
- package/es/time-picker/time-picker.vue_vue_type_script_setup_true_lang.js +4 -1
- package/es/tooltip/tooltip.vue_vue_type_script_setup_true_lang.js +1 -0
- package/es/transfer/style/index.css +1 -1
- package/es/transfer/style/index.scss +1 -1
- package/es/transfer/transfer-list-item.js +16 -2
- package/es/tree/base-node.vue_vue_type_script_setup_true_lang.js +27 -7
- package/es/tree/context.d.ts +2 -0
- package/es/tree/style/index.css +1 -1
- package/es/tree/style/index.scss +1 -1
- package/es/tree/tree.vue_vue_type_script_setup_true_lang.js +81 -2
- package/es/tree-select/tree-select.vue_vue_type_script_setup_true_lang.js +10 -1
- package/es/trigger/index.d.ts +45 -0
- package/es/trigger/trigger.d.ts +27 -0
- package/es/trigger/trigger.js +47 -5
- package/es/typography/edit-content.vue_vue_type_script_setup_true_lang.js +11 -8
- package/es/typography/operations.vue_vue_type_script_setup_true_lang.js +38 -6
- package/es/typography/style/index.css +2 -2
- package/es/typography/style/index.scss +2 -2
- package/es/upload/style/index.css +9 -9
- package/es/upload/style/index.scss +15 -9
- package/es/upload/upload-list-item.js +18 -5
- package/es/upload/upload-picture-item.js +25 -3
- package/es/verification-code/verification-code.js +6 -1
- package/json/vetur-attributes.json +15 -0
- package/json/vetur-tags.json +6 -2
- package/json/web-types.json +33 -1
- package/package.json +1 -1
|
@@ -3,7 +3,12 @@ import { isUndefined } from "../_utils/is.js";
|
|
|
3
3
|
import { scrollTo } from "./utils/index.js";
|
|
4
4
|
import { Fragment, createElementBlock, createElementVNode, defineComponent, nextTick, normalizeClass, onMounted, openBlock, ref, renderList, toDisplayString, watch } from "vue";
|
|
5
5
|
//#region components/time-picker/time-column.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
-
var _hoisted_1 =
|
|
6
|
+
var _hoisted_1 = { role: "listbox" };
|
|
7
|
+
var _hoisted_2 = [
|
|
8
|
+
"aria-selected",
|
|
9
|
+
"aria-disabled",
|
|
10
|
+
"onClick"
|
|
11
|
+
];
|
|
7
12
|
var time_column_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent(_objectSpread2(_objectSpread2({}, { name: "TimePickerColumn" }), {}, {
|
|
8
13
|
__name: "time-column",
|
|
9
14
|
props: {
|
|
@@ -50,13 +55,16 @@ var time_column_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
50
55
|
ref_key: "refWrapper",
|
|
51
56
|
ref: refWrapper,
|
|
52
57
|
class: normalizeClass(`${__props.prefixCls}-column`)
|
|
53
|
-
}, [createElementVNode("ul",
|
|
58
|
+
}, [createElementVNode("ul", _hoisted_1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.list, (item) => {
|
|
54
59
|
return openBlock(), createElementBlock("li", {
|
|
55
60
|
key: item.value,
|
|
56
61
|
ref_for: true,
|
|
57
62
|
ref: (el) => {
|
|
58
63
|
onItemRef(el, item);
|
|
59
64
|
},
|
|
65
|
+
role: "option",
|
|
66
|
+
"aria-selected": item.selected ? "true" : "false",
|
|
67
|
+
"aria-disabled": item.disabled || void 0,
|
|
60
68
|
class: normalizeClass([`${__props.prefixCls}-cell`, {
|
|
61
69
|
[`${__props.prefixCls}-cell-disabled`]: item.disabled,
|
|
62
70
|
[`${__props.prefixCls}-cell-selected`]: item.selected
|
|
@@ -64,7 +72,7 @@ var time_column_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
64
72
|
onClick: () => {
|
|
65
73
|
onItemClick(item);
|
|
66
74
|
}
|
|
67
|
-
}, [createElementVNode("div", { class: normalizeClass(`${__props.prefixCls}-cell-inner`) }, toDisplayString(item.label), 3)], 10,
|
|
75
|
+
}, [createElementVNode("div", { class: normalizeClass(`${__props.prefixCls}-cell-inner`) }, toDisplayString(item.label), 3)], 10, _hoisted_2);
|
|
68
76
|
}), 128))])], 2);
|
|
69
77
|
};
|
|
70
78
|
}
|
|
@@ -376,7 +376,10 @@ var time_picker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
376
376
|
"prevent-focus": true,
|
|
377
377
|
"unmount-on-close": __props.unmountOnClose,
|
|
378
378
|
"popup-container": __props.popupContainer
|
|
379
|
-
}, _objectSpread2({}, __props.triggerProps), {
|
|
379
|
+
}, _objectSpread2({}, __props.triggerProps), {
|
|
380
|
+
"aria-has-popup": "dialog",
|
|
381
|
+
onPopupVisibleChange: onPanelVisibleChange
|
|
382
|
+
}), {
|
|
380
383
|
content: withCtx(() => [createElementVNode("div", {
|
|
381
384
|
class: normalizeClass(`${unref(prefixCls)}-container`),
|
|
382
385
|
onClick: onPanelClick
|
|
@@ -80,6 +80,7 @@ var tooltip_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
|
|
|
80
80
|
"animation-name": "zoom-in-fade-out",
|
|
81
81
|
"auto-fit-transform-origin": "",
|
|
82
82
|
role: "tooltip",
|
|
83
|
+
"aria-describedby-popup": "",
|
|
83
84
|
onPopupVisibleChange: handlePopupVisibleChange
|
|
84
85
|
}, {
|
|
85
86
|
content: withCtx(() => [renderSlot(_ctx.$slots, "content", {}, () => [createTextVNode(toDisplayString(__props.content), 1)])]),
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
}
|
|
219
219
|
.sd-transfer-list-item-dragged {
|
|
220
220
|
animation: sd-transfer-drag-item-blink 0.4s;
|
|
221
|
-
animation-timing-function: cubic-bezier(0, 0, 1, 1);
|
|
221
|
+
animation-timing-function: cubic-bezier(0.34, 0.69, 0.1, 1);
|
|
222
222
|
}
|
|
223
223
|
.sd-transfer-operations {
|
|
224
224
|
padding: 0 20px;
|
|
@@ -243,7 +243,7 @@ $transfer-prefix-cls: string.unquote('#{theme.$prefix}-transfer');
|
|
|
243
243
|
|
|
244
244
|
&-dragged {
|
|
245
245
|
animation: #{theme.$prefix}-transfer-drag-item-blink 0.4s;
|
|
246
|
-
animation-timing-function: theme.$transition-timing-function-
|
|
246
|
+
animation-timing-function: theme.$transition-timing-function-standard;
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { getPrefixCls } from "../_utils/global-config.js";
|
|
2
2
|
import icon_hover_default from "../_components/icon-hover.js";
|
|
3
|
+
import { isActivationKey } from "../_utils/keyboard.js";
|
|
3
4
|
import IconClose from "../icon/icon-close/index.js";
|
|
4
5
|
import Checkbox from "../checkbox/index.js";
|
|
5
6
|
import { transferInjectionKey } from "./context.js";
|
|
6
|
-
import { computed, createVNode, defineComponent, inject
|
|
7
|
+
import { computed, createVNode, defineComponent, inject } from "vue";
|
|
7
8
|
//#region components/transfer/transfer-list-item.tsx
|
|
8
9
|
var transfer_list_item_default = /* @__PURE__ */ defineComponent({
|
|
9
10
|
name: "TransferListItem",
|
|
@@ -31,6 +32,12 @@ var transfer_list_item_default = /* @__PURE__ */ defineComponent({
|
|
|
31
32
|
const handleRemove = () => {
|
|
32
33
|
transferCtx === null || transferCtx === void 0 || transferCtx.moveTo([props.data.value], "source");
|
|
33
34
|
};
|
|
35
|
+
const handleRemoveKeydown = (ev) => {
|
|
36
|
+
if (isActivationKey(ev)) {
|
|
37
|
+
ev.preventDefault();
|
|
38
|
+
handleRemove();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
34
41
|
return () => {
|
|
35
42
|
var _transferCtx$slots$it, _transferCtx$slots, _transferCtx$slots$it2;
|
|
36
43
|
return createVNode("div", {
|
|
@@ -52,7 +59,14 @@ var transfer_list_item_default = /* @__PURE__ */ defineComponent({
|
|
|
52
59
|
label: props.data.label,
|
|
53
60
|
value: props.data.value
|
|
54
61
|
})) !== null && _transferCtx$slots$it3 !== void 0 ? _transferCtx$slots$it3 : props.data.label];
|
|
55
|
-
} }), props.allowClear && !props.disabled && createVNode(
|
|
62
|
+
} }), props.allowClear && !props.disabled && createVNode("span", {
|
|
63
|
+
"class": `${prefixCls}-remove-btn`,
|
|
64
|
+
"role": "button",
|
|
65
|
+
"tabindex": "0",
|
|
66
|
+
"aria-label": "Remove",
|
|
67
|
+
"onClick": handleRemove,
|
|
68
|
+
"onKeydown": handleRemoveKeydown
|
|
69
|
+
}, [createVNode(icon_hover_default, null, { default: () => [createVNode(IconClose, null, null)] })])]);
|
|
56
70
|
};
|
|
57
71
|
}
|
|
58
72
|
});
|
|
@@ -12,7 +12,15 @@ import node_switcher_default from "./node-switcher.js";
|
|
|
12
12
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeProps, openBlock, reactive, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toRefs, unref, useSlots, withCtx } from "vue";
|
|
13
13
|
import { onLongPress, useSwipe } from "@vueuse/core";
|
|
14
14
|
//#region components/tree/base-node.vue?vue&type=script&setup=true&lang.ts
|
|
15
|
-
var _hoisted_1 = [
|
|
15
|
+
var _hoisted_1 = [
|
|
16
|
+
"data-level",
|
|
17
|
+
"data-key",
|
|
18
|
+
"tabindex",
|
|
19
|
+
"aria-level",
|
|
20
|
+
"aria-expanded",
|
|
21
|
+
"aria-selected",
|
|
22
|
+
"aria-disabled"
|
|
23
|
+
];
|
|
16
24
|
var _hoisted_2 = ["draggable"];
|
|
17
25
|
var base_node_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent(_objectSpread2(_objectSpread2({}, { name: "BaseTreeNode" }), {}, {
|
|
18
26
|
__name: "base-node",
|
|
@@ -192,6 +200,11 @@ var base_node_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
192
200
|
var _treeContext$onNodeEv;
|
|
193
201
|
(_treeContext$onNodeEv = treeContext.onNodeEvent) === null || _treeContext$onNodeEv === void 0 || _treeContext$onNodeEv.call(treeContext, eventName, key.value, e);
|
|
194
202
|
}
|
|
203
|
+
function onTreeitemKeydown(e) {
|
|
204
|
+
var _treeContext$onNodeKe;
|
|
205
|
+
onNodeDomEvent("keydown", e);
|
|
206
|
+
(_treeContext$onNodeKe = treeContext.onNodeKeydown) === null || _treeContext$onNodeKe === void 0 || _treeContext$onNodeKe.call(treeContext, key.value, e);
|
|
207
|
+
}
|
|
195
208
|
function onDragStart(e) {
|
|
196
209
|
if (!draggable.value) return;
|
|
197
210
|
e.stopPropagation();
|
|
@@ -229,7 +242,16 @@ var base_node_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
229
242
|
return openBlock(), createElementBlock("div", {
|
|
230
243
|
class: normalizeClass(classNames.value),
|
|
231
244
|
"data-level": __props.level,
|
|
232
|
-
"data-key": unref(nodekey)
|
|
245
|
+
"data-key": unref(nodekey),
|
|
246
|
+
role: "treeitem",
|
|
247
|
+
tabindex: unref(treeContext).activeKey === unref(nodekey) ? 0 : -1,
|
|
248
|
+
"aria-level": __props.level + 1,
|
|
249
|
+
"aria-expanded": unref(isLeaf) ? void 0 : expanded.value,
|
|
250
|
+
"aria-selected": unref(selectable) ? selected.value : void 0,
|
|
251
|
+
"aria-disabled": unref(disabled) || void 0,
|
|
252
|
+
onKeydown: onTreeitemKeydown,
|
|
253
|
+
onKeyup: _cache[21] || (_cache[21] = ($event) => onNodeDomEvent("keyup", $event)),
|
|
254
|
+
onKeypress: _cache[22] || (_cache[22] = ($event) => onNodeDomEvent("keypress", $event))
|
|
233
255
|
}, [
|
|
234
256
|
createElementVNode("span", { class: normalizeClass(`${unref(prefixCls)}-indent`) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.level, (i) => {
|
|
235
257
|
return openBlock(), createElementBlock("span", {
|
|
@@ -272,6 +294,7 @@ var base_node_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
272
294
|
disabled: unref(disableCheckbox) || unref(disabled),
|
|
273
295
|
"model-value": checked.value,
|
|
274
296
|
indeterminate: indeterminate.value,
|
|
297
|
+
tabindex: "-1",
|
|
275
298
|
"uninject-group-context": "",
|
|
276
299
|
onChange: onCheckboxChange
|
|
277
300
|
}, null, 8, [
|
|
@@ -310,10 +333,7 @@ var base_node_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
310
333
|
onTouchstart: _cache[17] || (_cache[17] = ($event) => onNodeDomEvent("touchstart", $event)),
|
|
311
334
|
onTouchmove: _cache[18] || (_cache[18] = ($event) => onNodeDomEvent("touchmove", $event)),
|
|
312
335
|
onTouchend: _cache[19] || (_cache[19] = ($event) => onNodeDomEvent("touchend", $event)),
|
|
313
|
-
onTouchcancel: _cache[20] || (_cache[20] = ($event) => onNodeDomEvent("touchcancel", $event))
|
|
314
|
-
onKeydown: _cache[21] || (_cache[21] = ($event) => onNodeDomEvent("keydown", $event)),
|
|
315
|
-
onKeyup: _cache[22] || (_cache[22] = ($event) => onNodeDomEvent("keyup", $event)),
|
|
316
|
-
onKeypress: _cache[23] || (_cache[23] = ($event) => onNodeDomEvent("keypress", $event))
|
|
336
|
+
onTouchcancel: _cache[20] || (_cache[20] = ($event) => onNodeDomEvent("touchcancel", $event))
|
|
317
337
|
}, [_ctx.$slots.icon || __props.icon || treeNodeIcon.value ? (openBlock(), createElementBlock("span", {
|
|
318
338
|
key: 0,
|
|
319
339
|
class: normalizeClass([`${unref(prefixCls)}-icon`, `${unref(prefixCls)}-custom-icon`])
|
|
@@ -337,7 +357,7 @@ var base_node_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
337
357
|
node: treeNodeData.value
|
|
338
358
|
}, nodeStatus), null, 16, ["node"])) : (openBlock(), createBlock(unref(IconDragDotVertical), { key: 3 }))], 2)) : createCommentVNode("", true)], 2)], 42, _hoisted_2),
|
|
339
359
|
extra.value ? (openBlock(), createBlock(resolveDynamicComponent(extra.value), { key: 2 })) : createCommentVNode("", true)
|
|
340
|
-
],
|
|
360
|
+
], 42, _hoisted_1);
|
|
341
361
|
};
|
|
342
362
|
}
|
|
343
363
|
}));
|
package/es/tree/context.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export type TreeContext = Readonly<{
|
|
|
19
19
|
expandedKeys: TreeNodeKey[];
|
|
20
20
|
loadingKeys: TreeNodeKey[];
|
|
21
21
|
currentExpandKeys: TreeNodeKey[];
|
|
22
|
+
activeKey?: TreeNodeKey;
|
|
22
23
|
onLoadMore?: (key: TreeNodeKey) => void;
|
|
23
24
|
onCheck: (checked: boolean, key: TreeNodeKey, e?: Event) => void;
|
|
24
25
|
onSelect: (key: TreeNodeKey, e: Event) => void;
|
|
@@ -31,6 +32,7 @@ export type TreeContext = Readonly<{
|
|
|
31
32
|
onDrop?: (key: TreeNodeKey, dropPosition: DropPosition, e: DragEvent) => void;
|
|
32
33
|
allowDrop?: (key: TreeNodeKey, dropPosition: DropPosition) => boolean;
|
|
33
34
|
onNodeEvent?: (eventName: TreeNodeDomEventName, key: TreeNodeKey, e: Event) => void;
|
|
35
|
+
onNodeKeydown?: (key: TreeNodeKey, e: KeyboardEvent) => void;
|
|
34
36
|
onNodeLongPress?: (key: TreeNodeKey, e: PointerEvent) => void;
|
|
35
37
|
onNodeSwipe?: (eventName: TreeNodeSwipeEventName, key: TreeNodeKey, e: TouchEvent, data: TreeNodeSwipeEventData) => void;
|
|
36
38
|
}>;
|
package/es/tree/style/index.css
CHANGED
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
}
|
|
121
121
|
.sd-tree-node-selected .sd-tree-node-title, .sd-tree-node-selected .sd-tree-node-title:hover {
|
|
122
122
|
color: rgb(var(--sd-primary-6));
|
|
123
|
-
transition: color 0.2s cubic-bezier(0, 0, 1, 1);
|
|
123
|
+
transition: color 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);
|
|
124
124
|
}
|
|
125
125
|
.sd-tree-node-disabled-selectable .sd-tree-node-title,
|
|
126
126
|
.sd-tree-node-disabled-selectable .sd-tree-node-title:hover, .sd-tree-node-disabled .sd-tree-node-title,
|
package/es/tree/style/index.scss
CHANGED
|
@@ -157,7 +157,7 @@ $tree-node-prefix-cls: string.unquote('#{theme.$prefix}-tree-node');
|
|
|
157
157
|
&-selected &-title,
|
|
158
158
|
&-selected &-title:hover {
|
|
159
159
|
color: $tree-color-title-text_active;
|
|
160
|
-
transition: color theme.$transition-duration-2 theme.$transition-timing-function-
|
|
160
|
+
transition: color theme.$transition-duration-2 theme.$transition-timing-function-standard;
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
&-disabled-selectable,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
|
|
2
2
|
import { getPrefixCls } from "../_utils/global-config.js";
|
|
3
3
|
import { isArray, isFunction, isUndefined } from "../_utils/is.js";
|
|
4
|
+
import { KEYBOARD_KEY } from "../_utils/keyboard.js";
|
|
4
5
|
import { _asyncToGenerator } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/asyncToGenerator.js";
|
|
5
6
|
import virtual_list_default from "../_components/virtual-list/index.js";
|
|
6
7
|
import usePickSlots from "../_hooks/use-pick-slots.js";
|
|
@@ -11,7 +12,7 @@ import { getCheckedStateByCheck, isNodeCheckable } from "./utils/check-utils.js"
|
|
|
11
12
|
import { TreeInjectionKey } from "./context.js";
|
|
12
13
|
import useCheckedState from "./hooks/use-checked-state.js";
|
|
13
14
|
import node_default from "./node.js";
|
|
14
|
-
import { Fragment, computed, createBlock, createElementBlock, defineComponent, mergeProps, normalizeClass, normalizeStyle, openBlock, provide, reactive, ref, renderList, toRefs, unref, useSlots, watch, withCtx } from "vue";
|
|
15
|
+
import { Fragment, computed, createBlock, createElementBlock, defineComponent, mergeProps, nextTick, normalizeClass, normalizeStyle, openBlock, provide, reactive, ref, renderList, toRefs, unref, useSlots, watch, withCtx } from "vue";
|
|
15
16
|
//#region components/tree/tree.vue?vue&type=script&setup=true&lang.ts
|
|
16
17
|
var tree_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent(_objectSpread2(_objectSpread2({}, { name: "Tree" }), {}, {
|
|
17
18
|
__name: "tree",
|
|
@@ -340,6 +341,7 @@ var tree_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
340
341
|
};
|
|
341
342
|
});
|
|
342
343
|
const virtualListRef = ref(null);
|
|
344
|
+
const rootEl = ref(null);
|
|
343
345
|
const virtualListVersion = ref(0);
|
|
344
346
|
const virtualListKey = computed(() => `tree-virtual-list-${virtualListVersion.value}`);
|
|
345
347
|
const switcherIcon = usePickSlots(slots, "switcher-icon");
|
|
@@ -421,6 +423,78 @@ var tree_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
421
423
|
});
|
|
422
424
|
return uniqueNodeList;
|
|
423
425
|
});
|
|
426
|
+
const activeKey = ref(void 0);
|
|
427
|
+
const effectiveActiveKey = computed(() => {
|
|
428
|
+
var _visibleTreeNodeList$;
|
|
429
|
+
if (activeKey.value !== void 0) return activeKey.value;
|
|
430
|
+
const selected = mergedSelectedKeys.value.find((k) => key2TreeNode.value.has(k));
|
|
431
|
+
if (selected !== void 0) return selected;
|
|
432
|
+
return (_visibleTreeNodeList$ = visibleTreeNodeList.value[0]) === null || _visibleTreeNodeList$ === void 0 ? void 0 : _visibleTreeNodeList$.key;
|
|
433
|
+
});
|
|
434
|
+
function focusNodeKey(targetKey) {
|
|
435
|
+
activeKey.value = targetKey;
|
|
436
|
+
nextTick(() => {
|
|
437
|
+
var _rootEl$value;
|
|
438
|
+
const el = (_rootEl$value = rootEl.value) === null || _rootEl$value === void 0 ? void 0 : _rootEl$value.querySelector(`[data-key="${CSS.escape(String(targetKey))}"]`);
|
|
439
|
+
el === null || el === void 0 || el.focus();
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
function onNodeKeydown(key, e) {
|
|
443
|
+
var _node$children;
|
|
444
|
+
const list = visibleTreeNodeList.value;
|
|
445
|
+
const idx = list.findIndex((n) => n.key === key);
|
|
446
|
+
if (idx === -1) return;
|
|
447
|
+
const node = list[idx];
|
|
448
|
+
const hasChildren = !node.isLeaf && Boolean((_node$children = node.children) === null || _node$children === void 0 ? void 0 : _node$children.length);
|
|
449
|
+
const isExpanded = mergedExpandedKeys.value.includes(key);
|
|
450
|
+
switch (e.key) {
|
|
451
|
+
case KEYBOARD_KEY.ARROW_DOWN:
|
|
452
|
+
e.preventDefault();
|
|
453
|
+
if (list[idx + 1]) focusNodeKey(list[idx + 1].key);
|
|
454
|
+
break;
|
|
455
|
+
case KEYBOARD_KEY.ARROW_UP:
|
|
456
|
+
e.preventDefault();
|
|
457
|
+
if (list[idx - 1]) focusNodeKey(list[idx - 1].key);
|
|
458
|
+
break;
|
|
459
|
+
case KEYBOARD_KEY.HOME:
|
|
460
|
+
e.preventDefault();
|
|
461
|
+
if (list[0]) focusNodeKey(list[0].key);
|
|
462
|
+
break;
|
|
463
|
+
case KEYBOARD_KEY.END:
|
|
464
|
+
e.preventDefault();
|
|
465
|
+
if (list.length) focusNodeKey(list[list.length - 1].key);
|
|
466
|
+
break;
|
|
467
|
+
case KEYBOARD_KEY.ARROW_RIGHT:
|
|
468
|
+
e.preventDefault();
|
|
469
|
+
if (hasChildren && !isExpanded) onExpand(true, key, e);
|
|
470
|
+
else if (hasChildren && isExpanded) {
|
|
471
|
+
var _node$children2;
|
|
472
|
+
const firstChild = (_node$children2 = node.children) === null || _node$children2 === void 0 ? void 0 : _node$children2[0];
|
|
473
|
+
if (firstChild) focusNodeKey(firstChild.key);
|
|
474
|
+
}
|
|
475
|
+
break;
|
|
476
|
+
case KEYBOARD_KEY.ARROW_LEFT:
|
|
477
|
+
e.preventDefault();
|
|
478
|
+
if (hasChildren && isExpanded) onExpand(false, key, e);
|
|
479
|
+
else {
|
|
480
|
+
const parents = node.pathParentKeys;
|
|
481
|
+
if (parents.length) focusNodeKey(parents[parents.length - 1]);
|
|
482
|
+
}
|
|
483
|
+
break;
|
|
484
|
+
case KEYBOARD_KEY.ENTER:
|
|
485
|
+
case KEYBOARD_KEY.SPACE:
|
|
486
|
+
if (node.checkable && !node.disableCheckbox && !node.disabled) {
|
|
487
|
+
e.preventDefault();
|
|
488
|
+
onCheck(!mergedCheckedKeys.value.includes(key), key, e);
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
491
|
+
if (node.selectable && !node.disabled) {
|
|
492
|
+
e.preventDefault();
|
|
493
|
+
onSelect(key, e);
|
|
494
|
+
}
|
|
495
|
+
break;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
424
498
|
function getPublicCheckedKeys(rawCheckedKeys, rawCheckedStrategy = checkedStrategy.value) {
|
|
425
499
|
let publicCheckedKeys = [...rawCheckedKeys];
|
|
426
500
|
if (rawCheckedStrategy === "parent") publicCheckedKeys = rawCheckedKeys.filter((_key) => {
|
|
@@ -717,6 +791,7 @@ var tree_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
717
791
|
expandedKeys: mergedExpandedKeys,
|
|
718
792
|
loadingKeys,
|
|
719
793
|
currentExpandKeys,
|
|
794
|
+
activeKey: effectiveActiveKey,
|
|
720
795
|
onLoadMore: computed(() => (loadMore === null || loadMore === void 0 ? void 0 : loadMore.value) ? function() {
|
|
721
796
|
var _ref = _asyncToGenerator(function* (key) {
|
|
722
797
|
if (!isFunction(loadMore.value)) return;
|
|
@@ -744,6 +819,7 @@ var tree_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
744
819
|
onExpand,
|
|
745
820
|
onExpandEnd,
|
|
746
821
|
onNodeEvent,
|
|
822
|
+
onNodeKeydown,
|
|
747
823
|
onNodeLongPress,
|
|
748
824
|
onNodeSwipe,
|
|
749
825
|
allowDrop(key, dropPosition) {
|
|
@@ -947,8 +1023,11 @@ var tree_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
947
1023
|
});
|
|
948
1024
|
return (_ctx, _cache) => {
|
|
949
1025
|
return openBlock(), createElementBlock("div", {
|
|
1026
|
+
ref_key: "rootEl",
|
|
1027
|
+
ref: rootEl,
|
|
950
1028
|
class: normalizeClass(classNames.value),
|
|
951
|
-
style: normalizeStyle(treeStyle.value)
|
|
1029
|
+
style: normalizeStyle(treeStyle.value),
|
|
1030
|
+
role: "tree"
|
|
952
1031
|
}, [unref(virtualListProps) ? (openBlock(), createBlock(unref(virtual_list_default), mergeProps({
|
|
953
1032
|
key: virtualListKey.value,
|
|
954
1033
|
ref_key: "virtualListRef",
|
|
@@ -525,6 +525,12 @@ var tree_select_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
525
525
|
};
|
|
526
526
|
const { tipVisible, show: showReadonlyTip } = useReadonlyTip(toRef(props, "readonly"), mergedDisabled);
|
|
527
527
|
const readonlyTipText = useReadonlyTipText(toRef(props, "readonly"));
|
|
528
|
+
const triggerInputAttrs = computed(() => ({
|
|
529
|
+
"role": "combobox",
|
|
530
|
+
"aria-expanded": panelVisible.value,
|
|
531
|
+
"aria-haspopup": "listbox",
|
|
532
|
+
"aria-autocomplete": mergedAllowSearch.value ? "list" : "none"
|
|
533
|
+
}));
|
|
528
534
|
const setPanelVisible = (visible) => {
|
|
529
535
|
if (visible && props.readonly && !mergedDisabled.value) {
|
|
530
536
|
showReadonlyTip();
|
|
@@ -603,6 +609,7 @@ var tree_select_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
603
609
|
"popup-container": __props.popupContainer,
|
|
604
610
|
"click-to-close": !Boolean(unref(mergedAllowSearch)),
|
|
605
611
|
"auto-fit-transform-origin": "",
|
|
612
|
+
"aria-has-popup": "listbox",
|
|
606
613
|
onPopupVisibleChange: unref(onVisibleChange)
|
|
607
614
|
}), {
|
|
608
615
|
content: withCtx(() => [createElementVNode("div", {
|
|
@@ -671,7 +678,8 @@ var tree_select_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
671
678
|
error: __props.error,
|
|
672
679
|
bordered: __props.border,
|
|
673
680
|
placeholder: __props.placeholder,
|
|
674
|
-
multiple: isMultiple.value
|
|
681
|
+
multiple: isMultiple.value,
|
|
682
|
+
"input-attrs": triggerInputAttrs.value
|
|
675
683
|
}, _ctx.$attrs, {
|
|
676
684
|
onInputValueChange: unref(onSearchValueChange),
|
|
677
685
|
onClear: onInnerClear,
|
|
@@ -711,6 +719,7 @@ var tree_select_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
711
719
|
"bordered",
|
|
712
720
|
"placeholder",
|
|
713
721
|
"multiple",
|
|
722
|
+
"input-attrs",
|
|
714
723
|
"onInputValueChange"
|
|
715
724
|
])])]),
|
|
716
725
|
_: 3
|
package/es/trigger/index.d.ts
CHANGED
|
@@ -145,6 +145,18 @@ declare const Trigger: {
|
|
|
145
145
|
type: NumberConstructor;
|
|
146
146
|
default: number;
|
|
147
147
|
};
|
|
148
|
+
escToClose: {
|
|
149
|
+
type: BooleanConstructor;
|
|
150
|
+
default: boolean;
|
|
151
|
+
};
|
|
152
|
+
ariaHasPopup: {
|
|
153
|
+
type: import("vue").PropType<boolean | "menu" | "listbox" | "tree" | "grid" | "dialog">;
|
|
154
|
+
default: undefined;
|
|
155
|
+
};
|
|
156
|
+
ariaDescribedbyPopup: {
|
|
157
|
+
type: BooleanConstructor;
|
|
158
|
+
default: boolean;
|
|
159
|
+
};
|
|
148
160
|
}>> & Readonly<{
|
|
149
161
|
onHide?: (() => any) | undefined;
|
|
150
162
|
onResize?: (() => any) | undefined;
|
|
@@ -186,6 +198,9 @@ declare const Trigger: {
|
|
|
186
198
|
preventFocus: boolean;
|
|
187
199
|
scrollToClose: boolean;
|
|
188
200
|
scrollToCloseDistance: number;
|
|
201
|
+
escToClose: boolean;
|
|
202
|
+
ariaHasPopup: boolean | "dialog" | "menu" | "listbox" | "tree" | "grid";
|
|
203
|
+
ariaDescribedbyPopup: boolean;
|
|
189
204
|
}, true, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
|
190
205
|
P: {};
|
|
191
206
|
B: {};
|
|
@@ -336,6 +351,18 @@ declare const Trigger: {
|
|
|
336
351
|
type: NumberConstructor;
|
|
337
352
|
default: number;
|
|
338
353
|
};
|
|
354
|
+
escToClose: {
|
|
355
|
+
type: BooleanConstructor;
|
|
356
|
+
default: boolean;
|
|
357
|
+
};
|
|
358
|
+
ariaHasPopup: {
|
|
359
|
+
type: import("vue").PropType<boolean | "menu" | "listbox" | "tree" | "grid" | "dialog">;
|
|
360
|
+
default: undefined;
|
|
361
|
+
};
|
|
362
|
+
ariaDescribedbyPopup: {
|
|
363
|
+
type: BooleanConstructor;
|
|
364
|
+
default: boolean;
|
|
365
|
+
};
|
|
339
366
|
}>> & Readonly<{
|
|
340
367
|
onHide?: (() => any) | undefined;
|
|
341
368
|
onResize?: (() => any) | undefined;
|
|
@@ -371,6 +398,9 @@ declare const Trigger: {
|
|
|
371
398
|
preventFocus: boolean;
|
|
372
399
|
scrollToClose: boolean;
|
|
373
400
|
scrollToCloseDistance: number;
|
|
401
|
+
escToClose: boolean;
|
|
402
|
+
ariaHasPopup: boolean | "dialog" | "menu" | "listbox" | "tree" | "grid";
|
|
403
|
+
ariaDescribedbyPopup: boolean;
|
|
374
404
|
}>;
|
|
375
405
|
__isFragment?: never;
|
|
376
406
|
__isTeleport?: never;
|
|
@@ -518,6 +548,18 @@ declare const Trigger: {
|
|
|
518
548
|
type: NumberConstructor;
|
|
519
549
|
default: number;
|
|
520
550
|
};
|
|
551
|
+
escToClose: {
|
|
552
|
+
type: BooleanConstructor;
|
|
553
|
+
default: boolean;
|
|
554
|
+
};
|
|
555
|
+
ariaHasPopup: {
|
|
556
|
+
type: import("vue").PropType<boolean | "menu" | "listbox" | "tree" | "grid" | "dialog">;
|
|
557
|
+
default: undefined;
|
|
558
|
+
};
|
|
559
|
+
ariaDescribedbyPopup: {
|
|
560
|
+
type: BooleanConstructor;
|
|
561
|
+
default: boolean;
|
|
562
|
+
};
|
|
521
563
|
}>> & Readonly<{
|
|
522
564
|
onHide?: (() => any) | undefined;
|
|
523
565
|
onResize?: (() => any) | undefined;
|
|
@@ -559,6 +601,9 @@ declare const Trigger: {
|
|
|
559
601
|
preventFocus: boolean;
|
|
560
602
|
scrollToClose: boolean;
|
|
561
603
|
scrollToCloseDistance: number;
|
|
604
|
+
escToClose: boolean;
|
|
605
|
+
ariaHasPopup: boolean | "dialog" | "menu" | "listbox" | "tree" | "grid";
|
|
606
|
+
ariaDescribedbyPopup: boolean;
|
|
562
607
|
}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & {
|
|
563
608
|
install: (app: App, options?: SDOptions) => void;
|
|
564
609
|
};
|
package/es/trigger/trigger.d.ts
CHANGED
|
@@ -144,6 +144,18 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
144
144
|
type: NumberConstructor;
|
|
145
145
|
default: number;
|
|
146
146
|
};
|
|
147
|
+
escToClose: {
|
|
148
|
+
type: BooleanConstructor;
|
|
149
|
+
default: boolean;
|
|
150
|
+
};
|
|
151
|
+
ariaHasPopup: {
|
|
152
|
+
type: PropType<boolean | "menu" | "listbox" | "tree" | "grid" | "dialog">;
|
|
153
|
+
default: undefined;
|
|
154
|
+
};
|
|
155
|
+
ariaDescribedbyPopup: {
|
|
156
|
+
type: BooleanConstructor;
|
|
157
|
+
default: boolean;
|
|
158
|
+
};
|
|
147
159
|
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
148
160
|
'update:popupVisible': (_visible: boolean) => true;
|
|
149
161
|
popupVisibleChange: (_visible: boolean) => true;
|
|
@@ -293,6 +305,18 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
293
305
|
type: NumberConstructor;
|
|
294
306
|
default: number;
|
|
295
307
|
};
|
|
308
|
+
escToClose: {
|
|
309
|
+
type: BooleanConstructor;
|
|
310
|
+
default: boolean;
|
|
311
|
+
};
|
|
312
|
+
ariaHasPopup: {
|
|
313
|
+
type: PropType<boolean | "menu" | "listbox" | "tree" | "grid" | "dialog">;
|
|
314
|
+
default: undefined;
|
|
315
|
+
};
|
|
316
|
+
ariaDescribedbyPopup: {
|
|
317
|
+
type: BooleanConstructor;
|
|
318
|
+
default: boolean;
|
|
319
|
+
};
|
|
296
320
|
}>> & Readonly<{
|
|
297
321
|
onHide?: (() => any) | undefined;
|
|
298
322
|
onResize?: (() => any) | undefined;
|
|
@@ -328,5 +352,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
328
352
|
preventFocus: boolean;
|
|
329
353
|
scrollToClose: boolean;
|
|
330
354
|
scrollToCloseDistance: number;
|
|
355
|
+
escToClose: boolean;
|
|
356
|
+
ariaHasPopup: boolean | "dialog" | "menu" | "listbox" | "tree" | "grid";
|
|
357
|
+
ariaDescribedbyPopup: boolean;
|
|
331
358
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
332
359
|
export default _default;
|
package/es/trigger/trigger.js
CHANGED
|
@@ -4,6 +4,7 @@ import { getPrefixCls } from "../_utils/global-config.js";
|
|
|
4
4
|
import { isEmptyChildren, mergeFirstChild } from "../_utils/vue-utils.js";
|
|
5
5
|
import { off, on } from "../_utils/dom.js";
|
|
6
6
|
import { throttleByRaf } from "../_utils/throttle-by-raf.js";
|
|
7
|
+
import { KEYBOARD_KEY } from "../_utils/keyboard.js";
|
|
7
8
|
import { omit } from "../_utils/omit.js";
|
|
8
9
|
import client_only_default from "../_components/client-only.js";
|
|
9
10
|
import { useFirstElement } from "../_hooks/use-first-element.js";
|
|
@@ -14,7 +15,7 @@ import { useResizeObserver as useResizeObserver$1 } from "../_hooks/use-resize-o
|
|
|
14
15
|
import { useTeleportContainer } from "../_hooks/use-teleport-container.js";
|
|
15
16
|
import { triggerInjectionKey } from "./context.js";
|
|
16
17
|
import { getArrowStyle, getElementScrollRect, getPopupStyle, getScrollElements, getTransformOrigin } from "./utils.js";
|
|
17
|
-
import { Fragment, Teleport, Transition, computed, createVNode, defineComponent, inject, mergeProps, nextTick, onBeforeUnmount, onDeactivated, onMounted, onUpdated, provide, reactive, ref, vShow, watch, withDirectives } from "vue";
|
|
18
|
+
import { Fragment, Teleport, Transition, computed, createVNode, defineComponent, getCurrentInstance, inject, mergeProps, nextTick, onBeforeUnmount, onDeactivated, onMounted, onUpdated, provide, reactive, ref, vShow, watch, withDirectives } from "vue";
|
|
18
19
|
import { onClickOutside, useEventListener } from "@vueuse/core";
|
|
19
20
|
//#region components/trigger/trigger.tsx
|
|
20
21
|
var TRIGGER_EVENTS = [
|
|
@@ -301,6 +302,31 @@ var trigger_default = /* @__PURE__ */ defineComponent({
|
|
|
301
302
|
scrollToCloseDistance: {
|
|
302
303
|
type: Number,
|
|
303
304
|
default: 0
|
|
305
|
+
},
|
|
306
|
+
/**
|
|
307
|
+
* @zh 是否支持 ESC 键关闭弹出层
|
|
308
|
+
* @en Whether to close the popup with the ESC key
|
|
309
|
+
*/
|
|
310
|
+
escToClose: {
|
|
311
|
+
type: Boolean,
|
|
312
|
+
default: false
|
|
313
|
+
},
|
|
314
|
+
/**
|
|
315
|
+
* @zh 弹出层类型,用于触发器的 `aria-haspopup`。设置后会自动给触发器加 `aria-haspopup` / `aria-expanded` / `aria-controls`,并给弹出层加 id。
|
|
316
|
+
* @en Popup type for the trigger's `aria-haspopup`. When set, the trigger automatically gets `aria-haspopup` / `aria-expanded` / `aria-controls`, and the popup gets an id.
|
|
317
|
+
* @values true, 'menu', 'listbox', 'tree', 'grid', 'dialog'
|
|
318
|
+
*/
|
|
319
|
+
ariaHasPopup: {
|
|
320
|
+
type: [Boolean, String],
|
|
321
|
+
default: void 0
|
|
322
|
+
},
|
|
323
|
+
/**
|
|
324
|
+
* @zh 是否给触发器加 `aria-describedby` 指向弹出层(tooltip 模式用)。弹出层显示时才挂。
|
|
325
|
+
* @en Whether to add `aria-describedby` on the trigger pointing to the popup (tooltip pattern). Only applied while the popup is visible.
|
|
326
|
+
*/
|
|
327
|
+
ariaDescribedbyPopup: {
|
|
328
|
+
type: Boolean,
|
|
329
|
+
default: false
|
|
304
330
|
}
|
|
305
331
|
},
|
|
306
332
|
emits: {
|
|
@@ -333,6 +359,7 @@ var trigger_default = /* @__PURE__ */ defineComponent({
|
|
|
333
359
|
setup(props, { emit, slots, attrs }) {
|
|
334
360
|
const triggerEventAttrs = attrs;
|
|
335
361
|
const prefixCls = getPrefixCls("trigger");
|
|
362
|
+
const popupId = `${prefixCls}-popup-${getCurrentInstance().uid}`;
|
|
336
363
|
const popupAttrs = computed(() => omit(attrs, TRIGGER_EVENTS));
|
|
337
364
|
const configCtx = inject(configProviderInjectionKey, void 0);
|
|
338
365
|
const themePopupContainer = inject(themePopupContainerInjectionKey, void 0);
|
|
@@ -361,6 +388,16 @@ var trigger_default = /* @__PURE__ */ defineComponent({
|
|
|
361
388
|
var _props$popupVisible;
|
|
362
389
|
return (_props$popupVisible = props.popupVisible) !== null && _props$popupVisible !== void 0 ? _props$popupVisible : popupVisible.value;
|
|
363
390
|
});
|
|
391
|
+
const firstChildAria = computed(() => {
|
|
392
|
+
const aria = {};
|
|
393
|
+
if (props.ariaHasPopup !== void 0) {
|
|
394
|
+
aria["aria-haspopup"] = props.ariaHasPopup === true ? "true" : props.ariaHasPopup;
|
|
395
|
+
aria["aria-expanded"] = computedVisible.value;
|
|
396
|
+
aria["aria-controls"] = computedVisible.value ? popupId : void 0;
|
|
397
|
+
}
|
|
398
|
+
if (props.ariaDescribedbyPopup) aria["aria-describedby"] = computedVisible.value ? popupId : void 0;
|
|
399
|
+
return aria;
|
|
400
|
+
});
|
|
364
401
|
const { teleportContainer, containerRef } = useTeleportContainer({
|
|
365
402
|
popupContainer: mergedPopupContainer,
|
|
366
403
|
visible: computedVisible,
|
|
@@ -551,7 +588,12 @@ var trigger_default = /* @__PURE__ */ defineComponent({
|
|
|
551
588
|
if (getChildElements().some((element) => element.contains(target))) return;
|
|
552
589
|
changeVisible(false);
|
|
553
590
|
};
|
|
554
|
-
|
|
591
|
+
const documentRef = computed(() => typeof document === "undefined" ? void 0 : document);
|
|
592
|
+
useEventListener(documentRef, "contextmenu", handleOutsideContextmenu, { capture: true });
|
|
593
|
+
const handleKeydown = (ev) => {
|
|
594
|
+
if (props.escToClose && computedVisible.value && ev.key === KEYBOARD_KEY.ESC) changeVisible(false);
|
|
595
|
+
};
|
|
596
|
+
useEventListener(documentRef, "keydown", handleKeydown);
|
|
555
597
|
const isExceedThreshold = (oldPosition, element) => {
|
|
556
598
|
const [scrollTop, scrollLeft] = oldPosition;
|
|
557
599
|
const { scrollTop: newScrollTop, scrollLeft: newScrollLeft } = element;
|
|
@@ -663,19 +705,19 @@ var trigger_default = /* @__PURE__ */ defineComponent({
|
|
|
663
705
|
return () => {
|
|
664
706
|
var _slots$default, _slots$default2;
|
|
665
707
|
children.value = (_slots$default = (_slots$default2 = slots.default) === null || _slots$default2 === void 0 ? void 0 : _slots$default2.call(slots)) !== null && _slots$default !== void 0 ? _slots$default : [];
|
|
666
|
-
mergeFirstChild(children.value, {
|
|
667
|
-
class: triggerCls.value,
|
|
708
|
+
mergeFirstChild(children.value, _objectSpread2(_objectSpread2({ class: triggerCls.value }, firstChildAria.value), {}, {
|
|
668
709
|
onClick: handleClick,
|
|
669
710
|
onMouseenter: handleMouseEnter,
|
|
670
711
|
onMouseleave: handleMouseLeave,
|
|
671
712
|
onFocusin: handleFocusin,
|
|
672
713
|
onFocusout: handleFocusout,
|
|
673
714
|
onContextmenu: handleContextmenuWithContext
|
|
674
|
-
});
|
|
715
|
+
}));
|
|
675
716
|
return createVNode(Fragment, null, [props.autoFixPosition ? createVNode(resize_observer_v2_default, { "onResize": onTargetResize }, { default: () => [children.value] }) : children.value, createVNode(client_only_default, null, { default: () => [createVNode(Teleport, {
|
|
676
717
|
"to": teleportContainer.value,
|
|
677
718
|
"disabled": !props.renderToBody
|
|
678
719
|
}, { default: () => [(!props.unmountOnClose || computedVisible.value || mounted.value) && !hidePopup.value && createVNode(resize_observer_v2_default, { "onResize": handleResize }, { default: () => [createVNode("div", mergeProps({
|
|
720
|
+
"id": popupId,
|
|
679
721
|
"ref": popupRef,
|
|
680
722
|
"class": [`${prefixCls}-popup`, `${prefixCls}-position-${popupPosition.value}`],
|
|
681
723
|
"style": _objectSpread2(_objectSpread2({}, popupStyle.value), {}, {
|