@v-c/trigger 0.0.13 → 0.0.14

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.
@@ -1,366 +1,308 @@
1
- import { defineComponent, computed, shallowRef, watchEffect, nextTick, createVNode, Transition, withDirectives, mergeProps, vShow, mergeDefaults } from "vue";
1
+ import useOffsetStyle from "../hooks/useOffsetStyle.js";
2
+ import { Arrow } from "./Arrow.js";
3
+ import Mask_default from "./Mask.js";
4
+ import PopupContent_default from "./PopupContent.js";
5
+ import { Transition, computed, createVNode, defineComponent, mergeDefaults, mergeProps, nextTick, shallowRef, vShow, watchEffect, withDirectives } from "vue";
2
6
  import ResizeObserver from "@v-c/resize-observer";
3
7
  import { classNames } from "@v-c/util";
4
8
  import { toPropsRefs } from "@v-c/util/dist/props-util";
5
9
  import { getTransitionProps } from "@v-c/util/dist/utils/transition";
6
- import useOffsetStyle from "../hooks/useOffsetStyle.js";
7
- import { Arrow } from "./Arrow.js";
8
- import Mask from "./Mask.js";
9
- import PopupContent from "./PopupContent.js";
10
- const defaults = {
11
- autoDestroy: true
12
- };
13
- const Popup = /* @__PURE__ */ defineComponent((props, {
14
- attrs,
15
- slots,
16
- expose
17
- }) => {
18
- const popupContent = computed(() => typeof props.popup === "function" ? props.popup() : props.popup);
19
- const {
20
- offsetX,
21
- offsetR,
22
- offsetY,
23
- offsetB,
24
- open,
25
- ready,
26
- align
27
- } = toPropsRefs(props, "offsetX", "offsetB", "offsetY", "offsetR", "ready", "open", "align");
28
- const isNodeVisible = computed(() => props.open || props.keepDom);
29
- const isMobile = computed(() => !!props.mobile);
30
- const getPopupContainerNeedParams = props?.getPopupContainer?.length > 0;
31
- const mergedProps = computed(() => {
32
- const {
33
- mobile,
34
- mask,
35
- maskMotion,
36
- motion
37
- } = props;
38
- if (mobile) {
39
- return [mobile.mask, mobile.maskMotion, mobile.motion];
40
- }
41
- return [mask, maskMotion, motion];
42
- });
43
- const show = shallowRef(!props.getPopupContainer || !getPopupContainerNeedParams);
44
- watchEffect(async () => {
45
- await nextTick();
46
- const getPopupContainerNeedParams2 = props?.getPopupContainer?.length > 0;
47
- const target = props.target;
48
- if (!show.value && getPopupContainerNeedParams2 && target) {
49
- show.value = true;
50
- }
51
- });
52
- const onInternalResize = (size, element) => {
53
- props?.onResize?.(size, element);
54
- props?.onAlign?.();
55
- };
56
- const offsetStyle = useOffsetStyle(isMobile, ready, open, align, offsetR, offsetB, offsetX, offsetY);
57
- const popupElementRef = shallowRef();
58
- expose({
59
- getElement: () => popupElementRef.value,
60
- nativeElement: popupElementRef
61
- });
62
- return () => {
63
- if (!show.value) {
64
- return null;
65
- }
66
- const {
67
- stretch,
68
- targetHeight,
69
- targetWidth,
70
- portal: Portal,
71
- forceRender,
72
- getPopupContainer,
73
- target,
74
- autoDestroy,
75
- zIndex,
76
- prefixCls,
77
- // Arrow
78
- arrow,
79
- arrowPos,
80
- align: align2,
81
- onMouseEnter,
82
- onMouseLeave,
83
- onPointerEnter,
84
- onPointerDownCapture,
85
- onClick,
86
- fresh,
87
- onPrepare,
88
- onVisibleChanged
89
- } = props;
90
- const miscStyle = {};
91
- if (stretch) {
92
- if (stretch.includes("height") && targetHeight) {
93
- miscStyle.height = `${targetHeight}px`;
94
- } else if (stretch.includes("minHeight") && targetHeight) {
95
- miscStyle.minHeight = `${targetHeight}px`;
96
- }
97
- if (stretch.includes("width") && targetWidth) {
98
- miscStyle.width = `${targetWidth}px`;
99
- } else if (stretch.includes("minWidth") && targetWidth) {
100
- miscStyle.minWidth = `${targetWidth}px`;
101
- }
102
- }
103
- if (!open.value) {
104
- miscStyle.pointerEvents = "none";
105
- }
106
- const [mergedMask, mergedMaskMotion, mergedPopupMotion] = mergedProps.value;
107
- const popupMotionName = mergedPopupMotion?.name ?? mergedPopupMotion?.motionName;
108
- const baseTransitionProps = getTransitionProps(popupMotionName, mergedPopupMotion);
109
- const mergedTransitionProps = {
110
- ...baseTransitionProps,
111
- onBeforeEnter: (element) => {
112
- onPrepare?.();
113
- baseTransitionProps?.onBeforeEnter?.(element);
114
- },
115
- onAfterEnter: (element) => {
116
- baseTransitionProps?.onAfterEnter?.(element);
117
- onVisibleChanged?.(true);
118
- },
119
- onAfterLeave: (element) => {
120
- baseTransitionProps.onAfterLeave?.(element);
121
- onVisibleChanged?.(false);
122
- }
123
- };
124
- const cls = classNames(prefixCls, attrs.class, props.className, {
125
- [`${prefixCls}-mobile`]: isMobile.value
126
- });
127
- return createVNode(Portal, {
128
- "open": forceRender || isNodeVisible.value,
129
- "getContainer": getPopupContainer && (() => getPopupContainer(target)),
130
- "autoDestroy": autoDestroy
131
- }, {
132
- default: () => [createVNode(Mask, {
133
- "prefixCls": prefixCls,
134
- "open": open.value,
135
- "zIndex": zIndex,
136
- "mask": mergedMask,
137
- "motion": mergedMaskMotion,
138
- "mobile": isMobile.value
139
- }, null), createVNode(ResizeObserver, {
140
- "onResize": onInternalResize,
141
- "disabled": !open.value
142
- }, {
143
- default: () => [createVNode(Transition, mergedTransitionProps, {
144
- default: () => [withDirectives(createVNode("div", mergeProps({
145
- "ref": popupElementRef,
146
- "class": cls,
147
- "style": [{
148
- "--arrow-x": `${arrowPos.x || 0}px`,
149
- "--arrow-y": `${arrowPos.y || 0}px`
150
- }, offsetStyle.value, miscStyle, {
151
- boxSizing: "border-box",
152
- zIndex
153
- }, props.style],
154
- "onMouseenter": onMouseEnter,
155
- "onMouseleave": onMouseLeave,
156
- "onPointerenter": onPointerEnter,
157
- "onClick": onClick
158
- }, {
159
- onPointerdownCapture: onPointerDownCapture
160
- }), [!!arrow && createVNode(Arrow, {
161
- "prefixCls": prefixCls,
162
- "arrow": arrow === true ? {} : arrow,
163
- "arrowPos": arrowPos,
164
- "align": align2
165
- }, null), createVNode(PopupContent, {
166
- "cache": !open.value && !fresh
167
- }, {
168
- default: () => [popupContent.value]
169
- })]), [[vShow, open.value]])]
170
- })]
171
- }), slots?.default?.()]
172
- });
173
- };
174
- }, {
175
- props: /* @__PURE__ */ mergeDefaults({
176
- prefixCls: {
177
- type: String,
178
- required: true,
179
- default: void 0
180
- },
181
- className: {
182
- type: String,
183
- required: false,
184
- default: void 0
185
- },
186
- style: {
187
- type: null,
188
- required: false,
189
- default: void 0
190
- },
191
- popup: {
192
- type: Function,
193
- required: false,
194
- skipCheck: true,
195
- default: void 0
196
- },
197
- target: {
198
- type: null,
199
- required: true,
200
- default: void 0
201
- },
202
- onMouseEnter: {
203
- type: Function,
204
- required: false,
205
- default: void 0
206
- },
207
- onMouseLeave: {
208
- type: Function,
209
- required: false,
210
- default: void 0
211
- },
212
- onPointerEnter: {
213
- type: Function,
214
- required: false,
215
- default: void 0
216
- },
217
- onPointerDownCapture: {
218
- type: Function,
219
- required: false,
220
- default: void 0
221
- },
222
- zIndex: {
223
- type: Number,
224
- required: false,
225
- default: void 0
226
- },
227
- mask: {
228
- type: Boolean,
229
- required: false,
230
- default: void 0
231
- },
232
- onVisibleChanged: {
233
- type: Function,
234
- required: true,
235
- default: void 0
236
- },
237
- align: {
238
- type: Object,
239
- required: false,
240
- default: void 0
241
- },
242
- arrow: {
243
- type: [Object, Boolean],
244
- required: false,
245
- default: void 0
246
- },
247
- arrowPos: {
248
- type: Object,
249
- required: true,
250
- default: void 0
251
- },
252
- open: {
253
- type: Boolean,
254
- required: true,
255
- default: void 0
256
- },
257
- keepDom: {
258
- type: Boolean,
259
- required: true,
260
- default: void 0
261
- },
262
- fresh: {
263
- type: Boolean,
264
- required: false,
265
- default: void 0
266
- },
267
- onClick: {
268
- type: Function,
269
- required: false,
270
- default: void 0
271
- },
272
- motion: {
273
- type: Object,
274
- required: false,
275
- default: void 0
276
- },
277
- maskMotion: {
278
- type: Object,
279
- required: false,
280
- default: void 0
281
- },
282
- forceRender: {
283
- type: Boolean,
284
- required: false,
285
- default: void 0
286
- },
287
- getPopupContainer: {
288
- type: Function,
289
- required: false,
290
- default: void 0
291
- },
292
- autoDestroy: {
293
- type: Boolean,
294
- required: false,
295
- default: void 0
296
- },
297
- portal: {
298
- type: null,
299
- required: true,
300
- default: void 0
301
- },
302
- ready: {
303
- type: Boolean,
304
- required: true,
305
- default: void 0
306
- },
307
- offsetX: {
308
- type: Number,
309
- required: true,
310
- default: void 0
311
- },
312
- offsetY: {
313
- type: Number,
314
- required: true,
315
- default: void 0
316
- },
317
- offsetR: {
318
- type: Number,
319
- required: true,
320
- default: void 0
321
- },
322
- offsetB: {
323
- type: Number,
324
- required: true,
325
- default: void 0
326
- },
327
- onAlign: {
328
- type: null,
329
- required: true,
330
- default: void 0
331
- },
332
- onPrepare: {
333
- type: Function,
334
- required: true,
335
- default: void 0
336
- },
337
- stretch: {
338
- type: String,
339
- required: false,
340
- default: void 0
341
- },
342
- targetWidth: {
343
- type: Number,
344
- required: false,
345
- default: void 0
346
- },
347
- targetHeight: {
348
- type: Number,
349
- required: false,
350
- default: void 0
351
- },
352
- onResize: {
353
- type: null,
354
- required: false,
355
- default: void 0
356
- },
357
- mobile: {
358
- type: Object,
359
- required: false,
360
- default: void 0
361
- }
362
- }, defaults)
363
- });
364
- export {
365
- Popup as default
366
- };
10
+ var Popup_default = /* @__PURE__ */ defineComponent((props, { attrs, slots, expose }) => {
11
+ const popupContent = computed(() => typeof props.popup === "function" ? props.popup() : props.popup);
12
+ const { offsetX, offsetR, offsetY, offsetB, open, ready, align } = toPropsRefs(props, "offsetX", "offsetB", "offsetY", "offsetR", "ready", "open", "align");
13
+ const isNodeVisible = computed(() => props.open || props.keepDom);
14
+ const isMobile = computed(() => !!props.mobile);
15
+ const getPopupContainerNeedParams = props?.getPopupContainer?.length > 0;
16
+ const mergedProps = computed(() => {
17
+ const { mobile, mask, maskMotion, motion } = props;
18
+ if (mobile) return [
19
+ mobile.mask,
20
+ mobile.maskMotion,
21
+ mobile.motion
22
+ ];
23
+ return [
24
+ mask,
25
+ maskMotion,
26
+ motion
27
+ ];
28
+ });
29
+ const show = shallowRef(!props.getPopupContainer || !getPopupContainerNeedParams);
30
+ watchEffect(async () => {
31
+ await nextTick();
32
+ const getPopupContainerNeedParams$1 = props?.getPopupContainer?.length > 0;
33
+ const target = props.target;
34
+ if (!show.value && getPopupContainerNeedParams$1 && target) show.value = true;
35
+ });
36
+ const onInternalResize = (size, element) => {
37
+ props?.onResize?.(size, element);
38
+ props?.onAlign?.();
39
+ };
40
+ const offsetStyle = useOffsetStyle(isMobile, ready, open, align, offsetR, offsetB, offsetX, offsetY);
41
+ const popupElementRef = shallowRef();
42
+ expose({
43
+ getElement: () => popupElementRef.value,
44
+ nativeElement: popupElementRef
45
+ });
46
+ return () => {
47
+ if (!show.value) return null;
48
+ const { stretch, targetHeight, targetWidth, portal: Portal, forceRender, getPopupContainer, target, autoDestroy, zIndex, prefixCls, arrow, arrowPos, align: align$1, onMouseEnter, onMouseLeave, onPointerEnter, onPointerDownCapture, onClick, fresh, onPrepare, onVisibleChanged } = props;
49
+ const miscStyle = {};
50
+ if (stretch) {
51
+ if (stretch.includes("height") && targetHeight) miscStyle.height = `${targetHeight}px`;
52
+ else if (stretch.includes("minHeight") && targetHeight) miscStyle.minHeight = `${targetHeight}px`;
53
+ if (stretch.includes("width") && targetWidth) miscStyle.width = `${targetWidth}px`;
54
+ else if (stretch.includes("minWidth") && targetWidth) miscStyle.minWidth = `${targetWidth}px`;
55
+ }
56
+ if (!open.value) miscStyle.pointerEvents = "none";
57
+ const [mergedMask, mergedMaskMotion, mergedPopupMotion] = mergedProps.value;
58
+ const baseTransitionProps = getTransitionProps(mergedPopupMotion?.name ?? mergedPopupMotion?.motionName, mergedPopupMotion);
59
+ const mergedTransitionProps = {
60
+ ...baseTransitionProps,
61
+ onBeforeEnter: (element) => {
62
+ onPrepare?.();
63
+ baseTransitionProps?.onBeforeEnter?.(element);
64
+ },
65
+ onAfterEnter: (element) => {
66
+ baseTransitionProps?.onAfterEnter?.(element);
67
+ onVisibleChanged?.(true);
68
+ },
69
+ onAfterLeave: (element) => {
70
+ baseTransitionProps.onAfterLeave?.(element);
71
+ onVisibleChanged?.(false);
72
+ }
73
+ };
74
+ const cls = classNames(prefixCls, attrs.class, props.className, { [`${prefixCls}-mobile`]: isMobile.value });
75
+ return createVNode(Portal, {
76
+ "open": forceRender || isNodeVisible.value,
77
+ "getContainer": getPopupContainer && (() => getPopupContainer(target)),
78
+ "autoDestroy": autoDestroy
79
+ }, { default: () => [
80
+ createVNode(Mask_default, {
81
+ "prefixCls": prefixCls,
82
+ "open": open.value,
83
+ "zIndex": zIndex,
84
+ "mask": mergedMask,
85
+ "motion": mergedMaskMotion,
86
+ "mobile": isMobile.value
87
+ }, null),
88
+ createVNode(ResizeObserver, {
89
+ "onResize": onInternalResize,
90
+ "disabled": !open.value
91
+ }, { default: () => [createVNode(Transition, mergedTransitionProps, { default: () => [withDirectives(createVNode("div", mergeProps({
92
+ "ref": popupElementRef,
93
+ "class": cls,
94
+ "style": [
95
+ {
96
+ "--arrow-x": `${arrowPos.x || 0}px`,
97
+ "--arrow-y": `${arrowPos.y || 0}px`
98
+ },
99
+ offsetStyle.value,
100
+ miscStyle,
101
+ {
102
+ boxSizing: "border-box",
103
+ zIndex
104
+ },
105
+ props.style
106
+ ],
107
+ "onMouseenter": onMouseEnter,
108
+ "onMouseleave": onMouseLeave,
109
+ "onPointerenter": onPointerEnter,
110
+ "onClick": onClick
111
+ }, { onPointerdownCapture: onPointerDownCapture }), [!!arrow && createVNode(Arrow, {
112
+ "prefixCls": prefixCls,
113
+ "arrow": arrow === true ? {} : arrow,
114
+ "arrowPos": arrowPos,
115
+ "align": align$1
116
+ }, null), createVNode(PopupContent_default, { "cache": !open.value && !fresh }, { default: () => [popupContent.value] })]), [[vShow, open.value]])] })] }),
117
+ slots?.default?.()
118
+ ] });
119
+ };
120
+ }, { props: /* @__PURE__ */ mergeDefaults({
121
+ prefixCls: {
122
+ type: String,
123
+ required: true,
124
+ default: void 0
125
+ },
126
+ className: {
127
+ type: String,
128
+ required: false,
129
+ default: void 0
130
+ },
131
+ style: {
132
+ type: null,
133
+ required: false,
134
+ default: void 0
135
+ },
136
+ popup: {
137
+ type: Function,
138
+ required: false,
139
+ skipCheck: true,
140
+ default: void 0
141
+ },
142
+ target: {
143
+ type: null,
144
+ required: true,
145
+ default: void 0
146
+ },
147
+ onMouseEnter: {
148
+ type: Function,
149
+ required: false,
150
+ default: void 0
151
+ },
152
+ onMouseLeave: {
153
+ type: Function,
154
+ required: false,
155
+ default: void 0
156
+ },
157
+ onPointerEnter: {
158
+ type: Function,
159
+ required: false,
160
+ default: void 0
161
+ },
162
+ onPointerDownCapture: {
163
+ type: Function,
164
+ required: false,
165
+ default: void 0
166
+ },
167
+ zIndex: {
168
+ type: Number,
169
+ required: false,
170
+ default: void 0
171
+ },
172
+ mask: {
173
+ type: Boolean,
174
+ required: false,
175
+ default: void 0
176
+ },
177
+ onVisibleChanged: {
178
+ type: Function,
179
+ required: true,
180
+ default: void 0
181
+ },
182
+ align: {
183
+ type: Object,
184
+ required: false,
185
+ default: void 0
186
+ },
187
+ arrow: {
188
+ type: [Object, Boolean],
189
+ required: false,
190
+ default: void 0
191
+ },
192
+ arrowPos: {
193
+ type: Object,
194
+ required: true,
195
+ default: void 0
196
+ },
197
+ open: {
198
+ type: Boolean,
199
+ required: true,
200
+ default: void 0
201
+ },
202
+ keepDom: {
203
+ type: Boolean,
204
+ required: true,
205
+ default: void 0
206
+ },
207
+ fresh: {
208
+ type: Boolean,
209
+ required: false,
210
+ default: void 0
211
+ },
212
+ onClick: {
213
+ type: Function,
214
+ required: false,
215
+ default: void 0
216
+ },
217
+ motion: {
218
+ type: Object,
219
+ required: false,
220
+ default: void 0
221
+ },
222
+ maskMotion: {
223
+ type: Object,
224
+ required: false,
225
+ default: void 0
226
+ },
227
+ forceRender: {
228
+ type: Boolean,
229
+ required: false,
230
+ default: void 0
231
+ },
232
+ getPopupContainer: {
233
+ type: Function,
234
+ required: false,
235
+ default: void 0
236
+ },
237
+ autoDestroy: {
238
+ type: Boolean,
239
+ required: false,
240
+ default: void 0
241
+ },
242
+ portal: {
243
+ type: null,
244
+ required: true,
245
+ default: void 0
246
+ },
247
+ ready: {
248
+ type: Boolean,
249
+ required: true,
250
+ default: void 0
251
+ },
252
+ offsetX: {
253
+ type: Number,
254
+ required: true,
255
+ default: void 0
256
+ },
257
+ offsetY: {
258
+ type: Number,
259
+ required: true,
260
+ default: void 0
261
+ },
262
+ offsetR: {
263
+ type: Number,
264
+ required: true,
265
+ default: void 0
266
+ },
267
+ offsetB: {
268
+ type: Number,
269
+ required: true,
270
+ default: void 0
271
+ },
272
+ onAlign: {
273
+ type: null,
274
+ required: true,
275
+ default: void 0
276
+ },
277
+ onPrepare: {
278
+ type: Function,
279
+ required: true,
280
+ default: void 0
281
+ },
282
+ stretch: {
283
+ type: String,
284
+ required: false,
285
+ default: void 0
286
+ },
287
+ targetWidth: {
288
+ type: Number,
289
+ required: false,
290
+ default: void 0
291
+ },
292
+ targetHeight: {
293
+ type: Number,
294
+ required: false,
295
+ default: void 0
296
+ },
297
+ onResize: {
298
+ type: null,
299
+ required: false,
300
+ default: void 0
301
+ },
302
+ mobile: {
303
+ type: Object,
304
+ required: false,
305
+ default: void 0
306
+ }
307
+ }, { autoDestroy: true }) });
308
+ export { Popup_default as default };