@volverjs/ui-vue 0.0.10-beta.25 → 0.0.10-beta.27

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.
Files changed (119) hide show
  1. package/auto-imports.d.ts +1 -0
  2. package/dist/components/VvAccordion/VvAccordion.es.js +14 -12
  3. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  4. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +92 -38
  5. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  6. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +13 -2
  7. package/dist/components/VvAccordionGroup/index.d.ts +6 -4
  8. package/dist/components/VvAction/VvAction.es.js +14 -12
  9. package/dist/components/VvAction/VvAction.umd.js +1 -1
  10. package/dist/components/VvAction/VvAction.vue.d.ts +2 -11
  11. package/dist/components/VvAction/index.d.ts +1 -5
  12. package/dist/components/VvAlert/VvAlert.es.js +14 -12
  13. package/dist/components/VvAlert/VvAlert.umd.js +1 -1
  14. package/dist/components/VvAlertGroup/VvAlertGroup.es.js +14 -12
  15. package/dist/components/VvAlertGroup/VvAlertGroup.umd.js +1 -1
  16. package/dist/components/VvAvatar/VvAvatar.es.js +14 -12
  17. package/dist/components/VvAvatar/VvAvatar.umd.js +1 -1
  18. package/dist/components/VvAvatarGroup/VvAvatarGroup.es.js +14 -12
  19. package/dist/components/VvAvatarGroup/VvAvatarGroup.umd.js +1 -1
  20. package/dist/components/VvBadge/VvBadge.es.js +14 -12
  21. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  22. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +14 -12
  23. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  24. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +1 -1
  25. package/dist/components/VvButton/VvButton.es.js +14 -12
  26. package/dist/components/VvButton/VvButton.umd.js +1 -1
  27. package/dist/components/VvButton/VvButton.vue.d.ts +2 -19
  28. package/dist/components/VvButton/index.d.ts +1 -5
  29. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +14 -12
  30. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  31. package/dist/components/VvCard/VvCard.es.js +14 -12
  32. package/dist/components/VvCard/VvCard.umd.js +1 -1
  33. package/dist/components/VvCheckbox/VvCheckbox.es.js +14 -12
  34. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
  35. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +14 -12
  36. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
  37. package/dist/components/VvCombobox/VvCombobox.es.js +58 -34
  38. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  39. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +2 -8
  40. package/dist/components/VvCombobox/index.d.ts +9 -2
  41. package/dist/components/VvDialog/VvDialog.es.js +14 -12
  42. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  43. package/dist/components/VvDropdown/VvDropdown.es.js +24 -16
  44. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  45. package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +2 -19
  46. package/dist/components/VvDropdown/VvDropdownItem.vue.d.ts +13 -1
  47. package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +9 -0
  48. package/dist/components/VvDropdown/index.d.ts +37 -0
  49. package/dist/components/VvDropdownAction/VvDropdownAction.es.js +64 -15
  50. package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -1
  51. package/dist/components/VvDropdownItem/VvDropdownItem.es.js +322 -1
  52. package/dist/components/VvDropdownItem/VvDropdownItem.umd.js +1 -1
  53. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.es.js +14 -12
  54. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.umd.js +1 -1
  55. package/dist/components/VvDropdownOption/VvDropdownOption.es.js +131 -76
  56. package/dist/components/VvDropdownOption/VvDropdownOption.umd.js +1 -1
  57. package/dist/components/VvInputFile/VvInputFile.es.js +14 -12
  58. package/dist/components/VvInputFile/VvInputFile.umd.js +1 -1
  59. package/dist/components/VvInputFile/index.d.ts +5 -5
  60. package/dist/components/VvInputText/VvInputText.es.js +979 -107
  61. package/dist/components/VvInputText/VvInputText.umd.js +1 -1
  62. package/dist/components/VvInputText/VvInputText.vue.d.ts +44 -1
  63. package/dist/components/VvInputText/index.d.ts +28 -0
  64. package/dist/components/VvNav/VvNav.es.js +14 -12
  65. package/dist/components/VvNav/VvNav.umd.js +1 -1
  66. package/dist/components/VvNav/VvNav.vue.d.ts +1 -1
  67. package/dist/components/VvNavItem/VvNavItem.es.js +14 -12
  68. package/dist/components/VvNavItem/VvNavItem.umd.js +1 -1
  69. package/dist/components/VvProgress/VvProgress.es.js +14 -12
  70. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  71. package/dist/components/VvRadio/VvRadio.es.js +14 -12
  72. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  73. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +14 -12
  74. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
  75. package/dist/components/VvSelect/VvSelect.es.js +14 -12
  76. package/dist/components/VvSelect/VvSelect.umd.js +1 -1
  77. package/dist/components/VvTab/VvTab.es.js +14 -12
  78. package/dist/components/VvTab/VvTab.umd.js +1 -1
  79. package/dist/components/VvTab/VvTab.vue.d.ts +1 -1
  80. package/dist/components/VvTextarea/VvTextarea.es.js +14 -12
  81. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
  82. package/dist/components/VvTooltip/VvTooltip.es.js +14 -12
  83. package/dist/components/VvTooltip/VvTooltip.umd.js +1 -1
  84. package/dist/components/index.es.js +358 -144
  85. package/dist/components/index.umd.js +1 -1
  86. package/dist/composables/dropdown/useInjectDropdown.d.ts +3 -23
  87. package/dist/composables/dropdown/useProvideDropdown.d.ts +2 -3
  88. package/dist/composables/usePersistence.d.ts +3 -0
  89. package/dist/constants.d.ts +24 -21
  90. package/dist/directives/index.es.js +14 -12
  91. package/dist/directives/index.umd.js +1 -1
  92. package/dist/directives/v-tooltip.es.js +14 -12
  93. package/dist/directives/v-tooltip.umd.js +1 -1
  94. package/dist/icons.es.js +3 -3
  95. package/dist/icons.umd.js +1 -1
  96. package/dist/props/index.d.ts +11 -11
  97. package/dist/stories/AccordionGroup/AccordionGroup.stories.d.ts +27 -4
  98. package/dist/stories/AccordionGroup/AccordionGroupSlots.stories.d.ts +176 -29
  99. package/dist/stories/Button/Button.settings.d.ts +0 -1
  100. package/dist/types/nav.d.ts +1 -2
  101. package/package.json +8 -8
  102. package/src/assets/icons/detailed.json +1 -1
  103. package/src/assets/icons/normal.json +1 -1
  104. package/src/assets/icons/simple.json +1 -1
  105. package/src/components/VvAccordionGroup/VvAccordionGroup.vue +14 -19
  106. package/src/components/VvAccordionGroup/index.ts +2 -5
  107. package/src/components/VvCombobox/VvCombobox.vue +2 -0
  108. package/src/components/VvDropdown/VvDropdown.vue +11 -2
  109. package/src/components/VvDropdown/VvDropdownItem.vue +4 -1
  110. package/src/components/VvDropdown/VvDropdownOption.vue +3 -21
  111. package/src/components/VvDropdown/index.ts +35 -1
  112. package/src/components/VvInputText/VvInputText.vue +100 -3
  113. package/src/components/VvInputText/index.ts +24 -1
  114. package/src/composables/dropdown/useProvideDropdown.ts +4 -4
  115. package/src/composables/usePersistence.ts +76 -0
  116. package/src/constants.ts +23 -18
  117. package/src/props/index.ts +12 -7
  118. package/src/stories/Button/Button.settings.ts +1 -4
  119. package/src/types/nav.ts +1 -3
@@ -189,3 +189,40 @@ export declare const VvDropdownProps: {
189
189
  };
190
190
  id: (StringConstructor | NumberConstructor)[];
191
191
  };
192
+ export declare const VvDropdownItemProps: {
193
+ focusOnHover: {
194
+ type: BooleanConstructor;
195
+ default: boolean;
196
+ };
197
+ };
198
+ export declare const VvDropdownOptionProps: {
199
+ deselectHintLabel: {
200
+ type: StringConstructor;
201
+ };
202
+ selectHintLabel: {
203
+ type: StringConstructor;
204
+ };
205
+ selectedHintLabel: {
206
+ type: StringConstructor;
207
+ };
208
+ focusOnHover: {
209
+ type: BooleanConstructor;
210
+ default: boolean;
211
+ };
212
+ modifiers: {
213
+ type: PropType<string | string[]>;
214
+ default: undefined;
215
+ };
216
+ unselectable: {
217
+ type: BooleanConstructor;
218
+ default: boolean;
219
+ };
220
+ selected: {
221
+ type: BooleanConstructor;
222
+ default: boolean;
223
+ };
224
+ disabled: {
225
+ type: BooleanConstructor;
226
+ default: boolean;
227
+ };
228
+ };
@@ -1,6 +1,11 @@
1
1
  import { inject, defineComponent, ref, watch, computed, openBlock, createBlock, resolveDynamicComponent, unref, mergeProps, withCtx, renderSlot, createTextVNode, toDisplayString, provide, createElementBlock, toRefs, createVNode } from "vue";
2
2
  import "mitt";
3
3
  import { useElementHover, useFocus, useFocusWithin } from "@vueuse/core";
4
+ var StorageType = /* @__PURE__ */ ((StorageType2) => {
5
+ StorageType2["local"] = "local";
6
+ StorageType2["session"] = "session";
7
+ return StorageType2;
8
+ })(StorageType || {});
4
9
  var Strategy = /* @__PURE__ */ ((Strategy2) => {
5
10
  Strategy2["absolute"] = "absolute";
6
11
  Strategy2["fixed"] = "fixed";
@@ -48,13 +53,11 @@ var ActionRoles = /* @__PURE__ */ ((ActionRoles2) => {
48
53
  ActionRoles2["menuitem"] = "menuitem";
49
54
  return ActionRoles2;
50
55
  })(ActionRoles || {});
51
- var AnchorTarget = /* @__PURE__ */ ((AnchorTarget2) => {
52
- AnchorTarget2["_blank"] = "_blank";
53
- AnchorTarget2["_self"] = "_self";
54
- AnchorTarget2["_parent"] = "_parent";
55
- AnchorTarget2["_top"] = "_top";
56
- return AnchorTarget2;
57
- })(AnchorTarget || {});
56
+ var DropdownRole = /* @__PURE__ */ ((DropdownRole2) => {
57
+ DropdownRole2["listbox"] = "listbox";
58
+ DropdownRole2["menu"] = "menu";
59
+ return DropdownRole2;
60
+ })(DropdownRole || {});
58
61
  const INJECTION_KEY_VOLVER = Symbol.for("volver");
59
62
  const INJECTION_KEY_DROPDOWN_TRIGGER = Symbol.for(
60
63
  "dropdownTrigger"
@@ -80,11 +83,7 @@ const LinkProps = {
80
83
  /**
81
84
  * Anchor target
82
85
  */
83
- target: {
84
- type: String,
85
- default: void 0,
86
- validator: (value) => Object.values(AnchorTarget).includes(value)
87
- },
86
+ target: String,
88
87
  /**
89
88
  * Anchor rel
90
89
  */
@@ -165,7 +164,14 @@ const ModifiersProps = {
165
164
  validation: (value) => Object.values(Position).includes(value)
166
165
  }
167
166
  });
168
- ({
167
+ const IdProps = {
168
+ /**
169
+ * Global attribute id
170
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
171
+ */
172
+ id: [String, Number]
173
+ };
174
+ const DropdownProps = {
169
175
  /**
170
176
  * Dropdown placement
171
177
  */
@@ -258,7 +264,7 @@ const ModifiersProps = {
258
264
  type: Boolean,
259
265
  default: false
260
266
  }
261
- });
267
+ };
262
268
  const ActionProps = {
263
269
  ...DisabledProps,
264
270
  ...LabelProps,
@@ -289,6 +295,14 @@ const ActionProps = {
289
295
  default: ActionTag.button
290
296
  }
291
297
  };
298
+ ({
299
+ storageType: {
300
+ type: String,
301
+ default: StorageType.local,
302
+ validator: (value) => Object.values(StorageType).includes(value)
303
+ },
304
+ storageKey: String
305
+ });
292
306
  const VvActionEvents = ["click", "mouseover", "mouseleave"];
293
307
  const VvActionProps = ActionProps;
294
308
  function useVolver() {
@@ -423,6 +437,39 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
423
437
  };
424
438
  }
425
439
  });
440
+ ({
441
+ ...IdProps,
442
+ ...DropdownProps,
443
+ ...ModifiersProps,
444
+ /**
445
+ * Show / hide dropdown programmatically
446
+ */
447
+ modelValue: {
448
+ type: Boolean,
449
+ default: void 0
450
+ },
451
+ /**
452
+ * Dropdown trigger element
453
+ */
454
+ reference: {
455
+ type: Object,
456
+ default: null
457
+ },
458
+ /**
459
+ * Dropdown role
460
+ */
461
+ role: {
462
+ type: String,
463
+ default: DropdownRole.menu,
464
+ validator: (value) => Object.values(DropdownRole).includes(value)
465
+ }
466
+ });
467
+ const VvDropdownItemProps = {
468
+ focusOnHover: {
469
+ type: Boolean,
470
+ default: false
471
+ }
472
+ };
426
473
  function useProvideDropdownAction({
427
474
  expanded
428
475
  }) {
@@ -436,7 +483,9 @@ const __default__$1 = {
436
483
  };
437
484
  const _sfc_main$1 = /* @__PURE__ */ defineComponent({
438
485
  ...__default__$1,
486
+ props: VvDropdownItemProps,
439
487
  setup(__props) {
488
+ const props = __props;
440
489
  const { role, expanded } = useInjectedDropdownItem();
441
490
  const element = ref(null);
442
491
  useProvideDropdownAction({ expanded });
@@ -444,7 +493,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
444
493
  const { focused } = useFocus(element);
445
494
  const { focused: focusedWithin } = useFocusWithin(element);
446
495
  watch(hovered, (newValue) => {
447
- if (newValue) {
496
+ if (newValue && props.focusOnHover) {
448
497
  focused.value = true;
449
498
  }
450
499
  });
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("vue"),require("mitt"),require("@vueuse/core")):"function"==typeof define&&define.amd?define(["vue","mitt","@vueuse/core"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).VvDropdownAction=t(e.vue,null,e.core)}(this,(function(e,t,o){"use strict";var r=(e=>(e.left="left",e.right="right",e.top="top",e.bottom="bottom",e))(r||{}),n=(e=>(e.before="before",e.after="after",e))(n||{}),l=(e=>(e.button="button",e.submit="submit",e.reset="reset",e))(l||{}),a=(e=>(e.nuxtLink="nuxt-link",e.routerLink="router-link",e.a="a",e.button="button",e))(a||{}),u=(e=>(e.button="button",e.link="link",e.menuitem="menuitem",e))(u||{}),i=(e=>(e._blank="_blank",e._self="_self",e._parent="_parent",e._top="_top",e))(i||{});const s=Symbol.for("volver"),d=Symbol.for("dropdownTrigger"),c=Symbol.for("dropdownItem"),f=Symbol.for("dropdownAction"),p={to:{type:[String,Object]},href:String,target:{type:String,default:void 0,validator:e=>Object.values(i).includes(e)},rel:{type:String,default:"noopener noreferrer"}},v={disabled:{type:Boolean,default:!1}},m={active:{type:Boolean,default:!1}},b={current:{type:Boolean,default:!1}},y={pressed:{type:Boolean,default:!1}},g={label:{type:[String,Number],default:void 0}},k={modifiers:{type:[String,Array],default:void 0}};n.before,r.bottom,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean;const h={...v,...g,...y,...m,...b,...p,type:{type:String,default:l.button,validator:e=>Object.values(l).includes(e)},ariaLabel:{type:String,default:void 0},defaultTag:{type:String,default:a.button}},x=h;const B=e.defineComponent({name:"VvAction",props:x,emits:["click","mouseover","mouseleave"],setup(t,{expose:o,emit:r}){const n=t,l=r,u=e.inject(s),i=e.ref(null);o({$el:i});const{reference:c,bus:p,aria:v,expanded:m}=e.inject(d,{});e.watch((()=>i.value),(e=>{c&&(c.value=e)}));const b=e.computed((()=>n.pressed||(null==m?void 0:m.value))),{role:y}=e.inject(f,{}),g=e.computed((()=>{switch(!0){case n.disabled:return a.button;case void 0!==n.to:return(null==u?void 0:u.nuxt)?a.nuxtLink:a.routerLink;case void 0!==n.href:return a.a;default:return n.defaultTag}})),k=e.computed((()=>{const e={...null==v?void 0:v.value,ariaPressed:!!b.value||void 0,ariaLabel:n.ariaLabel,role:null==y?void 0:y.value};switch(g.value){case a.a:return{...e,href:n.href,target:n.target,rel:n.rel};case a.routerLink:case a.nuxtLink:return{...e,to:n.to,target:n.target};case a.button:return{...e,type:n.type,disabled:n.disabled};default:return e}})),h=e=>{n.disabled?e.preventDefault():(null==p||p.emit("click",e),l("click",e))},x=e=>{null==p||p.emit("mouseover",e),l("mouseover",e)},B=e=>{null==p||p.emit("mouseleave",e),l("mouseleave",e)};return(t,o)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(g)),e.mergeProps(e.unref(k),{ref_key:"element",ref:i,class:{active:t.active,pressed:e.unref(b),disabled:t.disabled,current:t.current},onClickPassive:h,onMouseoverPassive:x,onMouseleavePassive:B}),{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default",{},(()=>[e.createTextVNode(e.toDisplayString(t.label),1)]))])),_:3},16,["class"]))}});const S=e.defineComponent({name:"VvDropdownItem",setup(t){const{role:r,expanded:n}=e.inject(c,{}),l=e.ref(null);!function({expanded:t}){e.provide(f,{role:e.ref(u.menuitem),expanded:t})}({expanded:n});const a=o.useElementHover(l),{focused:i}=o.useFocus(l),{focused:s}=o.useFocusWithin(l);return e.watch(a,(e=>{e&&(i.value=!0)})),(t,o)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps({role:e.unref(r)},{ref_key:"element",ref:l,class:["vv-dropdown__item",{"focus-visible":e.unref(i)||e.unref(s)}]}),[e.renderSlot(t.$slots,"default")],16))}});return e.defineComponent({name:"VvDropdownAction",props:{...h,...k},setup(t){const o=t,{modifiers:r}=e.toRefs(o),n=function(t,o,r){return e.computed((()=>{const n={[t]:!0},l="string"==typeof(null==o?void 0:o.value)?o.value.split(" "):null==o?void 0:o.value;return l&&Array.isArray(l)&&l.forEach((e=>{e&&(n[`${t}--${e}`]=!0)})),r&&Object.keys(r.value).forEach((o=>{n[`${t}--${o}`]=e.unref(r.value[o])})),n}))}("vv-dropdown-action",r);return(t,o)=>(e.openBlock(),e.createBlock(S,null,{default:e.withCtx((()=>[e.createVNode(B,e.mergeProps({disabled:t.disabled,pressed:t.pressed,active:t.active,type:t.type,to:t.to,href:t.href,target:t.target,rel:t.rel},{class:e.unref(n)}),{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default",{},(()=>[e.createTextVNode(e.toDisplayString(t.label),1)]))])),_:3},16,["class"])])),_:3}))}})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("vue"),require("mitt"),require("@vueuse/core")):"function"==typeof define&&define.amd?define(["vue","mitt","@vueuse/core"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).VvDropdownAction=t(e.vue,null,e.core)}(this,(function(e,t,o){"use strict";var r=(e=>(e.local="local",e.session="session",e))(r||{}),n=(e=>(e.absolute="absolute",e.fixed="fixed",e))(n||{}),l=(e=>(e.left="left",e.right="right",e.top="top",e.bottom="bottom",e))(l||{}),a=(e=>(e.topStart="top-start",e.topEnd="top-end",e.bottomStart="bottom-start",e.bottomEnd="bottom-end",e.leftStart="left-start",e.leftEnd="left-end",e.rightStart="right-start",e.rightEnd="right-end",e))(a||{}),u=(e=>(e.before="before",e.after="after",e))(u||{}),i=(e=>(e.button="button",e.submit="submit",e.reset="reset",e))(i||{}),s=(e=>(e.nuxtLink="nuxt-link",e.routerLink="router-link",e.a="a",e.button="button",e))(s||{}),d=(e=>(e.button="button",e.link="link",e.menuitem="menuitem",e))(d||{}),c=(e=>(e.listbox="listbox",e.menu="menu",e))(c||{});const f=Symbol.for("volver"),p=Symbol.for("dropdownTrigger"),v=Symbol.for("dropdownItem"),m=Symbol.for("dropdownAction"),b={to:{type:[String,Object]},href:String,target:String,rel:{type:String,default:"noopener noreferrer"}},y={disabled:{type:Boolean,default:!1}},g={active:{type:Boolean,default:!1}},h={current:{type:Boolean,default:!1}},k={pressed:{type:Boolean,default:!1}},x={label:{type:[String,Number],default:void 0}},S={modifiers:{type:[String,Array],default:void 0}};u.before;l.bottom,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean;const B={...y,...x,...k,...g,...h,...b,type:{type:String,default:i.button,validator:e=>Object.values(i).includes(e)},ariaLabel:{type:String,default:void 0},defaultTag:{type:String,default:s.button}};r.local;const w=B;const L=e.defineComponent({name:"VvAction",props:w,emits:["click","mouseover","mouseleave"],setup(t,{expose:o,emit:r}){const n=t,l=r,a=e.inject(f),u=e.ref(null);o({$el:u});const{reference:i,bus:d,aria:c,expanded:v}=e.inject(p,{});e.watch((()=>u.value),(e=>{i&&(i.value=e)}));const b=e.computed((()=>n.pressed||(null==v?void 0:v.value))),{role:y}=e.inject(m,{}),g=e.computed((()=>{switch(!0){case n.disabled:return s.button;case void 0!==n.to:return(null==a?void 0:a.nuxt)?s.nuxtLink:s.routerLink;case void 0!==n.href:return s.a;default:return n.defaultTag}})),h=e.computed((()=>{const e={...null==c?void 0:c.value,ariaPressed:!!b.value||void 0,ariaLabel:n.ariaLabel,role:null==y?void 0:y.value};switch(g.value){case s.a:return{...e,href:n.href,target:n.target,rel:n.rel};case s.routerLink:case s.nuxtLink:return{...e,to:n.to,target:n.target};case s.button:return{...e,type:n.type,disabled:n.disabled};default:return e}})),k=e=>{n.disabled?e.preventDefault():(null==d||d.emit("click",e),l("click",e))},x=e=>{null==d||d.emit("mouseover",e),l("mouseover",e)},S=e=>{null==d||d.emit("mouseleave",e),l("mouseleave",e)};return(t,o)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(g)),e.mergeProps(e.unref(h),{ref_key:"element",ref:u,class:{active:t.active,pressed:e.unref(b),disabled:t.disabled,current:t.current},onClickPassive:k,onMouseoverPassive:x,onMouseleavePassive:S}),{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default",{},(()=>[e.createTextVNode(e.toDisplayString(t.label),1)]))])),_:3},16,["class"]))}});Boolean,c.menu;const j={focusOnHover:{type:Boolean,default:!1}};const C=e.defineComponent({name:"VvDropdownItem",props:j,setup(t){const r=t,{role:n,expanded:l}=e.inject(v,{}),a=e.ref(null);!function({expanded:t}){e.provide(m,{role:e.ref(d.menuitem),expanded:t})}({expanded:l});const u=o.useElementHover(a),{focused:i}=o.useFocus(a),{focused:s}=o.useFocusWithin(a);return e.watch(u,(e=>{e&&r.focusOnHover&&(i.value=!0)})),(t,o)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps({role:e.unref(n)},{ref_key:"element",ref:a,class:["vv-dropdown__item",{"focus-visible":e.unref(i)||e.unref(s)}]}),[e.renderSlot(t.$slots,"default")],16))}});return e.defineComponent({name:"VvDropdownAction",props:{...B,...S},setup(t){const o=t,{modifiers:r}=e.toRefs(o),n=function(t,o,r){return e.computed((()=>{const n={[t]:!0},l="string"==typeof(null==o?void 0:o.value)?o.value.split(" "):null==o?void 0:o.value;return l&&Array.isArray(l)&&l.forEach((e=>{e&&(n[`${t}--${e}`]=!0)})),r&&Object.keys(r.value).forEach((o=>{n[`${t}--${o}`]=e.unref(r.value[o])})),n}))}("vv-dropdown-action",r);return(t,o)=>(e.openBlock(),e.createBlock(C,null,{default:e.withCtx((()=>[e.createVNode(L,e.mergeProps({disabled:t.disabled,pressed:t.pressed,active:t.active,type:t.type,to:t.to,href:t.href,target:t.target,rel:t.rel},{class:e.unref(n)}),{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default",{},(()=>[e.createTextVNode(e.toDisplayString(t.label),1)]))])),_:3},16,["class"])])),_:3}))}})}));
@@ -1,18 +1,337 @@
1
1
  import { inject, provide, ref, defineComponent, watch, openBlock, createElementBlock, mergeProps, unref, renderSlot } from "vue";
2
2
  import "mitt";
3
3
  import { useElementHover, useFocus, useFocusWithin } from "@vueuse/core";
4
+ var StorageType = /* @__PURE__ */ ((StorageType2) => {
5
+ StorageType2["local"] = "local";
6
+ StorageType2["session"] = "session";
7
+ return StorageType2;
8
+ })(StorageType || {});
9
+ var Strategy = /* @__PURE__ */ ((Strategy2) => {
10
+ Strategy2["absolute"] = "absolute";
11
+ Strategy2["fixed"] = "fixed";
12
+ return Strategy2;
13
+ })(Strategy || {});
14
+ var Side = /* @__PURE__ */ ((Side2) => {
15
+ Side2["left"] = "left";
16
+ Side2["right"] = "right";
17
+ Side2["top"] = "top";
18
+ Side2["bottom"] = "bottom";
19
+ return Side2;
20
+ })(Side || {});
21
+ var Placement = /* @__PURE__ */ ((Placement2) => {
22
+ Placement2["topStart"] = "top-start";
23
+ Placement2["topEnd"] = "top-end";
24
+ Placement2["bottomStart"] = "bottom-start";
25
+ Placement2["bottomEnd"] = "bottom-end";
26
+ Placement2["leftStart"] = "left-start";
27
+ Placement2["leftEnd"] = "left-end";
28
+ Placement2["rightStart"] = "right-start";
29
+ Placement2["rightEnd"] = "right-end";
30
+ return Placement2;
31
+ })(Placement || {});
32
+ var Position = /* @__PURE__ */ ((Position2) => {
33
+ Position2["before"] = "before";
34
+ Position2["after"] = "after";
35
+ return Position2;
36
+ })(Position || {});
37
+ var ButtonType = /* @__PURE__ */ ((ButtonType2) => {
38
+ ButtonType2["button"] = "button";
39
+ ButtonType2["submit"] = "submit";
40
+ ButtonType2["reset"] = "reset";
41
+ return ButtonType2;
42
+ })(ButtonType || {});
43
+ var ActionTag = /* @__PURE__ */ ((ActionTag2) => {
44
+ ActionTag2["nuxtLink"] = "nuxt-link";
45
+ ActionTag2["routerLink"] = "router-link";
46
+ ActionTag2["a"] = "a";
47
+ ActionTag2["button"] = "button";
48
+ return ActionTag2;
49
+ })(ActionTag || {});
4
50
  var ActionRoles = /* @__PURE__ */ ((ActionRoles2) => {
5
51
  ActionRoles2["button"] = "button";
6
52
  ActionRoles2["link"] = "link";
7
53
  ActionRoles2["menuitem"] = "menuitem";
8
54
  return ActionRoles2;
9
55
  })(ActionRoles || {});
56
+ var DropdownRole = /* @__PURE__ */ ((DropdownRole2) => {
57
+ DropdownRole2["listbox"] = "listbox";
58
+ DropdownRole2["menu"] = "menu";
59
+ return DropdownRole2;
60
+ })(DropdownRole || {});
10
61
  const INJECTION_KEY_DROPDOWN_ITEM = Symbol.for(
11
62
  "dropdownItem"
12
63
  );
13
64
  const INJECTION_KEY_DROPDOWN_ACTION = Symbol.for(
14
65
  "dropdownAction"
15
66
  );
67
+ const LinkProps = {
68
+ /**
69
+ * The router-link/nuxt-link property, if it is defined the button is rendered as a ruouter-link or nuxt-link.
70
+ * @see Documentation of [router-link](https://router.vuejs.org/api/#router-link) and [nuxt-link](https://nuxtjs.org/api/components-nuxt-link/)
71
+ */
72
+ to: {
73
+ type: [String, Object]
74
+ },
75
+ /**
76
+ * Anchor href
77
+ */
78
+ href: String,
79
+ /**
80
+ * Anchor target
81
+ */
82
+ target: String,
83
+ /**
84
+ * Anchor rel
85
+ */
86
+ rel: {
87
+ type: String,
88
+ default: "noopener noreferrer"
89
+ }
90
+ };
91
+ const DisabledProps = {
92
+ /**
93
+ * Whether the form control is disabled
94
+ */
95
+ disabled: {
96
+ type: Boolean,
97
+ default: false
98
+ }
99
+ };
100
+ const ActiveProps = {
101
+ /**
102
+ * Whether the item is active
103
+ */
104
+ active: {
105
+ type: Boolean,
106
+ default: false
107
+ }
108
+ };
109
+ const CurrentProps = {
110
+ /**
111
+ * Whether the item is current
112
+ */
113
+ current: {
114
+ type: Boolean,
115
+ default: false
116
+ }
117
+ };
118
+ const PressedProps = {
119
+ /**
120
+ * Whether the item is pressed
121
+ */
122
+ pressed: {
123
+ type: Boolean,
124
+ default: false
125
+ }
126
+ };
127
+ const LabelProps = {
128
+ /**
129
+ * The item label
130
+ */
131
+ label: {
132
+ type: [String, Number],
133
+ default: void 0
134
+ }
135
+ };
136
+ const ModifiersProps = {
137
+ /**
138
+ * Component BEM modifiers
139
+ */
140
+ modifiers: {
141
+ type: [String, Array],
142
+ default: void 0
143
+ }
144
+ };
145
+ ({
146
+ /**
147
+ * VvIcon name or props
148
+ * @see VVIcon
149
+ */
150
+ icon: {
151
+ type: [String, Object],
152
+ default: void 0
153
+ },
154
+ /**
155
+ * VvIcon position
156
+ */
157
+ iconPosition: {
158
+ type: String,
159
+ default: Position.before,
160
+ validation: (value) => Object.values(Position).includes(value)
161
+ }
162
+ });
163
+ const IdProps = {
164
+ /**
165
+ * Global attribute id
166
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
167
+ */
168
+ id: [String, Number]
169
+ };
170
+ const DropdownProps = {
171
+ /**
172
+ * Dropdown placement
173
+ */
174
+ placement: {
175
+ type: String,
176
+ default: Side.bottom,
177
+ validator: (value) => Object.values(Side).includes(value) || Object.values(Placement).includes(value)
178
+ },
179
+ /**
180
+ * Dropdown strategy
181
+ */
182
+ strategy: {
183
+ type: String,
184
+ default: void 0,
185
+ validator: (value) => Object.values(Strategy).includes(value)
186
+ },
187
+ /**
188
+ * Dropdown show / hide transition name
189
+ */
190
+ transitionName: {
191
+ type: String,
192
+ default: void 0
193
+ },
194
+ /**
195
+ * Offset of the dropdown from the trigger
196
+ * @see https://floating-ui.com/docs/offset
197
+ */
198
+ offset: {
199
+ type: [Number, String, Object],
200
+ default: 0
201
+ },
202
+ /**
203
+ * Move dropdown to the side if there is no space in the default position
204
+ * @see https://floating-ui.com/docs/shift
205
+ */
206
+ shift: {
207
+ type: [Boolean, Object],
208
+ default: false
209
+ },
210
+ /**
211
+ * Flip dropdown position if there is no space in the default position
212
+ * @see https://floating-ui.com/docs/flip
213
+ */
214
+ flip: {
215
+ type: [Boolean, Object],
216
+ default: true
217
+ },
218
+ /**
219
+ * Size of the dropdown
220
+ * @see https://floating-ui.com/docs/size
221
+ */
222
+ size: {
223
+ type: [Boolean, Object],
224
+ default: () => ({ padding: 10 })
225
+ },
226
+ /**
227
+ * Automatically change the position of the dropdown
228
+ * @see https://floating-ui.com/docs/autoPlacement
229
+ */
230
+ autoPlacement: {
231
+ type: [Boolean, Object],
232
+ default: false
233
+ },
234
+ /**
235
+ * Add arrow to the dropdown
236
+ * @see https://floating-ui.com/docs/arrow
237
+ */
238
+ arrow: {
239
+ type: Boolean,
240
+ default: false
241
+ },
242
+ /**
243
+ * Keep open dropdown on click outside
244
+ */
245
+ keepOpen: {
246
+ type: Boolean,
247
+ default: false
248
+ },
249
+ /**
250
+ * Autofocus first item on dropdown open
251
+ */
252
+ autofocusFirst: {
253
+ type: Boolean,
254
+ default: true
255
+ },
256
+ /**
257
+ * Set dropdown width to the same as the trigger
258
+ */
259
+ triggerWidth: {
260
+ type: Boolean,
261
+ default: false
262
+ }
263
+ };
264
+ ({
265
+ ...DisabledProps,
266
+ ...LabelProps,
267
+ ...PressedProps,
268
+ ...ActiveProps,
269
+ ...CurrentProps,
270
+ ...LinkProps,
271
+ /**
272
+ * Button type
273
+ */
274
+ type: {
275
+ type: String,
276
+ default: ButtonType.button,
277
+ validator: (value) => Object.values(ButtonType).includes(value)
278
+ },
279
+ /**
280
+ * Button aria-label
281
+ */
282
+ ariaLabel: {
283
+ type: String,
284
+ default: void 0
285
+ },
286
+ /**
287
+ * Default tag for the action
288
+ */
289
+ defaultTag: {
290
+ type: String,
291
+ default: ActionTag.button
292
+ }
293
+ });
294
+ ({
295
+ storageType: {
296
+ type: String,
297
+ default: StorageType.local,
298
+ validator: (value) => Object.values(StorageType).includes(value)
299
+ },
300
+ storageKey: String
301
+ });
302
+ ({
303
+ ...IdProps,
304
+ ...DropdownProps,
305
+ ...ModifiersProps,
306
+ /**
307
+ * Show / hide dropdown programmatically
308
+ */
309
+ modelValue: {
310
+ type: Boolean,
311
+ default: void 0
312
+ },
313
+ /**
314
+ * Dropdown trigger element
315
+ */
316
+ reference: {
317
+ type: Object,
318
+ default: null
319
+ },
320
+ /**
321
+ * Dropdown role
322
+ */
323
+ role: {
324
+ type: String,
325
+ default: DropdownRole.menu,
326
+ validator: (value) => Object.values(DropdownRole).includes(value)
327
+ }
328
+ });
329
+ const VvDropdownItemProps = {
330
+ focusOnHover: {
331
+ type: Boolean,
332
+ default: false
333
+ }
334
+ };
16
335
  function useInjectedDropdownItem() {
17
336
  return inject(INJECTION_KEY_DROPDOWN_ITEM, {});
18
337
  }
@@ -29,7 +348,9 @@ const __default__ = {
29
348
  };
30
349
  const _sfc_main = /* @__PURE__ */ defineComponent({
31
350
  ...__default__,
351
+ props: VvDropdownItemProps,
32
352
  setup(__props) {
353
+ const props = __props;
33
354
  const { role, expanded } = useInjectedDropdownItem();
34
355
  const element = ref(null);
35
356
  useProvideDropdownAction({ expanded });
@@ -37,7 +358,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
37
358
  const { focused } = useFocus(element);
38
359
  const { focused: focusedWithin } = useFocusWithin(element);
39
360
  watch(hovered, (newValue) => {
40
- if (newValue) {
361
+ if (newValue && props.focusOnHover) {
41
362
  focused.value = true;
42
363
  }
43
364
  });
@@ -1 +1 @@
1
- !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("vue"),require("mitt"),require("@vueuse/core")):"function"==typeof define&&define.amd?define(["vue","mitt","@vueuse/core"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).VvDropdownItem=o(e.vue,null,e.core)}(this,(function(e,o,n){"use strict";var t=(e=>(e.button="button",e.link="link",e.menuitem="menuitem",e))(t||{});const u=Symbol.for("dropdownItem"),r=Symbol.for("dropdownAction");return e.defineComponent({name:"VvDropdownItem",setup(o){const{role:d,expanded:i}=e.inject(u,{}),l=e.ref(null);!function({expanded:o}){e.provide(r,{role:e.ref(t.menuitem),expanded:o})}({expanded:i});const f=n.useElementHover(l),{focused:s}=n.useFocus(l),{focused:c}=n.useFocusWithin(l);return e.watch(f,(e=>{e&&(s.value=!0)})),(o,n)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps({role:e.unref(d)},{ref_key:"element",ref:l,class:["vv-dropdown__item",{"focus-visible":e.unref(s)||e.unref(c)}]}),[e.renderSlot(o.$slots,"default")],16))}})}));
1
+ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("vue"),require("mitt"),require("@vueuse/core")):"function"==typeof define&&define.amd?define(["vue","mitt","@vueuse/core"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).VvDropdownItem=o(e.vue,null,e.core)}(this,(function(e,o,t){"use strict";var n=(e=>(e.local="local",e.session="session",e))(n||{}),r=(e=>(e.absolute="absolute",e.fixed="fixed",e))(r||{}),l=(e=>(e.left="left",e.right="right",e.top="top",e.bottom="bottom",e))(l||{}),u=(e=>(e.topStart="top-start",e.topEnd="top-end",e.bottomStart="bottom-start",e.bottomEnd="bottom-end",e.leftStart="left-start",e.leftEnd="left-end",e.rightStart="right-start",e.rightEnd="right-end",e))(u||{}),i=(e=>(e.before="before",e.after="after",e))(i||{}),s=(e=>(e.button="button",e.submit="submit",e.reset="reset",e))(s||{}),a=(e=>(e.nuxtLink="nuxt-link",e.routerLink="router-link",e.a="a",e.button="button",e))(a||{}),d=(e=>(e.button="button",e.link="link",e.menuitem="menuitem",e))(d||{}),f=(e=>(e.listbox="listbox",e.menu="menu",e))(f||{});const m=Symbol.for("dropdownItem"),b=Symbol.for("dropdownAction");Boolean,Boolean,Boolean,Boolean;i.before;l.bottom,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean;s.button,a.button,n.local,Boolean,f.menu;const c={focusOnHover:{type:Boolean,default:!1}};return e.defineComponent({name:"VvDropdownItem",props:c,setup(o){const n=o,{role:r,expanded:l}=e.inject(m,{}),u=e.ref(null);!function({expanded:o}){e.provide(b,{role:e.ref(d.menuitem),expanded:o})}({expanded:l});const i=t.useElementHover(u),{focused:s}=t.useFocus(u),{focused:a}=t.useFocusWithin(u);return e.watch(i,(e=>{e&&n.focusOnHover&&(s.value=!0)})),(o,t)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps({role:e.unref(r)},{ref_key:"element",ref:u,class:["vv-dropdown__item",{"focus-visible":e.unref(s)||e.unref(a)}]}),[e.renderSlot(o.$slots,"default")],16))}})}));
@@ -1,4 +1,9 @@
1
1
  import { defineComponent, openBlock, createElementBlock, toDisplayString } from "vue";
2
+ var StorageType = /* @__PURE__ */ ((StorageType2) => {
3
+ StorageType2["local"] = "local";
4
+ StorageType2["session"] = "session";
5
+ return StorageType2;
6
+ })(StorageType || {});
2
7
  var Strategy = /* @__PURE__ */ ((Strategy2) => {
3
8
  Strategy2["absolute"] = "absolute";
4
9
  Strategy2["fixed"] = "fixed";
@@ -40,13 +45,6 @@ var ActionTag = /* @__PURE__ */ ((ActionTag2) => {
40
45
  ActionTag2["button"] = "button";
41
46
  return ActionTag2;
42
47
  })(ActionTag || {});
43
- var AnchorTarget = /* @__PURE__ */ ((AnchorTarget2) => {
44
- AnchorTarget2["_blank"] = "_blank";
45
- AnchorTarget2["_self"] = "_self";
46
- AnchorTarget2["_parent"] = "_parent";
47
- AnchorTarget2["_top"] = "_top";
48
- return AnchorTarget2;
49
- })(AnchorTarget || {});
50
48
  const LinkProps = {
51
49
  /**
52
50
  * The router-link/nuxt-link property, if it is defined the button is rendered as a ruouter-link or nuxt-link.
@@ -62,11 +60,7 @@ const LinkProps = {
62
60
  /**
63
61
  * Anchor target
64
62
  */
65
- target: {
66
- type: String,
67
- default: void 0,
68
- validator: (value) => Object.values(AnchorTarget).includes(value)
69
- },
63
+ target: String,
70
64
  /**
71
65
  * Anchor rel
72
66
  */
@@ -262,6 +256,14 @@ const LabelProps = {
262
256
  default: ActionTag.button
263
257
  }
264
258
  });
259
+ ({
260
+ storageType: {
261
+ type: String,
262
+ default: StorageType.local,
263
+ validator: (value) => Object.values(StorageType).includes(value)
264
+ },
265
+ storageKey: String
266
+ });
265
267
  const _hoisted_1 = {
266
268
  class: "vv-dropdown-optgroup",
267
269
  role: "presentation",
@@ -1 +1 @@
1
- !function(o,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("vue")):"function"==typeof define&&define.amd?define(["vue"],e):(o="undefined"!=typeof globalThis?globalThis:o||self).VvDropdownOptgroup=e(o.vue)}(this,(function(o){"use strict";var e=(o=>(o.left="left",o.right="right",o.top="top",o.bottom="bottom",o))(e||{}),t=(o=>(o.before="before",o.after="after",o))(t||{}),n=(o=>(o.button="button",o.submit="submit",o.reset="reset",o))(n||{}),r=(o=>(o.nuxtLink="nuxt-link",o.routerLink="router-link",o.a="a",o.button="button",o))(r||{});Boolean,Boolean,Boolean,Boolean;const l={label:{type:[String,Number],default:void 0}};t.before,e.bottom,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,n.button,r.button;const u={class:"vv-dropdown-optgroup",role:"presentation",tabindex:"-1"};return o.defineComponent({name:"VvDropdownOptgroup",props:{...l},setup(e){const t=e;return(e,n)=>(o.openBlock(),o.createElementBlock("li",u,o.toDisplayString(t.label),1))}})}));
1
+ !function(o,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("vue")):"function"==typeof define&&define.amd?define(["vue"],e):(o="undefined"!=typeof globalThis?globalThis:o||self).VvDropdownOptgroup=e(o.vue)}(this,(function(o){"use strict";var e=(o=>(o.local="local",o.session="session",o))(e||{}),t=(o=>(o.left="left",o.right="right",o.top="top",o.bottom="bottom",o))(t||{}),n=(o=>(o.before="before",o.after="after",o))(n||{}),l=(o=>(o.button="button",o.submit="submit",o.reset="reset",o))(l||{}),r=(o=>(o.nuxtLink="nuxt-link",o.routerLink="router-link",o.a="a",o.button="button",o))(r||{});Boolean,Boolean,Boolean,Boolean;const a={label:{type:[String,Number],default:void 0}};n.before,t.bottom,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,Boolean,l.button,r.button,e.local;const u={class:"vv-dropdown-optgroup",role:"presentation",tabindex:"-1"};return o.defineComponent({name:"VvDropdownOptgroup",props:{...a},setup(e){const t=e;return(e,n)=>(o.openBlock(),o.createElementBlock("li",u,o.toDisplayString(t.label),1))}})}));