@sdata/web-vue 2.3.1 → 2.8.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/README.md +1 -1
- package/dist/sd.css +133 -187
- package/dist/sd.min.css +1 -1
- package/es/_hooks/use-responsive.d.ts +2 -2
- package/es/_hooks/use-theme-mode.d.ts +3 -0
- package/es/{calendar/hooks/use-calendar-theme.js → _hooks/use-theme-mode.js} +14 -10
- package/es/_utils/responsive-observe.d.ts +5 -4
- package/es/_utils/responsive-observe.js +2 -1
- package/es/alert/index.d.ts +3 -3
- package/es/anchor/index.d.ts +3 -3
- package/es/avatar/index.d.ts +20 -20
- package/es/border-beam/border-beam.js +5 -0
- package/es/border-beam/border-beam.vue.d.ts +52 -0
- package/es/border-beam/border-beam.vue_vue_type_script_setup_true_lang.js +623 -0
- package/es/border-beam/index.d.ts +106 -0
- package/es/border-beam/index.js +10 -0
- package/es/border-beam/pulseDriver.d.ts +2 -0
- package/es/border-beam/pulseDriver.js +74 -0
- package/es/border-beam/style/css.js +2 -0
- package/es/border-beam/style/index.css +21 -0
- package/es/border-beam/style/index.d.ts +2 -0
- package/es/border-beam/style/index.js +2 -0
- package/es/border-beam/style/index.scss +12 -0
- package/es/border-beam/style/token.scss +12 -0
- package/es/border-beam/styles.d.ts +42 -0
- package/es/border-beam/styles.js +3545 -0
- package/es/border-beam/types.d.ts +27 -0
- package/es/button/index.d.ts +24 -24
- package/es/calendar/components/index.vue.d.ts +1 -1
- package/es/calendar/components/index.vue_vue_type_script_setup_true_lang.js +3 -2
- package/es/calendar/index.d.ts +5 -5
- package/es/carousel/index.d.ts +3 -3
- package/es/checkbox/checkbox.d.ts +3 -3
- package/es/collapse/collapse-item.d.ts +5 -5
- package/es/collapse/index.d.ts +3 -3
- package/es/components.d.ts +1 -0
- package/es/config-provider/index.d.ts +21 -21
- package/es/date-picker/index.d.ts +14 -14
- package/es/date-picker/picker.vue.d.ts +2 -2
- package/es/date-picker/range-picker.vue.d.ts +2 -2
- package/es/descriptions/index.d.ts +24 -24
- package/es/drawer/index.d.ts +16 -15
- package/es/dropdown/index.d.ts +15 -15
- package/es/form/form-item.vue_vue_type_script_setup_true_lang.js +3 -3
- package/es/form/index.d.ts +3 -3
- package/es/grid/grid-col.vue_vue_type_script_setup_true_lang.js +2 -2
- package/es/grid/grid.vue_vue_type_script_setup_true_lang.js +10 -10
- package/es/icon/icon-menu/icon-menu.js +5 -0
- package/es/icon/icon-menu/icon-menu.vue_vue_type_script_setup_true_lang.js +52 -0
- package/es/icon/icon-menu/index.js +9 -0
- package/es/index.css +133 -187
- package/es/index.d.ts +4 -2
- package/es/index.js +3 -2
- package/es/index.scss +1 -0
- package/es/input/index.d.ts +7 -7
- package/es/json-form/index.d.ts +9 -9
- package/es/json-form/json-form-item.vue_vue_type_script_setup_true_lang.js +1 -1
- package/es/json-form/json-form.vue.d.ts +3 -3
- package/es/layout/content.vue.d.ts +2 -2
- package/es/layout/content.vue_vue_type_script_setup_true_lang.js +8 -3
- package/es/layout/context.d.ts +12 -9
- package/es/layout/context.js +11 -3
- package/es/layout/footer.vue.d.ts +2 -2
- package/es/layout/footer.vue_vue_type_script_setup_true_lang.js +8 -3
- package/es/layout/header.vue.d.ts +3 -30
- package/es/layout/header.vue_vue_type_script_setup_true_lang.js +9 -339
- package/es/layout/hooks/use-has-sider.d.ts +2 -0
- package/es/layout/hooks/use-has-sider.js +38 -0
- package/es/layout/index.d.ts +120 -371
- package/es/layout/index.js +2 -2
- package/es/layout/interface.d.ts +16 -46
- package/es/layout/layout.vue.d.ts +4 -2
- package/es/layout/layout.vue_vue_type_script_setup_true_lang.js +38 -14
- package/es/layout/sider.vue.d.ts +68 -178
- package/es/layout/sider.vue_vue_type_script_setup_true_lang.js +243 -363
- package/es/layout/style/index.css +128 -186
- package/es/layout/style/index.scss +146 -234
- package/es/layout/style/token.scss +46 -26
- package/es/link/index.d.ts +6 -6
- package/es/list/index.d.ts +18 -18
- package/es/menu/base-menu.vue.d.ts +1 -1
- package/es/menu/base-menu.vue_vue_type_script_setup_true_lang.js +14 -14
- package/es/menu/item.d.ts +1 -1
- package/es/menu/menu.d.ts +12 -12
- package/es/menu/menu.js +3 -3
- package/es/modal/index.d.ts +15 -15
- package/es/popconfirm/index.d.ts +12 -12
- package/es/popover/index.d.ts +12 -12
- package/es/progress/index.d.ts +6 -6
- package/es/qr-code/index.d.ts +3 -3
- package/es/radio/radio.d.ts +3 -3
- package/es/resize-box/resize-box.vue_vue_type_script_setup_true_lang.js +7 -7
- package/es/result/index.d.ts +3 -3
- package/es/scrollbar/style/index.css +1 -1
- package/es/scrollbar/style/index.scss +4 -1
- package/es/sd-vue.js +3 -1
- package/es/select/select.d.ts +17 -17
- package/es/slider/index.d.ts +3 -3
- package/es/split/split.vue_vue_type_script_setup_true_lang.js +6 -6
- package/es/steps/index.d.ts +6 -6
- package/es/tabs/index.d.ts +6 -6
- package/es/tag/index.d.ts +6 -6
- package/es/textarea/textarea.vue_vue_type_script_setup_true_lang.js +2 -2
- package/es/theme-provider/index.d.ts +9 -9
- package/es/time-picker/index.d.ts +6 -6
- package/es/timeline/index.d.ts +3 -3
- package/es/timeline/timeline.d.ts +1 -1
- package/es/tooltip/index.d.ts +3 -3
- package/es/tour/index.d.ts +3 -3
- package/es/tour/tour.vue_vue_type_script_setup_true_lang.js +6 -6
- package/es/tree/node-switcher.vue.d.ts +1 -1
- package/es/tree/tree.vue_vue_type_script_setup_true_lang.js +23 -23
- package/json/vetur-attributes.json +27 -153
- package/json/vetur-tags.json +13 -43
- package/json/web-types.json +43 -293
- package/package.json +10 -10
- package/es/calendar/hooks/use-calendar-theme.d.ts +0 -4
- package/es/layout/utils.d.ts +0 -1
- package/es/layout/utils.js +0 -11
|
@@ -1,447 +1,327 @@
|
|
|
1
|
+
import { configProviderInjectionKey } from "../config-provider/context.js";
|
|
1
2
|
import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
|
|
2
3
|
import { getPrefixCls } from "../_utils/global-config.js";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import useMergeState from "../_hooks/use-merge-state.js";
|
|
6
|
-
import { KEYBOARD_KEY } from "../_utils/keyboard.js";
|
|
7
|
-
import usePopupManager from "../_hooks/use-popup-manager.js";
|
|
4
|
+
import { useScrollbar } from "../_hooks/use-scrollbar.js";
|
|
5
|
+
import Scrollbar from "../scrollbar/index.js";
|
|
8
6
|
import IconRight from "../icon/icon-right/index.js";
|
|
7
|
+
import { useThemeMode } from "../_hooks/use-theme-mode.js";
|
|
9
8
|
import IconLeft from "../icon/icon-left/index.js";
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, inject, mergeProps, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, reactive, renderSlot, resolveDynamicComponent, toRefs, unref, watch, withCtx } from "vue";
|
|
9
|
+
import Drawer from "../drawer/index.js";
|
|
10
|
+
import { LayoutContextInjectionKey, SiderContextInjectionKey } from "./context.js";
|
|
11
|
+
import IconMenu from "../icon/icon-menu/index.js";
|
|
12
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, inject, mergeProps, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, reactive, ref, renderSlot, resolveDynamicComponent, toRef, unref, watch, withCtx } from "vue";
|
|
15
13
|
//#region components/layout/sider.vue?vue&type=script&setup=true&lang.ts
|
|
16
|
-
var _hoisted_1 = { key: 0 };
|
|
17
|
-
var _hoisted_2 = { key: 1 };
|
|
18
14
|
var sider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent(_objectSpread2(_objectSpread2({}, { name: "LayoutSider" }), {}, {
|
|
19
15
|
__name: "sider",
|
|
20
16
|
props: {
|
|
21
17
|
/**
|
|
22
|
-
* @zh
|
|
23
|
-
* @en
|
|
18
|
+
* @zh 是否可折叠
|
|
19
|
+
* @en Whether can be collapsed
|
|
24
20
|
*/
|
|
25
|
-
|
|
26
|
-
type: String,
|
|
27
|
-
default: "light"
|
|
28
|
-
},
|
|
29
|
-
/**
|
|
30
|
-
* @zh 抽屉是否可见
|
|
31
|
-
* @en Whether navigation drawer is visible
|
|
32
|
-
*/
|
|
33
|
-
modelValue: {
|
|
34
|
-
type: Boolean,
|
|
35
|
-
default: void 0
|
|
36
|
-
},
|
|
37
|
-
/**
|
|
38
|
-
* @zh 默认是否显示抽屉
|
|
39
|
-
* @en Whether navigation drawer is visible by default
|
|
40
|
-
*/
|
|
41
|
-
defaultVisible: {
|
|
21
|
+
collapsible: {
|
|
42
22
|
type: Boolean,
|
|
43
23
|
default: false
|
|
44
24
|
},
|
|
45
25
|
/**
|
|
46
|
-
* @zh
|
|
47
|
-
* @en Current collapsed state
|
|
26
|
+
* @zh 当前折叠状态(受控)
|
|
27
|
+
* @en Current collapsed state (controlled)
|
|
48
28
|
*/
|
|
49
29
|
collapsed: {
|
|
50
30
|
type: Boolean,
|
|
51
31
|
default: void 0
|
|
52
32
|
},
|
|
53
33
|
/**
|
|
54
|
-
* @zh
|
|
55
|
-
* @en
|
|
34
|
+
* @zh 默认折叠状态(非受控)
|
|
35
|
+
* @en Default collapsed state (uncontrolled)
|
|
56
36
|
*/
|
|
57
37
|
defaultCollapsed: {
|
|
58
38
|
type: Boolean,
|
|
59
39
|
default: false
|
|
60
40
|
},
|
|
61
41
|
/**
|
|
62
|
-
* @zh
|
|
63
|
-
* @en Whether
|
|
42
|
+
* @zh 折叠时是否反转箭头方向
|
|
43
|
+
* @en Whether to reverse the arrow direction when collapsed
|
|
64
44
|
*/
|
|
65
|
-
|
|
45
|
+
reverseArrow: {
|
|
46
|
+
type: Boolean,
|
|
47
|
+
default: false
|
|
48
|
+
},
|
|
66
49
|
/**
|
|
67
|
-
* @zh
|
|
68
|
-
* @en
|
|
50
|
+
* @zh collapsedWidth 为 0 时零宽触发器的自定义样式
|
|
51
|
+
* @en Custom style of zero-width trigger when collapsedWidth is 0
|
|
69
52
|
*/
|
|
70
|
-
|
|
71
|
-
type:
|
|
53
|
+
zeroWidthTriggerStyle: {
|
|
54
|
+
type: Object,
|
|
72
55
|
default: void 0
|
|
73
56
|
},
|
|
74
57
|
/**
|
|
75
|
-
* @zh
|
|
76
|
-
* @en Whether to
|
|
58
|
+
* @zh 是否隐藏内置折叠触发器,配合受控的 collapsed 自行控制折叠
|
|
59
|
+
* @en Whether to hide the built-in collapse trigger, control collapse via collapsed
|
|
77
60
|
*/
|
|
78
|
-
|
|
61
|
+
hideTrigger: {
|
|
79
62
|
type: Boolean,
|
|
80
63
|
default: false
|
|
81
64
|
},
|
|
82
65
|
/**
|
|
83
|
-
* @zh
|
|
84
|
-
* @en Width
|
|
85
|
-
*/
|
|
86
|
-
railWidth: {
|
|
87
|
-
type: [Number, String],
|
|
88
|
-
default: 56
|
|
89
|
-
},
|
|
90
|
-
/**
|
|
91
|
-
* @zh 是否在 hover 时临时展开 rail
|
|
92
|
-
* @en Whether to expand rail on hover
|
|
93
|
-
*/
|
|
94
|
-
expandOnHover: { type: Boolean },
|
|
95
|
-
/**
|
|
96
|
-
* @zh 是否禁用响应式宽度监听
|
|
97
|
-
* @en Whether to disable resize watcher
|
|
98
|
-
*/
|
|
99
|
-
disableResizeWatcher: { type: Boolean },
|
|
100
|
-
/**
|
|
101
|
-
* @zh 是否禁用路由切换时自动关闭临时抽屉
|
|
102
|
-
* @en Whether to disable route watcher
|
|
103
|
-
*/
|
|
104
|
-
disableRouteWatcher: { type: Boolean },
|
|
105
|
-
/**
|
|
106
|
-
* @zh 宽度
|
|
107
|
-
* @en Width
|
|
66
|
+
* @zh 展开时的宽度
|
|
67
|
+
* @en Width when expanded
|
|
108
68
|
*/
|
|
109
69
|
width: {
|
|
110
70
|
type: [Number, String],
|
|
111
71
|
default: 200
|
|
112
72
|
},
|
|
113
73
|
/**
|
|
114
|
-
* @zh
|
|
115
|
-
* @en
|
|
116
|
-
*/
|
|
117
|
-
height: {
|
|
118
|
-
type: [Number, String],
|
|
119
|
-
default: void 0
|
|
120
|
-
},
|
|
121
|
-
/**
|
|
122
|
-
* @zh 收缩宽度
|
|
123
|
-
* @en Collapsed width
|
|
74
|
+
* @zh 折叠时的宽度
|
|
75
|
+
* @en Width when collapsed
|
|
124
76
|
*/
|
|
125
77
|
collapsedWidth: {
|
|
126
|
-
type: Number,
|
|
78
|
+
type: [Number, String],
|
|
127
79
|
default: 48
|
|
128
80
|
},
|
|
129
81
|
/**
|
|
130
|
-
* @zh
|
|
131
|
-
* @en
|
|
132
|
-
*/
|
|
133
|
-
temporary: { type: Boolean },
|
|
134
|
-
/**
|
|
135
|
-
* @zh 是否始终显示抽屉
|
|
136
|
-
* @en Whether to always keep the drawer active
|
|
82
|
+
* @zh 响应式断点,命中断点时自动折叠
|
|
83
|
+
* @en Responsive breakpoint, auto collapse when matched
|
|
137
84
|
*/
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
* @en Whether temporary drawer should stay open after scrim click
|
|
142
|
-
*/
|
|
143
|
-
persistent: { type: Boolean },
|
|
144
|
-
/**
|
|
145
|
-
* @zh 是否显示遮罩层
|
|
146
|
-
* @en Whether to show the temporary drawer mask
|
|
147
|
-
*/
|
|
148
|
-
mask: {
|
|
149
|
-
type: Boolean,
|
|
150
|
-
default: true
|
|
85
|
+
breakpoint: {
|
|
86
|
+
type: String,
|
|
87
|
+
default: void 0
|
|
151
88
|
},
|
|
152
89
|
/**
|
|
153
|
-
* @zh
|
|
154
|
-
* @en
|
|
90
|
+
* @zh 主题颜色,未设置时跟随 ConfigProvider 的 themeMode
|
|
91
|
+
* @en Theme color, follows ConfigProvider's themeMode when not set
|
|
155
92
|
*/
|
|
156
|
-
|
|
157
|
-
type:
|
|
158
|
-
default:
|
|
93
|
+
theme: {
|
|
94
|
+
type: String,
|
|
95
|
+
default: void 0
|
|
159
96
|
},
|
|
160
97
|
/**
|
|
161
|
-
* @zh
|
|
162
|
-
* @en
|
|
98
|
+
* @zh 滚动配置,默认使用组件库 Scrollbar;设为 false 使用原生 overflow:auto,传对象可配置 Scrollbar
|
|
99
|
+
* @en Scroll config, use the component Scrollbar by default; set to false for native overflow:auto, pass an object to configure Scrollbar
|
|
163
100
|
*/
|
|
164
|
-
|
|
165
|
-
type: Boolean,
|
|
166
|
-
default:
|
|
101
|
+
scrollbar: {
|
|
102
|
+
type: [Object, Boolean],
|
|
103
|
+
default: void 0
|
|
167
104
|
},
|
|
168
105
|
/**
|
|
169
|
-
* @zh
|
|
170
|
-
* @en
|
|
106
|
+
* @zh 临时模式:使用 Drawer 渲染悬浮菜单,由 collapsed 控制开合(collapsed=true 关闭,false 展开)
|
|
107
|
+
* @en Temporary mode: render as a floating Drawer, opened/closed via collapsed (collapsed=true closes, false opens)
|
|
171
108
|
*/
|
|
172
|
-
|
|
173
|
-
type:
|
|
174
|
-
default:
|
|
175
|
-
validator: (value) => SIDER_LOCATIONS.includes(value)
|
|
109
|
+
temporary: {
|
|
110
|
+
type: Boolean,
|
|
111
|
+
default: false
|
|
176
112
|
},
|
|
177
113
|
/**
|
|
178
|
-
* @zh
|
|
179
|
-
* @en
|
|
180
|
-
*/
|
|
181
|
-
floating: { type: Boolean },
|
|
182
|
-
/**
|
|
183
|
-
* @zh 是否启用粘性定位
|
|
184
|
-
* @en Whether to enable sticky mode
|
|
185
|
-
*/
|
|
186
|
-
sticky: { type: Boolean },
|
|
187
|
-
/**
|
|
188
|
-
* @zh 翻转折叠提示箭头的方向,当 Sider 在右边时可以使用
|
|
189
|
-
* @en Flip and fold the direction of the hint arrow, which can be used when Sider is on the right
|
|
114
|
+
* @zh temporary 模式下透传给 Drawer 的配置(仅 temporary=true 时生效)
|
|
115
|
+
* @en Drawer passthrough config (only effective when temporary=true)
|
|
190
116
|
*/
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
* @zh 触发响应式布局的断点, 详见[响应式栅格](/vue/component/grid)
|
|
194
|
-
* @en Trigger breakpoints for responsive layout, see [Responsive Grid](/vue/component/grid) for details
|
|
195
|
-
*/
|
|
196
|
-
breakpoint: { type: String },
|
|
197
|
-
/**
|
|
198
|
-
* @zh 可以用 ResizeBox 替换原生的 `aside` 标签,这个参数即 ResizeBox的 `directions` 参数。详情请看 [ResizeBox](/vue/component/resize-box)。
|
|
199
|
-
* @en Can replace the native `aside` tag with ResizeBox. This is the `directions` parameter of ResizeBox. For details, please see [ResizeBox](/vue/component/resize-box)
|
|
200
|
-
*/
|
|
201
|
-
resizeDirections: {
|
|
202
|
-
type: Array,
|
|
117
|
+
drawerProps: {
|
|
118
|
+
type: Object,
|
|
203
119
|
default: void 0
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* @zh 隐藏底部折叠触发器
|
|
207
|
-
* @en Whether to hide the bottom fold trigger
|
|
208
|
-
*/
|
|
209
|
-
hideTrigger: { type: Boolean }
|
|
120
|
+
}
|
|
210
121
|
},
|
|
211
|
-
emits: [
|
|
212
|
-
"update:modelValue",
|
|
213
|
-
"update:rail",
|
|
214
|
-
"collapse",
|
|
215
|
-
"update:collapsed",
|
|
216
|
-
"breakpoint"
|
|
217
|
-
],
|
|
122
|
+
emits: ["collapse", "breakpoint"],
|
|
218
123
|
setup(__props, { emit: __emit }) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
})();
|
|
124
|
+
var _props$collapsed;
|
|
125
|
+
let siderUuid = 0;
|
|
126
|
+
const generateId = (prefix = "") => {
|
|
127
|
+
siderUuid += 1;
|
|
128
|
+
return `${prefix}${siderUuid}`;
|
|
129
|
+
};
|
|
226
130
|
const props = __props;
|
|
227
131
|
const emit = __emit;
|
|
228
|
-
/**
|
|
229
|
-
* @zh 自定义底部折叠触发器
|
|
230
|
-
* @en Custom bottom folding trigger
|
|
231
|
-
* @slot trigger
|
|
232
|
-
* @binding {boolean} collapsed
|
|
233
|
-
*/
|
|
234
|
-
const { theme, modelValue, defaultVisible, collapsed, defaultCollapsed, collapsible, rail, defaultRail, expandOnHover, disableResizeWatcher, disableRouteWatcher, hideTrigger, breakpoint, height, collapsedWidth, mask, maskClosable, escToClose, location, floating, permanent, persistent, sticky, temporary, resizeDirections } = toRefs(props);
|
|
235
132
|
const prefixCls = getPrefixCls("layout-sider");
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
133
|
+
const dimensionMaxMap = {
|
|
134
|
+
xs: "479.98px",
|
|
135
|
+
sm: "575.98px",
|
|
136
|
+
md: "767.98px",
|
|
137
|
+
lg: "991.98px",
|
|
138
|
+
xl: "1199.98px",
|
|
139
|
+
xxl: "1599.98px",
|
|
140
|
+
xxxl: "1839.98px"
|
|
141
|
+
};
|
|
142
|
+
const isNumeric = (val) => !Number.isNaN(Number.parseFloat(val)) && Number.isFinite(Number(val));
|
|
143
|
+
const toSiderWidth = (val) => isNumeric(val) ? `${val}px` : String(val);
|
|
144
|
+
const isControlled = computed(() => props.collapsed !== void 0);
|
|
145
|
+
const collapsedState = ref((_props$collapsed = props.collapsed) !== null && _props$collapsed !== void 0 ? _props$collapsed : props.defaultCollapsed);
|
|
146
|
+
watch(() => props.collapsed, (val) => {
|
|
147
|
+
if (val !== void 0) collapsedState.value = val;
|
|
148
|
+
});
|
|
149
|
+
const mergedCollapsed = computed(() => isControlled.value ? props.collapsed : collapsedState.value);
|
|
150
|
+
const handleSetCollapsed = (value, type) => {
|
|
151
|
+
if (!isControlled.value) collapsedState.value = value;
|
|
152
|
+
emit("collapse", value, type);
|
|
153
|
+
};
|
|
154
|
+
const toggle = () => {
|
|
155
|
+
handleSetCollapsed(!mergedCollapsed.value, "clickTrigger");
|
|
156
|
+
};
|
|
157
|
+
const below = ref(false);
|
|
158
|
+
const setupResponsive = () => {
|
|
159
|
+
const { breakpoint } = props;
|
|
160
|
+
if (typeof window === "undefined" || !window.matchMedia || !breakpoint) return;
|
|
161
|
+
const max = dimensionMaxMap[breakpoint];
|
|
162
|
+
if (!max) return;
|
|
163
|
+
const mql = window.matchMedia(`screen and (max-width: ${max})`);
|
|
164
|
+
const handler = (m) => {
|
|
165
|
+
below.value = m.matches;
|
|
166
|
+
emit("breakpoint", m.matches);
|
|
167
|
+
if (mergedCollapsed.value !== m.matches) handleSetCollapsed(m.matches, "responsive");
|
|
168
|
+
};
|
|
169
|
+
if (typeof mql.addEventListener === "function") mql.addEventListener("change", handler);
|
|
170
|
+
else if (typeof mql.addListener === "function") mql.addListener(handler);
|
|
171
|
+
handler(mql);
|
|
172
|
+
return () => {
|
|
173
|
+
if (typeof mql.removeEventListener === "function") mql.removeEventListener("change", handler);
|
|
174
|
+
else if (typeof mql.removeListener === "function") mql.removeListener(handler);
|
|
175
|
+
};
|
|
176
|
+
};
|
|
177
|
+
let cleanupResponsive;
|
|
178
|
+
onMounted(() => {
|
|
179
|
+
cleanupResponsive = setupResponsive();
|
|
243
180
|
});
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
const temporaryVisible = computed(() => isTemporary.value && isDrawerActive.value);
|
|
248
|
-
const railModeEnabled = computed(() => {
|
|
249
|
-
var _rail$value;
|
|
250
|
-
return ((_rail$value = rail === null || rail === void 0 ? void 0 : rail.value) !== null && _rail$value !== void 0 ? _rail$value : defaultRail.value) || railCollapsed.value;
|
|
181
|
+
watch(() => props.breakpoint, () => {
|
|
182
|
+
cleanupResponsive === null || cleanupResponsive === void 0 || cleanupResponsive();
|
|
183
|
+
cleanupResponsive = setupResponsive();
|
|
251
184
|
});
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
const resizeDirectionsProps = computed(() => componentTag.value === ResizeBox && (resizeDirections === null || resizeDirections === void 0 ? void 0 : resizeDirections.value) ? { directions: resizeDirections.value } : {});
|
|
255
|
-
const showTrigger = computed(() => collapsible.value && !hideTrigger.value && !isTemporary.value && isHorizontal.value);
|
|
256
|
-
const siderSize = computed(() => {
|
|
257
|
-
let rawSize = props.width;
|
|
258
|
-
if (localCollapsed.value) rawSize = props.collapsedWidth;
|
|
259
|
-
else if (railCollapsed.value) rawSize = props.railWidth;
|
|
260
|
-
return isNumber(rawSize) ? `${rawSize}px` : String(rawSize);
|
|
185
|
+
onUnmounted(() => {
|
|
186
|
+
cleanupResponsive === null || cleanupResponsive === void 0 || cleanupResponsive();
|
|
261
187
|
});
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
188
|
+
const { siderHook } = inject(LayoutContextInjectionKey, { siderHook: {
|
|
189
|
+
addSider: () => {},
|
|
190
|
+
removeSider: () => {}
|
|
191
|
+
} });
|
|
192
|
+
let siderId = "";
|
|
193
|
+
onMounted(() => {
|
|
194
|
+
siderId = generateId("sd-sider-");
|
|
195
|
+
siderHook.addSider(siderId);
|
|
266
196
|
});
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
if (!isTemporary.value) {
|
|
270
|
-
if (sticky.value && isHorizontal.value) return _objectSpread2(_objectSpread2({}, style), {}, {
|
|
271
|
-
position: "sticky",
|
|
272
|
-
top: "0",
|
|
273
|
-
alignSelf: "flex-start",
|
|
274
|
-
maxHeight: "100vh"
|
|
275
|
-
});
|
|
276
|
-
return style;
|
|
277
|
-
}
|
|
278
|
-
return _objectSpread2(_objectSpread2({}, style), {}, {
|
|
279
|
-
[physicalLocation.value]: 0,
|
|
280
|
-
zIndex: zIndex.value || void 0
|
|
281
|
-
});
|
|
197
|
+
onUnmounted(() => {
|
|
198
|
+
siderHook.removeSider(siderId);
|
|
282
199
|
});
|
|
283
|
-
const
|
|
284
|
-
const
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
if (!showMask.value) return baseStyle;
|
|
288
|
-
if (physicalLocation.value === "left") return _objectSpread2(_objectSpread2({}, baseStyle), {}, {
|
|
289
|
-
top: 0,
|
|
290
|
-
right: 0,
|
|
291
|
-
bottom: 0,
|
|
292
|
-
left: siderSize.value
|
|
293
|
-
});
|
|
294
|
-
if (physicalLocation.value === "right") return _objectSpread2(_objectSpread2({}, baseStyle), {}, {
|
|
295
|
-
top: 0,
|
|
296
|
-
right: siderSize.value,
|
|
297
|
-
bottom: 0,
|
|
298
|
-
left: 0
|
|
299
|
-
});
|
|
300
|
-
if (physicalLocation.value === "top") return _objectSpread2(_objectSpread2({}, baseStyle), {}, {
|
|
301
|
-
top: crossAxisSize.value,
|
|
302
|
-
right: 0,
|
|
303
|
-
bottom: 0,
|
|
304
|
-
left: 0
|
|
305
|
-
});
|
|
306
|
-
return _objectSpread2(_objectSpread2({}, baseStyle), {}, {
|
|
307
|
-
top: 0,
|
|
308
|
-
right: 0,
|
|
309
|
-
bottom: crossAxisSize.value,
|
|
310
|
-
left: 0
|
|
311
|
-
});
|
|
200
|
+
const configProvider = inject(configProviderInjectionKey, void 0);
|
|
201
|
+
const rtl = computed(() => {
|
|
202
|
+
var _configProvider$rtl;
|
|
203
|
+
return (_configProvider$rtl = configProvider === null || configProvider === void 0 ? void 0 : configProvider.rtl) !== null && _configProvider$rtl !== void 0 ? _configProvider$rtl : false;
|
|
312
204
|
});
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
[`${prefixCls}-persistent`]: persistent.value,
|
|
319
|
-
[`${prefixCls}-active`]: isDrawerActive.value,
|
|
320
|
-
[`${prefixCls}-rail`]: railCollapsed.value,
|
|
321
|
-
[`${prefixCls}-expand-on-hover`]: expandOnHover.value,
|
|
322
|
-
[`${prefixCls}-floating`]: floating.value,
|
|
323
|
-
[`${prefixCls}-sticky`]: sticky.value,
|
|
324
|
-
[`${prefixCls}-${physicalLocation.value}`]: true
|
|
325
|
-
}]);
|
|
326
|
-
const triggerClassNames = computed(() => [`${prefixCls}-trigger`, { [`${prefixCls}-trigger-light`]: theme.value === "light" }]);
|
|
327
|
-
const setVisibleState = (nextVisible) => {
|
|
328
|
-
setDrawerVisible(nextVisible);
|
|
329
|
-
emit("update:modelValue", nextVisible);
|
|
330
|
-
};
|
|
331
|
-
const setRailState = (nextRail) => {
|
|
332
|
-
setRailCollapsed(nextRail);
|
|
333
|
-
emit("update:rail", nextRail);
|
|
334
|
-
};
|
|
335
|
-
const toggleTrigger = () => {
|
|
336
|
-
const nextCollapsed = !localCollapsed.value;
|
|
337
|
-
setLocalCollapsed(nextCollapsed);
|
|
338
|
-
emit("update:collapsed", nextCollapsed);
|
|
339
|
-
emit("collapse", nextCollapsed, "clickTrigger");
|
|
340
|
-
};
|
|
341
|
-
const handleMaskClick = () => {
|
|
342
|
-
if (!maskClosable.value || persistent.value) return;
|
|
343
|
-
setVisibleState(false);
|
|
344
|
-
};
|
|
345
|
-
const handleGlobalKeyDown = (event) => {
|
|
346
|
-
if (event.key === KEYBOARD_KEY.ESC && escToClose.value && isTemporary.value && !persistent.value) setVisibleState(false);
|
|
347
|
-
};
|
|
348
|
-
const handleRouteChange = () => {
|
|
349
|
-
if (isTemporary.value && isDrawerActive.value && !disableRouteWatcher.value) setVisibleState(false);
|
|
350
|
-
};
|
|
351
|
-
const handleMouseEnter = () => {
|
|
352
|
-
if (expandOnHover.value && railModeEnabled.value && railCollapsed.value) setRailState(false);
|
|
353
|
-
};
|
|
354
|
-
const handleMouseLeave = () => {
|
|
355
|
-
if (expandOnHover.value && railModeEnabled.value && !railCollapsed.value) setRailState(true);
|
|
356
|
-
};
|
|
357
|
-
useResponsive(breakpoint, (checked) => {
|
|
358
|
-
if (disableResizeWatcher.value) return;
|
|
359
|
-
const nextCollapsed = !checked;
|
|
360
|
-
if (nextCollapsed !== localCollapsed.value) {
|
|
361
|
-
setLocalCollapsed(nextCollapsed);
|
|
362
|
-
emit("update:collapsed", nextCollapsed);
|
|
363
|
-
emit("collapse", nextCollapsed, "responsive");
|
|
364
|
-
emit("breakpoint", nextCollapsed);
|
|
365
|
-
}
|
|
205
|
+
const rootEl = ref(null);
|
|
206
|
+
const detectedThemeMode = useThemeMode(rootEl);
|
|
207
|
+
const mergedTheme = computed(() => {
|
|
208
|
+
var _props$theme;
|
|
209
|
+
return (_props$theme = props.theme) !== null && _props$theme !== void 0 ? _props$theme : detectedThemeMode.value;
|
|
366
210
|
});
|
|
367
|
-
|
|
368
|
-
|
|
211
|
+
const reverseIcon = computed(() => rtl.value === !props.reverseArrow);
|
|
212
|
+
const defaultTriggerComponent = computed(() => {
|
|
213
|
+
if (props.temporary) return IconMenu;
|
|
214
|
+
const expandedIcon = reverseIcon.value ? IconRight : IconLeft;
|
|
215
|
+
const collapsedIcon = reverseIcon.value ? IconLeft : IconRight;
|
|
216
|
+
return mergedCollapsed.value ? collapsedIcon : expandedIcon;
|
|
369
217
|
});
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
218
|
+
const rawWidth = computed(() => mergedCollapsed.value ? props.collapsedWidth : props.width);
|
|
219
|
+
const siderWidth = computed(() => toSiderWidth(rawWidth.value));
|
|
220
|
+
const hasZeroWidth = computed(() => Number.parseFloat(String(props.collapsedWidth || 0)) === 0);
|
|
221
|
+
const renderTrigger = computed(() => {
|
|
222
|
+
if (props.temporary) return !props.hideTrigger;
|
|
223
|
+
return (props.collapsible || below.value && hasZeroWidth.value) && !props.hideTrigger;
|
|
224
|
+
});
|
|
225
|
+
const { scrollbarProps } = useScrollbar(toRef(props, "scrollbar"));
|
|
226
|
+
const useNativeScrollbar = computed(() => props.scrollbar === false);
|
|
227
|
+
const divStyle = computed(() => {
|
|
228
|
+
if (props.temporary) return {
|
|
229
|
+
flex: "0 0 auto",
|
|
230
|
+
width: "auto"
|
|
231
|
+
};
|
|
232
|
+
return {
|
|
233
|
+
flex: `0 0 ${siderWidth.value}`,
|
|
234
|
+
maxWidth: siderWidth.value,
|
|
235
|
+
minWidth: siderWidth.value,
|
|
236
|
+
width: siderWidth.value
|
|
237
|
+
};
|
|
238
|
+
});
|
|
239
|
+
const siderCls = computed(() => [
|
|
240
|
+
prefixCls,
|
|
241
|
+
`${prefixCls}-${mergedTheme.value}`,
|
|
242
|
+
{
|
|
243
|
+
[`${prefixCls}-collapsed`]: mergedCollapsed.value,
|
|
244
|
+
[`${prefixCls}-has-trigger`]: props.collapsible && !props.hideTrigger && !hasZeroWidth.value,
|
|
245
|
+
[`${prefixCls}-below`]: below.value,
|
|
246
|
+
[`${prefixCls}-zero-width`]: Number.parseFloat(siderWidth.value) === 0,
|
|
247
|
+
[`${prefixCls}-temporary`]: props.temporary
|
|
388
248
|
}
|
|
389
|
-
|
|
390
|
-
const
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
249
|
+
]);
|
|
250
|
+
const mergedDrawerProps = computed(() => _objectSpread2({
|
|
251
|
+
placement: "left",
|
|
252
|
+
width: siderWidth.value,
|
|
253
|
+
header: false,
|
|
254
|
+
footer: false
|
|
255
|
+
}, props.drawerProps));
|
|
256
|
+
const onDrawerVisibleChange = (visible) => {
|
|
257
|
+
if (visible !== !mergedCollapsed.value) handleSetCollapsed(!visible, "clickTrigger");
|
|
258
|
+
};
|
|
259
|
+
const siderContext = reactive({
|
|
260
|
+
siderCollapsed: mergedCollapsed.value,
|
|
261
|
+
theme: mergedTheme.value
|
|
395
262
|
});
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
siderHook === null || siderHook === void 0 || (_siderHook$onSiderUnM = siderHook.onSiderUnMount) === null || _siderHook$onSiderUnM === void 0 || _siderHook$onSiderUnM.call(siderHook, uniqueId);
|
|
263
|
+
watch(mergedCollapsed, (val) => {
|
|
264
|
+
siderContext.siderCollapsed = val;
|
|
265
|
+
});
|
|
266
|
+
watch(mergedTheme, (val) => {
|
|
267
|
+
siderContext.theme = val;
|
|
402
268
|
});
|
|
403
|
-
provide(
|
|
404
|
-
theme,
|
|
405
|
-
collapsed: computed(() => localCollapsed.value || railCollapsed.value),
|
|
406
|
-
collapsedWidth
|
|
407
|
-
}));
|
|
269
|
+
provide(SiderContextInjectionKey, siderContext);
|
|
408
270
|
return (_ctx, _cache) => {
|
|
409
|
-
return openBlock(),
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
271
|
+
return openBlock(), createElementBlock("aside", {
|
|
272
|
+
ref_key: "rootEl",
|
|
273
|
+
ref: rootEl,
|
|
274
|
+
class: normalizeClass(siderCls.value),
|
|
275
|
+
style: normalizeStyle(divStyle.value)
|
|
276
|
+
}, [__props.temporary ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createVNode(unref(Drawer), mergeProps(mergedDrawerProps.value, {
|
|
277
|
+
visible: !mergedCollapsed.value,
|
|
278
|
+
"onUpdate:visible": onDrawerVisibleChange
|
|
415
279
|
}), {
|
|
416
|
-
default: withCtx(() => [
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
class: normalizeClass(`${unref(prefixCls)}-prepend`)
|
|
430
|
-
}, [renderSlot(_ctx.$slots, "prepend")], 2)) : createCommentVNode("", true),
|
|
431
|
-
createElementVNode("div", { class: normalizeClass(`${unref(prefixCls)}-children`) }, [renderSlot(_ctx.$slots, "default")], 2),
|
|
432
|
-
_ctx.$slots.append ? (openBlock(), createElementBlock("div", {
|
|
433
|
-
key: 3,
|
|
434
|
-
class: normalizeClass(`${unref(prefixCls)}-append`)
|
|
435
|
-
}, [renderSlot(_ctx.$slots, "append")], 2)) : createCommentVNode("", true),
|
|
436
|
-
showTrigger.value ? (openBlock(), createElementBlock("div", {
|
|
437
|
-
key: 4,
|
|
438
|
-
class: normalizeClass(triggerClassNames.value),
|
|
439
|
-
style: normalizeStyle(triggerStyles.value),
|
|
440
|
-
onClick: toggleTrigger
|
|
441
|
-
}, [renderSlot(_ctx.$slots, "trigger", { collapsed: unref(localCollapsed) }, () => [!__props.reverseArrow ? (openBlock(), createElementBlock("div", _hoisted_1, [!unref(localCollapsed) ? (openBlock(), createBlock(unref(IconLeft), { key: 0 })) : (openBlock(), createBlock(unref(IconRight), { key: 1 }))])) : (openBlock(), createElementBlock("div", _hoisted_2, [unref(localCollapsed) ? (openBlock(), createBlock(unref(IconLeft), { key: 0 })) : (openBlock(), createBlock(unref(IconRight), { key: 1 }))]))])], 6)) : createCommentVNode("", true)
|
|
442
|
-
]),
|
|
280
|
+
default: withCtx(() => [_ctx.$slots.header ? (openBlock(), createElementBlock("div", {
|
|
281
|
+
key: 0,
|
|
282
|
+
class: normalizeClass(`${unref(prefixCls)}-header`)
|
|
283
|
+
}, [renderSlot(_ctx.$slots, "header")], 2)) : createCommentVNode("", true), useNativeScrollbar.value ? (openBlock(), createElementBlock("div", {
|
|
284
|
+
key: 1,
|
|
285
|
+
class: normalizeClass([`${unref(prefixCls)}-children`, `${unref(prefixCls)}-children-scroll`])
|
|
286
|
+
}, [renderSlot(_ctx.$slots, "default")], 2)) : (openBlock(), createBlock(unref(Scrollbar), mergeProps({
|
|
287
|
+
key: 2,
|
|
288
|
+
"outer-class": `${unref(prefixCls)}-children`
|
|
289
|
+
}, unref(scrollbarProps)), {
|
|
290
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
|
|
291
|
+
_: 3
|
|
292
|
+
}, 16, ["outer-class"]))]),
|
|
443
293
|
_: 3
|
|
444
|
-
}, 16, ["
|
|
294
|
+
}, 16, ["visible"]), renderTrigger.value ? (openBlock(), createElementBlock("span", {
|
|
295
|
+
key: 0,
|
|
296
|
+
class: normalizeClass(`${unref(prefixCls)}-temporary-trigger`),
|
|
297
|
+
onClick: toggle
|
|
298
|
+
}, [renderSlot(_ctx.$slots, "trigger", {}, () => [createVNode(unref(IconMenu))])], 2)) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
299
|
+
_ctx.$slots.header ? (openBlock(), createElementBlock("div", {
|
|
300
|
+
key: 0,
|
|
301
|
+
class: normalizeClass(`${unref(prefixCls)}-header`)
|
|
302
|
+
}, [renderSlot(_ctx.$slots, "header")], 2)) : createCommentVNode("", true),
|
|
303
|
+
useNativeScrollbar.value ? (openBlock(), createElementBlock("div", {
|
|
304
|
+
key: 1,
|
|
305
|
+
class: normalizeClass([`${unref(prefixCls)}-children`, `${unref(prefixCls)}-children-scroll`])
|
|
306
|
+
}, [renderSlot(_ctx.$slots, "default")], 2)) : (openBlock(), createBlock(unref(Scrollbar), mergeProps({
|
|
307
|
+
key: 2,
|
|
308
|
+
"outer-class": `${unref(prefixCls)}-children`
|
|
309
|
+
}, unref(scrollbarProps)), {
|
|
310
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
|
|
311
|
+
_: 3
|
|
312
|
+
}, 16, ["outer-class"])),
|
|
313
|
+
renderTrigger.value ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [hasZeroWidth.value ? (openBlock(), createElementBlock("span", {
|
|
314
|
+
key: 0,
|
|
315
|
+
class: normalizeClass([`${unref(prefixCls)}-zero-width-trigger`, `${unref(prefixCls)}-zero-width-trigger-${__props.reverseArrow ? "right" : "left"}`]),
|
|
316
|
+
style: normalizeStyle(__props.zeroWidthTriggerStyle),
|
|
317
|
+
onClick: toggle
|
|
318
|
+
}, [renderSlot(_ctx.$slots, "trigger", {}, () => [createVNode(unref(IconMenu))])], 6)) : (openBlock(), createElementBlock("div", {
|
|
319
|
+
key: 1,
|
|
320
|
+
class: normalizeClass(`${unref(prefixCls)}-trigger`),
|
|
321
|
+
style: normalizeStyle({ width: siderWidth.value }),
|
|
322
|
+
onClick: toggle
|
|
323
|
+
}, [renderSlot(_ctx.$slots, "trigger", {}, () => [(openBlock(), createBlock(resolveDynamicComponent(defaultTriggerComponent.value)))])], 6))], 64)) : createCommentVNode("", true)
|
|
324
|
+
], 64))], 6);
|
|
445
325
|
};
|
|
446
326
|
}
|
|
447
327
|
}));
|