@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
@@ -26,7 +26,7 @@ const props = defineProps({
26
26
  minStepsBetweenThumbs: { type: Number, required: false }
27
27
  });
28
28
  const emits = defineEmits(["update:modelValue", "change"]);
29
- const modelValue = defineModel({ type: [Number, Array] });
29
+ const modelValue = defineModel({ type: null });
30
30
  const appConfig = useAppConfig();
31
31
  const rootProps = useForwardPropsEmits(reactivePick(props, "as", "orientation", "min", "max", "step", "minStepsBetweenThumbs", "inverted"), emits);
32
32
  const { id, emitFormChange, emitFormInput, size, color, name, disabled, ariaAttrs } = useFormField(props);
@@ -68,7 +68,7 @@ function onChange(value) {
68
68
  v-model="rangeValue"
69
69
  :name="name"
70
70
  :disabled="disabled"
71
- :class="b24ui.root({ class: [props.class, props.b24ui?.root] })"
71
+ :class="b24ui.root({ class: [props.b24ui?.root, props.class] })"
72
72
  :default-value="defaultRangeValue"
73
73
  @update:model-value="emitFormInput()"
74
74
  @value-commit="onChange"
@@ -29,26 +29,25 @@ export interface RangeProps extends Pick<SliderRootProps, 'name' | 'disabled' |
29
29
  class?: any;
30
30
  b24ui?: Range['slots'];
31
31
  }
32
- export interface RangeEmits {
33
- (e: 'update:modelValue', payload: number | number[]): void;
32
+ export interface RangeEmits<T extends number | number[] = number | number[]> {
33
+ (e: 'update:modelValue', payload: T): void;
34
34
  (e: 'change', payload: Event): void;
35
35
  }
36
- declare const _default: import("vue").DefineComponent<RangeProps & {
37
- modelValue?: number | number[];
38
- }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
39
- "update:modelValue": (value: number | number[] | undefined) => any;
40
- } & {
41
- change: (payload: Event) => any;
42
- "update:modelValue": (payload: number | number[]) => any;
43
- }, string, import("vue").PublicProps, Readonly<RangeProps & {
44
- modelValue?: number | number[];
45
- }> & Readonly<{
46
- onChange?: ((payload: Event) => any) | undefined;
47
- "onUpdate:modelValue"?: ((payload: number | number[]) => any) | undefined;
48
- }>, {
49
- orientation: "horizontal" | "vertical";
50
- step: number;
51
- max: number;
52
- min: number;
53
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
36
+ declare const _default: <T extends number | number[]>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
37
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
38
+ readonly onChange?: ((payload: Event) => any) | undefined;
39
+ readonly "onUpdate:modelValue"?: ((payload: T) => any) | undefined;
40
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onChange" | "onUpdate:modelValue"> & (RangeProps & {
41
+ modelValue?: T;
42
+ }) & Partial<{}>> & import("vue").PublicProps;
43
+ expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
44
+ attrs: any;
45
+ slots: {};
46
+ emit: RangeEmits<T> & ((evt: "update:modelValue", value: T | undefined) => void);
47
+ }>) => import("vue").VNode & {
48
+ __ctx?: Awaited<typeof __VLS_setup>;
49
+ };
54
50
  export default _default;
51
+ type __VLS_PrettifyLocal<T> = {
52
+ [K in keyof T]: T[K];
53
+ } & {};
@@ -3,8 +3,8 @@ import theme from "#build/b24ui/select";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { computed, toRef } from "vue";
7
- import { Primitive, SelectRoot, SelectArrow, SelectTrigger, SelectPortal, SelectContent, SelectViewport, SelectScrollUpButton, SelectScrollDownButton, SelectLabel, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectSeparator, useForwardPropsEmits } from "reka-ui";
6
+ import { ref, computed, onMounted, toRef } from "vue";
7
+ import { Primitive, SelectRoot, SelectArrow, SelectTrigger, SelectPortal, SelectContent, SelectLabel, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectSeparator, useForwardPropsEmits } from "reka-ui";
8
8
  import { defu } from "defu";
9
9
  import { reactivePick } from "@vueuse/core";
10
10
  import { useAppConfig } from "#imports";
@@ -41,6 +41,8 @@ const props = defineProps({
41
41
  modelValue: { type: null, required: false },
42
42
  multiple: { type: Boolean, required: false },
43
43
  highlight: { type: Boolean, required: false },
44
+ autofocus: { type: Boolean, required: false },
45
+ autofocusDelay: { type: Number, required: false, default: 0 },
44
46
  class: { type: null, required: false },
45
47
  b24ui: { type: null, required: false },
46
48
  open: { type: Boolean, required: false },
@@ -91,11 +93,25 @@ const groups = computed(
91
93
  const items = computed(() => groups.value.flatMap((group) => group));
92
94
  function displayValue(value) {
93
95
  if (props.multiple && Array.isArray(value)) {
94
- return value.map((v) => displayValue(v)).filter(Boolean).join(", ");
96
+ const values = value.map((v) => displayValue(v)).filter(Boolean);
97
+ return values?.length ? values.join(", ") : void 0;
95
98
  }
96
99
  const item = items.value.find((item2) => compare(typeof item2 === "object" ? get(item2, props.valueKey) : item2, value));
97
100
  return item && (typeof item === "object" ? get(item, props.labelKey) : item);
98
101
  }
102
+ const triggerRef = ref(null);
103
+ function autoFocus() {
104
+ if (props.autofocus) {
105
+ triggerRef.value?.$el?.focus({
106
+ focusVisible: true
107
+ });
108
+ }
109
+ }
110
+ onMounted(() => {
111
+ setTimeout(() => {
112
+ autoFocus();
113
+ }, props.autofocusDelay);
114
+ });
99
115
  function onUpdate(value) {
100
116
  const event = new Event("change", { target: { value } });
101
117
  emits("change", event);
@@ -116,6 +132,9 @@ function onUpdateOpen(value) {
116
132
  function isSelectItem(item) {
117
133
  return typeof item === "object" && item !== null;
118
134
  }
135
+ defineExpose({
136
+ triggerRef
137
+ });
119
138
  </script>
120
139
 
121
140
  <template>
@@ -131,7 +150,12 @@ function isSelectItem(item) {
131
150
  @update:model-value="onUpdate"
132
151
  @update:open="onUpdateOpen"
133
152
  >
134
- <SelectTrigger :id="id" :class="b24ui.base({ class: [props.class, props.b24ui?.base] })" v-bind="{ ...$attrs, ...ariaAttrs }">
153
+ <SelectTrigger
154
+ :id="id"
155
+ ref="triggerRef"
156
+ :class="b24ui.base({ class: [props.b24ui?.base, props.class] })"
157
+ v-bind="{ ...$attrs, ...ariaAttrs }"
158
+ >
135
159
  <div v-if="isTag" :class="b24ui.tag({ class: props.b24ui?.tag })">
136
160
  {{ props.tag }}
137
161
  </div>
@@ -149,11 +173,17 @@ function isSelectItem(item) {
149
173
 
150
174
  <slot :model-value="modelValue" :open="open">
151
175
  <template v-for="displayedModelValue in [displayValue(modelValue)]" :key="displayedModelValue">
152
- <span v-if="displayedModelValue" :class="b24ui.value({ class: props.b24ui?.value })">
176
+ <span
177
+ v-if="displayedModelValue !== void 0 && displayedModelValue !== null"
178
+ :class="b24ui.value({ class: props.b24ui?.value })"
179
+ >
153
180
  {{ displayedModelValue }}
154
181
  </span>
155
- <span v-else :class="b24ui.placeholder({ class: props.b24ui?.placeholder })">
156
- {{ placeholder ?? '\xA0' }}
182
+ <span
183
+ v-else
184
+ :class="b24ui.placeholder({ class: props.b24ui?.placeholder })"
185
+ >
186
+ {{ placeholder ?? "\xA0" }}
157
187
  </span>
158
188
  </template>
159
189
  </slot>
@@ -173,24 +203,21 @@ function isSelectItem(item) {
173
203
  <SelectContent :class="b24ui.content({ class: props.b24ui?.content })" v-bind="contentProps">
174
204
  <slot name="content-top" />
175
205
 
176
- <SelectScrollUpButton :class="b24ui.scrollUpDownButton({ class: props.b24ui?.scrollUpDownButton })">
177
- <Component
178
- :is="icons.chevronUp"
179
- :class="b24ui.scrollUpDownButtonIcon({ class: props.b24ui?.scrollUpDownButtonIcon })"
180
- />
181
- </SelectScrollUpButton>
182
- <SelectViewport :class="b24ui.viewport({ class: props.b24ui?.viewport })">
206
+ <div
207
+ role="presentation"
208
+ :class="b24ui.viewport({ class: props.b24ui?.viewport })"
209
+ >
183
210
  <SelectGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="b24ui.group({ class: props.b24ui?.group })">
184
211
  <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
185
- <SelectLabel v-if="isSelectItem(item) && item.type === 'label'" :class="b24ui.label({ class: props.b24ui?.label })">
212
+ <SelectLabel v-if="isSelectItem(item) && item.type === 'label'" :class="b24ui.label({ class: [props.b24ui?.label, item.b24ui?.label, item.class] })">
186
213
  {{ get(item, props.labelKey) }}
187
214
  </SelectLabel>
188
215
 
189
- <SelectSeparator v-else-if="isSelectItem(item) && item.type === 'separator'" :class="b24ui.separator({ class: props.b24ui?.separator })" />
216
+ <SelectSeparator v-else-if="isSelectItem(item) && item.type === 'separator'" :class="b24ui.separator({ class: [props.b24ui?.separator, item.b24ui?.separator, item.class] })" />
190
217
 
191
218
  <SelectItem
192
219
  v-else
193
- :class="b24ui.item({ class: props.b24ui?.item, colorItem: isSelectItem(item) ? item?.color : void 0 })"
220
+ :class="b24ui.item({ class: [props.b24ui?.item, isSelectItem(item) && item.b24ui?.item, isSelectItem(item) && item.class], colorItem: isSelectItem(item) && item?.color || void 0 })"
194
221
  :disabled="isSelectItem(item) && item.disabled"
195
222
  :value="isSelectItem(item) ? get(item, props.valueKey) : item"
196
223
  @select="isSelectItem(item) && item.onSelect?.($event)"
@@ -200,32 +227,37 @@ function isSelectItem(item) {
200
227
  <Component
201
228
  :is="item.icon"
202
229
  v-if="isSelectItem(item) && item.icon"
203
- :class="b24ui.itemLeadingIcon({ class: props.b24ui?.itemLeadingIcon, colorItem: item?.color })"
230
+ :class="b24ui.itemLeadingIcon({ class: [props.b24ui?.itemLeadingIcon, item.b24ui?.itemLeadingIcon], colorItem: item?.color })"
231
+ />
232
+ <B24Avatar
233
+ v-else-if="isSelectItem(item) && item.avatar"
234
+ :size="item.b24ui?.itemLeadingAvatarSize || props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()"
235
+ v-bind="item.avatar"
236
+ :class="b24ui.itemLeadingAvatar({ class: [props.b24ui?.itemLeadingAvatar, item.b24ui?.itemLeadingAvatar], colorItem: item?.color })"
204
237
  />
205
- <B24Avatar v-else-if="isSelectItem(item) && item.avatar" :size="props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()" v-bind="item.avatar" :class="b24ui.itemLeadingAvatar({ class: props.b24ui?.itemLeadingAvatar, colorItem: item?.color })" />
206
238
  <B24Chip
207
239
  v-else-if="isSelectItem(item) && item.chip"
208
- :size="props.b24ui?.itemLeadingChipSize || b24ui.itemLeadingChipSize()"
240
+ :size="item.b24ui?.itemLeadingChipSize || props.b24ui?.itemLeadingChipSize || b24ui.itemLeadingChipSize()"
209
241
  inset
210
242
  standalone
211
243
  v-bind="item.chip"
212
- :class="b24ui.itemLeadingChip({ class: props.b24ui?.itemLeadingChip, colorItem: item?.color })"
244
+ :class="b24ui.itemLeadingChip({ class: [props.b24ui?.itemLeadingChip, item.b24ui?.itemLeadingChip], colorItem: item?.color })"
213
245
  />
214
246
  </slot>
215
247
 
216
- <SelectItemText :class="b24ui.itemLabel({ class: props.b24ui?.itemLabel })">
248
+ <SelectItemText :class="b24ui.itemLabel({ class: [props.b24ui?.itemLabel, isSelectItem(item) && item.b24ui?.itemLabel] })">
217
249
  <slot name="item-label" :item="item" :index="index">
218
250
  {{ isSelectItem(item) ? get(item, props.labelKey) : item }}
219
251
  </slot>
220
252
  </SelectItemText>
221
253
 
222
- <span :class="b24ui.itemTrailing({ class: props.b24ui?.itemTrailing, colorItem: isSelectItem(item) ? item?.color : void 0 })">
254
+ <span :class="b24ui.itemTrailing({ class: [props.b24ui?.itemTrailing, isSelectItem(item) && item.b24ui?.itemTrailing], colorItem: isSelectItem(item) && item?.color || void 0 })">
223
255
  <slot name="item-trailing" :item="item" :index="index" />
224
256
 
225
257
  <SelectItemIndicator as-child>
226
258
  <Component
227
259
  :is="selectedIcon || icons.check"
228
- :class="b24ui.itemTrailingIcon({ class: props.b24ui?.itemTrailingIcon, colorItem: isSelectItem(item) ? item?.color : void 0 })"
260
+ :class="b24ui.itemTrailingIcon({ class: [props.b24ui?.itemTrailingIcon, isSelectItem(item) && item.b24ui?.itemTrailingIcon], colorItem: isSelectItem(item) && item?.color || void 0 })"
229
261
  />
230
262
  </SelectItemIndicator>
231
263
  </span>
@@ -233,13 +265,7 @@ function isSelectItem(item) {
233
265
  </SelectItem>
234
266
  </template>
235
267
  </SelectGroup>
236
- </SelectViewport>
237
- <SelectScrollDownButton :class="b24ui.scrollUpDownButton({ class: props.b24ui?.scrollUpDownButton })">
238
- <Component
239
- :is="icons.chevronDown"
240
- :class="b24ui.scrollUpDownButtonIcon({ class: props.b24ui?.scrollUpDownButtonIcon })"
241
- />
242
- </SelectScrollDownButton>
268
+ </div>
243
269
 
244
270
  <slot name="content-bottom" />
245
271
 
@@ -20,9 +20,11 @@ interface SelectItemBase {
20
20
  * @defaultValue 'item'
21
21
  */
22
22
  type?: 'label' | 'separator' | 'item';
23
- value?: string | number;
23
+ value?: AcceptableValue | boolean;
24
24
  disabled?: boolean;
25
25
  onSelect?(e?: Event): void;
26
+ class?: any;
27
+ b24ui?: Pick<Select['slots'], 'label' | 'separator' | 'item' | 'itemLeadingIcon' | 'itemLeadingAvatarSize' | 'itemLeadingAvatar' | 'itemLeadingChipSize' | 'itemLeadingChip' | 'itemLabel' | 'itemTrailing' | 'itemTrailingIcon'>;
26
28
  [key: string]: any;
27
29
  }
28
30
  export type SelectItem = SelectItemBase | AcceptableValue | boolean;
@@ -119,6 +121,8 @@ export interface SelectProps<T extends ArrayOrNested<SelectItem> = ArrayOrNested
119
121
  * @defaultValue false
120
122
  */
121
123
  highlight?: boolean;
124
+ autofocus?: boolean;
125
+ autofocusDelay?: number;
122
126
  class?: any;
123
127
  b24ui?: Select['slots'];
124
128
  }
@@ -165,7 +169,111 @@ declare const _default: <T extends ArrayOrNested<SelectItem>, VK extends GetItem
165
169
  readonly "onUpdate:open"?: ((value: boolean) => any) | undefined;
166
170
  readonly "onUpdate:modelValue"?: ((payload: GetModelValue<T, VK, M>) => any) | undefined;
167
171
  } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onFocus" | "onBlur" | "onChange" | "onUpdate:open" | "onUpdate:modelValue"> & SelectProps<T, VK, M> & Partial<{}>> & import("vue").PublicProps;
168
- expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
172
+ expose(exposed: import("vue").ShallowUnwrapRef<{
173
+ triggerRef: import("vue").Ref<({
174
+ $: import("vue").ComponentInternalInstance;
175
+ $data: {};
176
+ $props: {
177
+ readonly disabled?: boolean | undefined;
178
+ readonly reference?: import("reka-ui").ReferenceElement | undefined;
179
+ readonly asChild?: boolean | undefined;
180
+ readonly as?: (import("reka-ui").AsTag | import("vue").Component) | undefined;
181
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
182
+ $attrs: {
183
+ [x: string]: unknown;
184
+ };
185
+ $refs: {
186
+ [x: string]: unknown;
187
+ };
188
+ $slots: Readonly<{
189
+ [name: string]: import("vue").Slot<any> | undefined;
190
+ }>;
191
+ $root: import("vue").ComponentPublicInstance | null;
192
+ $parent: import("vue").ComponentPublicInstance | null;
193
+ $host: Element | null;
194
+ $emit: (event: string, ...args: any[]) => void;
195
+ $el: any;
196
+ $options: import("vue").ComponentOptionsBase<Readonly<import("reka-ui").SelectTriggerProps> & Readonly<{}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {
197
+ as: import("reka-ui").AsTag | import("vue").Component;
198
+ }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & {
199
+ beforeCreate?: (() => void) | (() => void)[];
200
+ created?: (() => void) | (() => void)[];
201
+ beforeMount?: (() => void) | (() => void)[];
202
+ mounted?: (() => void) | (() => void)[];
203
+ beforeUpdate?: (() => void) | (() => void)[];
204
+ updated?: (() => void) | (() => void)[];
205
+ activated?: (() => void) | (() => void)[];
206
+ deactivated?: (() => void) | (() => void)[];
207
+ beforeDestroy?: (() => void) | (() => void)[];
208
+ beforeUnmount?: (() => void) | (() => void)[];
209
+ destroyed?: (() => void) | (() => void)[];
210
+ unmounted?: (() => void) | (() => void)[];
211
+ renderTracked?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
212
+ renderTriggered?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
213
+ errorCaptured?: ((err: unknown, instance: import("vue").ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import("vue").ComponentPublicInstance | null, info: string) => boolean | void)[];
214
+ };
215
+ $forceUpdate: () => void;
216
+ $nextTick: typeof import("vue").nextTick;
217
+ $watch<T_1 extends string | ((...args: any) => any)>(source: T_1, cb: T_1 extends (...args: any) => infer R ? (...args: [R, R, import("@vue/reactivity").OnCleanup]) => any : (...args: [any, any, import("@vue/reactivity").OnCleanup]) => any, options?: import("vue").WatchOptions): import("vue").WatchStopHandle;
218
+ } & Readonly<{
219
+ as: import("reka-ui").AsTag | import("vue").Component;
220
+ }> & Omit<Readonly<import("reka-ui").SelectTriggerProps> & Readonly<{}>, "as"> & import("vue").ShallowUnwrapRef<{}> & {} & import("vue").ComponentCustomProperties & {} & {
221
+ $slots: {
222
+ default?(_: {}): any;
223
+ };
224
+ }) | null, ({
225
+ $: import("vue").ComponentInternalInstance;
226
+ $data: {};
227
+ $props: {
228
+ readonly disabled?: boolean | undefined;
229
+ readonly reference?: import("reka-ui").ReferenceElement | undefined;
230
+ readonly asChild?: boolean | undefined;
231
+ readonly as?: (import("reka-ui").AsTag | import("vue").Component) | undefined;
232
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
233
+ $attrs: {
234
+ [x: string]: unknown;
235
+ };
236
+ $refs: {
237
+ [x: string]: unknown;
238
+ };
239
+ $slots: Readonly<{
240
+ [name: string]: import("vue").Slot<any> | undefined;
241
+ }>;
242
+ $root: import("vue").ComponentPublicInstance | null;
243
+ $parent: import("vue").ComponentPublicInstance | null;
244
+ $host: Element | null;
245
+ $emit: (event: string, ...args: any[]) => void;
246
+ $el: any;
247
+ $options: import("vue").ComponentOptionsBase<Readonly<import("reka-ui").SelectTriggerProps> & Readonly<{}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {
248
+ as: import("reka-ui").AsTag | import("vue").Component;
249
+ }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & {
250
+ beforeCreate?: (() => void) | (() => void)[];
251
+ created?: (() => void) | (() => void)[];
252
+ beforeMount?: (() => void) | (() => void)[];
253
+ mounted?: (() => void) | (() => void)[];
254
+ beforeUpdate?: (() => void) | (() => void)[];
255
+ updated?: (() => void) | (() => void)[];
256
+ activated?: (() => void) | (() => void)[];
257
+ deactivated?: (() => void) | (() => void)[];
258
+ beforeDestroy?: (() => void) | (() => void)[];
259
+ beforeUnmount?: (() => void) | (() => void)[];
260
+ destroyed?: (() => void) | (() => void)[];
261
+ unmounted?: (() => void) | (() => void)[];
262
+ renderTracked?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
263
+ renderTriggered?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
264
+ errorCaptured?: ((err: unknown, instance: import("vue").ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import("vue").ComponentPublicInstance | null, info: string) => boolean | void)[];
265
+ };
266
+ $forceUpdate: () => void;
267
+ $nextTick: typeof import("vue").nextTick;
268
+ $watch<T_1 extends string | ((...args: any) => any)>(source: T_1, cb: T_1 extends (...args: any) => infer R ? (...args: [R, R, import("@vue/reactivity").OnCleanup]) => any : (...args: [any, any, import("@vue/reactivity").OnCleanup]) => any, options?: import("vue").WatchOptions): import("vue").WatchStopHandle;
269
+ } & Readonly<{
270
+ as: import("reka-ui").AsTag | import("vue").Component;
271
+ }> & Omit<Readonly<import("reka-ui").SelectTriggerProps> & Readonly<{}>, "as"> & import("vue").ShallowUnwrapRef<{}> & {} & import("vue").ComponentCustomProperties & {} & {
272
+ $slots: {
273
+ default?(_: {}): any;
274
+ };
275
+ }) | null>;
276
+ }>): void;
169
277
  attrs: any;
170
278
  slots: SelectSlots<T, VK, M, NestedItem<T>>;
171
279
  emit: ((evt: "blur", payload: FocusEvent) => void) & ((evt: "change", payload: Event) => void) & ((evt: "focus", payload: FocusEvent) => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "update:modelValue", payload: GetModelValue<T, VK, M>) => void);
@@ -3,7 +3,7 @@ import theme from "#build/b24ui/select-menu";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { computed, toRef, toRaw } from "vue";
6
+ import { ref, computed, onMounted, toRef, toRaw } from "vue";
7
7
  import {
8
8
  ComboboxRoot,
9
9
  ComboboxArrow,
@@ -12,7 +12,6 @@ import {
12
12
  ComboboxTrigger,
13
13
  ComboboxPortal,
14
14
  ComboboxContent,
15
- ComboboxViewport,
16
15
  ComboboxEmpty,
17
16
  ComboboxGroup,
18
17
  ComboboxLabel,
@@ -67,6 +66,8 @@ const props = defineProps({
67
66
  createItem: { type: [Boolean, String, Object], required: false },
68
67
  filterFields: { type: Array, required: false },
69
68
  ignoreFilter: { type: Boolean, required: false },
69
+ autofocus: { type: Boolean, required: false },
70
+ autofocusDelay: { type: Number, required: false, default: 0 },
70
71
  class: { type: null, required: false },
71
72
  b24ui: { type: null, required: false },
72
73
  open: { type: Boolean, required: false },
@@ -119,7 +120,8 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.selectM
119
120
  }));
120
121
  function displayValue(value) {
121
122
  if (props.multiple && Array.isArray(value)) {
122
- return value.map((v) => displayValue(v)).filter(Boolean).join(", ");
123
+ const values = value.map((v) => displayValue(v)).filter(Boolean);
124
+ return values?.length ? values.join(", ") : void 0;
123
125
  }
124
126
  if (!props.valueKey) {
125
127
  return value && (typeof value === "object" ? get(value, props.labelKey) : value);
@@ -160,6 +162,19 @@ const createItem = computed(() => {
160
162
  return !filteredItems.value.length;
161
163
  });
162
164
  const createItemPosition = computed(() => typeof props.createItem === "object" ? props.createItem.position : "bottom");
165
+ const triggerRef = ref(null);
166
+ function autoFocus() {
167
+ if (props.autofocus) {
168
+ triggerRef.value?.$el?.focus({
169
+ focusVisible: true
170
+ });
171
+ }
172
+ }
173
+ onMounted(() => {
174
+ setTimeout(() => {
175
+ autoFocus();
176
+ }, props.autofocusDelay);
177
+ });
163
178
  function onUpdate(value) {
164
179
  if (toRaw(props.modelValue) === value) {
165
180
  return;
@@ -206,6 +221,9 @@ function onSelect(e, item) {
206
221
  function isSelectItem(item) {
207
222
  return typeof item === "object" && item !== null;
208
223
  }
224
+ defineExpose({
225
+ triggerRef
226
+ });
209
227
  </script>
210
228
 
211
229
  <template>
@@ -223,7 +241,7 @@ function isSelectItem(item) {
223
241
  :is="icons.plus"
224
242
  :class="b24ui.itemLeadingIcon({ addNew: true, class: props.b24ui?.itemLeadingIcon })"
225
243
  />
226
- {{ t('selectMenu.create', { label: searchTerm }) }}
244
+ {{ t("selectMenu.create", { label: searchTerm }) }}
227
245
  </slot>
228
246
  </span>
229
247
  </ComboboxItem>
@@ -242,7 +260,11 @@ function isSelectItem(item) {
242
260
  @update:open="onUpdateOpen"
243
261
  >
244
262
  <ComboboxAnchor as-child>
245
- <ComboboxTrigger :class="b24ui.base({ class: [props.class, props.b24ui?.base] })" tabindex="0">
263
+ <ComboboxTrigger
264
+ ref="triggerRef"
265
+ :class="b24ui.base({ class: [props.b24ui?.base, props.class] })"
266
+ tabindex="0"
267
+ >
246
268
  <div v-if="isTag" :class="b24ui.tag({ class: props.b24ui?.tag })">
247
269
  {{ props.tag }}
248
270
  </div>
@@ -259,11 +281,17 @@ function isSelectItem(item) {
259
281
 
260
282
  <slot :model-value="modelValue" :open="open">
261
283
  <template v-for="displayedModelValue in [displayValue(modelValue)]" :key="displayedModelValue">
262
- <span v-if="displayedModelValue" :class="b24ui.value({ class: props.b24ui?.value })">
284
+ <span
285
+ v-if="displayedModelValue !== void 0 && displayedModelValue !== null"
286
+ :class="b24ui.value({ class: props.b24ui?.value })"
287
+ >
263
288
  {{ displayedModelValue }}
264
289
  </span>
265
- <span v-else :class="b24ui.placeholder({ class: props.b24ui?.placeholder })">
266
- {{ placeholder ?? '\xA0' }}
290
+ <span
291
+ v-else
292
+ :class="b24ui.placeholder({ class: props.b24ui?.placeholder })"
293
+ >
294
+ {{ placeholder ?? "\xA0" }}
267
295
  </span>
268
296
  </template>
269
297
  </slot>
@@ -285,30 +313,51 @@ function isSelectItem(item) {
285
313
  <FocusScope trapped :class="b24ui.focusScope({ class: props.b24ui?.focusScope })">
286
314
  <slot name="content-top" />
287
315
 
288
- <ComboboxInput v-if="!!searchInput" v-model="searchTerm" :display-value="() => searchTerm" as-child>
289
- <B24Input no-border autofocus autocomplete="off" v-bind="searchInputProps" :class="b24ui.input({ class: props.b24ui?.input })" />
316
+ <ComboboxInput
317
+ v-if="!!searchInput"
318
+ v-model="searchTerm"
319
+ :display-value="() => searchTerm"
320
+ as-child
321
+ >
322
+ <B24Input
323
+ no-border
324
+ autofocus
325
+ autocomplete="off"
326
+ :size="size"
327
+ v-bind="searchInputProps"
328
+ :class="b24ui.input({ class: props.b24ui?.input })"
329
+ />
290
330
  </ComboboxInput>
291
331
 
292
332
  <ComboboxEmpty :class="b24ui.empty({ class: props.b24ui?.empty })">
293
333
  <slot name="empty" :search-term="searchTerm">
294
- {{ searchTerm ? t('selectMenu.noMatch', { searchTerm }) : t('selectMenu.noData') }}
334
+ {{ searchTerm ? t("selectMenu.noMatch", { searchTerm }) : t("selectMenu.noData") }}
295
335
  </slot>
296
336
  </ComboboxEmpty>
297
337
 
298
- <ComboboxViewport :class="b24ui.viewport({ class: props.b24ui?.viewport })">
338
+ <div
339
+ role="presentation"
340
+ :class="b24ui.viewport({ class: props.b24ui?.viewport })"
341
+ >
299
342
  <ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'top'" />
300
343
 
301
344
  <ComboboxGroup v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" :class="b24ui.group({ class: props.b24ui?.group })">
302
345
  <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
303
- <ComboboxLabel v-if="isSelectItem(item) && item.type === 'label'" :class="b24ui.label({ class: props.b24ui?.label })">
346
+ <ComboboxLabel
347
+ v-if="isSelectItem(item) && item.type === 'label'"
348
+ :class="b24ui.label({ class: [props.b24ui?.label, item.b24ui?.label, item.class] })"
349
+ >
304
350
  {{ get(item, props.labelKey) }}
305
351
  </ComboboxLabel>
306
352
 
307
- <ComboboxSeparator v-else-if="isSelectItem(item) && item.type === 'separator'" :class="b24ui.separator({ class: props.b24ui?.separator })" />
353
+ <ComboboxSeparator
354
+ v-else-if="isSelectItem(item) && item.type === 'separator'"
355
+ :class="b24ui.separator({ class: [props.b24ui?.separator, item.b24ui?.separator, item.class] })"
356
+ />
308
357
 
309
358
  <ComboboxItem
310
359
  v-else
311
- :class="b24ui.item({ class: props.b24ui?.item, colorItem: isSelectItem(item) ? item?.color : void 0 })"
360
+ :class="b24ui.item({ class: [props.b24ui?.item, isSelectItem(item) && item.b24ui?.item, isSelectItem(item) && item.class], colorItem: isSelectItem(item) && item?.color || void 0 })"
312
361
  :disabled="isSelectItem(item) && item.disabled"
313
362
  :value="props.valueKey && isSelectItem(item) ? get(item, props.valueKey) : item"
314
363
  @select="onSelect($event, item)"
@@ -318,32 +367,37 @@ function isSelectItem(item) {
318
367
  <Component
319
368
  :is="item.icon"
320
369
  v-if="isSelectItem(item) && item.icon"
321
- :class="b24ui.itemLeadingIcon({ class: props.b24ui?.itemLeadingIcon, colorItem: item?.color })"
370
+ :class="b24ui.itemLeadingIcon({ class: [props.b24ui?.itemLeadingIcon, item.b24ui?.itemLeadingIcon], colorItem: item?.color })"
371
+ />
372
+ <B24Avatar
373
+ v-else-if="isSelectItem(item) && item.avatar"
374
+ :size="item.b24ui?.itemLeadingAvatarSize || props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()"
375
+ v-bind="item.avatar"
376
+ :class="b24ui.itemLeadingAvatar({ class: [props.b24ui?.itemLeadingAvatar, item.b24ui?.itemLeadingAvatar], colorItem: item?.color })"
322
377
  />
323
- <B24Avatar v-else-if="isSelectItem(item) && item.avatar" :size="props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()" v-bind="item.avatar" :class="b24ui.itemLeadingAvatar({ class: props.b24ui?.itemLeadingAvatar, colorItem: item?.color })" />
324
378
  <B24Chip
325
379
  v-else-if="isSelectItem(item) && item.chip"
326
- :size="props.b24ui?.itemLeadingChipSize || b24ui.itemLeadingChipSize()"
380
+ :size="item.b24ui?.itemLeadingChipSize || props.b24ui?.itemLeadingChipSize || b24ui.itemLeadingChipSize()"
327
381
  inset
328
382
  standalone
329
383
  v-bind="item.chip"
330
- :class="b24ui.itemLeadingChip({ class: props.b24ui?.itemLeadingChip, colorItem: item?.color })"
384
+ :class="b24ui.itemLeadingChip({ class: [props.b24ui?.itemLeadingChip, item.b24ui?.itemLeadingChip], colorItem: item?.color })"
331
385
  />
332
386
  </slot>
333
387
 
334
- <span :class="b24ui.itemLabel({ class: props.b24ui?.itemLabel })">
388
+ <span :class="b24ui.itemLabel({ class: [props.b24ui?.itemLabel, isSelectItem(item) && item.b24ui?.itemLabel] })">
335
389
  <slot name="item-label" :item="item" :index="index">
336
390
  {{ isSelectItem(item) ? get(item, props.labelKey) : item }}
337
391
  </slot>
338
392
  </span>
339
393
 
340
- <span :class="b24ui.itemTrailing({ class: props.b24ui?.itemTrailing, colorItem: isSelectItem(item) ? item?.color : void 0 })">
394
+ <span :class="b24ui.itemTrailing({ class: [props.b24ui?.itemTrailing, isSelectItem(item) && item.b24ui?.itemTrailing], colorItem: isSelectItem(item) && item?.color || void 0 })">
341
395
  <slot name="item-trailing" :item="item" :index="index" />
342
396
 
343
397
  <ComboboxItemIndicator as-child>
344
398
  <Component
345
399
  :is="selectedIcon || icons.check"
346
- :class="b24ui.itemTrailingIcon({ class: props.b24ui?.itemTrailingIcon, colorItem: isSelectItem(item) ? item?.color : void 0 })"
400
+ :class="b24ui.itemTrailingIcon({ class: [props.b24ui?.itemTrailingIcon, isSelectItem(item) && item.b24ui?.itemTrailingIcon], colorItem: isSelectItem(item) && item?.color || void 0 })"
347
401
  />
348
402
  </ComboboxItemIndicator>
349
403
  </span>
@@ -353,7 +407,7 @@ function isSelectItem(item) {
353
407
  </ComboboxGroup>
354
408
 
355
409
  <ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'bottom'" />
356
- </ComboboxViewport>
410
+ </div>
357
411
 
358
412
  <slot name="content-bottom" />
359
413
  </FocusScope>