@nuxt/ui 4.7.1 → 4.8.1

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 (359) hide show
  1. package/.nuxt/{ui.css → ui.static.css} +0 -10
  2. package/LICENSE.md +1 -1
  3. package/cli/commands/make/component.mjs +6 -2
  4. package/cli/templates.mjs +46 -20
  5. package/cli/utils.mjs +19 -0
  6. package/dist/module.json +1 -1
  7. package/dist/module.mjs +4 -4
  8. package/dist/runtime/components/Accordion.vue +15 -14
  9. package/dist/runtime/components/Alert.vue +20 -20
  10. package/dist/runtime/components/AuthForm.vue +37 -37
  11. package/dist/runtime/components/Avatar.d.vue.ts +4 -0
  12. package/dist/runtime/components/Avatar.vue +14 -12
  13. package/dist/runtime/components/Avatar.vue.d.ts +4 -0
  14. package/dist/runtime/components/AvatarGroup.d.vue.ts +4 -0
  15. package/dist/runtime/components/AvatarGroup.vue +11 -8
  16. package/dist/runtime/components/AvatarGroup.vue.d.ts +4 -0
  17. package/dist/runtime/components/Badge.vue +11 -11
  18. package/dist/runtime/components/Banner.vue +25 -23
  19. package/dist/runtime/components/BlogPost.d.vue.ts +1 -1
  20. package/dist/runtime/components/BlogPost.vue +30 -28
  21. package/dist/runtime/components/BlogPost.vue.d.ts +1 -1
  22. package/dist/runtime/components/BlogPosts.vue +6 -6
  23. package/dist/runtime/components/Breadcrumb.d.vue.ts +4 -0
  24. package/dist/runtime/components/Breadcrumb.vue +21 -18
  25. package/dist/runtime/components/Breadcrumb.vue.d.ts +4 -0
  26. package/dist/runtime/components/Button.vue +16 -16
  27. package/dist/runtime/components/Calendar.vue +21 -20
  28. package/dist/runtime/components/Card.vue +11 -11
  29. package/dist/runtime/components/Carousel.vue +23 -22
  30. package/dist/runtime/components/ChangelogVersion.vue +31 -29
  31. package/dist/runtime/components/ChangelogVersions.vue +8 -8
  32. package/dist/runtime/components/ChatMessage.d.vue.ts +6 -0
  33. package/dist/runtime/components/ChatMessage.vue +46 -36
  34. package/dist/runtime/components/ChatMessage.vue.d.ts +6 -0
  35. package/dist/runtime/components/ChatMessages.vue +14 -14
  36. package/dist/runtime/components/ChatPalette.vue +6 -6
  37. package/dist/runtime/components/ChatPrompt.d.vue.ts +7 -0
  38. package/dist/runtime/components/ChatPrompt.vue +22 -12
  39. package/dist/runtime/components/ChatPrompt.vue.d.ts +7 -0
  40. package/dist/runtime/components/ChatPromptSubmit.d.vue.ts +3 -3
  41. package/dist/runtime/components/ChatPromptSubmit.vue +6 -6
  42. package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +3 -3
  43. package/dist/runtime/components/ChatReasoning.vue +20 -20
  44. package/dist/runtime/components/ChatShimmer.vue +7 -7
  45. package/dist/runtime/components/ChatTool.d.vue.ts +1 -1
  46. package/dist/runtime/components/ChatTool.vue +19 -19
  47. package/dist/runtime/components/ChatTool.vue.d.ts +1 -1
  48. package/dist/runtime/components/Checkbox.d.vue.ts +2 -0
  49. package/dist/runtime/components/Checkbox.vue +25 -24
  50. package/dist/runtime/components/Checkbox.vue.d.ts +2 -0
  51. package/dist/runtime/components/CheckboxGroup.d.vue.ts +1 -1
  52. package/dist/runtime/components/CheckboxGroup.vue +17 -14
  53. package/dist/runtime/components/CheckboxGroup.vue.d.ts +1 -1
  54. package/dist/runtime/components/Chip.vue +8 -8
  55. package/dist/runtime/components/Collapsible.vue +8 -7
  56. package/dist/runtime/components/ColorPicker.d.vue.ts +2 -0
  57. package/dist/runtime/components/ColorPicker.vue +10 -10
  58. package/dist/runtime/components/ColorPicker.vue.d.ts +2 -0
  59. package/dist/runtime/components/CommandPalette.d.vue.ts +5 -5
  60. package/dist/runtime/components/CommandPalette.vue +92 -69
  61. package/dist/runtime/components/CommandPalette.vue.d.ts +5 -5
  62. package/dist/runtime/components/Container.vue +4 -4
  63. package/dist/runtime/components/ContextMenu.vue +16 -15
  64. package/dist/runtime/components/DashboardGroup.d.vue.ts +1 -1
  65. package/dist/runtime/components/DashboardGroup.vue +6 -4
  66. package/dist/runtime/components/DashboardGroup.vue.d.ts +1 -1
  67. package/dist/runtime/components/DashboardNavbar.vue +16 -16
  68. package/dist/runtime/components/DashboardPanel.vue +7 -7
  69. package/dist/runtime/components/DashboardResizeHandle.vue +5 -5
  70. package/dist/runtime/components/DashboardSearch.d.vue.ts +16 -1
  71. package/dist/runtime/components/DashboardSearch.vue +25 -12
  72. package/dist/runtime/components/DashboardSearch.vue.d.ts +16 -1
  73. package/dist/runtime/components/DashboardSearchButton.d.vue.ts +2 -2
  74. package/dist/runtime/components/DashboardSearchButton.vue +15 -15
  75. package/dist/runtime/components/DashboardSearchButton.vue.d.ts +2 -2
  76. package/dist/runtime/components/DashboardSidebar.d.vue.ts +1 -1
  77. package/dist/runtime/components/DashboardSidebar.vue +22 -22
  78. package/dist/runtime/components/DashboardSidebar.vue.d.ts +1 -1
  79. package/dist/runtime/components/DashboardSidebarCollapse.d.vue.ts +1 -1
  80. package/dist/runtime/components/DashboardSidebarCollapse.vue +5 -5
  81. package/dist/runtime/components/DashboardSidebarCollapse.vue.d.ts +1 -1
  82. package/dist/runtime/components/DashboardSidebarToggle.d.vue.ts +1 -1
  83. package/dist/runtime/components/DashboardSidebarToggle.vue +5 -5
  84. package/dist/runtime/components/DashboardSidebarToggle.vue.d.ts +1 -1
  85. package/dist/runtime/components/DashboardToolbar.vue +6 -6
  86. package/dist/runtime/components/Drawer.d.vue.ts +1 -1
  87. package/dist/runtime/components/Drawer.vue +23 -22
  88. package/dist/runtime/components/Drawer.vue.d.ts +1 -1
  89. package/dist/runtime/components/DropdownMenu.vue +21 -20
  90. package/dist/runtime/components/Editor.vue +8 -7
  91. package/dist/runtime/components/EditorDragHandle.d.vue.ts +2 -2
  92. package/dist/runtime/components/EditorDragHandle.vue +9 -8
  93. package/dist/runtime/components/EditorDragHandle.vue.d.ts +2 -2
  94. package/dist/runtime/components/EditorToolbar.vue +10 -9
  95. package/dist/runtime/components/Empty.vue +14 -14
  96. package/dist/runtime/components/Error.d.vue.ts +9 -1
  97. package/dist/runtime/components/Error.vue +17 -10
  98. package/dist/runtime/components/Error.vue.d.ts +9 -1
  99. package/dist/runtime/components/FieldGroup.vue +4 -4
  100. package/dist/runtime/components/FileUpload.vue +36 -37
  101. package/dist/runtime/components/Footer.vue +10 -10
  102. package/dist/runtime/components/FooterColumns.vue +15 -15
  103. package/dist/runtime/components/Form.d.vue.ts +1 -1
  104. package/dist/runtime/components/Form.vue +6 -5
  105. package/dist/runtime/components/Form.vue.d.ts +1 -1
  106. package/dist/runtime/components/FormField.d.vue.ts +1 -0
  107. package/dist/runtime/components/FormField.vue +21 -21
  108. package/dist/runtime/components/FormField.vue.d.ts +1 -0
  109. package/dist/runtime/components/Header.vue +19 -19
  110. package/dist/runtime/components/Icon.vue +2 -1
  111. package/dist/runtime/components/Input.vue +19 -19
  112. package/dist/runtime/components/InputDate.vue +21 -20
  113. package/dist/runtime/components/InputMenu.d.vue.ts +52 -51
  114. package/dist/runtime/components/InputMenu.vue +66 -63
  115. package/dist/runtime/components/InputMenu.vue.d.ts +52 -51
  116. package/dist/runtime/components/InputNumber.vue +25 -24
  117. package/dist/runtime/components/InputTags.vue +26 -25
  118. package/dist/runtime/components/InputTime.vue +21 -20
  119. package/dist/runtime/components/Kbd.vue +5 -5
  120. package/dist/runtime/components/Link.d.vue.ts +2 -2
  121. package/dist/runtime/components/Link.vue.d.ts +2 -2
  122. package/dist/runtime/components/LinkBase.d.vue.ts +1 -1
  123. package/dist/runtime/components/LinkBase.vue.d.ts +1 -1
  124. package/dist/runtime/components/Listbox.d.vue.ts +13 -9
  125. package/dist/runtime/components/Listbox.vue +34 -32
  126. package/dist/runtime/components/Listbox.vue.d.ts +13 -9
  127. package/dist/runtime/components/Main.vue +4 -4
  128. package/dist/runtime/components/Marquee.vue +5 -5
  129. package/dist/runtime/components/Modal.d.vue.ts +2 -2
  130. package/dist/runtime/components/Modal.vue +25 -24
  131. package/dist/runtime/components/Modal.vue.d.ts +2 -2
  132. package/dist/runtime/components/NavigationMenu.vue +66 -65
  133. package/dist/runtime/components/Page.vue +7 -7
  134. package/dist/runtime/components/PageAnchors.vue +11 -11
  135. package/dist/runtime/components/PageAside.vue +9 -9
  136. package/dist/runtime/components/PageBody.vue +4 -4
  137. package/dist/runtime/components/PageCTA.vue +18 -16
  138. package/dist/runtime/components/PageCard.vue +25 -23
  139. package/dist/runtime/components/PageColumns.vue +4 -4
  140. package/dist/runtime/components/PageFeature.vue +17 -15
  141. package/dist/runtime/components/PageGrid.vue +4 -4
  142. package/dist/runtime/components/PageHeader.vue +14 -14
  143. package/dist/runtime/components/PageHero.vue +20 -18
  144. package/dist/runtime/components/PageLinks.vue +12 -12
  145. package/dist/runtime/components/PageList.vue +4 -4
  146. package/dist/runtime/components/PageLogos.vue +16 -16
  147. package/dist/runtime/components/PageSection.d.vue.ts +1 -1
  148. package/dist/runtime/components/PageSection.vue +24 -22
  149. package/dist/runtime/components/PageSection.vue.d.ts +1 -1
  150. package/dist/runtime/components/Pagination.d.vue.ts +2 -2
  151. package/dist/runtime/components/Pagination.vue +23 -22
  152. package/dist/runtime/components/Pagination.vue.d.ts +2 -2
  153. package/dist/runtime/components/PinInput.vue +15 -14
  154. package/dist/runtime/components/Popover.vue +9 -8
  155. package/dist/runtime/components/PricingPlan.vue +36 -36
  156. package/dist/runtime/components/PricingPlans.vue +6 -6
  157. package/dist/runtime/components/PricingTable.vue +44 -44
  158. package/dist/runtime/components/Progress.d.vue.ts +1 -1
  159. package/dist/runtime/components/Progress.vue +12 -11
  160. package/dist/runtime/components/Progress.vue.d.ts +1 -1
  161. package/dist/runtime/components/RadioGroup.d.vue.ts +2 -0
  162. package/dist/runtime/components/RadioGroup.vue +28 -27
  163. package/dist/runtime/components/RadioGroup.vue.d.ts +2 -0
  164. package/dist/runtime/components/ScrollArea.vue +13 -13
  165. package/dist/runtime/components/Select.vue +38 -40
  166. package/dist/runtime/components/SelectMenu.d.vue.ts +46 -46
  167. package/dist/runtime/components/SelectMenu.vue +49 -48
  168. package/dist/runtime/components/SelectMenu.vue.d.ts +46 -46
  169. package/dist/runtime/components/Separator.d.vue.ts +9 -3
  170. package/dist/runtime/components/Separator.vue +29 -16
  171. package/dist/runtime/components/Separator.vue.d.ts +9 -3
  172. package/dist/runtime/components/Sidebar.vue +28 -28
  173. package/dist/runtime/components/Skeleton.vue +5 -5
  174. package/dist/runtime/components/Slideover.d.vue.ts +3 -3
  175. package/dist/runtime/components/Slideover.vue +24 -23
  176. package/dist/runtime/components/Slideover.vue.d.ts +3 -3
  177. package/dist/runtime/components/Slider.vue +16 -15
  178. package/dist/runtime/components/Stepper.vue +19 -18
  179. package/dist/runtime/components/Switch.d.vue.ts +2 -0
  180. package/dist/runtime/components/Switch.vue +26 -23
  181. package/dist/runtime/components/Switch.vue.d.ts +2 -0
  182. package/dist/runtime/components/Table.vue +26 -25
  183. package/dist/runtime/components/Tabs.vue +22 -21
  184. package/dist/runtime/components/Textarea.vue +19 -18
  185. package/dist/runtime/components/Theme.d.vue.ts +13 -5
  186. package/dist/runtime/components/Theme.vue +32 -4
  187. package/dist/runtime/components/Theme.vue.d.ts +13 -5
  188. package/dist/runtime/components/Timeline.vue +15 -15
  189. package/dist/runtime/components/Toast.vue +35 -34
  190. package/dist/runtime/components/Toaster.d.vue.ts +1 -1
  191. package/dist/runtime/components/Toaster.vue +10 -9
  192. package/dist/runtime/components/Toaster.vue.d.ts +1 -1
  193. package/dist/runtime/components/Tooltip.vue +13 -12
  194. package/dist/runtime/components/Tree.vue +24 -23
  195. package/dist/runtime/components/User.vue +23 -21
  196. package/dist/runtime/components/color-mode/ColorModeAvatar.vue +5 -2
  197. package/dist/runtime/components/color-mode/ColorModeButton.d.vue.ts +1 -1
  198. package/dist/runtime/components/color-mode/ColorModeButton.vue +8 -6
  199. package/dist/runtime/components/color-mode/ColorModeButton.vue.d.ts +1 -1
  200. package/dist/runtime/components/color-mode/ColorModeImage.vue +4 -2
  201. package/dist/runtime/components/color-mode/ColorModeSwitch.vue +1 -0
  202. package/dist/runtime/components/content/ContentNavigation.vue +31 -30
  203. package/dist/runtime/components/content/ContentSearch.d.vue.ts +31 -4
  204. package/dist/runtime/components/content/ContentSearch.vue +78 -33
  205. package/dist/runtime/components/content/ContentSearch.vue.d.ts +31 -4
  206. package/dist/runtime/components/content/ContentSearchButton.d.vue.ts +2 -2
  207. package/dist/runtime/components/content/ContentSearchButton.vue +15 -15
  208. package/dist/runtime/components/content/ContentSearchButton.vue.d.ts +2 -2
  209. package/dist/runtime/components/content/ContentSurround.vue +14 -12
  210. package/dist/runtime/components/content/ContentToc.vue +34 -33
  211. package/dist/runtime/components/prose/A.vue +4 -4
  212. package/dist/runtime/components/prose/Accordion.vue +4 -4
  213. package/dist/runtime/components/prose/AccordionItem.vue +5 -5
  214. package/dist/runtime/components/prose/Badge.vue +4 -4
  215. package/dist/runtime/components/prose/Blockquote.vue +4 -4
  216. package/dist/runtime/components/prose/Callout.vue +8 -8
  217. package/dist/runtime/components/prose/Card.vue +12 -12
  218. package/dist/runtime/components/prose/CardGroup.vue +4 -4
  219. package/dist/runtime/components/prose/Code.vue +4 -4
  220. package/dist/runtime/components/prose/CodeCollapse.vue +8 -8
  221. package/dist/runtime/components/prose/CodeGroup.vue +9 -9
  222. package/dist/runtime/components/prose/CodePreview.vue +6 -6
  223. package/dist/runtime/components/prose/CodeTree.vue +14 -14
  224. package/dist/runtime/components/prose/Collapsible.vue +7 -7
  225. package/dist/runtime/components/prose/Em.vue +4 -4
  226. package/dist/runtime/components/prose/Field.vue +13 -13
  227. package/dist/runtime/components/prose/FieldGroup.vue +4 -4
  228. package/dist/runtime/components/prose/H1.vue +5 -5
  229. package/dist/runtime/components/prose/H2.vue +7 -7
  230. package/dist/runtime/components/prose/H3.vue +7 -7
  231. package/dist/runtime/components/prose/H4.vue +5 -5
  232. package/dist/runtime/components/prose/Hr.vue +4 -4
  233. package/dist/runtime/components/prose/Icon.vue +4 -4
  234. package/dist/runtime/components/prose/Img.vue +12 -12
  235. package/dist/runtime/components/prose/Kbd.d.vue.ts +10 -2
  236. package/dist/runtime/components/prose/Kbd.vue +8 -5
  237. package/dist/runtime/components/prose/Kbd.vue.d.ts +10 -2
  238. package/dist/runtime/components/prose/Li.vue +4 -4
  239. package/dist/runtime/components/prose/Ol.vue +4 -4
  240. package/dist/runtime/components/prose/P.vue +4 -4
  241. package/dist/runtime/components/prose/Pre.vue +9 -9
  242. package/dist/runtime/components/prose/Prompt.vue +12 -12
  243. package/dist/runtime/components/prose/Steps.vue +4 -4
  244. package/dist/runtime/components/prose/Strong.vue +4 -4
  245. package/dist/runtime/components/prose/Table.vue +5 -5
  246. package/dist/runtime/components/prose/Tabs.vue +4 -4
  247. package/dist/runtime/components/prose/TabsItem.vue +5 -5
  248. package/dist/runtime/components/prose/Tbody.vue +4 -4
  249. package/dist/runtime/components/prose/Td.vue +4 -4
  250. package/dist/runtime/components/prose/Th.vue +4 -4
  251. package/dist/runtime/components/prose/Thead.vue +4 -4
  252. package/dist/runtime/components/prose/Tr.vue +4 -4
  253. package/dist/runtime/components/prose/Ul.vue +4 -4
  254. package/dist/runtime/composables/defineShortcuts.js +7 -2
  255. package/dist/runtime/composables/index.d.ts +1 -2
  256. package/dist/runtime/composables/index.js +1 -2
  257. package/dist/runtime/composables/useAvatarGroup.d.ts +12 -1
  258. package/dist/runtime/composables/useAvatarGroup.js +4 -2
  259. package/dist/runtime/composables/useComponentIcons.js +1 -1
  260. package/dist/runtime/composables/useComponentProps.d.ts +180 -0
  261. package/dist/runtime/composables/useComponentProps.js +59 -0
  262. package/dist/runtime/composables/useContentSearch.d.ts +4 -2
  263. package/dist/runtime/composables/useContentSearch.js +64 -7
  264. package/dist/runtime/composables/useFieldGroup.d.ts +9 -1
  265. package/dist/runtime/composables/useFormField.d.ts +21 -1
  266. package/dist/runtime/composables/useForwardProps.d.ts +13 -0
  267. package/dist/runtime/composables/useForwardProps.js +14 -0
  268. package/dist/runtime/composables/usePrefix.d.ts +6 -0
  269. package/dist/runtime/composables/usePrefix.js +11 -0
  270. package/dist/runtime/composables/useResizable.d.ts +4 -0
  271. package/dist/runtime/composables/useResizable.js +1 -1
  272. package/dist/runtime/locale/ar.js +1 -0
  273. package/dist/runtime/locale/az.js +1 -0
  274. package/dist/runtime/locale/be.js +1 -0
  275. package/dist/runtime/locale/bg.js +1 -0
  276. package/dist/runtime/locale/bn.js +1 -0
  277. package/dist/runtime/locale/ca.js +1 -0
  278. package/dist/runtime/locale/ckb.js +1 -0
  279. package/dist/runtime/locale/cs.js +1 -0
  280. package/dist/runtime/locale/da.js +1 -0
  281. package/dist/runtime/locale/de.js +1 -0
  282. package/dist/runtime/locale/de_ch.js +1 -0
  283. package/dist/runtime/locale/el.js +1 -0
  284. package/dist/runtime/locale/en.js +1 -0
  285. package/dist/runtime/locale/es.js +1 -0
  286. package/dist/runtime/locale/et.js +1 -0
  287. package/dist/runtime/locale/eu.js +1 -0
  288. package/dist/runtime/locale/fa_ir.js +1 -0
  289. package/dist/runtime/locale/fi.js +1 -0
  290. package/dist/runtime/locale/fr.js +1 -0
  291. package/dist/runtime/locale/gl.js +1 -0
  292. package/dist/runtime/locale/he.js +1 -0
  293. package/dist/runtime/locale/hi.js +1 -0
  294. package/dist/runtime/locale/hr.js +1 -0
  295. package/dist/runtime/locale/hu.js +1 -0
  296. package/dist/runtime/locale/hy.js +1 -0
  297. package/dist/runtime/locale/id.js +1 -0
  298. package/dist/runtime/locale/is.js +1 -0
  299. package/dist/runtime/locale/it.js +1 -0
  300. package/dist/runtime/locale/ja.js +1 -0
  301. package/dist/runtime/locale/ka.js +1 -0
  302. package/dist/runtime/locale/kk.js +1 -0
  303. package/dist/runtime/locale/km.js +1 -0
  304. package/dist/runtime/locale/ko.js +1 -0
  305. package/dist/runtime/locale/ky.js +1 -0
  306. package/dist/runtime/locale/lb.js +1 -0
  307. package/dist/runtime/locale/lo.js +1 -0
  308. package/dist/runtime/locale/lt.js +1 -0
  309. package/dist/runtime/locale/mn.js +1 -0
  310. package/dist/runtime/locale/ms.js +1 -0
  311. package/dist/runtime/locale/nb_no.js +1 -0
  312. package/dist/runtime/locale/nl.js +1 -0
  313. package/dist/runtime/locale/pl.js +1 -0
  314. package/dist/runtime/locale/pt.js +1 -0
  315. package/dist/runtime/locale/pt_br.js +1 -0
  316. package/dist/runtime/locale/ro.js +1 -0
  317. package/dist/runtime/locale/ru.js +1 -0
  318. package/dist/runtime/locale/sk.js +1 -0
  319. package/dist/runtime/locale/sl.js +1 -0
  320. package/dist/runtime/locale/sq.js +1 -0
  321. package/dist/runtime/locale/sv.js +1 -0
  322. package/dist/runtime/locale/th.js +7 -6
  323. package/dist/runtime/locale/tj.js +1 -0
  324. package/dist/runtime/locale/tr.js +1 -0
  325. package/dist/runtime/locale/ug_cn.js +1 -0
  326. package/dist/runtime/locale/uk.js +1 -0
  327. package/dist/runtime/locale/ur.js +1 -0
  328. package/dist/runtime/locale/uz.js +1 -0
  329. package/dist/runtime/locale/vi.js +1 -0
  330. package/dist/runtime/locale/zh_cn.js +1 -0
  331. package/dist/runtime/locale/zh_tw.js +1 -0
  332. package/dist/runtime/plugins/colors.js +1 -1
  333. package/dist/runtime/types/content.d.ts +1 -0
  334. package/dist/runtime/types/content.js +1 -0
  335. package/dist/runtime/types/form.d.ts +2 -2
  336. package/dist/runtime/types/locale.d.ts +1 -0
  337. package/dist/runtime/types/tv.d.ts +13 -7
  338. package/dist/runtime/types/utils.d.ts +3 -0
  339. package/dist/runtime/utils/dashboard.d.ts +1 -1
  340. package/dist/runtime/utils/{fuse.d.ts → search.d.ts} +2 -1
  341. package/dist/runtime/utils/{fuse.js → search.js} +11 -2
  342. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.vue +1 -0
  343. package/dist/runtime/vue/overrides/inertia/Link.d.vue.ts +2 -2
  344. package/dist/runtime/vue/overrides/inertia/Link.vue +5 -0
  345. package/dist/runtime/vue/overrides/inertia/Link.vue.d.ts +2 -2
  346. package/dist/runtime/vue/overrides/inertia/LinkBase.d.vue.ts +1 -1
  347. package/dist/runtime/vue/overrides/inertia/LinkBase.vue.d.ts +1 -1
  348. package/dist/runtime/vue/overrides/none/Link.d.vue.ts +2 -2
  349. package/dist/runtime/vue/overrides/none/Link.vue.d.ts +2 -2
  350. package/dist/runtime/vue/overrides/vue-router/Link.d.vue.ts +2 -2
  351. package/dist/runtime/vue/overrides/vue-router/Link.vue.d.ts +2 -2
  352. package/dist/shared/{ui.C6mn7iap.mjs → ui.BzjkAvk7.mjs} +244 -78
  353. package/dist/unplugin.mjs +1 -1
  354. package/dist/vite.mjs +1 -1
  355. package/package.json +46 -53
  356. package/dist/runtime/composables/useComponentUI.d.ts +0 -33
  357. package/dist/runtime/composables/useComponentUI.js +0 -13
  358. package/dist/runtime/composables/useResolvedVariants.d.ts +0 -21
  359. package/dist/runtime/composables/useResolvedVariants.js +0 -14
@@ -4,13 +4,14 @@ import theme from "#build/ui/input-menu";
4
4
 
5
5
  <script setup>
6
6
  import { computed, useTemplateRef, toRef, onMounted, toRaw, nextTick, watch } from "vue";
7
- import { TagsInputRoot, TagsInputItem, TagsInputItemText, TagsInputItemDelete, TagsInputInput, useForwardPropsEmits } from "reka-ui";
7
+ import { TagsInputRoot, TagsInputItem, TagsInputItemText, TagsInputItemDelete, TagsInputInput } from "reka-ui";
8
+ import { useForwardProps } from "../composables/useForwardProps";
8
9
  import { Combobox, Autocomplete } from "reka-ui/namespaced";
9
10
  import { defu } from "defu";
10
11
  import { isEqual } from "ohash/utils";
11
12
  import { reactivePick, reactiveOmit, createReusableTemplate } from "@vueuse/core";
12
13
  import { useAppConfig } from "#imports";
13
- import { useComponentUI } from "../composables/useComponentUI";
14
+ import { useComponentProps } from "../composables/useComponentProps";
14
15
  import { useFieldGroup, FieldGroupReset } from "../composables/useFieldGroup";
15
16
  import { useComponentIcons } from "../composables/useComponentIcons";
16
17
  import { useFormField } from "../composables/useFormField";
@@ -25,7 +26,7 @@ import UAvatar from "./Avatar.vue";
25
26
  import UButton from "./Button.vue";
26
27
  import UChip from "./Chip.vue";
27
28
  defineOptions({ inheritAttrs: false });
28
- const props = defineProps({
29
+ const _props = defineProps({
29
30
  as: { type: null, required: false },
30
31
  id: { type: String, required: false },
31
32
  type: { type: null, required: false, default: "text" },
@@ -55,7 +56,7 @@ const props = defineProps({
55
56
  multiple: { type: Boolean, required: false },
56
57
  highlight: { type: Boolean, required: false },
57
58
  fixed: { type: Boolean, required: false },
58
- autocomplete: { type: Boolean, required: false },
59
+ mode: { type: String, required: false, default: "combobox" },
59
60
  createItem: { type: [Boolean, String, Object], required: false },
60
61
  filterFields: { type: Array, required: false },
61
62
  ignoreFilter: { type: Boolean, required: false },
@@ -82,14 +83,16 @@ const props = defineProps({
82
83
  });
83
84
  const emits = defineEmits(["change", "blur", "focus", "create", "clear", "highlight", "remove-tag", "update:modelValue", "update:open"]);
84
85
  const slots = defineSlots();
86
+ const props = useComponentProps("inputMenu", _props);
85
87
  const searchTerm = defineModel("searchTerm", { type: String, ...{ default: "" } });
86
88
  const { t } = useLocale();
87
89
  const appConfig = useAppConfig();
88
- const uiProp = useComponentUI("inputMenu", props);
89
90
  const { filterGroups } = useFilter();
91
+ const isAutocomplete = computed(() => props.mode === "autocomplete");
90
92
  const rootPropsPick = reactivePick(props, "as", "modelValue", "defaultValue", "open", "defaultOpen", "required", "multiple", "resetSearchTermOnBlur", "resetSearchTermOnSelect", "resetModelValueOnClear", "highlightOnHover", "openOnClick", "openOnFocus", "by");
91
- const rootProps = useForwardPropsEmits(props.autocomplete ? reactiveOmit(rootPropsPick, "multiple", "resetSearchTermOnSelect", "resetModelValueOnClear", "by") : rootPropsPick, emits);
92
- const Component = computed(() => props.autocomplete ? Autocomplete : Combobox);
93
+ const rootPropsOmitted = reactiveOmit(rootPropsPick, "multiple", "resetSearchTermOnSelect", "resetModelValueOnClear", "by");
94
+ const rootProps = useForwardProps(computed(() => isAutocomplete.value ? rootPropsOmitted : rootPropsPick), emits);
95
+ const Component = computed(() => isAutocomplete.value ? Autocomplete : Combobox);
93
96
  const portalProps = usePortal(toRef(() => props.portal));
94
97
  const contentProps = toRef(() => defu(props.content, { side: "bottom", sideOffset: 8, collisionPadding: 8, position: "popper" }));
95
98
  const arrowProps = toRef(() => defu(props.arrow, { rounded: true }));
@@ -100,8 +103,8 @@ const virtualizerProps = toRef(() => {
100
103
  estimateSize: getEstimateSize(filteredItems.value, inputSize.value || "md", props.descriptionKey, !!slots["item-description"])
101
104
  });
102
105
  });
103
- const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, size: formFieldSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props);
104
- const { orientation, size: fieldGroupSize } = useFieldGroup(props);
106
+ const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, size: formFieldSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(_props);
107
+ const { orientation, size: fieldGroupSize } = useFieldGroup(_props);
105
108
  const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(props, { trailingIcon: appConfig.ui.icons.chevronDown })));
106
109
  const inputSize = computed(() => fieldGroupSize.value || formFieldSize.value);
107
110
  const [DefineCreateItemTemplate, ReuseCreateItemTemplate] = createReusableTemplate();
@@ -118,11 +121,11 @@ const [DefineItemTemplate, ReuseItemTemplate] = createReusableTemplate({
118
121
  }
119
122
  });
120
123
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.inputMenu || {} })({
121
- color: color.value,
124
+ color: color.value ?? props.color,
122
125
  variant: props.variant,
123
- size: inputSize?.value,
126
+ size: inputSize?.value ?? props.size,
124
127
  loading: props.loading,
125
- highlight: highlight.value,
128
+ highlight: highlight.value ?? props.highlight,
126
129
  fixed: props.fixed,
127
130
  leading: isLeading.value || !!props.avatar || !!slots.leading,
128
131
  trailing: isTrailing.value || !!slots.trailing,
@@ -171,7 +174,7 @@ function autoFocus() {
171
174
  }
172
175
  onMounted(() => {
173
176
  nextTick(() => {
174
- if (props.autocomplete) {
177
+ if (isAutocomplete.value) {
175
178
  searchTerm.value = String(props.modelValue ?? props.defaultValue ?? "");
176
179
  } else {
177
180
  searchTerm.value = "";
@@ -182,7 +185,7 @@ onMounted(() => {
182
185
  }, props.autofocusDelay);
183
186
  });
184
187
  watch(() => props.modelValue, (newValue) => {
185
- if (props.autocomplete) {
188
+ if (isAutocomplete.value) {
186
189
  searchTerm.value = String(newValue ?? "");
187
190
  }
188
191
  });
@@ -206,14 +209,14 @@ function onUpdate(value) {
206
209
  emits("change", event);
207
210
  emitFormChange();
208
211
  emitFormInput();
209
- if (props.autocomplete) {
212
+ if (isAutocomplete.value) {
210
213
  searchTerm.value = String(value ?? "");
211
214
  } else if (props.resetSearchTermOnSelect) {
212
215
  searchTerm.value = "";
213
216
  }
214
217
  }
215
218
  function onInputUpdate(value) {
216
- if (!props.autocomplete) {
219
+ if (!isAutocomplete.value) {
217
220
  searchTerm.value = value;
218
221
  }
219
222
  }
@@ -231,7 +234,7 @@ function onUpdateOpen(value) {
231
234
  const event = new FocusEvent("blur");
232
235
  emits("blur", event);
233
236
  emitFormBlur();
234
- if (!props.autocomplete && props.resetSearchTermOnBlur) {
237
+ if (!isAutocomplete.value && props.resetSearchTermOnBlur) {
235
238
  const STATE_ANIMATION_DELAY_MS = 100;
236
239
  timeoutId = setTimeout(() => {
237
240
  searchTerm.value = "";
@@ -290,11 +293,11 @@ defineExpose({
290
293
  <DefineCreateItemTemplate>
291
294
  <Component.Item
292
295
  data-slot="item"
293
- :class="ui.item({ class: uiProp?.item })"
296
+ :class="ui.item({ class: props.ui?.item })"
294
297
  :value="searchTerm"
295
298
  @select="onCreate"
296
299
  >
297
- <span data-slot="itemLabel" :class="ui.itemLabel({ class: uiProp?.itemLabel })">
300
+ <span data-slot="itemLabel" :class="ui.itemLabel({ class: props.ui?.itemLabel })">
298
301
  <slot name="create-item-label" :item="searchTerm">
299
302
  {{ t("inputMenu.create", { label: searchTerm }) }}
300
303
  </slot>
@@ -303,54 +306,54 @@ defineExpose({
303
306
  </DefineCreateItemTemplate>
304
307
 
305
308
  <DefineItemTemplate v-slot="{ item, index }">
306
- <Component.Label v-if="isInputItem(item) && item.type === 'label'" data-slot="label" :class="ui.label({ class: [uiProp?.label, item.ui?.label, item.class] })">
309
+ <Component.Label v-if="isInputItem(item) && item.type === 'label'" data-slot="label" :class="ui.label({ class: [props.ui?.label, item.ui?.label, item.class] })">
307
310
  {{ get(item, props.labelKey) }}
308
311
  </Component.Label>
309
312
 
310
- <Component.Separator v-else-if="isInputItem(item) && item.type === 'separator'" data-slot="separator" :class="ui.separator({ class: [uiProp?.separator, item.ui?.separator, item.class] })" />
313
+ <Component.Separator v-else-if="isInputItem(item) && item.type === 'separator'" data-slot="separator" :class="ui.separator({ class: [props.ui?.separator, item.ui?.separator, item.class] })" />
311
314
 
312
315
  <Component.Item
313
316
  v-else
314
317
  data-slot="item"
315
- :class="ui.item({ class: [uiProp?.item, isInputItem(item) && item.ui?.item, isInputItem(item) && item.class] })"
318
+ :class="ui.item({ class: [props.ui?.item, isInputItem(item) && item.ui?.item, isInputItem(item) && item.class] })"
316
319
  :disabled="isInputItem(item) && item.disabled"
317
320
  :value="props.valueKey && isInputItem(item) ? get(item, props.valueKey) : item"
318
321
  @select="onSelect($event, item)"
319
322
  >
320
323
  <slot name="item" :item="item" :index="index" :ui="ui">
321
324
  <slot name="item-leading" :item="item" :index="index" :ui="ui">
322
- <UIcon v-if="isInputItem(item) && item.icon" :name="item.icon" data-slot="itemLeadingIcon" :class="ui.itemLeadingIcon({ class: [uiProp?.itemLeadingIcon, item.ui?.itemLeadingIcon] })" />
323
- <UAvatar v-else-if="isInputItem(item) && item.avatar" :size="item.ui?.itemLeadingAvatarSize || uiProp?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()" v-bind="item.avatar" data-slot="itemLeadingAvatar" :class="ui.itemLeadingAvatar({ class: [uiProp?.itemLeadingAvatar, item.ui?.itemLeadingAvatar] })" />
325
+ <UIcon v-if="isInputItem(item) && item.icon" :name="item.icon" data-slot="itemLeadingIcon" :class="ui.itemLeadingIcon({ class: [props.ui?.itemLeadingIcon, item.ui?.itemLeadingIcon] })" />
326
+ <UAvatar v-else-if="isInputItem(item) && item.avatar" :size="item.ui?.itemLeadingAvatarSize || props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()" v-bind="item.avatar" data-slot="itemLeadingAvatar" :class="ui.itemLeadingAvatar({ class: [props.ui?.itemLeadingAvatar, item.ui?.itemLeadingAvatar] })" />
324
327
  <UChip
325
328
  v-else-if="isInputItem(item) && item.chip"
326
- :size="item.ui?.itemLeadingChipSize || uiProp?.itemLeadingChipSize || ui.itemLeadingChipSize()"
329
+ :size="item.ui?.itemLeadingChipSize || props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()"
327
330
  inset
328
331
  standalone
329
332
  v-bind="item.chip"
330
333
  data-slot="itemLeadingChip"
331
- :class="ui.itemLeadingChip({ class: [uiProp?.itemLeadingChip, item.ui?.itemLeadingChip] })"
334
+ :class="ui.itemLeadingChip({ class: [props.ui?.itemLeadingChip, item.ui?.itemLeadingChip] })"
332
335
  />
333
336
  </slot>
334
337
 
335
- <span data-slot="itemWrapper" :class="ui.itemWrapper({ class: [uiProp?.itemWrapper, isInputItem(item) && item.ui?.itemWrapper] })">
336
- <span data-slot="itemLabel" :class="ui.itemLabel({ class: [uiProp?.itemLabel, isInputItem(item) && item.ui?.itemLabel] })">
338
+ <span data-slot="itemWrapper" :class="ui.itemWrapper({ class: [props.ui?.itemWrapper, isInputItem(item) && item.ui?.itemWrapper] })">
339
+ <span data-slot="itemLabel" :class="ui.itemLabel({ class: [props.ui?.itemLabel, isInputItem(item) && item.ui?.itemLabel] })">
337
340
  <slot name="item-label" :item="item" :index="index">
338
341
  {{ isInputItem(item) ? get(item, props.labelKey) : item }}
339
342
  </slot>
340
343
  </span>
341
344
 
342
- <span v-if="isInputItem(item) && (get(item, props.descriptionKey) || !!slots['item-description'])" data-slot="itemDescription" :class="ui.itemDescription({ class: [uiProp?.itemDescription, isInputItem(item) && item.ui?.itemDescription] })">
345
+ <span v-if="isInputItem(item) && (get(item, props.descriptionKey) || !!slots['item-description'])" data-slot="itemDescription" :class="ui.itemDescription({ class: [props.ui?.itemDescription, isInputItem(item) && item.ui?.itemDescription] })">
343
346
  <slot name="item-description" :item="item" :index="index">
344
347
  {{ get(item, props.descriptionKey) }}
345
348
  </slot>
346
349
  </span>
347
350
  </span>
348
351
 
349
- <span data-slot="itemTrailing" :class="ui.itemTrailing({ class: [uiProp?.itemTrailing, isInputItem(item) && item.ui?.itemTrailing] })">
352
+ <span data-slot="itemTrailing" :class="ui.itemTrailing({ class: [props.ui?.itemTrailing, isInputItem(item) && item.ui?.itemTrailing] })">
350
353
  <slot name="item-trailing" :item="item" :index="index" :ui="ui" />
351
354
 
352
- <Component.ItemIndicator v-if="!autocomplete" as-child>
353
- <UIcon :name="selectedIcon || appConfig.ui.icons.check" data-slot="itemTrailingIcon" :class="ui.itemTrailingIcon({ class: [uiProp?.itemTrailingIcon, isInputItem(item) && item.ui?.itemTrailingIcon] })" />
355
+ <Component.ItemIndicator v-if="!isAutocomplete" as-child>
356
+ <UIcon :name="props.selectedIcon || appConfig.ui.icons.check" data-slot="itemTrailingIcon" :class="ui.itemTrailingIcon({ class: [props.ui?.itemTrailingIcon, isInputItem(item) && item.ui?.itemTrailingIcon] })" />
354
357
  </Component.ItemIndicator>
355
358
  </span>
356
359
  </slot>
@@ -363,35 +366,35 @@ defineExpose({
363
366
  :name="name"
364
367
  :disabled="disabled"
365
368
  data-slot="root"
366
- :class="ui.root({ class: [uiProp?.root, props.class] })"
367
- :as-child="!!multiple && !autocomplete"
369
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
370
+ :as-child="!!props.multiple && !isAutocomplete"
368
371
  ignore-filter
369
372
  @update:model-value="onUpdate"
370
373
  @update:open="onUpdateOpen"
371
374
  >
372
- <Component.Anchor :as-child="!multiple" data-slot="base" :class="ui.base({ class: uiProp?.base })">
375
+ <Component.Anchor :as-child="!props.multiple" data-slot="base" :class="ui.base({ class: props.ui?.base })">
373
376
  <TagsInputRoot
374
- v-if="multiple && !autocomplete"
377
+ v-if="props.multiple && !isAutocomplete"
375
378
  v-slot="{ modelValue: tags }"
376
379
  :model-value="modelValue"
377
380
  :disabled="disabled"
378
- :required="required"
381
+ :required="props.required"
379
382
  delimiter=""
380
383
  as-child
381
384
  @blur="onBlur"
382
385
  @focus="onFocus"
383
386
  @remove-tag="onRemoveTag($event, modelValue)"
384
387
  >
385
- <TagsInputItem v-for="(item, index) in tags" :key="index" :value="item" data-slot="tagsItem" :class="ui.tagsItem({ class: [uiProp?.tagsItem, isInputItem(item) && item.ui?.tagsItem] })">
386
- <TagsInputItemText data-slot="tagsItemText" :class="ui.tagsItemText({ class: [uiProp?.tagsItemText, isInputItem(item) && item.ui?.tagsItemText] })">
388
+ <TagsInputItem v-for="(item, index) in tags" :key="index" :value="item" data-slot="tagsItem" :class="ui.tagsItem({ class: [props.ui?.tagsItem, isInputItem(item) && item.ui?.tagsItem] })">
389
+ <TagsInputItemText data-slot="tagsItemText" :class="ui.tagsItemText({ class: [props.ui?.tagsItemText, isInputItem(item) && item.ui?.tagsItemText] })">
387
390
  <slot name="tags-item-text" :item="item" :index="index">
388
391
  {{ displayValue(item) }}
389
392
  </slot>
390
393
  </TagsInputItemText>
391
394
 
392
- <TagsInputItemDelete data-slot="tagsItemDelete" :class="ui.tagsItemDelete({ class: [uiProp?.tagsItemDelete, isInputItem(item) && item.ui?.tagsItemDelete] })" :disabled="disabled">
395
+ <TagsInputItemDelete data-slot="tagsItemDelete" :class="ui.tagsItemDelete({ class: [props.ui?.tagsItemDelete, isInputItem(item) && item.ui?.tagsItemDelete] })" :disabled="disabled">
393
396
  <slot name="tags-item-delete" :item="item" :index="index" :ui="ui">
394
- <UIcon :name="deleteIcon || appConfig.ui.icons.close" data-slot="tagsItemDeleteIcon" :class="ui.tagsItemDeleteIcon({ class: [uiProp?.tagsItemDeleteIcon, isInputItem(item) && item.ui?.tagsItemDeleteIcon] })" />
397
+ <UIcon :name="props.deleteIcon || appConfig.ui.icons.close" data-slot="tagsItemDeleteIcon" :class="ui.tagsItemDeleteIcon({ class: [props.ui?.tagsItemDeleteIcon, isInputItem(item) && item.ui?.tagsItemDeleteIcon] })" />
395
398
  </slot>
396
399
  </TagsInputItemDelete>
397
400
  </TagsInputItem>
@@ -401,9 +404,9 @@ defineExpose({
401
404
  :id="id"
402
405
  ref="inputRef"
403
406
  v-bind="{ ...$attrs, ...ariaAttrs }"
404
- :placeholder="placeholder"
407
+ :placeholder="props.placeholder"
405
408
  data-slot="tagsInput"
406
- :class="ui.tagsInput({ class: uiProp?.tagsInput })"
409
+ :class="ui.tagsInput({ class: props.ui?.tagsInput })"
407
410
  @change.stop
408
411
  />
409
412
  </Component.Input>
@@ -413,58 +416,58 @@ defineExpose({
413
416
  v-else
414
417
  :id="id"
415
418
  ref="inputRef"
416
- v-bind="{ ...!autocomplete ? { displayValue } : {}, ...$attrs, ...ariaAttrs }"
417
- :type="type"
418
- :placeholder="placeholder"
419
- :required="required"
419
+ v-bind="{ ...!isAutocomplete ? { displayValue } : {}, ...$attrs, ...ariaAttrs }"
420
+ :type="props.type"
421
+ :placeholder="props.placeholder"
422
+ :required="props.required"
420
423
  @blur="onBlur"
421
424
  @focus="onFocus"
422
425
  @change.stop
423
426
  @update:model-value="onInputUpdate"
424
427
  />
425
428
 
426
- <span v-if="isLeading || !!avatar || !!slots.leading" data-slot="leading" :class="ui.leading({ class: uiProp?.leading })">
429
+ <span v-if="isLeading || !!props.avatar || !!slots.leading" data-slot="leading" :class="ui.leading({ class: props.ui?.leading })">
427
430
  <slot name="leading" :model-value="modelValue" :open="open" :ui="ui">
428
- <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" data-slot="leadingIcon" :class="ui.leadingIcon({ class: uiProp?.leadingIcon })" />
429
- <UAvatar v-else-if="!!avatar" :size="uiProp?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()" v-bind="avatar" data-slot="itemLeadingAvatar" :class="ui.itemLeadingAvatar({ class: uiProp?.itemLeadingAvatar })" />
431
+ <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" data-slot="leadingIcon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
432
+ <UAvatar v-else-if="!!props.avatar" :size="props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()" v-bind="props.avatar" data-slot="itemLeadingAvatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
430
433
  </slot>
431
434
  </span>
432
435
 
433
- <Component.Trigger v-if="isTrailing || !!slots.trailing || !!clear" data-slot="trailing" :class="ui.trailing({ class: uiProp?.trailing })">
436
+ <Component.Trigger v-if="isTrailing || !!slots.trailing || !!props.clear" data-slot="trailing" :class="ui.trailing({ class: props.ui?.trailing })">
434
437
  <slot name="trailing" :model-value="modelValue" :open="open" :ui="ui">
435
- <Component.Cancel v-if="!!clear && !isModelValueEmpty(modelValue)" as-child>
438
+ <Component.Cancel v-if="!!props.clear && !isModelValueEmpty(modelValue)" as-child>
436
439
  <UButton
437
440
  as="span"
438
- :icon="clearIcon || appConfig.ui.icons.close"
441
+ :icon="props.clearIcon || appConfig.ui.icons.close"
439
442
  :size="inputSize"
440
443
  variant="link"
441
444
  color="neutral"
442
445
  tabindex="-1"
443
446
  v-bind="clearProps"
444
447
  data-slot="trailingClear"
445
- :class="ui.trailingClear({ class: uiProp?.trailingClear })"
448
+ :class="ui.trailingClear({ class: props.ui?.trailingClear })"
446
449
  @click.stop="onClear"
447
450
  />
448
451
  </Component.Cancel>
449
452
 
450
- <UIcon v-else-if="trailingIconName" :name="trailingIconName" data-slot="trailingIcon" :class="ui.trailingIcon({ class: uiProp?.trailingIcon })" />
453
+ <UIcon v-else-if="trailingIconName" :name="trailingIconName" data-slot="trailingIcon" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
451
454
  </slot>
452
455
  </Component.Trigger>
453
456
  </Component.Anchor>
454
457
 
455
458
  <Component.Portal v-bind="portalProps">
456
459
  <FieldGroupReset>
457
- <Component.Content data-slot="content" :class="ui.content({ class: uiProp?.content })" v-bind="contentProps" @focus-outside.prevent>
460
+ <Component.Content data-slot="content" :class="ui.content({ class: props.ui?.content })" v-bind="contentProps" @focus-outside.prevent>
458
461
  <slot name="content-top" />
459
462
 
460
- <Component.Empty data-slot="empty" :class="ui.empty({ class: uiProp?.empty })">
463
+ <Component.Empty data-slot="empty" :class="ui.empty({ class: props.ui?.empty })">
461
464
  <slot name="empty" :search-term="searchTerm">
462
465
  {{ searchTerm ? t("inputMenu.noMatch", { searchTerm }) : t("inputMenu.noData") }}
463
466
  </slot>
464
467
  </Component.Empty>
465
468
 
466
- <div ref="viewportRef" role="presentation" data-slot="viewport" :class="ui.viewport({ class: uiProp?.viewport })">
467
- <template v-if="!!virtualize">
469
+ <div ref="viewportRef" role="presentation" data-slot="viewport" :class="ui.viewport({ class: props.ui?.viewport })">
470
+ <template v-if="!!props.virtualize">
468
471
  <ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'top'" />
469
472
 
470
473
  <Component.Virtualizer
@@ -480,15 +483,15 @@ defineExpose({
480
483
  </template>
481
484
 
482
485
  <template v-else>
483
- <Component.Group v-if="createItem && createItemPosition === 'top'" data-slot="group" :class="ui.group({ class: uiProp?.group })">
486
+ <Component.Group v-if="createItem && createItemPosition === 'top'" data-slot="group" :class="ui.group({ class: props.ui?.group })">
484
487
  <ReuseCreateItemTemplate />
485
488
  </Component.Group>
486
489
 
487
- <Component.Group v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" data-slot="group" :class="ui.group({ class: uiProp?.group })">
490
+ <Component.Group v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" data-slot="group" :class="ui.group({ class: props.ui?.group })">
488
491
  <ReuseItemTemplate v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`" :item="item" :index="index" />
489
492
  </Component.Group>
490
493
 
491
- <Component.Group v-if="createItem && createItemPosition === 'bottom'" data-slot="group" :class="ui.group({ class: uiProp?.group })">
494
+ <Component.Group v-if="createItem && createItemPosition === 'bottom'" data-slot="group" :class="ui.group({ class: props.ui?.group })">
492
495
  <ReuseCreateItemTemplate />
493
496
  </Component.Group>
494
497
  </template>
@@ -496,7 +499,7 @@ defineExpose({
496
499
 
497
500
  <slot name="content-bottom" />
498
501
 
499
- <Component.Arrow v-if="!!arrow" v-bind="arrowProps" data-slot="arrow" :class="ui.arrow({ class: uiProp?.arrow })" />
502
+ <Component.Arrow v-if="!!props.arrow" v-bind="arrowProps" data-slot="arrow" :class="ui.arrow({ class: props.ui?.arrow })" />
500
503
  </Component.Content>
501
504
  </FieldGroupReset>
502
505
  </Component.Portal>
@@ -34,7 +34,7 @@ type ExcludeItem = {
34
34
  type: 'label' | 'separator';
35
35
  };
36
36
  type IsClearUsed<M extends boolean, C extends boolean | object> = M extends false ? (C extends true ? null : C extends object ? null : never) : never;
37
- export interface InputMenuProps<T extends ArrayOrNested<InputMenuItem> = ArrayOrNested<InputMenuItem>, VK extends GetItemKeys<T> | undefined = undefined, M extends boolean = false, Mod extends Omit<ModelModifiers, 'lazy'> = Omit<ModelModifiers, 'lazy'>, C extends boolean | object = false> extends Pick<ComboboxRootProps<T>, 'open' | 'defaultOpen' | 'disabled' | 'name' | 'resetSearchTermOnBlur' | 'resetSearchTermOnSelect' | 'resetModelValueOnClear' | 'highlightOnHover' | 'openOnClick' | 'openOnFocus' | 'by'>, UseComponentIconsProps, /** @vue-ignore */ Omit<InputHTMLAttributes, 'autocomplete' | 'disabled' | 'name' | 'type' | 'placeholder' | 'autofocus' | 'maxlength' | 'minlength' | 'pattern' | 'size' | 'min' | 'max' | 'step'> {
37
+ export interface InputMenuProps<T extends ArrayOrNested<InputMenuItem> = ArrayOrNested<InputMenuItem>, VK extends GetItemKeys<T> | undefined = undefined, M extends boolean = false, Mod extends Omit<ModelModifiers, 'lazy'> = Omit<ModelModifiers, 'lazy'>, C extends boolean | object = false> extends Pick<ComboboxRootProps<T>, 'open' | 'defaultOpen' | 'disabled' | 'name' | 'resetSearchTermOnBlur' | 'resetSearchTermOnSelect' | 'resetModelValueOnClear' | 'highlightOnHover' | 'openOnClick' | 'openOnFocus' | 'by'>, UseComponentIconsProps, /** @vue-ignore */ Omit<InputHTMLAttributes, 'disabled' | 'name' | 'type' | 'placeholder' | 'autofocus' | 'maxlength' | 'minlength' | 'pattern' | 'size' | 'min' | 'max' | 'step'> {
38
38
  /**
39
39
  * The element or component this component should render as.
40
40
  * @defaultValue 'div'
@@ -151,11 +151,12 @@ export interface InputMenuProps<T extends ArrayOrNested<InputMenuItem> = ArrayOr
151
151
  /** Keep the mobile text size on all breakpoints. */
152
152
  fixed?: boolean;
153
153
  /**
154
- * When `true`, the input accepts free-form text with optional suggestions.
155
- * The `modelValue` becomes the input text (string) instead of a selected item.
156
- * @defaultValue false
154
+ * The behavior of the InputMenu.
155
+ * - `combobox`: select one (or many) items from a list of suggestions.
156
+ * - `autocomplete`: free-form text input with optional suggestions. The `modelValue` becomes the input text (`string`) instead of a selected item.
157
+ * @defaultValue 'combobox'
157
158
  */
158
- autocomplete?: boolean;
159
+ mode?: 'combobox' | 'autocomplete';
159
160
  /**
160
161
  * Determines if custom user input that does not exist in options can be added.
161
162
  * @defaultValue false
@@ -244,6 +245,30 @@ declare const __VLS_export: <T extends ArrayOrNested<InputMenuItem>, VK extends
244
245
  onBlur?: ((event: FocusEvent) => any) | undefined;
245
246
  onChange?: ((event: Event) => any) | undefined;
246
247
  onFocus?: ((event: FocusEvent) => any) | undefined;
248
+ onClear?: (() => any) | undefined;
249
+ onCreate?: ((item: string) => any) | undefined;
250
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
251
+ "onUpdate:modelValue"?: ((value: (Mod extends {
252
+ number: true;
253
+ } ? (Mod extends {
254
+ optional: true;
255
+ } ? (Mod extends {
256
+ nullable: true;
257
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
258
+ nullable: true;
259
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) extends infer T_1 ? T_1 extends (Mod extends {
260
+ optional: true;
261
+ } ? (Mod extends {
262
+ nullable: true;
263
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
264
+ nullable: true;
265
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) ? T_1 extends string ? number | T_1 : T_1 : never : never : Mod extends {
266
+ optional: true;
267
+ } ? (Mod extends {
268
+ nullable: true;
269
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
270
+ nullable: true;
271
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | IsClearUsed<M, C>) => any) | undefined;
247
272
  onHighlight?: ((payload: {
248
273
  ref: HTMLElement;
249
274
  value: (Mod extends {
@@ -268,30 +293,6 @@ declare const __VLS_export: <T extends ArrayOrNested<InputMenuItem>, VK extends
268
293
  nullable: true;
269
294
  } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | IsClearUsed<M, C>;
270
295
  } | undefined) => any) | undefined;
271
- onClear?: (() => any) | undefined;
272
- "onUpdate:open"?: ((value: boolean) => any) | undefined;
273
- onCreate?: ((item: string) => any) | undefined;
274
- "onUpdate:modelValue"?: ((value: (Mod extends {
275
- number: true;
276
- } ? (Mod extends {
277
- optional: true;
278
- } ? (Mod extends {
279
- nullable: true;
280
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
281
- nullable: true;
282
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) extends infer T_1 ? T_1 extends (Mod extends {
283
- optional: true;
284
- } ? (Mod extends {
285
- nullable: true;
286
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
287
- nullable: true;
288
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) ? T_1 extends string ? number | T_1 : T_1 : never : never : Mod extends {
289
- optional: true;
290
- } ? (Mod extends {
291
- nullable: true;
292
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
293
- nullable: true;
294
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | IsClearUsed<M, C>) => any) | undefined;
295
296
  "onUpdate:searchTerm"?: ((value: string) => any) | undefined;
296
297
  "onRemove-tag"?: ((item: (Mod extends {
297
298
  number: true;
@@ -323,7 +324,27 @@ declare const __VLS_export: <T extends ArrayOrNested<InputMenuItem>, VK extends
323
324
  }>) => void;
324
325
  attrs: any;
325
326
  slots: InputMenuSlots<T, VK, M, Mod, C, NestedItem<T>>;
326
- emit: (((evt: "blur", event: FocusEvent) => void) & ((evt: "change", event: Event) => void) & ((evt: "focus", event: FocusEvent) => void) & ((evt: "highlight", payload: {
327
+ emit: (((evt: "blur", event: FocusEvent) => void) & ((evt: "change", event: Event) => void) & ((evt: "focus", event: FocusEvent) => void) & ((evt: "clear") => void) & ((evt: "create", item: string) => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "update:modelValue", value: (Mod extends {
328
+ number: true;
329
+ } ? (Mod extends {
330
+ optional: true;
331
+ } ? (Mod extends {
332
+ nullable: true;
333
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
334
+ nullable: true;
335
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) extends infer T_1 ? T_1 extends (Mod extends {
336
+ optional: true;
337
+ } ? (Mod extends {
338
+ nullable: true;
339
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
340
+ nullable: true;
341
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) ? T_1 extends string ? number | T_1 : T_1 : never : never : Mod extends {
342
+ optional: true;
343
+ } ? (Mod extends {
344
+ nullable: true;
345
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
346
+ nullable: true;
347
+ } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | IsClearUsed<M, C>) => void) & ((evt: "highlight", payload: {
327
348
  ref: HTMLElement;
328
349
  value: (Mod extends {
329
350
  number: true;
@@ -346,27 +367,7 @@ declare const __VLS_export: <T extends ArrayOrNested<InputMenuItem>, VK extends
346
367
  } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
347
368
  nullable: true;
348
369
  } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | IsClearUsed<M, C>;
349
- } | undefined) => void) & ((evt: "clear") => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "create", item: string) => void) & ((evt: "update:modelValue", value: (Mod extends {
350
- number: true;
351
- } ? (Mod extends {
352
- optional: true;
353
- } ? (Mod extends {
354
- nullable: true;
355
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
356
- nullable: true;
357
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) extends infer T_1 ? T_1 extends (Mod extends {
358
- optional: true;
359
- } ? (Mod extends {
360
- nullable: true;
361
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
362
- nullable: true;
363
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) ? T_1 extends string ? number | T_1 : T_1 : never : never : Mod extends {
364
- optional: true;
365
- } ? (Mod extends {
366
- nullable: true;
367
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | undefined : Mod extends {
368
- nullable: true;
369
- } ? GetModelValue<T, VK, M, ExcludeItem> | null : GetModelValue<T, VK, M, ExcludeItem>) | IsClearUsed<M, C>) => void) & ((evt: "remove-tag", item: (Mod extends {
370
+ } | undefined) => void) & ((evt: "remove-tag", item: (Mod extends {
370
371
  number: true;
371
372
  } ? (Mod extends {
372
373
  optional: true;
@@ -4,17 +4,18 @@ import theme from "#build/ui/input-number";
4
4
 
5
5
  <script setup>
6
6
  import { onMounted, computed, useTemplateRef, toRef } from "vue";
7
- import { NumberFieldRoot, NumberFieldInput, NumberFieldDecrement, NumberFieldIncrement, useForwardPropsEmits } from "reka-ui";
7
+ import { NumberFieldRoot, NumberFieldInput, NumberFieldDecrement, NumberFieldIncrement } from "reka-ui";
8
+ import { useForwardProps } from "../composables/useForwardProps";
8
9
  import { reactivePick, useVModel } from "@vueuse/core";
9
10
  import { useAppConfig } from "#imports";
10
- import { useComponentUI } from "../composables/useComponentUI";
11
+ import { useComponentProps } from "../composables/useComponentProps";
11
12
  import { useFieldGroup } from "../composables/useFieldGroup";
12
13
  import { useFormField } from "../composables/useFormField";
13
14
  import { useLocale } from "../composables/useLocale";
14
15
  import { tv } from "../utils/tv";
15
16
  import UButton from "./Button.vue";
16
17
  defineOptions({ inheritAttrs: false });
17
- const props = defineProps({
18
+ const _props = defineProps({
18
19
  as: { type: null, required: false },
19
20
  placeholder: { type: String, required: false },
20
21
  color: { type: null, required: false },
@@ -52,19 +53,19 @@ const props = defineProps({
52
53
  });
53
54
  const emits = defineEmits(["update:modelValue", "blur", "change"]);
54
55
  defineSlots();
56
+ const props = useComponentProps("inputNumber", _props);
55
57
  const modelValue = useVModel(props, "modelValue", emits, { defaultValue: props.defaultValue });
56
58
  const { t } = useLocale();
57
59
  const appConfig = useAppConfig();
58
- const uiProp = useComponentUI("inputNumber", props);
59
- const rootProps = useForwardPropsEmits(reactivePick(props, "as", "stepSnapping", "formatOptions", "disableWheelChange", "invertWheelChange", "required", "readonly", "focusOnChange"), emits);
60
- const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, id, color, size: formFieldSize, name, highlight, disabled, ariaAttrs } = useFormField(props);
61
- const { orientation, size: fieldGroupSize } = useFieldGroup(props);
60
+ const rootProps = useForwardProps(reactivePick(props, "as", "stepSnapping", "formatOptions", "disableWheelChange", "invertWheelChange", "required", "readonly", "focusOnChange"), emits);
61
+ const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, id, color, size: formFieldSize, name, highlight, disabled, ariaAttrs } = useFormField(_props);
62
+ const { orientation, size: fieldGroupSize } = useFieldGroup(_props);
62
63
  const inputSize = computed(() => fieldGroupSize.value || formFieldSize.value);
63
64
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.inputNumber || {} })({
64
- color: color.value,
65
+ color: color.value ?? props.color,
65
66
  variant: props.variant,
66
- size: inputSize.value,
67
- highlight: highlight.value,
67
+ size: inputSize.value ?? props.size,
68
+ highlight: highlight.value ?? props.highlight,
68
69
  fixed: props.fixed,
69
70
  orientation: props.orientation,
70
71
  fieldGroup: orientation.value,
@@ -106,13 +107,13 @@ defineExpose({
106
107
  <NumberFieldRoot
107
108
  v-bind="rootProps"
108
109
  :id="id"
109
- :default-value="defaultValue"
110
+ :default-value="props.defaultValue"
110
111
  :model-value="modelValue"
111
- :min="min"
112
- :max="max"
113
- :step="step"
112
+ :min="props.min"
113
+ :max="props.max"
114
+ :step="props.step"
114
115
  data-slot="root"
115
- :class="ui.root({ class: [uiProp?.root, props.class] })"
116
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
116
117
  :name="name"
117
118
  :disabled="disabled"
118
119
  @update:model-value="(val) => onUpdate(val)"
@@ -120,16 +121,16 @@ defineExpose({
120
121
  <NumberFieldInput
121
122
  v-bind="{ ...$attrs, ...ariaAttrs }"
122
123
  ref="inputRef"
123
- :placeholder="placeholder"
124
- :required="required"
124
+ :placeholder="props.placeholder"
125
+ :required="props.required"
125
126
  data-slot="base"
126
- :class="ui.base({ class: uiProp?.base })"
127
+ :class="ui.base({ class: props.ui?.base })"
127
128
  @blur="onBlur"
128
129
  @focus="emitFormFocus"
129
130
  />
130
131
 
131
- <div v-if="!!increment" data-slot="increment" :class="ui.increment({ class: uiProp?.increment })">
132
- <NumberFieldIncrement as-child :disabled="disabled || incrementDisabled">
132
+ <div v-if="!!props.increment" data-slot="increment" :class="ui.increment({ class: props.ui?.increment })">
133
+ <NumberFieldIncrement as-child :disabled="disabled || props.incrementDisabled">
133
134
  <slot name="increment">
134
135
  <UButton
135
136
  :icon="incrementIcon"
@@ -137,14 +138,14 @@ defineExpose({
137
138
  :size="inputSize"
138
139
  variant="link"
139
140
  :aria-label="t('inputNumber.increment')"
140
- v-bind="typeof increment === 'object' ? increment : void 0"
141
+ v-bind="typeof props.increment === 'object' ? props.increment : void 0"
141
142
  />
142
143
  </slot>
143
144
  </NumberFieldIncrement>
144
145
  </div>
145
146
 
146
- <div v-if="!!decrement" data-slot="decrement" :class="ui.decrement({ class: uiProp?.decrement })">
147
- <NumberFieldDecrement as-child :disabled="disabled || decrementDisabled">
147
+ <div v-if="!!props.decrement" data-slot="decrement" :class="ui.decrement({ class: props.ui?.decrement })">
148
+ <NumberFieldDecrement as-child :disabled="disabled || props.decrementDisabled">
148
149
  <slot name="decrement">
149
150
  <UButton
150
151
  :icon="decrementIcon"
@@ -152,7 +153,7 @@ defineExpose({
152
153
  :size="inputSize"
153
154
  variant="link"
154
155
  :aria-label="t('inputNumber.decrement')"
155
- v-bind="typeof decrement === 'object' ? decrement : void 0"
156
+ v-bind="typeof props.decrement === 'object' ? props.decrement : void 0"
156
157
  />
157
158
  </slot>
158
159
  </NumberFieldDecrement>