@destyler/popover 0.0.2 → 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.
@@ -7,64 +7,65 @@ const shared = require('@destyler/shared');
7
7
  const composition = require('@destyler/composition');
8
8
  const presence = require('@destyler/presence');
9
9
  const dismissableLayer = require('@destyler/dismissable-layer');
10
+ const component = require('@destyler/dismissable-layer/component');
10
11
  const focusScope = require('@destyler/focus-scope');
11
12
  const directives = require('@destyler/directives');
12
13
  const teleport = require('@destyler/teleport');
13
14
 
14
- const destylerPopoverArrowProps = {
15
- asChild: {
16
- type: Boolean,
17
- required: false,
18
- default: false
19
- },
20
- width: {
21
- type: Number,
22
- required: false,
23
- default: 5
24
- },
25
- height: {
26
- type: Number,
27
- required: false,
28
- default: 10
29
- },
30
- as: {
31
- type: [String, Object],
32
- required: false,
33
- default: "svg"
34
- }
15
+ const popoverArrowProps = {
16
+ ...popper.popperArrowProps
35
17
  };
36
- const DestylerPopoverArrow = vue.defineComponent({
18
+ const PopoverArrow = vue.defineComponent({
37
19
  name: "DestylerPopoverArrow",
38
- props: destylerPopoverArrowProps,
20
+ props: popoverArrowProps,
39
21
  render() {
40
- return vue.h(popper.DestylerPopperArrow, vue.mergeProps(this.$props, {}), {
41
- default: () => this.$slots.default?.()
42
- });
22
+ return vue.h(popper.PopperArrow, vue.mergeProps(this.$props, {}), () => this.$slots.default?.());
43
23
  }
44
24
  });
45
25
 
46
26
  const [injectPopoverRootContext, providePopoverRootContext] = shared.createContext("DestylerPopoverRoot");
47
- const destylerPopoverRootProps = {
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
+ */
48
33
  defaultOpen: {
49
34
  type: Boolean,
50
35
  required: false,
51
36
  default: false
52
37
  },
38
+ /**
39
+ * The controlled open state of the popover.
40
+ *
41
+ * @default undefined
42
+ */
53
43
  open: {
54
44
  type: Boolean,
55
45
  required: false,
56
46
  default: void 0
57
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
+ */
58
53
  modal: {
59
54
  type: Boolean,
60
55
  required: false,
61
56
  default: false
62
57
  }
63
58
  };
64
- const DestylerPopoverRoot = vue.defineComponent({
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({
65
66
  name: "DestylerPopoverRoot",
66
- props: destylerPopoverRootProps,
67
- emits: ["update:open"],
67
+ props: popoverRootProps,
68
+ emits: popoverRootEmits,
68
69
  setup(props, { emit }) {
69
70
  const modalRef = vue.toRef(props.modal);
70
71
  const openRef = composition.useVModel(props, "open", emit, {
@@ -97,27 +98,23 @@ const DestylerPopoverRoot = vue.defineComponent({
97
98
  };
98
99
  },
99
100
  render() {
100
- return vue.h(popper.DestylerPopperRoot, null, {
101
- default: () => this.$slots.default?.()
102
- });
101
+ return vue.h(popper.PopperRoot, null, () => this.$slots.default?.());
103
102
  }
104
103
  });
105
104
 
106
- const destylerPopoverCloseProps = {
107
- asChild: {
108
- type: Boolean,
109
- required: false,
110
- default: false
111
- },
105
+ const popoverCloseProps = {
106
+ ...primitive.primitiveProps,
107
+ /**
108
+ * @default button
109
+ */
112
110
  as: {
113
- type: [String, Object],
114
- required: false,
111
+ ...primitive.primitiveProps.as,
115
112
  default: "button"
116
113
  }
117
114
  };
118
- const DestylerPopoverClose = vue.defineComponent({
115
+ const PopoverClose = vue.defineComponent({
119
116
  name: "DestylerPopoverClose",
120
- props: destylerPopoverCloseProps,
117
+ props: popoverCloseProps,
121
118
  setup() {
122
119
  const rootContext = injectPopoverRootContext();
123
120
  return {
@@ -125,110 +122,45 @@ const DestylerPopoverClose = vue.defineComponent({
125
122
  };
126
123
  },
127
124
  render() {
128
- return vue.h(primitive.DestylerPrimitive, {
125
+ return vue.h(primitive.Primitive, {
129
126
  as: this.$props.as,
130
127
  asChild: this.$props.asChild,
131
128
  type: this.$props.as === "button" ? "button" : void 0,
132
129
  onClick: () => {
133
130
  this.rootContext.onOpenChange(false);
134
131
  }
135
- }, {
136
- default: () => this.$slots.default?.()
137
- });
132
+ }, () => this.$slots.default?.());
138
133
  }
139
134
  });
140
135
 
141
- const destylerPopoverContentImplProps = {
142
- side: {
143
- type: String,
144
- required: false,
145
- default: "bottom"
146
- },
147
- sideOffset: {
148
- type: Number,
149
- required: false,
150
- default: 0
151
- },
152
- align: {
153
- type: String,
154
- required: false,
155
- default: "center"
156
- },
157
- alignOffset: {
158
- type: Number,
159
- required: false,
160
- default: 0
161
- },
162
- avoidCollisions: {
163
- type: Boolean,
164
- required: false,
165
- default: true
166
- },
167
- collisionBoundary: {
168
- type: [Object, Array, null],
169
- required: false,
170
- default: () => []
171
- },
172
- collisionPadding: {
173
- type: [Number, Object],
174
- required: false,
175
- default: 0
176
- },
177
- arrowPadding: {
178
- type: Number,
179
- required: false,
180
- default: 0
181
- },
182
- sticky: {
183
- type: String,
184
- required: false,
185
- default: "partial"
186
- },
187
- hideWhenDetached: {
188
- type: Boolean,
189
- required: false,
190
- default: false
191
- },
192
- updatePositionStrategy: {
193
- type: String,
194
- required: false,
195
- default: "optimized"
196
- },
197
- onPlaced: {
198
- type: Function,
199
- required: false
200
- },
201
- prioritizePosition: {
202
- type: Boolean,
203
- required: false,
204
- default: false
205
- },
206
- as: {
207
- type: [String, Object],
208
- required: false,
209
- default: "div"
210
- },
211
- asChild: {
212
- type: Boolean,
213
- required: false,
214
- default: false
215
- },
216
- disableOutsidePointerEvents: {
217
- type: Boolean,
218
- required: false,
219
- default: false
220
- },
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
+ */
221
143
  trapFocus: {
222
- type: Boolean,
223
- required: false,
224
- default: false
144
+ ...focusScope.focusScopeProps.trapped
225
145
  }
226
146
  };
227
- const destylerPopoverContentImplEmits = ["escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "dismiss", "openAutoFocus", "closeAutoFocus"];
228
- const DestylerPopoverContentImpl = vue.defineComponent({
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({
229
161
  name: "DestylerPopoverContentImpl",
230
- props: destylerPopoverContentImplProps,
231
- emits: destylerPopoverContentImplEmits,
162
+ props: popoverContentImplProps,
163
+ emits: popoverContentImplEmits,
232
164
  setup(props) {
233
165
  const forwarded = composition.useForwardProps(props);
234
166
  const rootContext = injectPopoverRootContext();
@@ -239,7 +171,7 @@ const DestylerPopoverContentImpl = vue.defineComponent({
239
171
  };
240
172
  },
241
173
  render() {
242
- return vue.h(focusScope.DestylerFocusScope, {
174
+ return vue.h(focusScope.FocusScope, {
243
175
  asChild: true,
244
176
  loop: true,
245
177
  trapped: this.$props.trapFocus,
@@ -249,7 +181,7 @@ const DestylerPopoverContentImpl = vue.defineComponent({
249
181
  onUnmountAutoFocus: (event) => {
250
182
  this.$emit("closeAutoFocus", event);
251
183
  }
252
- }, vue.h(dismissableLayer.DestylerDismissableLayer, {
184
+ }, () => vue.h(dismissableLayer.DismissableLayer, {
253
185
  asChild: true,
254
186
  disableOutsidePointerEvents: this.$props.disableOutsidePointerEvents,
255
187
  onPointerDownOutside: (event) => {
@@ -267,28 +199,26 @@ const DestylerPopoverContentImpl = vue.defineComponent({
267
199
  onDismiss: () => {
268
200
  this.rootContext.onOpenChange(false);
269
201
  }
270
- }, vue.withDirectives(vue.h(popper.DestylerPopperContent, vue.mergeProps(this.forwarded, {
202
+ }, () => vue.withDirectives(vue.h(popper.PopperContent, vue.mergeProps(this.forwarded, {
271
203
  "data-state": this.rootContext.open.value ? "open" : "closed",
272
204
  "role": "dialog",
273
205
  "style": {
274
- "--destyler_popover_content_transform_origin": "var(--destyler_popper_transform_origin)",
275
- "--destyler_popover_content_available_width": "var(--destyler_popper_available_width)",
276
- "--destyler_popover_content_available_height": "var(--destyler_popper_available_height)",
277
- "--destyler_popover_trigger_width": "var(--destyler_popper_anchor_width)",
278
- "--destyler_popover_trigger_height": "var(--destyler_popper_anchor_height)"
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)"
279
211
  }
280
- }), {
281
- default: () => this.$slots.default?.()
282
- }), [
212
+ }), () => this.$slots.default?.()), [
283
213
  [directives.BindOnceDirective, { id: this.rootContext.contentId }]
284
214
  ])));
285
215
  }
286
216
  });
287
217
 
288
- const DestylerPopoverContentModal = vue.defineComponent({
218
+ const PopoverContentModal = vue.defineComponent({
289
219
  name: "DestylerPopoverContentModal",
290
- props: destylerPopoverContentImplProps,
291
- emits: destylerPopoverContentImplEmits,
220
+ props: popoverContentImplProps,
221
+ emits: popoverContentImplEmits,
292
222
  setup(props, { emit }) {
293
223
  const rootContext = injectPopoverRootContext();
294
224
  const isRightClickOutsideRef = vue.ref(false);
@@ -303,7 +233,7 @@ const DestylerPopoverContentModal = vue.defineComponent({
303
233
  };
304
234
  },
305
235
  render() {
306
- return vue.h(DestylerPopoverContentImpl, {
236
+ return vue.h(PopoverContentImpl, {
307
237
  ref: (el) => this.forwardRef(el),
308
238
  ...vue.mergeProps(this.forwarded),
309
239
  trapFocus: this.rootContext.open.value,
@@ -320,16 +250,14 @@ const DestylerPopoverContentModal = vue.defineComponent({
320
250
  const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
321
251
  this.isRightClickOutsideRef = isRightClick;
322
252
  }
323
- }, {
324
- default: () => this.$slots.default?.()
325
- });
253
+ }, () => this.$slots.default?.());
326
254
  }
327
255
  });
328
256
 
329
- const DestylerPopoverContentNonModal = vue.defineComponent({
257
+ const PopoverContentNonModal = vue.defineComponent({
330
258
  name: "DestylerPopoverContentNonModal",
331
- props: destylerPopoverContentImplProps,
332
- emits: destylerPopoverContentImplEmits,
259
+ props: popoverContentImplProps,
260
+ emits: popoverContentImplEmits,
333
261
  setup(props, { emit }) {
334
262
  const rootContext = injectPopoverRootContext();
335
263
  const hasInteractedOutsideRef = vue.ref(false);
@@ -343,7 +271,7 @@ const DestylerPopoverContentNonModal = vue.defineComponent({
343
271
  };
344
272
  },
345
273
  render() {
346
- return vue.h(DestylerPopoverContentImpl, {
274
+ return vue.h(PopoverContentImpl, {
347
275
  ...this.forwarded,
348
276
  trapFocus: false,
349
277
  disableOutsidePointerEvents: false,
@@ -371,25 +299,31 @@ const DestylerPopoverContentNonModal = vue.defineComponent({
371
299
  if (event.detail.originalEvent.type === "focusin" && this.hasPointerDownOutsideRef)
372
300
  event.preventDefault();
373
301
  }
374
- }, {
375
- default: () => this.$slots.default?.()
376
- });
302
+ }, () => this.$slots.default?.());
377
303
  }
378
304
  });
379
305
 
380
- const destylerPopoverContentProps = {
381
- ...destylerPopoverContentImplProps,
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
+ */
382
314
  forceMount: {
383
315
  type: Boolean,
384
316
  required: false,
385
317
  default: false
386
318
  }
387
319
  };
388
- const destylerPopoverContentEmits = [...destylerPopoverContentImplEmits];
389
- const DestylerPopoverContent = vue.defineComponent({
320
+ const popoverContentEmits = {
321
+ ...popoverContentImplEmits
322
+ };
323
+ const PopoverContent = vue.defineComponent({
390
324
  name: "DestylerPopoverContent",
391
- props: destylerPopoverContentProps,
392
- emits: destylerPopoverContentEmits,
325
+ props: popoverContentProps,
326
+ emits: popoverContentEmits,
393
327
  setup(props, { emit }) {
394
328
  const rootContext = injectPopoverRootContext();
395
329
  const forwarded = composition.useForwardPropsEmits(props, emit);
@@ -400,62 +334,40 @@ const DestylerPopoverContent = vue.defineComponent({
400
334
  },
401
335
  render() {
402
336
  const useVShow = this.rootContext.modal.value;
403
- return vue.h(presence.DestylerPresence, {
337
+ return vue.h(presence.Presence, {
404
338
  present: this.forceMount || this.rootContext.open.value
405
- }, useVShow ? vue.h(DestylerPopoverContentModal, {
339
+ }, () => useVShow ? vue.h(PopoverContentModal, {
406
340
  ...this.forwarded
407
- }, {
408
- default: () => this.$slots.default?.()
409
- }) : vue.h(DestylerPopoverContentNonModal, {
341
+ }, () => this.$slots.default?.()) : vue.h(PopoverContentNonModal, {
410
342
  ...this.forwarded
411
- }, {
412
- default: () => this.$slots.default?.()
413
- }));
343
+ }, () => this.$slots.default?.()));
414
344
  }
415
345
  });
416
346
 
417
- const destylerPopoverPortalProps = {
418
- to: {
419
- type: [String, Object],
420
- required: false,
421
- default: "body"
422
- },
423
- disabled: {
424
- type: Boolean,
425
- required: false,
426
- default: false
427
- },
428
- forceMount: {
429
- type: Boolean,
430
- required: false,
431
- default: false
432
- }
347
+ const popoverPortalProps = {
348
+ ...teleport.teleportPrimitiveProps
433
349
  };
434
- const DestylerPopoverPortal = vue.defineComponent({
350
+ const PopoverPortal = vue.defineComponent({
435
351
  name: "DestylerPopoverPortal",
436
- props: destylerPopoverPortalProps,
352
+ props: popoverPortalProps,
437
353
  render() {
438
- return vue.h(teleport.DestylerTeleport, vue.mergeProps(this.$props), {
439
- default: () => this.$slots.default?.()
440
- });
354
+ return vue.h(teleport.TeleportPrimitive, vue.mergeProps(this.$props), () => this.$slots.default?.());
441
355
  }
442
356
  });
443
357
 
444
- const destylerPopoverTriggerProps = {
445
- asChild: {
446
- type: Boolean,
447
- required: false,
448
- default: false
449
- },
358
+ const popoverTriggerProps = {
359
+ ...primitive.primitiveProps,
360
+ /**
361
+ * @default button
362
+ */
450
363
  as: {
451
- type: [String, Object],
452
- required: false,
364
+ ...primitive.primitiveProps.as,
453
365
  default: "button"
454
366
  }
455
367
  };
456
- const DestylerPopoverTrigger = vue.defineComponent({
368
+ const PopoverTrigger = vue.defineComponent({
457
369
  name: "DestylerPopoverTrigger",
458
- props: destylerPopoverTriggerProps,
370
+ props: popoverTriggerProps,
459
371
  setup() {
460
372
  const rootContext = injectPopoverRootContext();
461
373
  const { forwardRef, currentElement: triggerElement } = composition.useForwardExpose();
@@ -468,9 +380,9 @@ const DestylerPopoverTrigger = vue.defineComponent({
468
380
  };
469
381
  },
470
382
  render() {
471
- return vue.h(this.rootContext.hasCustomAnchor.value ? primitive.DestylerPrimitive : popper.DestylerPopperAnchor, {
383
+ return vue.h(this.rootContext.hasCustomAnchor.value ? primitive.Primitive : popper.PopperAnchor, {
472
384
  asChild: true
473
- }, vue.h(primitive.DestylerPrimitive, {
385
+ }, () => vue.h(primitive.Primitive, {
474
386
  "ref": (el) => this.forwardRef(el),
475
387
  "type": this.$props.as === "button" ? "button" : void 0,
476
388
  "as": this.$props.as,
@@ -482,19 +394,27 @@ const DestylerPopoverTrigger = vue.defineComponent({
482
394
  "onClick": () => {
483
395
  this.rootContext.onOpenToggle();
484
396
  }
485
- }, {
486
- default: () => this.$slots.default?.()
487
- }));
397
+ }, () => this.$slots.default?.()));
488
398
  }
489
399
  });
490
400
 
491
- exports.DestylerPopoverArrow = DestylerPopoverArrow;
492
- exports.DestylerPopoverClose = DestylerPopoverClose;
493
- exports.DestylerPopoverContent = DestylerPopoverContent;
494
- exports.DestylerPopoverContentImpl = DestylerPopoverContentImpl;
495
- exports.DestylerPopoverContentModal = DestylerPopoverContentModal;
496
- exports.DestylerPopoverContentNonModal = DestylerPopoverContentNonModal;
497
- exports.DestylerPopoverPortal = DestylerPopoverPortal;
498
- exports.DestylerPopoverRoot = DestylerPopoverRoot;
499
- exports.DestylerPopoverTrigger = DestylerPopoverTrigger;
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;
500
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;
package/package.json CHANGED
@@ -1,24 +1,22 @@
1
1
  {
2
2
  "name": "@destyler/popover",
3
- "version": "0.0.2",
4
- "description": "unstyled popover component for vue",
3
+ "type": "module",
4
+ "version": "0.0.4",
5
+ "description": "displays rich content in a portal, triggered by a button.",
5
6
  "author": "Elone Hoo <elonehoo@gmail.com>",
6
7
  "license": "MIT",
7
8
  "exports": {
8
9
  ".": {
9
- "types": "./dist/index.d.ts",
10
- "import": "./dist/index.mjs",
11
- "require": "./dist/index.cjs"
10
+ "types": "./dist/index.d.mts",
11
+ "default": "./dist/index.mjs"
12
12
  },
13
13
  "./resolver": {
14
- "types": "./dist/resolver.d.ts",
15
- "import": "./dist/resolver.mjs",
16
- "require": "./dist/resolver.cjs"
14
+ "types": "./dist/resolver.d.mts",
15
+ "default": "./dist/resolver.mjs"
17
16
  },
18
17
  "./component": {
19
- "types": "./dist/component.d.ts",
20
- "import": "./dist/component.mjs",
21
- "require": "./dist/component.cjs"
18
+ "types": "./dist/component.d.mts",
19
+ "default": "./dist/component.mjs"
22
20
  },
23
21
  "./*": "./*"
24
22
  },
@@ -30,21 +28,22 @@
30
28
  "dist"
31
29
  ],
32
30
  "peerDependencies": {
33
- "vue": ">=3.3.4"
31
+ "vue": ">=3.4.21"
34
32
  },
35
33
  "dependencies": {
36
- "@destyler/composition": "0.0.2",
37
- "@destyler/dismissable-layer": "0.0.2",
38
- "@destyler/directives": "0.0.2",
39
- "@destyler/popper": "0.0.2",
40
- "@destyler/primitive": "0.0.2",
41
- "@destyler/shared": "0.0.2",
42
- "@destyler/teleport": "0.0.2",
43
- "@destyler/focus-scope": "0.0.2",
44
- "@destyler/presence": "0.0.2"
34
+ "@destyler/composition": "0.0.4",
35
+ "@destyler/directives": "0.0.4",
36
+ "@destyler/popper": "0.0.4",
37
+ "@destyler/presence": "0.0.4",
38
+ "@destyler/primitive": "0.0.4",
39
+ "@destyler/shared": "0.0.4",
40
+ "@destyler/dismissable-layer": "0.0.4",
41
+ "@destyler/focus-scope": "0.0.4",
42
+ "@destyler/teleport": "0.0.4"
45
43
  },
46
44
  "scripts": {
47
45
  "clear": "rimraf ./dist",
48
- "build": "pnpm run clear && unbuild"
46
+ "build": "pnpm run clear && unbuild",
47
+ "stub": "unbuild --stub"
49
48
  }
50
49
  }