@destyler/hover-card 0.0.1-beta.16

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,286 @@
1
+ import { H as HoverCardRootContext } from './shared/hover-card.2208f99f.js';
2
+ export { D as DestylerHoverCardArrow, a as DestylerHoverCardArrowProps, b as DestylerHoverCardContent, c as DestylerHoverCardContentProps, d as DestylerHoverCardPortal, e as DestylerHoverCardPortalProps, f as DestylerHoverCardRoot, g as DestylerHoverCardRootProps, h as DestylerHoverCardTrigger, i as DestylerHoverCardTriggerProps } from './shared/hover-card.2208f99f.js';
3
+ import * as vue from 'vue';
4
+ import { PropType, Component } from 'vue';
5
+ import * as _destyler_shared from '@destyler/shared';
6
+ import { ExtractPublicPropTypes } from '@destyler/shared';
7
+ import * as _vue_shared from '@vue/shared';
8
+ import { AsTag } from '@destyler/primitive';
9
+
10
+ declare const destylerHoverCardContentImplProps: {
11
+ readonly as: {
12
+ readonly type: PropType<AsTag | Component>;
13
+ readonly required: false;
14
+ readonly default: "div";
15
+ };
16
+ readonly asChild: {
17
+ readonly type: PropType<boolean>;
18
+ readonly required: false;
19
+ readonly default: false;
20
+ };
21
+ readonly side: {
22
+ readonly type: PropType<"top" | "right" | "bottom" | "left">;
23
+ readonly required: false;
24
+ readonly default: "bottom";
25
+ };
26
+ readonly sideOffset: {
27
+ readonly type: PropType<number>;
28
+ readonly required: false;
29
+ readonly default: 0;
30
+ };
31
+ readonly align: {
32
+ readonly type: PropType<"start" | "center" | "end">;
33
+ readonly required: false;
34
+ readonly default: "center";
35
+ };
36
+ readonly alignOffset: {
37
+ readonly type: PropType<number>;
38
+ readonly required: false;
39
+ readonly default: 0;
40
+ };
41
+ readonly avoidCollisions: {
42
+ readonly type: PropType<boolean>;
43
+ readonly required: false;
44
+ readonly default: true;
45
+ };
46
+ readonly collisionBoundary: {
47
+ readonly type: PropType<Element | (Element | null)[] | null>;
48
+ readonly required: false;
49
+ readonly default: () => never[];
50
+ };
51
+ readonly collisionPadding: {
52
+ readonly type: PropType<number | Partial<Record<"top" | "right" | "bottom" | "left", number>>>;
53
+ readonly required: false;
54
+ readonly default: 0;
55
+ };
56
+ readonly arrowPadding: {
57
+ readonly type: PropType<number>;
58
+ readonly required: false;
59
+ readonly default: 0;
60
+ };
61
+ readonly sticky: {
62
+ readonly type: PropType<"partial" | "always">;
63
+ readonly required: false;
64
+ readonly default: "partial";
65
+ };
66
+ readonly hideWhenDetached: {
67
+ readonly type: PropType<boolean>;
68
+ readonly required: false;
69
+ readonly default: false;
70
+ };
71
+ readonly updatePositionStrategy: {
72
+ readonly type: PropType<"always" | "optimized">;
73
+ readonly required: false;
74
+ readonly default: "optimized";
75
+ };
76
+ readonly onPlaced: {
77
+ readonly type: PropType<() => void>;
78
+ readonly required: false;
79
+ };
80
+ readonly prioritizePosition: {
81
+ readonly type: PropType<boolean>;
82
+ readonly required: false;
83
+ readonly default: false;
84
+ };
85
+ };
86
+ type DestylerHoverCardContentImplProps = ExtractPublicPropTypes<typeof destylerHoverCardContentImplProps>;
87
+ declare const DestylerHoverCardContentImpl: vue.DefineComponent<{
88
+ readonly as: {
89
+ readonly type: PropType<AsTag | Component>;
90
+ readonly required: false;
91
+ readonly default: "div";
92
+ };
93
+ readonly asChild: {
94
+ readonly type: PropType<boolean>;
95
+ readonly required: false;
96
+ readonly default: false;
97
+ };
98
+ readonly side: {
99
+ readonly type: PropType<"top" | "right" | "bottom" | "left">;
100
+ readonly required: false;
101
+ readonly default: "bottom";
102
+ };
103
+ readonly sideOffset: {
104
+ readonly type: PropType<number>;
105
+ readonly required: false;
106
+ readonly default: 0;
107
+ };
108
+ readonly align: {
109
+ readonly type: PropType<"start" | "center" | "end">;
110
+ readonly required: false;
111
+ readonly default: "center";
112
+ };
113
+ readonly alignOffset: {
114
+ readonly type: PropType<number>;
115
+ readonly required: false;
116
+ readonly default: 0;
117
+ };
118
+ readonly avoidCollisions: {
119
+ readonly type: PropType<boolean>;
120
+ readonly required: false;
121
+ readonly default: true;
122
+ };
123
+ readonly collisionBoundary: {
124
+ readonly type: PropType<Element | (Element | null)[] | null>;
125
+ readonly required: false;
126
+ readonly default: () => never[];
127
+ };
128
+ readonly collisionPadding: {
129
+ readonly type: PropType<number | Partial<Record<"top" | "right" | "bottom" | "left", number>>>;
130
+ readonly required: false;
131
+ readonly default: 0;
132
+ };
133
+ readonly arrowPadding: {
134
+ readonly type: PropType<number>;
135
+ readonly required: false;
136
+ readonly default: 0;
137
+ };
138
+ readonly sticky: {
139
+ readonly type: PropType<"partial" | "always">;
140
+ readonly required: false;
141
+ readonly default: "partial";
142
+ };
143
+ readonly hideWhenDetached: {
144
+ readonly type: PropType<boolean>;
145
+ readonly required: false;
146
+ readonly default: false;
147
+ };
148
+ readonly updatePositionStrategy: {
149
+ readonly type: PropType<"always" | "optimized">;
150
+ readonly required: false;
151
+ readonly default: "optimized";
152
+ };
153
+ readonly onPlaced: {
154
+ readonly type: PropType<() => void>;
155
+ readonly required: false;
156
+ };
157
+ readonly prioritizePosition: {
158
+ readonly type: PropType<boolean>;
159
+ readonly required: false;
160
+ readonly default: false;
161
+ };
162
+ }, {
163
+ rootContext: HoverCardRootContext;
164
+ forwarded: _destyler_shared.ComputedRefWithControl<_vue_shared.LooseRequired<{
165
+ readonly asChild: boolean;
166
+ readonly as: AsTag | Component;
167
+ readonly side: "top" | "right" | "bottom" | "left";
168
+ readonly sideOffset: number;
169
+ readonly align: "start" | "center" | "end";
170
+ readonly alignOffset: number;
171
+ readonly avoidCollisions: boolean;
172
+ readonly collisionBoundary: Element | (Element | null)[] | null;
173
+ readonly collisionPadding: number | Partial<Record<"top" | "right" | "bottom" | "left", number>>;
174
+ readonly arrowPadding: number;
175
+ readonly sticky: "partial" | "always";
176
+ readonly hideWhenDetached: boolean;
177
+ readonly updatePositionStrategy: "always" | "optimized";
178
+ readonly prioritizePosition: boolean;
179
+ readonly onPlaced?: (() => void) | undefined;
180
+ readonly onEscapeKeyDown?: ((...args: any[]) => any) | undefined;
181
+ readonly onPointerDownOutside?: ((...args: any[]) => any) | undefined;
182
+ readonly onFocusOutside?: ((...args: any[]) => any) | undefined;
183
+ readonly onInteractOutside?: ((...args: any[]) => any) | undefined;
184
+ readonly onDismiss?: ((...args: any[]) => any) | undefined;
185
+ } & {}>>;
186
+ forwardRef: (ref: Element | vue.ComponentPublicInstance | null) => void;
187
+ containSelection: vue.Ref<boolean>;
188
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("escapeKeyDown" | "pointerDownOutside" | "focusOutside" | "interactOutside" | "dismiss")[], "escapeKeyDown" | "pointerDownOutside" | "focusOutside" | "interactOutside" | "dismiss", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
189
+ readonly as: {
190
+ readonly type: PropType<AsTag | Component>;
191
+ readonly required: false;
192
+ readonly default: "div";
193
+ };
194
+ readonly asChild: {
195
+ readonly type: PropType<boolean>;
196
+ readonly required: false;
197
+ readonly default: false;
198
+ };
199
+ readonly side: {
200
+ readonly type: PropType<"top" | "right" | "bottom" | "left">;
201
+ readonly required: false;
202
+ readonly default: "bottom";
203
+ };
204
+ readonly sideOffset: {
205
+ readonly type: PropType<number>;
206
+ readonly required: false;
207
+ readonly default: 0;
208
+ };
209
+ readonly align: {
210
+ readonly type: PropType<"start" | "center" | "end">;
211
+ readonly required: false;
212
+ readonly default: "center";
213
+ };
214
+ readonly alignOffset: {
215
+ readonly type: PropType<number>;
216
+ readonly required: false;
217
+ readonly default: 0;
218
+ };
219
+ readonly avoidCollisions: {
220
+ readonly type: PropType<boolean>;
221
+ readonly required: false;
222
+ readonly default: true;
223
+ };
224
+ readonly collisionBoundary: {
225
+ readonly type: PropType<Element | (Element | null)[] | null>;
226
+ readonly required: false;
227
+ readonly default: () => never[];
228
+ };
229
+ readonly collisionPadding: {
230
+ readonly type: PropType<number | Partial<Record<"top" | "right" | "bottom" | "left", number>>>;
231
+ readonly required: false;
232
+ readonly default: 0;
233
+ };
234
+ readonly arrowPadding: {
235
+ readonly type: PropType<number>;
236
+ readonly required: false;
237
+ readonly default: 0;
238
+ };
239
+ readonly sticky: {
240
+ readonly type: PropType<"partial" | "always">;
241
+ readonly required: false;
242
+ readonly default: "partial";
243
+ };
244
+ readonly hideWhenDetached: {
245
+ readonly type: PropType<boolean>;
246
+ readonly required: false;
247
+ readonly default: false;
248
+ };
249
+ readonly updatePositionStrategy: {
250
+ readonly type: PropType<"always" | "optimized">;
251
+ readonly required: false;
252
+ readonly default: "optimized";
253
+ };
254
+ readonly onPlaced: {
255
+ readonly type: PropType<() => void>;
256
+ readonly required: false;
257
+ };
258
+ readonly prioritizePosition: {
259
+ readonly type: PropType<boolean>;
260
+ readonly required: false;
261
+ readonly default: false;
262
+ };
263
+ }>> & {
264
+ onEscapeKeyDown?: ((...args: any[]) => any) | undefined;
265
+ onPointerDownOutside?: ((...args: any[]) => any) | undefined;
266
+ onFocusOutside?: ((...args: any[]) => any) | undefined;
267
+ onInteractOutside?: ((...args: any[]) => any) | undefined;
268
+ onDismiss?: ((...args: any[]) => any) | undefined;
269
+ }, {
270
+ readonly asChild: boolean;
271
+ readonly as: AsTag | Component;
272
+ readonly side: "top" | "right" | "bottom" | "left";
273
+ readonly sideOffset: number;
274
+ readonly align: "start" | "center" | "end";
275
+ readonly alignOffset: number;
276
+ readonly avoidCollisions: boolean;
277
+ readonly collisionBoundary: Element | (Element | null)[] | null;
278
+ readonly collisionPadding: number | Partial<Record<"top" | "right" | "bottom" | "left", number>>;
279
+ readonly arrowPadding: number;
280
+ readonly sticky: "partial" | "always";
281
+ readonly hideWhenDetached: boolean;
282
+ readonly updatePositionStrategy: "always" | "optimized";
283
+ readonly prioritizePosition: boolean;
284
+ }, {}>;
285
+
286
+ export { DestylerHoverCardContentImpl, type DestylerHoverCardContentImplProps };
@@ -0,0 +1,420 @@
1
+ import { defineComponent, h, toRefs, ref, watchEffect, onMounted, onUnmounted, withModifiers, mergeProps, nextTick } from 'vue';
2
+ import { useForwardExpose, useVModel, useForwardProps, useForwardPropsEmits } from '@destyler/composition';
3
+ import { DestylerPopperArrow, DestylerPopperRoot, DestylerPopperContent, DestylerPopperAnchor } from '@destyler/popper';
4
+ import { DestylerPresence } from '@destyler/presence';
5
+ import { DestylerDismissableLayer } from '@destyler/dismissable-layer';
6
+ import { createContext } from '@destyler/shared';
7
+ import { DestylerTeleport } from '@destyler/teleport';
8
+ import { DestylerPrimitive } from '@destyler/primitive';
9
+
10
+ const destylerHoverCardArrowProps = {
11
+ asChild: {
12
+ type: Boolean,
13
+ required: false,
14
+ default: false
15
+ },
16
+ width: {
17
+ type: Number,
18
+ required: false,
19
+ default: 10
20
+ },
21
+ height: {
22
+ type: Number,
23
+ required: false,
24
+ default: 5
25
+ },
26
+ as: {
27
+ type: [String, Object],
28
+ required: false,
29
+ default: "svg"
30
+ }
31
+ };
32
+ const DestylerHoverCardArrow = defineComponent({
33
+ name: "DestylerHoverCardArrow",
34
+ props: destylerHoverCardArrowProps,
35
+ setup() {
36
+ useForwardExpose();
37
+ },
38
+ render() {
39
+ return h(DestylerPopperArrow, this.$props, {
40
+ default: () => this.$slots.default?.()
41
+ });
42
+ }
43
+ });
44
+
45
+ function excludeTouch(eventHandler) {
46
+ return (event) => event.pointerType === "touch" ? void 0 : eventHandler();
47
+ }
48
+ function getTabbableNodes(container) {
49
+ const nodes = [];
50
+ const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
51
+ acceptNode: (node) => {
52
+ return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
53
+ }
54
+ });
55
+ while (walker.nextNode())
56
+ nodes.push(walker.currentNode);
57
+ return nodes;
58
+ }
59
+
60
+ const destylerHoverCardRootProps = {
61
+ open: {
62
+ type: Boolean,
63
+ required: void 0
64
+ },
65
+ defaultOpen: {
66
+ type: Boolean,
67
+ required: false,
68
+ default: false
69
+ },
70
+ openDelay: {
71
+ type: Number,
72
+ required: false,
73
+ default: 700
74
+ },
75
+ closeDelay: {
76
+ type: Number,
77
+ required: false,
78
+ default: 300
79
+ }
80
+ };
81
+ const [injectHoverCardRootContext, provideHoverCardRootContext] = createContext("DestylerHoverCardRoot");
82
+ const DestylerHoverCardRoot = defineComponent({
83
+ name: "DestylerHoverCardRoot",
84
+ props: destylerHoverCardRootProps,
85
+ emits: ["update:open"],
86
+ setup(props, { emit }) {
87
+ const { openDelay, closeDelay } = toRefs(props);
88
+ useForwardExpose();
89
+ const open = useVModel(props, "open", emit, {
90
+ defaultValue: props.defaultOpen,
91
+ passive: props.open === void 0
92
+ });
93
+ const openTimerRef = ref(0);
94
+ const closeTimerRef = ref(0);
95
+ const hasSelectionRef = ref(false);
96
+ const isPointerDownOnContentRef = ref(false);
97
+ function handleOpen() {
98
+ clearTimeout(closeTimerRef.value);
99
+ openTimerRef.value = window.setTimeout(() => open.value = true, openDelay.value);
100
+ }
101
+ function handleClose() {
102
+ clearTimeout(openTimerRef.value);
103
+ if (!hasSelectionRef.value && !isPointerDownOnContentRef.value)
104
+ closeTimerRef.value = window.setTimeout(() => open.value = false, closeDelay.value);
105
+ }
106
+ function handleDismiss() {
107
+ open.value = false;
108
+ }
109
+ provideHoverCardRootContext({
110
+ open,
111
+ onOpenChange(value) {
112
+ open.value = value;
113
+ },
114
+ onOpen: handleOpen,
115
+ onClose: handleClose,
116
+ onDismiss: handleDismiss,
117
+ hasSelectionRef,
118
+ isPointerDownOnContentRef
119
+ });
120
+ },
121
+ render() {
122
+ return h(DestylerPopperRoot, {}, {
123
+ default: () => this.$slots.default?.()
124
+ });
125
+ }
126
+ });
127
+
128
+ const destylerHoverCardContentImplProps = {
129
+ as: {
130
+ type: [String, Object],
131
+ required: false,
132
+ default: "div"
133
+ },
134
+ asChild: {
135
+ type: Boolean,
136
+ required: false,
137
+ default: false
138
+ },
139
+ side: {
140
+ type: String,
141
+ required: false,
142
+ default: "bottom"
143
+ },
144
+ sideOffset: {
145
+ type: Number,
146
+ required: false,
147
+ default: 0
148
+ },
149
+ align: {
150
+ type: String,
151
+ required: false,
152
+ default: "center"
153
+ },
154
+ alignOffset: {
155
+ type: Number,
156
+ required: false,
157
+ default: 0
158
+ },
159
+ avoidCollisions: {
160
+ type: Boolean,
161
+ required: false,
162
+ default: true
163
+ },
164
+ collisionBoundary: {
165
+ type: [Object, Array, null],
166
+ required: false,
167
+ default: () => []
168
+ },
169
+ collisionPadding: {
170
+ type: [Number, Object],
171
+ required: false,
172
+ default: 0
173
+ },
174
+ arrowPadding: {
175
+ type: Number,
176
+ required: false,
177
+ default: 0
178
+ },
179
+ sticky: {
180
+ type: String,
181
+ required: false,
182
+ default: "partial"
183
+ },
184
+ hideWhenDetached: {
185
+ type: Boolean,
186
+ required: false,
187
+ default: false
188
+ },
189
+ updatePositionStrategy: {
190
+ type: String,
191
+ required: false,
192
+ default: "optimized"
193
+ },
194
+ onPlaced: {
195
+ type: Function,
196
+ required: false
197
+ },
198
+ prioritizePosition: {
199
+ type: Boolean,
200
+ required: false,
201
+ default: false
202
+ }
203
+ };
204
+ const DestylerHoverCardContentImpl = defineComponent({
205
+ name: "DestylerHoverCardContentImpl",
206
+ props: destylerHoverCardContentImplProps,
207
+ emits: ["escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "dismiss"],
208
+ setup(props) {
209
+ const forwarded = useForwardProps(props);
210
+ const { forwardRef, currentElement: contentElement } = useForwardExpose();
211
+ const rootContext = injectHoverCardRootContext();
212
+ const containSelection = ref(false);
213
+ let originalBodyUserSelect;
214
+ watchEffect((cleanupFn) => {
215
+ if (containSelection.value) {
216
+ const body = document.body;
217
+ originalBodyUserSelect = body.style.userSelect || body.style.webkitUserSelect;
218
+ body.style.userSelect = "none";
219
+ body.style.webkitUserSelect = "none";
220
+ cleanupFn(() => {
221
+ body.style.userSelect = originalBodyUserSelect;
222
+ body.style.webkitUserSelect = originalBodyUserSelect;
223
+ });
224
+ }
225
+ });
226
+ function handlePointerUp() {
227
+ containSelection.value = false;
228
+ rootContext.isPointerDownOnContentRef.value = false;
229
+ nextTick(() => {
230
+ const hasSelection = document.getSelection()?.toString() !== "";
231
+ if (hasSelection)
232
+ rootContext.hasSelectionRef.value = true;
233
+ });
234
+ }
235
+ onMounted(() => {
236
+ if (contentElement.value) {
237
+ document.addEventListener("pointerup", handlePointerUp);
238
+ const tabbables = getTabbableNodes(contentElement.value);
239
+ tabbables.forEach((tabbable) => tabbable.setAttribute("tabindex", "_1"));
240
+ }
241
+ });
242
+ onUnmounted(() => {
243
+ document.removeEventListener("pointerup", handlePointerUp);
244
+ rootContext.hasSelectionRef.value = false;
245
+ rootContext.isPointerDownOnContentRef.value = false;
246
+ });
247
+ return {
248
+ rootContext,
249
+ forwarded,
250
+ forwardRef,
251
+ containSelection
252
+ };
253
+ },
254
+ render() {
255
+ return h(DestylerDismissableLayer, {
256
+ asChild: true,
257
+ disableOutsidePointerEvents: false,
258
+ onEscapeKeyDown: (event) => {
259
+ this.$emit("escapeKeyDown", event);
260
+ },
261
+ onPointerDownOutside: (event) => {
262
+ this.$emit("pointerDownOutside", event);
263
+ },
264
+ onFocusOutside: withModifiers((event) => {
265
+ this.$emit("focusOutside", event);
266
+ }, ["prevent"]),
267
+ onDismiss: () => {
268
+ this.rootContext.onDismiss();
269
+ }
270
+ }, {
271
+ default: () => {
272
+ return h(DestylerPopperContent, mergeProps(this.forwarded, this.$attrs, {
273
+ ref: (el) => this.forwardRef(el),
274
+ data_state: this.rootContext.open.value ? "open" : "closed",
275
+ style: {
276
+ "userSelect": this.containSelection ? "text" : void 0,
277
+ "WebkitUserSelect": this.containSelection ? "text" : void 0,
278
+ "--destyler_hover_card_content_transform_origin": "var(--destyler_popper_transform_origin)",
279
+ "--destyler_hover_card_content_available_width": "var(--destyler_popper_available_width)",
280
+ "--destyler_hover_card_content_available_height": "var(--destyler_popper_available_height)",
281
+ "--destyler_hover_card_trigger_width": "var(--destyler_popper_anchor_width)",
282
+ "--destyler_hover_card_trigger_height": "var(--destyler_popper_anchor_height)"
283
+ },
284
+ onPointerdown: (event) => {
285
+ if (event.currentTarget.contains(event.target))
286
+ this.containSelection = true;
287
+ this.rootContext.hasSelectionRef.value = false;
288
+ this.rootContext.isPointerDownOnContentRef.value = true;
289
+ }
290
+ }), {
291
+ default: () => this.$slots.default?.()
292
+ });
293
+ }
294
+ });
295
+ }
296
+ });
297
+
298
+ const destylerHoverCardContentProps = {
299
+ ...destylerHoverCardContentImplProps,
300
+ forceMount: {
301
+ type: Boolean,
302
+ required: false
303
+ }
304
+ };
305
+ const DestylerHoverCardContent = defineComponent({
306
+ name: "DestylerHoverCardContent",
307
+ props: destylerHoverCardContentProps,
308
+ emits: ["escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "dismiss"],
309
+ setup(props, { emit }) {
310
+ const forwarded = useForwardPropsEmits(props, emit);
311
+ const { forwardRef } = useForwardExpose();
312
+ const rootContext = injectHoverCardRootContext();
313
+ return {
314
+ rootContext,
315
+ forwarded,
316
+ forwardRef
317
+ };
318
+ },
319
+ render() {
320
+ return h(DestylerPresence, {
321
+ present: this.forceMount || this.rootContext.open.value
322
+ }, {
323
+ default: () => {
324
+ return h(DestylerHoverCardContentImpl, mergeProps(this.forwarded, {
325
+ ref: (el) => this.forwardRef(el),
326
+ onPointerenter: (event) => {
327
+ excludeTouch(this.rootContext.onOpen)(event);
328
+ },
329
+ onPointerleave: (event) => {
330
+ excludeTouch(this.rootContext.onClose)(event);
331
+ }
332
+ }), {
333
+ default: () => this.$slots.default?.()
334
+ });
335
+ }
336
+ });
337
+ }
338
+ });
339
+
340
+ const destylerHoverCardPortalProps = {
341
+ to: {
342
+ type: [String, Object],
343
+ required: false,
344
+ default: "body"
345
+ },
346
+ disabled: {
347
+ type: Boolean,
348
+ required: false,
349
+ default: false
350
+ },
351
+ forceMount: {
352
+ type: Boolean,
353
+ required: false,
354
+ default: false
355
+ }
356
+ };
357
+ const DestylerHoverCardPortal = defineComponent({
358
+ name: "DestylerHoverCardPortal",
359
+ props: destylerHoverCardPortalProps,
360
+ render() {
361
+ return h(DestylerTeleport, this.$props, {
362
+ default: () => this.$slots.default?.()
363
+ });
364
+ }
365
+ });
366
+
367
+ const destylerHoverCardTriggerProps = {
368
+ as: {
369
+ type: [String, Object],
370
+ required: false,
371
+ default: "a"
372
+ },
373
+ asChild: {
374
+ type: Boolean,
375
+ required: false,
376
+ default: false
377
+ }
378
+ };
379
+ const DestylerHoverCardTrigger = defineComponent({
380
+ name: "DestylerHoverCardTrigger",
381
+ props: destylerHoverCardTriggerProps,
382
+ setup() {
383
+ const { forwardRef } = useForwardExpose();
384
+ const rootContext = injectHoverCardRootContext();
385
+ return {
386
+ rootContext,
387
+ forwardRef
388
+ };
389
+ },
390
+ render() {
391
+ return h(DestylerPopperAnchor, {
392
+ asChild: true
393
+ }, {
394
+ default: () => {
395
+ return h(DestylerPrimitive, {
396
+ "ref": (el) => this.forwardRef(el),
397
+ "as": this.$props.as,
398
+ "asChild": this.$props.asChild,
399
+ "data-state": this.rootContext.open.value ? "open" : "closed",
400
+ "onPointerenter": (event) => {
401
+ excludeTouch(this.rootContext.onOpen)(event);
402
+ },
403
+ "onPointerleave": (event) => {
404
+ excludeTouch(this.rootContext.onClose)(event);
405
+ },
406
+ "onFocus": () => {
407
+ this.rootContext.onOpen();
408
+ },
409
+ "onBlur": () => {
410
+ this.rootContext.onClose();
411
+ }
412
+ }, {
413
+ default: () => this.$slots.default?.()
414
+ });
415
+ }
416
+ });
417
+ }
418
+ });
419
+
420
+ export { DestylerHoverCardArrow, DestylerHoverCardContent, DestylerHoverCardContentImpl, DestylerHoverCardPortal, DestylerHoverCardRoot, DestylerHoverCardTrigger };