layplux 1.0.1 → 2.0.1
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/cjs/components/center-view/index.cjs +18 -28
- package/dist/cjs/components/corner-glow/index.cjs +11 -28
- package/dist/cjs/components/dropdown/index.cjs +136 -130
- package/dist/cjs/components/icon/index.cjs +29 -51
- package/dist/cjs/components/index.cjs +24 -25
- package/dist/cjs/components/panel-view/index.cjs +111 -114
- package/dist/cjs/components/popup/index.cjs +166 -151
- package/dist/cjs/components/title/index.cjs +34 -47
- package/dist/cjs/components/tooltip/index.cjs +70 -61
- package/dist/cjs/components/widget/index.cjs +52 -72
- package/dist/cjs/index.cjs +13 -40
- package/dist/cjs/layout/glass-overlay.cjs +15 -28
- package/dist/cjs/layout/layered-manager.cjs +20 -29
- package/dist/cjs/layout/layplux.cjs +19 -32
- package/dist/cjs/layout/root-pane.cjs +20 -38
- package/dist/cjs/layout/skeleton/bottom-area.cjs +26 -43
- package/dist/cjs/layout/skeleton/bottom-left-area.cjs +12 -29
- package/dist/cjs/layout/skeleton/bottom-right-area.cjs +11 -28
- package/dist/cjs/layout/skeleton/center-area.cjs +278 -371
- package/dist/cjs/layout/skeleton/index.cjs +7 -24
- package/dist/cjs/layout/skeleton/left-bottom-area.cjs +12 -29
- package/dist/cjs/layout/skeleton/left-top-area.cjs +12 -29
- package/dist/cjs/layout/skeleton/right-bottom-area.cjs +11 -28
- package/dist/cjs/layout/skeleton/right-top-area.cjs +11 -28
- package/dist/cjs/layout/skeleton/skeleton.cjs +55 -60
- package/dist/cjs/layout/skeleton/top-area.cjs +26 -43
- package/dist/cjs/locales/en-US.cjs +11 -30
- package/dist/cjs/locales/index.cjs +12 -30
- package/dist/cjs/locales/zh-CN.cjs +11 -30
- package/dist/cjs/managers/area.cjs +12 -25
- package/dist/cjs/managers/index.cjs +12 -20
- package/dist/cjs/managers/pane.cjs +12 -26
- package/dist/cjs/managers/skeleton.cjs +112 -124
- package/dist/cjs/managers/theme.cjs +8 -29
- package/dist/cjs/managers/widget-container.cjs +31 -31
- package/dist/cjs/managers/widget.cjs +63 -50
- package/dist/cjs/types/config.cjs +2 -16
- package/dist/cjs/types/index.cjs +2 -18
- package/dist/cjs/types/locale.cjs +2 -16
- package/dist/cjs/utils/event-bus.cjs +53 -49
- package/dist/cjs/utils/focus-tracker.cjs +66 -42
- package/dist/cjs/utils/index.cjs +23 -31
- package/dist/cjs/utils/unique-id.cjs +5 -24
- package/dist/cjs/utils/vue.cjs +20 -30
- package/dist/esm/components/center-view/index.mjs +15 -7
- package/dist/esm/components/corner-glow/index.mjs +8 -7
- package/dist/esm/components/dropdown/index.mjs +117 -101
- package/dist/esm/components/icon/index.mjs +24 -30
- package/dist/esm/components/index.mjs +7 -8
- package/dist/esm/components/panel-view/index.mjs +107 -98
- package/dist/esm/components/popup/index.mjs +155 -130
- package/dist/esm/components/title/index.mjs +29 -24
- package/dist/esm/components/tooltip/index.mjs +67 -40
- package/dist/esm/components/widget/index.mjs +45 -48
- package/dist/esm/index.mjs +4 -10
- package/dist/esm/layout/glass-overlay.mjs +12 -7
- package/dist/esm/layout/layered-manager.mjs +17 -8
- package/dist/esm/layout/layplux.mjs +14 -11
- package/dist/esm/layout/root-pane.mjs +16 -16
- package/dist/esm/layout/skeleton/bottom-area.mjs +23 -22
- package/dist/esm/layout/skeleton/bottom-left-area.mjs +9 -8
- package/dist/esm/layout/skeleton/bottom-right-area.mjs +8 -7
- package/dist/esm/layout/skeleton/center-area.mjs +251 -333
- package/dist/esm/layout/skeleton/index.mjs +1 -4
- package/dist/esm/layout/skeleton/left-bottom-area.mjs +9 -8
- package/dist/esm/layout/skeleton/left-top-area.mjs +9 -8
- package/dist/esm/layout/skeleton/right-bottom-area.mjs +8 -7
- package/dist/esm/layout/skeleton/right-top-area.mjs +8 -7
- package/dist/esm/layout/skeleton/skeleton.mjs +52 -39
- package/dist/esm/layout/skeleton/top-area.mjs +23 -22
- package/dist/esm/locales/en-US.mjs +9 -10
- package/dist/esm/locales/index.mjs +7 -9
- package/dist/esm/locales/zh-CN.mjs +9 -10
- package/dist/esm/managers/area.mjs +10 -5
- package/dist/esm/managers/index.mjs +3 -3
- package/dist/esm/managers/pane.mjs +9 -5
- package/dist/esm/managers/skeleton.mjs +97 -95
- package/dist/esm/managers/theme.mjs +6 -9
- package/dist/esm/managers/widget-container.mjs +28 -10
- package/dist/esm/managers/widget.mjs +55 -25
- package/dist/esm/types/config.mjs +1 -0
- package/dist/esm/types/index.mjs +1 -1
- package/dist/esm/types/locale.mjs +1 -0
- package/dist/esm/utils/event-bus.mjs +46 -17
- package/dist/esm/utils/focus-tracker.mjs +63 -23
- package/dist/esm/utils/index.mjs +7 -10
- package/dist/esm/utils/unique-id.mjs +3 -4
- package/dist/esm/utils/vue.mjs +13 -5
- package/dist/types/managers/skeleton.d.ts.map +1 -1
- package/dist/umd/index.js +2 -30
- package/package.json +18 -14
|
@@ -1,97 +1,118 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var popup_exports = {};
|
|
20
|
-
__export(popup_exports, {
|
|
21
|
-
Popup: () => Popup
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(popup_exports);
|
|
24
|
-
var import_jsx_runtime = require("vue/jsx-runtime");
|
|
25
|
-
var import_vue = require("vue");
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
|
|
26
5
|
function computePosition(triggerRect, popupW, popupH, placement, offsetX, offsetY) {
|
|
27
6
|
const vw = window.innerWidth;
|
|
28
7
|
const vh = window.innerHeight;
|
|
29
8
|
const PADDING = 8;
|
|
30
9
|
let top = 0;
|
|
31
10
|
let left = 0;
|
|
32
|
-
const [main, align] = placement.split(
|
|
33
|
-
|
|
11
|
+
const [main, align] = placement.split('-');
|
|
12
|
+
|
|
13
|
+
// Vertical placements
|
|
14
|
+
if (main === 'bottom') {
|
|
34
15
|
top = triggerRect.bottom + offsetY;
|
|
35
|
-
if (align ===
|
|
36
|
-
|
|
37
|
-
|
|
16
|
+
if (align === 'start') left = triggerRect.left + offsetX;else if (align === 'end') left = triggerRect.right - popupW + offsetX;else left = triggerRect.left + triggerRect.width / 2 - popupW / 2 + offsetX;
|
|
17
|
+
|
|
18
|
+
// Flip to top if not enough space
|
|
38
19
|
if (top + popupH > vh - PADDING) {
|
|
39
20
|
top = triggerRect.top - popupH - offsetY;
|
|
40
|
-
placement = align ? `top-${align}` :
|
|
21
|
+
placement = align ? `top-${align}` : 'top';
|
|
41
22
|
}
|
|
42
|
-
} else if (main ===
|
|
23
|
+
} else if (main === 'top') {
|
|
43
24
|
top = triggerRect.top - popupH - offsetY;
|
|
44
|
-
if (align ===
|
|
45
|
-
|
|
46
|
-
|
|
25
|
+
if (align === 'start') left = triggerRect.left + offsetX;else if (align === 'end') left = triggerRect.right - popupW + offsetX;else left = triggerRect.left + triggerRect.width / 2 - popupW / 2 + offsetX;
|
|
26
|
+
|
|
27
|
+
// Flip to bottom if not enough space
|
|
47
28
|
if (top < PADDING) {
|
|
48
29
|
top = triggerRect.bottom + offsetY;
|
|
49
|
-
placement = align ? `bottom-${align}` :
|
|
30
|
+
placement = align ? `bottom-${align}` : 'bottom';
|
|
50
31
|
}
|
|
51
|
-
}
|
|
32
|
+
}
|
|
33
|
+
// Horizontal placements
|
|
34
|
+
else if (main === 'right') {
|
|
52
35
|
left = triggerRect.right + offsetX;
|
|
53
|
-
if (align ===
|
|
54
|
-
else if (align === "end") top = triggerRect.bottom - popupH + offsetY;
|
|
55
|
-
else top = triggerRect.top + triggerRect.height / 2 - popupH / 2 + offsetY;
|
|
36
|
+
if (align === 'start') top = triggerRect.top + offsetY;else if (align === 'end') top = triggerRect.bottom - popupH + offsetY;else top = triggerRect.top + triggerRect.height / 2 - popupH / 2 + offsetY;
|
|
56
37
|
if (left + popupW > vw - PADDING) {
|
|
57
38
|
left = triggerRect.left - popupW - offsetX;
|
|
58
|
-
placement = align ? `left-${align}` :
|
|
39
|
+
placement = align ? `left-${align}` : 'left';
|
|
59
40
|
}
|
|
60
|
-
} else if (main ===
|
|
41
|
+
} else if (main === 'left') {
|
|
61
42
|
left = triggerRect.left - popupW - offsetX;
|
|
62
|
-
if (align ===
|
|
63
|
-
else if (align === "end") top = triggerRect.bottom - popupH + offsetY;
|
|
64
|
-
else top = triggerRect.top + triggerRect.height / 2 - popupH / 2 + offsetY;
|
|
43
|
+
if (align === 'start') top = triggerRect.top + offsetY;else if (align === 'end') top = triggerRect.bottom - popupH + offsetY;else top = triggerRect.top + triggerRect.height / 2 - popupH / 2 + offsetY;
|
|
65
44
|
if (left < PADDING) {
|
|
66
45
|
left = triggerRect.right + offsetX;
|
|
67
|
-
placement = align ? `right-${align}` :
|
|
46
|
+
placement = align ? `right-${align}` : 'right';
|
|
68
47
|
}
|
|
69
48
|
}
|
|
49
|
+
|
|
50
|
+
// Clamp to viewport
|
|
70
51
|
top = Math.max(PADDING, Math.min(top, vh - popupH - PADDING));
|
|
71
52
|
left = Math.max(PADDING, Math.min(left, vw - popupW - PADDING));
|
|
72
|
-
return {
|
|
53
|
+
return {
|
|
54
|
+
position: {
|
|
55
|
+
top,
|
|
56
|
+
left
|
|
57
|
+
},
|
|
58
|
+
placement
|
|
59
|
+
};
|
|
73
60
|
}
|
|
74
|
-
const Popup =
|
|
75
|
-
name:
|
|
61
|
+
const Popup = vue.defineComponent({
|
|
62
|
+
name: 'LaypluxPopup',
|
|
76
63
|
props: {
|
|
77
64
|
visible: Boolean,
|
|
78
|
-
trigger: {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
65
|
+
trigger: {
|
|
66
|
+
type: String,
|
|
67
|
+
default: 'hover'
|
|
68
|
+
},
|
|
69
|
+
placement: {
|
|
70
|
+
type: String,
|
|
71
|
+
default: 'bottom'
|
|
72
|
+
},
|
|
73
|
+
offset: {
|
|
74
|
+
type: Object,
|
|
75
|
+
default: () => ({
|
|
76
|
+
y: 4
|
|
77
|
+
})
|
|
78
|
+
},
|
|
79
|
+
mouseEnterDelay: {
|
|
80
|
+
type: Number,
|
|
81
|
+
default: 100
|
|
82
|
+
},
|
|
83
|
+
mouseLeaveDelay: {
|
|
84
|
+
type: Number,
|
|
85
|
+
default: 100
|
|
86
|
+
},
|
|
87
|
+
disabled: {
|
|
88
|
+
type: Boolean,
|
|
89
|
+
default: false
|
|
90
|
+
},
|
|
91
|
+
destroyOnClose: {
|
|
92
|
+
type: Boolean,
|
|
93
|
+
default: true
|
|
94
|
+
},
|
|
95
|
+
getContainer: {
|
|
96
|
+
type: Function,
|
|
97
|
+
default: () => document.body
|
|
98
|
+
}
|
|
86
99
|
},
|
|
87
|
-
emits: [
|
|
88
|
-
setup(props, {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
-
const
|
|
100
|
+
emits: ['update:visible'],
|
|
101
|
+
setup(props, {
|
|
102
|
+
emit,
|
|
103
|
+
slots
|
|
104
|
+
}) {
|
|
105
|
+
const triggerRef = vue.ref();
|
|
106
|
+
const popupRef = vue.ref();
|
|
107
|
+
const position = vue.ref({
|
|
108
|
+
top: 0,
|
|
109
|
+
left: 0
|
|
110
|
+
});
|
|
111
|
+
const currentPlacement = vue.ref(props.placement);
|
|
112
|
+
// Whether the popup DOM should exist
|
|
113
|
+
const mounted = vue.ref(false);
|
|
114
|
+
// Whether the popup is in its visible animation state
|
|
115
|
+
const animatingIn = vue.ref(false);
|
|
95
116
|
let enterTimer = null;
|
|
96
117
|
let leaveTimer = null;
|
|
97
118
|
let leaveAnimationTimer = null;
|
|
@@ -113,15 +134,11 @@ const Popup = (0, import_vue.defineComponent)({
|
|
|
113
134
|
if (!triggerRef.value || !popupRef.value) return;
|
|
114
135
|
const triggerRect = triggerRef.value.getBoundingClientRect();
|
|
115
136
|
const popupRect = popupRef.value.getBoundingClientRect();
|
|
116
|
-
const {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
props.placement,
|
|
122
|
-
ox,
|
|
123
|
-
oy
|
|
124
|
-
);
|
|
137
|
+
const {
|
|
138
|
+
x: ox = 0,
|
|
139
|
+
y: oy = 0
|
|
140
|
+
} = props.offset;
|
|
141
|
+
const result = computePosition(triggerRect, popupRect.width, popupRect.height, props.placement, ox, oy);
|
|
125
142
|
position.value = result.position;
|
|
126
143
|
currentPlacement.value = result.placement;
|
|
127
144
|
};
|
|
@@ -130,9 +147,10 @@ const Popup = (0, import_vue.defineComponent)({
|
|
|
130
147
|
clearTimers();
|
|
131
148
|
enterTimer = setTimeout(() => {
|
|
132
149
|
mounted.value = true;
|
|
133
|
-
emit(
|
|
134
|
-
void
|
|
150
|
+
emit('update:visible', true);
|
|
151
|
+
void vue.nextTick(() => {
|
|
135
152
|
updatePosition();
|
|
153
|
+
// Trigger enter animation
|
|
136
154
|
requestAnimationFrame(() => {
|
|
137
155
|
animatingIn.value = true;
|
|
138
156
|
});
|
|
@@ -144,10 +162,12 @@ const Popup = (0, import_vue.defineComponent)({
|
|
|
144
162
|
const delay = immediate ? 0 : props.mouseLeaveDelay;
|
|
145
163
|
leaveTimer = setTimeout(() => {
|
|
146
164
|
animatingIn.value = false;
|
|
165
|
+
|
|
166
|
+
// Wait for CSS transition to finish before removing DOM
|
|
147
167
|
leaveAnimationTimer = setTimeout(() => {
|
|
148
168
|
mounted.value = false;
|
|
149
|
-
emit(
|
|
150
|
-
}, 200);
|
|
169
|
+
emit('update:visible', false);
|
|
170
|
+
}, 200); // Match CSS transition duration
|
|
151
171
|
}, delay);
|
|
152
172
|
};
|
|
153
173
|
const toggle = () => {
|
|
@@ -158,75 +178,80 @@ const Popup = (0, import_vue.defineComponent)({
|
|
|
158
178
|
show();
|
|
159
179
|
}
|
|
160
180
|
};
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
currentPlacement.value = p;
|
|
172
|
-
}
|
|
173
|
-
);
|
|
181
|
+
|
|
182
|
+
// Sync external visible changes
|
|
183
|
+
vue.watch(() => props.visible, v => {
|
|
184
|
+
if (v && !mounted.value) show();else if (!v && mounted.value) hide(true);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// Sync external placement changes
|
|
188
|
+
vue.watch(() => props.placement, p => {
|
|
189
|
+
currentPlacement.value = p;
|
|
190
|
+
});
|
|
174
191
|
const onResize = () => {
|
|
175
192
|
if (mounted.value && animatingIn.value) updatePosition();
|
|
176
193
|
};
|
|
177
|
-
|
|
178
|
-
window.addEventListener(
|
|
179
|
-
window.addEventListener(
|
|
180
|
-
document.addEventListener(
|
|
181
|
-
document.addEventListener(
|
|
194
|
+
vue.onMounted(() => {
|
|
195
|
+
window.addEventListener('resize', onResize);
|
|
196
|
+
window.addEventListener('scroll', onResize, true);
|
|
197
|
+
document.addEventListener('mousedown', onClickOutside, true);
|
|
198
|
+
document.addEventListener('keydown', onEsc);
|
|
182
199
|
});
|
|
183
|
-
|
|
200
|
+
vue.onUnmounted(() => {
|
|
184
201
|
clearTimers();
|
|
185
|
-
window.removeEventListener(
|
|
186
|
-
window.removeEventListener(
|
|
187
|
-
document.removeEventListener(
|
|
188
|
-
document.removeEventListener(
|
|
202
|
+
window.removeEventListener('resize', onResize);
|
|
203
|
+
window.removeEventListener('scroll', onResize, true);
|
|
204
|
+
document.removeEventListener('mousedown', onClickOutside, true);
|
|
205
|
+
document.removeEventListener('keydown', onEsc);
|
|
189
206
|
});
|
|
190
|
-
|
|
207
|
+
|
|
208
|
+
// Click outside
|
|
209
|
+
const onClickOutside = e => {
|
|
191
210
|
if (!mounted.value) return;
|
|
192
211
|
const target = e.target;
|
|
193
212
|
const trigger = triggerRef.value;
|
|
194
213
|
const popup = popupRef.value;
|
|
195
214
|
if (trigger && trigger.contains(target)) return;
|
|
196
215
|
if (popup && popup.contains(target)) return;
|
|
197
|
-
if (props.trigger ===
|
|
216
|
+
if (props.trigger === 'click' || props.trigger === 'contextmenu') {
|
|
198
217
|
hide(true);
|
|
199
218
|
}
|
|
200
219
|
};
|
|
201
|
-
|
|
202
|
-
|
|
220
|
+
|
|
221
|
+
// ESC key
|
|
222
|
+
const onEsc = e => {
|
|
223
|
+
if (e.key === 'Escape' && mounted.value) {
|
|
203
224
|
hide(true);
|
|
204
225
|
}
|
|
205
226
|
};
|
|
227
|
+
|
|
228
|
+
// Trigger event handlers
|
|
206
229
|
const onTriggerMouseEnter = () => {
|
|
207
|
-
if (props.trigger ===
|
|
230
|
+
if (props.trigger === 'hover') show();
|
|
208
231
|
};
|
|
209
232
|
const onTriggerMouseLeave = () => {
|
|
210
|
-
if (props.trigger ===
|
|
233
|
+
if (props.trigger === 'hover') hide();
|
|
211
234
|
};
|
|
212
|
-
const onTriggerClick =
|
|
213
|
-
if (props.trigger ===
|
|
235
|
+
const onTriggerClick = e => {
|
|
236
|
+
if (props.trigger === 'click') {
|
|
214
237
|
e.stopPropagation();
|
|
215
238
|
toggle();
|
|
216
239
|
}
|
|
217
240
|
};
|
|
218
241
|
const onTriggerFocus = () => {
|
|
219
|
-
if (props.trigger ===
|
|
242
|
+
if (props.trigger === 'focus') show();
|
|
220
243
|
};
|
|
221
244
|
const onTriggerBlur = () => {
|
|
222
|
-
if (props.trigger ===
|
|
245
|
+
if (props.trigger === 'focus') hide(true);
|
|
223
246
|
};
|
|
224
|
-
const onTriggerContextmenu =
|
|
225
|
-
if (props.trigger ===
|
|
247
|
+
const onTriggerContextmenu = e => {
|
|
248
|
+
if (props.trigger === 'contextmenu') {
|
|
226
249
|
e.preventDefault();
|
|
227
250
|
show();
|
|
228
251
|
}
|
|
229
252
|
};
|
|
253
|
+
|
|
254
|
+
// Popup hover (for safe triangle)
|
|
230
255
|
const onPopupMouseEnter = () => {
|
|
231
256
|
if (leaveTimer) {
|
|
232
257
|
clearTimeout(leaveTimer);
|
|
@@ -234,47 +259,37 @@ const Popup = (0, import_vue.defineComponent)({
|
|
|
234
259
|
}
|
|
235
260
|
};
|
|
236
261
|
const onPopupMouseLeave = () => {
|
|
237
|
-
if (props.trigger ===
|
|
262
|
+
if (props.trigger === 'hover') hide();
|
|
238
263
|
};
|
|
239
264
|
return () => {
|
|
240
265
|
const container = props.getContainer();
|
|
241
|
-
return
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
style: {
|
|
267
|
-
position: "fixed",
|
|
268
|
-
top: `${position.value.top}px`,
|
|
269
|
-
left: `${position.value.left}px`,
|
|
270
|
-
zIndex: "var(--layplux-popup-z-index, 2000)"
|
|
271
|
-
},
|
|
272
|
-
onMouseenter: onPopupMouseEnter,
|
|
273
|
-
onMouseleave: onPopupMouseLeave,
|
|
274
|
-
children: slots.content?.()
|
|
275
|
-
}
|
|
276
|
-
) })
|
|
277
|
-
] });
|
|
266
|
+
return vue.createVNode(vue.Fragment, null, [vue.createVNode("span", {
|
|
267
|
+
"ref": triggerRef,
|
|
268
|
+
"class": "layplux-popup-trigger",
|
|
269
|
+
"onMouseenter": onTriggerMouseEnter,
|
|
270
|
+
"onMouseleave": onTriggerMouseLeave,
|
|
271
|
+
"onClick": onTriggerClick,
|
|
272
|
+
"onFocus": onTriggerFocus,
|
|
273
|
+
"onBlur": onTriggerBlur,
|
|
274
|
+
"onContextmenu": onTriggerContextmenu
|
|
275
|
+
}, [slots.default?.()]), (mounted.value || !props.destroyOnClose) && vue.createVNode(vue.Teleport, {
|
|
276
|
+
"to": container
|
|
277
|
+
}, {
|
|
278
|
+
default: () => [vue.createVNode("div", {
|
|
279
|
+
"ref": popupRef,
|
|
280
|
+
"class": ['layplux-portal', 'layplux-popup', currentPlacement.value, animatingIn.value && 'layplux-popup--visible'],
|
|
281
|
+
"style": {
|
|
282
|
+
position: 'fixed',
|
|
283
|
+
top: `${position.value.top}px`,
|
|
284
|
+
left: `${position.value.left}px`,
|
|
285
|
+
zIndex: 'var(--layplux-popup-z-index, 2000)'
|
|
286
|
+
},
|
|
287
|
+
"onMouseenter": onPopupMouseEnter,
|
|
288
|
+
"onMouseleave": onPopupMouseLeave
|
|
289
|
+
}, [slots.content?.()])]
|
|
290
|
+
})]);
|
|
278
291
|
};
|
|
279
292
|
}
|
|
280
293
|
});
|
|
294
|
+
|
|
295
|
+
exports.Popup = Popup;
|
|
@@ -1,43 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var title_exports = {};
|
|
20
|
-
__export(title_exports, {
|
|
21
|
-
TitleView: () => TitleView
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(title_exports);
|
|
24
|
-
var import_jsx_runtime = require("vue/jsx-runtime");
|
|
25
|
-
var import_vue = require("vue");
|
|
26
|
-
var import_utils = require("../../utils");
|
|
27
|
-
const TitleView = (0, import_vue.defineComponent)({
|
|
28
|
-
name: "TitleView",
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
var vue$1 = require('../../utils/vue.cjs');
|
|
5
|
+
|
|
6
|
+
const TitleView = vue.defineComponent({
|
|
7
|
+
name: 'TitleView',
|
|
29
8
|
inheritAttrs: false,
|
|
30
9
|
props: {
|
|
31
10
|
icon: [String, Object, Function],
|
|
32
11
|
title: [String, Object, Function],
|
|
33
12
|
mode: {
|
|
34
13
|
type: String,
|
|
35
|
-
default:
|
|
14
|
+
default: 'icon-only'
|
|
36
15
|
},
|
|
37
16
|
/** 交互状态:idle / active / disabled / error。idle 时 hover 由 CSS :hover 处理 */
|
|
38
17
|
state: {
|
|
39
18
|
type: String,
|
|
40
|
-
default:
|
|
19
|
+
default: 'idle'
|
|
41
20
|
},
|
|
42
21
|
/** 聚焦/选中态,独立于 state,可与任何状态叠加 */
|
|
43
22
|
focused: {
|
|
@@ -46,31 +25,39 @@ const TitleView = (0, import_vue.defineComponent)({
|
|
|
46
25
|
},
|
|
47
26
|
size: {
|
|
48
27
|
type: String,
|
|
49
|
-
default:
|
|
28
|
+
default: 'middle'
|
|
50
29
|
},
|
|
51
30
|
className: {
|
|
52
31
|
type: String,
|
|
53
|
-
default:
|
|
32
|
+
default: ''
|
|
54
33
|
},
|
|
55
34
|
onClick: Function
|
|
56
35
|
},
|
|
57
36
|
setup(props) {
|
|
58
37
|
return () => {
|
|
59
|
-
const {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
38
|
+
const {
|
|
39
|
+
icon,
|
|
40
|
+
title,
|
|
41
|
+
mode,
|
|
42
|
+
state,
|
|
43
|
+
size,
|
|
44
|
+
focused,
|
|
45
|
+
className,
|
|
46
|
+
onClick
|
|
47
|
+
} = props;
|
|
48
|
+
const iconNode = icon ? vue$1.createContent(icon) : null;
|
|
49
|
+
const titleNode = title ? vue$1.createContent(title) : null;
|
|
50
|
+
const classes = ['title-view', `title-view--${mode}`, `title-view--${state}`, `title-view--${size}`, focused && 'title-view--focused', className].filter(Boolean).join(' ');
|
|
51
|
+
return vue.createVNode("span", {
|
|
52
|
+
"class": classes,
|
|
53
|
+
"onClick": onClick
|
|
54
|
+
}, [vue.createVNode("span", {
|
|
55
|
+
"class": "title-view__icon"
|
|
56
|
+
}, [iconNode]), vue.createVNode("span", {
|
|
57
|
+
"class": "title-view__label"
|
|
58
|
+
}, [titleNode])]);
|
|
74
59
|
};
|
|
75
60
|
}
|
|
76
61
|
});
|
|
62
|
+
|
|
63
|
+
exports.TitleView = TitleView;
|