@v-c/trigger 0.0.10 → 0.0.11

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