@destyler/hover-card 0.0.3 → 0.0.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ # @destyler/hover-card
2
+
3
+ [![NPM version](https://img.shields.io/npm/v/@destyler/hover-card?color=a1b858&label=)](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/)
@@ -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 destylerHoverCardArrowProps = {
13
- asChild: {
14
- type: Boolean,
15
- required: false,
16
- default: false
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 DestylerHoverCardArrow = vue.defineComponent({
43
+ const HoverCardArrow = vue.defineComponent({
35
44
  name: "DestylerHoverCardArrow",
36
- props: destylerHoverCardArrowProps,
45
+ props: hoverCardArrowProps,
37
46
  setup() {
38
47
  composition.useForwardExpose();
39
48
  },
40
49
  render() {
41
- return vue.h(popper.DestylerPopperArrow, this.$props, () => this.$slots.default?.());
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 destylerHoverCardRootProps = {
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: void 0
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 DestylerHoverCardRoot = vue.defineComponent({
122
+ const HoverCardRoot = vue.defineComponent({
83
123
  name: "DestylerHoverCardRoot",
84
- props: destylerHoverCardRootProps,
85
- emits: ["update:open"],
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.DestylerPopperRoot, {}, () => this.$slots.default?.());
162
+ return vue.h(popper.PopperRoot, {}, () => this.$slots.default?.());
123
163
  }
124
164
  });
125
165
 
126
- const destylerHoverCardContentImplProps = {
127
- as: {
128
- type: [String, Object],
129
- required: false,
130
- default: "div"
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 DestylerHoverCardContentImpl = vue.defineComponent({
172
+ const HoverCardContentImpl = vue.defineComponent({
203
173
  name: "DestylerHoverCardContentImpl",
204
- props: destylerHoverCardContentImplProps,
205
- emits: ["escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "dismiss"],
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", "_1"));
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.DestylerDismissableLayer, {
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.DestylerPopperContent, vue.mergeProps(this.forwarded, this.$attrs, {
269
- ref: (el) => this.forwardRef(el),
270
- data_state: this.rootContext.open.value ? "open" : "closed",
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
- "--destyler_hover_card_content_transform_origin": "var(--destyler_popper_transform_origin)",
275
- "--destyler_hover_card_content_available_width": "var(--destyler_popper_available_width)",
276
- "--destyler_hover_card_content_available_height": "var(--destyler_popper_available_height)",
277
- "--destyler_hover_card_trigger_width": "var(--destyler_popper_anchor_width)",
278
- "--destyler_hover_card_trigger_height": "var(--destyler_popper_anchor_height)"
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 destylerHoverCardContentProps = {
291
- ...destylerHoverCardContentImplProps,
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 DestylerHoverCardContent = vue.defineComponent({
271
+ const hoverCardContentEmits = {
272
+ ...hoverCardContentImplEmits
273
+ };
274
+ const HoverCardContent = vue.defineComponent({
298
275
  name: "DestylerHoverCardContent",
299
- props: destylerHoverCardContentProps,
300
- emits: ["escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "dismiss"],
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.DestylerPresence, {
289
+ return vue.h(presence.Presence, {
313
290
  present: this.forceMount || this.rootContext.open.value
314
- }, () => vue.h(DestylerHoverCardContentImpl, vue.mergeProps(this.forwarded, {
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 destylerHoverCardPortalProps = {
327
- to: {
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 DestylerHoverCardPortal = vue.defineComponent({
306
+ const HoverCardPortal = vue.defineComponent({
344
307
  name: "DestylerHoverCardPortal",
345
- props: destylerHoverCardPortalProps,
308
+ props: hoverCardPortalProps,
346
309
  render() {
347
- return vue.h(teleport.DestylerTeleport, this.$props, () => this.$slots.default?.());
310
+ return vue.h(teleport.TeleportPrimitive, this.$props, () => this.$slots.default?.());
348
311
  }
349
312
  });
350
313
 
351
- const destylerHoverCardTriggerProps = {
314
+ const hoverCardTriggerProps = {
315
+ ...primitive.primitiveProps,
316
+ /**
317
+ * @default a
318
+ */
352
319
  as: {
353
- type: [String, Object],
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 DestylerHoverCardTrigger = vue.defineComponent({
324
+ const HoverCardTrigger = vue.defineComponent({
364
325
  name: "DestylerHoverCardTrigger",
365
- props: destylerHoverCardTriggerProps,
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.DestylerPopperAnchor, {
336
+ return vue.h(popper.PopperAnchor, {
376
337
  asChild: true
377
- }, () => vue.h(primitive.DestylerPrimitive, {
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.DestylerHoverCardArrow = DestylerHoverCardArrow;
399
- exports.DestylerHoverCardContent = DestylerHoverCardContent;
400
- exports.DestylerHoverCardContentImpl = DestylerHoverCardContentImpl;
401
- exports.DestylerHoverCardPortal = DestylerHoverCardPortal;
402
- exports.DestylerHoverCardRoot = DestylerHoverCardRoot;
403
- exports.DestylerHoverCardTrigger = DestylerHoverCardTrigger;
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;