@bitrix24/b24ui-nuxt 0.6.8 → 0.7.0

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 (199) hide show
  1. package/.nuxt/b24ui/accordion.ts +20 -0
  2. package/.nuxt/b24ui/advice.ts +2 -10
  3. package/.nuxt/b24ui/alert.ts +2 -15
  4. package/.nuxt/b24ui/avatar-group.ts +2 -10
  5. package/.nuxt/b24ui/avatar.ts +3 -11
  6. package/.nuxt/b24ui/badge.ts +48 -13
  7. package/.nuxt/b24ui/button-group.ts +2 -22
  8. package/.nuxt/b24ui/button.ts +4 -17
  9. package/.nuxt/b24ui/calendar.ts +3 -11
  10. package/.nuxt/b24ui/checkbox.ts +75 -11
  11. package/.nuxt/b24ui/chip.ts +2 -10
  12. package/.nuxt/b24ui/collapsible.ts +2 -10
  13. package/.nuxt/b24ui/container.ts +2 -10
  14. package/.nuxt/b24ui/countdown.ts +2 -10
  15. package/.nuxt/b24ui/description-list.ts +2 -15
  16. package/.nuxt/b24ui/dropdown-menu.ts +4 -11
  17. package/.nuxt/b24ui/form-field.ts +3 -10
  18. package/.nuxt/b24ui/form.ts +2 -10
  19. package/.nuxt/b24ui/index.ts +1 -0
  20. package/.nuxt/b24ui/input-menu.ts +6 -30
  21. package/.nuxt/b24ui/input-number.ts +15 -10
  22. package/.nuxt/b24ui/input.ts +4 -17
  23. package/.nuxt/b24ui/kbd.ts +2 -10
  24. package/.nuxt/b24ui/link.ts +11 -17
  25. package/.nuxt/b24ui/modal.ts +3 -11
  26. package/.nuxt/b24ui/navbar-divider.ts +2 -10
  27. package/.nuxt/b24ui/navbar-section.ts +2 -10
  28. package/.nuxt/b24ui/navbar-spacer.ts +2 -10
  29. package/.nuxt/b24ui/navbar.ts +2 -10
  30. package/.nuxt/b24ui/navigation-menu.ts +69 -60
  31. package/.nuxt/b24ui/popover.ts +2 -10
  32. package/.nuxt/b24ui/progress.ts +2 -10
  33. package/.nuxt/b24ui/radio-group.ts +3 -11
  34. package/.nuxt/b24ui/range.ts +2 -10
  35. package/.nuxt/b24ui/select-menu.ts +10 -40
  36. package/.nuxt/b24ui/select.ts +10 -40
  37. package/.nuxt/b24ui/separator.ts +2 -10
  38. package/.nuxt/b24ui/sidebar-body.ts +2 -10
  39. package/.nuxt/b24ui/sidebar-footer.ts +2 -10
  40. package/.nuxt/b24ui/sidebar-header.ts +2 -10
  41. package/.nuxt/b24ui/sidebar-heading.ts +2 -10
  42. package/.nuxt/b24ui/sidebar-layout.ts +2 -10
  43. package/.nuxt/b24ui/sidebar-section.ts +2 -10
  44. package/.nuxt/b24ui/sidebar-spacer.ts +2 -10
  45. package/.nuxt/b24ui/sidebar.ts +2 -10
  46. package/.nuxt/b24ui/skeleton.ts +2 -10
  47. package/.nuxt/b24ui/slideover.ts +2 -10
  48. package/.nuxt/b24ui/stacked-layout.ts +2 -10
  49. package/.nuxt/b24ui/switch.ts +2 -10
  50. package/.nuxt/b24ui/tabs.ts +6 -13
  51. package/.nuxt/b24ui/textarea.ts +4 -17
  52. package/.nuxt/b24ui/toast.ts +2 -15
  53. package/.nuxt/b24ui/toaster.ts +3 -11
  54. package/.nuxt/b24ui/tooltip.ts +3 -11
  55. package/.nuxt/b24ui.css +1 -1
  56. package/cli/templates.mjs +2 -2
  57. package/dist/meta.d.mts +35333 -15836
  58. package/dist/meta.mjs +35333 -15836
  59. package/dist/module.json +1 -1
  60. package/dist/module.mjs +11 -3
  61. package/dist/runtime/components/Accordion.vue +96 -0
  62. package/dist/runtime/components/Accordion.vue.d.ts +78 -0
  63. package/dist/runtime/components/Advice.vue +1 -1
  64. package/dist/runtime/components/Alert.vue +1 -1
  65. package/dist/runtime/components/App.vue +1 -1
  66. package/dist/runtime/components/Avatar.vue +11 -3
  67. package/dist/runtime/components/Avatar.vue.d.ts +2 -1
  68. package/dist/runtime/components/AvatarGroup.vue +1 -1
  69. package/dist/runtime/components/Badge.vue +5 -3
  70. package/dist/runtime/components/Badge.vue.d.ts +2 -0
  71. package/dist/runtime/components/Button.vue +2 -3
  72. package/dist/runtime/components/Button.vue.d.ts +1 -1
  73. package/dist/runtime/components/Calendar.vue +1 -1
  74. package/dist/runtime/components/Checkbox.vue +13 -4
  75. package/dist/runtime/components/Checkbox.vue.d.ts +9 -0
  76. package/dist/runtime/components/Chip.vue +1 -1
  77. package/dist/runtime/components/Collapsible.vue +1 -1
  78. package/dist/runtime/components/Countdown.vue +1 -1
  79. package/dist/runtime/components/Countdown.vue.d.ts +2 -2
  80. package/dist/runtime/components/DescriptionList.vue +3 -2
  81. package/dist/runtime/components/DescriptionList.vue.d.ts +1 -1
  82. package/dist/runtime/components/DropdownMenu.vue +1 -1
  83. package/dist/runtime/components/DropdownMenu.vue.d.ts +2 -0
  84. package/dist/runtime/components/DropdownMenuContent.vue +74 -72
  85. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +4 -20
  86. package/dist/runtime/components/Form.vue +6 -6
  87. package/dist/runtime/components/Form.vue.d.ts +12 -11
  88. package/dist/runtime/components/FormField.vue +4 -4
  89. package/dist/runtime/components/Input.vue +12 -8
  90. package/dist/runtime/components/Input.vue.d.ts +31 -30
  91. package/dist/runtime/components/InputMenu.vue +23 -20
  92. package/dist/runtime/components/InputMenu.vue.d.ts +6 -4
  93. package/dist/runtime/components/InputNumber.vue +17 -10
  94. package/dist/runtime/components/InputNumber.vue.d.ts +6 -3
  95. package/dist/runtime/components/Link.vue +5 -13
  96. package/dist/runtime/components/Modal.vue +22 -14
  97. package/dist/runtime/components/Modal.vue.d.ts +18 -5
  98. package/dist/runtime/components/Navbar.vue +1 -1
  99. package/dist/runtime/components/NavbarDivider.vue +1 -1
  100. package/dist/runtime/components/NavbarSection.vue +1 -1
  101. package/dist/runtime/components/NavbarSpacer.vue +1 -1
  102. package/dist/runtime/components/NavigationMenu.vue +186 -44
  103. package/dist/runtime/components/NavigationMenu.vue.d.ts +39 -8
  104. package/dist/runtime/components/OverlayProvider.vue +2 -2
  105. package/dist/runtime/components/Popover.vue +4 -0
  106. package/dist/runtime/components/Popover.vue.d.ts +2 -1
  107. package/dist/runtime/components/Progress.vue +3 -2
  108. package/dist/runtime/components/Progress.vue.d.ts +2 -2
  109. package/dist/runtime/components/RadioGroup.vue +24 -8
  110. package/dist/runtime/components/RadioGroup.vue.d.ts +3 -1
  111. package/dist/runtime/components/Range.vue +2 -2
  112. package/dist/runtime/components/Range.vue.d.ts +19 -20
  113. package/dist/runtime/components/Select.vue +57 -31
  114. package/dist/runtime/components/Select.vue.d.ts +110 -2
  115. package/dist/runtime/components/SelectMenu.vue +77 -23
  116. package/dist/runtime/components/SelectMenu.vue.d.ts +111 -5
  117. package/dist/runtime/components/Separator.vue +3 -3
  118. package/dist/runtime/components/Sidebar.vue +1 -1
  119. package/dist/runtime/components/SidebarBody.vue +1 -1
  120. package/dist/runtime/components/SidebarFooter.vue +1 -1
  121. package/dist/runtime/components/SidebarHeader.vue +1 -1
  122. package/dist/runtime/components/SidebarHeading.vue +1 -1
  123. package/dist/runtime/components/SidebarLayout.vue +1 -1
  124. package/dist/runtime/components/SidebarSection.vue +1 -1
  125. package/dist/runtime/components/SidebarSpacer.vue +1 -1
  126. package/dist/runtime/components/Slideover.vue +23 -15
  127. package/dist/runtime/components/Slideover.vue.d.ts +18 -5
  128. package/dist/runtime/components/StackedLayout.vue +1 -1
  129. package/dist/runtime/components/Switch.vue +1 -1
  130. package/dist/runtime/components/Tabs.vue +28 -7
  131. package/dist/runtime/components/Tabs.vue.d.ts +6 -1
  132. package/dist/runtime/components/Textarea.vue +13 -9
  133. package/dist/runtime/components/Textarea.vue.d.ts +31 -30
  134. package/dist/runtime/components/Toast.vue +7 -6
  135. package/dist/runtime/components/Toast.vue.d.ts +6 -0
  136. package/dist/runtime/components/Toaster.vue +4 -4
  137. package/dist/runtime/components/Toaster.vue.d.ts +6 -0
  138. package/dist/runtime/components/Tooltip.vue +9 -2
  139. package/dist/runtime/components/Tooltip.vue.d.ts +2 -1
  140. package/dist/runtime/components/content/TableWrapper.vue +1 -1
  141. package/dist/runtime/composables/defineLocale.d.ts +2 -0
  142. package/dist/runtime/composables/defineLocale.js +4 -0
  143. package/dist/runtime/composables/defineShortcuts.js +8 -2
  144. package/dist/runtime/composables/useFormField.d.ts +1 -1
  145. package/dist/runtime/composables/useFormField.js +2 -1
  146. package/dist/runtime/composables/useKbd.d.ts +1 -0
  147. package/dist/runtime/composables/useKbd.js +4 -3
  148. package/dist/runtime/composables/useOverlay.d.ts +11 -11
  149. package/dist/runtime/composables/useOverlay.js +17 -11
  150. package/dist/runtime/inertia/components/Link.vue +45 -60
  151. package/dist/runtime/inertia/components/Link.vue.d.ts +1 -1
  152. package/dist/runtime/inertia/components/LinkBase.vue +68 -0
  153. package/dist/runtime/inertia/components/LinkBase.vue.d.ts +25 -0
  154. package/dist/runtime/inertia/stubs.d.ts +1 -1
  155. package/dist/runtime/inertia/stubs.js +1 -1
  156. package/dist/runtime/prose/A.vue +1 -1
  157. package/dist/runtime/prose/Blockquote.vue +1 -1
  158. package/dist/runtime/prose/Code.vue +1 -1
  159. package/dist/runtime/prose/Em.vue +1 -1
  160. package/dist/runtime/prose/H1.vue +1 -1
  161. package/dist/runtime/prose/H2.vue +1 -1
  162. package/dist/runtime/prose/H3.vue +1 -1
  163. package/dist/runtime/prose/H4.vue +1 -1
  164. package/dist/runtime/prose/H5.vue +1 -1
  165. package/dist/runtime/prose/H6.vue +1 -1
  166. package/dist/runtime/prose/Hr.vue +1 -1
  167. package/dist/runtime/prose/Img.vue +1 -1
  168. package/dist/runtime/prose/Li.vue +1 -1
  169. package/dist/runtime/prose/Ol.vue +1 -1
  170. package/dist/runtime/prose/P.vue +1 -1
  171. package/dist/runtime/prose/Pre.vue +1 -1
  172. package/dist/runtime/prose/Strong.vue +1 -1
  173. package/dist/runtime/prose/Table.vue +1 -1
  174. package/dist/runtime/prose/Tbody.vue +1 -1
  175. package/dist/runtime/prose/Td.vue +1 -1
  176. package/dist/runtime/prose/Th.vue +1 -1
  177. package/dist/runtime/prose/Thead.vue +1 -1
  178. package/dist/runtime/prose/Tr.vue +1 -1
  179. package/dist/runtime/prose/Ul.vue +1 -1
  180. package/dist/runtime/types/form.d.ts +11 -10
  181. package/dist/runtime/types/index.d.ts +1 -0
  182. package/dist/runtime/types/index.js +1 -0
  183. package/dist/runtime/types/locale.d.ts +1 -0
  184. package/dist/runtime/types/tv.d.ts +53 -0
  185. package/dist/runtime/types/tv.js +0 -0
  186. package/dist/runtime/types/utils.d.ts +4 -51
  187. package/dist/runtime/types/utils.js +1 -0
  188. package/dist/runtime/utils/link.d.ts +1 -0
  189. package/dist/runtime/utils/link.js +12 -0
  190. package/dist/runtime/vue/components/Link.vue +26 -40
  191. package/dist/runtime/vue/composables/useAppConfig.js +3 -1
  192. package/dist/runtime/vue/stubs.d.ts +1 -1
  193. package/dist/runtime/vue/stubs.js +1 -1
  194. package/dist/shared/{b24ui-nuxt.jU270f-Q.mjs → b24ui-nuxt.C-kZb5Ac.mjs} +267 -121
  195. package/dist/unplugin.d.mts +2 -2
  196. package/dist/unplugin.mjs +6 -3
  197. package/dist/vite.d.mts +1 -1
  198. package/dist/vite.mjs +2 -2
  199. package/package.json +30 -29
@@ -4,8 +4,9 @@ import theme from "#build/b24ui/navigation-menu";
4
4
 
5
5
  <script setup>
6
6
  import { computed, toRef } from "vue";
7
- import { NavigationMenuRoot, NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport, useForwardPropsEmits } from "reka-ui";
8
- import { createReusableTemplate } from "@vueuse/core";
7
+ import { NavigationMenuRoot, NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport, AccordionRoot, AccordionItem, AccordionTrigger, AccordionContent, useForwardPropsEmits } from "reka-ui";
8
+ import { defu } from "defu";
9
+ import { reactivePick, createReusableTemplate } from "@vueuse/core";
9
10
  import { useAppConfig } from "#imports";
10
11
  import { get, isArrayOfArray } from "../utils";
11
12
  import { tv } from "../utils/tv";
@@ -15,7 +16,8 @@ import B24LinkBase from "./LinkBase.vue";
15
16
  import B24Link from "./Link.vue";
16
17
  import B24Avatar from "./Avatar.vue";
17
18
  import B24Badge from "./Badge.vue";
18
- import B24Collapsible from "./Collapsible.vue";
19
+ import B24Popover from "./Popover.vue";
20
+ import B24Tooltip from "./Tooltip.vue";
19
21
  const props = defineProps({
20
22
  as: { type: null, required: false },
21
23
  trailingIcon: { type: [Function, Object], required: false },
@@ -25,6 +27,8 @@ const props = defineProps({
25
27
  variant: { type: null, required: false },
26
28
  orientation: { type: null, required: false, default: "horizontal" },
27
29
  collapsed: { type: Boolean, required: false },
30
+ tooltip: { type: [Boolean, Object], required: false },
31
+ popover: { type: [Boolean, Object], required: false },
28
32
  highlight: { type: Boolean, required: false },
29
33
  highlightColor: { type: null, required: false },
30
34
  content: { type: Object, required: false },
@@ -40,7 +44,10 @@ const props = defineProps({
40
44
  disableHoverTrigger: { type: Boolean, required: false },
41
45
  skipDelayDuration: { type: Number, required: false },
42
46
  disablePointerLeaveClose: { type: Boolean, required: false },
43
- unmountOnHide: { type: Boolean, required: false, default: true }
47
+ unmountOnHide: { type: Boolean, required: false, default: true },
48
+ disabled: { type: Boolean, required: false },
49
+ type: { type: String, required: false, default: "multiple" },
50
+ collapsible: { type: Boolean, required: false, default: true }
44
51
  });
45
52
  const emits = defineEmits(["update:modelValue"]);
46
53
  const slots = defineSlots();
@@ -57,7 +64,10 @@ const rootProps = useForwardPropsEmits(computed(() => ({
57
64
  disablePointerLeaveClose: props.disablePointerLeaveClose,
58
65
  unmountOnHide: props.unmountOnHide
59
66
  })), emits);
67
+ const accordionProps = useForwardPropsEmits(reactivePick(props, "collapsible", "disabled", "type", "unmountOnHide"), emits);
60
68
  const contentProps = toRef(() => props.content);
69
+ const tooltipProps = toRef(() => defu(typeof props.tooltip === "boolean" ? {} : props.tooltip, { delayDuration: 0, content: { side: "right" } }));
70
+ const popoverProps = toRef(() => defu(typeof props.popover === "boolean" ? {} : props.popover, { mode: "hover", content: { side: "right", align: "start", alignOffset: 2 } }));
61
71
  const [DefineLinkTemplate, ReuseLinkTemplate] = createReusableTemplate();
62
72
  const [DefineItemTemplate, ReuseItemTemplate] = createReusableTemplate({
63
73
  props: {
@@ -75,7 +85,7 @@ const getLabel = (item) => {
75
85
  };
76
86
  const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.navigationMenu || {} })({
77
87
  orientation: props.orientation,
78
- contentOrientation: props.contentOrientation,
88
+ contentOrientation: props.orientation === "vertical" ? void 0 : props.contentOrientation,
79
89
  collapsed: props.collapsed,
80
90
  color: props.color,
81
91
  variant: props.variant,
@@ -85,6 +95,15 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.navigat
85
95
  const lists = computed(
86
96
  () => props.items?.length ? isArrayOfArray(props.items) ? props.items : [props.items] : []
87
97
  );
98
+ function getAccordionDefaultValue(list, level = 0) {
99
+ const indexes = list.reduce((acc, item, index) => {
100
+ if (item.defaultOpen || item.open) {
101
+ acc.push(item.value || (level > 0 ? `item-${level}-${index}` : `item-${index}`));
102
+ }
103
+ return acc;
104
+ }, []);
105
+ return props.type === "single" ? indexes[0] : indexes;
106
+ }
88
107
  </script>
89
108
 
90
109
  <template>
@@ -95,14 +114,14 @@ const lists = computed(
95
114
  <Component
96
115
  :is="item.icon"
97
116
  v-if="item.icon"
98
- :class="b24ui.linkLeadingIcon({ class: props.b24ui?.linkLeadingIcon, active, disabled: !!item.disabled })"
117
+ :class="b24ui.linkLeadingIcon({ class: [props.b24ui?.linkLeadingIcon, item.b24ui?.linkLeadingIcon], active, disabled: !!item.disabled })"
99
118
  />
100
- <B24Avatar v-else-if="item.avatar" :size="props.b24ui?.linkLeadingAvatarSize || b24ui.linkLeadingAvatarSize()" v-bind="item.avatar" :class="b24ui.linkLeadingAvatar({ class: props.b24ui?.linkLeadingAvatar, active, disabled: !!item.disabled })" />
119
+ <B24Avatar v-else-if="item.avatar" :size="item.b24ui?.linkLeadingAvatarSize || props.b24ui?.linkLeadingAvatarSize || b24ui.linkLeadingAvatarSize()" v-bind="item.avatar" :class="b24ui.linkLeadingAvatar({ class: [props.b24ui?.linkLeadingAvatar, item.b24ui?.linkLeadingAvatar], active, disabled: !!item.disabled })" />
101
120
  </slot>
102
121
 
103
122
  <span
104
123
  v-if="(!collapsed || orientation !== 'vertical') && (getLabel(item) || !!slots[item.slot ? `${item.slot}-label` : 'item-label'])"
105
- :class="b24ui.linkLabel({ class: props.b24ui?.linkLabel, active })"
124
+ :class="b24ui.linkLabel({ class: [props.b24ui?.linkLabel, item.b24ui?.linkLabel], active })"
106
125
  >
107
126
  <slot :name="item.slot ? `${item.slot}-label` : 'item-label'" :item="item" :active="active" :index="index">
108
127
  {{ getLabel(item) }}
@@ -111,21 +130,27 @@ const lists = computed(
111
130
  <Component
112
131
  :is="typeof externalIcon !== 'boolean' ? externalIcon : icons.external"
113
132
  v-if="item.target === '_blank' && externalIcon !== false"
114
- :class="b24ui.linkLabelExternalIcon({ class: props.b24ui?.linkLabelExternalIcon, active })"
133
+ :class="b24ui.linkLabelExternalIcon({ class: [props.b24ui?.linkLabelExternalIcon, item.b24ui?.linkLabelExternalIcon], active })"
115
134
  />
116
135
  </span>
117
136
  </span>
118
- <span v-if="(!collapsed || orientation !== 'vertical') && (item.badge || orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) || orientation === 'vertical' && item.children?.length || item.trailingIcon || !!slots[item.slot ? `${item.slot}-trailing` : 'item-trailing'])" :class="b24ui.linkTrailing({ class: props.b24ui?.linkTrailing })">
137
+ <component
138
+ :is="orientation === 'vertical' && item.children?.length && !collapsed ? AccordionTrigger : 'span'"
139
+ v-if="(!collapsed || orientation !== 'vertical') && (item.badge || orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) || orientation === 'vertical' && item.children?.length || item.trailingIcon || !!slots[item.slot ? `${item.slot}-trailing` : 'item-trailing'])"
140
+ :class="b24ui.linkTrailing({ class: [props.b24ui?.linkTrailing, item.b24ui?.linkTrailing] })"
141
+ >
119
142
  <slot :name="item.slot ? `${item.slot}-trailing` : 'item-trailing'" :item="item" :active="active" :index="index">
120
143
  <Component
121
144
  :is="item.trailingIcon || trailingIcon || icons.chevronDown"
122
145
  v-if="orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) || orientation === 'vertical' && item.children?.length"
123
- :class="b24ui.linkTrailingIcon({ class: props.b24ui?.linkTrailingIcon, active })"
146
+ as="span"
147
+ :class="b24ui.linkTrailingIcon({ class: [props.b24ui?.linkTrailingIcon, item.b24ui?.linkTrailingIcon], active })"
148
+ @click.stop.prevent
124
149
  />
125
150
  <Component
126
151
  :is="item.trailingIcon"
127
152
  v-else-if="item.trailingIcon"
128
- :class="b24ui.linkTrailingIcon({ class: props.b24ui?.linkTrailingIcon, active })"
153
+ :class="b24ui.linkTrailingIcon({ class: [props.b24ui?.linkTrailingIcon, item.b24ui?.linkTrailingIcon], active })"
129
154
  />
130
155
 
131
156
  <B24Badge
@@ -133,36 +158,124 @@ const lists = computed(
133
158
  color="danger"
134
159
  depth="dark"
135
160
  :use-fill="true"
136
- :size="props.b24ui?.linkTrailingBadgeSize || b24ui.linkTrailingBadgeSize()"
161
+ :size="item.b24ui?.linkTrailingBadgeSize || props.b24ui?.linkTrailingBadgeSize || b24ui.linkTrailingBadgeSize()"
137
162
  v-bind="typeof item.badge === 'string' || typeof item.badge === 'number' ? { label: item.badge } : item.badge"
138
- :class="b24ui.linkTrailingBadge({ class: props.b24ui?.linkTrailingBadge })"
163
+ :class="b24ui.linkTrailingBadge({ class: [props.b24ui?.linkTrailingBadge, item.b24ui?.linkTrailingBadge] })"
139
164
  />
140
165
  </slot>
141
- </span>
166
+ </component>
142
167
  </slot>
143
168
  </DefineLinkTemplate>
144
169
 
145
170
  <DefineItemTemplate v-slot="{ item, index, level }">
146
171
  <component
147
- :is="orientation === 'vertical' && item.children?.length && !collapsed ? B24Collapsible : NavigationMenuItem"
172
+ :is="orientation === 'vertical' && !collapsed ? AccordionItem : NavigationMenuItem"
148
173
  as="li"
149
- :value="item.value || String(index)"
150
- :default-open="item.defaultOpen"
151
- :unmount-on-hide="orientation === 'vertical' && item.children?.length && !collapsed ? unmountOnHide : void 0"
152
- :open="item.open"
174
+ :value="item.value || ((level || 0) > 0 ? `item-${level}-${index}` : `item-${index}`)"
153
175
  >
154
- <div v-if="orientation === 'vertical' && item.type === 'label'" :class="b24ui.label({ class: props.b24ui?.label })">
176
+ <div
177
+ v-if="orientation === 'vertical' && item.type === 'label' && !collapsed"
178
+ :class="b24ui.label({ class: [props.b24ui?.label, item.b24ui?.label, item.class] })"
179
+ >
155
180
  <ReuseLinkTemplate :item="item" :index="index" />
156
181
  </div>
157
- <B24Link v-else-if="item.type !== 'label'" v-slot="{ active, ...slotProps }" v-bind="orientation === 'vertical' && item.children?.length && !collapsed ? {} : pickLinkProps(item)" custom>
182
+ <B24Link
183
+ v-else-if="item.type !== 'label'"
184
+ v-slot="{ active, ...slotProps }"
185
+ v-bind="orientation === 'vertical' && item.children?.length && !collapsed && item.type === 'trigger' ? {} : pickLinkProps(item)"
186
+ custom
187
+ >
158
188
  <component
159
- :is="orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) ? NavigationMenuTrigger : NavigationMenuLink"
189
+ :is="orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) ? NavigationMenuTrigger : orientation === 'vertical' && item.children?.length && !collapsed && !slotProps.href ? AccordionTrigger : NavigationMenuLink"
160
190
  as-child
161
191
  :active="active || item.active"
162
192
  :disabled="item.disabled"
163
193
  @select="item.onSelect"
164
194
  >
165
- <B24LinkBase v-bind="slotProps" :class="b24ui.link({ class: [props.b24ui?.link, item.class], active: active || item.active, disabled: !!item.disabled, level: orientation === 'horizontal' || (level || 0) > 0 })">
195
+ <B24Popover
196
+ v-if="orientation === 'vertical' && collapsed && item.children?.length && (!!props.popover || !!item.popover)"
197
+ v-bind="{ ...popoverProps, ...typeof item.popover === 'boolean' ? {} : item.popover || {} }"
198
+ :b24ui="{ content: b24ui.content({ class: [props.b24ui?.content, item.b24ui?.content] }) }"
199
+ >
200
+ <B24LinkBase
201
+ v-bind="slotProps"
202
+ :class="b24ui.link({
203
+ class: [props.b24ui?.link, item.b24ui?.link, item.class],
204
+ active: active || item.active,
205
+ disabled: !!item.disabled,
206
+ level: (level || 0) > 0
207
+ })"
208
+ >
209
+ <ReuseLinkTemplate :item="item" :active="active || item.active" :index="index" />
210
+ </B24LinkBase>
211
+
212
+ <template #content>
213
+ <slot :name="item.slot ? `${item.slot}-content` : 'item-content'" :item="item" :active="active || item.active" :index="index">
214
+ <ul :class="b24ui.childList({ class: [props.b24ui?.childList, item.b24ui?.childList] })">
215
+ <li :class="b24ui.childLabel({ class: [props.b24ui?.childLabel, item.b24ui?.childLabel] })">
216
+ {{ getLabel(item) }}
217
+ </li>
218
+ <li
219
+ v-for="(childItem, childIndex) in item.children"
220
+ :key="childIndex"
221
+ :class="b24ui.childItem({ class: [props.b24ui?.childItem, item.b24ui?.childItem] })"
222
+ >
223
+ <B24Link v-slot="{ active: childActive, ...childSlotProps }" v-bind="pickLinkProps(childItem)" custom>
224
+ <NavigationMenuLink as-child :active="childActive" @select="childItem.onSelect">
225
+ <B24LinkBase
226
+ v-bind="childSlotProps"
227
+ :class="b24ui.childLink({ class: [props.b24ui?.childLink, item.b24ui?.childLink, childItem.class], active: childActive })"
228
+ >
229
+ <Component
230
+ :is="childItem.icon"
231
+ v-if="childItem.icon"
232
+ :class="b24ui.childLinkIcon({ class: [props.b24ui?.childLinkIcon, item.b24ui?.childLinkIcon], active: childActive })"
233
+ />
234
+
235
+ <span :class="b24ui.childLinkLabel({ class: [props.b24ui?.childLinkLabel, item.b24ui?.childLinkLabel], active: childActive })">
236
+ {{ getLabel(childItem) }}
237
+
238
+ <Component
239
+ :is="typeof externalIcon === 'string' ? externalIcon : icons.external"
240
+ v-if="childItem.target === '_blank' && externalIcon !== false"
241
+ :class="b24ui.childLinkLabelExternalIcon({ class: [props.b24ui?.childLinkLabelExternalIcon, item.b24ui?.childLinkLabelExternalIcon], active: childActive })"
242
+ />
243
+ </span>
244
+ </B24LinkBase>
245
+ </NavigationMenuLink>
246
+ </B24Link>
247
+ </li>
248
+ </ul>
249
+ </slot>
250
+ </template>
251
+ </B24Popover>
252
+ <B24Tooltip
253
+ v-else-if="orientation === 'vertical' && collapsed && (!!props.tooltip || !!item.tooltip)"
254
+ :text="get(item, props.labelKey)"
255
+ v-bind="{ ...tooltipProps, ...typeof item.tooltip === 'boolean' ? {} : item.tooltip || {} }"
256
+ >
257
+ <B24LinkBase
258
+ v-bind="slotProps"
259
+ :class="b24ui.link({
260
+ class: [props.b24ui?.link, item.b24ui?.link, item.class],
261
+ active: active || item.active,
262
+ disabled: !!item.disabled,
263
+ level: (level || 0) > 0
264
+ })"
265
+ >
266
+ <ReuseLinkTemplate :item="item" :active="active || item.active" :index="index" />
267
+ </B24LinkBase>
268
+ </B24Tooltip>
269
+ <B24LinkBase
270
+ v-else
271
+ v-bind="slotProps"
272
+ :class="b24ui.link({
273
+ class: [props.b24ui?.link, item.b24ui?.link, item.class],
274
+ active: active || item.active,
275
+ disabled: !!item.disabled,
276
+ level: orientation === 'horizontal' || (level || 0) > 0
277
+ })"
278
+ >
166
279
  <ReuseLinkTemplate :item="item" :active="active || item.active" :index="index" />
167
280
  </B24LinkBase>
168
281
  </component>
@@ -171,31 +284,42 @@ const lists = computed(
171
284
  v-if="orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content'])"
172
285
  v-bind="contentProps"
173
286
  :data-viewport="item.viewportRtl ? 'rtl' : 'ltr'"
174
- :class="b24ui.content({ class: props.b24ui?.content })"
287
+ :class="b24ui.content({ class: [props.b24ui?.content, item.b24ui?.content] })"
175
288
  >
176
- <slot :name="item.slot ? `${item.slot}-content` : 'item-content'" :item="item" :active="active" :index="index">
177
- <ul :class="b24ui.childList({ class: props.b24ui?.childList })">
178
- <li v-for="(childItem, childIndex) in item.children" :key="childIndex" :class="b24ui.childItem({ class: props.b24ui?.childItem })">
179
- <B24Link v-slot="{ active: childActive, ...childSlotProps }" v-bind="pickLinkProps(childItem)" custom>
289
+ <slot :name="item.slot ? `${item.slot}-content` : 'item-content'" :item="item" :active="active || item.active" :index="index">
290
+ <ul :class="b24ui.childList({ class: [props.b24ui?.childList, item.b24ui?.childList] })">
291
+ <li
292
+ v-for="(childItem, childIndex) in item.children"
293
+ :key="childIndex"
294
+ :class="b24ui.childItem({ class: [props.b24ui?.childItem, item.b24ui?.childItem] })"
295
+ >
296
+ <B24Link
297
+ v-slot="{ active: childActive, ...childSlotProps }"
298
+ v-bind="pickLinkProps(childItem)"
299
+ custom
300
+ >
180
301
  <NavigationMenuLink as-child :active="childActive" @select="childItem.onSelect">
181
- <B24LinkBase v-bind="childSlotProps" :class="b24ui.childLink({ class: [props.b24ui?.childLink, childItem.class], active: childActive })">
302
+ <B24LinkBase
303
+ v-bind="childSlotProps"
304
+ :class="b24ui.childLink({ class: [props.b24ui?.childLink, childItem.childLink, childItem.class], active: childActive })"
305
+ >
182
306
  <Component
183
307
  :is="childItem.icon"
184
308
  v-if="childItem.icon"
185
- :class="b24ui.childLinkIcon({ class: props.b24ui?.childLinkIcon, active: childActive })"
309
+ :class="b24ui.childLinkIcon({ class: [props.b24ui?.childLinkIcon, item.b24ui?.childLinkIcon], active: childActive })"
186
310
  />
187
311
 
188
- <div :class="b24ui.childLinkWrapper({ class: props.b24ui?.childLinkWrapper })">
189
- <p :class="b24ui.childLinkLabel({ class: props.b24ui?.childLinkLabel, active: childActive })">
312
+ <div :class="b24ui.childLinkWrapper({ class: [props.b24ui?.childLinkWrapper, item.b24ui?.childLinkWrapper] })">
313
+ <p :class="b24ui.childLinkLabel({ class: [props.b24ui?.childLinkLabel, item.b24ui?.childLinkLabel], active: childActive })">
190
314
  {{ getLabel(childItem) }}
191
315
 
192
316
  <Component
193
317
  :is="typeof externalIcon === 'string' ? externalIcon : icons.external"
194
318
  v-if="childItem.target === '_blank' && externalIcon !== false"
195
- :class="b24ui.childLinkLabelExternalIcon({ class: props.b24ui?.childLinkLabelExternalIcon, active: childActive })"
319
+ :class="b24ui.childLinkLabelExternalIcon({ class: [props.b24ui?.childLinkLabelExternalIcon, item.b24ui?.childLinkLabelExternalIcon], active: childActive })"
196
320
  />
197
321
  </p>
198
- <p v-if="childItem.description" :class="b24ui.childLinkDescription({ class: props.b24ui?.childLinkDescription, active: childActive })">
322
+ <p v-if="childItem.description" :class="b24ui.childLinkDescription({ class: [props.b24ui?.childLinkDescription, item.b24ui?.childLinkDescription], active: childActive })">
199
323
  {{ childItem.description }}
200
324
  </p>
201
325
  </div>
@@ -208,39 +332,57 @@ const lists = computed(
208
332
  </NavigationMenuContent>
209
333
  </B24Link>
210
334
 
211
- <template v-if="orientation === 'vertical' && item.children?.length && !collapsed" #content>
212
- <ul :class="b24ui.childList({ class: props.b24ui?.childList })">
335
+ <AccordionContent
336
+ v-if="orientation === 'vertical' && item.children?.length && !collapsed"
337
+ :class="b24ui.content({ class: [props.b24ui?.content, item.b24ui?.content] })"
338
+ >
339
+ <AccordionRoot
340
+ v-bind="{
341
+ ...accordionProps,
342
+ defaultValue: getAccordionDefaultValue(item.children, (level || 0) + 1)
343
+ }"
344
+ as="ul"
345
+ :class="b24ui.childList({ class: props.b24ui?.childList })"
346
+ >
213
347
  <ReuseItemTemplate
214
348
  v-for="(childItem, childIndex) in item.children"
215
349
  :key="childIndex"
216
350
  :item="childItem"
217
351
  :index="childIndex"
218
352
  :level="(level || 0) + 1"
219
- :class="b24ui.childItem({ class: props.b24ui?.childItem })"
353
+ :class="b24ui.childItem({ class: [props.b24ui?.childItem, childItem.b24ui?.childItem] })"
220
354
  />
221
- </ul>
222
- </template>
355
+ </AccordionRoot>
356
+ </AccordionContent>
223
357
  </component>
224
358
  </DefineItemTemplate>
225
359
 
226
360
  <NavigationMenuRoot
227
361
  v-bind="rootProps"
228
362
  :data-collapsed="collapsed"
229
- :class="b24ui.root({ class: [props.class, props.b24ui?.root] })"
363
+ :class="b24ui.root({ class: [props.b24ui?.root, props.class] })"
230
364
  data-slot="section"
231
365
  >
232
366
  <slot name="list-leading" />
233
367
 
234
368
  <template v-for="(list, listIndex) in lists" :key="`list-${listIndex}`">
235
- <NavigationMenuList :class="b24ui.list({ class: props.b24ui?.list })">
369
+ <component
370
+ v-bind="orientation === 'vertical' && !collapsed ? {
371
+ ...accordionProps,
372
+ defaultValue: getAccordionDefaultValue(list)
373
+ } : {}"
374
+ :is="orientation === 'vertical' && !collapsed ? AccordionRoot : NavigationMenuList"
375
+ as="ul"
376
+ :class="b24ui.list({ class: props.b24ui?.list })"
377
+ >
236
378
  <ReuseItemTemplate
237
379
  v-for="(item, index) in list"
238
380
  :key="`list-${listIndex}-${index}`"
239
381
  :item="item"
240
382
  :index="index"
241
- :class="b24ui.item({ class: props.b24ui?.item })"
383
+ :class="b24ui.item({ class: [props.b24ui?.item, item.b24ui?.item] })"
242
384
  />
243
- </NavigationMenuList>
385
+ </component>
244
386
 
245
387
  <div v-if="orientation === 'vertical' && listIndex < lists.length - 1" :class="b24ui.separator({ class: props.b24ui?.separator })" />
246
388
  </template>
@@ -1,15 +1,15 @@
1
- import type { NavigationMenuRootProps, NavigationMenuRootEmits, NavigationMenuContentProps, NavigationMenuContentEmits, CollapsibleRootProps } from 'reka-ui';
1
+ import type { NavigationMenuRootProps, NavigationMenuRootEmits, NavigationMenuContentProps, NavigationMenuContentEmits, AccordionRootProps } from 'reka-ui';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
3
  import theme from '#build/b24ui/navigation-menu';
4
- import type { AvatarProps, BadgeProps, LinkProps, IconComponent } from '../types';
4
+ import type { AvatarProps, BadgeProps, LinkProps, PopoverProps, TooltipProps, IconComponent } from '../types';
5
5
  import type { ArrayOrNested, DynamicSlots, MergeTypes, NestedItem, EmitsToProps, ComponentConfig } from '../types/utils';
6
6
  type NavigationMenu = ComponentConfig<typeof theme, AppConfig, 'navigationMenu'>;
7
- export interface NavigationMenuChildItem extends Omit<NavigationMenuItem, 'type'> {
7
+ export interface NavigationMenuChildItem extends Omit<NavigationMenuItem, 'type' | 'b24ui'> {
8
8
  /** Description is only used when `orientation` is `horizontal`. */
9
9
  description?: string;
10
10
  [key: string]: any;
11
11
  }
12
- export interface NavigationMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'>, Pick<CollapsibleRootProps, 'defaultOpen' | 'open'> {
12
+ export interface NavigationMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'> {
13
13
  label?: string;
14
14
  /**
15
15
  * @IconComponent
@@ -18,30 +18,49 @@ export interface NavigationMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'cu
18
18
  avatar?: AvatarProps;
19
19
  /**
20
20
  * Display a badge on the item.
21
- * `{ size: 'sm', color: 'neutral', variant: 'outline' }`{lang="ts-type"}
21
+ * `{ size: 'sm', color: 'danger', depth: 'dark' }`{lang="ts"}
22
22
  */
23
23
  badge?: string | number | BadgeProps;
24
+ /**
25
+ * Display a tooltip on the item when the menu is collapsed with the label of the item.
26
+ * This has priority over the global `tooltip` prop.
27
+ */
28
+ tooltip?: boolean | TooltipProps;
29
+ /**
30
+ * Display a popover on the item when the menu is collapsed with the children list.
31
+ * This has priority over the global `popover` prop.
32
+ */
33
+ popover?: boolean | PopoverProps;
24
34
  /**
25
35
  * @IconComponent
26
36
  */
27
37
  trailingIcon?: IconComponent;
28
38
  /**
29
39
  * The type of the item.
30
- * The `label` type only works on `vertical` orientation.
40
+ * The `label` type is only displayed in `vertical` orientation.
41
+ * The `trigger` type is used to force the item to be collapsible when its a link in `vertical` orientation.
31
42
  * @defaultValue 'link'
32
43
  */
33
- type?: 'label' | 'link';
44
+ type?: 'label' | 'trigger' | 'link';
34
45
  slot?: string;
46
+ /**
47
+ * The value of the item. Avoid using `index` as the value to prevent conflicts in horizontal orientation with Reka UI.
48
+ * @defaultValue `item-${index}`
49
+ */
35
50
  value?: string;
36
51
  children?: NavigationMenuChildItem[];
37
52
  /**
38
53
  * With orientation=`horizontal` if `true` it will position the dropdown menu correctly
39
54
  */
40
55
  viewportRtl?: boolean;
56
+ defaultOpen?: boolean;
57
+ open?: boolean;
41
58
  onSelect?(e: Event): void;
59
+ class?: any;
60
+ b24ui?: Pick<NavigationMenu['slots'], 'item' | 'linkLeadingAvatarSize' | 'linkLeadingAvatar' | 'linkLeadingIcon' | 'linkLabel' | 'linkLabelExternalIcon' | 'linkTrailing' | 'linkTrailingBadgeSize' | 'linkTrailingBadge' | 'linkTrailingIcon' | 'label' | 'link' | 'content' | 'childList' | 'childLabel' | 'childItem' | 'childLink' | 'childLinkIcon' | 'childLinkWrapper' | 'childLinkLabel' | 'childLinkLabelExternalIcon' | 'childLinkDescription'>;
42
61
  [key: string]: any;
43
62
  }
44
- export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem> = ArrayOrNested<NavigationMenuItem>> extends Pick<NavigationMenuRootProps, 'modelValue' | 'defaultValue' | 'delayDuration' | 'disableClickTrigger' | 'disableHoverTrigger' | 'skipDelayDuration' | 'disablePointerLeaveClose' | 'unmountOnHide'> {
63
+ export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem> = ArrayOrNested<NavigationMenuItem>> extends Pick<NavigationMenuRootProps, 'modelValue' | 'defaultValue' | 'delayDuration' | 'disableClickTrigger' | 'disableHoverTrigger' | 'skipDelayDuration' | 'disablePointerLeaveClose' | 'unmountOnHide'>, Pick<AccordionRootProps, 'disabled' | 'type' | 'collapsible'> {
45
64
  /**
46
65
  * The element or component this component should render as.
47
66
  * @defaultValue 'div'
@@ -80,6 +99,18 @@ export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem>
80
99
  * @defaultValue false
81
100
  */
82
101
  collapsed?: boolean;
102
+ /**
103
+ * Display a tooltip on the items when the menu is collapsed with the label of the item.
104
+ * `{ delayDuration: 0, content: { side: 'right' } }`{lang="ts"}
105
+ * @defaultValue false
106
+ */
107
+ tooltip?: boolean | TooltipProps;
108
+ /**
109
+ * Display a popover on the items when the menu is collapsed with the children list.
110
+ * `{ mode: 'hover', content: { side: 'right', align: 'start', alignOffset: 2 } }`{lang="ts"}
111
+ * @defaultValue false
112
+ */
113
+ popover?: boolean | PopoverProps;
83
114
  /** Display a line next to the active item. */
84
115
  highlight?: boolean;
85
116
  /**
@@ -1,11 +1,11 @@
1
1
  <script setup>
2
2
  import { computed } from "vue";
3
3
  import { useOverlay } from "../composables/useOverlay";
4
- const { overlays, unMount, close } = useOverlay();
4
+ const { overlays, unmount, close } = useOverlay();
5
5
  const mountedOverlays = computed(() => overlays.filter((overlay) => overlay.isMounted));
6
6
  const onAfterLeave = (id) => {
7
7
  close(id);
8
- unMount(id);
8
+ unmount(id);
9
9
  };
10
10
  const onClose = (id, value) => {
11
11
  close(id, value);
@@ -58,6 +58,10 @@ const Component = computed(() => props.mode === "hover" ? HoverCard : Popover);
58
58
  <slot :open="open" />
59
59
  </Component.Trigger>
60
60
 
61
+ <Component.Anchor v-if="'Anchor' in Component && !!slots.anchor" as-child>
62
+ <slot name="anchor" />
63
+ </Component.Anchor>
64
+
61
65
  <Component.Portal v-bind="portalProps">
62
66
  <Component.Content v-bind="contentProps" :class="b24ui.content({ class: [!slots.default && props.class, props.b24ui?.content] })" v-on="contentEvents">
63
67
  <slot name="content" />
@@ -41,6 +41,7 @@ export interface PopoverSlots {
41
41
  open: boolean;
42
42
  }): any;
43
43
  content(props?: {}): any;
44
+ anchor(props?: {}): any;
44
45
  }
45
46
  declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PopoverProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
46
47
  "update:open": (value: boolean) => any;
@@ -49,8 +50,8 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PopoverPro
49
50
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
50
51
  "onClose:prevent"?: (() => any) | undefined;
51
52
  }>, {
52
- mode: "click" | "hover";
53
53
  portal: boolean | string | HTMLElement;
54
+ mode: "click" | "hover";
54
55
  dismissible: boolean;
55
56
  openDelay: number;
56
57
  closeDelay: number;
@@ -21,13 +21,14 @@ const props = defineProps({
21
21
  class: { type: null, required: false },
22
22
  b24ui: { type: null, required: false },
23
23
  getValueLabel: { type: Function, required: false },
24
+ getValueText: { type: Function, required: false },
24
25
  modelValue: { type: [Number, null], required: false, default: null }
25
26
  });
26
27
  const emits = defineEmits(["update:modelValue", "update:max"]);
27
28
  const slots = defineSlots();
28
29
  const { dir } = useLocale();
29
30
  const appConfig = useAppConfig();
30
- const rootProps = useForwardPropsEmits(reactivePick(props, "getValueLabel", "modelValue"), emits);
31
+ const rootProps = useForwardPropsEmits(reactivePick(props, "getValueLabel", "getValueText", "modelValue"), emits);
31
32
  const isIndeterminate = computed(() => rootProps.value.modelValue === null);
32
33
  const hasSteps = computed(() => Array.isArray(props.max));
33
34
  const realMax = computed(() => {
@@ -109,7 +110,7 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.progres
109
110
  </script>
110
111
 
111
112
  <template>
112
- <Primitive :as="as" :class="b24ui.root({ class: [props.class, props.b24ui?.root] })">
113
+ <Primitive :as="as" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
113
114
  <div v-if="!isIndeterminate && (status || !!slots.status)" :class="b24ui.status({ class: props.b24ui?.status })" :style="statusStyle">
114
115
  <slot name="status" :percent="percent">
115
116
  {{ percent }}%
@@ -3,7 +3,7 @@ import type { AppConfig } from '@nuxt/schema';
3
3
  import theme from '#build/b24ui/progress';
4
4
  import type { ComponentConfig } from '../types/utils';
5
5
  type Progress = ComponentConfig<typeof theme, AppConfig, 'progress'>;
6
- export interface ProgressProps extends Pick<ProgressRootProps, 'getValueLabel' | 'modelValue'> {
6
+ export interface ProgressProps extends Pick<ProgressRootProps, 'getValueLabel' | 'getValueText' | 'modelValue'> {
7
7
  /**
8
8
  * The element or component this component should render as.
9
9
  * @defaultValue 'div'
@@ -61,8 +61,8 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ProgressPr
61
61
  "onUpdate:max"?: ((value: number) => any) | undefined;
62
62
  }>, {
63
63
  orientation: Progress["variants"]["orientation"];
64
- inverted: boolean;
65
64
  modelValue: number | null;
65
+ inverted: boolean;
66
66
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ProgressSlots>;
67
67
  export default _default;
68
68
  type __VLS_WithSlots<T, S> = T & {
@@ -93,7 +93,7 @@ function onUpdate(value) {
93
93
  v-bind="rootProps"
94
94
  :name="name"
95
95
  :disabled="disabled"
96
- :class="b24ui.root({ class: [props.class, props.b24ui?.root] })"
96
+ :class="b24ui.root({ class: [props.b24ui?.root, props.class] })"
97
97
  @update:model-value="onUpdate"
98
98
  >
99
99
  <fieldset :class="b24ui.fieldset({ class: props.b24ui?.fieldset })" v-bind="ariaAttrs">
@@ -102,25 +102,41 @@ function onUpdate(value) {
102
102
  {{ legend }}
103
103
  </slot>
104
104
  </legend>
105
- <component :is="variant === 'list' ? 'div' : Label" v-for="item in normalizedItems" :key="item.value" :class="b24ui.item({ class: props.b24ui?.item })">
106
- <div :class="b24ui.container({ class: props.b24ui?.container })">
105
+ <component
106
+ :is="!variant || variant === 'list' ? 'div' : Label"
107
+ v-for="item in normalizedItems"
108
+ :key="item.value"
109
+ :class="b24ui.item({ class: [props.b24ui?.item, item.b24ui?.item, item.class] })"
110
+ >
111
+ <div :class="b24ui.container({ class: [props.b24ui?.container, item.b24ui?.container] })">
107
112
  <RadioGroupItem
108
113
  :id="item.id"
109
114
  :value="item.value"
110
115
  :disabled="item.disabled"
111
- :class="b24ui.base({ class: props.b24ui?.base, disabled: item.disabled })"
116
+ :class="b24ui.base({ class: [props.b24ui?.base, item.b24ui?.base], disabled: item.disabled })"
112
117
  >
113
- <RadioGroupIndicator :class="b24ui.indicator({ class: props.b24ui?.indicator })" />
118
+ <RadioGroupIndicator :class="b24ui.indicator({ class: [props.b24ui?.indicator, item.b24ui?.indicator] })" />
114
119
  </RadioGroupItem>
115
120
  </div>
116
121
 
117
- <div :class="b24ui.wrapper({ class: props.b24ui?.wrapper })">
118
- <component :is="variant === 'list' ? Label : 'p'" :class="b24ui.label({ class: props.b24ui?.label })" :for="item.id">
122
+ <div
123
+ v-if="item.label || !!slots.label || (item.description || !!slots.description)"
124
+ :class="b24ui.wrapper({ class: [props.b24ui?.wrapper, item.b24ui?.wrapper] })"
125
+ >
126
+ <component
127
+ :is="!variant || variant === 'list' ? Label : 'p'"
128
+ v-if="item.label || !!slots.label"
129
+ :for="item.id"
130
+ :class="b24ui.label({ class: [props.b24ui?.label, item.b24ui?.label] })"
131
+ >
119
132
  <slot name="label" :item="item" :model-value="modelValue">
120
133
  {{ item.label }}
121
134
  </slot>
122
135
  </component>
123
- <p v-if="item.description || !!slots.description" :class="b24ui.description({ class: props.b24ui?.description })">
136
+ <p
137
+ v-if="item.description || !!slots.description"
138
+ :class="b24ui.description({ class: [props.b24ui?.description, item.b24ui?.description] })"
139
+ >
124
140
  <slot name="description" :item="item" :model-value="modelValue">
125
141
  {{ item.description }}
126
142
  </slot>
@@ -8,7 +8,9 @@ export type RadioGroupItem = {
8
8
  label?: string;
9
9
  description?: string;
10
10
  disabled?: boolean;
11
- value?: string;
11
+ value?: RadioGroupValue;
12
+ class?: any;
13
+ b24ui?: Pick<RadioGroup['slots'], 'item' | 'container' | 'base' | 'indicator' | 'wrapper' | 'label' | 'description'>;
12
14
  [key: string]: any;
13
15
  } | RadioGroupValue;
14
16
  export interface RadioGroupProps<T extends RadioGroupItem = RadioGroupItem> extends Pick<RadioGroupRootProps, 'defaultValue' | 'disabled' | 'loop' | 'modelValue' | 'name' | 'required'> {