@nuxt/ui 4.1.0 → 4.2.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 (391) hide show
  1. package/cli/templates.mjs +2 -2
  2. package/dist/module.d.mts +10 -0
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +7 -7
  5. package/dist/runtime/components/Accordion.vue +9 -8
  6. package/dist/runtime/components/Alert.vue +9 -8
  7. package/dist/runtime/components/App.d.vue.ts +1 -1
  8. package/dist/runtime/components/App.vue +2 -1
  9. package/dist/runtime/components/App.vue.d.ts +1 -1
  10. package/dist/runtime/components/AuthForm.d.vue.ts +9 -8
  11. package/dist/runtime/components/AuthForm.vue +28 -20
  12. package/dist/runtime/components/AuthForm.vue.d.ts +9 -8
  13. package/dist/runtime/components/Avatar.d.vue.ts +2 -1
  14. package/dist/runtime/components/Avatar.vue +4 -2
  15. package/dist/runtime/components/Avatar.vue.d.ts +2 -1
  16. package/dist/runtime/components/AvatarGroup.vue +3 -3
  17. package/dist/runtime/components/Badge.vue +5 -5
  18. package/dist/runtime/components/Banner.vue +9 -8
  19. package/dist/runtime/components/BlogPost.vue +19 -10
  20. package/dist/runtime/components/Breadcrumb.vue +9 -9
  21. package/dist/runtime/components/Button.vue +6 -4
  22. package/dist/runtime/components/Calendar.vue +12 -8
  23. package/dist/runtime/components/Card.vue +4 -4
  24. package/dist/runtime/components/Carousel.vue +10 -5
  25. package/dist/runtime/components/ChangelogVersion.vue +22 -14
  26. package/dist/runtime/components/ChangelogVersions.vue +4 -4
  27. package/dist/runtime/components/ChatMessage.vue +7 -7
  28. package/dist/runtime/components/ChatMessages.vue +4 -2
  29. package/dist/runtime/components/ChatPalette.vue +3 -3
  30. package/dist/runtime/components/ChatPrompt.d.vue.ts +3 -6
  31. package/dist/runtime/components/ChatPrompt.vue +23 -14
  32. package/dist/runtime/components/ChatPrompt.vue.d.ts +3 -6
  33. package/dist/runtime/components/ChatPromptSubmit.d.vue.ts +4 -4
  34. package/dist/runtime/components/ChatPromptSubmit.vue +51 -4
  35. package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +4 -4
  36. package/dist/runtime/components/Checkbox.d.vue.ts +2 -1
  37. package/dist/runtime/components/Checkbox.vue +9 -8
  38. package/dist/runtime/components/Checkbox.vue.d.ts +2 -1
  39. package/dist/runtime/components/CheckboxGroup.vue +7 -4
  40. package/dist/runtime/components/Chip.vue +2 -2
  41. package/dist/runtime/components/Collapsible.vue +2 -2
  42. package/dist/runtime/components/ColorPicker.vue +7 -3
  43. package/dist/runtime/components/CommandPalette.vue +62 -37
  44. package/dist/runtime/components/ContextMenuContent.vue +19 -17
  45. package/dist/runtime/components/DashboardNavbar.vue +7 -6
  46. package/dist/runtime/components/DashboardPanel.vue +3 -1
  47. package/dist/runtime/components/DashboardSearch.vue +2 -1
  48. package/dist/runtime/components/DashboardSearchButton.d.vue.ts +2 -3
  49. package/dist/runtime/components/DashboardSearchButton.vue +47 -9
  50. package/dist/runtime/components/DashboardSearchButton.vue.d.ts +2 -3
  51. package/dist/runtime/components/DashboardSidebar.vue +9 -6
  52. package/dist/runtime/components/DashboardSidebarCollapse.d.vue.ts +7 -4
  53. package/dist/runtime/components/DashboardSidebarCollapse.vue +51 -7
  54. package/dist/runtime/components/DashboardSidebarCollapse.vue.d.ts +7 -4
  55. package/dist/runtime/components/DashboardSidebarToggle.d.vue.ts +7 -4
  56. package/dist/runtime/components/DashboardSidebarToggle.vue +52 -7
  57. package/dist/runtime/components/DashboardSidebarToggle.vue.d.ts +7 -4
  58. package/dist/runtime/components/DashboardToolbar.vue +3 -3
  59. package/dist/runtime/components/Drawer.d.vue.ts +1 -1
  60. package/dist/runtime/components/Drawer.vue +9 -9
  61. package/dist/runtime/components/Drawer.vue.d.ts +1 -1
  62. package/dist/runtime/components/DropdownMenu.vue +1 -1
  63. package/dist/runtime/components/DropdownMenuContent.vue +19 -17
  64. package/dist/runtime/components/Empty.vue +8 -8
  65. package/dist/runtime/components/Error.d.vue.ts +1 -1
  66. package/dist/runtime/components/Error.vue +5 -5
  67. package/dist/runtime/components/Error.vue.d.ts +1 -1
  68. package/dist/runtime/components/FileUpload.d.vue.ts +8 -2
  69. package/dist/runtime/components/FileUpload.vue +34 -24
  70. package/dist/runtime/components/FileUpload.vue.d.ts +8 -2
  71. package/dist/runtime/components/Footer.vue +7 -7
  72. package/dist/runtime/components/FooterColumns.vue +11 -11
  73. package/dist/runtime/components/Form.d.vue.ts +3 -2
  74. package/dist/runtime/components/Form.vue +3 -4
  75. package/dist/runtime/components/Form.vue.d.ts +3 -2
  76. package/dist/runtime/components/FormField.vue +8 -8
  77. package/dist/runtime/components/Header.vue +9 -8
  78. package/dist/runtime/components/Input.d.vue.ts +6 -6
  79. package/dist/runtime/components/Input.vue +9 -8
  80. package/dist/runtime/components/Input.vue.d.ts +6 -6
  81. package/dist/runtime/components/InputDate.d.vue.ts +89 -0
  82. package/dist/runtime/components/InputDate.vue +161 -0
  83. package/dist/runtime/components/InputDate.vue.d.ts +89 -0
  84. package/dist/runtime/components/InputMenu.d.vue.ts +6 -127
  85. package/dist/runtime/components/InputMenu.vue +50 -42
  86. package/dist/runtime/components/InputMenu.vue.d.ts +6 -127
  87. package/dist/runtime/components/InputNumber.d.vue.ts +24 -127
  88. package/dist/runtime/components/InputNumber.vue +8 -9
  89. package/dist/runtime/components/InputNumber.vue.d.ts +24 -127
  90. package/dist/runtime/components/InputTags.d.vue.ts +5 -108
  91. package/dist/runtime/components/InputTags.vue +19 -15
  92. package/dist/runtime/components/InputTags.vue.d.ts +5 -108
  93. package/dist/runtime/components/InputTime.d.vue.ts +72 -0
  94. package/dist/runtime/components/InputTime.vue +137 -0
  95. package/dist/runtime/components/InputTime.vue.d.ts +72 -0
  96. package/dist/runtime/components/Link.d.vue.ts +4 -49
  97. package/dist/runtime/components/Link.vue +1 -0
  98. package/dist/runtime/components/Link.vue.d.ts +4 -49
  99. package/dist/runtime/components/Marquee.d.vue.ts +1 -1
  100. package/dist/runtime/components/Marquee.vue +2 -6
  101. package/dist/runtime/components/Marquee.vue.d.ts +1 -1
  102. package/dist/runtime/components/Modal.d.vue.ts +7 -2
  103. package/dist/runtime/components/Modal.vue +52 -16
  104. package/dist/runtime/components/Modal.vue.d.ts +7 -2
  105. package/dist/runtime/components/NavigationMenu.d.vue.ts +44 -9
  106. package/dist/runtime/components/NavigationMenu.vue +73 -43
  107. package/dist/runtime/components/NavigationMenu.vue.d.ts +44 -9
  108. package/dist/runtime/components/Page.vue +4 -4
  109. package/dist/runtime/components/PageAnchors.vue +8 -8
  110. package/dist/runtime/components/PageAside.vue +6 -6
  111. package/dist/runtime/components/PageCTA.vue +9 -9
  112. package/dist/runtime/components/PageCard.vue +11 -10
  113. package/dist/runtime/components/PageFeature.vue +6 -6
  114. package/dist/runtime/components/PageHeader.vue +7 -7
  115. package/dist/runtime/components/PageHero.vue +10 -10
  116. package/dist/runtime/components/PageLinks.vue +8 -8
  117. package/dist/runtime/components/PageLogos.vue +6 -3
  118. package/dist/runtime/components/PageSection.vue +13 -13
  119. package/dist/runtime/components/Pagination.d.vue.ts +2 -2
  120. package/dist/runtime/components/Pagination.vue +8 -8
  121. package/dist/runtime/components/Pagination.vue.d.ts +2 -2
  122. package/dist/runtime/components/PinInput.d.vue.ts +2 -2
  123. package/dist/runtime/components/PinInput.vue +2 -0
  124. package/dist/runtime/components/PinInput.vue.d.ts +2 -2
  125. package/dist/runtime/components/Popover.vue +2 -2
  126. package/dist/runtime/components/PricingPlan.vue +28 -21
  127. package/dist/runtime/components/PricingTable.vue +35 -31
  128. package/dist/runtime/components/Progress.d.vue.ts +1 -1
  129. package/dist/runtime/components/Progress.vue +6 -6
  130. package/dist/runtime/components/Progress.vue.d.ts +1 -1
  131. package/dist/runtime/components/RadioGroup.d.vue.ts +5 -5
  132. package/dist/runtime/components/RadioGroup.vue +13 -11
  133. package/dist/runtime/components/RadioGroup.vue.d.ts +5 -5
  134. package/dist/runtime/components/Select.d.vue.ts +5 -106
  135. package/dist/runtime/components/Select.vue +26 -23
  136. package/dist/runtime/components/Select.vue.d.ts +5 -106
  137. package/dist/runtime/components/SelectMenu.d.vue.ts +6 -105
  138. package/dist/runtime/components/SelectMenu.vue +54 -40
  139. package/dist/runtime/components/SelectMenu.vue.d.ts +6 -105
  140. package/dist/runtime/components/Separator.vue +7 -7
  141. package/dist/runtime/components/Slideover.d.vue.ts +2 -2
  142. package/dist/runtime/components/Slideover.vue +9 -7
  143. package/dist/runtime/components/Slideover.vue.d.ts +2 -2
  144. package/dist/runtime/components/Slider.vue +5 -4
  145. package/dist/runtime/components/Stepper.vue +12 -10
  146. package/dist/runtime/components/Switch.d.vue.ts +2 -1
  147. package/dist/runtime/components/Switch.vue +10 -9
  148. package/dist/runtime/components/Switch.vue.d.ts +2 -1
  149. package/dist/runtime/components/Table.d.vue.ts +7 -6
  150. package/dist/runtime/components/Table.vue +37 -18
  151. package/dist/runtime/components/Table.vue.d.ts +7 -6
  152. package/dist/runtime/components/Tabs.vue +10 -7
  153. package/dist/runtime/components/Textarea.d.vue.ts +6 -5
  154. package/dist/runtime/components/Textarea.vue +9 -8
  155. package/dist/runtime/components/Textarea.vue.d.ts +6 -5
  156. package/dist/runtime/components/Timeline.vue +16 -7
  157. package/dist/runtime/components/Toast.vue +15 -12
  158. package/dist/runtime/components/Toaster.d.vue.ts +1 -1
  159. package/dist/runtime/components/Toaster.vue +2 -0
  160. package/dist/runtime/components/Toaster.vue.d.ts +1 -1
  161. package/dist/runtime/components/Tooltip.vue +4 -4
  162. package/dist/runtime/components/Tree.d.vue.ts +1 -1
  163. package/dist/runtime/components/Tree.vue +18 -11
  164. package/dist/runtime/components/Tree.vue.d.ts +1 -1
  165. package/dist/runtime/components/User.vue +13 -6
  166. package/dist/runtime/components/color-mode/ColorModeAvatar.d.vue.ts +3 -3
  167. package/dist/runtime/components/color-mode/ColorModeAvatar.vue +16 -4
  168. package/dist/runtime/components/color-mode/ColorModeAvatar.vue.d.ts +3 -3
  169. package/dist/runtime/components/color-mode/ColorModeButton.d.vue.ts +6 -13
  170. package/dist/runtime/components/color-mode/ColorModeButton.vue +59 -18
  171. package/dist/runtime/components/color-mode/ColorModeButton.vue.d.ts +6 -13
  172. package/dist/runtime/components/color-mode/ColorModeImage.d.vue.ts +4 -3
  173. package/dist/runtime/components/color-mode/ColorModeImage.vue +4 -0
  174. package/dist/runtime/components/color-mode/ColorModeImage.vue.d.ts +4 -3
  175. package/dist/runtime/components/color-mode/ColorModeSelect.d.vue.ts +5 -3
  176. package/dist/runtime/components/color-mode/ColorModeSelect.vue +45 -5
  177. package/dist/runtime/components/color-mode/ColorModeSelect.vue.d.ts +5 -3
  178. package/dist/runtime/components/color-mode/ColorModeSwitch.d.vue.ts +2 -2
  179. package/dist/runtime/components/color-mode/ColorModeSwitch.vue +29 -5
  180. package/dist/runtime/components/color-mode/ColorModeSwitch.vue.d.ts +2 -2
  181. package/dist/runtime/components/content/ContentNavigation.vue +13 -12
  182. package/dist/runtime/components/content/ContentSearch.vue +60 -65
  183. package/dist/runtime/components/content/ContentSearchButton.d.vue.ts +2 -3
  184. package/dist/runtime/components/content/ContentSearchButton.vue +47 -9
  185. package/dist/runtime/components/content/ContentSearchButton.vue.d.ts +2 -3
  186. package/dist/runtime/components/content/ContentSurround.vue +6 -6
  187. package/dist/runtime/components/content/ContentToc.vue +15 -15
  188. package/dist/runtime/components/locale/LocaleSelect.d.vue.ts +10 -6
  189. package/dist/runtime/components/locale/LocaleSelect.vue +54 -6
  190. package/dist/runtime/components/locale/LocaleSelect.vue.d.ts +10 -6
  191. package/dist/runtime/composables/index.d.ts +8 -0
  192. package/dist/runtime/composables/index.js +8 -0
  193. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  194. package/dist/runtime/composables/useContentSearch.d.ts +5 -0
  195. package/dist/runtime/composables/useContentSearch.js +31 -1
  196. package/dist/runtime/composables/useFieldGroup.d.ts +1 -1
  197. package/dist/runtime/composables/useFileUpload.d.ts +2 -1
  198. package/dist/runtime/composables/useFileUpload.js +13 -4
  199. package/dist/runtime/composables/useFormField.d.ts +1 -1
  200. package/dist/runtime/index.css +1 -1
  201. package/dist/runtime/inertia/components/Link.d.vue.ts +17 -10
  202. package/dist/runtime/inertia/components/Link.vue +7 -6
  203. package/dist/runtime/inertia/components/Link.vue.d.ts +17 -10
  204. package/dist/runtime/inertia/stubs.js +1 -1
  205. package/dist/runtime/keyframes.css +1 -1
  206. package/dist/runtime/locale/gl.d.ts +3 -0
  207. package/dist/runtime/locale/gl.js +129 -0
  208. package/dist/runtime/locale/index.d.ts +2 -0
  209. package/dist/runtime/locale/index.js +2 -0
  210. package/dist/runtime/locale/sq.d.ts +3 -0
  211. package/dist/runtime/locale/sq.js +129 -0
  212. package/dist/runtime/plugins/colors.js +8 -6
  213. package/dist/runtime/types/html.d.ts +8 -0
  214. package/dist/runtime/types/html.js +0 -0
  215. package/dist/runtime/types/index.d.ts +5 -0
  216. package/dist/runtime/types/index.js +5 -0
  217. package/dist/runtime/types/input.d.ts +5 -5
  218. package/dist/runtime/types/utils.d.ts +2 -0
  219. package/dist/runtime/utils/content.d.ts +2 -2
  220. package/dist/runtime/utils/link.d.ts +1 -0
  221. package/dist/runtime/utils/link.js +40 -24
  222. package/dist/runtime/utils/virtualizer.d.ts +6 -0
  223. package/dist/runtime/utils/virtualizer.js +30 -0
  224. package/dist/runtime/vue/components/Link.d.vue.ts +8 -37
  225. package/dist/runtime/vue/components/Link.vue +5 -10
  226. package/dist/runtime/vue/components/Link.vue.d.ts +8 -37
  227. package/dist/runtime/vue/components/color-mode/ColorModeSelect.d.vue.ts +5 -3
  228. package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue +44 -3
  229. package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue.d.ts +5 -3
  230. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.d.vue.ts +1 -1
  231. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.vue +24 -3
  232. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.vue.d.ts +1 -1
  233. package/dist/runtime/vue/stubs.d.ts +1 -1
  234. package/dist/runtime/vue/stubs.js +1 -1
  235. package/dist/shared/{ui.Cmctwxv6.mjs → ui.B77q-Dvh.mjs} +397 -153
  236. package/dist/unplugin.d.mts +1 -0
  237. package/dist/unplugin.mjs +31 -3
  238. package/dist/vite.mjs +5 -3
  239. package/package.json +39 -34
  240. package/.nuxt/ui/accordion.ts +0 -20
  241. package/.nuxt/ui/alert.ts +0 -264
  242. package/.nuxt/ui/auth-form.ts +0 -20
  243. package/.nuxt/ui/avatar-group.ts +0 -52
  244. package/.nuxt/ui/avatar.ts +0 -54
  245. package/.nuxt/ui/badge.ts +0 -263
  246. package/.nuxt/ui/banner.ts +0 -108
  247. package/.nuxt/ui/blog-post.ts +0 -142
  248. package/.nuxt/ui/blog-posts.ts +0 -9
  249. package/.nuxt/ui/breadcrumb.ts +0 -45
  250. package/.nuxt/ui/button.ts +0 -378
  251. package/.nuxt/ui/calendar.ts +0 -315
  252. package/.nuxt/ui/card.ts +0 -34
  253. package/.nuxt/ui/carousel.ts +0 -38
  254. package/.nuxt/ui/changelog-version.ts +0 -41
  255. package/.nuxt/ui/changelog-versions.ts +0 -8
  256. package/.nuxt/ui/chat-message.ts +0 -136
  257. package/.nuxt/ui/chat-messages.ts +0 -14
  258. package/.nuxt/ui/chat-palette.ts +0 -8
  259. package/.nuxt/ui/chat-prompt-submit.ts +0 -5
  260. package/.nuxt/ui/chat-prompt.ts +0 -35
  261. package/.nuxt/ui/checkbox-group.ts +0 -204
  262. package/.nuxt/ui/checkbox.ts +0 -236
  263. package/.nuxt/ui/chip.ts +0 -96
  264. package/.nuxt/ui/collapsible.ts +0 -6
  265. package/.nuxt/ui/color-picker.ts +0 -47
  266. package/.nuxt/ui/command-palette.ts +0 -62
  267. package/.nuxt/ui/container.ts +0 -3
  268. package/.nuxt/ui/content/content-navigation.ts +0 -368
  269. package/.nuxt/ui/content/content-search-button.ts +0 -6
  270. package/.nuxt/ui/content/content-search.ts +0 -13
  271. package/.nuxt/ui/content/content-surround.ts +0 -34
  272. package/.nuxt/ui/content/content-toc.ts +0 -155
  273. package/.nuxt/ui/context-menu.ts +0 -219
  274. package/.nuxt/ui/dashboard-group.ts +0 -3
  275. package/.nuxt/ui/dashboard-navbar.ts +0 -21
  276. package/.nuxt/ui/dashboard-panel.ts +0 -17
  277. package/.nuxt/ui/dashboard-resize-handle.ts +0 -3
  278. package/.nuxt/ui/dashboard-search-button.ts +0 -6
  279. package/.nuxt/ui/dashboard-search.ts +0 -13
  280. package/.nuxt/ui/dashboard-sidebar-collapse.ts +0 -9
  281. package/.nuxt/ui/dashboard-sidebar-toggle.ts +0 -9
  282. package/.nuxt/ui/dashboard-sidebar.ts +0 -37
  283. package/.nuxt/ui/dashboard-toolbar.ts +0 -7
  284. package/.nuxt/ui/drawer.ts +0 -149
  285. package/.nuxt/ui/dropdown-menu.ts +0 -220
  286. package/.nuxt/ui/empty.ts +0 -83
  287. package/.nuxt/ui/error.ts +0 -9
  288. package/.nuxt/ui/field-group.ts +0 -16
  289. package/.nuxt/ui/file-upload.ts +0 -290
  290. package/.nuxt/ui/footer-columns.ts +0 -28
  291. package/.nuxt/ui/footer.ts +0 -11
  292. package/.nuxt/ui/form-field.ts +0 -48
  293. package/.nuxt/ui/form.ts +0 -3
  294. package/.nuxt/ui/header.ts +0 -25
  295. package/.nuxt/ui/index.ts +0 -106
  296. package/.nuxt/ui/input-menu.ts +0 -460
  297. package/.nuxt/ui/input-number.ts +0 -256
  298. package/.nuxt/ui/input-tags.ts +0 -310
  299. package/.nuxt/ui/input.ts +0 -289
  300. package/.nuxt/ui/kbd.ts +0 -195
  301. package/.nuxt/ui/link.ts +0 -22
  302. package/.nuxt/ui/main.ts +0 -3
  303. package/.nuxt/ui/marquee.ts +0 -66
  304. package/.nuxt/ui/modal.ts +0 -29
  305. package/.nuxt/ui/navigation-menu.ts +0 -510
  306. package/.nuxt/ui/page-anchors.ts +0 -30
  307. package/.nuxt/ui/page-aside.ts +0 -10
  308. package/.nuxt/ui/page-body.ts +0 -3
  309. package/.nuxt/ui/page-card.ts +0 -279
  310. package/.nuxt/ui/page-columns.ts +0 -3
  311. package/.nuxt/ui/page-cta.ts +0 -70
  312. package/.nuxt/ui/page-feature.ts +0 -26
  313. package/.nuxt/ui/page-grid.ts +0 -3
  314. package/.nuxt/ui/page-header.ts +0 -18
  315. package/.nuxt/ui/page-hero.ts +0 -44
  316. package/.nuxt/ui/page-links.ts +0 -25
  317. package/.nuxt/ui/page-list.ts +0 -8
  318. package/.nuxt/ui/page-logos.ts +0 -15
  319. package/.nuxt/ui/page-section.ts +0 -84
  320. package/.nuxt/ui/page.ts +0 -32
  321. package/.nuxt/ui/pagination.ts +0 -13
  322. package/.nuxt/ui/pin-input.ts +0 -171
  323. package/.nuxt/ui/popover.ts +0 -6
  324. package/.nuxt/ui/pricing-plan.ts +0 -101
  325. package/.nuxt/ui/pricing-plans.ts +0 -22
  326. package/.nuxt/ui/pricing-table.ts +0 -51
  327. package/.nuxt/ui/progress.ts +0 -297
  328. package/.nuxt/ui/prose/a.ts +0 -6
  329. package/.nuxt/ui/prose/accordion-item.ts +0 -3
  330. package/.nuxt/ui/prose/accordion.ts +0 -6
  331. package/.nuxt/ui/prose/badge.ts +0 -3
  332. package/.nuxt/ui/prose/blockquote.ts +0 -3
  333. package/.nuxt/ui/prose/callout.ts +0 -129
  334. package/.nuxt/ui/prose/card-group.ts +0 -3
  335. package/.nuxt/ui/prose/card.ts +0 -119
  336. package/.nuxt/ui/prose/code-collapse.ts +0 -19
  337. package/.nuxt/ui/prose/code-group.ts +0 -13
  338. package/.nuxt/ui/prose/code-icon.ts +0 -66
  339. package/.nuxt/ui/prose/code-preview.ts +0 -14
  340. package/.nuxt/ui/prose/code-tree.ts +0 -28
  341. package/.nuxt/ui/prose/code.ts +0 -27
  342. package/.nuxt/ui/prose/collapsible.ts +0 -12
  343. package/.nuxt/ui/prose/em.ts +0 -3
  344. package/.nuxt/ui/prose/field-group.ts +0 -3
  345. package/.nuxt/ui/prose/field.ts +0 -11
  346. package/.nuxt/ui/prose/h1.ts +0 -6
  347. package/.nuxt/ui/prose/h2.ts +0 -14
  348. package/.nuxt/ui/prose/h3.ts +0 -14
  349. package/.nuxt/ui/prose/h4.ts +0 -6
  350. package/.nuxt/ui/prose/hr.ts +0 -3
  351. package/.nuxt/ui/prose/icon.ts +0 -3
  352. package/.nuxt/ui/prose/img.ts +0 -23
  353. package/.nuxt/ui/prose/index.ts +0 -41
  354. package/.nuxt/ui/prose/kbd.ts +0 -3
  355. package/.nuxt/ui/prose/li.ts +0 -3
  356. package/.nuxt/ui/prose/ol.ts +0 -3
  357. package/.nuxt/ui/prose/p.ts +0 -3
  358. package/.nuxt/ui/prose/pre.ts +0 -17
  359. package/.nuxt/ui/prose/steps.ts +0 -19
  360. package/.nuxt/ui/prose/strong.ts +0 -3
  361. package/.nuxt/ui/prose/table.ts +0 -6
  362. package/.nuxt/ui/prose/tabs-item.ts +0 -3
  363. package/.nuxt/ui/prose/tabs.ts +0 -5
  364. package/.nuxt/ui/prose/tbody.ts +0 -3
  365. package/.nuxt/ui/prose/td.ts +0 -3
  366. package/.nuxt/ui/prose/th.ts +0 -3
  367. package/.nuxt/ui/prose/thead.ts +0 -3
  368. package/.nuxt/ui/prose/tr.ts +0 -3
  369. package/.nuxt/ui/prose/ul.ts +0 -3
  370. package/.nuxt/ui/radio-group.ts +0 -350
  371. package/.nuxt/ui/select-menu.ts +0 -361
  372. package/.nuxt/ui/select.ts +0 -348
  373. package/.nuxt/ui/separator.ts +0 -172
  374. package/.nuxt/ui/skeleton.ts +0 -3
  375. package/.nuxt/ui/slideover.ts +0 -71
  376. package/.nuxt/ui/slider.ts +0 -171
  377. package/.nuxt/ui/stepper.ts +0 -202
  378. package/.nuxt/ui/switch.ts +0 -131
  379. package/.nuxt/ui/table.ts +0 -162
  380. package/.nuxt/ui/tabs.ts +0 -258
  381. package/.nuxt/ui/textarea.ts +0 -294
  382. package/.nuxt/ui/timeline.ts +0 -321
  383. package/.nuxt/ui/toast.ts +0 -74
  384. package/.nuxt/ui/toaster.ts +0 -91
  385. package/.nuxt/ui/tooltip.ts +0 -9
  386. package/.nuxt/ui/tree.ts +0 -168
  387. package/.nuxt/ui/user.ts +0 -101
  388. package/.nuxt/ui.css +0 -146
  389. package/dist/runtime/vue/components/color-mode/ColorModeButton.d.vue.ts +0 -17
  390. package/dist/runtime/vue/components/color-mode/ColorModeButton.vue +0 -35
  391. package/dist/runtime/vue/components/color-mode/ColorModeButton.vue.d.ts +0 -17
@@ -5,7 +5,7 @@ import theme from "#build/ui/modal";
5
5
  <script setup>
6
6
  import { computed, toRef } from "vue";
7
7
  import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, VisuallyHidden, useForwardPropsEmits } from "reka-ui";
8
- import { reactivePick } from "@vueuse/core";
8
+ import { reactivePick, createReusableTemplate } from "@vueuse/core";
9
9
  import { useAppConfig } from "#imports";
10
10
  import { useLocale } from "../composables/useLocale";
11
11
  import { usePortal } from "../composables/usePortal";
@@ -16,6 +16,7 @@ const props = defineProps({
16
16
  description: { type: String, required: false },
17
17
  content: { type: Object, required: false },
18
18
  overlay: { type: Boolean, required: false, default: true },
19
+ scrollable: { type: Boolean, required: false },
19
20
  transition: { type: Boolean, required: false, default: true },
20
21
  fullscreen: { type: Boolean, required: false },
21
22
  portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
@@ -46,24 +47,40 @@ const contentEvents = computed(() => {
46
47
  return acc;
47
48
  }, {});
48
49
  }
50
+ if (props.scrollable) {
51
+ return {
52
+ // FIXME: This is a workaround to prevent the modal from closing when clicking on the scrollbar https://reka-ui.com/docs/components/dialog#scrollable-overlay but it's not working on Mac OS.
53
+ pointerDownOutside: (e) => {
54
+ const originalEvent = e.detail.originalEvent;
55
+ const target = originalEvent.target;
56
+ if (originalEvent.offsetX > target.clientWidth || originalEvent.offsetY > target.clientHeight) {
57
+ e.preventDefault();
58
+ }
59
+ }
60
+ };
61
+ }
49
62
  return {};
50
63
  });
64
+ const [DefineContentTemplate, ReuseContentTemplate] = createReusableTemplate();
51
65
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.modal || {} })({
52
66
  transition: props.transition,
53
- fullscreen: props.fullscreen
67
+ fullscreen: props.fullscreen,
68
+ overlay: props.overlay,
69
+ scrollable: props.scrollable
54
70
  }));
55
71
  </script>
56
72
 
57
73
  <template>
58
74
  <DialogRoot v-slot="{ open, close }" v-bind="rootProps">
59
- <DialogTrigger v-if="!!slots.default" as-child :class="props.class">
60
- <slot :open="open" />
61
- </DialogTrigger>
62
-
63
- <DialogPortal v-bind="portalProps">
64
- <DialogOverlay v-if="overlay" :class="ui.overlay({ class: props.ui?.overlay })" />
65
-
66
- <DialogContent :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-bind="contentProps" @after-enter="emits('after:enter')" @after-leave="emits('after:leave')" v-on="contentEvents">
75
+ <DefineContentTemplate>
76
+ <DialogContent
77
+ data-slot="content"
78
+ :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })"
79
+ v-bind="contentProps"
80
+ @after-enter="emits('after:enter')"
81
+ @after-leave="emits('after:leave')"
82
+ v-on="contentEvents"
83
+ >
67
84
  <VisuallyHidden v-if="!!slots.content && (title || !!slots.title || (description || !!slots.description))">
68
85
  <DialogTitle v-if="title || !!slots.title">
69
86
  <slot name="title">
@@ -79,16 +96,16 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.modal || {} }
79
96
  </VisuallyHidden>
80
97
 
81
98
  <slot name="content" :close="close">
82
- <div v-if="!!slots.header || (title || !!slots.title) || (description || !!slots.description) || (props.close || !!slots.close)" :class="ui.header({ class: props.ui?.header })">
99
+ <div v-if="!!slots.header || (title || !!slots.title) || (description || !!slots.description) || (props.close || !!slots.close)" data-slot="header" :class="ui.header({ class: props.ui?.header })">
83
100
  <slot name="header" :close="close">
84
- <div :class="ui.wrapper({ class: props.ui?.wrapper })">
85
- <DialogTitle v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
101
+ <div data-slot="wrapper" :class="ui.wrapper({ class: props.ui?.wrapper })">
102
+ <DialogTitle v-if="title || !!slots.title" data-slot="title" :class="ui.title({ class: props.ui?.title })">
86
103
  <slot name="title">
87
104
  {{ title }}
88
105
  </slot>
89
106
  </DialogTitle>
90
107
 
91
- <DialogDescription v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
108
+ <DialogDescription v-if="description || !!slots.description" data-slot="description" :class="ui.description({ class: props.ui?.description })">
92
109
  <slot name="description">
93
110
  {{ description }}
94
111
  </slot>
@@ -106,6 +123,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.modal || {} }
106
123
  variant="ghost"
107
124
  :aria-label="t('modal.close')"
108
125
  v-bind="typeof props.close === 'object' ? props.close : {}"
126
+ data-slot="close"
109
127
  :class="ui.close({ class: props.ui?.close })"
110
128
  />
111
129
  </slot>
@@ -113,15 +131,33 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.modal || {} }
113
131
  </slot>
114
132
  </div>
115
133
 
116
- <div v-if="!!slots.body" :class="ui.body({ class: props.ui?.body })">
134
+ <div v-if="!!slots.body" data-slot="body" :class="ui.body({ class: props.ui?.body })">
117
135
  <slot name="body" :close="close" />
118
136
  </div>
119
137
 
120
- <div v-if="!!slots.footer" :class="ui.footer({ class: props.ui?.footer })">
138
+ <div v-if="!!slots.footer" data-slot="footer" :class="ui.footer({ class: props.ui?.footer })">
121
139
  <slot name="footer" :close="close" />
122
140
  </div>
123
141
  </slot>
124
142
  </DialogContent>
143
+ </DefineContentTemplate>
144
+
145
+ <DialogTrigger v-if="!!slots.default" as-child :class="props.class">
146
+ <slot :open="open" />
147
+ </DialogTrigger>
148
+
149
+ <DialogPortal v-bind="portalProps">
150
+ <template v-if="scrollable">
151
+ <DialogOverlay data-slot="overlay" :class="ui.overlay({ class: props.ui?.overlay })">
152
+ <ReuseContentTemplate />
153
+ </DialogOverlay>
154
+ </template>
155
+
156
+ <template v-else>
157
+ <DialogOverlay v-if="overlay" data-slot="overlay" :class="ui.overlay({ class: props.ui?.overlay })" />
158
+
159
+ <ReuseContentTemplate />
160
+ </template>
125
161
  </DialogPortal>
126
162
  </DialogRoot>
127
163
  </template>
@@ -15,6 +15,11 @@ export interface ModalProps extends DialogRootProps {
15
15
  * @defaultValue true
16
16
  */
17
17
  overlay?: boolean;
18
+ /**
19
+ * When `true`, enables scrollable overlay mode where content scrolls within the overlay.
20
+ * @defaultValue false
21
+ */
22
+ scrollable?: boolean;
18
23
  /**
19
24
  * Animate the modal when opening or closing.
20
25
  * @defaultValue true
@@ -89,11 +94,11 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ModalP
89
94
  "onAfter:enter"?: (() => any) | undefined;
90
95
  "onClose:prevent"?: (() => any) | undefined;
91
96
  }>, {
97
+ overlay: boolean;
92
98
  close: boolean | Partial<ButtonProps>;
93
- modal: boolean;
94
99
  transition: boolean;
100
+ modal: boolean;
95
101
  portal: boolean | string | HTMLElement;
96
- overlay: boolean;
97
102
  dismissible: boolean;
98
103
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ModalSlots>;
99
104
  declare const _default: typeof __VLS_export;
@@ -1,4 +1,4 @@
1
- import type { NavigationMenuRootProps, NavigationMenuRootEmits, NavigationMenuContentProps, NavigationMenuContentEmits, AccordionRootProps } from 'reka-ui';
1
+ import type { NavigationMenuRootProps, NavigationMenuContentProps, NavigationMenuContentEmits, AccordionRootProps } from 'reka-ui';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
3
  import theme from '#build/ui/navigation-menu';
4
4
  import type { AvatarProps, BadgeProps, IconProps, LinkProps, PopoverProps, TooltipProps } from '../types';
@@ -57,12 +57,40 @@ export interface NavigationMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'cu
57
57
  ui?: Pick<NavigationMenu['slots'], 'item' | 'linkLeadingAvatarSize' | 'linkLeadingAvatar' | 'linkLeadingIcon' | 'linkLabel' | 'linkLabelExternalIcon' | 'linkTrailing' | 'linkTrailingBadgeSize' | 'linkTrailingBadge' | 'linkTrailingIcon' | 'label' | 'link' | 'content' | 'childList' | 'childLabel' | 'childItem' | 'childLink' | 'childLinkIcon' | 'childLinkWrapper' | 'childLinkLabel' | 'childLinkLabelExternalIcon' | 'childLinkDescription'>;
58
58
  [key: string]: any;
59
59
  }
60
- export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem> = ArrayOrNested<NavigationMenuItem>> extends Pick<NavigationMenuRootProps, 'modelValue' | 'defaultValue' | 'delayDuration' | 'disableClickTrigger' | 'disableHoverTrigger' | 'skipDelayDuration' | 'disablePointerLeaveClose' | 'unmountOnHide'>, Pick<AccordionRootProps, 'disabled' | 'type' | 'collapsible'> {
60
+ type SingleOrMultipleType = 'single' | 'multiple';
61
+ type Orientation = NavigationMenuRootProps['orientation'];
62
+ type NavigationMenuModelValue<K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> = O extends 'horizontal' ? string : K extends 'single' ? string : K extends 'multiple' ? string[] : string | string[];
63
+ export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem> = ArrayOrNested<NavigationMenuItem>, K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> extends Pick<NavigationMenuRootProps, 'delayDuration' | 'disableClickTrigger' | 'disableHoverTrigger' | 'skipDelayDuration' | 'disablePointerLeaveClose' | 'unmountOnHide'>, Pick<AccordionRootProps, 'disabled' | 'collapsible'> {
61
64
  /**
62
65
  * The element or component this component should render as.
63
66
  * @defaultValue 'div'
64
67
  */
65
68
  as?: any;
69
+ /**
70
+ * Determines whether a "single" or "multiple" items can be selected at a time.
71
+ *
72
+ * Only works when `orientation` is `vertical`.
73
+ * @defaultValue 'multiple'
74
+ */
75
+ type?: K;
76
+ /**
77
+ * The controlled value of the active item(s).
78
+ * - In horizontal orientation: always `string`
79
+ * - In vertical orientation with `type="single"`: `string`
80
+ * - In vertical orientation with `type="multiple"`: `string[]`
81
+ *
82
+ * Use this when you need to control the state of the items. Can be binded with `v-model`
83
+ */
84
+ modelValue?: NavigationMenuModelValue<K, O>;
85
+ /**
86
+ * The default active value of the item(s).
87
+ * - In horizontal orientation: always `string`
88
+ * - In vertical orientation with `type="single"`: `string`
89
+ * - In vertical orientation with `type="multiple"`: `string[]`
90
+ *
91
+ * Use when you do not need to control the state of the item(s).
92
+ */
93
+ defaultValue?: NavigationMenuModelValue<K, O>;
66
94
  /**
67
95
  * The icon displayed to open the menu.
68
96
  * @defaultValue appConfig.ui.icons.chevronDown
@@ -89,7 +117,7 @@ export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem>
89
117
  * The orientation of the menu.
90
118
  * @defaultValue 'horizontal'
91
119
  */
92
- orientation?: NavigationMenuRootProps['orientation'];
120
+ orientation?: O;
93
121
  /**
94
122
  * Collapse the navigation menu to only show icons.
95
123
  * Only works when `orientation` is `vertical`.
@@ -135,8 +163,15 @@ export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem>
135
163
  class?: any;
136
164
  ui?: NavigationMenu['slots'];
137
165
  }
138
- export interface NavigationMenuEmits extends NavigationMenuRootEmits {
139
- }
166
+ export type NavigationMenuEmits<K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> = {
167
+ /**
168
+ * Event handler called when the value changes.
169
+ * - In horizontal orientation: emits `string`
170
+ * - In vertical orientation with `type="single"`: emits `string | undefined`
171
+ * - In vertical orientation with `type="multiple"`: emits `string[] | undefined`
172
+ */
173
+ 'update:modelValue': [value: NavigationMenuModelValue<K, O> | undefined];
174
+ };
140
175
  type SlotProps<T extends NavigationMenuItem> = (props: {
141
176
  item: T;
142
177
  index: number;
@@ -166,14 +201,14 @@ export type NavigationMenuSlots<A extends ArrayOrNested<NavigationMenuItem> = Ar
166
201
  active?: boolean;
167
202
  ui: NavigationMenu['ui'];
168
203
  }>;
169
- declare const __VLS_export: <T extends ArrayOrNested<NavigationMenuItem>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
170
- props: __VLS_PrettifyLocal<NavigationMenuProps<T> & {
171
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
204
+ declare const __VLS_export: <T extends ArrayOrNested<NavigationMenuItem>, K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
205
+ props: __VLS_PrettifyLocal<NavigationMenuProps<T, K, O> & {
206
+ "onUpdate:modelValue"?: ((value: NavigationMenuModelValue<K, O> | undefined) => any) | undefined;
172
207
  }> & import("vue").PublicProps;
173
208
  expose: (exposed: {}) => void;
174
209
  attrs: any;
175
210
  slots: NavigationMenuSlots<T, NestedItem<T>>;
176
- emit: (evt: "update:modelValue", value: string) => void;
211
+ emit: (evt: "update:modelValue", value: NavigationMenuModelValue<K, O> | undefined) => void;
177
212
  }>) => import("vue").VNode & {
178
213
  __ctx?: Awaited<typeof __VLS_setup>;
179
214
  };
@@ -21,6 +21,9 @@ import UTooltip from "./Tooltip.vue";
21
21
  defineOptions({ inheritAttrs: false });
22
22
  const props = defineProps({
23
23
  as: { type: null, required: false },
24
+ type: { type: null, required: false, default: "multiple" },
25
+ modelValue: { type: null, required: false },
26
+ defaultValue: { type: null, required: false },
24
27
  trailingIcon: { type: [String, Object], required: false },
25
28
  externalIcon: { type: [Boolean, String, Object], required: false, default: true },
26
29
  items: { type: null, required: false },
@@ -38,8 +41,6 @@ const props = defineProps({
38
41
  labelKey: { type: null, required: false, default: "label" },
39
42
  class: { type: null, required: false },
40
43
  ui: { type: null, required: false },
41
- modelValue: { type: String, required: false },
42
- defaultValue: { type: String, required: false },
43
44
  delayDuration: { type: Number, required: false, default: 0 },
44
45
  disableClickTrigger: { type: Boolean, required: false },
45
46
  disableHoverTrigger: { type: Boolean, required: false },
@@ -47,7 +48,6 @@ const props = defineProps({
47
48
  disablePointerLeaveClose: { type: Boolean, required: false },
48
49
  unmountOnHide: { type: Boolean, required: false, default: true },
49
50
  disabled: { type: Boolean, required: false },
50
- type: { type: String, required: false, default: "multiple" },
51
51
  collapsible: { type: Boolean, required: false, default: true }
52
52
  });
53
53
  const emits = defineEmits(["update:modelValue"]);
@@ -55,8 +55,6 @@ const slots = defineSlots();
55
55
  const appConfig = useAppConfig();
56
56
  const rootProps = useForwardPropsEmits(computed(() => ({
57
57
  as: props.as,
58
- modelValue: props.modelValue,
59
- defaultValue: props.defaultValue,
60
58
  delayDuration: props.delayDuration,
61
59
  skipDelayDuration: props.skipDelayDuration,
62
60
  orientation: props.orientation,
@@ -104,34 +102,43 @@ function getAccordionDefaultValue(list, level = 0) {
104
102
  <DefineLinkTemplate v-slot="{ item, active, index }">
105
103
  <slot :name="item.slot || 'item'" :item="item" :index="index" :active="active" :ui="ui">
106
104
  <slot :name="item.slot ? `${item.slot}-leading` : 'item-leading'" :item="item" :active="active" :index="index" :ui="ui">
107
- <UAvatar v-if="item.avatar" :size="item.ui?.linkLeadingAvatarSize || props.ui?.linkLeadingAvatarSize || ui.linkLeadingAvatarSize()" v-bind="item.avatar" :class="ui.linkLeadingAvatar({ class: [props.ui?.linkLeadingAvatar, item.ui?.linkLeadingAvatar], active, disabled: !!item.disabled })" />
108
- <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon], active, disabled: !!item.disabled })" />
105
+ <UAvatar v-if="item.avatar" :size="item.ui?.linkLeadingAvatarSize || props.ui?.linkLeadingAvatarSize || ui.linkLeadingAvatarSize()" v-bind="item.avatar" data-slot="linkLeadingAvatar" :class="ui.linkLeadingAvatar({ class: [props.ui?.linkLeadingAvatar, item.ui?.linkLeadingAvatar], active, disabled: !!item.disabled })" />
106
+ <UIcon v-else-if="item.icon" :name="item.icon" data-slot="linkLeadingIcon" :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon], active, disabled: !!item.disabled })" />
109
107
  </slot>
110
108
 
111
109
  <span
112
- v-if="(!collapsed || orientation !== 'vertical') && (get(item, props.labelKey) || !!slots[item.slot ? `${item.slot}-label` : 'item-label'])"
110
+ v-if="get(item, props.labelKey) || !!slots[item.slot ? `${item.slot}-label` : 'item-label']"
111
+ data-slot="linkLabel"
113
112
  :class="ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })"
114
113
  >
115
114
  <slot :name="item.slot ? `${item.slot}-label` : 'item-label'" :item="item" :active="active" :index="index">
116
115
  {{ get(item, props.labelKey) }}
117
116
  </slot>
118
117
 
119
- <UIcon v-if="item.target === '_blank' && externalIcon !== false" :name="typeof externalIcon === 'string' ? externalIcon : appConfig.ui.icons.external" :class="ui.linkLabelExternalIcon({ class: [props.ui?.linkLabelExternalIcon, item.ui?.linkLabelExternalIcon], active })" />
118
+ <UIcon v-if="item.target === '_blank' && externalIcon !== false" :name="typeof externalIcon === 'string' ? externalIcon : appConfig.ui.icons.external" data-slot="linkLabelExternalIcon" :class="ui.linkLabelExternalIcon({ class: [props.ui?.linkLabelExternalIcon, item.ui?.linkLabelExternalIcon], active })" />
120
119
  </span>
121
120
 
122
- <component :is="orientation === 'vertical' && item.children?.length && !collapsed ? AccordionTrigger : 'span'" v-if="(!collapsed || orientation !== 'vertical') && (item.badge !== void 0 || orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) || orientation === 'vertical' && item.children?.length || item.trailingIcon || !!slots[item.slot ? `${item.slot}-trailing` : 'item-trailing'])" as="span" :class="ui.linkTrailing({ class: [props.ui?.linkTrailing, item.ui?.linkTrailing] })" @click.stop.prevent>
121
+ <component
122
+ :is="orientation === 'vertical' && item.children?.length && !collapsed ? AccordionTrigger : 'span'"
123
+ v-if="item.badge || item.badge === 0 || orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) || orientation === 'vertical' && item.children?.length || item.trailingIcon || !!slots[item.slot ? `${item.slot}-trailing` : 'item-trailing']"
124
+ as="span"
125
+ data-slot="linkTrailing"
126
+ :class="ui.linkTrailing({ class: [props.ui?.linkTrailing, item.ui?.linkTrailing] })"
127
+ @click.stop.prevent
128
+ >
123
129
  <slot :name="item.slot ? `${item.slot}-trailing` : 'item-trailing'" :item="item" :active="active" :index="index" :ui="ui">
124
130
  <UBadge
125
- v-if="item.badge !== void 0"
131
+ v-if="item.badge || item.badge === 0"
126
132
  color="neutral"
127
133
  variant="outline"
128
134
  :size="item.ui?.linkTrailingBadgeSize || props.ui?.linkTrailingBadgeSize || ui.linkTrailingBadgeSize()"
129
135
  v-bind="typeof item.badge === 'string' || typeof item.badge === 'number' ? { label: item.badge } : item.badge"
136
+ data-slot="linkTrailingBadge"
130
137
  :class="ui.linkTrailingBadge({ class: [props.ui?.linkTrailingBadge, item.ui?.linkTrailingBadge] })"
131
138
  />
132
139
 
133
- <UIcon v-if="orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) || orientation === 'vertical' && item.children?.length" :name="item.trailingIcon || trailingIcon || appConfig.ui.icons.chevronDown" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon], active })" />
134
- <UIcon v-else-if="item.trailingIcon" :name="item.trailingIcon" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon], active })" />
140
+ <UIcon v-if="orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) || orientation === 'vertical' && item.children?.length" :name="item.trailingIcon || trailingIcon || appConfig.ui.icons.chevronDown" data-slot="linkTrailingIcon" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon], active })" />
141
+ <UIcon v-else-if="item.trailingIcon" :name="item.trailingIcon" data-slot="linkTrailingIcon" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon], active })" />
135
142
  </slot>
136
143
  </component>
137
144
  </slot>
@@ -143,7 +150,7 @@ function getAccordionDefaultValue(list, level = 0) {
143
150
  as="li"
144
151
  :value="item.value || (level > 0 ? `item-${level}-${index}` : `item-${index}`)"
145
152
  >
146
- <div v-if="orientation === 'vertical' && item.type === 'label' && !collapsed" :class="ui.label({ class: [props.ui?.label, item.ui?.label, item.class] })">
153
+ <div v-if="orientation === 'vertical' && item.type === 'label' && !collapsed" data-slot="label" :class="ui.label({ class: [props.ui?.label, item.ui?.label, item.class] })">
147
154
  <ReuseLinkTemplate :item="item" :index="index" />
148
155
  </div>
149
156
  <ULink v-else-if="item.type !== 'label'" v-slot="{ active, ...slotProps }" v-bind="orientation === 'vertical' && item.children?.length && !collapsed && item.type === 'trigger' ? {} : pickLinkProps(item)" custom>
@@ -155,7 +162,7 @@ function getAccordionDefaultValue(list, level = 0) {
155
162
  @select="item.onSelect"
156
163
  >
157
164
  <UPopover v-if="orientation === 'vertical' && collapsed && item.children?.length && (!!props.popover || !!item.popover)" v-bind="{ ...popoverProps, ...typeof item.popover === 'boolean' ? {} : item.popover || {} }" :ui="{ content: ui.content({ class: [props.ui?.content, item.ui?.content] }) }">
158
- <ULinkBase v-bind="slotProps" :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: active || item.active, disabled: !!item.disabled, level: level > 0 })">
165
+ <ULinkBase v-bind="slotProps" data-slot="link" :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: active || item.active, disabled: !!item.disabled, level: level > 0 })">
159
166
  <ReuseLinkTemplate :item="item" :active="active || item.active" :index="index" />
160
167
  </ULinkBase>
161
168
 
@@ -168,20 +175,20 @@ function getAccordionDefaultValue(list, level = 0) {
168
175
  :ui="ui"
169
176
  :close="close"
170
177
  >
171
- <ul :class="ui.childList({ class: [props.ui?.childList, item.ui?.childList] })">
172
- <li :class="ui.childLabel({ class: [props.ui?.childLabel, item.ui?.childLabel] })">
178
+ <ul data-slot="childList" :class="ui.childList({ class: [props.ui?.childList, item.ui?.childList] })">
179
+ <li data-slot="childLabel" :class="ui.childLabel({ class: [props.ui?.childLabel, item.ui?.childLabel] })">
173
180
  {{ get(item, props.labelKey) }}
174
181
  </li>
175
- <li v-for="(childItem, childIndex) in item.children" :key="childIndex" :class="ui.childItem({ class: [props.ui?.childItem, item.ui?.childItem] })">
182
+ <li v-for="(childItem, childIndex) in item.children" :key="childIndex" data-slot="childItem" :class="ui.childItem({ class: [props.ui?.childItem, item.ui?.childItem] })">
176
183
  <ULink v-slot="{ active: childActive, ...childSlotProps }" v-bind="pickLinkProps(childItem)" custom>
177
184
  <NavigationMenuLink as-child :active="childActive" @select="childItem.onSelect">
178
- <ULinkBase v-bind="childSlotProps" :class="ui.childLink({ class: [props.ui?.childLink, item.ui?.childLink, childItem.class], active: childActive })">
179
- <UIcon v-if="childItem.icon" :name="childItem.icon" :class="ui.childLinkIcon({ class: [props.ui?.childLinkIcon, item.ui?.childLinkIcon], active: childActive })" />
185
+ <ULinkBase v-bind="childSlotProps" data-slot="childLink" :class="ui.childLink({ class: [props.ui?.childLink, item.ui?.childLink, childItem.class], active: childActive })">
186
+ <UIcon v-if="childItem.icon" :name="childItem.icon" data-slot="childLinkIcon" :class="ui.childLinkIcon({ class: [props.ui?.childLinkIcon, item.ui?.childLinkIcon], active: childActive })" />
180
187
 
181
- <span :class="ui.childLinkLabel({ class: [props.ui?.childLinkLabel, item.ui?.childLinkLabel], active: childActive })">
188
+ <span data-slot="childLinkLabel" :class="ui.childLinkLabel({ class: [props.ui?.childLinkLabel, item.ui?.childLinkLabel], active: childActive })">
182
189
  {{ get(childItem, props.labelKey) }}
183
190
 
184
- <UIcon v-if="childItem.target === '_blank' && externalIcon !== false" :name="typeof externalIcon === 'string' ? externalIcon : appConfig.ui.icons.external" :class="ui.childLinkLabelExternalIcon({ class: [props.ui?.childLinkLabelExternalIcon, item.ui?.childLinkLabelExternalIcon], active: childActive })" />
191
+ <UIcon v-if="childItem.target === '_blank' && externalIcon !== false" :name="typeof externalIcon === 'string' ? externalIcon : appConfig.ui.icons.external" data-slot="childLinkLabelExternalIcon" :class="ui.childLinkLabelExternalIcon({ class: [props.ui?.childLinkLabelExternalIcon, item.ui?.childLinkLabelExternalIcon], active: childActive })" />
185
192
  </span>
186
193
  </ULinkBase>
187
194
  </NavigationMenuLink>
@@ -192,31 +199,31 @@ function getAccordionDefaultValue(list, level = 0) {
192
199
  </template>
193
200
  </UPopover>
194
201
  <UTooltip v-else-if="orientation === 'vertical' && collapsed && (!!props.tooltip || !!item.tooltip)" :text="get(item, props.labelKey)" v-bind="{ ...tooltipProps, ...typeof item.tooltip === 'boolean' ? {} : item.tooltip || {} }">
195
- <ULinkBase v-bind="slotProps" :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: active || item.active, disabled: !!item.disabled, level: level > 0 })">
202
+ <ULinkBase v-bind="slotProps" data-slot="link" :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: active || item.active, disabled: !!item.disabled, level: level > 0 })">
196
203
  <ReuseLinkTemplate :item="item" :active="active || item.active" :index="index" />
197
204
  </ULinkBase>
198
205
  </UTooltip>
199
- <ULinkBase v-else v-bind="slotProps" :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: active || item.active, disabled: !!item.disabled, level: orientation === 'horizontal' || level > 0 })">
206
+ <ULinkBase v-else v-bind="slotProps" data-slot="link" :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: active || item.active, disabled: !!item.disabled, level: orientation === 'horizontal' || level > 0 })">
200
207
  <ReuseLinkTemplate :item="item" :active="active || item.active" :index="index" />
201
208
  </ULinkBase>
202
209
  </component>
203
210
 
204
- <NavigationMenuContent v-if="orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content'])" v-bind="contentProps" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
211
+ <NavigationMenuContent v-if="orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content'])" v-bind="contentProps" data-slot="content" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
205
212
  <slot :name="item.slot ? `${item.slot}-content` : 'item-content'" :item="item" :active="active || item.active" :index="index" :ui="ui">
206
- <ul :class="ui.childList({ class: [props.ui?.childList, item.ui?.childList] })">
207
- <li v-for="(childItem, childIndex) in item.children" :key="childIndex" :class="ui.childItem({ class: [props.ui?.childItem, item.ui?.childItem] })">
213
+ <ul data-slot="childList" :class="ui.childList({ class: [props.ui?.childList, item.ui?.childList] })">
214
+ <li v-for="(childItem, childIndex) in item.children" :key="childIndex" data-slot="childItem" :class="ui.childItem({ class: [props.ui?.childItem, item.ui?.childItem] })">
208
215
  <ULink v-slot="{ active: childActive, ...childSlotProps }" v-bind="pickLinkProps(childItem)" custom>
209
216
  <NavigationMenuLink as-child :active="childActive" @select="childItem.onSelect">
210
- <ULinkBase v-bind="childSlotProps" :class="ui.childLink({ class: [props.ui?.childLink, item.ui?.childLink, childItem.class], active: childActive })">
211
- <UIcon v-if="childItem.icon" :name="childItem.icon" :class="ui.childLinkIcon({ class: [props.ui?.childLinkIcon, item.ui?.childLinkIcon], active: childActive })" />
217
+ <ULinkBase v-bind="childSlotProps" data-slot="childLink" :class="ui.childLink({ class: [props.ui?.childLink, item.ui?.childLink, childItem.class], active: childActive })">
218
+ <UIcon v-if="childItem.icon" :name="childItem.icon" data-slot="childLinkIcon" :class="ui.childLinkIcon({ class: [props.ui?.childLinkIcon, item.ui?.childLinkIcon], active: childActive })" />
212
219
 
213
- <div :class="ui.childLinkWrapper({ class: [props.ui?.childLinkWrapper, item.ui?.childLinkWrapper] })">
214
- <p :class="ui.childLinkLabel({ class: [props.ui?.childLinkLabel, item.ui?.childLinkLabel], active: childActive })">
220
+ <div data-slot="childLinkWrapper" :class="ui.childLinkWrapper({ class: [props.ui?.childLinkWrapper, item.ui?.childLinkWrapper] })">
221
+ <p data-slot="childLinkLabel" :class="ui.childLinkLabel({ class: [props.ui?.childLinkLabel, item.ui?.childLinkLabel], active: childActive })">
215
222
  {{ get(childItem, props.labelKey) }}
216
223
 
217
- <UIcon v-if="childItem.target === '_blank' && externalIcon !== false" :name="typeof externalIcon === 'string' ? externalIcon : appConfig.ui.icons.external" :class="ui.childLinkLabelExternalIcon({ class: [props.ui?.childLinkLabelExternalIcon, item.ui?.childLinkLabelExternalIcon], active: childActive })" />
224
+ <UIcon v-if="childItem.target === '_blank' && externalIcon !== false" :name="typeof externalIcon === 'string' ? externalIcon : appConfig.ui.icons.external" data-slot="childLinkLabelExternalIcon" :class="ui.childLinkLabelExternalIcon({ class: [props.ui?.childLinkLabelExternalIcon, item.ui?.childLinkLabelExternalIcon], active: childActive })" />
218
225
  </p>
219
- <p v-if="childItem.description" :class="ui.childLinkDescription({ class: [props.ui?.childLinkDescription, item.ui?.childLinkDescription], active: childActive })">
226
+ <p v-if="childItem.description" data-slot="childLinkDescription" :class="ui.childLinkDescription({ class: [props.ui?.childLinkDescription, item.ui?.childLinkDescription], active: childActive })">
220
227
  {{ childItem.description }}
221
228
  </p>
222
229
  </div>
@@ -229,13 +236,14 @@ function getAccordionDefaultValue(list, level = 0) {
229
236
  </NavigationMenuContent>
230
237
  </ULink>
231
238
 
232
- <AccordionContent v-if="orientation === 'vertical' && item.children?.length && !collapsed" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
239
+ <AccordionContent v-if="orientation === 'vertical' && item.children?.length && !collapsed" data-slot="content" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
233
240
  <AccordionRoot
234
241
  v-bind="{
235
242
  ...accordionProps,
236
243
  defaultValue: getAccordionDefaultValue(item.children, level + 1)
237
244
  }"
238
245
  as="ul"
246
+ data-slot="childList"
239
247
  :class="ui.childList({ class: props.ui?.childList })"
240
248
  >
241
249
  <ReuseItemTemplate
@@ -244,6 +252,7 @@ function getAccordionDefaultValue(list, level = 0) {
244
252
  :item="childItem"
245
253
  :index="childIndex"
246
254
  :level="level + 1"
255
+ data-slot="childItem"
247
256
  :class="ui.childItem({ class: [props.ui?.childItem, childItem.ui?.childItem] })"
248
257
  />
249
258
  </AccordionRoot>
@@ -251,33 +260,54 @@ function getAccordionDefaultValue(list, level = 0) {
251
260
  </component>
252
261
  </DefineItemTemplate>
253
262
 
254
- <NavigationMenuRoot v-bind="{ ...rootProps, ...$attrs }" :data-collapsed="collapsed" :class="ui.root({ class: [props.ui?.root, props.class] })">
263
+ <NavigationMenuRoot
264
+ v-bind="{
265
+ ...rootProps,
266
+ ...orientation === 'horizontal' ? {
267
+ modelValue,
268
+ defaultValue
269
+ } : {},
270
+ ...$attrs
271
+ }"
272
+ :data-collapsed="collapsed"
273
+ data-slot="root"
274
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
275
+ >
255
276
  <slot name="list-leading" />
256
277
 
257
278
  <template v-for="(list, listIndex) in lists" :key="`list-${listIndex}`">
258
279
  <component
259
280
  v-bind="orientation === 'vertical' && !collapsed ? {
260
281
  ...accordionProps,
261
- defaultValue: getAccordionDefaultValue(list)
282
+ modelValue,
283
+ defaultValue: defaultValue ?? getAccordionDefaultValue(list)
262
284
  } : {}"
263
- :is="orientation === 'vertical' && !collapsed ? AccordionRoot : NavigationMenuList"
285
+ :is="orientation === 'vertical' ? AccordionRoot : NavigationMenuList"
264
286
  as="ul"
287
+ data-slot="list"
265
288
  :class="ui.list({ class: props.ui?.list })"
266
289
  >
267
- <ReuseItemTemplate v-for="(item, index) in list" :key="`list-${listIndex}-${index}`" :item="item" :index="index" :class="ui.item({ class: [props.ui?.item, item.ui?.item] })" />
290
+ <ReuseItemTemplate
291
+ v-for="(item, index) in list"
292
+ :key="`list-${listIndex}-${index}`"
293
+ :item="item"
294
+ :index="index"
295
+ data-slot="item"
296
+ :class="ui.item({ class: [props.ui?.item, item.ui?.item] })"
297
+ />
268
298
  </component>
269
299
 
270
- <div v-if="orientation === 'vertical' && listIndex < lists.length - 1" :class="ui.separator({ class: props.ui?.separator })" />
300
+ <div v-if="orientation === 'vertical' && listIndex < lists.length - 1" data-slot="separator" :class="ui.separator({ class: props.ui?.separator })" />
271
301
  </template>
272
302
 
273
303
  <slot name="list-trailing" />
274
304
 
275
- <div v-if="orientation === 'horizontal'" :class="ui.viewportWrapper({ class: props.ui?.viewportWrapper })">
276
- <NavigationMenuIndicator v-if="arrow" :class="ui.indicator({ class: props.ui?.indicator })">
277
- <div :class="ui.arrow({ class: props.ui?.arrow })" />
305
+ <div v-if="orientation === 'horizontal'" data-slot="viewportWrapper" :class="ui.viewportWrapper({ class: props.ui?.viewportWrapper })">
306
+ <NavigationMenuIndicator v-if="arrow" data-slot="indicator" :class="ui.indicator({ class: props.ui?.indicator })">
307
+ <div data-slot="arrow" :class="ui.arrow({ class: props.ui?.arrow })" />
278
308
  </NavigationMenuIndicator>
279
309
 
280
- <NavigationMenuViewport :class="ui.viewport({ class: props.ui?.viewport })" />
310
+ <NavigationMenuViewport data-slot="viewport" :class="ui.viewport({ class: props.ui?.viewport })" />
281
311
  </div>
282
312
  </NavigationMenuRoot>
283
313
  </template>
@@ -1,4 +1,4 @@
1
- import type { NavigationMenuRootProps, NavigationMenuRootEmits, NavigationMenuContentProps, NavigationMenuContentEmits, AccordionRootProps } from 'reka-ui';
1
+ import type { NavigationMenuRootProps, NavigationMenuContentProps, NavigationMenuContentEmits, AccordionRootProps } from 'reka-ui';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
3
  import theme from '#build/ui/navigation-menu';
4
4
  import type { AvatarProps, BadgeProps, IconProps, LinkProps, PopoverProps, TooltipProps } from '../types';
@@ -57,12 +57,40 @@ export interface NavigationMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'cu
57
57
  ui?: Pick<NavigationMenu['slots'], 'item' | 'linkLeadingAvatarSize' | 'linkLeadingAvatar' | 'linkLeadingIcon' | 'linkLabel' | 'linkLabelExternalIcon' | 'linkTrailing' | 'linkTrailingBadgeSize' | 'linkTrailingBadge' | 'linkTrailingIcon' | 'label' | 'link' | 'content' | 'childList' | 'childLabel' | 'childItem' | 'childLink' | 'childLinkIcon' | 'childLinkWrapper' | 'childLinkLabel' | 'childLinkLabelExternalIcon' | 'childLinkDescription'>;
58
58
  [key: string]: any;
59
59
  }
60
- export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem> = ArrayOrNested<NavigationMenuItem>> extends Pick<NavigationMenuRootProps, 'modelValue' | 'defaultValue' | 'delayDuration' | 'disableClickTrigger' | 'disableHoverTrigger' | 'skipDelayDuration' | 'disablePointerLeaveClose' | 'unmountOnHide'>, Pick<AccordionRootProps, 'disabled' | 'type' | 'collapsible'> {
60
+ type SingleOrMultipleType = 'single' | 'multiple';
61
+ type Orientation = NavigationMenuRootProps['orientation'];
62
+ type NavigationMenuModelValue<K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> = O extends 'horizontal' ? string : K extends 'single' ? string : K extends 'multiple' ? string[] : string | string[];
63
+ export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem> = ArrayOrNested<NavigationMenuItem>, K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> extends Pick<NavigationMenuRootProps, 'delayDuration' | 'disableClickTrigger' | 'disableHoverTrigger' | 'skipDelayDuration' | 'disablePointerLeaveClose' | 'unmountOnHide'>, Pick<AccordionRootProps, 'disabled' | 'collapsible'> {
61
64
  /**
62
65
  * The element or component this component should render as.
63
66
  * @defaultValue 'div'
64
67
  */
65
68
  as?: any;
69
+ /**
70
+ * Determines whether a "single" or "multiple" items can be selected at a time.
71
+ *
72
+ * Only works when `orientation` is `vertical`.
73
+ * @defaultValue 'multiple'
74
+ */
75
+ type?: K;
76
+ /**
77
+ * The controlled value of the active item(s).
78
+ * - In horizontal orientation: always `string`
79
+ * - In vertical orientation with `type="single"`: `string`
80
+ * - In vertical orientation with `type="multiple"`: `string[]`
81
+ *
82
+ * Use this when you need to control the state of the items. Can be binded with `v-model`
83
+ */
84
+ modelValue?: NavigationMenuModelValue<K, O>;
85
+ /**
86
+ * The default active value of the item(s).
87
+ * - In horizontal orientation: always `string`
88
+ * - In vertical orientation with `type="single"`: `string`
89
+ * - In vertical orientation with `type="multiple"`: `string[]`
90
+ *
91
+ * Use when you do not need to control the state of the item(s).
92
+ */
93
+ defaultValue?: NavigationMenuModelValue<K, O>;
66
94
  /**
67
95
  * The icon displayed to open the menu.
68
96
  * @defaultValue appConfig.ui.icons.chevronDown
@@ -89,7 +117,7 @@ export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem>
89
117
  * The orientation of the menu.
90
118
  * @defaultValue 'horizontal'
91
119
  */
92
- orientation?: NavigationMenuRootProps['orientation'];
120
+ orientation?: O;
93
121
  /**
94
122
  * Collapse the navigation menu to only show icons.
95
123
  * Only works when `orientation` is `vertical`.
@@ -135,8 +163,15 @@ export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem>
135
163
  class?: any;
136
164
  ui?: NavigationMenu['slots'];
137
165
  }
138
- export interface NavigationMenuEmits extends NavigationMenuRootEmits {
139
- }
166
+ export type NavigationMenuEmits<K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> = {
167
+ /**
168
+ * Event handler called when the value changes.
169
+ * - In horizontal orientation: emits `string`
170
+ * - In vertical orientation with `type="single"`: emits `string | undefined`
171
+ * - In vertical orientation with `type="multiple"`: emits `string[] | undefined`
172
+ */
173
+ 'update:modelValue': [value: NavigationMenuModelValue<K, O> | undefined];
174
+ };
140
175
  type SlotProps<T extends NavigationMenuItem> = (props: {
141
176
  item: T;
142
177
  index: number;
@@ -166,14 +201,14 @@ export type NavigationMenuSlots<A extends ArrayOrNested<NavigationMenuItem> = Ar
166
201
  active?: boolean;
167
202
  ui: NavigationMenu['ui'];
168
203
  }>;
169
- declare const __VLS_export: <T extends ArrayOrNested<NavigationMenuItem>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
170
- props: __VLS_PrettifyLocal<NavigationMenuProps<T> & {
171
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
204
+ declare const __VLS_export: <T extends ArrayOrNested<NavigationMenuItem>, K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
205
+ props: __VLS_PrettifyLocal<NavigationMenuProps<T, K, O> & {
206
+ "onUpdate:modelValue"?: ((value: NavigationMenuModelValue<K, O> | undefined) => any) | undefined;
172
207
  }> & import("vue").PublicProps;
173
208
  expose: (exposed: {}) => void;
174
209
  attrs: any;
175
210
  slots: NavigationMenuSlots<T, NestedItem<T>>;
176
- emit: (evt: "update:modelValue", value: string) => void;
211
+ emit: (evt: "update:modelValue", value: NavigationMenuModelValue<K, O> | undefined) => void;
177
212
  }>) => import("vue").VNode & {
178
213
  __ctx?: Awaited<typeof __VLS_setup>;
179
214
  };