@nuxt/ui 4.0.1 → 4.1.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 (234) hide show
  1. package/.nuxt/ui/calendar.ts +221 -9
  2. package/.nuxt/ui/chat-message.ts +10 -3
  3. package/.nuxt/ui/command-palette.ts +12 -2
  4. package/.nuxt/ui/context-menu.ts +3 -1
  5. package/.nuxt/ui/dropdown-menu.ts +3 -1
  6. package/.nuxt/ui/empty.ts +83 -0
  7. package/.nuxt/ui/index.ts +1 -0
  8. package/.nuxt/ui/input-menu.ts +12 -2
  9. package/.nuxt/ui/input-number.ts +25 -14
  10. package/.nuxt/ui/kbd.ts +1 -1
  11. package/.nuxt/ui/prose/code-tree.ts +1 -1
  12. package/.nuxt/ui/prose/img.ts +2 -1
  13. package/.nuxt/ui/select-menu.ts +12 -2
  14. package/.nuxt/ui/select.ts +4 -2
  15. package/.nuxt/ui/table.ts +8 -2
  16. package/.nuxt/ui/tree.ts +25 -11
  17. package/cli/templates.mjs +14 -2
  18. package/dist/module.d.mts +15 -0
  19. package/dist/module.json +2 -2
  20. package/dist/module.mjs +5 -2
  21. package/dist/runtime/components/Accordion.d.vue.ts +7 -1
  22. package/dist/runtime/components/Accordion.vue +4 -4
  23. package/dist/runtime/components/Accordion.vue.d.ts +7 -1
  24. package/dist/runtime/components/Alert.d.vue.ts +4 -4
  25. package/dist/runtime/components/Alert.vue +1 -1
  26. package/dist/runtime/components/Alert.vue.d.ts +4 -4
  27. package/dist/runtime/components/AuthForm.d.vue.ts +3 -1
  28. package/dist/runtime/components/AuthForm.vue +1 -1
  29. package/dist/runtime/components/AuthForm.vue.d.ts +3 -1
  30. package/dist/runtime/components/Avatar.d.vue.ts +5 -4
  31. package/dist/runtime/components/Avatar.vue +10 -3
  32. package/dist/runtime/components/Avatar.vue.d.ts +5 -4
  33. package/dist/runtime/components/Badge.d.vue.ts +9 -3
  34. package/dist/runtime/components/Badge.vue +3 -3
  35. package/dist/runtime/components/Badge.vue.d.ts +9 -3
  36. package/dist/runtime/components/Banner.d.vue.ts +4 -2
  37. package/dist/runtime/components/Banner.vue +1 -1
  38. package/dist/runtime/components/Banner.vue.d.ts +4 -2
  39. package/dist/runtime/components/BlogPost.d.vue.ts +9 -3
  40. package/dist/runtime/components/BlogPost.vue +2 -2
  41. package/dist/runtime/components/BlogPost.vue.d.ts +9 -3
  42. package/dist/runtime/components/BlogPosts.d.vue.ts +22 -13
  43. package/dist/runtime/components/BlogPosts.vue +8 -2
  44. package/dist/runtime/components/BlogPosts.vue.d.ts +22 -13
  45. package/dist/runtime/components/Breadcrumb.d.vue.ts +19 -4
  46. package/dist/runtime/components/Breadcrumb.vue +8 -8
  47. package/dist/runtime/components/Breadcrumb.vue.d.ts +19 -4
  48. package/dist/runtime/components/Button.d.vue.ts +9 -3
  49. package/dist/runtime/components/Button.vue +3 -3
  50. package/dist/runtime/components/Button.vue.d.ts +9 -3
  51. package/dist/runtime/components/Calendar.d.vue.ts +4 -0
  52. package/dist/runtime/components/Calendar.vue +3 -1
  53. package/dist/runtime/components/Calendar.vue.d.ts +4 -0
  54. package/dist/runtime/components/ChangelogVersion.d.vue.ts +12 -4
  55. package/dist/runtime/components/ChangelogVersion.vue +3 -3
  56. package/dist/runtime/components/ChangelogVersion.vue.d.ts +12 -4
  57. package/dist/runtime/components/ChangelogVersions.d.vue.ts +8 -36
  58. package/dist/runtime/components/ChangelogVersions.vue +2 -2
  59. package/dist/runtime/components/ChangelogVersions.vue.d.ts +8 -36
  60. package/dist/runtime/components/ChatMessage.d.vue.ts +1 -0
  61. package/dist/runtime/components/ChatMessage.vue +1 -1
  62. package/dist/runtime/components/ChatMessage.vue.d.ts +1 -0
  63. package/dist/runtime/components/ChatMessages.d.vue.ts +14 -15
  64. package/dist/runtime/components/ChatMessages.vue +24 -8
  65. package/dist/runtime/components/ChatMessages.vue.d.ts +14 -15
  66. package/dist/runtime/components/CommandPalette.d.vue.ts +43 -12
  67. package/dist/runtime/components/CommandPalette.vue +134 -68
  68. package/dist/runtime/components/CommandPalette.vue.d.ts +43 -12
  69. package/dist/runtime/components/ContextMenu.d.vue.ts +28 -6
  70. package/dist/runtime/components/ContextMenu.vue +2 -0
  71. package/dist/runtime/components/ContextMenu.vue.d.ts +28 -6
  72. package/dist/runtime/components/ContextMenuContent.d.vue.ts +2 -3
  73. package/dist/runtime/components/ContextMenuContent.vue +21 -11
  74. package/dist/runtime/components/ContextMenuContent.vue.d.ts +2 -3
  75. package/dist/runtime/components/DashboardNavbar.d.vue.ts +9 -3
  76. package/dist/runtime/components/DashboardNavbar.vue +3 -3
  77. package/dist/runtime/components/DashboardNavbar.vue.d.ts +9 -3
  78. package/dist/runtime/components/DashboardSearch.d.vue.ts +3 -1
  79. package/dist/runtime/components/DashboardSearch.vue +2 -2
  80. package/dist/runtime/components/DashboardSearch.vue.d.ts +3 -1
  81. package/dist/runtime/components/DashboardSearchButton.vue +2 -2
  82. package/dist/runtime/components/DashboardSidebar.d.vue.ts +5 -1
  83. package/dist/runtime/components/DashboardSidebar.vue +4 -4
  84. package/dist/runtime/components/DashboardSidebar.vue.d.ts +5 -1
  85. package/dist/runtime/components/Drawer.vue +2 -5
  86. package/dist/runtime/components/DropdownMenu.d.vue.ts +28 -6
  87. package/dist/runtime/components/DropdownMenu.vue +2 -0
  88. package/dist/runtime/components/DropdownMenu.vue.d.ts +28 -6
  89. package/dist/runtime/components/DropdownMenuContent.d.vue.ts +8 -5
  90. package/dist/runtime/components/DropdownMenuContent.vue +21 -11
  91. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +8 -5
  92. package/dist/runtime/components/Empty.d.vue.ts +53 -0
  93. package/dist/runtime/components/Empty.vue +68 -0
  94. package/dist/runtime/components/Empty.vue.d.ts +53 -0
  95. package/dist/runtime/components/Error.d.vue.ts +0 -1
  96. package/dist/runtime/components/Error.vue +1 -1
  97. package/dist/runtime/components/Error.vue.d.ts +0 -1
  98. package/dist/runtime/components/FileUpload.d.vue.ts +6 -1
  99. package/dist/runtime/components/FileUpload.vue +8 -7
  100. package/dist/runtime/components/FileUpload.vue.d.ts +6 -1
  101. package/dist/runtime/components/FooterColumns.d.vue.ts +9 -2
  102. package/dist/runtime/components/FooterColumns.vue +2 -2
  103. package/dist/runtime/components/FooterColumns.vue.d.ts +9 -2
  104. package/dist/runtime/components/Header.d.vue.ts +4 -1
  105. package/dist/runtime/components/Header.vue +3 -3
  106. package/dist/runtime/components/Header.vue.d.ts +4 -1
  107. package/dist/runtime/components/Input.d.vue.ts +9 -3
  108. package/dist/runtime/components/Input.vue +3 -3
  109. package/dist/runtime/components/Input.vue.d.ts +9 -3
  110. package/dist/runtime/components/InputMenu.d.vue.ts +40 -10
  111. package/dist/runtime/components/InputMenu.vue +117 -65
  112. package/dist/runtime/components/InputMenu.vue.d.ts +40 -10
  113. package/dist/runtime/components/InputNumber.d.vue.ts +4 -2
  114. package/dist/runtime/components/InputNumber.vue +7 -5
  115. package/dist/runtime/components/InputNumber.vue.d.ts +4 -2
  116. package/dist/runtime/components/InputTags.d.vue.ts +10 -3
  117. package/dist/runtime/components/InputTags.vue +5 -5
  118. package/dist/runtime/components/InputTags.vue.d.ts +10 -3
  119. package/dist/runtime/components/Main.d.vue.ts +2 -4
  120. package/dist/runtime/components/Main.vue +1 -1
  121. package/dist/runtime/components/Main.vue.d.ts +2 -4
  122. package/dist/runtime/components/Modal.d.vue.ts +1 -4
  123. package/dist/runtime/components/Modal.vue +3 -6
  124. package/dist/runtime/components/Modal.vue.d.ts +1 -4
  125. package/dist/runtime/components/NavigationMenu.d.vue.ts +16 -4
  126. package/dist/runtime/components/NavigationMenu.vue +14 -7
  127. package/dist/runtime/components/NavigationMenu.vue.d.ts +16 -4
  128. package/dist/runtime/components/PageAnchors.d.vue.ts +9 -2
  129. package/dist/runtime/components/PageAnchors.vue +2 -2
  130. package/dist/runtime/components/PageAnchors.vue.d.ts +9 -2
  131. package/dist/runtime/components/PageCard.d.vue.ts +3 -1
  132. package/dist/runtime/components/PageCard.vue +1 -1
  133. package/dist/runtime/components/PageCard.vue.d.ts +3 -1
  134. package/dist/runtime/components/PageFeature.d.vue.ts +3 -1
  135. package/dist/runtime/components/PageFeature.vue +1 -1
  136. package/dist/runtime/components/PageFeature.vue.d.ts +3 -1
  137. package/dist/runtime/components/PageLinks.d.vue.ts +9 -2
  138. package/dist/runtime/components/PageLinks.vue +2 -2
  139. package/dist/runtime/components/PageLinks.vue.d.ts +9 -2
  140. package/dist/runtime/components/PageSection.d.vue.ts +3 -1
  141. package/dist/runtime/components/PageSection.vue +1 -1
  142. package/dist/runtime/components/PageSection.vue.d.ts +3 -1
  143. package/dist/runtime/components/Pagination.d.vue.ts +3 -1
  144. package/dist/runtime/components/Pagination.vue +1 -1
  145. package/dist/runtime/components/Pagination.vue.d.ts +3 -1
  146. package/dist/runtime/components/Popover.d.vue.ts +24 -23
  147. package/dist/runtime/components/Popover.vue +4 -4
  148. package/dist/runtime/components/Popover.vue.d.ts +24 -23
  149. package/dist/runtime/components/PricingPlan.d.vue.ts +9 -3
  150. package/dist/runtime/components/PricingPlan.vue +3 -3
  151. package/dist/runtime/components/PricingPlan.vue.d.ts +9 -3
  152. package/dist/runtime/components/PricingPlans.d.vue.ts +20 -13
  153. package/dist/runtime/components/PricingPlans.vue +7 -1
  154. package/dist/runtime/components/PricingPlans.vue.d.ts +20 -13
  155. package/dist/runtime/components/Select.d.vue.ts +20 -9
  156. package/dist/runtime/components/Select.vue +18 -9
  157. package/dist/runtime/components/Select.vue.d.ts +20 -9
  158. package/dist/runtime/components/SelectMenu.d.vue.ts +39 -11
  159. package/dist/runtime/components/SelectMenu.vue +114 -61
  160. package/dist/runtime/components/SelectMenu.vue.d.ts +39 -11
  161. package/dist/runtime/components/Separator.d.vue.ts +3 -1
  162. package/dist/runtime/components/Separator.vue +1 -1
  163. package/dist/runtime/components/Separator.vue.d.ts +3 -1
  164. package/dist/runtime/components/Slideover.d.vue.ts +1 -4
  165. package/dist/runtime/components/Slideover.vue +3 -6
  166. package/dist/runtime/components/Slideover.vue.d.ts +1 -4
  167. package/dist/runtime/components/Stepper.d.vue.ts +4 -1
  168. package/dist/runtime/components/Stepper.vue +1 -1
  169. package/dist/runtime/components/Stepper.vue.d.ts +4 -1
  170. package/dist/runtime/components/Table.d.vue.ts +21 -1
  171. package/dist/runtime/components/Table.vue +126 -60
  172. package/dist/runtime/components/Table.vue.d.ts +21 -1
  173. package/dist/runtime/components/Tabs.d.vue.ts +8 -3
  174. package/dist/runtime/components/Tabs.vue +3 -3
  175. package/dist/runtime/components/Tabs.vue.d.ts +8 -3
  176. package/dist/runtime/components/Textarea.d.vue.ts +9 -3
  177. package/dist/runtime/components/Textarea.vue +3 -3
  178. package/dist/runtime/components/Textarea.vue.d.ts +9 -3
  179. package/dist/runtime/components/Toast.d.vue.ts +4 -4
  180. package/dist/runtime/components/Toast.vue +1 -1
  181. package/dist/runtime/components/Toast.vue.d.ts +4 -4
  182. package/dist/runtime/components/Toaster.d.vue.ts +6 -0
  183. package/dist/runtime/components/Toaster.vue +6 -3
  184. package/dist/runtime/components/Toaster.vue.d.ts +6 -0
  185. package/dist/runtime/components/Tooltip.d.vue.ts +3 -1
  186. package/dist/runtime/components/Tooltip.vue +1 -1
  187. package/dist/runtime/components/Tooltip.vue.d.ts +3 -1
  188. package/dist/runtime/components/Tree.d.vue.ts +43 -5
  189. package/dist/runtime/components/Tree.vue +169 -81
  190. package/dist/runtime/components/Tree.vue.d.ts +43 -5
  191. package/dist/runtime/components/User.d.vue.ts +3 -1
  192. package/dist/runtime/components/User.vue +1 -1
  193. package/dist/runtime/components/User.vue.d.ts +3 -1
  194. package/dist/runtime/components/content/ContentNavigation.d.vue.ts +1 -0
  195. package/dist/runtime/components/content/ContentNavigation.vue +5 -5
  196. package/dist/runtime/components/content/ContentNavigation.vue.d.ts +1 -0
  197. package/dist/runtime/components/content/ContentSearch.d.vue.ts +3 -1
  198. package/dist/runtime/components/content/ContentSearch.vue +4 -2
  199. package/dist/runtime/components/content/ContentSearch.vue.d.ts +3 -1
  200. package/dist/runtime/components/content/ContentSearchButton.vue +2 -2
  201. package/dist/runtime/components/content/ContentSurround.d.vue.ts +1 -0
  202. package/dist/runtime/components/content/ContentSurround.vue +4 -4
  203. package/dist/runtime/components/content/ContentSurround.vue.d.ts +1 -0
  204. package/dist/runtime/components/content/ContentToc.d.vue.ts +2 -0
  205. package/dist/runtime/components/content/ContentToc.vue +2 -2
  206. package/dist/runtime/components/content/ContentToc.vue.d.ts +2 -0
  207. package/dist/runtime/components/prose/Accordion.d.vue.ts +6 -0
  208. package/dist/runtime/components/prose/Accordion.vue +3 -2
  209. package/dist/runtime/components/prose/Accordion.vue.d.ts +6 -0
  210. package/dist/runtime/components/prose/CodeTree.vue +40 -36
  211. package/dist/runtime/components/prose/Collapsible.d.vue.ts +2 -2
  212. package/dist/runtime/components/prose/Collapsible.vue +2 -2
  213. package/dist/runtime/components/prose/Collapsible.vue.d.ts +2 -2
  214. package/dist/runtime/components/prose/Field.d.vue.ts +1 -1
  215. package/dist/runtime/components/prose/Field.vue.d.ts +1 -1
  216. package/dist/runtime/components/prose/Img.vue +14 -3
  217. package/dist/runtime/components/prose/Tabs.d.vue.ts +6 -0
  218. package/dist/runtime/components/prose/Tabs.vue +3 -2
  219. package/dist/runtime/components/prose/Tabs.vue.d.ts +6 -0
  220. package/dist/runtime/composables/useKbd.js +1 -1
  221. package/dist/runtime/composables/useToast.d.ts +3 -1
  222. package/dist/runtime/composables/useToast.js +4 -3
  223. package/dist/runtime/inertia/components/Link.vue +12 -7
  224. package/dist/runtime/locale/hr.d.ts +3 -0
  225. package/dist/runtime/locale/hr.js +129 -0
  226. package/dist/runtime/locale/index.d.ts +1 -0
  227. package/dist/runtime/locale/index.js +1 -0
  228. package/dist/runtime/types/index.d.ts +2 -1
  229. package/dist/runtime/types/index.js +2 -1
  230. package/dist/runtime/types/tv.d.ts +6 -0
  231. package/dist/shared/{ui.D-FDXAUi.mjs → ui.Cmctwxv6.mjs} +381 -48
  232. package/dist/unplugin.mjs +2 -1
  233. package/dist/vite.mjs +3 -2
  234. package/package.json +18 -17
@@ -4,7 +4,7 @@ import theme from "#build/ui/input-menu";
4
4
 
5
5
  <script setup>
6
6
  import { computed, ref, toRef, onMounted, toRaw, nextTick } from "vue";
7
- import { ComboboxRoot, ComboboxArrow, ComboboxAnchor, ComboboxInput, ComboboxTrigger, ComboboxPortal, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxLabel, ComboboxSeparator, ComboboxItem, ComboboxItemIndicator, TagsInputRoot, TagsInputItem, TagsInputItemText, TagsInputItemDelete, TagsInputInput, useForwardPropsEmits, useFilter } from "reka-ui";
7
+ import { ComboboxRoot, ComboboxArrow, ComboboxAnchor, ComboboxInput, ComboboxTrigger, ComboboxPortal, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxVirtualizer, ComboboxLabel, ComboboxSeparator, ComboboxItem, ComboboxItemIndicator, TagsInputRoot, TagsInputItem, TagsInputItemText, TagsInputItemDelete, TagsInputInput, useForwardPropsEmits, useFilter } from "reka-ui";
8
8
  import { defu } from "defu";
9
9
  import { isEqual } from "ohash/utils";
10
10
  import { reactivePick, createReusableTemplate } from "@vueuse/core";
@@ -37,8 +37,10 @@ const props = defineProps({
37
37
  content: { type: Object, required: false },
38
38
  arrow: { type: [Boolean, Object], required: false },
39
39
  portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
40
+ virtualize: { type: [Boolean, Object], required: false, default: false },
40
41
  valueKey: { type: null, required: false },
41
42
  labelKey: { type: null, required: false, default: "label" },
43
+ descriptionKey: { type: null, required: false, default: "description" },
42
44
  items: { type: null, required: false },
43
45
  defaultValue: { type: null, required: false },
44
46
  modelValue: { type: null, required: false },
@@ -76,11 +78,32 @@ const rootProps = useForwardPropsEmits(reactivePick(props, "as", "modelValue", "
76
78
  const portalProps = usePortal(toRef(() => props.portal));
77
79
  const contentProps = toRef(() => defu(props.content, { side: "bottom", sideOffset: 8, collisionPadding: 8, position: "popper" }));
78
80
  const arrowProps = toRef(() => props.arrow);
81
+ const virtualizerProps = toRef(() => !!props.virtualize && defu(typeof props.virtualize === "boolean" ? {} : props.virtualize, {
82
+ estimateSize: {
83
+ xs: 24,
84
+ sm: 28,
85
+ md: 32,
86
+ lg: 36,
87
+ xl: 40
88
+ }[props.size || "md"]
89
+ }));
79
90
  const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props);
80
91
  const { orientation, size: fieldGroupSize } = useFieldGroup(props);
81
92
  const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(props, { trailingIcon: appConfig.ui.icons.chevronDown })));
82
93
  const inputSize = computed(() => fieldGroupSize.value || formGroupSize.value);
83
94
  const [DefineCreateItemTemplate, ReuseCreateItemTemplate] = createReusableTemplate();
95
+ const [DefineItemTemplate, ReuseItemTemplate] = createReusableTemplate({
96
+ props: {
97
+ item: {
98
+ type: [Object, String, Number, Boolean],
99
+ required: true
100
+ },
101
+ index: {
102
+ type: Number,
103
+ required: false
104
+ }
105
+ }
106
+ });
84
107
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.inputMenu || {} })({
85
108
  color: color.value,
86
109
  variant: props.variant,
@@ -90,7 +113,8 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.inputMenu ||
90
113
  leading: isLeading.value || !!props.avatar || !!slots.leading,
91
114
  trailing: isTrailing.value || !!slots.trailing,
92
115
  multiple: props.multiple,
93
- fieldGroup: orientation.value
116
+ fieldGroup: orientation.value,
117
+ virtualize: !!props.virtualize
94
118
  }));
95
119
  const items = computed(() => groups.value.flatMap((group) => group));
96
120
  function displayValue(value) {
@@ -190,9 +214,8 @@ function onUpdateOpen(value) {
190
214
  clearTimeout(timeoutId);
191
215
  }
192
216
  }
193
- function onRemoveTag(event) {
217
+ function onRemoveTag(event, modelValue) {
194
218
  if (props.multiple) {
195
- const modelValue = props.modelValue;
196
219
  const filteredValue = modelValue.filter((value) => !isEqual(value, event));
197
220
  emits("update:modelValue", filteredValue);
198
221
  emits("remove-tag", event);
@@ -219,21 +242,72 @@ defineExpose({
219
242
 
220
243
  <template>
221
244
  <DefineCreateItemTemplate>
222
- <ComboboxGroup :class="ui.group({ class: props.ui?.group })">
223
- <ComboboxItem
224
- :class="ui.item({ class: props.ui?.item })"
225
- :value="searchTerm"
226
- @select.prevent="emits('create', searchTerm)"
227
- >
228
- <span :class="ui.itemLabel({ class: props.ui?.itemLabel })">
229
- <slot name="create-item-label" :item="searchTerm">
230
- {{ t("inputMenu.create", { label: searchTerm }) }}
231
- </slot>
232
- </span>
233
- </ComboboxItem>
234
- </ComboboxGroup>
245
+ <ComboboxItem
246
+ :class="ui.item({ class: props.ui?.item })"
247
+ :value="searchTerm"
248
+ @select.prevent="emits('create', searchTerm)"
249
+ >
250
+ <span :class="ui.itemLabel({ class: props.ui?.itemLabel })">
251
+ <slot name="create-item-label" :item="searchTerm">
252
+ {{ t("inputMenu.create", { label: searchTerm }) }}
253
+ </slot>
254
+ </span>
255
+ </ComboboxItem>
235
256
  </DefineCreateItemTemplate>
236
257
 
258
+ <DefineItemTemplate v-slot="{ item, index }">
259
+ <ComboboxLabel v-if="isInputItem(item) && item.type === 'label'" :class="ui.label({ class: [props.ui?.label, item.ui?.label, item.class] })">
260
+ {{ get(item, props.labelKey) }}
261
+ </ComboboxLabel>
262
+
263
+ <ComboboxSeparator v-else-if="isInputItem(item) && item.type === 'separator'" :class="ui.separator({ class: [props.ui?.separator, item.ui?.separator, item.class] })" />
264
+
265
+ <ComboboxItem
266
+ v-else
267
+ :class="ui.item({ class: [props.ui?.item, isInputItem(item) && item.ui?.item, isInputItem(item) && item.class] })"
268
+ :disabled="isInputItem(item) && item.disabled"
269
+ :value="props.valueKey && isInputItem(item) ? get(item, props.valueKey) : item"
270
+ @select="onSelect($event, item)"
271
+ >
272
+ <slot name="item" :item="item" :index="index" :ui="ui">
273
+ <slot name="item-leading" :item="item" :index="index" :ui="ui">
274
+ <UIcon v-if="isInputItem(item) && item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: [props.ui?.itemLeadingIcon, item.ui?.itemLeadingIcon] })" />
275
+ <UAvatar v-else-if="isInputItem(item) && item.avatar" :size="item.ui?.itemLeadingAvatarSize || props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: [props.ui?.itemLeadingAvatar, item.ui?.itemLeadingAvatar] })" />
276
+ <UChip
277
+ v-else-if="isInputItem(item) && item.chip"
278
+ :size="item.ui?.itemLeadingChipSize || props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()"
279
+ inset
280
+ standalone
281
+ v-bind="item.chip"
282
+ :class="ui.itemLeadingChip({ class: [props.ui?.itemLeadingChip, item.ui?.itemLeadingChip] })"
283
+ />
284
+ </slot>
285
+
286
+ <span :class="ui.itemWrapper({ class: [props.ui?.itemWrapper, isInputItem(item) && item.ui?.itemWrapper] })">
287
+ <span :class="ui.itemLabel({ class: [props.ui?.itemLabel, isInputItem(item) && item.ui?.itemLabel] })">
288
+ <slot name="item-label" :item="item" :index="index">
289
+ {{ isInputItem(item) ? get(item, props.labelKey) : item }}
290
+ </slot>
291
+ </span>
292
+
293
+ <span v-if="isInputItem(item) && (get(item, props.descriptionKey) || !!slots['item-description'])" :class="ui.itemDescription({ class: [props.ui?.itemDescription, isInputItem(item) && item.ui?.itemDescription] })">
294
+ <slot name="item-description" :item="item" :index="index">
295
+ {{ get(item, props.descriptionKey) }}
296
+ </slot>
297
+ </span>
298
+ </span>
299
+
300
+ <span :class="ui.itemTrailing({ class: [props.ui?.itemTrailing, isInputItem(item) && item.ui?.itemTrailing] })">
301
+ <slot name="item-trailing" :item="item" :index="index" :ui="ui" />
302
+
303
+ <ComboboxItemIndicator as-child>
304
+ <UIcon :name="selectedIcon || appConfig.ui.icons.check" :class="ui.itemTrailingIcon({ class: [props.ui?.itemTrailingIcon, isInputItem(item) && item.ui?.itemTrailingIcon] })" />
305
+ </ComboboxItemIndicator>
306
+ </span>
307
+ </slot>
308
+ </ComboboxItem>
309
+ </DefineItemTemplate>
310
+
237
311
  <ComboboxRoot
238
312
  v-slot="{ modelValue, open }"
239
313
  v-bind="rootProps"
@@ -257,9 +331,9 @@ defineExpose({
257
331
  as-child
258
332
  @blur="onBlur"
259
333
  @focus="onFocus"
260
- @remove-tag="onRemoveTag"
334
+ @remove-tag="onRemoveTag($event, modelValue)"
261
335
  >
262
- <TagsInputItem v-for="(item, index) in tags" :key="index" :value="isInputItem(item) ? item : String(item)" :class="ui.tagsItem({ class: [props.ui?.tagsItem, isInputItem(item) && item.ui?.tagsItem] })">
336
+ <TagsInputItem v-for="(item, index) in tags" :key="index" :value="item" :class="ui.tagsItem({ class: [props.ui?.tagsItem, isInputItem(item) && item.ui?.tagsItem] })">
263
337
  <TagsInputItemText :class="ui.tagsItemText({ class: [props.ui?.tagsItemText, isInputItem(item) && item.ui?.tagsItemText] })">
264
338
  <slot name="tags-item-text" :item="item" :index="index">
265
339
  {{ displayValue(item) }}
@@ -267,7 +341,7 @@ defineExpose({
267
341
  </TagsInputItemText>
268
342
 
269
343
  <TagsInputItemDelete :class="ui.tagsItemDelete({ class: [props.ui?.tagsItemDelete, isInputItem(item) && item.ui?.tagsItemDelete] })" :disabled="disabled">
270
- <slot name="tags-item-delete" :item="item" :index="index">
344
+ <slot name="tags-item-delete" :item="item" :index="index" :ui="ui">
271
345
  <UIcon :name="deleteIcon || appConfig.ui.icons.close" :class="ui.tagsItemDeleteIcon({ class: [props.ui?.tagsItemDeleteIcon, isInputItem(item) && item.ui?.tagsItemDeleteIcon] })" />
272
346
  </slot>
273
347
  </TagsInputItemDelete>
@@ -324,56 +398,34 @@ defineExpose({
324
398
  </ComboboxEmpty>
325
399
 
326
400
  <div role="presentation" :class="ui.viewport({ class: props.ui?.viewport })">
327
- <ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'top'" />
328
-
329
- <ComboboxGroup v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
330
- <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
331
- <ComboboxLabel v-if="isInputItem(item) && item.type === 'label'" :class="ui.label({ class: [props.ui?.label, item.ui?.label, item.class] })">
332
- {{ get(item, props.labelKey) }}
333
- </ComboboxLabel>
334
-
335
- <ComboboxSeparator v-else-if="isInputItem(item) && item.type === 'separator'" :class="ui.separator({ class: [props.ui?.separator, item.ui?.separator, item.class] })" />
401
+ <template v-if="!!virtualize">
402
+ <ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'top'" />
336
403
 
337
- <ComboboxItem
338
- v-else
339
- :class="ui.item({ class: [props.ui?.item, isInputItem(item) && item.ui?.item, isInputItem(item) && item.class] })"
340
- :disabled="isInputItem(item) && item.disabled"
341
- :value="props.valueKey && isInputItem(item) ? get(item, props.valueKey) : item"
342
- @select="onSelect($event, item)"
343
- >
344
- <slot name="item" :item="item" :index="index">
345
- <slot name="item-leading" :item="item" :index="index">
346
- <UIcon v-if="isInputItem(item) && item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: [props.ui?.itemLeadingIcon, item.ui?.itemLeadingIcon] })" />
347
- <UAvatar v-else-if="isInputItem(item) && item.avatar" :size="item.ui?.itemLeadingAvatarSize || props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: [props.ui?.itemLeadingAvatar, item.ui?.itemLeadingAvatar] })" />
348
- <UChip
349
- v-else-if="isInputItem(item) && item.chip"
350
- :size="item.ui?.itemLeadingChipSize || props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()"
351
- inset
352
- standalone
353
- v-bind="item.chip"
354
- :class="ui.itemLeadingChip({ class: [props.ui?.itemLeadingChip, item.ui?.itemLeadingChip] })"
355
- />
356
- </slot>
404
+ <ComboboxVirtualizer
405
+ v-slot="{ option: item, virtualItem }"
406
+ :options="filteredItems"
407
+ :text-content="(item2) => isInputItem(item2) ? get(item2, props.labelKey) : String(item2)"
408
+ v-bind="virtualizerProps"
409
+ >
410
+ <ReuseItemTemplate :item="item" :index="virtualItem.index" />
411
+ </ComboboxVirtualizer>
357
412
 
358
- <span :class="ui.itemLabel({ class: [props.ui?.itemLabel, isInputItem(item) && item.ui?.itemLabel] })">
359
- <slot name="item-label" :item="item" :index="index">
360
- {{ isInputItem(item) ? get(item, props.labelKey) : item }}
361
- </slot>
362
- </span>
413
+ <ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'bottom'" />
414
+ </template>
363
415
 
364
- <span :class="ui.itemTrailing({ class: [props.ui?.itemTrailing, isInputItem(item) && item.ui?.itemTrailing] })">
365
- <slot name="item-trailing" :item="item" :index="index" />
416
+ <template v-else>
417
+ <ComboboxGroup v-if="createItem && createItemPosition === 'top'" :class="ui.group({ class: props.ui?.group })">
418
+ <ReuseCreateItemTemplate />
419
+ </ComboboxGroup>
366
420
 
367
- <ComboboxItemIndicator as-child>
368
- <UIcon :name="selectedIcon || appConfig.ui.icons.check" :class="ui.itemTrailingIcon({ class: [props.ui?.itemTrailingIcon, isInputItem(item) && item.ui?.itemTrailingIcon] })" />
369
- </ComboboxItemIndicator>
370
- </span>
371
- </slot>
372
- </ComboboxItem>
373
- </template>
374
- </ComboboxGroup>
421
+ <ComboboxGroup v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
422
+ <ReuseItemTemplate v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`" :item="item" :index="index" />
423
+ </ComboboxGroup>
375
424
 
376
- <ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'bottom'" />
425
+ <ComboboxGroup v-if="createItem && createItemPosition === 'bottom'" :class="ui.group({ class: props.ui?.group })">
426
+ <ReuseCreateItemTemplate />
427
+ </ComboboxGroup>
428
+ </template>
377
429
  </div>
378
430
 
379
431
  <slot name="content-bottom" />
@@ -11,6 +11,7 @@ type InputMenu = ComponentConfig<typeof theme, AppConfig, 'inputMenu'>;
11
11
  export type InputMenuValue = AcceptableValue;
12
12
  export type InputMenuItem = InputMenuValue | {
13
13
  label?: string;
14
+ description?: string;
14
15
  /**
15
16
  * @IconifyIcon
16
17
  */
@@ -23,9 +24,9 @@ export type InputMenuItem = InputMenuValue | {
23
24
  */
24
25
  type?: 'label' | 'separator' | 'item';
25
26
  disabled?: boolean;
26
- onSelect?(e?: Event): void;
27
+ onSelect?: (e: Event) => void;
27
28
  class?: any;
28
- ui?: Pick<InputMenu['slots'], 'tagsItem' | 'tagsItemText' | 'tagsItemDelete' | 'tagsItemDeleteIcon' | 'label' | 'separator' | 'item' | 'itemLeadingIcon' | 'itemLeadingAvatarSize' | 'itemLeadingAvatar' | 'itemLeadingChip' | 'itemLeadingChipSize' | 'itemLabel' | 'itemTrailing' | 'itemTrailingIcon'>;
29
+ ui?: Pick<InputMenu['slots'], 'tagsItem' | 'tagsItemText' | 'tagsItemDelete' | 'tagsItemDeleteIcon' | 'label' | 'separator' | 'item' | 'itemLeadingIcon' | 'itemLeadingAvatarSize' | 'itemLeadingAvatar' | 'itemLeadingChip' | 'itemLeadingChipSize' | 'itemWrapper' | 'itemLabel' | 'itemDescription' | 'itemTrailing' | 'itemTrailingIcon'>;
29
30
  [key: string]: any;
30
31
  };
31
32
  export interface InputMenuProps<T extends ArrayOrNested<InputMenuItem> = ArrayOrNested<InputMenuItem>, VK extends GetItemKeys<T> | undefined = undefined, M extends boolean = false> extends Pick<ComboboxRootProps<T>, 'open' | 'defaultOpen' | 'disabled' | 'name' | 'resetSearchTermOnBlur' | 'resetSearchTermOnSelect' | 'highlightOnHover' | 'openOnClick' | 'openOnFocus'>, UseComponentIconsProps {
@@ -87,6 +88,23 @@ export interface InputMenuProps<T extends ArrayOrNested<InputMenuItem> = ArrayOr
87
88
  * @defaultValue true
88
89
  */
89
90
  portal?: boolean | string | HTMLElement;
91
+ /**
92
+ * Enable virtualization for large lists.
93
+ * Note: when enabled, all groups are flattened into a single list due to a limitation of Reka UI (https://github.com/unovue/reka-ui/issues/1885).
94
+ * @defaultValue false
95
+ */
96
+ virtualize?: boolean | {
97
+ /**
98
+ * Number of items rendered outside the visible area
99
+ * @defaultValue 12
100
+ */
101
+ overscan?: number;
102
+ /**
103
+ * Estimated size (in px) of each item
104
+ * @defaultValue 32
105
+ */
106
+ estimateSize?: number;
107
+ };
90
108
  /**
91
109
  * When `items` is an array of objects, select the field to use as the value instead of the object itself.
92
110
  * @defaultValue undefined
@@ -97,6 +115,11 @@ export interface InputMenuProps<T extends ArrayOrNested<InputMenuItem> = ArrayOr
97
115
  * @defaultValue 'label'
98
116
  */
99
117
  labelKey?: GetItemKeys<T>;
118
+ /**
119
+ * When `items` is an array of objects, select the field to use as the description.
120
+ * @defaultValue 'description'
121
+ */
122
+ descriptionKey?: GetItemKeys<T>;
100
123
  items?: T;
101
124
  /** The value of the InputMenu when initially rendered. Use when you do not need to control the state of the InputMenu. */
102
125
  defaultValue?: GetModelValue<T, VK, M>;
@@ -144,30 +167,37 @@ export type InputMenuEmits<A extends ArrayOrNested<InputMenuItem>, VK extends Ge
144
167
  type SlotProps<T extends InputMenuItem> = (props: {
145
168
  item: T;
146
169
  index: number;
170
+ ui: InputMenu['ui'];
147
171
  }) => any;
148
172
  export interface InputMenuSlots<A extends ArrayOrNested<InputMenuItem> = ArrayOrNested<InputMenuItem>, VK extends GetItemKeys<A> | undefined = undefined, M extends boolean = false, T extends NestedItem<A> = NestedItem<A>> {
149
173
  'leading'(props: {
150
174
  modelValue?: GetModelValue<A, VK, M>;
151
175
  open: boolean;
152
- ui: {
153
- [K in keyof Required<InputMenu['slots']>]: (props?: Record<string, any>) => string;
154
- };
176
+ ui: InputMenu['ui'];
155
177
  }): any;
156
178
  'trailing'(props: {
157
179
  modelValue?: GetModelValue<A, VK, M>;
158
180
  open: boolean;
159
- ui: {
160
- [K in keyof Required<InputMenu['slots']>]: (props?: Record<string, any>) => string;
161
- };
181
+ ui: InputMenu['ui'];
162
182
  }): any;
163
183
  'empty'(props: {
164
184
  searchTerm?: string;
165
185
  }): any;
166
186
  'item': SlotProps<T>;
167
187
  'item-leading': SlotProps<T>;
168
- 'item-label': SlotProps<T>;
188
+ 'item-label'(props: {
189
+ item: T;
190
+ index: number;
191
+ }): any;
192
+ 'item-description'(props: {
193
+ item: T;
194
+ index: number;
195
+ }): any;
169
196
  'item-trailing': SlotProps<T>;
170
- 'tags-item-text': SlotProps<T>;
197
+ 'tags-item-text'(props: {
198
+ item: T;
199
+ index: number;
200
+ }): any;
171
201
  'tags-item-delete': SlotProps<T>;
172
202
  'content-top': (props?: {}) => any;
173
203
  'content-bottom': (props?: {}) => any;
@@ -27,7 +27,7 @@ export interface InputNumberProps extends Pick<NumberFieldRootProps, 'modelValue
27
27
  * Configure the increment button. The `color` and `size` are inherited.
28
28
  * @defaultValue { variant: 'link' }
29
29
  */
30
- increment?: ButtonProps;
30
+ increment?: boolean | ButtonProps;
31
31
  /**
32
32
  * The icon displayed to increment the value.
33
33
  * @defaultValue appConfig.ui.icons.plus
@@ -40,7 +40,7 @@ export interface InputNumberProps extends Pick<NumberFieldRootProps, 'modelValue
40
40
  * Configure the decrement button. The `color` and `size` are inherited.
41
41
  * @defaultValue { variant: 'link' }
42
42
  */
43
- decrement?: ButtonProps;
43
+ decrement?: boolean | ButtonProps;
44
44
  /**
45
45
  * The icon displayed to decrement the value.
46
46
  * @defaultValue appConfig.ui.icons.minus
@@ -178,6 +178,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<InputN
178
178
  onChange?: ((event: Event) => any) | undefined;
179
179
  "onUpdate:modelValue"?: ((value: number) => any) | undefined;
180
180
  }>, {
181
+ decrement: boolean | ButtonProps;
182
+ increment: boolean | ButtonProps;
181
183
  orientation: "vertical" | "horizontal";
182
184
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, InputNumberSlots>;
183
185
  declare const _default: typeof __VLS_export;
@@ -21,10 +21,10 @@ const props = defineProps({
21
21
  size: { type: null, required: false },
22
22
  highlight: { type: Boolean, required: false },
23
23
  orientation: { type: String, required: false, default: "horizontal" },
24
- increment: { type: Object, required: false },
24
+ increment: { type: [Boolean, Object], required: false, default: true },
25
25
  incrementIcon: { type: [String, Object], required: false },
26
26
  incrementDisabled: { type: Boolean, required: false },
27
- decrement: { type: Object, required: false },
27
+ decrement: { type: [Boolean, Object], required: false, default: true },
28
28
  decrementIcon: { type: [String, Object], required: false },
29
29
  decrementDisabled: { type: Boolean, required: false },
30
30
  autofocus: { type: Boolean, required: false },
@@ -64,7 +64,9 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.inputNumber |
64
64
  size: inputSize.value,
65
65
  highlight: highlight.value,
66
66
  orientation: props.orientation,
67
- fieldGroup: orientation.value
67
+ fieldGroup: orientation.value,
68
+ increment: props.orientation === "vertical" ? !!props.increment || !!props.decrement : !!props.increment,
69
+ decrement: props.orientation === "vertical" ? false : !!props.decrement
68
70
  }));
69
71
  const incrementIcon = computed(() => props.incrementIcon || (props.orientation === "horizontal" ? appConfig.ui.icons.plus : appConfig.ui.icons.chevronUp));
70
72
  const decrementIcon = computed(() => props.decrementIcon || (props.orientation === "horizontal" ? appConfig.ui.icons.minus : appConfig.ui.icons.chevronDown));
@@ -118,7 +120,7 @@ defineExpose({
118
120
  @focus="emitFormFocus"
119
121
  />
120
122
 
121
- <div :class="ui.increment({ class: props.ui?.increment })">
123
+ <div v-if="!!increment" :class="ui.increment({ class: props.ui?.increment })">
122
124
  <NumberFieldIncrement as-child :disabled="disabled || incrementDisabled">
123
125
  <slot name="increment">
124
126
  <UButton
@@ -133,7 +135,7 @@ defineExpose({
133
135
  </NumberFieldIncrement>
134
136
  </div>
135
137
 
136
- <div :class="ui.decrement({ class: props.ui?.decrement })">
138
+ <div v-if="!!decrement" :class="ui.decrement({ class: props.ui?.decrement })">
137
139
  <NumberFieldDecrement as-child :disabled="disabled || decrementDisabled">
138
140
  <slot name="decrement">
139
141
  <UButton
@@ -27,7 +27,7 @@ export interface InputNumberProps extends Pick<NumberFieldRootProps, 'modelValue
27
27
  * Configure the increment button. The `color` and `size` are inherited.
28
28
  * @defaultValue { variant: 'link' }
29
29
  */
30
- increment?: ButtonProps;
30
+ increment?: boolean | ButtonProps;
31
31
  /**
32
32
  * The icon displayed to increment the value.
33
33
  * @defaultValue appConfig.ui.icons.plus
@@ -40,7 +40,7 @@ export interface InputNumberProps extends Pick<NumberFieldRootProps, 'modelValue
40
40
  * Configure the decrement button. The `color` and `size` are inherited.
41
41
  * @defaultValue { variant: 'link' }
42
42
  */
43
- decrement?: ButtonProps;
43
+ decrement?: boolean | ButtonProps;
44
44
  /**
45
45
  * The icon displayed to decrement the value.
46
46
  * @defaultValue appConfig.ui.icons.minus
@@ -178,6 +178,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<InputN
178
178
  onChange?: ((event: Event) => any) | undefined;
179
179
  "onUpdate:modelValue"?: ((value: number) => any) | undefined;
180
180
  }>, {
181
+ decrement: boolean | ButtonProps;
182
+ increment: boolean | ButtonProps;
181
183
  orientation: "vertical" | "horizontal";
182
184
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, InputNumberSlots>;
183
185
  declare const _default: typeof __VLS_export;
@@ -49,11 +49,18 @@ export interface InputTagsEmits<T extends InputTagItem> extends TagsInputRootEmi
49
49
  type SlotProps<T extends InputTagItem> = (props: {
50
50
  item: T;
51
51
  index: number;
52
+ ui: InputTags['ui'];
52
53
  }) => any;
53
54
  export interface InputTagsSlots<T extends InputTagItem = InputTagItem> {
54
- 'leading'(props?: {}): any;
55
- 'default'(props?: {}): any;
56
- 'trailing'(props?: {}): any;
55
+ 'leading'(props: {
56
+ ui: InputTags['ui'];
57
+ }): any;
58
+ 'default'(props: {
59
+ ui: InputTags['ui'];
60
+ }): any;
61
+ 'trailing'(props: {
62
+ ui: InputTags['ui'];
63
+ }): any;
57
64
  'item-text': SlotProps<T>;
58
65
  'item-delete': SlotProps<T>;
59
66
  }
@@ -120,14 +120,14 @@ defineExpose({
120
120
  :class="ui.item({ class: [props.ui?.item] })"
121
121
  >
122
122
  <TagsInputItemText :class="ui.itemText({ class: [props.ui?.itemText] })">
123
- <slot v-if="!!slots['item-text']" name="item-text" :item="item" :index="index" />
123
+ <slot v-if="!!slots['item-text']" name="item-text" :item="item" :index="index" :ui="ui" />
124
124
  </TagsInputItemText>
125
125
 
126
126
  <TagsInputItemDelete
127
127
  :class="ui.itemDelete({ class: [props.ui?.itemDelete] })"
128
128
  :disabled="disabled"
129
129
  >
130
- <slot name="item-delete" :item="item" :index="index">
130
+ <slot name="item-delete" :item="item" :index="index" :ui="ui">
131
131
  <UIcon :name="deleteIcon || appConfig.ui.icons.close" :class="ui.itemDeleteIcon({ class: [props.ui?.itemDeleteIcon] })" />
132
132
  </slot>
133
133
  </TagsInputItemDelete>
@@ -143,17 +143,17 @@ defineExpose({
143
143
  @focus="onFocus"
144
144
  />
145
145
 
146
- <slot />
146
+ <slot :ui="ui" />
147
147
 
148
148
  <span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
149
- <slot name="leading">
149
+ <slot name="leading" :ui="ui">
150
150
  <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
151
151
  <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
152
152
  </slot>
153
153
  </span>
154
154
 
155
155
  <span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })">
156
- <slot name="trailing">
156
+ <slot name="trailing" :ui="ui">
157
157
  <UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
158
158
  </slot>
159
159
  </span>
@@ -49,11 +49,18 @@ export interface InputTagsEmits<T extends InputTagItem> extends TagsInputRootEmi
49
49
  type SlotProps<T extends InputTagItem> = (props: {
50
50
  item: T;
51
51
  index: number;
52
+ ui: InputTags['ui'];
52
53
  }) => any;
53
54
  export interface InputTagsSlots<T extends InputTagItem = InputTagItem> {
54
- 'leading'(props?: {}): any;
55
- 'default'(props?: {}): any;
56
- 'trailing'(props?: {}): any;
55
+ 'leading'(props: {
56
+ ui: InputTags['ui'];
57
+ }): any;
58
+ 'default'(props: {
59
+ ui: InputTags['ui'];
60
+ }): any;
61
+ 'trailing'(props: {
62
+ ui: InputTags['ui'];
63
+ }): any;
57
64
  'item-text': SlotProps<T>;
58
65
  'item-delete': SlotProps<T>;
59
66
  }
@@ -1,7 +1,7 @@
1
1
  export interface MainProps {
2
2
  /**
3
3
  * The element or component this component should render as.
4
- * @defaultValue 'main'
4
+ * @defaultValue 'div'
5
5
  */
6
6
  as?: any;
7
7
  class?: any;
@@ -9,9 +9,7 @@ export interface MainProps {
9
9
  export interface MainSlots {
10
10
  default(props?: {}): any;
11
11
  }
12
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<MainProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MainProps> & Readonly<{}>, {
13
- as: any;
14
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, MainSlots>;
12
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<MainProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MainProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, MainSlots>;
15
13
  declare const _default: typeof __VLS_export;
16
14
  export default _default;
17
15
  type __VLS_WithSlots<T, S> = T & {
@@ -8,7 +8,7 @@ import { Primitive } from "reka-ui";
8
8
  import { useAppConfig } from "#imports";
9
9
  import { tv } from "../utils/tv";
10
10
  const props = defineProps({
11
- as: { type: null, required: false, default: "main" },
11
+ as: { type: null, required: false },
12
12
  class: { type: null, required: false }
13
13
  });
14
14
  defineSlots();
@@ -1,7 +1,7 @@
1
1
  export interface MainProps {
2
2
  /**
3
3
  * The element or component this component should render as.
4
- * @defaultValue 'main'
4
+ * @defaultValue 'div'
5
5
  */
6
6
  as?: any;
7
7
  class?: any;
@@ -9,9 +9,7 @@ export interface MainProps {
9
9
  export interface MainSlots {
10
10
  default(props?: {}): any;
11
11
  }
12
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<MainProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MainProps> & Readonly<{}>, {
13
- as: any;
14
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, MainSlots>;
12
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<MainProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MainProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, MainSlots>;
15
13
  declare const _default: typeof __VLS_export;
16
14
  export default _default;
17
15
  type __VLS_WithSlots<T, S> = T & {
@@ -69,10 +69,7 @@ export interface ModalSlots {
69
69
  description(props?: {}): any;
70
70
  actions(props?: {}): any;
71
71
  close(props: {
72
- close: () => void;
73
- ui: {
74
- [K in keyof Required<Modal['slots']>]: (props?: Record<string, any>) => string;
75
- };
72
+ ui: Modal['ui'];
76
73
  }): any;
77
74
  body(props: {
78
75
  close: () => void;
@@ -36,9 +36,6 @@ const rootProps = useForwardPropsEmits(reactivePick(props, "open", "defaultOpen"
36
36
  const portalProps = usePortal(toRef(() => props.portal));
37
37
  const contentProps = toRef(() => props.content);
38
38
  const contentEvents = computed(() => {
39
- const defaultEvents = {
40
- closeAutoFocus: (e) => e.preventDefault()
41
- };
42
39
  if (!props.dismissible) {
43
40
  const events = ["pointerDownOutside", "interactOutside", "escapeKeyDown"];
44
41
  return events.reduce((acc, curr) => {
@@ -47,9 +44,9 @@ const contentEvents = computed(() => {
47
44
  emits("close:prevent");
48
45
  };
49
46
  return acc;
50
- }, defaultEvents);
47
+ }, {});
51
48
  }
52
- return defaultEvents;
49
+ return {};
53
50
  });
54
51
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.modal || {} })({
55
52
  transition: props.transition,
@@ -101,7 +98,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.modal || {} }
101
98
  <slot name="actions" />
102
99
 
103
100
  <DialogClose v-if="props.close || !!slots.close" as-child>
104
- <slot name="close" :close="close" :ui="ui">
101
+ <slot name="close" :ui="ui">
105
102
  <UButton
106
103
  v-if="props.close"
107
104
  :icon="closeIcon || appConfig.ui.icons.close"