@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
package/cli/templates.mjs CHANGED
@@ -62,7 +62,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.${camelName}
62
62
  </script>
63
63
 
64
64
  <template>
65
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
65
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
66
66
  <slot />
67
67
  </Primitive>
68
68
  </template>
@@ -105,7 +105,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.${camelName}
105
105
  </script>
106
106
 
107
107
  <template>
108
- <${upperName}Root v-bind="rootProps" :class="ui.root({ class: [props.ui?.root, props.class] })" />
108
+ <${upperName}Root v-bind="rootProps" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })" />
109
109
  </template>
110
110
  `
111
111
  }
package/dist/module.d.mts CHANGED
@@ -40,6 +40,10 @@ interface ModuleOptions {
40
40
  * @see https://ui.nuxt.com/docs/getting-started/installation/nuxt#themetransitions
41
41
  */
42
42
  transitions?: boolean;
43
+ /**
44
+ * The default variants to use for components
45
+ * @see https://ui.nuxt.com/docs/getting-started/installation/nuxt#themedefaultvariants
46
+ */
43
47
  defaultVariants?: {
44
48
  /**
45
49
  * The default color variant to use for components
@@ -52,6 +56,12 @@ interface ModuleOptions {
52
56
  */
53
57
  size?: Size;
54
58
  };
59
+ /**
60
+ * Prefix for Tailwind CSS utility classes
61
+ * @see https://ui.nuxt.com/docs/getting-started/installation/nuxt#themeprefix
62
+ * @example 'tw'
63
+ */
64
+ prefix?: string;
55
65
  };
56
66
  /**
57
67
  * Force the import of prose components even if `@nuxtjs/mdc` or `@nuxt/content` are not installed
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuxt/ui",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "docs": "https://ui.nuxt.com/docs/getting-started/installation/nuxt",
5
5
  "configKey": "ui",
6
6
  "compatibility": {
package/dist/module.mjs CHANGED
@@ -1,17 +1,17 @@
1
1
  import { defu } from 'defu';
2
2
  import { defineNuxtModule, createResolver, addPlugin, hasNuxtModule, addComponentsDir, addImportsDir, installModule } from '@nuxt/kit';
3
- import { d as defaultOptions, r as resolveColors, a as getDefaultUiConfig, b as addTemplates } from './shared/ui.Cmctwxv6.mjs';
3
+ import { d as defaultOptions, r as resolveColors, a as getDefaultConfig, b as addTemplates } from './shared/ui.B77q-Dvh.mjs';
4
4
  import '../dist/runtime/utils/index.js';
5
5
  import 'node:url';
6
- import 'node:fs/promises';
7
- import 'pathe';
8
- import 'tinyglobby';
9
6
  import 'scule';
10
7
  import 'knitwork';
11
8
  import 'tailwindcss/colors';
9
+ import 'node:fs/promises';
10
+ import 'pathe';
11
+ import 'tinyglobby';
12
12
 
13
13
  const name = "@nuxt/ui";
14
- const version = "4.1.0";
14
+ const version = "4.2.0";
15
15
 
16
16
  const module = defineNuxtModule({
17
17
  meta: {
@@ -30,9 +30,9 @@ const module = defineNuxtModule({
30
30
  options.theme.colors = resolveColors(options.theme.colors);
31
31
  nuxt.options.ui = options;
32
32
  nuxt.options.alias["#ui"] = resolve("./runtime");
33
- nuxt.options.appConfig.ui = defu(nuxt.options.appConfig.ui || {}, getDefaultUiConfig(options.theme.colors));
33
+ nuxt.options.appConfig.ui = defu(nuxt.options.appConfig.ui || {}, getDefaultConfig(options.theme));
34
34
  nuxt.options.app.rootAttrs = nuxt.options.app.rootAttrs || {};
35
- nuxt.options.app.rootAttrs.class = [nuxt.options.app.rootAttrs.class, "isolate"].filter(Boolean).join(" ");
35
+ nuxt.options.app.rootAttrs.class = [nuxt.options.app.rootAttrs.class, `${options.theme?.prefix ? options.theme.prefix + ":" : ""}isolate`].filter(Boolean).join(" ");
36
36
  nuxt.hook("vite:extend", async ({ config }) => {
37
37
  const plugin = await import('@tailwindcss/vite').then((r) => r.default);
38
38
  config.plugins ||= [];
@@ -34,34 +34,35 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.accordion ||
34
34
  </script>
35
35
 
36
36
  <template>
37
- <AccordionRoot v-bind="rootProps" :type="type" :class="ui.root({ class: [props.ui?.root, props.class] })">
37
+ <AccordionRoot v-bind="rootProps" :type="type" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
38
38
  <AccordionItem
39
39
  v-for="(item, index) in props.items"
40
40
  v-slot="{ open }"
41
41
  :key="index"
42
42
  :value="item.value || String(index)"
43
43
  :disabled="item.disabled"
44
+ data-slot="item"
44
45
  :class="ui.item({ class: [props.ui?.item, item.ui?.item, item.class] })"
45
46
  >
46
- <AccordionHeader as="div" :class="ui.header({ class: [props.ui?.header, item.ui?.header] })">
47
- <AccordionTrigger :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger], disabled: item.disabled })">
47
+ <AccordionHeader as="div" data-slot="header" :class="ui.header({ class: [props.ui?.header, item.ui?.header] })">
48
+ <AccordionTrigger data-slot="trigger" :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger], disabled: item.disabled })">
48
49
  <slot name="leading" :item="item" :index="index" :open="open" :ui="ui">
49
- <UIcon v-if="item.icon" :name="item.icon" :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item?.ui?.leadingIcon] })" />
50
+ <UIcon v-if="item.icon" :name="item.icon" data-slot="leadingIcon" :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item?.ui?.leadingIcon] })" />
50
51
  </slot>
51
52
 
52
- <span v-if="get(item, props.labelKey) || !!slots.default" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })">
53
+ <span v-if="get(item, props.labelKey) || !!slots.default" data-slot="label" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })">
53
54
  <slot :item="item" :index="index" :open="open">{{ get(item, props.labelKey) }}</slot>
54
55
  </span>
55
56
 
56
57
  <slot name="trailing" :item="item" :index="index" :open="open" :ui="ui">
57
- <UIcon :name="item.trailingIcon || trailingIcon || appConfig.ui.icons.chevronDown" :class="ui.trailingIcon({ class: [props.ui?.trailingIcon, item.ui?.trailingIcon] })" />
58
+ <UIcon :name="item.trailingIcon || trailingIcon || appConfig.ui.icons.chevronDown" data-slot="trailingIcon" :class="ui.trailingIcon({ class: [props.ui?.trailingIcon, item.ui?.trailingIcon] })" />
58
59
  </slot>
59
60
  </AccordionTrigger>
60
61
  </AccordionHeader>
61
62
 
62
- <AccordionContent v-if="item.content || !!slots.content || item.slot && !!slots[item.slot] || !!slots.body || item.slot && !!slots[`${item.slot}-body`]" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
63
+ <AccordionContent v-if="item.content || !!slots.content || item.slot && !!slots[item.slot] || !!slots.body || item.slot && !!slots[`${item.slot}-body`]" data-slot="content" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
63
64
  <slot :name="item.slot || 'content'" :item="item" :index="index" :open="open" :ui="ui">
64
- <div :class="ui.body({ class: [props.ui?.body, item.ui?.body] })">
65
+ <div data-slot="body" :class="ui.body({ class: [props.ui?.body, item.ui?.body] })">
65
66
  <slot :name="item.slot ? `${item.slot}-body` : 'body'" :item="item" :index="index" :open="open" :ui="ui">
66
67
  {{ item.content }}
67
68
  </slot>
@@ -39,32 +39,32 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.alert || {} }
39
39
  </script>
40
40
 
41
41
  <template>
42
- <Primitive :as="as" :data-orientation="orientation" :class="ui.root({ class: [props.ui?.root, props.class] })">
42
+ <Primitive :as="as" :data-orientation="orientation" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
43
43
  <slot name="leading" :ui="ui">
44
- <UAvatar v-if="avatar" :size="props.ui?.avatarSize || ui.avatarSize()" v-bind="avatar" :class="ui.avatar({ class: props.ui?.avatar })" />
45
- <UIcon v-else-if="icon" :name="icon" :class="ui.icon({ class: props.ui?.icon })" />
44
+ <UAvatar v-if="avatar" :size="props.ui?.avatarSize || ui.avatarSize()" v-bind="avatar" data-slot="avatar" :class="ui.avatar({ class: props.ui?.avatar })" />
45
+ <UIcon v-else-if="icon" :name="icon" data-slot="icon" :class="ui.icon({ class: props.ui?.icon })" />
46
46
  </slot>
47
47
 
48
- <div :class="ui.wrapper({ class: props.ui?.wrapper })">
49
- <div v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
48
+ <div data-slot="wrapper" :class="ui.wrapper({ class: props.ui?.wrapper })">
49
+ <div v-if="title || !!slots.title" data-slot="title" :class="ui.title({ class: props.ui?.title })">
50
50
  <slot name="title">
51
51
  {{ title }}
52
52
  </slot>
53
53
  </div>
54
- <div v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
54
+ <div v-if="description || !!slots.description" data-slot="description" :class="ui.description({ class: props.ui?.description })">
55
55
  <slot name="description">
56
56
  {{ description }}
57
57
  </slot>
58
58
  </div>
59
59
 
60
- <div v-if="orientation === 'vertical' && (actions?.length || !!slots.actions)" :class="ui.actions({ class: props.ui?.actions })">
60
+ <div v-if="orientation === 'vertical' && (actions?.length || !!slots.actions)" data-slot="actions" :class="ui.actions({ class: props.ui?.actions })">
61
61
  <slot name="actions">
62
62
  <UButton v-for="(action, index) in actions" :key="index" size="xs" v-bind="action" />
63
63
  </slot>
64
64
  </div>
65
65
  </div>
66
66
 
67
- <div v-if="orientation === 'horizontal' && (actions?.length || !!slots.actions) || close" :class="ui.actions({ class: props.ui?.actions, orientation: 'horizontal' })">
67
+ <div v-if="orientation === 'horizontal' && (actions?.length || !!slots.actions) || close" data-slot="actions" :class="ui.actions({ class: props.ui?.actions, orientation: 'horizontal' })">
68
68
  <template v-if="orientation === 'horizontal' && (actions?.length || !!slots.actions)">
69
69
  <slot name="actions">
70
70
  <UButton v-for="(action, index) in actions" :key="index" size="xs" v-bind="action" />
@@ -79,6 +79,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.alert || {} }
79
79
  variant="link"
80
80
  :aria-label="t('alert.close')"
81
81
  v-bind="typeof close === 'object' ? close : {}"
82
+ data-slot="close"
82
83
  :class="ui.close({ class: props.ui?.close })"
83
84
  @click="emits('update:open', false)"
84
85
  />
@@ -1,7 +1,7 @@
1
1
  import type { ConfigProviderProps, TooltipProviderProps } from 'reka-ui';
2
2
  import type { ToasterProps } from '../types';
3
3
  import type { Locale, Messages } from '../types/locale';
4
- export interface AppProps<T extends Messages = Messages> extends Omit<ConfigProviderProps, 'useId' | 'dir' | 'locale'> {
4
+ export interface AppProps<T extends Messages = Messages> extends Omit<ConfigProviderProps, 'useId' | 'locale'> {
5
5
  tooltip?: TooltipProviderProps;
6
6
  toaster?: ToasterProps | null;
7
7
  locale?: Locale<T>;
@@ -17,6 +17,7 @@ const props = defineProps({
17
17
  toaster: { type: [Object, null], required: false },
18
18
  locale: { type: Object, required: false },
19
19
  portal: { type: [Boolean, String], required: false, skipCheck: true, default: "body" },
20
+ dir: { type: String, required: false },
20
21
  scrollBody: { type: [Boolean, Object], required: false },
21
22
  nonce: { type: String, required: false }
22
23
  });
@@ -31,7 +32,7 @@ provide(portalTargetInjectionKey, portal);
31
32
  </script>
32
33
 
33
34
  <template>
34
- <ConfigProvider :use-id="() => useId()" :dir="locale?.dir" :locale="locale?.code" v-bind="configProviderProps">
35
+ <ConfigProvider :use-id="() => useId()" :dir="props.dir || locale?.dir" :locale="locale?.code" v-bind="configProviderProps">
35
36
  <TooltipProvider v-bind="tooltipProps">
36
37
  <UToaster v-if="toaster !== null" v-bind="toasterProps">
37
38
  <slot />
@@ -1,7 +1,7 @@
1
1
  import type { ConfigProviderProps, TooltipProviderProps } from 'reka-ui';
2
2
  import type { ToasterProps } from '../types';
3
3
  import type { Locale, Messages } from '../types/locale';
4
- export interface AppProps<T extends Messages = Messages> extends Omit<ConfigProviderProps, 'useId' | 'dir' | 'locale'> {
4
+ export interface AppProps<T extends Messages = Messages> extends Omit<ConfigProviderProps, 'useId' | 'locale'> {
5
5
  tooltip?: TooltipProviderProps;
6
6
  toaster?: ToasterProps | null;
7
7
  locale?: Locale<T>;
@@ -2,17 +2,19 @@ import type { AppConfig } from '@nuxt/schema';
2
2
  import theme from '#build/ui/auth-form';
3
3
  import type { ButtonProps, FormProps, FormFieldProps, SeparatorProps, InputProps, CheckboxProps, SelectMenuProps, PinInputProps, IconProps } from '../types';
4
4
  import type { FormSchema, FormSubmitEvent, InferInput } from '../types/form';
5
+ import type { FormHTMLAttributes } from '../types/html';
6
+ import type { NonUnion } from '../types/utils';
5
7
  import type { ComponentConfig } from '../types/tv';
6
8
  type AuthForm = ComponentConfig<typeof theme, AppConfig, 'authForm'>;
7
- type AuthFormCheckboxField = Omit<FormFieldProps, 'name'> & CheckboxProps & {
9
+ export type AuthFormCheckboxField = Omit<FormFieldProps, 'name'> & CheckboxProps & {
8
10
  name: string;
9
11
  type: 'checkbox';
10
12
  };
11
- type AuthFormSelectField = Omit<FormFieldProps, 'name'> & SelectMenuProps & {
13
+ export type AuthFormSelectField = Omit<FormFieldProps, 'name'> & SelectMenuProps & {
12
14
  name: string;
13
15
  type: 'select';
14
16
  };
15
- type AuthFormOtpField = Omit<FormFieldProps, 'name'> & Omit<PinInputProps, 'type' | 'otp'> & {
17
+ export type AuthFormOtpField = Omit<FormFieldProps, 'name'> & Omit<PinInputProps, 'type' | 'otp'> & {
16
18
  name: string;
17
19
  type: 'otp';
18
20
  /**
@@ -22,14 +24,13 @@ type AuthFormOtpField = Omit<FormFieldProps, 'name'> & Omit<PinInputProps, 'type
22
24
  */
23
25
  otp?: boolean | PinInputProps;
24
26
  };
25
- type AuthFormInputFieldType = 'password' | 'text' | 'email' | 'number';
26
- type AuthFormInputField<T extends AuthFormInputFieldType = AuthFormInputFieldType> = Omit<FormFieldProps, 'name'> & InputProps & {
27
+ export type AuthFormInputFieldType = 'password' | 'text' | 'email' | 'number';
28
+ export type AuthFormInputField<T extends AuthFormInputFieldType & NonUnion<T> = 'text'> = Omit<FormFieldProps, 'name'> & Omit<InputProps, 'type'> & {
27
29
  name: string;
28
30
  type: T;
29
31
  };
30
- type AuthFormFieldType = 'checkbox' | 'select' | 'otp' | 'password' | 'text' | 'email' | 'number';
31
- export type AuthFormField<T extends AuthFormFieldType = AuthFormFieldType> = T extends 'checkbox' ? AuthFormCheckboxField : T extends 'select' ? AuthFormSelectField : T extends 'otp' ? AuthFormOtpField : T extends AuthFormInputFieldType ? AuthFormInputField<T> : never;
32
- export interface AuthFormProps<T extends FormSchema = FormSchema<object>, F extends AuthFormField = AuthFormField> {
32
+ export type AuthFormField = AuthFormCheckboxField | AuthFormSelectField | AuthFormOtpField | AuthFormInputField<'password'> | AuthFormInputField<'text'> | AuthFormInputField<'email'> | AuthFormInputField<'number'>;
33
+ export interface AuthFormProps<T extends FormSchema = FormSchema<object>, F extends AuthFormField = AuthFormField> extends /** @vue-ignore */ FormHTMLAttributes {
33
34
  /**
34
35
  * The element or component this component should render as.
35
36
  * @defaultValue 'div'
@@ -18,6 +18,7 @@ import UCheckbox from "./Checkbox.vue";
18
18
  import USelectMenu from "./SelectMenu.vue";
19
19
  import UInput from "./Input.vue";
20
20
  import UPinInput from "./PinInput.vue";
21
+ defineOptions({ inheritAttrs: false });
21
22
  const props = defineProps({
22
23
  as: { type: null, required: false },
23
24
  icon: { type: [String, Object], required: false },
@@ -48,13 +49,10 @@ defineEmits(["submit"]);
48
49
  const slots = defineSlots();
49
50
  const { t } = useLocale();
50
51
  const appConfig = useAppConfig();
52
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.authForm || {} })());
51
53
  const formRef = useTemplateRef("formRef");
52
54
  const passwordVisibility = ref(false);
53
- const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.authForm || {} })());
54
- defineExpose({
55
- formRef,
56
- state
57
- });
55
+ const passwordRef = useTemplateRef("passwordRef");
58
56
  function pickFieldProps(field) {
59
57
  const fields = ["name", "errorPattern", "help", "error", "hint", "size", "required", "eagerValidation", "validateOnInputDelay"];
60
58
  if (field.type === "checkbox") {
@@ -72,25 +70,29 @@ function omitFieldProps(field) {
72
70
  }
73
71
  return omit(field, [...fields, "label", "description"]);
74
72
  }
73
+ defineExpose({
74
+ formRef,
75
+ state
76
+ });
75
77
  </script>
76
78
 
77
79
  <template>
78
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
79
- <div v-if="icon || !!slots.icon || (title || !!slots.title) || (description || !!slots.description) || !!slots.header" :class="ui.header({ class: props.ui?.header })">
80
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
81
+ <div v-if="icon || !!slots.leading || (title || !!slots.title) || (description || !!slots.description) || !!slots.header" data-slot="header" :class="ui.header({ class: props.ui?.header })">
80
82
  <slot name="header">
81
- <div v-if="icon || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
83
+ <div v-if="icon || !!slots.leading" data-slot="leading" :class="ui.leading({ class: props.ui?.leading })">
82
84
  <slot name="leading" :ui="ui">
83
- <UIcon v-if="icon" :name="icon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
85
+ <UIcon v-if="icon" :name="icon" data-slot="leadingIcon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
84
86
  </slot>
85
87
  </div>
86
88
 
87
- <div v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
89
+ <div v-if="title || !!slots.title" data-slot="title" :class="ui.title({ class: props.ui?.title })">
88
90
  <slot name="title">
89
91
  {{ title }}
90
92
  </slot>
91
93
  </div>
92
94
 
93
- <div v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
95
+ <div v-if="description || !!slots.description" data-slot="description" :class="ui.description({ class: props.ui?.description })">
94
96
  <slot name="description">
95
97
  {{ description }}
96
98
  </slot>
@@ -98,8 +100,8 @@ function omitFieldProps(field) {
98
100
  </slot>
99
101
  </div>
100
102
 
101
- <div :class="ui.body({ class: props.ui?.body })">
102
- <div v-if="providers?.length || !!slots.providers" :class="ui.providers({ class: props.ui?.providers })">
103
+ <div data-slot="body" :class="ui.body({ class: props.ui?.body })">
104
+ <div v-if="providers?.length || !!slots.providers" data-slot="providers" :class="ui.providers({ class: props.ui?.providers })">
103
105
  <slot name="providers">
104
106
  <UButton
105
107
  v-for="(provider, index) in providers"
@@ -115,6 +117,7 @@ function omitFieldProps(field) {
115
117
  <USeparator
116
118
  v-if="providers?.length && fields?.length"
117
119
  v-bind="typeof separator === 'object' ? separator : { label: separator }"
120
+ data-slot="separator"
118
121
  :class="ui.separator({ class: props.ui?.separator })"
119
122
  />
120
123
 
@@ -125,9 +128,11 @@ function omitFieldProps(field) {
125
128
  :schema="schema"
126
129
  :validate="validate"
127
130
  :validate-on="validateOn"
128
- :class="ui.form({ class: props.ui?.form })"
129
131
  :disabled="disabled"
130
132
  :loading-auto="loadingAuto"
133
+ data-slot="form"
134
+ :class="ui.form({ class: props.ui?.form })"
135
+ v-bind="$attrs"
131
136
  @submit="onSubmit"
132
137
  >
133
138
  <UFormField
@@ -139,12 +144,14 @@ function omitFieldProps(field) {
139
144
  <UCheckbox
140
145
  v-if="field.type === 'checkbox'"
141
146
  v-model="state[field.name]"
147
+ data-slot="checkbox"
142
148
  :class="ui.checkbox({ class: props.ui?.checkbox })"
143
149
  v-bind="omitFieldProps(field)"
144
150
  />
145
151
  <USelectMenu
146
152
  v-else-if="field.type === 'select'"
147
153
  v-model="state[field.name]"
154
+ data-slot="select"
148
155
  :class="ui.select({ class: props.ui?.select })"
149
156
  v-bind="omitFieldProps(field)"
150
157
  />
@@ -152,16 +159,16 @@ function omitFieldProps(field) {
152
159
  v-else-if="field.type === 'otp'"
153
160
  :id="field.name"
154
161
  v-model="state[field.name]"
162
+ data-slot="otp"
155
163
  :class="ui.otp({ class: props.ui?.otp })"
156
- v-bind="{
157
- ...omitFieldProps(field),
158
- ...typeof field.otp === 'object' ? field.otp : {}
159
- }"
164
+ v-bind="Object.assign({}, omitFieldProps(field), typeof field.otp === 'object' ? field.otp : {})"
160
165
  otp
161
166
  />
162
167
  <UInput
163
168
  v-else-if="field.type === 'password'"
169
+ ref="passwordRef"
164
170
  v-model="state[field.name]"
171
+ data-slot="password"
165
172
  :class="ui.password({ class: props.ui?.password })"
166
173
  v-bind="omitFieldProps(field)"
167
174
  :type="passwordVisibility ? 'text' : 'password'"
@@ -174,7 +181,7 @@ function omitFieldProps(field) {
174
181
  :icon="passwordVisibility ? appConfig.ui.icons.eyeOff : appConfig.ui.icons.eye"
175
182
  :aria-label="passwordVisibility ? t('authForm.hidePassword') : t('authForm.showPassword')"
176
183
  :aria-pressed="passwordVisibility"
177
- aria-controls="password"
184
+ :aria-controls="passwordRef?.[0]?.inputRef?.id"
178
185
  @click="passwordVisibility = !passwordVisibility"
179
186
  />
180
187
  </template>
@@ -182,6 +189,7 @@ function omitFieldProps(field) {
182
189
  <UInput
183
190
  v-else
184
191
  v-model="state[field.name]"
192
+ data-slot="input"
185
193
  :class="ui.input({ class: props.ui?.input })"
186
194
  v-bind="omitFieldProps(field)"
187
195
  />
@@ -219,7 +227,7 @@ function omitFieldProps(field) {
219
227
  </UForm>
220
228
  </div>
221
229
 
222
- <div v-if="!!slots.footer" :class="ui.footer({ class: props.ui?.footer })">
230
+ <div v-if="!!slots.footer" data-slot="footer" :class="ui.footer({ class: props.ui?.footer })">
223
231
  <slot name="footer" />
224
232
  </div>
225
233
  </Primitive>
@@ -2,17 +2,19 @@ import type { AppConfig } from '@nuxt/schema';
2
2
  import theme from '#build/ui/auth-form';
3
3
  import type { ButtonProps, FormProps, FormFieldProps, SeparatorProps, InputProps, CheckboxProps, SelectMenuProps, PinInputProps, IconProps } from '../types';
4
4
  import type { FormSchema, FormSubmitEvent, InferInput } from '../types/form';
5
+ import type { FormHTMLAttributes } from '../types/html';
6
+ import type { NonUnion } from '../types/utils';
5
7
  import type { ComponentConfig } from '../types/tv';
6
8
  type AuthForm = ComponentConfig<typeof theme, AppConfig, 'authForm'>;
7
- type AuthFormCheckboxField = Omit<FormFieldProps, 'name'> & CheckboxProps & {
9
+ export type AuthFormCheckboxField = Omit<FormFieldProps, 'name'> & CheckboxProps & {
8
10
  name: string;
9
11
  type: 'checkbox';
10
12
  };
11
- type AuthFormSelectField = Omit<FormFieldProps, 'name'> & SelectMenuProps & {
13
+ export type AuthFormSelectField = Omit<FormFieldProps, 'name'> & SelectMenuProps & {
12
14
  name: string;
13
15
  type: 'select';
14
16
  };
15
- type AuthFormOtpField = Omit<FormFieldProps, 'name'> & Omit<PinInputProps, 'type' | 'otp'> & {
17
+ export type AuthFormOtpField = Omit<FormFieldProps, 'name'> & Omit<PinInputProps, 'type' | 'otp'> & {
16
18
  name: string;
17
19
  type: 'otp';
18
20
  /**
@@ -22,14 +24,13 @@ type AuthFormOtpField = Omit<FormFieldProps, 'name'> & Omit<PinInputProps, 'type
22
24
  */
23
25
  otp?: boolean | PinInputProps;
24
26
  };
25
- type AuthFormInputFieldType = 'password' | 'text' | 'email' | 'number';
26
- type AuthFormInputField<T extends AuthFormInputFieldType = AuthFormInputFieldType> = Omit<FormFieldProps, 'name'> & InputProps & {
27
+ export type AuthFormInputFieldType = 'password' | 'text' | 'email' | 'number';
28
+ export type AuthFormInputField<T extends AuthFormInputFieldType & NonUnion<T> = 'text'> = Omit<FormFieldProps, 'name'> & Omit<InputProps, 'type'> & {
27
29
  name: string;
28
30
  type: T;
29
31
  };
30
- type AuthFormFieldType = 'checkbox' | 'select' | 'otp' | 'password' | 'text' | 'email' | 'number';
31
- export type AuthFormField<T extends AuthFormFieldType = AuthFormFieldType> = T extends 'checkbox' ? AuthFormCheckboxField : T extends 'select' ? AuthFormSelectField : T extends 'otp' ? AuthFormOtpField : T extends AuthFormInputFieldType ? AuthFormInputField<T> : never;
32
- export interface AuthFormProps<T extends FormSchema = FormSchema<object>, F extends AuthFormField = AuthFormField> {
32
+ export type AuthFormField = AuthFormCheckboxField | AuthFormSelectField | AuthFormOtpField | AuthFormInputField<'password'> | AuthFormInputField<'text'> | AuthFormInputField<'email'> | AuthFormInputField<'number'>;
33
+ export interface AuthFormProps<T extends FormSchema = FormSchema<object>, F extends AuthFormField = AuthFormField> extends /** @vue-ignore */ FormHTMLAttributes {
33
34
  /**
34
35
  * The element or component this component should render as.
35
36
  * @defaultValue 'div'
@@ -1,9 +1,10 @@
1
1
  import type { AppConfig } from '@nuxt/schema';
2
2
  import theme from '#build/ui/avatar';
3
3
  import type { ChipProps, IconProps } from '../types';
4
+ import type { ImgHTMLAttributes } from '../types/html';
4
5
  import type { ComponentConfig } from '../types/tv';
5
6
  type Avatar = ComponentConfig<typeof theme, AppConfig, 'avatar'>;
6
- export interface AvatarProps {
7
+ export interface AvatarProps extends /** @vue-ignore */ Omit<ImgHTMLAttributes, 'src' | 'alt'> {
7
8
  /**
8
9
  * The element or component this component should render as.
9
10
  * @defaultValue 'span'
@@ -64,6 +64,7 @@ function onError() {
64
64
  :is="props.chip ? UChip : Primitive"
65
65
  :as="as.root"
66
66
  v-bind="props.chip ? typeof props.chip === 'object' ? { inset: true, ...props.chip } : { inset: true } : {}"
67
+ data-slot="root"
67
68
  :class="ui.root({ class: [props.ui?.root, props.class] })"
68
69
  :style="props.style"
69
70
  >
@@ -75,14 +76,15 @@ function onError() {
75
76
  :width="sizePx"
76
77
  :height="sizePx"
77
78
  v-bind="$attrs"
79
+ data-slot="image"
78
80
  :class="ui.image({ class: props.ui?.image })"
79
81
  @error="onError"
80
82
  />
81
83
 
82
84
  <Slot v-else v-bind="$attrs">
83
85
  <slot>
84
- <UIcon v-if="icon" :name="icon" :class="ui.icon({ class: props.ui?.icon })" />
85
- <span v-else :class="ui.fallback({ class: props.ui?.fallback })">{{ fallback || "\xA0" }}</span>
86
+ <UIcon v-if="icon" :name="icon" data-slot="icon" :class="ui.icon({ class: props.ui?.icon })" />
87
+ <span v-else data-slot="fallback" :class="ui.fallback({ class: props.ui?.fallback })">{{ fallback || "\xA0" }}</span>
86
88
  </slot>
87
89
  </Slot>
88
90
  </component>
@@ -1,9 +1,10 @@
1
1
  import type { AppConfig } from '@nuxt/schema';
2
2
  import theme from '#build/ui/avatar';
3
3
  import type { ChipProps, IconProps } from '../types';
4
+ import type { ImgHTMLAttributes } from '../types/html';
4
5
  import type { ComponentConfig } from '../types/tv';
5
6
  type Avatar = ComponentConfig<typeof theme, AppConfig, 'avatar'>;
6
- export interface AvatarProps {
7
+ export interface AvatarProps extends /** @vue-ignore */ Omit<ImgHTMLAttributes, 'src' | 'alt'> {
7
8
  /**
8
9
  * The element or component this component should render as.
9
10
  * @defaultValue 'span'
@@ -58,8 +58,8 @@ provide(avatarGroupInjectionKey, computed(() => ({
58
58
  </script>
59
59
 
60
60
  <template>
61
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
62
- <UAvatar v-if="hiddenCount > 0" :text="`+${hiddenCount}`" :class="ui.base({ class: props.ui?.base })" />
63
- <component :is="avatar" v-for="(avatar, count) in visibleAvatars" :key="count" :class="ui.base({ class: props.ui?.base })" />
61
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
62
+ <UAvatar v-if="hiddenCount > 0" :text="`+${hiddenCount}`" data-slot="base" :class="ui.base({ class: props.ui?.base })" />
63
+ <component :is="avatar" v-for="(avatar, count) in visibleAvatars" :key="count" data-slot="base" :class="ui.base({ class: props.ui?.base })" />
64
64
  </Primitive>
65
65
  </template>
@@ -41,20 +41,20 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.badge || {} }
41
41
  </script>
42
42
 
43
43
  <template>
44
- <Primitive :as="as" :class="ui.base({ class: [props.ui?.base, props.class] })">
44
+ <Primitive :as="as" data-slot="base" :class="ui.base({ class: [props.ui?.base, props.class] })">
45
45
  <slot name="leading" :ui="ui">
46
- <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
47
- <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
46
+ <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" data-slot="leadingIcon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
47
+ <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" data-slot="leadingAvatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
48
48
  </slot>
49
49
 
50
50
  <slot :ui="ui">
51
- <span v-if="label !== void 0 && label !== null" :class="ui.label({ class: props.ui?.label })">
51
+ <span v-if="label !== void 0 && label !== null" data-slot="label" :class="ui.label({ class: props.ui?.label })">
52
52
  {{ label }}
53
53
  </span>
54
54
  </slot>
55
55
 
56
56
  <slot name="trailing" :ui="ui">
57
- <UIcon v-if="isTrailing && trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
57
+ <UIcon v-if="isTrailing && trailingIconName" :name="trailingIconName" data-slot="trailingIcon" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
58
58
  </slot>
59
59
  </Primitive>
60
60
  </template>
@@ -60,7 +60,7 @@ function onClose() {
60
60
  </script>
61
61
 
62
62
  <template>
63
- <Primitive :as="as" class="banner" :class="ui.root({ class: [props.ui?.root, props.class] })">
63
+ <Primitive :as="as" class="banner" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
64
64
  <ULink
65
65
  v-if="to"
66
66
  :aria-label="title"
@@ -72,28 +72,28 @@ function onClose() {
72
72
  <span class="absolute inset-0 " aria-hidden="true" />
73
73
  </ULink>
74
74
 
75
- <UContainer :class="ui.container({ class: props.ui?.container })">
76
- <div :class="ui.left({ class: props.ui?.left })" />
75
+ <UContainer data-slot="container" :class="ui.container({ class: props.ui?.container })">
76
+ <div data-slot="left" :class="ui.left({ class: props.ui?.left })" />
77
77
 
78
- <div :class="ui.center({ class: props.ui?.center })">
78
+ <div data-slot="center" :class="ui.center({ class: props.ui?.center })">
79
79
  <slot name="leading" :ui="ui">
80
- <UIcon v-if="icon" :name="icon" :class="ui.icon({ class: props.ui?.icon })" />
80
+ <UIcon v-if="icon" :name="icon" data-slot="icon" :class="ui.icon({ class: props.ui?.icon })" />
81
81
  </slot>
82
82
 
83
- <div v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
83
+ <div v-if="title || !!slots.title" data-slot="title" :class="ui.title({ class: props.ui?.title })">
84
84
  <slot name="title">
85
85
  {{ title }}
86
86
  </slot>
87
87
  </div>
88
88
 
89
- <div v-if="actions?.length || !!slots.actions" :class="ui.actions({ class: props.ui?.actions })">
89
+ <div v-if="actions?.length || !!slots.actions" data-slot="actions" :class="ui.actions({ class: props.ui?.actions })">
90
90
  <slot name="actions">
91
91
  <UButton v-for="(action, index) in actions" :key="index" color="neutral" size="xs" v-bind="action" />
92
92
  </slot>
93
93
  </div>
94
94
  </div>
95
95
 
96
- <div :class="ui.right({ class: props.ui?.right })">
96
+ <div data-slot="right" :class="ui.right({ class: props.ui?.right })">
97
97
  <slot name="close" :ui="ui">
98
98
  <UButton
99
99
  v-if="close"
@@ -103,6 +103,7 @@ function onClose() {
103
103
  variant="ghost"
104
104
  :aria-label="t('banner.close')"
105
105
  v-bind="typeof close === 'object' ? close : {}"
106
+ data-slot="close"
106
107
  :class="ui.close({ class: props.ui?.close })"
107
108
  @click="onClose"
108
109
  />