@v-c/tour 0.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/LICENSE +21 -0
- package/dist/Mask.cjs +162 -0
- package/dist/Mask.d.ts +21 -0
- package/dist/Mask.js +159 -0
- package/dist/Placeholder.cjs +58 -0
- package/dist/Placeholder.d.ts +8 -0
- package/dist/Placeholder.js +54 -0
- package/dist/Tour.cjs +324 -0
- package/dist/Tour.d.ts +4 -0
- package/dist/Tour.js +321 -0
- package/dist/TourStep/DefaultPanel.cjs +175 -0
- package/dist/TourStep/DefaultPanel.d.ts +8 -0
- package/dist/TourStep/DefaultPanel.js +171 -0
- package/dist/TourStep/index.cjs +128 -0
- package/dist/TourStep/index.d.ts +5 -0
- package/dist/TourStep/index.js +125 -0
- package/dist/_virtual/rolldown_runtime.cjs +21 -0
- package/dist/hooks/useClosable.cjs +23 -0
- package/dist/hooks/useClosable.d.ts +5 -0
- package/dist/hooks/useClosable.js +22 -0
- package/dist/hooks/useTarget.cjs +74 -0
- package/dist/hooks/useTarget.d.ts +20 -0
- package/dist/hooks/useTarget.js +72 -0
- package/dist/index.cjs +4 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/interface.cjs +0 -0
- package/dist/interface.d.ts +81 -0
- package/dist/interface.js +0 -0
- package/dist/placements.cjs +65 -0
- package/dist/placements.d.ts +4 -0
- package/dist/placements.js +64 -0
- package/dist/util.cjs +11 -0
- package/dist/util.d.ts +3 -0
- package/dist/util.js +10 -0
- package/package.json +42 -0
package/dist/Tour.cjs
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
const require_rolldown_runtime = require("./_virtual/rolldown_runtime.cjs");
|
|
3
|
+
const require_Mask = require("./Mask.cjs");
|
|
4
|
+
const require_Placeholder = require("./Placeholder.cjs");
|
|
5
|
+
const require_useClosable = require("./hooks/useClosable.cjs");
|
|
6
|
+
const require_util = require("./util.cjs");
|
|
7
|
+
const require_useTarget = require("./hooks/useTarget.cjs");
|
|
8
|
+
const require_placements = require("./placements.cjs");
|
|
9
|
+
const require_index = require("./TourStep/index.cjs");
|
|
10
|
+
let vue = require("vue");
|
|
11
|
+
let __v_c_util = require("@v-c/util");
|
|
12
|
+
let __v_c_trigger = require("@v-c/trigger");
|
|
13
|
+
var CENTER_PLACEHOLDER = {
|
|
14
|
+
left: "50%",
|
|
15
|
+
top: "50%",
|
|
16
|
+
width: `1px`,
|
|
17
|
+
height: `1px`
|
|
18
|
+
};
|
|
19
|
+
var defaultScrollIntoViewOptions = {
|
|
20
|
+
block: "center",
|
|
21
|
+
inline: "center"
|
|
22
|
+
};
|
|
23
|
+
var Tour = /* @__PURE__ */ (0, vue.defineComponent)((props, { attrs }) => {
|
|
24
|
+
const triggerRef = (0, vue.shallowRef)();
|
|
25
|
+
const placeholderRef = (0, vue.shallowRef)(null);
|
|
26
|
+
const inlineMode = (0, vue.computed)(() => props?.getPopupContainer === false);
|
|
27
|
+
const prefixCls = (0, vue.computed)(() => props?.prefixCls ?? "vc-tour");
|
|
28
|
+
const steps = (0, vue.computed)(() => props?.steps ?? []);
|
|
29
|
+
const stepCount = (0, vue.computed)(() => steps.value.length);
|
|
30
|
+
const mergedCurrent = (0, vue.shallowRef)(typeof props?.current === "number" ? props.current : props?.defaultCurrent ?? 0);
|
|
31
|
+
const setMergedCurrent = (nextCurrent) => {
|
|
32
|
+
if (typeof props?.current === "undefined") mergedCurrent.value = nextCurrent;
|
|
33
|
+
};
|
|
34
|
+
(0, vue.watch)(() => props?.current, (val) => {
|
|
35
|
+
if (typeof val === "number") mergedCurrent.value = val;
|
|
36
|
+
});
|
|
37
|
+
const internalOpen = (0, vue.shallowRef)(typeof props?.open === "boolean" ? props.open : props?.defaultOpen);
|
|
38
|
+
const setInternalOpen = (nextOpen) => {
|
|
39
|
+
if (typeof props?.open === "undefined") internalOpen.value = nextOpen;
|
|
40
|
+
};
|
|
41
|
+
(0, vue.watch)(() => props?.open, (val) => {
|
|
42
|
+
if (typeof val !== "undefined") internalOpen.value = val;
|
|
43
|
+
});
|
|
44
|
+
const mergedOpen = (0, vue.computed)(() => {
|
|
45
|
+
if (mergedCurrent.value < 0 || mergedCurrent.value >= stepCount.value) return false;
|
|
46
|
+
return internalOpen.value ?? true;
|
|
47
|
+
});
|
|
48
|
+
const hasOpened = (0, vue.shallowRef)(mergedOpen.value);
|
|
49
|
+
const openRef = (0, vue.shallowRef)(mergedOpen.value);
|
|
50
|
+
(0, vue.watch)([mergedOpen], async () => {
|
|
51
|
+
await (0, vue.nextTick)();
|
|
52
|
+
if (mergedOpen.value) {
|
|
53
|
+
if (!openRef.value) setMergedCurrent(0);
|
|
54
|
+
hasOpened.value = true;
|
|
55
|
+
}
|
|
56
|
+
openRef.value = mergedOpen.value;
|
|
57
|
+
});
|
|
58
|
+
const stepInfo = (0, vue.computed)(() => steps.value?.[mergedCurrent.value] ?? {});
|
|
59
|
+
const stepStyle = (0, vue.computed)(() => stepInfo.value?.style);
|
|
60
|
+
const stepClassName = (0, vue.computed)(() => stepInfo.value?.className);
|
|
61
|
+
const mergedClosable = require_useClosable.useClosable((0, vue.computed)(() => stepInfo.value?.closable), (0, vue.computed)(() => stepInfo.value?.closeIcon), (0, vue.computed)(() => props?.closable), (0, vue.computed)(() => props?.closeIcon));
|
|
62
|
+
const mergedMask = (0, vue.computed)(() => {
|
|
63
|
+
const mask = stepInfo.value?.mask ?? props?.mask ?? true;
|
|
64
|
+
return mergedOpen.value && mask;
|
|
65
|
+
});
|
|
66
|
+
const mergedScrollIntoViewOptions = (0, vue.computed)(() => stepInfo?.value?.scrollIntoViewOptions ?? props?.scrollIntoViewOptions ?? defaultScrollIntoViewOptions);
|
|
67
|
+
const [posInfo, targetElement] = require_useTarget.default((0, vue.computed)(() => (0, vue.unref)(stepInfo?.value?.target)), mergedOpen, (0, vue.computed)(() => props?.gap), mergedScrollIntoViewOptions, inlineMode, placeholderRef);
|
|
68
|
+
const mergedPlacement = (0, vue.computed)(() => require_util.getPlacement(targetElement.value, props?.placement, stepInfo.value?.placement));
|
|
69
|
+
const mergedArrow = (0, vue.computed)(() => {
|
|
70
|
+
if (!targetElement.value) return false;
|
|
71
|
+
if (typeof stepInfo.value?.arrow !== "undefined") return stepInfo.value?.arrow;
|
|
72
|
+
return typeof props?.arrow === "undefined" ? true : props?.arrow;
|
|
73
|
+
});
|
|
74
|
+
const arrowPointAtCenter = (0, vue.computed)(() => typeof mergedArrow.value === "object" ? mergedArrow?.value?.pointAtCenter : false);
|
|
75
|
+
(0, vue.watch)([arrowPointAtCenter, mergedCurrent], async () => {
|
|
76
|
+
await (0, vue.nextTick)();
|
|
77
|
+
triggerRef?.value?.forceAlign?.();
|
|
78
|
+
}, { immediate: true });
|
|
79
|
+
const onInternalChange = (nextCurrent) => {
|
|
80
|
+
setMergedCurrent(nextCurrent);
|
|
81
|
+
props?.onChange?.(nextCurrent);
|
|
82
|
+
};
|
|
83
|
+
const mergedBuiltinPlacements = (0, vue.computed)(() => {
|
|
84
|
+
const { builtinPlacements } = props;
|
|
85
|
+
if (builtinPlacements) return typeof builtinPlacements === "function" ? builtinPlacements({ arrowPointAtCenter: arrowPointAtCenter.value }) : builtinPlacements;
|
|
86
|
+
return require_placements.getPlacements(arrowPointAtCenter.value);
|
|
87
|
+
});
|
|
88
|
+
const handleClose = () => {
|
|
89
|
+
setInternalOpen(false);
|
|
90
|
+
props?.onClose?.(mergedCurrent.value);
|
|
91
|
+
};
|
|
92
|
+
const fallbackDOM = () => {
|
|
93
|
+
return targetElement.value || (typeof document !== "undefined" ? document.body : null);
|
|
94
|
+
};
|
|
95
|
+
return () => {
|
|
96
|
+
const { styles, classNames, renderPanel, rootClassName, animated, zIndex = 1001, getPopupContainer, className, style, disabledInteraction, onPopupAlign } = props;
|
|
97
|
+
const { class: attrClass, style: attrStyle,...restAttrs } = attrs;
|
|
98
|
+
const mergedMaskValue = mergedMask.value;
|
|
99
|
+
const mergedShowMask = typeof mergedMaskValue === "boolean" ? mergedMaskValue : !!mergedMaskValue;
|
|
100
|
+
const mergedMaskStyle = typeof mergedMaskValue === "boolean" ? void 0 : mergedMaskValue;
|
|
101
|
+
const placeholderClassName = (0, __v_c_util.clsx)(className, attrClass, rootClassName, `${prefixCls.value}-target-placeholder`);
|
|
102
|
+
const placeholderStyle = {
|
|
103
|
+
...posInfo.value ? {
|
|
104
|
+
left: `${posInfo.value.left}px`,
|
|
105
|
+
top: `${posInfo.value.top}px`,
|
|
106
|
+
width: `${posInfo.value.width}px`,
|
|
107
|
+
height: `${posInfo.value.height}px`
|
|
108
|
+
} : CENTER_PLACEHOLDER,
|
|
109
|
+
position: inlineMode.value ? "absolute" : "fixed",
|
|
110
|
+
pointerEvents: "none",
|
|
111
|
+
...style || {}
|
|
112
|
+
};
|
|
113
|
+
if (attrStyle && typeof attrStyle === "object") Object.assign(placeholderStyle, attrStyle);
|
|
114
|
+
const popupElement = (0, vue.createVNode)(require_index.default, (0, vue.mergeProps)({
|
|
115
|
+
"styles": styles,
|
|
116
|
+
"classNames": classNames,
|
|
117
|
+
"arrow": mergedArrow.value,
|
|
118
|
+
"key": "content",
|
|
119
|
+
"prefixCls": prefixCls.value,
|
|
120
|
+
"total": stepCount.value,
|
|
121
|
+
"renderPanel": renderPanel,
|
|
122
|
+
"onPrev": () => {
|
|
123
|
+
onInternalChange(mergedCurrent.value - 1);
|
|
124
|
+
},
|
|
125
|
+
"onNext": () => {
|
|
126
|
+
onInternalChange(mergedCurrent.value + 1);
|
|
127
|
+
},
|
|
128
|
+
"onClose": handleClose,
|
|
129
|
+
"current": mergedCurrent.value,
|
|
130
|
+
"onFinish": () => {
|
|
131
|
+
handleClose();
|
|
132
|
+
props?.onFinish?.();
|
|
133
|
+
}
|
|
134
|
+
}, stepInfo.value, { "closable": mergedClosable.value }), null);
|
|
135
|
+
if (targetElement.value === void 0 || !hasOpened.value) return null;
|
|
136
|
+
return (0, vue.createVNode)(vue.Fragment, null, [(0, vue.createVNode)(require_Mask.default, {
|
|
137
|
+
"getPopupContainer": getPopupContainer,
|
|
138
|
+
"styles": styles,
|
|
139
|
+
"classNames": classNames,
|
|
140
|
+
"zIndex": zIndex,
|
|
141
|
+
"prefixCls": prefixCls.value,
|
|
142
|
+
"pos": posInfo.value,
|
|
143
|
+
"showMask": mergedShowMask,
|
|
144
|
+
"style": mergedMaskStyle?.style,
|
|
145
|
+
"fill": mergedMaskStyle?.color,
|
|
146
|
+
"open": mergedOpen.value,
|
|
147
|
+
"animated": animated,
|
|
148
|
+
"rootClassName": rootClassName,
|
|
149
|
+
"disabledInteraction": disabledInteraction
|
|
150
|
+
}, null), (0, vue.createVNode)(__v_c_trigger.Trigger, (0, vue.mergeProps)(restAttrs, {
|
|
151
|
+
"getPopupContainer": getPopupContainer,
|
|
152
|
+
"builtinPlacements": mergedBuiltinPlacements.value,
|
|
153
|
+
"ref": triggerRef,
|
|
154
|
+
"popupStyle": stepStyle.value,
|
|
155
|
+
"popupPlacement": mergedPlacement.value,
|
|
156
|
+
"popupVisible": mergedOpen.value,
|
|
157
|
+
"popupClassName": (0, __v_c_util.clsx)(rootClassName, stepClassName.value),
|
|
158
|
+
"prefixCls": prefixCls.value,
|
|
159
|
+
"popup": popupElement,
|
|
160
|
+
"forceRender": false,
|
|
161
|
+
"autoDestroy": true,
|
|
162
|
+
"zIndex": zIndex,
|
|
163
|
+
"arrow": !!mergedArrow.value,
|
|
164
|
+
"onPopupAlign": onPopupAlign
|
|
165
|
+
}), { default: () => [(0, vue.createVNode)(require_Placeholder.default, {
|
|
166
|
+
"open": mergedOpen.value,
|
|
167
|
+
"autoLock": !inlineMode.value,
|
|
168
|
+
"getContainer": getPopupContainer,
|
|
169
|
+
"domRef": placeholderRef,
|
|
170
|
+
"fallbackDOM": fallbackDOM,
|
|
171
|
+
"class": placeholderClassName,
|
|
172
|
+
"style": placeholderStyle
|
|
173
|
+
}, null)] })]);
|
|
174
|
+
};
|
|
175
|
+
}, {
|
|
176
|
+
props: {
|
|
177
|
+
classNames: {
|
|
178
|
+
type: Object,
|
|
179
|
+
required: false,
|
|
180
|
+
default: void 0
|
|
181
|
+
},
|
|
182
|
+
styles: {
|
|
183
|
+
type: Object,
|
|
184
|
+
required: false,
|
|
185
|
+
default: void 0
|
|
186
|
+
},
|
|
187
|
+
className: {
|
|
188
|
+
type: String,
|
|
189
|
+
required: false,
|
|
190
|
+
default: void 0
|
|
191
|
+
},
|
|
192
|
+
style: {
|
|
193
|
+
type: null,
|
|
194
|
+
required: false,
|
|
195
|
+
default: void 0
|
|
196
|
+
},
|
|
197
|
+
steps: {
|
|
198
|
+
type: Array,
|
|
199
|
+
required: false,
|
|
200
|
+
default: void 0
|
|
201
|
+
},
|
|
202
|
+
open: {
|
|
203
|
+
type: Boolean,
|
|
204
|
+
required: false,
|
|
205
|
+
default: void 0
|
|
206
|
+
},
|
|
207
|
+
defaultOpen: {
|
|
208
|
+
type: Boolean,
|
|
209
|
+
required: false,
|
|
210
|
+
default: void 0
|
|
211
|
+
},
|
|
212
|
+
defaultCurrent: {
|
|
213
|
+
type: Number,
|
|
214
|
+
required: false,
|
|
215
|
+
default: void 0
|
|
216
|
+
},
|
|
217
|
+
current: {
|
|
218
|
+
type: Number,
|
|
219
|
+
required: false,
|
|
220
|
+
default: void 0
|
|
221
|
+
},
|
|
222
|
+
onChange: {
|
|
223
|
+
type: Function,
|
|
224
|
+
required: false,
|
|
225
|
+
default: void 0
|
|
226
|
+
},
|
|
227
|
+
onClose: {
|
|
228
|
+
type: Function,
|
|
229
|
+
required: false,
|
|
230
|
+
default: void 0
|
|
231
|
+
},
|
|
232
|
+
onFinish: {
|
|
233
|
+
type: Function,
|
|
234
|
+
required: false,
|
|
235
|
+
default: void 0
|
|
236
|
+
},
|
|
237
|
+
closeIcon: {
|
|
238
|
+
type: null,
|
|
239
|
+
required: false,
|
|
240
|
+
default: void 0
|
|
241
|
+
},
|
|
242
|
+
closable: {
|
|
243
|
+
type: [Boolean, Object],
|
|
244
|
+
required: false,
|
|
245
|
+
default: void 0
|
|
246
|
+
},
|
|
247
|
+
mask: {
|
|
248
|
+
type: [Boolean, Object],
|
|
249
|
+
required: false,
|
|
250
|
+
default: void 0
|
|
251
|
+
},
|
|
252
|
+
arrow: {
|
|
253
|
+
type: [Boolean, Object],
|
|
254
|
+
required: false,
|
|
255
|
+
default: void 0
|
|
256
|
+
},
|
|
257
|
+
rootClassName: {
|
|
258
|
+
type: String,
|
|
259
|
+
required: false,
|
|
260
|
+
default: void 0
|
|
261
|
+
},
|
|
262
|
+
placement: {
|
|
263
|
+
type: String,
|
|
264
|
+
required: false,
|
|
265
|
+
default: void 0
|
|
266
|
+
},
|
|
267
|
+
prefixCls: {
|
|
268
|
+
type: String,
|
|
269
|
+
required: false,
|
|
270
|
+
default: void 0
|
|
271
|
+
},
|
|
272
|
+
renderPanel: {
|
|
273
|
+
type: Function,
|
|
274
|
+
required: false,
|
|
275
|
+
default: void 0
|
|
276
|
+
},
|
|
277
|
+
gap: {
|
|
278
|
+
type: Object,
|
|
279
|
+
required: false,
|
|
280
|
+
default: void 0
|
|
281
|
+
},
|
|
282
|
+
animated: {
|
|
283
|
+
type: [Boolean, Object],
|
|
284
|
+
required: false,
|
|
285
|
+
default: void 0
|
|
286
|
+
},
|
|
287
|
+
scrollIntoViewOptions: {
|
|
288
|
+
type: Boolean,
|
|
289
|
+
required: false,
|
|
290
|
+
skipCheck: true,
|
|
291
|
+
default: void 0
|
|
292
|
+
},
|
|
293
|
+
zIndex: {
|
|
294
|
+
type: Number,
|
|
295
|
+
required: false,
|
|
296
|
+
default: void 0
|
|
297
|
+
},
|
|
298
|
+
getPopupContainer: {
|
|
299
|
+
type: [Function, Boolean],
|
|
300
|
+
required: false,
|
|
301
|
+
default: void 0
|
|
302
|
+
},
|
|
303
|
+
builtinPlacements: {
|
|
304
|
+
type: Function,
|
|
305
|
+
required: false,
|
|
306
|
+
skipCheck: true,
|
|
307
|
+
default: void 0
|
|
308
|
+
},
|
|
309
|
+
disabledInteraction: {
|
|
310
|
+
type: Boolean,
|
|
311
|
+
required: false,
|
|
312
|
+
default: void 0
|
|
313
|
+
},
|
|
314
|
+
onPopupAlign: {
|
|
315
|
+
type: Function,
|
|
316
|
+
required: false,
|
|
317
|
+
default: void 0
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
name: "VcTour",
|
|
321
|
+
inheritAttrs: false
|
|
322
|
+
});
|
|
323
|
+
var Tour_default = Tour;
|
|
324
|
+
exports.default = Tour_default;
|
package/dist/Tour.d.ts
ADDED
package/dist/Tour.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import Mask_default from "./Mask.js";
|
|
2
|
+
import Placeholder_default from "./Placeholder.js";
|
|
3
|
+
import { useClosable } from "./hooks/useClosable.js";
|
|
4
|
+
import { getPlacement } from "./util.js";
|
|
5
|
+
import useTarget from "./hooks/useTarget.js";
|
|
6
|
+
import { getPlacements } from "./placements.js";
|
|
7
|
+
import TourStep_default from "./TourStep/index.js";
|
|
8
|
+
import { Fragment, computed, createVNode, defineComponent, mergeProps, nextTick, shallowRef, unref, watch } from "vue";
|
|
9
|
+
import { clsx } from "@v-c/util";
|
|
10
|
+
import { Trigger } from "@v-c/trigger";
|
|
11
|
+
var CENTER_PLACEHOLDER = {
|
|
12
|
+
left: "50%",
|
|
13
|
+
top: "50%",
|
|
14
|
+
width: `1px`,
|
|
15
|
+
height: `1px`
|
|
16
|
+
};
|
|
17
|
+
var defaultScrollIntoViewOptions = {
|
|
18
|
+
block: "center",
|
|
19
|
+
inline: "center"
|
|
20
|
+
};
|
|
21
|
+
var Tour_default = /* @__PURE__ */ defineComponent((props, { attrs }) => {
|
|
22
|
+
const triggerRef = shallowRef();
|
|
23
|
+
const placeholderRef = shallowRef(null);
|
|
24
|
+
const inlineMode = computed(() => props?.getPopupContainer === false);
|
|
25
|
+
const prefixCls = computed(() => props?.prefixCls ?? "vc-tour");
|
|
26
|
+
const steps = computed(() => props?.steps ?? []);
|
|
27
|
+
const stepCount = computed(() => steps.value.length);
|
|
28
|
+
const mergedCurrent = shallowRef(typeof props?.current === "number" ? props.current : props?.defaultCurrent ?? 0);
|
|
29
|
+
const setMergedCurrent = (nextCurrent) => {
|
|
30
|
+
if (typeof props?.current === "undefined") mergedCurrent.value = nextCurrent;
|
|
31
|
+
};
|
|
32
|
+
watch(() => props?.current, (val) => {
|
|
33
|
+
if (typeof val === "number") mergedCurrent.value = val;
|
|
34
|
+
});
|
|
35
|
+
const internalOpen = shallowRef(typeof props?.open === "boolean" ? props.open : props?.defaultOpen);
|
|
36
|
+
const setInternalOpen = (nextOpen) => {
|
|
37
|
+
if (typeof props?.open === "undefined") internalOpen.value = nextOpen;
|
|
38
|
+
};
|
|
39
|
+
watch(() => props?.open, (val) => {
|
|
40
|
+
if (typeof val !== "undefined") internalOpen.value = val;
|
|
41
|
+
});
|
|
42
|
+
const mergedOpen = computed(() => {
|
|
43
|
+
if (mergedCurrent.value < 0 || mergedCurrent.value >= stepCount.value) return false;
|
|
44
|
+
return internalOpen.value ?? true;
|
|
45
|
+
});
|
|
46
|
+
const hasOpened = shallowRef(mergedOpen.value);
|
|
47
|
+
const openRef = shallowRef(mergedOpen.value);
|
|
48
|
+
watch([mergedOpen], async () => {
|
|
49
|
+
await nextTick();
|
|
50
|
+
if (mergedOpen.value) {
|
|
51
|
+
if (!openRef.value) setMergedCurrent(0);
|
|
52
|
+
hasOpened.value = true;
|
|
53
|
+
}
|
|
54
|
+
openRef.value = mergedOpen.value;
|
|
55
|
+
});
|
|
56
|
+
const stepInfo = computed(() => steps.value?.[mergedCurrent.value] ?? {});
|
|
57
|
+
const stepStyle = computed(() => stepInfo.value?.style);
|
|
58
|
+
const stepClassName = computed(() => stepInfo.value?.className);
|
|
59
|
+
const mergedClosable = useClosable(computed(() => stepInfo.value?.closable), computed(() => stepInfo.value?.closeIcon), computed(() => props?.closable), computed(() => props?.closeIcon));
|
|
60
|
+
const mergedMask = computed(() => {
|
|
61
|
+
const mask = stepInfo.value?.mask ?? props?.mask ?? true;
|
|
62
|
+
return mergedOpen.value && mask;
|
|
63
|
+
});
|
|
64
|
+
const mergedScrollIntoViewOptions = computed(() => stepInfo?.value?.scrollIntoViewOptions ?? props?.scrollIntoViewOptions ?? defaultScrollIntoViewOptions);
|
|
65
|
+
const [posInfo, targetElement] = useTarget(computed(() => unref(stepInfo?.value?.target)), mergedOpen, computed(() => props?.gap), mergedScrollIntoViewOptions, inlineMode, placeholderRef);
|
|
66
|
+
const mergedPlacement = computed(() => getPlacement(targetElement.value, props?.placement, stepInfo.value?.placement));
|
|
67
|
+
const mergedArrow = computed(() => {
|
|
68
|
+
if (!targetElement.value) return false;
|
|
69
|
+
if (typeof stepInfo.value?.arrow !== "undefined") return stepInfo.value?.arrow;
|
|
70
|
+
return typeof props?.arrow === "undefined" ? true : props?.arrow;
|
|
71
|
+
});
|
|
72
|
+
const arrowPointAtCenter = computed(() => typeof mergedArrow.value === "object" ? mergedArrow?.value?.pointAtCenter : false);
|
|
73
|
+
watch([arrowPointAtCenter, mergedCurrent], async () => {
|
|
74
|
+
await nextTick();
|
|
75
|
+
triggerRef?.value?.forceAlign?.();
|
|
76
|
+
}, { immediate: true });
|
|
77
|
+
const onInternalChange = (nextCurrent) => {
|
|
78
|
+
setMergedCurrent(nextCurrent);
|
|
79
|
+
props?.onChange?.(nextCurrent);
|
|
80
|
+
};
|
|
81
|
+
const mergedBuiltinPlacements = computed(() => {
|
|
82
|
+
const { builtinPlacements } = props;
|
|
83
|
+
if (builtinPlacements) return typeof builtinPlacements === "function" ? builtinPlacements({ arrowPointAtCenter: arrowPointAtCenter.value }) : builtinPlacements;
|
|
84
|
+
return getPlacements(arrowPointAtCenter.value);
|
|
85
|
+
});
|
|
86
|
+
const handleClose = () => {
|
|
87
|
+
setInternalOpen(false);
|
|
88
|
+
props?.onClose?.(mergedCurrent.value);
|
|
89
|
+
};
|
|
90
|
+
const fallbackDOM = () => {
|
|
91
|
+
return targetElement.value || (typeof document !== "undefined" ? document.body : null);
|
|
92
|
+
};
|
|
93
|
+
return () => {
|
|
94
|
+
const { styles, classNames, renderPanel, rootClassName, animated, zIndex = 1001, getPopupContainer, className, style, disabledInteraction, onPopupAlign } = props;
|
|
95
|
+
const { class: attrClass, style: attrStyle,...restAttrs } = attrs;
|
|
96
|
+
const mergedMaskValue = mergedMask.value;
|
|
97
|
+
const mergedShowMask = typeof mergedMaskValue === "boolean" ? mergedMaskValue : !!mergedMaskValue;
|
|
98
|
+
const mergedMaskStyle = typeof mergedMaskValue === "boolean" ? void 0 : mergedMaskValue;
|
|
99
|
+
const placeholderClassName = clsx(className, attrClass, rootClassName, `${prefixCls.value}-target-placeholder`);
|
|
100
|
+
const placeholderStyle = {
|
|
101
|
+
...posInfo.value ? {
|
|
102
|
+
left: `${posInfo.value.left}px`,
|
|
103
|
+
top: `${posInfo.value.top}px`,
|
|
104
|
+
width: `${posInfo.value.width}px`,
|
|
105
|
+
height: `${posInfo.value.height}px`
|
|
106
|
+
} : CENTER_PLACEHOLDER,
|
|
107
|
+
position: inlineMode.value ? "absolute" : "fixed",
|
|
108
|
+
pointerEvents: "none",
|
|
109
|
+
...style || {}
|
|
110
|
+
};
|
|
111
|
+
if (attrStyle && typeof attrStyle === "object") Object.assign(placeholderStyle, attrStyle);
|
|
112
|
+
const popupElement = createVNode(TourStep_default, mergeProps({
|
|
113
|
+
"styles": styles,
|
|
114
|
+
"classNames": classNames,
|
|
115
|
+
"arrow": mergedArrow.value,
|
|
116
|
+
"key": "content",
|
|
117
|
+
"prefixCls": prefixCls.value,
|
|
118
|
+
"total": stepCount.value,
|
|
119
|
+
"renderPanel": renderPanel,
|
|
120
|
+
"onPrev": () => {
|
|
121
|
+
onInternalChange(mergedCurrent.value - 1);
|
|
122
|
+
},
|
|
123
|
+
"onNext": () => {
|
|
124
|
+
onInternalChange(mergedCurrent.value + 1);
|
|
125
|
+
},
|
|
126
|
+
"onClose": handleClose,
|
|
127
|
+
"current": mergedCurrent.value,
|
|
128
|
+
"onFinish": () => {
|
|
129
|
+
handleClose();
|
|
130
|
+
props?.onFinish?.();
|
|
131
|
+
}
|
|
132
|
+
}, stepInfo.value, { "closable": mergedClosable.value }), null);
|
|
133
|
+
if (targetElement.value === void 0 || !hasOpened.value) return null;
|
|
134
|
+
return createVNode(Fragment, null, [createVNode(Mask_default, {
|
|
135
|
+
"getPopupContainer": getPopupContainer,
|
|
136
|
+
"styles": styles,
|
|
137
|
+
"classNames": classNames,
|
|
138
|
+
"zIndex": zIndex,
|
|
139
|
+
"prefixCls": prefixCls.value,
|
|
140
|
+
"pos": posInfo.value,
|
|
141
|
+
"showMask": mergedShowMask,
|
|
142
|
+
"style": mergedMaskStyle?.style,
|
|
143
|
+
"fill": mergedMaskStyle?.color,
|
|
144
|
+
"open": mergedOpen.value,
|
|
145
|
+
"animated": animated,
|
|
146
|
+
"rootClassName": rootClassName,
|
|
147
|
+
"disabledInteraction": disabledInteraction
|
|
148
|
+
}, null), createVNode(Trigger, mergeProps(restAttrs, {
|
|
149
|
+
"getPopupContainer": getPopupContainer,
|
|
150
|
+
"builtinPlacements": mergedBuiltinPlacements.value,
|
|
151
|
+
"ref": triggerRef,
|
|
152
|
+
"popupStyle": stepStyle.value,
|
|
153
|
+
"popupPlacement": mergedPlacement.value,
|
|
154
|
+
"popupVisible": mergedOpen.value,
|
|
155
|
+
"popupClassName": clsx(rootClassName, stepClassName.value),
|
|
156
|
+
"prefixCls": prefixCls.value,
|
|
157
|
+
"popup": popupElement,
|
|
158
|
+
"forceRender": false,
|
|
159
|
+
"autoDestroy": true,
|
|
160
|
+
"zIndex": zIndex,
|
|
161
|
+
"arrow": !!mergedArrow.value,
|
|
162
|
+
"onPopupAlign": onPopupAlign
|
|
163
|
+
}), { default: () => [createVNode(Placeholder_default, {
|
|
164
|
+
"open": mergedOpen.value,
|
|
165
|
+
"autoLock": !inlineMode.value,
|
|
166
|
+
"getContainer": getPopupContainer,
|
|
167
|
+
"domRef": placeholderRef,
|
|
168
|
+
"fallbackDOM": fallbackDOM,
|
|
169
|
+
"class": placeholderClassName,
|
|
170
|
+
"style": placeholderStyle
|
|
171
|
+
}, null)] })]);
|
|
172
|
+
};
|
|
173
|
+
}, {
|
|
174
|
+
props: {
|
|
175
|
+
classNames: {
|
|
176
|
+
type: Object,
|
|
177
|
+
required: false,
|
|
178
|
+
default: void 0
|
|
179
|
+
},
|
|
180
|
+
styles: {
|
|
181
|
+
type: Object,
|
|
182
|
+
required: false,
|
|
183
|
+
default: void 0
|
|
184
|
+
},
|
|
185
|
+
className: {
|
|
186
|
+
type: String,
|
|
187
|
+
required: false,
|
|
188
|
+
default: void 0
|
|
189
|
+
},
|
|
190
|
+
style: {
|
|
191
|
+
type: null,
|
|
192
|
+
required: false,
|
|
193
|
+
default: void 0
|
|
194
|
+
},
|
|
195
|
+
steps: {
|
|
196
|
+
type: Array,
|
|
197
|
+
required: false,
|
|
198
|
+
default: void 0
|
|
199
|
+
},
|
|
200
|
+
open: {
|
|
201
|
+
type: Boolean,
|
|
202
|
+
required: false,
|
|
203
|
+
default: void 0
|
|
204
|
+
},
|
|
205
|
+
defaultOpen: {
|
|
206
|
+
type: Boolean,
|
|
207
|
+
required: false,
|
|
208
|
+
default: void 0
|
|
209
|
+
},
|
|
210
|
+
defaultCurrent: {
|
|
211
|
+
type: Number,
|
|
212
|
+
required: false,
|
|
213
|
+
default: void 0
|
|
214
|
+
},
|
|
215
|
+
current: {
|
|
216
|
+
type: Number,
|
|
217
|
+
required: false,
|
|
218
|
+
default: void 0
|
|
219
|
+
},
|
|
220
|
+
onChange: {
|
|
221
|
+
type: Function,
|
|
222
|
+
required: false,
|
|
223
|
+
default: void 0
|
|
224
|
+
},
|
|
225
|
+
onClose: {
|
|
226
|
+
type: Function,
|
|
227
|
+
required: false,
|
|
228
|
+
default: void 0
|
|
229
|
+
},
|
|
230
|
+
onFinish: {
|
|
231
|
+
type: Function,
|
|
232
|
+
required: false,
|
|
233
|
+
default: void 0
|
|
234
|
+
},
|
|
235
|
+
closeIcon: {
|
|
236
|
+
type: null,
|
|
237
|
+
required: false,
|
|
238
|
+
default: void 0
|
|
239
|
+
},
|
|
240
|
+
closable: {
|
|
241
|
+
type: [Boolean, Object],
|
|
242
|
+
required: false,
|
|
243
|
+
default: void 0
|
|
244
|
+
},
|
|
245
|
+
mask: {
|
|
246
|
+
type: [Boolean, Object],
|
|
247
|
+
required: false,
|
|
248
|
+
default: void 0
|
|
249
|
+
},
|
|
250
|
+
arrow: {
|
|
251
|
+
type: [Boolean, Object],
|
|
252
|
+
required: false,
|
|
253
|
+
default: void 0
|
|
254
|
+
},
|
|
255
|
+
rootClassName: {
|
|
256
|
+
type: String,
|
|
257
|
+
required: false,
|
|
258
|
+
default: void 0
|
|
259
|
+
},
|
|
260
|
+
placement: {
|
|
261
|
+
type: String,
|
|
262
|
+
required: false,
|
|
263
|
+
default: void 0
|
|
264
|
+
},
|
|
265
|
+
prefixCls: {
|
|
266
|
+
type: String,
|
|
267
|
+
required: false,
|
|
268
|
+
default: void 0
|
|
269
|
+
},
|
|
270
|
+
renderPanel: {
|
|
271
|
+
type: Function,
|
|
272
|
+
required: false,
|
|
273
|
+
default: void 0
|
|
274
|
+
},
|
|
275
|
+
gap: {
|
|
276
|
+
type: Object,
|
|
277
|
+
required: false,
|
|
278
|
+
default: void 0
|
|
279
|
+
},
|
|
280
|
+
animated: {
|
|
281
|
+
type: [Boolean, Object],
|
|
282
|
+
required: false,
|
|
283
|
+
default: void 0
|
|
284
|
+
},
|
|
285
|
+
scrollIntoViewOptions: {
|
|
286
|
+
type: Boolean,
|
|
287
|
+
required: false,
|
|
288
|
+
skipCheck: true,
|
|
289
|
+
default: void 0
|
|
290
|
+
},
|
|
291
|
+
zIndex: {
|
|
292
|
+
type: Number,
|
|
293
|
+
required: false,
|
|
294
|
+
default: void 0
|
|
295
|
+
},
|
|
296
|
+
getPopupContainer: {
|
|
297
|
+
type: [Function, Boolean],
|
|
298
|
+
required: false,
|
|
299
|
+
default: void 0
|
|
300
|
+
},
|
|
301
|
+
builtinPlacements: {
|
|
302
|
+
type: Function,
|
|
303
|
+
required: false,
|
|
304
|
+
skipCheck: true,
|
|
305
|
+
default: void 0
|
|
306
|
+
},
|
|
307
|
+
disabledInteraction: {
|
|
308
|
+
type: Boolean,
|
|
309
|
+
required: false,
|
|
310
|
+
default: void 0
|
|
311
|
+
},
|
|
312
|
+
onPopupAlign: {
|
|
313
|
+
type: Function,
|
|
314
|
+
required: false,
|
|
315
|
+
default: void 0
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
name: "VcTour",
|
|
319
|
+
inheritAttrs: false
|
|
320
|
+
});
|
|
321
|
+
export { Tour_default as default };
|