@destyler/popover 0.0.5 → 0.0.7-beta.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/dist/index.cjs +438 -24
- package/dist/index.d.cts +152 -5
- package/dist/index.d.mts +152 -5
- package/dist/index.d.ts +152 -5
- package/dist/index.mjs +437 -12
- package/package.json +12 -21
- package/README.md +0 -7
- package/dist/component.cjs +0 -56
- package/dist/component.d.cts +0 -1349
- package/dist/component.d.mts +0 -1349
- package/dist/component.d.ts +0 -1349
- package/dist/component.mjs +0 -35
- package/dist/resolver.cjs +0 -25
- package/dist/resolver.d.cts +0 -6
- package/dist/resolver.d.mts +0 -6
- package/dist/resolver.d.ts +0 -6
- package/dist/resolver.mjs +0 -22
- package/dist/shared/popover.005a231a.mjs +0 -399
- package/dist/shared/popover.2b6be8bf.d.cts +0 -885
- package/dist/shared/popover.2b6be8bf.d.mts +0 -885
- package/dist/shared/popover.2b6be8bf.d.ts +0 -885
- package/dist/shared/popover.49550c9f.cjs +0 -420
|
@@ -1,420 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const vue = require('vue');
|
|
4
|
-
const popper = require('@destyler/popper');
|
|
5
|
-
const primitive = require('@destyler/primitive');
|
|
6
|
-
const shared = require('@destyler/shared');
|
|
7
|
-
const composition = require('@destyler/composition');
|
|
8
|
-
const presence = require('@destyler/presence');
|
|
9
|
-
const dismissableLayer = require('@destyler/dismissable-layer');
|
|
10
|
-
const component = require('@destyler/dismissable-layer/component');
|
|
11
|
-
const focusScope = require('@destyler/focus-scope');
|
|
12
|
-
const directives = require('@destyler/directives');
|
|
13
|
-
const teleport = require('@destyler/teleport');
|
|
14
|
-
|
|
15
|
-
const popoverArrowProps = {
|
|
16
|
-
...popper.popperArrowProps
|
|
17
|
-
};
|
|
18
|
-
const PopoverArrow = vue.defineComponent({
|
|
19
|
-
name: "DestylerPopoverArrow",
|
|
20
|
-
props: popoverArrowProps,
|
|
21
|
-
render() {
|
|
22
|
-
return vue.h(popper.PopperArrow, vue.mergeProps(this.$props, {}), () => this.$slots.default?.());
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const [injectPopoverRootContext, providePopoverRootContext] = shared.createContext("DestylerPopoverRoot");
|
|
27
|
-
const popoverRootProps = {
|
|
28
|
-
/**
|
|
29
|
-
* The open state of the popover when it is initially rendered. Use when you do not need to control its open state.
|
|
30
|
-
*
|
|
31
|
-
* @default false
|
|
32
|
-
*/
|
|
33
|
-
defaultOpen: {
|
|
34
|
-
type: Boolean,
|
|
35
|
-
required: false,
|
|
36
|
-
default: false
|
|
37
|
-
},
|
|
38
|
-
/**
|
|
39
|
-
* The controlled open state of the popover.
|
|
40
|
-
*
|
|
41
|
-
* @default undefined
|
|
42
|
-
*/
|
|
43
|
-
open: {
|
|
44
|
-
type: Boolean,
|
|
45
|
-
required: false,
|
|
46
|
-
default: void 0
|
|
47
|
-
},
|
|
48
|
-
/**
|
|
49
|
-
* The modality of the popover. When set to true, interaction with outside elements will be disabled and only popover content will be visible to screen readers.
|
|
50
|
-
*
|
|
51
|
-
* @default false
|
|
52
|
-
*/
|
|
53
|
-
modal: {
|
|
54
|
-
type: Boolean,
|
|
55
|
-
required: false,
|
|
56
|
-
default: false
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const popoverRootEmits = {
|
|
60
|
-
/**
|
|
61
|
-
* Event handler called when the open state of the popover changes.
|
|
62
|
-
*/
|
|
63
|
-
"update:open": (_value) => true
|
|
64
|
-
};
|
|
65
|
-
const PopoverRoot = vue.defineComponent({
|
|
66
|
-
name: "DestylerPopoverRoot",
|
|
67
|
-
props: popoverRootProps,
|
|
68
|
-
emits: popoverRootEmits,
|
|
69
|
-
setup(props, { emit }) {
|
|
70
|
-
const modalRef = vue.toRef(props.modal);
|
|
71
|
-
const openRef = composition.useVModel(props, "open", emit, {
|
|
72
|
-
defaultValue: props.defaultOpen,
|
|
73
|
-
passive: props.open === void 0
|
|
74
|
-
});
|
|
75
|
-
const triggerElement = vue.ref();
|
|
76
|
-
const hasCustomAnchor = vue.ref(false);
|
|
77
|
-
function handleUpdateOpen(value) {
|
|
78
|
-
openRef.value = value;
|
|
79
|
-
}
|
|
80
|
-
providePopoverRootContext({
|
|
81
|
-
contentId: composition.useId(),
|
|
82
|
-
modal: modalRef,
|
|
83
|
-
open: openRef,
|
|
84
|
-
onOpenChange: (value) => {
|
|
85
|
-
handleUpdateOpen(value);
|
|
86
|
-
},
|
|
87
|
-
onOpenToggle: () => {
|
|
88
|
-
handleUpdateOpen(!openRef.value);
|
|
89
|
-
},
|
|
90
|
-
triggerElement,
|
|
91
|
-
hasCustomAnchor
|
|
92
|
-
});
|
|
93
|
-
return {
|
|
94
|
-
openRef,
|
|
95
|
-
modalRef,
|
|
96
|
-
triggerElement,
|
|
97
|
-
hasCustomAnchor
|
|
98
|
-
};
|
|
99
|
-
},
|
|
100
|
-
render() {
|
|
101
|
-
return vue.h(popper.PopperRoot, null, () => this.$slots.default?.());
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
const popoverCloseProps = {
|
|
106
|
-
...primitive.primitiveProps,
|
|
107
|
-
/**
|
|
108
|
-
* @default button
|
|
109
|
-
*/
|
|
110
|
-
as: {
|
|
111
|
-
...primitive.primitiveProps.as,
|
|
112
|
-
default: "button"
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
const PopoverClose = vue.defineComponent({
|
|
116
|
-
name: "DestylerPopoverClose",
|
|
117
|
-
props: popoverCloseProps,
|
|
118
|
-
setup() {
|
|
119
|
-
const rootContext = injectPopoverRootContext();
|
|
120
|
-
return {
|
|
121
|
-
rootContext
|
|
122
|
-
};
|
|
123
|
-
},
|
|
124
|
-
render() {
|
|
125
|
-
return vue.h(primitive.Primitive, {
|
|
126
|
-
as: this.$props.as,
|
|
127
|
-
asChild: this.$props.asChild,
|
|
128
|
-
type: this.$props.as === "button" ? "button" : void 0,
|
|
129
|
-
onClick: () => {
|
|
130
|
-
this.rootContext.onOpenChange(false);
|
|
131
|
-
}
|
|
132
|
-
}, () => this.$slots.default?.());
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
const popoverContentImplProps = {
|
|
137
|
-
...popper.popperContentProps,
|
|
138
|
-
...dismissableLayer.dismissableLayerProps,
|
|
139
|
-
/**
|
|
140
|
-
* Used to force mounting when more control is needed. Useful when
|
|
141
|
-
* controlling animation with Vue animation libraries.
|
|
142
|
-
*/
|
|
143
|
-
trapFocus: {
|
|
144
|
-
...focusScope.focusScopeProps.trapped
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
const popoverContentImplEmits = {
|
|
148
|
-
...component.dismissableLayerEmits,
|
|
149
|
-
/**
|
|
150
|
-
* Event handler called when auto-focusing on open.
|
|
151
|
-
* Can be prevented.
|
|
152
|
-
*/
|
|
153
|
-
openAutoFocus: (_event) => true,
|
|
154
|
-
/**
|
|
155
|
-
* Event handler called when auto-focusing on close.
|
|
156
|
-
* Can be prevented.
|
|
157
|
-
*/
|
|
158
|
-
closeAutoFocus: (_event) => true
|
|
159
|
-
};
|
|
160
|
-
const PopoverContentImpl = vue.defineComponent({
|
|
161
|
-
name: "DestylerPopoverContentImpl",
|
|
162
|
-
props: popoverContentImplProps,
|
|
163
|
-
emits: popoverContentImplEmits,
|
|
164
|
-
setup(props) {
|
|
165
|
-
const forwarded = composition.useForwardProps(props);
|
|
166
|
-
const rootContext = injectPopoverRootContext();
|
|
167
|
-
composition.useFocusGuards();
|
|
168
|
-
return {
|
|
169
|
-
rootContext,
|
|
170
|
-
forwarded
|
|
171
|
-
};
|
|
172
|
-
},
|
|
173
|
-
render() {
|
|
174
|
-
return vue.h(focusScope.FocusScope, {
|
|
175
|
-
asChild: true,
|
|
176
|
-
loop: true,
|
|
177
|
-
trapped: this.$props.trapFocus,
|
|
178
|
-
onMountAutoFocus: (event) => {
|
|
179
|
-
this.$emit("openAutoFocus", event);
|
|
180
|
-
},
|
|
181
|
-
onUnmountAutoFocus: (event) => {
|
|
182
|
-
this.$emit("closeAutoFocus", event);
|
|
183
|
-
}
|
|
184
|
-
}, () => vue.h(dismissableLayer.DismissableLayer, {
|
|
185
|
-
asChild: true,
|
|
186
|
-
disableOutsidePointerEvents: this.$props.disableOutsidePointerEvents,
|
|
187
|
-
onPointerDownOutside: (event) => {
|
|
188
|
-
this.$emit("pointerDownOutside", event);
|
|
189
|
-
},
|
|
190
|
-
onInteractOutside: (event) => {
|
|
191
|
-
this.$emit("interactOutside", event);
|
|
192
|
-
},
|
|
193
|
-
onEscapeKeyDown: (event) => {
|
|
194
|
-
this.$emit("escapeKeyDown", event);
|
|
195
|
-
},
|
|
196
|
-
onFocusOutside: (event) => {
|
|
197
|
-
this.$emit("focusOutside", event);
|
|
198
|
-
},
|
|
199
|
-
onDismiss: () => {
|
|
200
|
-
this.rootContext.onOpenChange(false);
|
|
201
|
-
}
|
|
202
|
-
}, () => vue.withDirectives(vue.h(popper.PopperContent, vue.mergeProps(this.forwarded, {
|
|
203
|
-
"data-state": this.rootContext.open.value ? "open" : "closed",
|
|
204
|
-
"role": "dialog",
|
|
205
|
-
"style": {
|
|
206
|
-
"--destyler-popover-content-transform-origin": "var(--destyler-popper-transform-origin)",
|
|
207
|
-
"--destyler-popover-content-available-width": "var(--destyler-popper-available-width)",
|
|
208
|
-
"--destyler-popover-content-available-height": "var(--destyler-popper-available-height)",
|
|
209
|
-
"--destyler-popover-trigger-width": "var(--destyler-popper-anchor-width)",
|
|
210
|
-
"--destyler-popover-trigger-height": "var(--destyler-popper-anchor-height)"
|
|
211
|
-
}
|
|
212
|
-
}), () => this.$slots.default?.()), [
|
|
213
|
-
[directives.BindOnceDirective, { id: this.rootContext.contentId }]
|
|
214
|
-
])));
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
const PopoverContentModal = vue.defineComponent({
|
|
219
|
-
name: "DestylerPopoverContentModal",
|
|
220
|
-
props: popoverContentImplProps,
|
|
221
|
-
emits: popoverContentImplEmits,
|
|
222
|
-
setup(props, { emit }) {
|
|
223
|
-
const rootContext = injectPopoverRootContext();
|
|
224
|
-
const isRightClickOutsideRef = vue.ref(false);
|
|
225
|
-
const forwarded = composition.useForwardPropsEmits(props, emit);
|
|
226
|
-
const { forwardRef, currentElement } = composition.useForwardExpose();
|
|
227
|
-
composition.useHideOthers(currentElement);
|
|
228
|
-
return {
|
|
229
|
-
rootContext,
|
|
230
|
-
forwarded,
|
|
231
|
-
isRightClickOutsideRef,
|
|
232
|
-
forwardRef
|
|
233
|
-
};
|
|
234
|
-
},
|
|
235
|
-
render() {
|
|
236
|
-
return vue.h(PopoverContentImpl, {
|
|
237
|
-
ref: (el) => this.forwardRef(el),
|
|
238
|
-
...vue.mergeProps(this.forwarded),
|
|
239
|
-
trapFocus: this.rootContext.open.value,
|
|
240
|
-
disableOutsidePointerEvents: true,
|
|
241
|
-
onCloseAutoFocusPrevent: (event) => {
|
|
242
|
-
this.$emit("closeAutoFocus", event);
|
|
243
|
-
if (!this.isRightClickOutsideRef)
|
|
244
|
-
this.rootContext.triggerElement.value?.focus();
|
|
245
|
-
},
|
|
246
|
-
onPointerDownOutside: (event) => {
|
|
247
|
-
this.$emit("pointerDownOutside", event);
|
|
248
|
-
const originalEvent = event.detail.originalEvent;
|
|
249
|
-
const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
|
|
250
|
-
const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
|
|
251
|
-
this.isRightClickOutsideRef = isRightClick;
|
|
252
|
-
}
|
|
253
|
-
}, () => this.$slots.default?.());
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
const PopoverContentNonModal = vue.defineComponent({
|
|
258
|
-
name: "DestylerPopoverContentNonModal",
|
|
259
|
-
props: popoverContentImplProps,
|
|
260
|
-
emits: popoverContentImplEmits,
|
|
261
|
-
setup(props, { emit }) {
|
|
262
|
-
const rootContext = injectPopoverRootContext();
|
|
263
|
-
const hasInteractedOutsideRef = vue.ref(false);
|
|
264
|
-
const hasPointerDownOutsideRef = vue.ref(false);
|
|
265
|
-
const forwarded = composition.useForwardPropsEmits(props, emit);
|
|
266
|
-
return {
|
|
267
|
-
forwarded,
|
|
268
|
-
rootContext,
|
|
269
|
-
hasInteractedOutsideRef,
|
|
270
|
-
hasPointerDownOutsideRef
|
|
271
|
-
};
|
|
272
|
-
},
|
|
273
|
-
render() {
|
|
274
|
-
return vue.h(PopoverContentImpl, {
|
|
275
|
-
...this.forwarded,
|
|
276
|
-
trapFocus: false,
|
|
277
|
-
disableOutsidePointerEvents: false,
|
|
278
|
-
onCloseAutoFocus: (event) => {
|
|
279
|
-
this.$emit("closeAutoFocus", event);
|
|
280
|
-
if (!event.defaultPrevented) {
|
|
281
|
-
if (!this.hasInteractedOutsideRef)
|
|
282
|
-
this.rootContext.triggerElement.value?.focus();
|
|
283
|
-
event.preventDefault();
|
|
284
|
-
}
|
|
285
|
-
this.hasInteractedOutsideRef = false;
|
|
286
|
-
this.hasPointerDownOutsideRef = false;
|
|
287
|
-
},
|
|
288
|
-
onInteractOutside: async (event) => {
|
|
289
|
-
this.$emit("interactOutside", event);
|
|
290
|
-
if (!event.defaultPrevented) {
|
|
291
|
-
this.hasInteractedOutsideRef = true;
|
|
292
|
-
if (event.detail.originalEvent.type === "pointerdown")
|
|
293
|
-
this.hasPointerDownOutsideRef = true;
|
|
294
|
-
}
|
|
295
|
-
const target = event.target;
|
|
296
|
-
const targetIsTrigger = this.rootContext.triggerElement.value?.contains(target);
|
|
297
|
-
if (targetIsTrigger)
|
|
298
|
-
event.preventDefault();
|
|
299
|
-
if (event.detail.originalEvent.type === "focusin" && this.hasPointerDownOutsideRef)
|
|
300
|
-
event.preventDefault();
|
|
301
|
-
}
|
|
302
|
-
}, () => this.$slots.default?.());
|
|
303
|
-
}
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
const popoverContentProps = {
|
|
307
|
-
...popoverContentImplProps,
|
|
308
|
-
/**
|
|
309
|
-
* Used to force mounting when more control is needed. Useful when
|
|
310
|
-
* controlling animation with Vue animation libraries.
|
|
311
|
-
*
|
|
312
|
-
* @default false
|
|
313
|
-
*/
|
|
314
|
-
forceMount: {
|
|
315
|
-
type: Boolean,
|
|
316
|
-
required: false,
|
|
317
|
-
default: false
|
|
318
|
-
}
|
|
319
|
-
};
|
|
320
|
-
const popoverContentEmits = {
|
|
321
|
-
...popoverContentImplEmits
|
|
322
|
-
};
|
|
323
|
-
const PopoverContent = vue.defineComponent({
|
|
324
|
-
name: "DestylerPopoverContent",
|
|
325
|
-
props: popoverContentProps,
|
|
326
|
-
emits: popoverContentEmits,
|
|
327
|
-
setup(props, { emit }) {
|
|
328
|
-
const rootContext = injectPopoverRootContext();
|
|
329
|
-
const forwarded = composition.useForwardPropsEmits(props, emit);
|
|
330
|
-
return {
|
|
331
|
-
rootContext,
|
|
332
|
-
forwarded
|
|
333
|
-
};
|
|
334
|
-
},
|
|
335
|
-
render() {
|
|
336
|
-
const useVShow = this.rootContext.modal.value;
|
|
337
|
-
return vue.h(presence.Presence, {
|
|
338
|
-
present: this.forceMount || this.rootContext.open.value
|
|
339
|
-
}, () => useVShow ? vue.h(PopoverContentModal, {
|
|
340
|
-
...this.forwarded
|
|
341
|
-
}, () => this.$slots.default?.()) : vue.h(PopoverContentNonModal, {
|
|
342
|
-
...this.forwarded
|
|
343
|
-
}, () => this.$slots.default?.()));
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
const popoverPortalProps = {
|
|
348
|
-
...teleport.teleportPrimitiveProps
|
|
349
|
-
};
|
|
350
|
-
const PopoverPortal = vue.defineComponent({
|
|
351
|
-
name: "DestylerPopoverPortal",
|
|
352
|
-
props: popoverPortalProps,
|
|
353
|
-
render() {
|
|
354
|
-
return vue.h(teleport.TeleportPrimitive, vue.mergeProps(this.$props), () => this.$slots.default?.());
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
|
|
358
|
-
const popoverTriggerProps = {
|
|
359
|
-
...primitive.primitiveProps,
|
|
360
|
-
/**
|
|
361
|
-
* @default button
|
|
362
|
-
*/
|
|
363
|
-
as: {
|
|
364
|
-
...primitive.primitiveProps.as,
|
|
365
|
-
default: "button"
|
|
366
|
-
}
|
|
367
|
-
};
|
|
368
|
-
const PopoverTrigger = vue.defineComponent({
|
|
369
|
-
name: "DestylerPopoverTrigger",
|
|
370
|
-
props: popoverTriggerProps,
|
|
371
|
-
setup() {
|
|
372
|
-
const rootContext = injectPopoverRootContext();
|
|
373
|
-
const { forwardRef, currentElement: triggerElement } = composition.useForwardExpose();
|
|
374
|
-
vue.onMounted(() => {
|
|
375
|
-
rootContext.triggerElement.value = triggerElement.value;
|
|
376
|
-
});
|
|
377
|
-
return {
|
|
378
|
-
rootContext,
|
|
379
|
-
forwardRef
|
|
380
|
-
};
|
|
381
|
-
},
|
|
382
|
-
render() {
|
|
383
|
-
return vue.h(this.rootContext.hasCustomAnchor.value ? primitive.Primitive : popper.PopperAnchor, {
|
|
384
|
-
asChild: true
|
|
385
|
-
}, () => vue.h(primitive.Primitive, {
|
|
386
|
-
"ref": (el) => this.forwardRef(el),
|
|
387
|
-
"type": this.$props.as === "button" ? "button" : void 0,
|
|
388
|
-
"as": this.$props.as,
|
|
389
|
-
"aria-haspopup": "dialog",
|
|
390
|
-
"asChild": this.$props.asChild,
|
|
391
|
-
"aria-expanded": this.rootContext.open.value,
|
|
392
|
-
"aria-controls": this.rootContext.contentId,
|
|
393
|
-
"data-state": this.rootContext.open.value ? "open" : "closed",
|
|
394
|
-
"onClick": () => {
|
|
395
|
-
this.rootContext.onOpenToggle();
|
|
396
|
-
}
|
|
397
|
-
}, () => this.$slots.default?.()));
|
|
398
|
-
}
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
exports.PopoverArrow = PopoverArrow;
|
|
402
|
-
exports.PopoverClose = PopoverClose;
|
|
403
|
-
exports.PopoverContent = PopoverContent;
|
|
404
|
-
exports.PopoverContentImpl = PopoverContentImpl;
|
|
405
|
-
exports.PopoverContentModal = PopoverContentModal;
|
|
406
|
-
exports.PopoverContentNonModal = PopoverContentNonModal;
|
|
407
|
-
exports.PopoverPortal = PopoverPortal;
|
|
408
|
-
exports.PopoverRoot = PopoverRoot;
|
|
409
|
-
exports.PopoverTrigger = PopoverTrigger;
|
|
410
|
-
exports.injectPopoverRootContext = injectPopoverRootContext;
|
|
411
|
-
exports.popoverArrowProps = popoverArrowProps;
|
|
412
|
-
exports.popoverCloseProps = popoverCloseProps;
|
|
413
|
-
exports.popoverContentEmits = popoverContentEmits;
|
|
414
|
-
exports.popoverContentImplEmits = popoverContentImplEmits;
|
|
415
|
-
exports.popoverContentImplProps = popoverContentImplProps;
|
|
416
|
-
exports.popoverContentProps = popoverContentProps;
|
|
417
|
-
exports.popoverPortalProps = popoverPortalProps;
|
|
418
|
-
exports.popoverRootEmits = popoverRootEmits;
|
|
419
|
-
exports.popoverRootProps = popoverRootProps;
|
|
420
|
-
exports.popoverTriggerProps = popoverTriggerProps;
|