@v-c/dialog 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.
@@ -0,0 +1,379 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ const require_rolldown_runtime = require("../_virtual/rolldown_runtime.cjs");
3
+ const require_util = require("../util.cjs");
4
+ const require_index = require("./Content/index.cjs");
5
+ const require_Mask = require("./Mask.cjs");
6
+ let vue = require("vue");
7
+ let __v_c_util = require("@v-c/util");
8
+ let __v_c_util_dist_Dom_contains = require("@v-c/util/dist/Dom/contains");
9
+ __v_c_util_dist_Dom_contains = require_rolldown_runtime.__toESM(__v_c_util_dist_Dom_contains);
10
+ let __v_c_util_dist_KeyCode = require("@v-c/util/dist/KeyCode");
11
+ __v_c_util_dist_KeyCode = require_rolldown_runtime.__toESM(__v_c_util_dist_KeyCode);
12
+ let __v_c_util_dist_pickAttrs = require("@v-c/util/dist/pickAttrs");
13
+ __v_c_util_dist_pickAttrs = require_rolldown_runtime.__toESM(__v_c_util_dist_pickAttrs);
14
+ var Dialog = /* @__PURE__ */ (0, vue.defineComponent)((props, { expose, slots }) => {
15
+ if (process.env.NODE_ENV !== "production") {
16
+ [
17
+ "wrapStyle",
18
+ "bodyStyle",
19
+ "maskStyle"
20
+ ].forEach((prop) => {
21
+ (0, __v_c_util.warning)(!(prop in props && props[prop]), `${prop} is deprecated, please use styles instead.`);
22
+ });
23
+ if ("wrapClassName" in props && props.wrapClassName) (0, __v_c_util.warning)(false, `wrapClassName is deprecated, please use classNames instead.`);
24
+ }
25
+ const lastOutSideActiveElementRef = (0, vue.shallowRef)(null);
26
+ const wrapperRef = (0, vue.shallowRef)();
27
+ const contentRef = (0, vue.shallowRef)();
28
+ const animatedVisible = (0, vue.shallowRef)(props.visible);
29
+ const ariaId = (0, vue.useId)();
30
+ function saveLastOutSideActiveElementRef() {
31
+ if (!(0, __v_c_util_dist_Dom_contains.default)(wrapperRef.value, document.activeElement)) lastOutSideActiveElementRef.value = document.activeElement;
32
+ }
33
+ function focusDialogContent() {
34
+ if (!(0, __v_c_util_dist_Dom_contains.default)(wrapperRef.value, document.activeElement)) contentRef.value?.focus?.();
35
+ }
36
+ function onDialogVisibleChanged(newVisible) {
37
+ if (newVisible) focusDialogContent();
38
+ else {
39
+ animatedVisible.value = false;
40
+ if (props.mask && lastOutSideActiveElementRef.value && props.focusTriggerAfterClose) {
41
+ try {
42
+ lastOutSideActiveElementRef.value?.focus?.({ preventScroll: true });
43
+ } catch (e) {}
44
+ lastOutSideActiveElementRef.value = null;
45
+ }
46
+ if (animatedVisible.value) props?.afterClose?.();
47
+ props?.afterOpenChange?.(newVisible);
48
+ }
49
+ }
50
+ function onInternalClose(e) {
51
+ props?.onClose?.(e);
52
+ }
53
+ const contentClickRef = (0, vue.shallowRef)(false);
54
+ const contentTimeoutRef = (0, vue.shallowRef)();
55
+ const onContentMouseDown = () => {
56
+ clearTimeout(contentTimeoutRef.value);
57
+ contentClickRef.value = true;
58
+ };
59
+ const onContentMouseUp = () => {
60
+ contentTimeoutRef.value = setTimeout(() => {
61
+ contentClickRef.value = false;
62
+ });
63
+ };
64
+ let onWrapperClick = null;
65
+ (0, vue.watch)(() => props.maskClosable, () => {
66
+ if (props.maskClosable) onWrapperClick = (e) => {
67
+ if (contentClickRef.value) contentClickRef.value = false;
68
+ else if (wrapperRef.value === e.target) onInternalClose(e);
69
+ };
70
+ }, { immediate: true });
71
+ function onWrapperKeyDown(e) {
72
+ if (props.keyboard && e === __v_c_util_dist_KeyCode.default.ESC) {
73
+ e.stopPropagation();
74
+ onInternalClose(e);
75
+ }
76
+ if (props.visible && e.keyCode === __v_c_util_dist_KeyCode.default.TAB) contentRef.value?.changeActive?.(!e.shiftKey);
77
+ }
78
+ (0, vue.watch)(() => props.visible, () => {
79
+ if (props.visible) {
80
+ animatedVisible.value = true;
81
+ saveLastOutSideActiveElementRef();
82
+ }
83
+ }, { immediate: true });
84
+ (0, vue.onUnmounted)(() => {
85
+ clearTimeout(contentTimeoutRef.value);
86
+ });
87
+ expose({});
88
+ return () => {
89
+ const { zIndex, wrapStyle, wrapProps, wrapClassName, closable, transitionName, animation, styles: modalStyles, prefixCls, rootClassName, visible, mask, maskAnimation, maskTransitionName, maskStyle, maskProps, classNames: modalClassNames } = props;
90
+ const mergedStyle = {
91
+ zIndex,
92
+ ...wrapStyle,
93
+ ...modalStyles?.wrapper,
94
+ display: !animatedVisible.value ? "none" : void 0
95
+ };
96
+ return (0, vue.createVNode)("div", (0, vue.mergeProps)({ "class": [`${prefixCls}-root`, rootClassName] }, (0, __v_c_util_dist_pickAttrs.default)(props, { data: true })), [(0, vue.createVNode)(require_Mask.default, {
97
+ "prefixCls": prefixCls,
98
+ "visible": !!(mask && visible),
99
+ "motionName": require_util.getMotionName(prefixCls, maskTransitionName, maskAnimation),
100
+ "style": {
101
+ zIndex,
102
+ ...maskStyle,
103
+ ...modalStyles?.mask
104
+ },
105
+ "maskProps": maskProps,
106
+ "className": modalClassNames?.mask
107
+ }, null), (0, vue.createVNode)("div", (0, vue.mergeProps)({
108
+ "tabindex": -1,
109
+ "onKeydown": onWrapperKeyDown,
110
+ "class": [
111
+ `${prefixCls}-wrap`,
112
+ wrapClassName,
113
+ modalClassNames?.wrapper
114
+ ],
115
+ "ref": wrapperRef,
116
+ "onClick": onWrapperClick,
117
+ "style": mergedStyle
118
+ }, wrapProps), [(0, vue.createVNode)(require_index.default, (0, vue.mergeProps)({
119
+ ...props,
120
+ onMouseDown: onContentMouseDown,
121
+ onMouseUp: onContentMouseUp,
122
+ onClose: onInternalClose,
123
+ onVisibleChanged: onDialogVisibleChanged
124
+ }, {
125
+ "ref": contentRef,
126
+ "closable": closable,
127
+ "ariaId": ariaId,
128
+ "prefixCls": prefixCls,
129
+ "visible": !!visible,
130
+ "motionName": require_util.getMotionName(prefixCls, transitionName, animation)
131
+ }), slots)])]);
132
+ };
133
+ }, {
134
+ props: /* @__PURE__ */ (0, vue.mergeDefaults)({
135
+ className: {
136
+ type: String,
137
+ required: false,
138
+ default: void 0
139
+ },
140
+ keyboard: {
141
+ type: Boolean,
142
+ required: false,
143
+ default: void 0
144
+ },
145
+ style: {
146
+ type: Object,
147
+ required: false,
148
+ default: void 0
149
+ },
150
+ rootStyle: {
151
+ type: Object,
152
+ required: false,
153
+ default: void 0
154
+ },
155
+ mask: {
156
+ type: Boolean,
157
+ required: false,
158
+ default: void 0
159
+ },
160
+ children: {
161
+ type: [
162
+ Object,
163
+ Function,
164
+ String,
165
+ Number,
166
+ null,
167
+ Boolean,
168
+ Array
169
+ ],
170
+ required: false,
171
+ default: void 0
172
+ },
173
+ afterClose: {
174
+ type: Function,
175
+ required: false,
176
+ default: void 0
177
+ },
178
+ afterOpenChange: {
179
+ type: Function,
180
+ required: false,
181
+ default: void 0
182
+ },
183
+ onClose: {
184
+ type: Function,
185
+ required: false,
186
+ default: void 0
187
+ },
188
+ closable: {
189
+ type: [Boolean, Object],
190
+ required: false,
191
+ default: void 0
192
+ },
193
+ maskClosable: {
194
+ type: Boolean,
195
+ required: false,
196
+ default: void 0
197
+ },
198
+ visible: {
199
+ type: Boolean,
200
+ required: false,
201
+ default: void 0
202
+ },
203
+ destroyOnHidden: {
204
+ type: Boolean,
205
+ required: false,
206
+ default: void 0
207
+ },
208
+ mousePosition: {
209
+ type: [Object, null],
210
+ required: false,
211
+ default: void 0
212
+ },
213
+ title: {
214
+ type: [
215
+ Object,
216
+ Function,
217
+ String,
218
+ Number,
219
+ null,
220
+ Boolean,
221
+ Array
222
+ ],
223
+ required: false,
224
+ default: void 0
225
+ },
226
+ footer: {
227
+ type: [
228
+ Object,
229
+ Function,
230
+ String,
231
+ Number,
232
+ null,
233
+ Boolean,
234
+ Array
235
+ ],
236
+ required: false,
237
+ default: void 0
238
+ },
239
+ transitionName: {
240
+ type: String,
241
+ required: false,
242
+ default: void 0
243
+ },
244
+ maskTransitionName: {
245
+ type: String,
246
+ required: false,
247
+ default: void 0
248
+ },
249
+ animation: {
250
+ required: false,
251
+ default: void 0
252
+ },
253
+ maskAnimation: {
254
+ required: false,
255
+ default: void 0
256
+ },
257
+ wrapStyle: {
258
+ type: Object,
259
+ required: false,
260
+ default: void 0
261
+ },
262
+ bodyStyle: {
263
+ type: Object,
264
+ required: false,
265
+ default: void 0
266
+ },
267
+ maskStyle: {
268
+ type: Object,
269
+ required: false,
270
+ default: void 0
271
+ },
272
+ prefixCls: {
273
+ type: String,
274
+ required: false,
275
+ default: void 0
276
+ },
277
+ wrapClassName: {
278
+ type: String,
279
+ required: false,
280
+ default: void 0
281
+ },
282
+ width: {
283
+ type: [String, Number],
284
+ required: false,
285
+ default: void 0
286
+ },
287
+ height: {
288
+ type: [String, Number],
289
+ required: false,
290
+ default: void 0
291
+ },
292
+ zIndex: {
293
+ type: Number,
294
+ required: false,
295
+ default: void 0
296
+ },
297
+ bodyProps: {
298
+ required: false,
299
+ default: void 0
300
+ },
301
+ maskProps: {
302
+ required: false,
303
+ default: void 0
304
+ },
305
+ rootClassName: {
306
+ type: String,
307
+ required: false,
308
+ default: void 0
309
+ },
310
+ classNames: {
311
+ type: Object,
312
+ required: false,
313
+ default: void 0
314
+ },
315
+ styles: {
316
+ type: Object,
317
+ required: false,
318
+ default: void 0
319
+ },
320
+ wrapProps: {
321
+ required: false,
322
+ default: void 0
323
+ },
324
+ getContainer: {
325
+ type: [
326
+ String,
327
+ Function,
328
+ Boolean
329
+ ],
330
+ required: false,
331
+ skipCheck: true,
332
+ default: void 0
333
+ },
334
+ closeIcon: {
335
+ type: [
336
+ Object,
337
+ Function,
338
+ String,
339
+ Number,
340
+ null,
341
+ Boolean,
342
+ Array
343
+ ],
344
+ required: false,
345
+ default: void 0
346
+ },
347
+ modalRender: {
348
+ type: Function,
349
+ required: false,
350
+ default: void 0
351
+ },
352
+ forceRender: {
353
+ type: Boolean,
354
+ required: false,
355
+ default: void 0
356
+ },
357
+ focusTriggerAfterClose: {
358
+ type: Boolean,
359
+ required: false,
360
+ default: void 0
361
+ },
362
+ panelRef: {
363
+ required: false,
364
+ default: void 0
365
+ }
366
+ }, {
367
+ prefixCls: "vc-dialog",
368
+ visible: true,
369
+ keyboard: true,
370
+ focusTriggerAfterClose: true,
371
+ closable: true,
372
+ mask: true,
373
+ maskClosable: true,
374
+ forceRender: false
375
+ }),
376
+ name: "Dialog"
377
+ });
378
+ var Dialog_default = Dialog;
379
+ exports.default = Dialog_default;
@@ -0,0 +1,3 @@
1
+ import { IDialogPropTypes } from '../IDialogPropTypes';
2
+ declare const Dialog: import('vue').DefineSetupFnComponent<IDialogPropTypes, {}, {}, IDialogPropTypes & {}, import('vue').PublicProps>;
3
+ export default Dialog;