@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,365 @@
1
+ import { useGetRefContext } from "../../context.js";
2
+ import { createVNode, defineComponent, mergeProps, shallowRef } from "vue";
3
+ import { classNames } from "@v-c/util";
4
+ import pickAttrs from "@v-c/util/dist/pickAttrs";
5
+ var sentinelStyle = {
6
+ width: 0,
7
+ height: 0,
8
+ overflow: "hidden",
9
+ outline: "none"
10
+ };
11
+ var entityStyle = { outline: "none" };
12
+ var Panel_default = /* @__PURE__ */ defineComponent((props, { expose, slots }) => {
13
+ const { setPanel } = useGetRefContext();
14
+ const mergedRef = shallowRef();
15
+ const mergeRefFun = (el) => {
16
+ mergedRef.value = el;
17
+ setPanel(el);
18
+ props?.holderRef?.(el);
19
+ };
20
+ const sentinelStartRef = shallowRef();
21
+ const sentinelEndRef = shallowRef();
22
+ expose({
23
+ focus: () => {
24
+ sentinelStartRef.value?.focus?.({ preventScroll: true });
25
+ },
26
+ changeActive: (next) => {
27
+ const { activeElement } = document;
28
+ if (next && activeElement === sentinelEndRef.value) sentinelStartRef.value?.focus?.({ preventScroll: true });
29
+ else if (!next && activeElement === sentinelStartRef.value) sentinelEndRef.value?.focus?.({ preventScroll: true });
30
+ }
31
+ });
32
+ return () => {
33
+ const { width, height, footer, prefixCls, classNames: modalClassNames, styles: modalStyles, title, closable, closeIcon, bodyProps, bodyStyle, ariaId, style, className, forceRender, onClose, onMouseDown, onMouseUp, modalRender, animationVisible } = props;
34
+ const contentStyle = {};
35
+ if (width !== void 0) contentStyle.width = width;
36
+ if (height !== void 0) contentStyle.height = height;
37
+ const footerNode = footer ? createVNode("div", {
38
+ "class": classNames(`${prefixCls}-footer`, modalClassNames?.footer),
39
+ "style": { ...modalStyles?.footer }
40
+ }, [footer]) : null;
41
+ const headerNode = title ? createVNode("div", {
42
+ "class": classNames(`${prefixCls}-header`, modalClassNames?.header),
43
+ "style": { ...modalStyles?.header }
44
+ }, [title]) : null;
45
+ const closableFun = () => {
46
+ if (typeof closable === "object" && closable !== null) return closable;
47
+ if (closable) return { closeIcon: closeIcon ?? createVNode("span", { "class": `${prefixCls}-close-x` }, null) };
48
+ return {};
49
+ };
50
+ const closableObj = closableFun();
51
+ const ariaProps = pickAttrs(closableObj, true);
52
+ const closeBtnIsDisabled = typeof closable === "object" && closable?.disabled;
53
+ const closerNode = closable ? createVNode("button", mergeProps({
54
+ "type": "button",
55
+ "onClick": onClose,
56
+ "aria-label": "Close"
57
+ }, ariaProps, {
58
+ "class": `${prefixCls}-close`,
59
+ "disabled": closeBtnIsDisabled
60
+ }), [closableObj.closeIcon]) : null;
61
+ const content = createVNode("div", {
62
+ "class": classNames(`${prefixCls}-container`, modalClassNames?.container),
63
+ "style": modalStyles?.container
64
+ }, [
65
+ closerNode,
66
+ headerNode,
67
+ createVNode("div", mergeProps({
68
+ "class": classNames(`${prefixCls}-body`, modalClassNames?.body),
69
+ "style": {
70
+ ...bodyStyle,
71
+ ...modalStyles?.body
72
+ }
73
+ }, bodyProps), [slots?.default?.()]),
74
+ footerNode
75
+ ]);
76
+ const renderContent = () => {
77
+ if (!animationVisible && forceRender) return null;
78
+ return modalRender ? modalRender(content) : content;
79
+ };
80
+ return createVNode("div", mergeProps({
81
+ "key": "dialog-element",
82
+ "role": "dialog"
83
+ }, { "aria-labelledby": title ? ariaId : null }, {
84
+ "aria-modal": "true",
85
+ "ref": mergeRefFun,
86
+ "style": {
87
+ ...style,
88
+ ...contentStyle
89
+ },
90
+ "class": [prefixCls, className],
91
+ "onMousedown": onMouseDown,
92
+ "onMouseup": onMouseUp
93
+ }), [createVNode("div", {
94
+ "ref": sentinelStartRef,
95
+ "tabindex": 0,
96
+ "style": entityStyle
97
+ }, [renderContent()]), createVNode("div", {
98
+ "tabindex": 0,
99
+ "ref": sentinelEndRef,
100
+ "style": sentinelStyle
101
+ }, null)]);
102
+ };
103
+ }, {
104
+ props: {
105
+ prefixCls: {
106
+ type: String,
107
+ required: true,
108
+ default: void 0
109
+ },
110
+ ariaId: {
111
+ type: String,
112
+ required: false,
113
+ default: void 0
114
+ },
115
+ onMouseDown: {
116
+ type: Function,
117
+ required: false,
118
+ default: void 0
119
+ },
120
+ onMouseUp: {
121
+ type: Function,
122
+ required: false,
123
+ default: void 0
124
+ },
125
+ holderRef: {
126
+ type: Function,
127
+ required: false,
128
+ default: void 0
129
+ },
130
+ className: {
131
+ type: String,
132
+ required: false,
133
+ default: void 0
134
+ },
135
+ keyboard: {
136
+ type: Boolean,
137
+ required: false,
138
+ default: void 0
139
+ },
140
+ style: {
141
+ type: Object,
142
+ required: false,
143
+ default: void 0
144
+ },
145
+ rootStyle: {
146
+ type: Object,
147
+ required: false,
148
+ default: void 0
149
+ },
150
+ mask: {
151
+ type: Boolean,
152
+ required: false,
153
+ default: void 0
154
+ },
155
+ children: {
156
+ type: [
157
+ Object,
158
+ Function,
159
+ String,
160
+ Number,
161
+ null,
162
+ Boolean,
163
+ Array
164
+ ],
165
+ required: false,
166
+ default: void 0
167
+ },
168
+ afterClose: {
169
+ type: Function,
170
+ required: false,
171
+ default: void 0
172
+ },
173
+ afterOpenChange: {
174
+ type: Function,
175
+ required: false,
176
+ default: void 0
177
+ },
178
+ onClose: {
179
+ type: Function,
180
+ required: false,
181
+ default: void 0
182
+ },
183
+ closable: {
184
+ type: [Boolean, Object],
185
+ required: false,
186
+ default: void 0
187
+ },
188
+ maskClosable: {
189
+ type: Boolean,
190
+ required: false,
191
+ default: void 0
192
+ },
193
+ visible: {
194
+ type: Boolean,
195
+ required: false,
196
+ default: void 0
197
+ },
198
+ destroyOnHidden: {
199
+ type: Boolean,
200
+ required: false,
201
+ default: void 0
202
+ },
203
+ mousePosition: {
204
+ type: [Object, null],
205
+ required: false,
206
+ default: void 0
207
+ },
208
+ title: {
209
+ type: [
210
+ Object,
211
+ Function,
212
+ String,
213
+ Number,
214
+ null,
215
+ Boolean,
216
+ Array
217
+ ],
218
+ required: false,
219
+ default: void 0
220
+ },
221
+ footer: {
222
+ type: [
223
+ Object,
224
+ Function,
225
+ String,
226
+ Number,
227
+ null,
228
+ Boolean,
229
+ Array
230
+ ],
231
+ required: false,
232
+ default: void 0
233
+ },
234
+ transitionName: {
235
+ type: String,
236
+ required: false,
237
+ default: void 0
238
+ },
239
+ maskTransitionName: {
240
+ type: String,
241
+ required: false,
242
+ default: void 0
243
+ },
244
+ animation: {
245
+ required: false,
246
+ default: void 0
247
+ },
248
+ maskAnimation: {
249
+ required: false,
250
+ default: void 0
251
+ },
252
+ wrapStyle: {
253
+ type: Object,
254
+ required: false,
255
+ default: void 0
256
+ },
257
+ bodyStyle: {
258
+ type: Object,
259
+ required: false,
260
+ default: void 0
261
+ },
262
+ maskStyle: {
263
+ type: Object,
264
+ required: false,
265
+ default: void 0
266
+ },
267
+ wrapClassName: {
268
+ type: String,
269
+ required: false,
270
+ default: void 0
271
+ },
272
+ width: {
273
+ type: [String, Number],
274
+ required: false,
275
+ default: void 0
276
+ },
277
+ height: {
278
+ type: [String, Number],
279
+ required: false,
280
+ default: void 0
281
+ },
282
+ zIndex: {
283
+ type: Number,
284
+ required: false,
285
+ default: void 0
286
+ },
287
+ bodyProps: {
288
+ required: false,
289
+ default: void 0
290
+ },
291
+ maskProps: {
292
+ required: false,
293
+ default: void 0
294
+ },
295
+ rootClassName: {
296
+ type: String,
297
+ required: false,
298
+ default: void 0
299
+ },
300
+ classNames: {
301
+ type: Object,
302
+ required: false,
303
+ default: void 0
304
+ },
305
+ styles: {
306
+ type: Object,
307
+ required: false,
308
+ default: void 0
309
+ },
310
+ wrapProps: {
311
+ required: false,
312
+ default: void 0
313
+ },
314
+ getContainer: {
315
+ type: [
316
+ String,
317
+ Function,
318
+ Boolean
319
+ ],
320
+ required: false,
321
+ skipCheck: true,
322
+ default: void 0
323
+ },
324
+ closeIcon: {
325
+ type: [
326
+ Object,
327
+ Function,
328
+ String,
329
+ Number,
330
+ null,
331
+ Boolean,
332
+ Array
333
+ ],
334
+ required: false,
335
+ default: void 0
336
+ },
337
+ modalRender: {
338
+ type: Function,
339
+ required: false,
340
+ default: void 0
341
+ },
342
+ forceRender: {
343
+ type: Boolean,
344
+ required: false,
345
+ default: void 0
346
+ },
347
+ focusTriggerAfterClose: {
348
+ type: Boolean,
349
+ required: false,
350
+ default: void 0
351
+ },
352
+ panelRef: {
353
+ required: false,
354
+ default: void 0
355
+ },
356
+ animationVisible: {
357
+ type: Boolean,
358
+ required: true,
359
+ default: void 0
360
+ }
361
+ },
362
+ name: "Panel",
363
+ inheritAttrs: false
364
+ });
365
+ export { Panel_default as default };
@@ -0,0 +1,316 @@
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_Panel = require("./Panel.cjs");
5
+ let vue = require("vue");
6
+ let __v_c_util_dist_utils_transition = require("@v-c/util/dist/utils/transition");
7
+ var Content = /* @__PURE__ */ (0, vue.defineComponent)((props, { slots }) => {
8
+ const dialogRef = (0, vue.shallowRef)();
9
+ const transformOrigin = (0, vue.shallowRef)("");
10
+ function onPrepare() {
11
+ const { mousePosition } = props;
12
+ (0, vue.nextTick)(() => {
13
+ if (dialogRef.value) {
14
+ const elementOffset = require_util.offset(dialogRef.value);
15
+ transformOrigin.value = mousePosition && (mousePosition.x || mousePosition.y) ? `${mousePosition.x - elementOffset.left}px ${mousePosition.y - elementOffset.top}px` : "";
16
+ }
17
+ });
18
+ }
19
+ const animationVisible = (0, vue.shallowRef)(props.visible);
20
+ (0, vue.watch)(() => props.visible, () => {
21
+ if (props.visible) animationVisible.value = true;
22
+ });
23
+ return () => {
24
+ const { prefixCls, className, style, visible, destroyOnHidden, onVisibleChanged, ariaId, title, motionName } = props;
25
+ const contentStyle = {};
26
+ if (transformOrigin.value) contentStyle.transformOrigin = transformOrigin.value;
27
+ return (0, vue.createVNode)(vue.Transition, (0, vue.mergeProps)((0, __v_c_util_dist_utils_transition.getTransitionProps)(motionName), {
28
+ "onBeforeEnter": onPrepare,
29
+ "onAfterEnter": () => onVisibleChanged?.(true),
30
+ "onAfterLeave": () => {
31
+ onVisibleChanged?.(false);
32
+ animationVisible.value = false;
33
+ }
34
+ }), { default: () => [visible || !destroyOnHidden ? (0, vue.withDirectives)((0, vue.createVNode)(require_Panel.default, (0, vue.mergeProps)(props, {
35
+ "animationVisible": animationVisible.value,
36
+ "title": title,
37
+ "ariaId": ariaId,
38
+ "prefixCls": prefixCls,
39
+ "style": {
40
+ ...style,
41
+ ...contentStyle
42
+ },
43
+ "class": [className],
44
+ "holderRef": (el) => {
45
+ dialogRef.value = el;
46
+ }
47
+ }), slots), [[vue.vShow, visible]]) : null] });
48
+ };
49
+ }, {
50
+ props: {
51
+ motionName: {
52
+ type: String,
53
+ required: false,
54
+ default: void 0
55
+ },
56
+ ariaId: {
57
+ type: String,
58
+ required: false,
59
+ default: void 0
60
+ },
61
+ onVisibleChanged: {
62
+ type: Function,
63
+ required: true,
64
+ default: void 0
65
+ },
66
+ prefixCls: {
67
+ type: String,
68
+ required: true,
69
+ default: void 0
70
+ },
71
+ onMouseDown: {
72
+ type: Function,
73
+ required: false,
74
+ default: void 0
75
+ },
76
+ onMouseUp: {
77
+ type: Function,
78
+ required: false,
79
+ default: void 0
80
+ },
81
+ holderRef: {
82
+ type: Function,
83
+ required: false,
84
+ default: void 0
85
+ },
86
+ className: {
87
+ type: String,
88
+ required: false,
89
+ default: void 0
90
+ },
91
+ keyboard: {
92
+ type: Boolean,
93
+ required: false,
94
+ default: void 0
95
+ },
96
+ style: {
97
+ type: Object,
98
+ required: false,
99
+ default: void 0
100
+ },
101
+ rootStyle: {
102
+ type: Object,
103
+ required: false,
104
+ default: void 0
105
+ },
106
+ mask: {
107
+ type: Boolean,
108
+ required: false,
109
+ default: void 0
110
+ },
111
+ children: {
112
+ type: [
113
+ Object,
114
+ Function,
115
+ String,
116
+ Number,
117
+ null,
118
+ Boolean,
119
+ Array
120
+ ],
121
+ required: false,
122
+ default: void 0
123
+ },
124
+ afterClose: {
125
+ type: Function,
126
+ required: false,
127
+ default: void 0
128
+ },
129
+ afterOpenChange: {
130
+ type: Function,
131
+ required: false,
132
+ default: void 0
133
+ },
134
+ onClose: {
135
+ type: Function,
136
+ required: false,
137
+ default: void 0
138
+ },
139
+ closable: {
140
+ type: [Boolean, Object],
141
+ required: false,
142
+ default: void 0
143
+ },
144
+ maskClosable: {
145
+ type: Boolean,
146
+ required: false,
147
+ default: void 0
148
+ },
149
+ visible: {
150
+ type: Boolean,
151
+ required: false,
152
+ default: void 0
153
+ },
154
+ destroyOnHidden: {
155
+ type: Boolean,
156
+ required: false,
157
+ default: void 0
158
+ },
159
+ mousePosition: {
160
+ type: [Object, null],
161
+ required: false,
162
+ default: void 0
163
+ },
164
+ title: {
165
+ type: [
166
+ Object,
167
+ Function,
168
+ String,
169
+ Number,
170
+ null,
171
+ Boolean,
172
+ Array
173
+ ],
174
+ required: false,
175
+ default: void 0
176
+ },
177
+ footer: {
178
+ type: [
179
+ Object,
180
+ Function,
181
+ String,
182
+ Number,
183
+ null,
184
+ Boolean,
185
+ Array
186
+ ],
187
+ required: false,
188
+ default: void 0
189
+ },
190
+ transitionName: {
191
+ type: String,
192
+ required: false,
193
+ default: void 0
194
+ },
195
+ maskTransitionName: {
196
+ type: String,
197
+ required: false,
198
+ default: void 0
199
+ },
200
+ animation: {
201
+ required: false,
202
+ default: void 0
203
+ },
204
+ maskAnimation: {
205
+ required: false,
206
+ default: void 0
207
+ },
208
+ wrapStyle: {
209
+ type: Object,
210
+ required: false,
211
+ default: void 0
212
+ },
213
+ bodyStyle: {
214
+ type: Object,
215
+ required: false,
216
+ default: void 0
217
+ },
218
+ maskStyle: {
219
+ type: Object,
220
+ required: false,
221
+ default: void 0
222
+ },
223
+ wrapClassName: {
224
+ type: String,
225
+ required: false,
226
+ default: void 0
227
+ },
228
+ width: {
229
+ type: [String, Number],
230
+ required: false,
231
+ default: void 0
232
+ },
233
+ height: {
234
+ type: [String, Number],
235
+ required: false,
236
+ default: void 0
237
+ },
238
+ zIndex: {
239
+ type: Number,
240
+ required: false,
241
+ default: void 0
242
+ },
243
+ bodyProps: {
244
+ required: false,
245
+ default: void 0
246
+ },
247
+ maskProps: {
248
+ required: false,
249
+ default: void 0
250
+ },
251
+ rootClassName: {
252
+ type: String,
253
+ required: false,
254
+ default: void 0
255
+ },
256
+ classNames: {
257
+ type: Object,
258
+ required: false,
259
+ default: void 0
260
+ },
261
+ styles: {
262
+ type: Object,
263
+ required: false,
264
+ default: void 0
265
+ },
266
+ wrapProps: {
267
+ required: false,
268
+ default: void 0
269
+ },
270
+ getContainer: {
271
+ type: [
272
+ String,
273
+ Function,
274
+ Boolean
275
+ ],
276
+ required: false,
277
+ skipCheck: true,
278
+ default: void 0
279
+ },
280
+ closeIcon: {
281
+ type: [
282
+ Object,
283
+ Function,
284
+ String,
285
+ Number,
286
+ null,
287
+ Boolean,
288
+ Array
289
+ ],
290
+ required: false,
291
+ default: void 0
292
+ },
293
+ modalRender: {
294
+ type: Function,
295
+ required: false,
296
+ default: void 0
297
+ },
298
+ forceRender: {
299
+ type: Boolean,
300
+ required: false,
301
+ default: void 0
302
+ },
303
+ focusTriggerAfterClose: {
304
+ type: Boolean,
305
+ required: false,
306
+ default: void 0
307
+ },
308
+ panelRef: {
309
+ required: false,
310
+ default: void 0
311
+ }
312
+ },
313
+ name: "Content"
314
+ });
315
+ var Content_default = Content;
316
+ exports.default = Content_default;
@@ -0,0 +1,12 @@
1
+ import { PanelProps } from './Panel';
2
+ export type ContentProps = {
3
+ motionName?: string;
4
+ ariaId: string;
5
+ onVisibleChanged: (visible: boolean) => void;
6
+ } & PanelProps;
7
+ declare const Content: import('vue').DefineSetupFnComponent<ContentProps, {}, {}, {
8
+ motionName?: string;
9
+ ariaId: string;
10
+ onVisibleChanged: (visible: boolean) => void;
11
+ } & PanelProps & {}, import('vue').PublicProps>;
12
+ export default Content;