@bitrix24/b24ui-nuxt 2.1.2 → 2.1.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 (144) hide show
  1. package/cli/templates.mjs +2 -2
  2. package/dist/meta.d.mts +1321 -192
  3. package/dist/meta.mjs +1321 -192
  4. package/dist/module.json +1 -1
  5. package/dist/module.mjs +1 -1
  6. package/dist/runtime/components/Accordion.vue +9 -4
  7. package/dist/runtime/components/Advice.vue +9 -5
  8. package/dist/runtime/components/Alert.vue +9 -7
  9. package/dist/runtime/components/Avatar.vue +4 -2
  10. package/dist/runtime/components/AvatarGroup.vue +3 -3
  11. package/dist/runtime/components/Badge.vue +6 -1
  12. package/dist/runtime/components/Banner.vue +9 -8
  13. package/dist/runtime/components/Breadcrumb.vue +9 -4
  14. package/dist/runtime/components/Button.vue +12 -9
  15. package/dist/runtime/components/Calendar.vue +11 -5
  16. package/dist/runtime/components/Card.vue +4 -4
  17. package/dist/runtime/components/ChatMessage.vue +7 -5
  18. package/dist/runtime/components/ChatMessages.vue +4 -2
  19. package/dist/runtime/components/ChatPalette.vue +3 -3
  20. package/dist/runtime/components/ChatPrompt.vue +4 -3
  21. package/dist/runtime/components/ChatPromptSubmit.vue +1 -0
  22. package/dist/runtime/components/Checkbox.vue +9 -7
  23. package/dist/runtime/components/CheckboxGroup.vue +4 -2
  24. package/dist/runtime/components/Chip.vue +3 -0
  25. package/dist/runtime/components/Collapsible.vue +2 -2
  26. package/dist/runtime/components/ColorPicker.vue +7 -3
  27. package/dist/runtime/components/CommandPalette.vue +68 -23
  28. package/dist/runtime/components/ContextMenu.vue +1 -0
  29. package/dist/runtime/components/ContextMenuContent.vue +19 -6
  30. package/dist/runtime/components/Countdown.vue +8 -1
  31. package/dist/runtime/components/DashboardSearch.vue +1 -0
  32. package/dist/runtime/components/DashboardSearchButton.vue +2 -1
  33. package/dist/runtime/components/DescriptionList.vue +12 -4
  34. package/dist/runtime/components/DropdownMenu.vue +2 -1
  35. package/dist/runtime/components/DropdownMenuContent.vue +21 -7
  36. package/dist/runtime/components/Empty.vue +9 -8
  37. package/dist/runtime/components/Error.vue +5 -5
  38. package/dist/runtime/components/FileUpload.vue +15 -8
  39. package/dist/runtime/components/FormField.vue +11 -11
  40. package/dist/runtime/components/Input.vue +8 -3
  41. package/dist/runtime/components/InputDate.vue +9 -2
  42. package/dist/runtime/components/InputMenu.vue +50 -32
  43. package/dist/runtime/components/InputNumber.vue +5 -2
  44. package/dist/runtime/components/InputTags.vue +12 -3
  45. package/dist/runtime/components/InputTime.vue +8 -2
  46. package/dist/runtime/components/Kbd.vue +1 -1
  47. package/dist/runtime/components/Modal.vue +11 -8
  48. package/dist/runtime/components/Navbar.vue +1 -1
  49. package/dist/runtime/components/NavbarDivider.vue +1 -1
  50. package/dist/runtime/components/NavbarSection.vue +2 -1
  51. package/dist/runtime/components/NavbarSpacer.vue +1 -1
  52. package/dist/runtime/components/NavigationMenu.vue +43 -12
  53. package/dist/runtime/components/PageCard.vue +10 -9
  54. package/dist/runtime/components/PageLinks.vue +9 -7
  55. package/dist/runtime/components/Pagination.vue +8 -8
  56. package/dist/runtime/components/PinInput.vue +2 -0
  57. package/dist/runtime/components/Popover.vue +2 -2
  58. package/dist/runtime/components/Progress.vue +6 -6
  59. package/dist/runtime/components/RadioGroup.d.vue.ts +2 -2
  60. package/dist/runtime/components/RadioGroup.vue +10 -4
  61. package/dist/runtime/components/RadioGroup.vue.d.ts +2 -2
  62. package/dist/runtime/components/Range.vue +5 -4
  63. package/dist/runtime/components/Select.vue +25 -11
  64. package/dist/runtime/components/SelectMenu.vue +47 -25
  65. package/dist/runtime/components/Separator.vue +7 -7
  66. package/dist/runtime/components/Sidebar.vue +1 -1
  67. package/dist/runtime/components/SidebarBody.vue +1 -1
  68. package/dist/runtime/components/SidebarFooter.vue +1 -1
  69. package/dist/runtime/components/SidebarHeader.vue +1 -1
  70. package/dist/runtime/components/SidebarHeading.vue +1 -1
  71. package/dist/runtime/components/SidebarLayout.vue +18 -13
  72. package/dist/runtime/components/SidebarSection.vue +2 -1
  73. package/dist/runtime/components/SidebarSpacer.vue +1 -1
  74. package/dist/runtime/components/Skeleton.vue +1 -0
  75. package/dist/runtime/components/Slideover.vue +10 -7
  76. package/dist/runtime/components/Stepper.vue +12 -9
  77. package/dist/runtime/components/Switch.vue +10 -6
  78. package/dist/runtime/components/Table.d.vue.ts +2 -2
  79. package/dist/runtime/components/Table.vue +33 -15
  80. package/dist/runtime/components/Table.vue.d.ts +2 -2
  81. package/dist/runtime/components/TableWrapper.vue +1 -0
  82. package/dist/runtime/components/Tabs.d.vue.ts +3 -3
  83. package/dist/runtime/components/Tabs.vue +24 -15
  84. package/dist/runtime/components/Tabs.vue.d.ts +3 -3
  85. package/dist/runtime/components/Textarea.vue +8 -3
  86. package/dist/runtime/components/Timeline.vue +9 -6
  87. package/dist/runtime/components/Toast.vue +10 -6
  88. package/dist/runtime/components/Toaster.vue +2 -0
  89. package/dist/runtime/components/Tooltip.vue +4 -4
  90. package/dist/runtime/components/User.vue +13 -6
  91. package/dist/runtime/components/color-mode/ColorModeButton.d.vue.ts +2 -9
  92. package/dist/runtime/components/color-mode/ColorModeButton.vue +8 -13
  93. package/dist/runtime/components/color-mode/ColorModeButton.vue.d.ts +2 -9
  94. package/dist/runtime/components/content/ContentSearch.vue +59 -68
  95. package/dist/runtime/components/content/ContentSearchButton.vue +2 -1
  96. package/dist/runtime/components/content/ContentSurround.vue +6 -4
  97. package/dist/runtime/components/content/ContentToc.vue +13 -10
  98. package/dist/runtime/components/prose/A.vue +1 -1
  99. package/dist/runtime/components/prose/Blockquote.vue +1 -1
  100. package/dist/runtime/components/prose/Callout.vue +4 -1
  101. package/dist/runtime/components/prose/Card.vue +5 -3
  102. package/dist/runtime/components/prose/Code.vue +1 -0
  103. package/dist/runtime/components/prose/CodeCollapse.vue +3 -2
  104. package/dist/runtime/components/prose/CodeGroup.vue +6 -6
  105. package/dist/runtime/components/prose/CodePreview.vue +3 -3
  106. package/dist/runtime/components/prose/Collapsible.vue +3 -2
  107. package/dist/runtime/components/prose/Em.vue +1 -1
  108. package/dist/runtime/components/prose/Field.vue +7 -7
  109. package/dist/runtime/components/prose/H1.vue +1 -0
  110. package/dist/runtime/components/prose/H2.vue +4 -2
  111. package/dist/runtime/components/prose/H3.vue +4 -2
  112. package/dist/runtime/components/prose/H4.vue +4 -2
  113. package/dist/runtime/components/prose/H5.vue +1 -0
  114. package/dist/runtime/components/prose/H6.vue +1 -0
  115. package/dist/runtime/components/prose/Hr.vue +1 -1
  116. package/dist/runtime/components/prose/Img.vue +4 -0
  117. package/dist/runtime/components/prose/Li.vue +1 -1
  118. package/dist/runtime/components/prose/Ol.vue +1 -1
  119. package/dist/runtime/components/prose/P.vue +1 -1
  120. package/dist/runtime/components/prose/Pre.vue +6 -5
  121. package/dist/runtime/components/prose/Strong.vue +1 -1
  122. package/dist/runtime/components/prose/Table.d.vue.ts +0 -3
  123. package/dist/runtime/components/prose/Table.vue +2 -1
  124. package/dist/runtime/components/prose/Table.vue.d.ts +0 -3
  125. package/dist/runtime/components/prose/Tbody.vue +1 -1
  126. package/dist/runtime/components/prose/Td.vue +1 -1
  127. package/dist/runtime/components/prose/Th.vue +1 -1
  128. package/dist/runtime/components/prose/Thead.vue +1 -1
  129. package/dist/runtime/components/prose/Tr.vue +1 -1
  130. package/dist/runtime/components/prose/Ul.vue +1 -1
  131. package/dist/runtime/composables/useContentSearch.d.ts +5 -0
  132. package/dist/runtime/composables/useContentSearch.js +30 -1
  133. package/dist/runtime/inertia/stubs.js +1 -1
  134. package/dist/runtime/types/index.d.ts +3 -0
  135. package/dist/runtime/types/index.js +3 -0
  136. package/dist/runtime/utils/virtualizer.d.ts +6 -0
  137. package/dist/runtime/utils/virtualizer.js +32 -0
  138. package/dist/shared/{b24ui-nuxt.B9uYyQGR.mjs → b24ui-nuxt.Bs0V9FLV.mjs} +25 -19
  139. package/dist/unplugin.mjs +1 -1
  140. package/dist/vite.mjs +1 -1
  141. package/package.json +11 -11
  142. package/dist/runtime/vue/components/color-mode/ColorModeButton.d.vue.ts +0 -12
  143. package/dist/runtime/vue/components/color-mode/ColorModeButton.vue +0 -83
  144. package/dist/runtime/vue/components/color-mode/ColorModeButton.vue.d.ts +0 -12
@@ -144,7 +144,7 @@ defineExpose({
144
144
  </script>
145
145
 
146
146
  <template>
147
- <Primitive as="div" :class="b24ui.root({ class: [props.b24ui?.root] })">
147
+ <Primitive as="div" data-slot="root" :class="b24ui.root({ class: [props.b24ui?.root] })">
148
148
  <SelectRoot
149
149
  v-slot="{ modelValue, open }"
150
150
  :name="name"
@@ -159,27 +159,31 @@ defineExpose({
159
159
  <SelectTrigger
160
160
  :id="id"
161
161
  ref="triggerRef"
162
+ data-slot="base"
162
163
  :class="b24ui.base({ class: [props.b24ui?.base, props.class] })"
163
164
  v-bind="{ ...$attrs, ...ariaAttrs }"
164
165
  >
165
166
  <B24Badge
166
167
  v-if="isTag"
168
+ data-slot="tag"
167
169
  :class="b24ui.tag({ class: props.b24ui?.tag })"
168
170
  :color="props.tagColor"
169
171
  :label="props.tag"
170
172
  size="xs"
171
173
  />
172
- <span v-if="isLeading || !!avatar || !!slots.leading" :class="b24ui.leading({ class: props.b24ui?.leading })">
174
+ <span v-if="isLeading || !!avatar || !!slots.leading" data-slot="leading" :class="b24ui.leading({ class: props.b24ui?.leading })">
173
175
  <slot name="leading" :model-value="modelValue" :open="open" :b24ui="b24ui">
174
176
  <Component
175
177
  :is="leadingIconName"
176
178
  v-if="isLeading && leadingIconName"
179
+ data-slot="leadingIcon"
177
180
  :class="b24ui.leadingIcon({ class: props.b24ui?.leadingIcon })"
178
181
  />
179
182
  <B24Avatar
180
183
  v-else-if="!!avatar"
181
184
  :size="props.b24ui?.leadingAvatarSize || b24ui.leadingAvatarSize()"
182
185
  v-bind="avatar"
186
+ data-slot="leadingAvatar"
183
187
  :class="b24ui.leadingAvatar({ class: props.b24ui?.leadingAvatar })"
184
188
  />
185
189
  </slot>
@@ -189,12 +193,14 @@ defineExpose({
189
193
  <template v-for="displayedModelValue in [displayValue(modelValue)]" :key="displayedModelValue">
190
194
  <span
191
195
  v-if="displayedModelValue !== void 0 && displayedModelValue !== null"
196
+ data-slot="value"
192
197
  :class="b24ui.value({ class: props.b24ui?.value })"
193
198
  >
194
199
  {{ displayedModelValue }}
195
200
  </span>
196
201
  <span
197
202
  v-else
203
+ data-slot="placeholder"
198
204
  :class="b24ui.placeholder({ class: props.b24ui?.placeholder })"
199
205
  >
200
206
  {{ placeholder ?? "\xA0" }}
@@ -202,11 +208,12 @@ defineExpose({
202
208
  </template>
203
209
  </slot>
204
210
 
205
- <span v-if="isTrailing || !!slots.trailing" :class="b24ui.trailing({ class: props.b24ui?.trailing })">
211
+ <span v-if="isTrailing || !!slots.trailing" data-slot="trailing" :class="b24ui.trailing({ class: props.b24ui?.trailing })">
206
212
  <slot name="trailing" :model-value="modelValue" :open="open" :b24ui="b24ui">
207
213
  <Component
208
214
  :is="trailingIconName"
209
215
  v-if="trailingIconName"
216
+ data-slot="trailingIcon"
210
217
  :class="b24ui.trailingIcon({ class: props.b24ui?.trailingIcon })"
211
218
  />
212
219
  </slot>
@@ -214,23 +221,25 @@ defineExpose({
214
221
  </SelectTrigger>
215
222
 
216
223
  <SelectPortal v-bind="portalProps">
217
- <SelectContent :class="b24ui.content({ class: props.b24ui?.content })" v-bind="contentProps">
224
+ <SelectContent data-slot="content" :class="b24ui.content({ class: props.b24ui?.content })" v-bind="contentProps">
218
225
  <slot name="content-top" />
219
226
 
220
227
  <div
221
228
  role="presentation"
229
+ data-slot="viewport"
222
230
  :class="b24ui.viewport({ class: props.b24ui?.viewport })"
223
231
  >
224
- <SelectGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="b24ui.group({ class: props.b24ui?.group })">
232
+ <SelectGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" data-slot="group" :class="b24ui.group({ class: props.b24ui?.group })">
225
233
  <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
226
- <SelectLabel v-if="isSelectItem(item) && item.type === 'label'" :class="b24ui.label({ class: [props.b24ui?.label, item.b24ui?.label, item.class] })">
234
+ <SelectLabel v-if="isSelectItem(item) && item.type === 'label'" data-slot="label" :class="b24ui.label({ class: [props.b24ui?.label, item.b24ui?.label, item.class] })">
227
235
  {{ get(item, props.labelKey) }}
228
236
  </SelectLabel>
229
237
 
230
- <SelectSeparator v-else-if="isSelectItem(item) && item.type === 'separator'" :class="b24ui.separator({ class: [props.b24ui?.separator, item.b24ui?.separator, item.class] })" />
238
+ <SelectSeparator v-else-if="isSelectItem(item) && item.type === 'separator'" data-slot="separator" :class="b24ui.separator({ class: [props.b24ui?.separator, item.b24ui?.separator, item.class] })" />
231
239
 
232
240
  <RSelectItem
233
241
  v-else
242
+ data-slot="item"
234
243
  :class="b24ui.item({ class: [props.b24ui?.item, isSelectItem(item) && item.b24ui?.item, isSelectItem(item) && item.class], colorItem: isSelectItem(item) && item?.color || void 0 })"
235
244
  :disabled="isSelectItem(item) && item.disabled"
236
245
  :value="isSelectItem(item) ? get(item, props.valueKey) : item"
@@ -242,12 +251,13 @@ defineExpose({
242
251
  v-if="isSelectItem(item) && item.avatar"
243
252
  :size="item.b24ui?.itemLeadingAvatarSize || props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()"
244
253
  v-bind="item.avatar"
254
+ data-slot="itemLeadingAvatar"
245
255
  :class="b24ui.itemLeadingAvatar({ class: [props.b24ui?.itemLeadingAvatar, item.b24ui?.itemLeadingAvatar], colorItem: item?.color })"
246
256
  />
247
257
  </slot>
248
258
 
249
- <span :class="b24ui.itemWrapper({ class: [props.b24ui?.itemWrapper, isSelectItem(item) && item.b24ui?.itemWrapper] })">
250
- <SelectItemText :class="b24ui.itemLabel({ class: [props.b24ui?.itemLabel, isSelectItem(item) && item.b24ui?.itemLabel] })">
259
+ <span data-slot="itemWrapper" :class="b24ui.itemWrapper({ class: [props.b24ui?.itemWrapper, isSelectItem(item) && item.b24ui?.itemWrapper] })">
260
+ <SelectItemText data-slot="itemLabel" :class="b24ui.itemLabel({ class: [props.b24ui?.itemLabel, isSelectItem(item) && item.b24ui?.itemLabel] })">
251
261
  <slot name="item-label" :item="item" :index="index">
252
262
  {{ isSelectItem(item) ? get(item, props.labelKey) : item }}
253
263
  </slot>
@@ -255,6 +265,7 @@ defineExpose({
255
265
 
256
266
  <span
257
267
  v-if="isSelectItem(item) && (get(item, props.descriptionKey) || !!slots['item-description'])"
268
+ data-slot="itemDescription"
258
269
  :class="b24ui.itemDescription({ class: [props.b24ui?.itemDescription, isSelectItem(item) && item.b24ui?.itemDescription] })"
259
270
  >
260
271
  <slot
@@ -267,10 +278,11 @@ defineExpose({
267
278
  </span>
268
279
  </span>
269
280
 
270
- <span :class="b24ui.itemTrailing({ class: [props.b24ui?.itemTrailing, isSelectItem(item) && item.b24ui?.itemTrailing], colorItem: isSelectItem(item) && item?.color || void 0 })">
281
+ <span data-slot="itemTrailing" :class="b24ui.itemTrailing({ class: [props.b24ui?.itemTrailing, isSelectItem(item) && item.b24ui?.itemTrailing], colorItem: isSelectItem(item) && item?.color || void 0 })">
271
282
  <SelectItemIndicator as-child>
272
283
  <Component
273
284
  :is="selectedIcon || icons.check"
285
+ data-slot="itemTrailingIcon"
274
286
  :class="b24ui.itemTrailingIcon({ class: [props.b24ui?.itemTrailingIcon, isSelectItem(item) && item.b24ui?.itemTrailingIcon], colorItem: isSelectItem(item) && item?.color || void 0 })"
275
287
  />
276
288
  </SelectItemIndicator>
@@ -279,6 +291,7 @@ defineExpose({
279
291
  <Component
280
292
  :is="item.icon"
281
293
  v-if="isSelectItem(item) && item.icon"
294
+ data-slot="itemLeadingIcon"
282
295
  :class="b24ui.itemLeadingIcon({ class: [props.b24ui?.itemLeadingIcon, item.b24ui?.itemLeadingIcon], colorItem: item?.color })"
283
296
  />
284
297
  <B24Chip
@@ -287,6 +300,7 @@ defineExpose({
287
300
  inset
288
301
  standalone
289
302
  v-bind="item.chip"
303
+ data-slot="itemLeadingChip"
290
304
  :class="b24ui.itemLeadingChip({ class: [props.b24ui?.itemLeadingChip, item.b24ui?.itemLeadingChip], colorItem: item?.color })"
291
305
  />
292
306
  </slot>
@@ -299,7 +313,7 @@ defineExpose({
299
313
 
300
314
  <slot name="content-bottom" />
301
315
 
302
- <SelectArrow v-if="!!arrow" v-bind="arrowProps" :class="b24ui.arrow({ class: props.b24ui?.arrow })" />
316
+ <SelectArrow v-if="!!arrow" v-bind="arrowProps" data-slot="arrow" :class="b24ui.arrow({ class: props.b24ui?.arrow })" />
303
317
  </SelectContent>
304
318
  </SelectPortal>
305
319
  </SelectRoot>
@@ -14,6 +14,7 @@ import { useFormField } from "../composables/useFormField";
14
14
  import { useLocale } from "../composables/useLocale";
15
15
  import { usePortal } from "../composables/usePortal";
16
16
  import { compare, get, getDisplayValue, isArrayOfArray } from "../utils";
17
+ import { getEstimateSize } from "../utils/virtualizer";
17
18
  import { tv } from "../utils/tv";
18
19
  import icons from "../dictionary/icons";
19
20
  import B24Badge from "./Badge.vue";
@@ -77,16 +78,12 @@ const rootProps = useForwardPropsEmits(reactivePick(props, "modelValue", "defaul
77
78
  const portalProps = usePortal(toRef(() => props.portal));
78
79
  const contentProps = toRef(() => defu(props.content, { side: "bottom", sideOffset: 8, collisionPadding: 8, position: "popper" }));
79
80
  const arrowProps = toRef(() => defu(typeof props.arrow === "boolean" ? {} : props.arrow, { width: 20, height: 10 }));
80
- const virtualizerProps = toRef(() => !!props.virtualize && defu(typeof props.virtualize === "boolean" ? {} : props.virtualize, {
81
- estimateSize: {
82
- xss: 20,
83
- xs: 24,
84
- sm: 28,
85
- md: 32,
86
- lg: 36,
87
- xl: 40
88
- }[props.size || "md"]
89
- }));
81
+ const virtualizerProps = toRef(() => {
82
+ if (!props.virtualize) return false;
83
+ return defu(typeof props.virtualize === "boolean" ? {} : props.virtualize, {
84
+ estimateSize: getEstimateSize(items.value, props.size || "md", props.descriptionKey)
85
+ });
86
+ });
90
87
  const searchInputProps = toRef(() => defu(props.searchInput, { placeholder: t("selectMenu.search"), type: "text", size: "md" }));
91
88
  const { emitFormBlur, emitFormFocus, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props);
92
89
  const { orientation, size: fieldGroupSize } = useFieldGroup(props);
@@ -218,6 +215,11 @@ function onUpdateOpen(value) {
218
215
  clearTimeout(timeoutId);
219
216
  }
220
217
  }
218
+ function onCreate(e) {
219
+ e.preventDefault();
220
+ e.stopPropagation();
221
+ emits("create", searchTerm.value);
222
+ }
221
223
  function onSelect(e, item) {
222
224
  if (!isSelectItem(item)) {
223
225
  return;
@@ -239,14 +241,16 @@ defineExpose({
239
241
  <template>
240
242
  <DefineCreateItemTemplate>
241
243
  <ComboboxItem
244
+ data-slot="item"
242
245
  :class="b24ui.item({ addNew: true, class: props.b24ui?.item })"
243
246
  :value="searchTerm"
244
- @select.prevent="emits('create', searchTerm)"
247
+ @select="onCreate"
245
248
  >
246
- <span :class="b24ui.itemLabel({ addNew: true, class: props.b24ui?.itemLabel })">
249
+ <span data-slot="itemLabel" :class="b24ui.itemLabel({ addNew: true, class: props.b24ui?.itemLabel })">
247
250
  <slot name="create-item-label" :item="searchTerm">
248
251
  <Component
249
252
  :is="icons.plus"
253
+ data-slot="itemLeadingIcon"
250
254
  :class="b24ui.itemLeadingIcon({ addNew: true, class: props.b24ui?.itemLeadingIcon })"
251
255
  />
252
256
  {{ t("selectMenu.create", { label: searchTerm }) }}
@@ -258,6 +262,7 @@ defineExpose({
258
262
  <DefineItemTemplate v-slot="{ item, index }">
259
263
  <ComboboxLabel
260
264
  v-if="isSelectItem(item) && item.type === 'label'"
265
+ data-slot="label"
261
266
  :class="b24ui.label({ class: [props.b24ui?.label, item.b24ui?.label, item.class] })"
262
267
  >
263
268
  {{ get(item, props.labelKey) }}
@@ -265,11 +270,13 @@ defineExpose({
265
270
 
266
271
  <ComboboxSeparator
267
272
  v-else-if="isSelectItem(item) && item.type === 'separator'"
273
+ data-slot="separator"
268
274
  :class="b24ui.separator({ class: [props.b24ui?.separator, item.b24ui?.separator, item.class] })"
269
275
  />
270
276
 
271
277
  <ComboboxItem
272
278
  v-else
279
+ data-slot="item"
273
280
  :class="b24ui.item({ class: [props.b24ui?.item, isSelectItem(item) && item.b24ui?.item, isSelectItem(item) && item.class], colorItem: isSelectItem(item) && item?.color || void 0 })"
274
281
  :disabled="isSelectItem(item) && item.disabled"
275
282
  :value="props.valueKey && isSelectItem(item) ? get(item, props.valueKey) : item"
@@ -281,12 +288,13 @@ defineExpose({
281
288
  v-if="isSelectItem(item) && item.avatar"
282
289
  :size="item.b24ui?.itemLeadingAvatarSize || props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()"
283
290
  v-bind="item.avatar"
291
+ data-slot="itemLeadingAvatar"
284
292
  :class="b24ui.itemLeadingAvatar({ class: [props.b24ui?.itemLeadingAvatar, item.b24ui?.itemLeadingAvatar], colorItem: item?.color })"
285
293
  />
286
294
  </slot>
287
295
 
288
- <span :class="b24ui.itemWrapper({ class: [props.b24ui?.itemWrapper, isSelectItem(item) && item.b24ui?.itemWrapper] })">
289
- <span :class="b24ui.itemLabel({ class: [props.b24ui?.itemLabel, isSelectItem(item) && item.b24ui?.itemLabel] })">
296
+ <span data-slot="itemWrapper" :class="b24ui.itemWrapper({ class: [props.b24ui?.itemWrapper, isSelectItem(item) && item.b24ui?.itemWrapper] })">
297
+ <span data-slot="itemLabel" :class="b24ui.itemLabel({ class: [props.b24ui?.itemLabel, isSelectItem(item) && item.b24ui?.itemLabel] })">
290
298
  <slot name="item-label" :item="item" :index="index">
291
299
  {{ isSelectItem(item) ? get(item, props.labelKey) : item }}
292
300
  </slot>
@@ -294,6 +302,7 @@ defineExpose({
294
302
 
295
303
  <span
296
304
  v-if="isSelectItem(item) && (get(item, props.descriptionKey) || !!slots['item-description'])"
305
+ data-slot="itemDescription"
297
306
  :class="b24ui.itemDescription({ class: [props.b24ui?.itemDescription, isSelectItem(item) && item.b24ui?.itemDescription] })"
298
307
  >
299
308
  <slot
@@ -306,10 +315,11 @@ defineExpose({
306
315
  </span>
307
316
  </span>
308
317
 
309
- <span :class="b24ui.itemTrailing({ class: [props.b24ui?.itemTrailing, isSelectItem(item) && item.b24ui?.itemTrailing], colorItem: isSelectItem(item) && item?.color || void 0 })">
318
+ <span data-slot="itemTrailing" :class="b24ui.itemTrailing({ class: [props.b24ui?.itemTrailing, isSelectItem(item) && item.b24ui?.itemTrailing], colorItem: isSelectItem(item) && item?.color || void 0 })">
310
319
  <ComboboxItemIndicator as-child>
311
320
  <Component
312
321
  :is="selectedIcon || icons.check"
322
+ data-slot="itemTrailingIcon"
313
323
  :class="b24ui.itemTrailingIcon({ class: [props.b24ui?.itemTrailingIcon, isSelectItem(item) && item.b24ui?.itemTrailingIcon], colorItem: isSelectItem(item) && item?.color || void 0 })"
314
324
  />
315
325
  </ComboboxItemIndicator>
@@ -318,6 +328,7 @@ defineExpose({
318
328
  <Component
319
329
  :is="item.icon"
320
330
  v-if="isSelectItem(item) && item.icon"
331
+ data-slot="itemLeadingIcon"
321
332
  :class="b24ui.itemLeadingIcon({ class: [props.b24ui?.itemLeadingIcon, item.b24ui?.itemLeadingIcon], colorItem: item?.color })"
322
333
  />
323
334
  <B24Chip
@@ -326,6 +337,7 @@ defineExpose({
326
337
  inset
327
338
  standalone
328
339
  v-bind="item.chip"
340
+ data-slot="itemLeadingChip"
329
341
  :class="b24ui.itemLeadingChip({ class: [props.b24ui?.itemLeadingChip, item.b24ui?.itemLeadingChip], colorItem: item?.color })"
330
342
  />
331
343
  </slot>
@@ -334,7 +346,7 @@ defineExpose({
334
346
  </ComboboxItem>
335
347
  </DefineItemTemplate>
336
348
 
337
- <Primitive as="div" :class="b24ui.root({ addNew: true, class: [props.b24ui?.root] })">
349
+ <Primitive as="div" data-slot="root" :class="b24ui.root({ addNew: true, class: [props.b24ui?.root] })">
338
350
  <ComboboxRoot
339
351
  :id="id"
340
352
  v-slot="{ modelValue, open }"
@@ -349,27 +361,31 @@ defineExpose({
349
361
  <ComboboxAnchor as-child>
350
362
  <ComboboxTrigger
351
363
  ref="triggerRef"
364
+ data-slot="base"
352
365
  :class="b24ui.base({ class: [props.b24ui?.base, props.class] })"
353
366
  tabindex="0"
354
367
  >
355
368
  <B24Badge
356
369
  v-if="isTag"
370
+ data-slot="tag"
357
371
  :class="b24ui.tag({ class: props.b24ui?.tag })"
358
372
  :color="props.tagColor"
359
373
  :label="props.tag"
360
374
  size="xs"
361
375
  />
362
- <span v-if="isLeading || !!avatar || !!slots.leading" :class="b24ui.leading({ class: props.b24ui?.leading })">
376
+ <span v-if="isLeading || !!avatar || !!slots.leading" data-slot="leading" :class="b24ui.leading({ class: props.b24ui?.leading })">
363
377
  <slot name="leading" :model-value="modelValue" :open="open" :b24ui="b24ui">
364
378
  <Component
365
379
  :is="leadingIconName"
366
380
  v-if="isLeading && leadingIconName"
381
+ data-slot="leadingIcon"
367
382
  :class="b24ui.leadingIcon({ class: props.b24ui?.leadingIcon })"
368
383
  />
369
384
  <B24Avatar
370
385
  v-else-if="!!avatar"
371
386
  :size="props.b24ui?.leadingAvatarSize || b24ui.leadingAvatarSize()"
372
387
  v-bind="avatar"
388
+ data-slot="leadingAvatar"
373
389
  :class="b24ui.leadingAvatar({ class: props.b24ui?.leadingAvatar })"
374
390
  />
375
391
  </slot>
@@ -379,12 +395,14 @@ defineExpose({
379
395
  <template v-for="displayedModelValue in [displayValue(modelValue)]" :key="displayedModelValue">
380
396
  <span
381
397
  v-if="displayedModelValue !== void 0 && displayedModelValue !== null"
398
+ data-slot="value"
382
399
  :class="b24ui.value({ class: props.b24ui?.value })"
383
400
  >
384
401
  {{ displayedModelValue }}
385
402
  </span>
386
403
  <span
387
404
  v-else
405
+ data-slot="placeholder"
388
406
  :class="b24ui.placeholder({ class: props.b24ui?.placeholder })"
389
407
  >
390
408
  {{ placeholder ?? "\xA0" }}
@@ -392,11 +410,12 @@ defineExpose({
392
410
  </template>
393
411
  </slot>
394
412
 
395
- <span v-if="isTrailing || !!slots.trailing" :class="b24ui.trailing({ class: props.b24ui?.trailing })">
413
+ <span v-if="isTrailing || !!slots.trailing" data-slot="trailing" :class="b24ui.trailing({ class: props.b24ui?.trailing })">
396
414
  <slot name="trailing" :model-value="modelValue" :open="open" :b24ui="b24ui">
397
415
  <Component
398
416
  :is="trailingIconName"
399
417
  v-if="trailingIconName"
418
+ data-slot="trailingIcon"
400
419
  :class="b24ui.trailingIcon({ class: props.b24ui?.trailingIcon })"
401
420
  />
402
421
  </slot>
@@ -405,8 +424,8 @@ defineExpose({
405
424
  </ComboboxAnchor>
406
425
 
407
426
  <ComboboxPortal v-bind="portalProps">
408
- <ComboboxContent :class="b24ui.content({ class: props.b24ui?.content })" v-bind="contentProps">
409
- <FocusScope trapped :class="b24ui.focusScope({ class: props.b24ui?.focusScope })">
427
+ <ComboboxContent data-slot="content" :class="b24ui.content({ class: props.b24ui?.content })" v-bind="contentProps">
428
+ <FocusScope trapped data-slot="focusScope" :class="b24ui.focusScope({ class: props.b24ui?.focusScope })">
410
429
  <slot name="content-top" />
411
430
 
412
431
  <ComboboxInput
@@ -421,11 +440,13 @@ defineExpose({
421
440
  autocomplete="off"
422
441
  :size="size"
423
442
  v-bind="searchInputProps"
443
+ data-slot="input"
424
444
  :class="b24ui.input({ class: props.b24ui?.input })"
445
+ @change.stop
425
446
  />
426
447
  </ComboboxInput>
427
448
 
428
- <ComboboxEmpty :class="b24ui.empty({ class: props.b24ui?.empty })">
449
+ <ComboboxEmpty data-slot="empty" :class="b24ui.empty({ class: props.b24ui?.empty })">
429
450
  <slot name="empty" :search-term="searchTerm">
430
451
  {{ searchTerm ? t("selectMenu.noMatch", { searchTerm }) : t("selectMenu.noData") }}
431
452
  </slot>
@@ -433,6 +454,7 @@ defineExpose({
433
454
 
434
455
  <div
435
456
  role="presentation"
457
+ data-slot="viewport"
436
458
  :class="b24ui.viewport({ class: props.b24ui?.viewport })"
437
459
  >
438
460
  <template v-if="!!virtualize">
@@ -451,15 +473,15 @@ defineExpose({
451
473
  </template>
452
474
 
453
475
  <template v-else>
454
- <ComboboxGroup v-if="createItem && createItemPosition === 'top'" :class="b24ui.group({ class: props.b24ui?.group })">
476
+ <ComboboxGroup v-if="createItem && createItemPosition === 'top'" data-slot="group" :class="b24ui.group({ class: props.b24ui?.group })">
455
477
  <ReuseCreateItemTemplate />
456
478
  </ComboboxGroup>
457
479
 
458
- <ComboboxGroup v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" :class="b24ui.group({ class: props.b24ui?.group })">
480
+ <ComboboxGroup v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" data-slot="group" :class="b24ui.group({ class: props.b24ui?.group })">
459
481
  <ReuseItemTemplate v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`" :item="item" :index="index" />
460
482
  </ComboboxGroup>
461
483
 
462
- <ComboboxGroup v-if="createItem && createItemPosition === 'bottom'" :class="b24ui.group({ class: props.b24ui?.group })">
484
+ <ComboboxGroup v-if="createItem && createItemPosition === 'bottom'" data-slot="group" :class="b24ui.group({ class: props.b24ui?.group })">
463
485
  <ReuseCreateItemTemplate />
464
486
  </ComboboxGroup>
465
487
  </template>
@@ -468,7 +490,7 @@ defineExpose({
468
490
  <slot name="content-bottom" />
469
491
  </FocusScope>
470
492
 
471
- <ComboboxArrow v-if="!!arrow" v-bind="arrowProps" :class="b24ui.arrow({ class: props.b24ui?.arrow })" />
493
+ <ComboboxArrow v-if="!!arrow" v-bind="arrowProps" data-slot="arrow" :class="b24ui.arrow({ class: props.b24ui?.arrow })" />
472
494
  </ComboboxContent>
473
495
  </ComboboxPortal>
474
496
  </ComboboxRoot>
@@ -34,19 +34,19 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.separat
34
34
  </script>
35
35
 
36
36
  <template>
37
- <Separator v-bind="rootProps" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
38
- <div :class="b24ui.border({ class: props.b24ui?.border })" />
37
+ <Separator v-bind="rootProps" data-slot="root" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
38
+ <div data-slot="border" :class="b24ui.border({ class: props.b24ui?.border })" />
39
39
 
40
40
  <template v-if="label !== void 0 && label !== null || icon || avatar || !!slots.default">
41
- <div :class="b24ui.container({ class: props.b24ui?.container })">
41
+ <div data-slot="container" :class="b24ui.container({ class: props.b24ui?.container })">
42
42
  <slot :b24ui="b24ui">
43
- <span v-if="label !== void 0 && label !== null" :class="b24ui.label({ class: props.b24ui?.label })">{{ label }}</span>
44
- <Component :is="icon" v-else-if="icon" :class="b24ui.icon({ class: props.b24ui?.icon })" />
45
- <B24Avatar v-else-if="avatar" :size="props.b24ui?.avatarSize || b24ui.avatarSize()" v-bind="avatar" :class="b24ui.avatar({ class: props.b24ui?.avatar })" />
43
+ <span v-if="label !== void 0 && label !== null" data-slot="label" :class="b24ui.label({ class: props.b24ui?.label })">{{ label }}</span>
44
+ <Component :is="icon" v-else-if="icon" data-slot="icon" :class="b24ui.icon({ class: props.b24ui?.icon })" />
45
+ <B24Avatar v-else-if="avatar" :size="props.b24ui?.avatarSize || b24ui.avatarSize()" v-bind="avatar" data-slot="avatar" :class="b24ui.avatar({ class: props.b24ui?.avatar })" />
46
46
  </slot>
47
47
  </div>
48
48
 
49
- <div :class="b24ui.border({ class: props.b24ui?.border })" />
49
+ <div data-slot="border" :class="b24ui.border({ class: props.b24ui?.border })" />
50
50
  </template>
51
51
  </Separator>
52
52
  </template>
@@ -19,7 +19,7 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.sidebar
19
19
 
20
20
  <template>
21
21
  <!-- Sidebar -->
22
- <Primitive :as="as" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
22
+ <Primitive :as="as" data-slot="root" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
23
23
  <slot />
24
24
  </Primitive>
25
25
  </template>
@@ -21,7 +21,7 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.sidebar
21
21
  </script>
22
22
 
23
23
  <template>
24
- <Primitive :as="as" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
24
+ <Primitive :as="as" data-slot="root" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
25
25
  <slot />
26
26
  </Primitive>
27
27
  </template>
@@ -18,7 +18,7 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.sidebar
18
18
  </script>
19
19
 
20
20
  <template>
21
- <Primitive :as="as" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
21
+ <Primitive :as="as" data-slot="root" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
22
22
  <slot />
23
23
  </Primitive>
24
24
  </template>
@@ -18,7 +18,7 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.sidebar
18
18
  </script>
19
19
 
20
20
  <template>
21
- <Primitive :as="as" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
21
+ <Primitive :as="as" data-slot="root" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
22
22
  <slot />
23
23
  </Primitive>
24
24
  </template>
@@ -18,7 +18,7 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.sidebar
18
18
  </script>
19
19
 
20
20
  <template>
21
- <Primitive :as="as" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
21
+ <Primitive :as="as" data-slot="root" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
22
22
  <slot />
23
23
  </Primitive>
24
24
  </template>
@@ -68,6 +68,7 @@ const handleNavigationClick = () => {
68
68
  v-bind="$attrs"
69
69
  data-state="isLoading ? 'loading' : 'show'"
70
70
  :as="as"
71
+ data-slot="root"
71
72
  :class="b24ui.root({ class: [props.b24ui?.root, props.class] })"
72
73
  >
73
74
  <!-- isLoading -->
@@ -81,8 +82,9 @@ const handleNavigationClick = () => {
81
82
  overlay-blur="off"
82
83
  >
83
84
  <template #content>
84
- <div :class="b24ui.loadingWrapper({ class: props.b24ui?.loadingWrapper })">
85
+ <div data-slot="loadingWrapper" :class="b24ui.loadingWrapper({ class: props.b24ui?.loadingWrapper })">
85
86
  <BtnSpinnerIcon
87
+ data-slot="loadingIcon"
86
88
  :class="b24ui.loadingIcon({ class: props.b24ui?.loadingIcon })"
87
89
  aria-hidden="true"
88
90
  />
@@ -91,20 +93,22 @@ const handleNavigationClick = () => {
91
93
  </B24Slideover>
92
94
  </slot>
93
95
  <template v-if="isUseSideBar">
94
- <div :class="b24ui.sidebar({ class: props.b24ui?.sidebar })">
96
+ <div data-slot="sidebar" :class="b24ui.sidebar({ class: props.b24ui?.sidebar })">
95
97
  <B24Sidebar>
96
98
  <slot name="sidebar" :handle-click="handleNavigationClick" :is-loading="isLoading" :b24ui="b24ui" />
97
99
  </B24Sidebar>
98
100
  </div>
99
101
  </template>
100
102
 
101
- <div :class="b24ui.contentWrapper({ class: props.b24ui?.contentWrapper })">
103
+ <div data-slot="contentWrapper" :class="b24ui.contentWrapper({ class: props.b24ui?.contentWrapper })">
102
104
  <header
103
105
  v-if="isUseNavbar"
106
+ data-slot="header"
104
107
  :class="b24ui.header({ class: props.b24ui?.header })"
105
108
  >
106
109
  <div
107
110
  v-if="isUseSideBar"
111
+ data-slot="headerMenuIcon"
108
112
  :class="b24ui.headerMenuIcon({ class: props.b24ui?.headerMenuIcon })"
109
113
  >
110
114
  <B24Slideover
@@ -124,9 +128,9 @@ const handleNavigationClick = () => {
124
128
  />
125
129
 
126
130
  <template #content>
127
- <div :class="b24ui.sidebarSlideover({ class: props.b24ui?.sidebarSlideover })">
131
+ <div data-slot="sidebarSlideover" :class="b24ui.sidebarSlideover({ class: props.b24ui?.sidebarSlideover })">
128
132
  <B24Sidebar>
129
- <div :class="b24ui.sidebarSlideoverBtnClose({ class: props.b24ui?.sidebarSlideoverBtnClose })">
133
+ <div data-slot="sidebarSlideoverBtnClose" :class="b24ui.sidebarSlideoverBtnClose({ class: props.b24ui?.sidebarSlideoverBtnClose })">
130
134
  <B24ModalDialogClose>
131
135
  <B24Button
132
136
  color="air-tertiary"
@@ -143,26 +147,26 @@ const handleNavigationClick = () => {
143
147
  </template>
144
148
  </B24Slideover>
145
149
  </div>
146
- <div :class="b24ui.headerWrapper({ class: props.b24ui?.headerWrapper })">
150
+ <div data-slot="headerWrapper" :class="b24ui.headerWrapper({ class: props.b24ui?.headerWrapper })">
147
151
  <B24Navbar>
148
152
  <slot name="navbar" :handle-click="handleNavigationClick" :is-loading="isLoading" :b24ui="b24ui" />
149
153
  </B24Navbar>
150
154
  </div>
151
155
  </header>
152
156
 
153
- <div :class="b24ui.pageWrapper({ class: props.b24ui?.pageWrapper })">
157
+ <div data-slot="pageWrapper" :class="b24ui.pageWrapper({ class: props.b24ui?.pageWrapper })">
154
158
  <template v-if="!!slots['content-top'] || !!slots['content-actions'] || !!slots['default']">
155
- <main :class="b24ui.container({ class: props.b24ui?.container })">
159
+ <main data-slot="container" :class="b24ui.container({ class: props.b24ui?.container })">
156
160
  <template v-if="!!slots['content-top']">
157
161
  <!-- Page Top -->
158
- <div :class="b24ui.pageTopWrapper({ class: props.b24ui?.pageTopWrapper })">
162
+ <div data-slot="pageTopWrapper" :class="b24ui.pageTopWrapper({ class: props.b24ui?.pageTopWrapper })">
159
163
  <slot name="content-top" :is-loading="isLoading" :b24ui="b24ui" />
160
164
  </div>
161
165
  </template>
162
166
 
163
167
  <template v-if="!!slots['content-actions']">
164
168
  <!-- Page Actions -->
165
- <div :class="b24ui.pageActionsWrapper({ class: props.b24ui?.pageActionsWrapper })">
169
+ <div data-slot="pageActionsWrapper" :class="b24ui.pageActionsWrapper({ class: props.b24ui?.pageActionsWrapper })">
166
170
  <slot name="content-actions" :is-loading="isLoading" :b24ui="b24ui" />
167
171
  </div>
168
172
  </template>
@@ -171,9 +175,10 @@ const handleNavigationClick = () => {
171
175
  <!-- Page Content -->
172
176
  <div
173
177
  :data-content="props.useLightContent ? 'use-light' : 'not-set'"
178
+ data-slot="containerWrapper"
174
179
  :class="b24ui.containerWrapper({ class: props.b24ui?.containerWrapper })"
175
180
  >
176
- <div :class="b24ui.containerWrapperInner({ class: props.b24ui?.containerWrapperInner })">
181
+ <div data-slot="containerWrapperInner" :class="b24ui.containerWrapperInner({ class: props.b24ui?.containerWrapperInner })">
177
182
  <slot :is-loading="isLoading" :b24ui="b24ui" />
178
183
  </div>
179
184
  </div>
@@ -182,14 +187,14 @@ const handleNavigationClick = () => {
182
187
  </template>
183
188
 
184
189
  <template v-if="!!slots['content-right']">
185
- <div :class="b24ui.pageRightWrapper({ class: props.b24ui?.pageRightWrapper })">
190
+ <div data-slot="pageRightWrapper" :class="b24ui.pageRightWrapper({ class: props.b24ui?.pageRightWrapper })">
186
191
  <slot name="content-right" :is-loading="isLoading" :b24ui="b24ui" />
187
192
  </div>
188
193
  </template>
189
194
  </div>
190
195
  <template v-if="!!slots['content-bottom']">
191
196
  <!-- Page Bottom -->
192
- <div :class="b24ui.pageBottomWrapper({ class: props.b24ui?.pageBottomWrapper })">
197
+ <div data-slot="pageBottomWrapper" :class="b24ui.pageBottomWrapper({ class: props.b24ui?.pageBottomWrapper })">
193
198
  <slot name="content-bottom" :is-loading="isLoading" :b24ui="b24ui" />
194
199
  </div>
195
200
  </template>
@@ -20,8 +20,9 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.sidebar
20
20
  <template>
21
21
  <Primitive
22
22
  :as="as"
23
+ data-component="section"
24
+ data-slot="root"
23
25
  :class="b24ui.root({ class: [props.b24ui?.root, props.class] })"
24
- data-slot="section"
25
26
  >
26
27
  <slot />
27
28
  </Primitive>
@@ -18,7 +18,7 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.sidebar
18
18
  </script>
19
19
 
20
20
  <template>
21
- <Primitive :as="as" aria-hidden="true" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
21
+ <Primitive :as="as" aria-hidden="true" data-slot="root" :class="b24ui.root({ class: [props.b24ui?.root, props.class] })">
22
22
  <slot />
23
23
  </Primitive>
24
24
  </template>