@volverjs/ui-vue 0.0.5-beta.2 → 0.0.5-beta.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.
Files changed (32) hide show
  1. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +7 -1
  2. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
  3. package/dist/components/VvCombobox/VvCombobox.es.js +171 -64
  4. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  5. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +0 -8
  6. package/dist/components/VvDropdown/VvDropdownOptgroup.vue.d.ts +6 -0
  7. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.es.js +237 -0
  8. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.umd.js +1 -0
  9. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +7 -1
  10. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
  11. package/dist/components/VvSelect/VvSelect.es.js +42 -10
  12. package/dist/components/VvSelect/VvSelect.umd.js +1 -1
  13. package/dist/components/VvSelect/VvSelect.vue.d.ts +4 -3
  14. package/dist/components/index.es.js +241 -134
  15. package/dist/components/index.umd.js +1 -1
  16. package/dist/composables/useOptions.d.ts +1 -0
  17. package/dist/icons.es.js +3 -3
  18. package/dist/icons.umd.js +1 -1
  19. package/dist/resolvers/unplugin.es.js +2 -1
  20. package/dist/resolvers/unplugin.umd.js +1 -1
  21. package/package.json +9 -1
  22. package/src/assets/icons/detailed.json +1 -1
  23. package/src/assets/icons/normal.json +1 -1
  24. package/src/assets/icons/simple.json +1 -1
  25. package/src/components/VvCombobox/VvCombobox.vue +95 -28
  26. package/src/components/VvDropdown/VvDropdownOptgroup.vue +18 -0
  27. package/src/components/VvSelect/VvSelect.vue +38 -10
  28. package/src/composables/useOptions.ts +6 -0
  29. package/src/resolvers/unplugin.ts +2 -1
  30. package/src/stories/Combobox/ComboboxOptions.stories.mdx +35 -0
  31. package/src/stories/Select/SelectOptions.stories.mdx +35 -0
  32. package/src/types/generic.d.ts +2 -1
@@ -295,14 +295,14 @@ function useModifiers(prefix, modifiers, others) {
295
295
  return toReturn;
296
296
  });
297
297
  }
298
- const _hoisted_1$e = ["id", "open"];
298
+ const _hoisted_1$f = ["id", "open"];
299
299
  const _hoisted_2$c = ["aria-controls", "aria-expanded"];
300
300
  const _hoisted_3$6 = ["aria-hidden"];
301
- const __default__$l = {
301
+ const __default__$m = {
302
302
  name: "VvAccordion"
303
303
  };
304
- const _sfc_main$l = /* @__PURE__ */ defineComponent({
305
- ...__default__$l,
304
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
305
+ ...__default__$m,
306
306
  props: VvAccordionProps,
307
307
  emits: VvAccordionEvents,
308
308
  setup(__props, { emit }) {
@@ -393,7 +393,7 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
393
393
  createTextVNode(toDisplayString(unref(content)), 1)
394
394
  ])
395
395
  ], 8, _hoisted_3$6)
396
- ], 10, _hoisted_1$e);
396
+ ], 10, _hoisted_1$f);
397
397
  };
398
398
  }
399
399
  });
@@ -446,11 +446,11 @@ function useProvideGroupState(groupState) {
446
446
  computed(() => groupState)
447
447
  );
448
448
  }
449
- const __default__$k = {
449
+ const __default__$l = {
450
450
  name: "VvAccordionGroup"
451
451
  };
452
- const _sfc_main$k = /* @__PURE__ */ defineComponent({
453
- ...__default__$k,
452
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
453
+ ...__default__$l,
454
454
  props: VvAccordionGroupProps,
455
455
  emits: VvAccordionGroupEvents,
456
456
  setup(__props, { emit }) {
@@ -517,7 +517,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
517
517
  }, [
518
518
  renderSlot(_ctx.$slots, "default", {}, () => [
519
519
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(items), (item) => {
520
- return openBlock(), createBlock(_sfc_main$l, mergeProps({
520
+ return openBlock(), createBlock(_sfc_main$m, mergeProps({
521
521
  key: item.title
522
522
  }, {
523
523
  name: item.name,
@@ -947,11 +947,11 @@ const VvBadgeProps = {
947
947
  ...ModifiersProps,
948
948
  value: [String, Number]
949
949
  };
950
- const __default__$j = {
950
+ const __default__$k = {
951
951
  name: "VvBadge"
952
952
  };
953
- const _sfc_main$j = /* @__PURE__ */ defineComponent({
954
- ...__default__$j,
953
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
954
+ ...__default__$k,
955
955
  props: VvBadgeProps,
956
956
  setup(__props) {
957
957
  const props = __props;
@@ -973,13 +973,13 @@ const VvBreadcrumbProps = {
973
973
  ...ModifiersProps,
974
974
  routes: Array
975
975
  };
976
- const _hoisted_1$d = { class: "vv-breadcrumb__list" };
976
+ const _hoisted_1$e = { class: "vv-breadcrumb__list" };
977
977
  const _hoisted_2$b = ["content"];
978
- const __default__$i = {
978
+ const __default__$j = {
979
979
  name: "VvBreadcrumb"
980
980
  };
981
- const _sfc_main$i = /* @__PURE__ */ defineComponent({
982
- ...__default__$i,
981
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
982
+ ...__default__$j,
983
983
  props: VvBreadcrumbProps,
984
984
  setup(__props) {
985
985
  const props = __props;
@@ -990,7 +990,7 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
990
990
  class: normalizeClass(unref(bemCssClasses)),
991
991
  "aria-label": "breadcrumbs"
992
992
  }, [
993
- createElementVNode("ol", _hoisted_1$d, [
993
+ createElementVNode("ol", _hoisted_1$e, [
994
994
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.routes, (route, index) => {
995
995
  var _a, _b, _c, _d;
996
996
  return openBlock(), createElementBlock("li", {
@@ -1125,11 +1125,11 @@ const VvIconProps = {
1125
1125
  function useVolver() {
1126
1126
  return inject(INJECTION_KEY_VOLVER);
1127
1127
  }
1128
- const __default__$h = {
1128
+ const __default__$i = {
1129
1129
  name: "VvIcon"
1130
1130
  };
1131
- const _sfc_main$h = /* @__PURE__ */ defineComponent({
1132
- ...__default__$h,
1131
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1132
+ ...__default__$i,
1133
1133
  props: VvIconProps,
1134
1134
  setup(__props) {
1135
1135
  const props = __props;
@@ -1226,11 +1226,11 @@ function useInjectedDropdownItem() {
1226
1226
  function useInjectedDropdownAction() {
1227
1227
  return inject(INJECTION_KEY_DROPDOWN_ACTION, {});
1228
1228
  }
1229
- const __default__$g = {
1229
+ const __default__$h = {
1230
1230
  name: "VvAction"
1231
1231
  };
1232
- const _sfc_main$g = /* @__PURE__ */ defineComponent({
1233
- ...__default__$g,
1232
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
1233
+ ...__default__$h,
1234
1234
  props: VvActionProps,
1235
1235
  emits: VvActionEvents,
1236
1236
  setup(__props, { expose, emit }) {
@@ -1413,7 +1413,7 @@ function useGroupProps$2(props, emit) {
1413
1413
  };
1414
1414
  }
1415
1415
  const useUniqueId = (id) => computed(() => String((id == null ? void 0 : id.value) || nanoid()));
1416
- const _hoisted_1$c = {
1416
+ const _hoisted_1$d = {
1417
1417
  key: 1,
1418
1418
  class: "vv-button__label"
1419
1419
  };
@@ -1421,11 +1421,11 @@ const _hoisted_2$a = {
1421
1421
  key: 1,
1422
1422
  class: "vv-button__label"
1423
1423
  };
1424
- const __default__$f = {
1424
+ const __default__$g = {
1425
1425
  name: "VvButton"
1426
1426
  };
1427
- const _sfc_main$f = /* @__PURE__ */ defineComponent({
1428
- ...__default__$f,
1427
+ const _sfc_main$g = /* @__PURE__ */ defineComponent({
1428
+ ...__default__$g,
1429
1429
  props: VvButtonProps,
1430
1430
  emits: VvButtonEvents,
1431
1431
  setup(__props, { expose, emit }) {
@@ -1500,7 +1500,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
1500
1500
  }
1501
1501
  };
1502
1502
  return (_ctx, _cache) => {
1503
- return openBlock(), createBlock(_sfc_main$g, mergeProps({
1503
+ return openBlock(), createBlock(_sfc_main$h, mergeProps({
1504
1504
  disabled: unref(disabled),
1505
1505
  pressed: unref(pressed),
1506
1506
  active: _ctx.active,
@@ -1519,15 +1519,15 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
1519
1519
  default: withCtx(() => [
1520
1520
  renderSlot(_ctx.$slots, "default", {}, () => [
1521
1521
  _ctx.loading ? renderSlot(_ctx.$slots, "loading", { key: 0 }, () => [
1522
- _ctx.loadingIcon ? (openBlock(), createBlock(_sfc_main$h, {
1522
+ _ctx.loadingIcon ? (openBlock(), createBlock(_sfc_main$i, {
1523
1523
  key: 0,
1524
1524
  class: "vv-button__loading-icon",
1525
1525
  name: _ctx.loadingIcon
1526
1526
  }, null, 8, ["name"])) : createCommentVNode("", true),
1527
- _ctx.loadingLabel ? (openBlock(), createElementBlock("span", _hoisted_1$c, toDisplayString(_ctx.loadingLabel), 1)) : createCommentVNode("", true)
1527
+ _ctx.loadingLabel ? (openBlock(), createElementBlock("span", _hoisted_1$d, toDisplayString(_ctx.loadingLabel), 1)) : createCommentVNode("", true)
1528
1528
  ]) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
1529
1529
  renderSlot(_ctx.$slots, "before"),
1530
- unref(icon) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
1530
+ unref(icon) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
1531
1531
  key: 0,
1532
1532
  class: "vv-button__icon"
1533
1533
  }, unref(hasIconProps)), null, 16)) : createCommentVNode("", true),
@@ -1558,11 +1558,11 @@ const VvButtonGroupProps = {
1558
1558
  modelValue: { type: [String, Array], default: void 0 }
1559
1559
  };
1560
1560
  const VvButtonGroupEvents = ["update:modelValue"];
1561
- const __default__$e = {
1561
+ const __default__$f = {
1562
1562
  name: "VvButtonGroup"
1563
1563
  };
1564
- const _sfc_main$e = /* @__PURE__ */ defineComponent({
1565
- ...__default__$e,
1564
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
1565
+ ...__default__$f,
1566
1566
  props: VvButtonGroupProps,
1567
1567
  emits: VvButtonGroupEvents,
1568
1568
  setup(__props, { emit }) {
@@ -1620,7 +1620,7 @@ const VvCardProps = {
1620
1620
  title: String,
1621
1621
  modifiers: [String, Array]
1622
1622
  };
1623
- const _hoisted_1$b = {
1623
+ const _hoisted_1$c = {
1624
1624
  key: 0,
1625
1625
  class: "vv-card__header"
1626
1626
  };
@@ -1632,11 +1632,11 @@ const _hoisted_3$5 = {
1632
1632
  key: 2,
1633
1633
  class: "vv-card__footer"
1634
1634
  };
1635
- const __default__$d = {
1635
+ const __default__$e = {
1636
1636
  name: "VvCard"
1637
1637
  };
1638
- const _sfc_main$d = /* @__PURE__ */ defineComponent({
1639
- ...__default__$d,
1638
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
1639
+ ...__default__$e,
1640
1640
  props: VvCardProps,
1641
1641
  setup(__props) {
1642
1642
  const props = __props;
@@ -1646,7 +1646,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1646
1646
  return openBlock(), createElementBlock("article", {
1647
1647
  class: normalizeClass(unref(bemCssClasses))
1648
1648
  }, [
1649
- _ctx.$slots.header || _ctx.title ? (openBlock(), createElementBlock("header", _hoisted_1$b, [
1649
+ _ctx.$slots.header || _ctx.title ? (openBlock(), createElementBlock("header", _hoisted_1$c, [
1650
1650
  renderSlot(_ctx.$slots, "header", {}, () => [
1651
1651
  createTextVNode(toDisplayString(_ctx.title), 1)
1652
1652
  ])
@@ -1819,13 +1819,13 @@ function HintSlotFactory(parentProps, parentSlots) {
1819
1819
  }
1820
1820
  };
1821
1821
  }
1822
- const _hoisted_1$a = ["for"];
1822
+ const _hoisted_1$b = ["for"];
1823
1823
  const _hoisted_2$8 = ["id", "name", "disabled", "value", "tabindex", "aria-invalid"];
1824
- const __default__$c = {
1824
+ const __default__$d = {
1825
1825
  name: "VvCheckbox"
1826
1826
  };
1827
- const _sfc_main$c = /* @__PURE__ */ defineComponent({
1828
- ...__default__$c,
1827
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1828
+ ...__default__$d,
1829
1829
  props: VvCheckboxProps,
1830
1830
  emits: VvCheckboxEvents,
1831
1831
  setup(__props, { emit }) {
@@ -1965,7 +1965,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
1965
1965
  class: "vv-checkbox__hint",
1966
1966
  params: { value: unref(modelValue) }
1967
1967
  }, null, 8, ["params"])
1968
- ], 10, _hoisted_1$a);
1968
+ ], 10, _hoisted_1$b);
1969
1969
  };
1970
1970
  }
1971
1971
  });
@@ -1988,20 +1988,26 @@ function useOptions(props) {
1988
1988
  return false;
1989
1989
  return typeof disabledKey.value === "function" ? disabledKey.value(option) : option[disabledKey.value];
1990
1990
  };
1991
+ const getOptionGrouped = (option) => {
1992
+ if (typeof option !== "object" && option !== null)
1993
+ return [];
1994
+ return option.options || [];
1995
+ };
1991
1996
  return {
1992
1997
  options,
1993
1998
  getOptionLabel,
1994
1999
  getOptionValue,
1995
- getOptionDisabled
2000
+ getOptionDisabled,
2001
+ getOptionGrouped
1996
2002
  };
1997
2003
  }
1998
- const _hoisted_1$9 = ["textContent"];
2004
+ const _hoisted_1$a = ["textContent"];
1999
2005
  const _hoisted_2$7 = { class: "vv-checkbox-group__wrapper" };
2000
- const __default__$b = {
2006
+ const __default__$c = {
2001
2007
  name: "VvCheckboxGroup"
2002
2008
  };
2003
- const _sfc_main$b = /* @__PURE__ */ defineComponent({
2004
- ...__default__$b,
2009
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
2010
+ ...__default__$c,
2005
2011
  props: VvCheckboxGroupProps,
2006
2012
  emits: VvCheckboxGroupEvents,
2007
2013
  setup(__props, { emit }) {
@@ -2045,10 +2051,10 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
2045
2051
  _ctx.label ? (openBlock(), createElementBlock("legend", {
2046
2052
  key: 0,
2047
2053
  textContent: toDisplayString(_ctx.label)
2048
- }, null, 8, _hoisted_1$9)) : createCommentVNode("", true),
2054
+ }, null, 8, _hoisted_1$a)) : createCommentVNode("", true),
2049
2055
  createElementVNode("div", _hoisted_2$7, [
2050
2056
  _ctx.options.length > 0 ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(_ctx.options, (option, index) => {
2051
- return openBlock(), createBlock(_sfc_main$c, mergeProps({ key: index }, getOptionProps(option, index)), null, 16);
2057
+ return openBlock(), createBlock(_sfc_main$d, mergeProps({ key: index }, getOptionProps(option, index)), null, 16);
2052
2058
  }), 128)) : renderSlot(_ctx.$slots, "default", { key: 1 })
2053
2059
  ]),
2054
2060
  createVNode(unref(HintSlot), { class: "vv-checkbox-group__hint" })
@@ -2261,13 +2267,13 @@ function useProvideDropdownAction({
2261
2267
  expanded
2262
2268
  });
2263
2269
  }
2264
- const _hoisted_1$8 = ["id", "tabindex", "role", "aria-labelledby"];
2265
- const __default__$a = {
2270
+ const _hoisted_1$9 = ["id", "tabindex", "role", "aria-labelledby"];
2271
+ const __default__$b = {
2266
2272
  name: "VvDropdown",
2267
2273
  inheritAttrs: false
2268
2274
  };
2269
- const _sfc_main$a = /* @__PURE__ */ defineComponent({
2270
- ...__default__$a,
2275
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
2276
+ ...__default__$b,
2271
2277
  props: VvDropdownProps,
2272
2278
  emits: ["update:modelValue"],
2273
2279
  setup(__props, { expose, emit }) {
@@ -2576,7 +2582,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
2576
2582
  renderSlot(_ctx.$slots, "items", normalizeProps(guardReactiveProps({
2577
2583
  role: unref(itemRole)
2578
2584
  })))
2579
- ], 16, _hoisted_1$8),
2585
+ ], 16, _hoisted_1$9),
2580
2586
  renderSlot(_ctx.$slots, "after", normalizeProps(guardReactiveProps({ expanded: unref(expanded) })))
2581
2587
  ], 6), [
2582
2588
  [vShow, unref(expanded)]
@@ -2588,11 +2594,11 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
2588
2594
  };
2589
2595
  }
2590
2596
  });
2591
- const __default__$9 = {
2597
+ const __default__$a = {
2592
2598
  name: "VvDropdownItem"
2593
2599
  };
2594
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
2595
- ...__default__$9,
2600
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
2601
+ ...__default__$a,
2596
2602
  setup(__props) {
2597
2603
  const { role, expanded } = useInjectedDropdownItem();
2598
2604
  const element = ref(null);
@@ -2616,12 +2622,12 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
2616
2622
  };
2617
2623
  }
2618
2624
  });
2619
- const _hoisted_1$7 = ["title"];
2620
- const __default__$8 = {
2625
+ const _hoisted_1$8 = ["title"];
2626
+ const __default__$9 = {
2621
2627
  name: "VvDropdownOption"
2622
2628
  };
2623
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2624
- ...__default__$8,
2629
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
2630
+ ...__default__$9,
2625
2631
  props: {
2626
2632
  ...DisabledProps,
2627
2633
  ...SelectedProps,
@@ -2658,7 +2664,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2658
2664
  }
2659
2665
  });
2660
2666
  return (_ctx, _cache) => {
2661
- return openBlock(), createBlock(_sfc_main$9, {
2667
+ return openBlock(), createBlock(_sfc_main$a, {
2662
2668
  class: normalizeClass(unref(bemCssClasses)),
2663
2669
  tabindex: _ctx.disabled ? -1 : 0,
2664
2670
  "aria-selected": _ctx.selected,
@@ -2673,13 +2679,33 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2673
2679
  renderSlot(_ctx.$slots, "hint", normalizeProps(guardReactiveProps({ disabled: _ctx.disabled, selected: _ctx.selected, unselectable: _ctx.unselectable })), () => [
2674
2680
  createTextVNode(toDisplayString(unref(hintLabel)), 1)
2675
2681
  ])
2676
- ], 8, _hoisted_1$7)
2682
+ ], 8, _hoisted_1$8)
2677
2683
  ]),
2678
2684
  _: 3
2679
2685
  }, 8, ["class", "tabindex", "aria-selected", "aria-disabled"]);
2680
2686
  };
2681
2687
  }
2682
2688
  });
2689
+ const _hoisted_1$7 = {
2690
+ class: "vv-dropdown-optgroup",
2691
+ role: "presentation",
2692
+ tabindex: "-1"
2693
+ };
2694
+ const __default__$8 = {
2695
+ name: "VvDropdownOptgroup"
2696
+ };
2697
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2698
+ ...__default__$8,
2699
+ props: {
2700
+ ...LabelProps
2701
+ },
2702
+ setup(__props) {
2703
+ const props = __props;
2704
+ return (_ctx, _cache) => {
2705
+ return openBlock(), createElementBlock("li", _hoisted_1$7, toDisplayString(props.label), 1);
2706
+ };
2707
+ }
2708
+ });
2683
2709
  const VvSelectProps = {
2684
2710
  ...IdNameProps,
2685
2711
  ...AutofocusProps,
@@ -2783,7 +2809,9 @@ const _hoisted_4$3 = { class: "vv-select__inner" };
2783
2809
  const _hoisted_5$3 = ["id"];
2784
2810
  const _hoisted_6$3 = ["disabled", "hidden"];
2785
2811
  const _hoisted_7$3 = ["disabled", "value"];
2786
- const _hoisted_8$2 = {
2812
+ const _hoisted_8$2 = ["disabled", "label"];
2813
+ const _hoisted_9 = ["disabled", "value"];
2814
+ const _hoisted_10 = {
2787
2815
  key: 1,
2788
2816
  class: "vv-select__input-after"
2789
2817
  };
@@ -2875,7 +2903,12 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2875
2903
  invalid: props.invalid,
2876
2904
  modelValue: props.modelValue
2877
2905
  }));
2878
- const { getOptionLabel, getOptionValue, getOptionDisabled } = useOptions(props);
2906
+ const {
2907
+ getOptionLabel,
2908
+ getOptionValue,
2909
+ getOptionDisabled,
2910
+ getOptionGrouped
2911
+ } = useOptions(props);
2879
2912
  const localModelValue = computed({
2880
2913
  get: () => {
2881
2914
  return props.modelValue;
@@ -2887,6 +2920,11 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2887
2920
  emit("update:modelValue", newValue);
2888
2921
  }
2889
2922
  });
2923
+ const isGroup = (option) => {
2924
+ if (typeof option === "string")
2925
+ return false;
2926
+ return option && option.options && option.options.length > 0;
2927
+ };
2890
2928
  return (_ctx, _cache) => {
2891
2929
  return openBlock(), createElementBlock("div", {
2892
2930
  class: normalizeClass(unref(bemCssClasses))
@@ -2900,7 +2938,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2900
2938
  renderSlot(_ctx.$slots, "before", normalizeProps(guardReactiveProps(unref(slotProps))))
2901
2939
  ])) : createCommentVNode("", true),
2902
2940
  createElementVNode("div", _hoisted_4$3, [
2903
- unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
2941
+ unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
2904
2942
  key: 0,
2905
2943
  class: "vv-select__icon"
2906
2944
  }, unref(hasIcon)), null, 16)) : createCommentVNode("", true),
@@ -2917,21 +2955,35 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2917
2955
  hidden: !_ctx.unselectable
2918
2956
  }, toDisplayString(_ctx.placeholder), 9, _hoisted_6$3)) : createCommentVNode("", true),
2919
2957
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.options, (option, index) => {
2920
- return openBlock(), createElementBlock("option", {
2921
- key: index,
2922
- disabled: unref(getOptionDisabled)(option),
2923
- value: unref(getOptionValue)(option)
2924
- }, toDisplayString(unref(getOptionLabel)(option)), 9, _hoisted_7$3);
2925
- }), 128))
2958
+ return openBlock(), createElementBlock(Fragment, null, [
2959
+ !isGroup(option) ? (openBlock(), createElementBlock("option", {
2960
+ key: index,
2961
+ disabled: unref(getOptionDisabled)(option),
2962
+ value: unref(getOptionValue)(option)
2963
+ }, toDisplayString(unref(getOptionLabel)(option)), 9, _hoisted_7$3)) : (openBlock(), createElementBlock("optgroup", {
2964
+ key: `group-${index}`,
2965
+ disabled: unref(getOptionDisabled)(option),
2966
+ label: unref(getOptionLabel)(option)
2967
+ }, [
2968
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getOptionGrouped)(option), (item, i) => {
2969
+ return openBlock(), createElementBlock("option", {
2970
+ key: `group-${index}-item-${i}`,
2971
+ disabled: unref(getOptionDisabled)(item),
2972
+ value: unref(getOptionValue)(item)
2973
+ }, toDisplayString(unref(getOptionLabel)(item)), 9, _hoisted_9);
2974
+ }), 128))
2975
+ ], 8, _hoisted_8$2))
2976
+ ], 64);
2977
+ }), 256))
2926
2978
  ], 16, _hoisted_5$3), [
2927
2979
  [vModelSelect, unref(localModelValue)]
2928
2980
  ]),
2929
- unref(hasIconAfter) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
2981
+ unref(hasIconAfter) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
2930
2982
  key: 1,
2931
2983
  class: "vv-select__icon vv-select__icon-after"
2932
2984
  }, unref(hasIcon)), null, 16)) : createCommentVNode("", true)
2933
2985
  ]),
2934
- _ctx.$slots.after ? (openBlock(), createElementBlock("div", _hoisted_8$2, [
2986
+ _ctx.$slots.after ? (openBlock(), createElementBlock("div", _hoisted_10, [
2935
2987
  renderSlot(_ctx.$slots, "after", normalizeProps(guardReactiveProps(unref(slotProps))))
2936
2988
  ])) : createCommentVNode("", true)
2937
2989
  ]),
@@ -3012,7 +3064,7 @@ const _hoisted_8$1 = {
3012
3064
  };
3013
3065
  const __default__$6 = {
3014
3066
  name: "VvCombobox",
3015
- components: { VvDropdown: _sfc_main$a, VvDropdownOption: _sfc_main$8 }
3067
+ components: { VvDropdown: _sfc_main$b, VvDropdownOption: _sfc_main$9, VvDropdownOptgroup: _sfc_main$8 }
3016
3068
  };
3017
3069
  const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3018
3070
  ...__default__$6,
@@ -3026,6 +3078,12 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3026
3078
  VvComboboxProps,
3027
3079
  props
3028
3080
  );
3081
+ const isGroup = (option) => {
3082
+ if (typeof option === "string") {
3083
+ return false;
3084
+ }
3085
+ return option.options && option.options.length > 0;
3086
+ };
3029
3087
  const { HintSlot } = HintSlotFactory(props, slots);
3030
3088
  const inputEl = ref(null);
3031
3089
  const inputSearchEl = ref(null);
@@ -3132,7 +3190,12 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3132
3190
  const hasOptions = computed(
3133
3191
  () => props.searchable ? filteredOptions.value : props.options
3134
3192
  );
3135
- const { getOptionLabel, getOptionValue, getOptionDisabled } = useOptions(props);
3193
+ const {
3194
+ getOptionLabel,
3195
+ getOptionValue,
3196
+ getOptionDisabled,
3197
+ getOptionGrouped
3198
+ } = useOptions(props);
3136
3199
  const filteredOptions = computed(() => {
3137
3200
  var _a;
3138
3201
  return (_a = props.options) == null ? void 0 : _a.filter((option) => {
@@ -3152,9 +3215,20 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3152
3215
  } else if (props.modelValue) {
3153
3216
  selectedValues = [props.modelValue];
3154
3217
  }
3155
- return props.options.filter(
3156
- (option) => selectedValues.includes(getOptionValue(option))
3157
- );
3218
+ const options = props.options.reduce((acc, value) => {
3219
+ if (isGroup(value)) {
3220
+ return [...acc, ...getOptionGrouped(value)];
3221
+ }
3222
+ return [...acc, value];
3223
+ }, []);
3224
+ return options.filter((option) => {
3225
+ if (isGroup(option)) {
3226
+ return getOptionGrouped(option).some(
3227
+ (item) => selectedValues.includes(getOptionValue(item))
3228
+ );
3229
+ }
3230
+ return selectedValues.includes(getOptionValue(option));
3231
+ });
3158
3232
  });
3159
3233
  const hasValue = computed(() => {
3160
3234
  return selectedOptions.value.map((option) => getOptionLabel(option)).join(props.separator);
@@ -3269,7 +3343,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3269
3343
  ref: wrapperEl,
3270
3344
  class: "vv-select__wrapper"
3271
3345
  }, [
3272
- createVNode(_sfc_main$a, mergeProps({
3346
+ createVNode(_sfc_main$b, mergeProps({
3273
3347
  modelValue: unref(expanded),
3274
3348
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => isRef(expanded) ? expanded.value = $event : null)
3275
3349
  }, unref(dropdownProps), {
@@ -3280,7 +3354,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3280
3354
  renderSlot(_ctx.$slots, "before", normalizeProps(guardReactiveProps(unref(slotProps))))
3281
3355
  ])) : createCommentVNode("", true),
3282
3356
  createElementVNode("div", _hoisted_5$2, [
3283
- unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
3357
+ unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
3284
3358
  key: 0,
3285
3359
  class: "vv-select__icon"
3286
3360
  }, unref(hasIcon)), null, 16)) : createCommentVNode("", true),
@@ -3299,7 +3373,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3299
3373
  !_ctx.badges ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
3300
3374
  createTextVNode(toDisplayString(unref(hasValue)), 1)
3301
3375
  ], 64)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(unref(selectedOptions), (option, index) => {
3302
- return openBlock(), createBlock(_sfc_main$j, {
3376
+ return openBlock(), createBlock(_sfc_main$k, {
3303
3377
  key: index,
3304
3378
  modifiers: _ctx.badgeModifiers,
3305
3379
  class: "vv-select__badge"
@@ -3311,7 +3385,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3311
3385
  "aria-label": unref(propsDefaults).deselectActionLabel,
3312
3386
  onClick: withModifiers(($event) => onInput(option), ["stop"])
3313
3387
  }, [
3314
- createVNode(_sfc_main$h, { name: "close" })
3388
+ createVNode(_sfc_main$i, { name: "close" })
3315
3389
  ], 8, _hoisted_7$2)) : createCommentVNode("", true)
3316
3390
  ]),
3317
3391
  _: 2
@@ -3322,7 +3396,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3322
3396
  ], 64))
3323
3397
  ])
3324
3398
  ], 16, _hoisted_6$2),
3325
- unref(hasIconAfter) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
3399
+ unref(hasIconAfter) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
3326
3400
  key: 1,
3327
3401
  class: "vv-select__icon vv-select__icon-after"
3328
3402
  }, unref(hasIcon)), null, 16)) : createCommentVNode("", true)
@@ -3333,31 +3407,64 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3333
3407
  ]),
3334
3408
  items: withCtx(() => [
3335
3409
  unref(filteredOptions).length ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(filteredOptions), (option, index) => {
3336
- return openBlock(), createBlock(_sfc_main$8, mergeProps({
3337
- disabled: unref(getOptionDisabled)(option),
3338
- selected: getOptionSelected(option),
3339
- unselectable: _ctx.unselectable,
3340
- deselectHintLabel: unref(propsDefaults).deselectHintLabel,
3341
- selectHintLabel: unref(propsDefaults).selectHintLabel,
3342
- selectedHintLabel: unref(propsDefaults).selectedHintLabel
3343
- }, {
3344
- key: index,
3345
- class: "vv-dropdown-option",
3346
- onClickPassive: ($event) => onInput(option)
3347
- }), {
3348
- default: withCtx(() => [
3349
- renderSlot(_ctx.$slots, "option", normalizeProps(guardReactiveProps({
3350
- option,
3351
- selectedOptions: unref(selectedOptions),
3352
- selected: getOptionSelected(option),
3353
- disabled: unref(getOptionDisabled)(option)
3354
- })), () => [
3355
- createTextVNode(toDisplayString(unref(getOptionLabel)(option)), 1)
3356
- ])
3357
- ]),
3358
- _: 2
3359
- }, 1040, ["onClickPassive"]);
3360
- }), 128)) : !_ctx.options.length ? (openBlock(), createBlock(_sfc_main$8, {
3410
+ return openBlock(), createElementBlock(Fragment, { key: index }, [
3411
+ isGroup(option) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
3412
+ createVNode(_sfc_main$8, {
3413
+ label: unref(getOptionLabel)(option)
3414
+ }, null, 8, ["label"]),
3415
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getOptionGrouped)(
3416
+ option
3417
+ ), (item, i) => {
3418
+ return openBlock(), createBlock(_sfc_main$9, mergeProps({
3419
+ disabled: unref(getOptionDisabled)(item),
3420
+ selected: getOptionSelected(item),
3421
+ unselectable: _ctx.unselectable,
3422
+ deselectHintLabel: unref(propsDefaults).deselectHintLabel,
3423
+ selectHintLabel: unref(propsDefaults).selectHintLabel,
3424
+ selectedHintLabel: unref(propsDefaults).selectedHintLabel
3425
+ }, {
3426
+ key: i,
3427
+ class: "vv-dropdown-option",
3428
+ onClickPassive: ($event) => onInput(item)
3429
+ }), {
3430
+ default: withCtx(() => [
3431
+ renderSlot(_ctx.$slots, "option", normalizeProps(guardReactiveProps({
3432
+ option,
3433
+ selectedOptions: unref(selectedOptions),
3434
+ selected: getOptionSelected(item),
3435
+ disabled: unref(getOptionDisabled)(item)
3436
+ })), () => [
3437
+ createTextVNode(toDisplayString(unref(getOptionLabel)(item)), 1)
3438
+ ])
3439
+ ]),
3440
+ _: 2
3441
+ }, 1040, ["onClickPassive"]);
3442
+ }), 128))
3443
+ ], 64)) : (openBlock(), createBlock(_sfc_main$9, mergeProps({ key: 1 }, {
3444
+ disabled: unref(getOptionDisabled)(option),
3445
+ selected: getOptionSelected(option),
3446
+ unselectable: _ctx.unselectable,
3447
+ deselectHintLabel: unref(propsDefaults).deselectHintLabel,
3448
+ selectHintLabel: unref(propsDefaults).selectHintLabel,
3449
+ selectedHintLabel: unref(propsDefaults).selectedHintLabel
3450
+ }, {
3451
+ class: "vv-dropdown-option",
3452
+ onClickPassive: ($event) => onInput(option)
3453
+ }), {
3454
+ default: withCtx(() => [
3455
+ renderSlot(_ctx.$slots, "option", normalizeProps(guardReactiveProps({
3456
+ option,
3457
+ selectedOptions: unref(selectedOptions),
3458
+ selected: getOptionSelected(option),
3459
+ disabled: unref(getOptionDisabled)(option)
3460
+ })), () => [
3461
+ createTextVNode(toDisplayString(unref(getOptionLabel)(option)), 1)
3462
+ ])
3463
+ ]),
3464
+ _: 2
3465
+ }, 1040, ["onClickPassive"]))
3466
+ ], 64);
3467
+ }), 128)) : !_ctx.options.length ? (openBlock(), createBlock(_sfc_main$9, {
3361
3468
  key: 1,
3362
3469
  modifiers: "inert"
3363
3470
  }, {
@@ -3367,7 +3474,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3367
3474
  ])
3368
3475
  ]),
3369
3476
  _: 3
3370
- })) : (openBlock(), createBlock(_sfc_main$8, {
3477
+ })) : (openBlock(), createBlock(_sfc_main$9, {
3371
3478
  key: 2,
3372
3479
  modifiers: "inert"
3373
3480
  }, {
@@ -3545,7 +3652,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3545
3652
  class: "vv-dialog__close",
3546
3653
  onClickPassive: close
3547
3654
  }, [
3548
- createVNode(_sfc_main$h, { name: "close" })
3655
+ createVNode(_sfc_main$i, { name: "close" })
3549
3656
  ], 32)
3550
3657
  ])
3551
3658
  ])) : createCommentVNode("", true),
@@ -3757,7 +3864,7 @@ const VvInputTextProps = {
3757
3864
  };
3758
3865
  const VvInputPasswordAction = defineComponent({
3759
3866
  components: {
3760
- VvIcon: _sfc_main$h
3867
+ VvIcon: _sfc_main$i
3761
3868
  },
3762
3869
  props: {
3763
3870
  disabled: {
@@ -3801,7 +3908,7 @@ const VvInputPasswordAction = defineComponent({
3801
3908
  };
3802
3909
  },
3803
3910
  render() {
3804
- const icon = h(_sfc_main$h, {
3911
+ const icon = h(_sfc_main$i, {
3805
3912
  name: this.activeIcon,
3806
3913
  class: "vv-input-text__icon"
3807
3914
  });
@@ -3820,7 +3927,7 @@ const VvInputPasswordAction = defineComponent({
3820
3927
  });
3821
3928
  const VvInputStepAction = defineComponent({
3822
3929
  components: {
3823
- VvIcon: _sfc_main$h
3930
+ VvIcon: _sfc_main$i
3824
3931
  },
3825
3932
  props: {
3826
3933
  disabled: {
@@ -3865,7 +3972,7 @@ const VvInputStepAction = defineComponent({
3865
3972
  });
3866
3973
  const VvInputClearAction = defineComponent({
3867
3974
  components: {
3868
- VvIcon: _sfc_main$h
3975
+ VvIcon: _sfc_main$i
3869
3976
  },
3870
3977
  props: {
3871
3978
  disabled: {
@@ -3894,7 +4001,7 @@ const VvInputClearAction = defineComponent({
3894
4001
  };
3895
4002
  },
3896
4003
  render() {
3897
- const icon = h(_sfc_main$h, {
4004
+ const icon = h(_sfc_main$i, {
3898
4005
  name: this.icon,
3899
4006
  class: "vv-input-text__icon"
3900
4007
  });
@@ -3915,7 +4022,7 @@ function VvInputTextActionsFactory(type, parentProps) {
3915
4022
  return {
3916
4023
  name: "VvInputTextActions",
3917
4024
  components: {
3918
- VvIcon: _sfc_main$h,
4025
+ VvIcon: _sfc_main$i,
3919
4026
  VvInputPasswordAction,
3920
4027
  VvInputStepAction,
3921
4028
  VvInputClearAction
@@ -4323,7 +4430,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4323
4430
  class: "vv-input-text__inner",
4324
4431
  onClick: withModifiers(onClickInner, ["stop"])
4325
4432
  }, [
4326
- unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
4433
+ unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
4327
4434
  key: 0,
4328
4435
  class: "vv-input-text__icon"
4329
4436
  }, unref(hasIcon)), null, 16)) : createCommentVNode("", true),
@@ -4344,7 +4451,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4344
4451
  ])
4345
4452
  ])) : createCommentVNode("", true)
4346
4453
  ], 8, _hoisted_4$1),
4347
- unref(hasIconAfter) || unref(defaultAfterIcon) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
4454
+ unref(hasIconAfter) || unref(defaultAfterIcon) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
4348
4455
  key: 1,
4349
4456
  class: "vv-input-text__icon vv-input-text__icon-after"
4350
4457
  }, unref(hasIconAfter) ? unref(hasIcon) : unref(defaultAfterIcon)), null, 16)) : unref(isPassword) && !_ctx.hideActions && unref(isClickable) ? (openBlock(), createBlock(unref(PasswordInputActions), {
@@ -4796,7 +4903,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4796
4903
  renderSlot(_ctx.$slots, "before", normalizeProps(guardReactiveProps(unref(slotProps))))
4797
4904
  ])) : createCommentVNode("", true),
4798
4905
  createElementVNode("div", _hoisted_4, [
4799
- unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
4906
+ unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
4800
4907
  key: 0,
4801
4908
  class: "vv-textarea__icon"
4802
4909
  }, unref(hasIcon)), null, 16)) : createCommentVNode("", true),
@@ -4810,7 +4917,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4810
4917
  }), null, 16, _hoisted_5), [
4811
4918
  [vModelText, unref(localModelValue)]
4812
4919
  ]),
4813
- unref(hasIconAfter) ? (openBlock(), createBlock(_sfc_main$h, mergeProps({
4920
+ unref(hasIconAfter) ? (openBlock(), createBlock(_sfc_main$i, mergeProps({
4814
4921
  key: 1,
4815
4922
  class: "vv-textarea__icon vv-textarea__icon-after"
4816
4923
  }, unref(hasIcon)), null, 16)) : createCommentVNode("", true)
@@ -4833,19 +4940,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4833
4940
  }
4834
4941
  });
4835
4942
  export {
4836
- _sfc_main$l as VvAccordion,
4837
- _sfc_main$k as VvAccordionGroup,
4838
- _sfc_main$j as VvBadge,
4839
- _sfc_main$i as VvBreadcrumb,
4840
- _sfc_main$f as VvButton,
4841
- _sfc_main$e as VvButtonGroup,
4842
- _sfc_main$d as VvCard,
4843
- _sfc_main$c as VvCheckbox,
4844
- _sfc_main$b as VvCheckboxGroup,
4943
+ _sfc_main$m as VvAccordion,
4944
+ _sfc_main$l as VvAccordionGroup,
4945
+ _sfc_main$k as VvBadge,
4946
+ _sfc_main$j as VvBreadcrumb,
4947
+ _sfc_main$g as VvButton,
4948
+ _sfc_main$f as VvButtonGroup,
4949
+ _sfc_main$e as VvCard,
4950
+ _sfc_main$d as VvCheckbox,
4951
+ _sfc_main$c as VvCheckboxGroup,
4845
4952
  _sfc_main$6 as VvCombobox,
4846
4953
  _sfc_main$5 as VvDialog,
4847
- _sfc_main$a as VvDropdown,
4848
- _sfc_main$h as VvIcon,
4954
+ _sfc_main$b as VvDropdown,
4955
+ _sfc_main$i as VvIcon,
4849
4956
  _sfc_main$4 as VvInputText,
4850
4957
  _sfc_main$3 as VvProgress,
4851
4958
  _sfc_main$2 as VvRadio,