@destyler/hover-card 0.0.3 → 0.0.4
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/README.md +7 -0
- package/dist/component.cjs +124 -154
- package/dist/component.d.cts +247 -98
- package/dist/component.d.mts +247 -98
- package/dist/component.d.ts +247 -98
- package/dist/component.mjs +114 -153
- package/dist/index.cjs +12 -6
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +3 -2
- package/dist/resolver.cjs +10 -6
- package/dist/resolver.d.cts +3 -3
- package/dist/resolver.d.mts +3 -3
- package/dist/resolver.d.ts +3 -3
- package/dist/resolver.mjs +9 -5
- package/dist/shared/hover-card.c926f135.d.cts +843 -0
- package/dist/shared/hover-card.c926f135.d.mts +843 -0
- package/dist/shared/hover-card.c926f135.d.ts +843 -0
- package/package.json +18 -20
- package/dist/shared/hover-card.32cad1f6.d.cts +0 -546
- package/dist/shared/hover-card.32cad1f6.d.mts +0 -546
- package/dist/shared/hover-card.32cad1f6.d.ts +0 -546
package/README.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# @destyler/hover-card
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@destyler/hover-card)
|
|
4
|
+
|
|
5
|
+
> for sighted users to preview content available behind a link.
|
|
6
|
+
|
|
7
|
+
[GitHub](https://github.com/destyler/destyler) | [Documentation](https://destyler-dev.zeabur.app/)
|
package/dist/component.cjs
CHANGED
|
@@ -1,44 +1,53 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const vue = require('vue');
|
|
4
|
+
const primitive = require('@destyler/primitive');
|
|
4
5
|
const composition = require('@destyler/composition');
|
|
5
6
|
const popper = require('@destyler/popper');
|
|
6
7
|
const presence = require('@destyler/presence');
|
|
7
8
|
const dismissableLayer = require('@destyler/dismissable-layer');
|
|
9
|
+
const component = require('@destyler/dismissable-layer/component');
|
|
8
10
|
const shared = require('@destyler/shared');
|
|
9
11
|
const teleport = require('@destyler/teleport');
|
|
10
|
-
const primitive = require('@destyler/primitive');
|
|
11
12
|
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const hoverCardArrowProps = {
|
|
14
|
+
...primitive.primitiveProps,
|
|
15
|
+
/**
|
|
16
|
+
* @default svg
|
|
17
|
+
*/
|
|
18
|
+
as: {
|
|
19
|
+
...primitive.primitiveProps.as,
|
|
20
|
+
default: "svg"
|
|
17
21
|
},
|
|
22
|
+
/**
|
|
23
|
+
* The width of the arrow in pixels.
|
|
24
|
+
*
|
|
25
|
+
* @default 10
|
|
26
|
+
*/
|
|
18
27
|
width: {
|
|
19
28
|
type: Number,
|
|
20
29
|
required: false,
|
|
21
30
|
default: 10
|
|
22
31
|
},
|
|
32
|
+
/**
|
|
33
|
+
* The height of the arrow in pixels.
|
|
34
|
+
*
|
|
35
|
+
* @default 5
|
|
36
|
+
*/
|
|
23
37
|
height: {
|
|
24
38
|
type: Number,
|
|
25
39
|
required: false,
|
|
26
40
|
default: 5
|
|
27
|
-
},
|
|
28
|
-
as: {
|
|
29
|
-
type: [String, Object],
|
|
30
|
-
required: false,
|
|
31
|
-
default: "svg"
|
|
32
41
|
}
|
|
33
42
|
};
|
|
34
|
-
const
|
|
43
|
+
const HoverCardArrow = vue.defineComponent({
|
|
35
44
|
name: "DestylerHoverCardArrow",
|
|
36
|
-
props:
|
|
45
|
+
props: hoverCardArrowProps,
|
|
37
46
|
setup() {
|
|
38
47
|
composition.useForwardExpose();
|
|
39
48
|
},
|
|
40
49
|
render() {
|
|
41
|
-
return vue.h(popper.
|
|
50
|
+
return vue.h(popper.PopperArrow, this.$props, () => this.$slots.default?.());
|
|
42
51
|
}
|
|
43
52
|
});
|
|
44
53
|
|
|
@@ -57,32 +66,63 @@ function getTabbableNodes(container) {
|
|
|
57
66
|
return nodes;
|
|
58
67
|
}
|
|
59
68
|
|
|
60
|
-
const
|
|
69
|
+
const hoverCardRootProps = {
|
|
70
|
+
/**
|
|
71
|
+
* The controlled open state of the hover card.
|
|
72
|
+
* Can be binded as `v-model:open`.
|
|
73
|
+
*
|
|
74
|
+
* @default undefined
|
|
75
|
+
*/
|
|
61
76
|
open: {
|
|
62
77
|
type: Boolean,
|
|
63
|
-
required:
|
|
78
|
+
required: false,
|
|
79
|
+
default: void 0
|
|
64
80
|
},
|
|
81
|
+
/**
|
|
82
|
+
* The open state of the hover card when it is initially rendered.
|
|
83
|
+
* Use when you do not need to control its open state.
|
|
84
|
+
*
|
|
85
|
+
* @default false
|
|
86
|
+
*/
|
|
65
87
|
defaultOpen: {
|
|
66
88
|
type: Boolean,
|
|
67
89
|
required: false,
|
|
68
90
|
default: false
|
|
69
91
|
},
|
|
92
|
+
/**
|
|
93
|
+
* The duration from when the mouse enters the
|
|
94
|
+
* trigger until the hover card opens.
|
|
95
|
+
*
|
|
96
|
+
* @default 700
|
|
97
|
+
*/
|
|
70
98
|
openDelay: {
|
|
71
99
|
type: Number,
|
|
72
100
|
required: false,
|
|
73
101
|
default: 700
|
|
74
102
|
},
|
|
103
|
+
/**
|
|
104
|
+
* The duration from when the mouse leaves the trigger
|
|
105
|
+
* or content until the hover card closes.
|
|
106
|
+
*
|
|
107
|
+
* @default 300
|
|
108
|
+
*/
|
|
75
109
|
closeDelay: {
|
|
76
110
|
type: Number,
|
|
77
111
|
required: false,
|
|
78
112
|
default: 300
|
|
79
113
|
}
|
|
80
114
|
};
|
|
115
|
+
const hoverCardRootEmits = {
|
|
116
|
+
/**
|
|
117
|
+
* Event handler called when the open state of the hover card changes.
|
|
118
|
+
*/
|
|
119
|
+
"update:open": (_value) => true
|
|
120
|
+
};
|
|
81
121
|
const [injectHoverCardRootContext, provideHoverCardRootContext] = shared.createContext("DestylerHoverCardRoot");
|
|
82
|
-
const
|
|
122
|
+
const HoverCardRoot = vue.defineComponent({
|
|
83
123
|
name: "DestylerHoverCardRoot",
|
|
84
|
-
props:
|
|
85
|
-
emits:
|
|
124
|
+
props: hoverCardRootProps,
|
|
125
|
+
emits: hoverCardRootEmits,
|
|
86
126
|
setup(props, { emit }) {
|
|
87
127
|
const { openDelay, closeDelay } = vue.toRefs(props);
|
|
88
128
|
composition.useForwardExpose();
|
|
@@ -119,90 +159,20 @@ const DestylerHoverCardRoot = vue.defineComponent({
|
|
|
119
159
|
});
|
|
120
160
|
},
|
|
121
161
|
render() {
|
|
122
|
-
return vue.h(popper.
|
|
162
|
+
return vue.h(popper.PopperRoot, {}, () => this.$slots.default?.());
|
|
123
163
|
}
|
|
124
164
|
});
|
|
125
165
|
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
},
|
|
132
|
-
asChild: {
|
|
133
|
-
type: Boolean,
|
|
134
|
-
required: false,
|
|
135
|
-
default: false
|
|
136
|
-
},
|
|
137
|
-
side: {
|
|
138
|
-
type: String,
|
|
139
|
-
required: false,
|
|
140
|
-
default: "bottom"
|
|
141
|
-
},
|
|
142
|
-
sideOffset: {
|
|
143
|
-
type: Number,
|
|
144
|
-
required: false,
|
|
145
|
-
default: 0
|
|
146
|
-
},
|
|
147
|
-
align: {
|
|
148
|
-
type: String,
|
|
149
|
-
required: false,
|
|
150
|
-
default: "center"
|
|
151
|
-
},
|
|
152
|
-
alignOffset: {
|
|
153
|
-
type: Number,
|
|
154
|
-
required: false,
|
|
155
|
-
default: 0
|
|
156
|
-
},
|
|
157
|
-
avoidCollisions: {
|
|
158
|
-
type: Boolean,
|
|
159
|
-
required: false,
|
|
160
|
-
default: true
|
|
161
|
-
},
|
|
162
|
-
collisionBoundary: {
|
|
163
|
-
type: [Object, Array, null],
|
|
164
|
-
required: false,
|
|
165
|
-
default: () => []
|
|
166
|
-
},
|
|
167
|
-
collisionPadding: {
|
|
168
|
-
type: [Number, Object],
|
|
169
|
-
required: false,
|
|
170
|
-
default: 0
|
|
171
|
-
},
|
|
172
|
-
arrowPadding: {
|
|
173
|
-
type: Number,
|
|
174
|
-
required: false,
|
|
175
|
-
default: 0
|
|
176
|
-
},
|
|
177
|
-
sticky: {
|
|
178
|
-
type: String,
|
|
179
|
-
required: false,
|
|
180
|
-
default: "partial"
|
|
181
|
-
},
|
|
182
|
-
hideWhenDetached: {
|
|
183
|
-
type: Boolean,
|
|
184
|
-
required: false,
|
|
185
|
-
default: false
|
|
186
|
-
},
|
|
187
|
-
updatePositionStrategy: {
|
|
188
|
-
type: String,
|
|
189
|
-
required: false,
|
|
190
|
-
default: "optimized"
|
|
191
|
-
},
|
|
192
|
-
onPlaced: {
|
|
193
|
-
type: Function,
|
|
194
|
-
required: false
|
|
195
|
-
},
|
|
196
|
-
prioritizePosition: {
|
|
197
|
-
type: Boolean,
|
|
198
|
-
required: false,
|
|
199
|
-
default: false
|
|
200
|
-
}
|
|
166
|
+
const hoverCardContentImplProps = {
|
|
167
|
+
...popper.popperContentProps
|
|
168
|
+
};
|
|
169
|
+
const hoverCardContentImplEmits = {
|
|
170
|
+
...component.dismissableLayerEmits
|
|
201
171
|
};
|
|
202
|
-
const
|
|
172
|
+
const HoverCardContentImpl = vue.defineComponent({
|
|
203
173
|
name: "DestylerHoverCardContentImpl",
|
|
204
|
-
props:
|
|
205
|
-
emits:
|
|
174
|
+
props: hoverCardContentImplProps,
|
|
175
|
+
emits: hoverCardContentImplEmits,
|
|
206
176
|
setup(props) {
|
|
207
177
|
const forwarded = composition.useForwardProps(props);
|
|
208
178
|
const { forwardRef, currentElement: contentElement } = composition.useForwardExpose();
|
|
@@ -234,7 +204,7 @@ const DestylerHoverCardContentImpl = vue.defineComponent({
|
|
|
234
204
|
if (contentElement.value) {
|
|
235
205
|
document.addEventListener("pointerup", handlePointerUp);
|
|
236
206
|
const tabbables = getTabbableNodes(contentElement.value);
|
|
237
|
-
tabbables.forEach((tabbable) => tabbable.setAttribute("tabindex", "
|
|
207
|
+
tabbables.forEach((tabbable) => tabbable.setAttribute("tabindex", "-1"));
|
|
238
208
|
}
|
|
239
209
|
});
|
|
240
210
|
vue.onUnmounted(() => {
|
|
@@ -250,7 +220,7 @@ const DestylerHoverCardContentImpl = vue.defineComponent({
|
|
|
250
220
|
};
|
|
251
221
|
},
|
|
252
222
|
render() {
|
|
253
|
-
return vue.h(dismissableLayer.
|
|
223
|
+
return vue.h(dismissableLayer.DismissableLayer, {
|
|
254
224
|
asChild: true,
|
|
255
225
|
disableOutsidePointerEvents: false,
|
|
256
226
|
onEscapeKeyDown: (event) => {
|
|
@@ -265,19 +235,19 @@ const DestylerHoverCardContentImpl = vue.defineComponent({
|
|
|
265
235
|
onDismiss: () => {
|
|
266
236
|
this.rootContext.onDismiss();
|
|
267
237
|
}
|
|
268
|
-
}, () => vue.h(popper.
|
|
269
|
-
ref: (el) => this.forwardRef(el),
|
|
270
|
-
|
|
271
|
-
style: {
|
|
238
|
+
}, () => vue.h(popper.PopperContent, vue.mergeProps(this.forwarded, this.$attrs, {
|
|
239
|
+
"ref": (el) => this.forwardRef(el),
|
|
240
|
+
"data-state": this.rootContext.open.value ? "open" : "closed",
|
|
241
|
+
"style": {
|
|
272
242
|
"userSelect": this.containSelection ? "text" : void 0,
|
|
273
243
|
"WebkitUserSelect": this.containSelection ? "text" : void 0,
|
|
274
|
-
"--
|
|
275
|
-
"--
|
|
276
|
-
"--
|
|
277
|
-
"--
|
|
278
|
-
"--
|
|
244
|
+
"--destyler-hover-card-content-transform-origin": "var(--destyler-popper-transform-origin)",
|
|
245
|
+
"--destyler-hover-card-content-available-width": "var(--destyler-popper-available-width)",
|
|
246
|
+
"--destyler-hover-card-content-available-height": "var(--destyler-popper-available-height)",
|
|
247
|
+
"--destyler-hover-card-trigger-width": "var(--destyler-popper-anchor-width)",
|
|
248
|
+
"--destyler-hover-card-trigger-height": "var(--destyler-popper-anchor-height)"
|
|
279
249
|
},
|
|
280
|
-
onPointerdown: (event) => {
|
|
250
|
+
"onPointerdown": (event) => {
|
|
281
251
|
if (event.currentTarget.contains(event.target))
|
|
282
252
|
this.containSelection = true;
|
|
283
253
|
this.rootContext.hasSelectionRef.value = false;
|
|
@@ -287,17 +257,24 @@ const DestylerHoverCardContentImpl = vue.defineComponent({
|
|
|
287
257
|
}
|
|
288
258
|
});
|
|
289
259
|
|
|
290
|
-
const
|
|
291
|
-
...
|
|
260
|
+
const hoverCardContentProps = {
|
|
261
|
+
...hoverCardContentImplProps,
|
|
262
|
+
/**
|
|
263
|
+
* Used to force mounting when more control is needed.
|
|
264
|
+
* Useful when controlling animation with Vue animation libraries.
|
|
265
|
+
*/
|
|
292
266
|
forceMount: {
|
|
293
267
|
type: Boolean,
|
|
294
268
|
required: false
|
|
295
269
|
}
|
|
296
270
|
};
|
|
297
|
-
const
|
|
271
|
+
const hoverCardContentEmits = {
|
|
272
|
+
...hoverCardContentImplEmits
|
|
273
|
+
};
|
|
274
|
+
const HoverCardContent = vue.defineComponent({
|
|
298
275
|
name: "DestylerHoverCardContent",
|
|
299
|
-
props:
|
|
300
|
-
emits:
|
|
276
|
+
props: hoverCardContentProps,
|
|
277
|
+
emits: hoverCardContentEmits,
|
|
301
278
|
setup(props, { emit }) {
|
|
302
279
|
const forwarded = composition.useForwardPropsEmits(props, emit);
|
|
303
280
|
const { forwardRef } = composition.useForwardExpose();
|
|
@@ -309,9 +286,9 @@ const DestylerHoverCardContent = vue.defineComponent({
|
|
|
309
286
|
};
|
|
310
287
|
},
|
|
311
288
|
render() {
|
|
312
|
-
return vue.h(presence.
|
|
289
|
+
return vue.h(presence.Presence, {
|
|
313
290
|
present: this.forceMount || this.rootContext.open.value
|
|
314
|
-
}, () => vue.h(
|
|
291
|
+
}, () => vue.h(HoverCardContentImpl, vue.mergeProps(this.forwarded, {
|
|
315
292
|
ref: (el) => this.forwardRef(el),
|
|
316
293
|
onPointerenter: (event) => {
|
|
317
294
|
excludeTouch(this.rootContext.onOpen)(event);
|
|
@@ -323,46 +300,30 @@ const DestylerHoverCardContent = vue.defineComponent({
|
|
|
323
300
|
}
|
|
324
301
|
});
|
|
325
302
|
|
|
326
|
-
const
|
|
327
|
-
|
|
328
|
-
type: [String, Object],
|
|
329
|
-
required: false,
|
|
330
|
-
default: "body"
|
|
331
|
-
},
|
|
332
|
-
disabled: {
|
|
333
|
-
type: Boolean,
|
|
334
|
-
required: false,
|
|
335
|
-
default: false
|
|
336
|
-
},
|
|
337
|
-
forceMount: {
|
|
338
|
-
type: Boolean,
|
|
339
|
-
required: false,
|
|
340
|
-
default: false
|
|
341
|
-
}
|
|
303
|
+
const hoverCardPortalProps = {
|
|
304
|
+
...teleport.teleportPrimitiveProps
|
|
342
305
|
};
|
|
343
|
-
const
|
|
306
|
+
const HoverCardPortal = vue.defineComponent({
|
|
344
307
|
name: "DestylerHoverCardPortal",
|
|
345
|
-
props:
|
|
308
|
+
props: hoverCardPortalProps,
|
|
346
309
|
render() {
|
|
347
|
-
return vue.h(teleport.
|
|
310
|
+
return vue.h(teleport.TeleportPrimitive, this.$props, () => this.$slots.default?.());
|
|
348
311
|
}
|
|
349
312
|
});
|
|
350
313
|
|
|
351
|
-
const
|
|
314
|
+
const hoverCardTriggerProps = {
|
|
315
|
+
...primitive.primitiveProps,
|
|
316
|
+
/**
|
|
317
|
+
* @default a
|
|
318
|
+
*/
|
|
352
319
|
as: {
|
|
353
|
-
|
|
354
|
-
required: false,
|
|
320
|
+
...primitive.primitiveProps.as,
|
|
355
321
|
default: "a"
|
|
356
|
-
},
|
|
357
|
-
asChild: {
|
|
358
|
-
type: Boolean,
|
|
359
|
-
required: false,
|
|
360
|
-
default: false
|
|
361
322
|
}
|
|
362
323
|
};
|
|
363
|
-
const
|
|
324
|
+
const HoverCardTrigger = vue.defineComponent({
|
|
364
325
|
name: "DestylerHoverCardTrigger",
|
|
365
|
-
props:
|
|
326
|
+
props: hoverCardTriggerProps,
|
|
366
327
|
setup() {
|
|
367
328
|
const { forwardRef } = composition.useForwardExpose();
|
|
368
329
|
const rootContext = injectHoverCardRootContext();
|
|
@@ -372,9 +333,9 @@ const DestylerHoverCardTrigger = vue.defineComponent({
|
|
|
372
333
|
};
|
|
373
334
|
},
|
|
374
335
|
render() {
|
|
375
|
-
return vue.h(popper.
|
|
336
|
+
return vue.h(popper.PopperAnchor, {
|
|
376
337
|
asChild: true
|
|
377
|
-
}, () => vue.h(primitive.
|
|
338
|
+
}, () => vue.h(primitive.Primitive, {
|
|
378
339
|
"ref": (el) => this.forwardRef(el),
|
|
379
340
|
"as": this.$props.as,
|
|
380
341
|
"asChild": this.$props.asChild,
|
|
@@ -395,9 +356,18 @@ const DestylerHoverCardTrigger = vue.defineComponent({
|
|
|
395
356
|
}
|
|
396
357
|
});
|
|
397
358
|
|
|
398
|
-
exports.
|
|
399
|
-
exports.
|
|
400
|
-
exports.
|
|
401
|
-
exports.
|
|
402
|
-
exports.
|
|
403
|
-
exports.
|
|
359
|
+
exports.HoverCardArrow = HoverCardArrow;
|
|
360
|
+
exports.HoverCardContent = HoverCardContent;
|
|
361
|
+
exports.HoverCardContentImpl = HoverCardContentImpl;
|
|
362
|
+
exports.HoverCardPortal = HoverCardPortal;
|
|
363
|
+
exports.HoverCardRoot = HoverCardRoot;
|
|
364
|
+
exports.HoverCardTrigger = HoverCardTrigger;
|
|
365
|
+
exports.hoverCardArrowProps = hoverCardArrowProps;
|
|
366
|
+
exports.hoverCardContentEmits = hoverCardContentEmits;
|
|
367
|
+
exports.hoverCardContentImplEmits = hoverCardContentImplEmits;
|
|
368
|
+
exports.hoverCardContentImplProps = hoverCardContentImplProps;
|
|
369
|
+
exports.hoverCardContentProps = hoverCardContentProps;
|
|
370
|
+
exports.hoverCardPortalProps = hoverCardPortalProps;
|
|
371
|
+
exports.hoverCardRootEmits = hoverCardRootEmits;
|
|
372
|
+
exports.hoverCardRootProps = hoverCardRootProps;
|
|
373
|
+
exports.hoverCardTriggerProps = hoverCardTriggerProps;
|