@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
@@ -35,8 +35,8 @@ export interface ErrorSlots {
35
35
  links(props?: {}): any;
36
36
  }
37
37
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ErrorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ErrorProps> & Readonly<{}>, {
38
- clear: boolean | Partial<ButtonProps>;
39
38
  redirect: string;
39
+ clear: boolean | Partial<ButtonProps>;
40
40
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ErrorSlots>;
41
41
  declare const _default: typeof __VLS_export;
42
42
  export default _default;
@@ -2,9 +2,10 @@ import type { AppConfig } from '@nuxt/schema';
2
2
  import type { UseFileDialogReturn } from '@vueuse/core';
3
3
  import theme from '#build/ui/file-upload';
4
4
  import type { ButtonProps, IconProps } from '../types';
5
+ import type { InputHTMLAttributes } from '../types/html';
5
6
  import type { ComponentConfig } from '../types/tv';
6
7
  type FileUpload = ComponentConfig<typeof theme, AppConfig, 'fileUpload'>;
7
- export interface FileUploadProps<M extends boolean = false> {
8
+ export interface FileUploadProps<M extends boolean = false> extends /** @vue-ignore */ Pick<InputHTMLAttributes, 'form' | 'formaction' | 'formenctype' | 'formmethod' | 'formnovalidate' | 'formtarget'> {
8
9
  /**
9
10
  * The element or component this component should render as.
10
11
  * @defaultValue 'div'
@@ -89,6 +90,11 @@ export interface FileUploadProps<M extends boolean = false> {
89
90
  * @IconifyIcon
90
91
  */
91
92
  fileDeleteIcon?: IconProps['name'];
93
+ /**
94
+ * Show the file preview/list after upload.
95
+ * @defaultValue true
96
+ */
97
+ preview?: boolean;
92
98
  class?: any;
93
99
  ui?: FileUpload['slots'];
94
100
  }
@@ -156,7 +162,7 @@ declare const __VLS_export: <M extends boolean = false>(__VLS_props: NonNullable
156
162
  "onUpdate:modelValue"?: ((value: (M extends true ? File[] : File) | null | undefined) => any) | undefined;
157
163
  }> & import("vue").PublicProps;
158
164
  expose: (exposed: import("vue").ShallowUnwrapRef<{
159
- inputRef: import("vue").Ref<HTMLInputElement | undefined, HTMLInputElement | undefined>;
165
+ inputRef: Readonly<import("vue").Ref<HTMLInputElement, HTMLInputElement>>;
160
166
  dropzoneRef: import("vue").Ref<HTMLDivElement | undefined, HTMLDivElement | undefined>;
161
167
  }>) => void;
162
168
  attrs: any;
@@ -3,8 +3,8 @@ import theme from "#build/ui/file-upload";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { computed, watch } from "vue";
7
- import { Primitive } from "reka-ui";
6
+ import { computed, toRef, watch } from "vue";
7
+ import { Primitive, VisuallyHidden } from "reka-ui";
8
8
  import { createReusableTemplate } from "@vueuse/core";
9
9
  import { useAppConfig, useLocale } from "#imports";
10
10
  import { useFormField } from "../composables/useFormField";
@@ -37,6 +37,7 @@ const props = defineProps({
37
37
  fileIcon: { type: [String, Object], required: false },
38
38
  fileDelete: { type: [Boolean, Object], required: false, default: true },
39
39
  fileDeleteIcon: { type: [String, Object], required: false },
40
+ preview: { type: Boolean, required: false, default: true },
40
41
  class: { type: null, required: false },
41
42
  ui: { type: null, required: false }
42
43
  });
@@ -122,38 +123,45 @@ function removeFile(index) {
122
123
  dropzoneRef.value?.focus();
123
124
  }
124
125
  watch(modelValue, (newValue) => {
125
- const hasModelReset = !Array.isArray(newValue) || !newValue.length;
126
- if (hasModelReset && inputRef.value) {
127
- inputRef.value.value = "";
126
+ const hasModelReset = props.multiple ? !newValue?.length : !newValue;
127
+ if (hasModelReset && inputRef.value?.$el) {
128
+ inputRef.value.$el.value = "";
128
129
  }
129
130
  });
130
131
  defineExpose({
131
- inputRef,
132
+ inputRef: toRef(() => inputRef.value?.$el),
132
133
  dropzoneRef
133
134
  });
134
135
  </script>
135
136
 
136
137
  <template>
137
138
  <DefineFilesTemplate>
138
- <template v-if="modelValue && (Array.isArray(modelValue) ? modelValue.length : true)">
139
+ <template v-if="props.preview && modelValue && (Array.isArray(modelValue) ? modelValue.length : true)">
139
140
  <slot name="files-top" :files="modelValue" :open="open" :remove-file="removeFile" />
140
141
 
141
- <div :class="ui.files({ class: props.ui?.files })">
142
+ <div data-slot="files" :class="ui.files({ class: props.ui?.files })">
142
143
  <slot name="files" :files="modelValue">
143
- <div v-for="(file, index) in Array.isArray(modelValue) ? modelValue : [modelValue]" :key="file.name" :class="ui.file({ class: props.ui?.file })">
144
+ <div v-for="(file, index) in Array.isArray(modelValue) ? modelValue : [modelValue]" :key="file.name" data-slot="file" :class="ui.file({ class: props.ui?.file })">
144
145
  <slot name="file" :file="file" :index="index">
145
146
  <slot name="file-leading" :file="file" :index="index" :ui="ui">
146
- <UAvatar :as="{ img: 'img' }" :src="createObjectUrl(file)" :icon="fileIcon || appConfig.ui.icons.file" :size="props.size" :class="ui.fileLeadingAvatar({ class: props.ui?.fileLeadingAvatar })" />
147
+ <UAvatar
148
+ :as="{ img: 'img' }"
149
+ :src="createObjectUrl(file)"
150
+ :icon="fileIcon || appConfig.ui.icons.file"
151
+ :size="props.size"
152
+ data-slot="fileLeadingAvatar"
153
+ :class="ui.fileLeadingAvatar({ class: props.ui?.fileLeadingAvatar })"
154
+ />
147
155
  </slot>
148
156
 
149
- <div :class="ui.fileWrapper({ class: props.ui?.fileWrapper })">
150
- <span :class="ui.fileName({ class: props.ui?.fileName })">
157
+ <div data-slot="fileWrapper" :class="ui.fileWrapper({ class: props.ui?.fileWrapper })">
158
+ <span data-slot="fileName" :class="ui.fileName({ class: props.ui?.fileName })">
151
159
  <slot name="file-name" :file="file" :index="index">
152
160
  {{ file.name }}
153
161
  </slot>
154
162
  </span>
155
163
 
156
- <span :class="ui.fileSize({ class: props.ui?.fileSize })">
164
+ <span data-slot="fileSize" :class="ui.fileSize({ class: props.ui?.fileSize })">
157
165
  <slot name="file-size" :file="file" :index="index">
158
166
  {{ formatFileSize(file.size) }}
159
167
  </slot>
@@ -176,6 +184,7 @@ defineExpose({
176
184
  }"
177
185
  :aria-label="t('fileUpload.removeFile', { filename: file.name })"
178
186
  :trailing-icon="fileDeleteIcon || appConfig.ui.icons.close"
187
+ data-slot="fileTrailingButton"
179
188
  :class="ui.fileTrailingButton({ class: props.ui?.fileTrailingButton })"
180
189
  @click.stop.prevent="removeFile(index)"
181
190
  />
@@ -189,7 +198,7 @@ defineExpose({
189
198
  </template>
190
199
  </DefineFilesTemplate>
191
200
 
192
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
201
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
193
202
  <slot :open="open" :remove-file="removeFile" :ui="ui">
194
203
  <component
195
204
  :is="variant === 'button' ? 'button' : 'div'"
@@ -197,6 +206,7 @@ defineExpose({
197
206
  :type="variant === 'button' ? 'button' : void 0"
198
207
  :role="variant === 'button' ? void 0 : 'button'"
199
208
  :data-dragging="isDragging"
209
+ data-slot="base"
200
210
  :class="ui.base({ class: props.ui?.base })"
201
211
  :tabindex="interactive && !disabled ? 0 : -1"
202
212
  @click="interactive && !disabled && open()"
@@ -205,25 +215,25 @@ defineExpose({
205
215
  >
206
216
  <ReuseFilesTemplate v-if="position === 'inside'" />
207
217
 
208
- <div v-if="position === 'inside' ? multiple ? !modelValue?.length : !modelValue : true" :class="ui.wrapper({ class: props.ui?.wrapper })">
218
+ <div v-if="position === 'inside' ? multiple ? !modelValue?.length : !modelValue : true" data-slot="wrapper" :class="ui.wrapper({ class: props.ui?.wrapper })">
209
219
  <slot name="leading" :ui="ui">
210
- <UIcon v-if="variant === 'button'" :name="icon || appConfig.ui.icons.upload" :class="ui.icon({ class: props.ui?.icon })" />
211
- <UAvatar v-else :icon="icon || appConfig.ui.icons.upload" :size="props.size" :class="ui.avatar({ class: props.ui?.avatar })" />
220
+ <UIcon v-if="variant === 'button'" :name="icon || appConfig.ui.icons.upload" data-slot="icon" :class="ui.icon({ class: props.ui?.icon })" />
221
+ <UAvatar v-else :icon="icon || appConfig.ui.icons.upload" :size="props.size" data-slot="avatar" :class="ui.avatar({ class: props.ui?.avatar })" />
212
222
  </slot>
213
223
 
214
224
  <template v-if="variant !== 'button'">
215
- <div v-if="label || !!slots.label" :class="ui.label({ class: props.ui?.label })">
225
+ <div v-if="label || !!slots.label" data-slot="label" :class="ui.label({ class: props.ui?.label })">
216
226
  <slot name="label">
217
227
  {{ label }}
218
228
  </slot>
219
229
  </div>
220
- <div v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
230
+ <div v-if="description || !!slots.description" data-slot="description" :class="ui.description({ class: props.ui?.description })">
221
231
  <slot name="description">
222
232
  {{ description }}
223
233
  </slot>
224
234
  </div>
225
235
 
226
- <div v-if="!!slots.actions" :class="ui.actions({ class: props.ui?.actions })">
236
+ <div v-if="!!slots.actions" data-slot="actions" :class="ui.actions({ class: props.ui?.actions })">
227
237
  <slot name="actions" :files="modelValue" :open="open" :remove-file="removeFile" />
228
238
  </div>
229
239
  </template>
@@ -233,18 +243,18 @@ defineExpose({
233
243
  <ReuseFilesTemplate v-if="position === 'outside'" />
234
244
  </slot>
235
245
 
236
- <input
246
+ <VisuallyHidden
237
247
  :id="id"
238
248
  ref="inputRef"
249
+ as="input"
239
250
  type="file"
251
+ feature="fully-hidden"
240
252
  :name="name"
241
253
  :accept="accept"
242
254
  :multiple="multiple"
243
255
  :required="required"
244
256
  :disabled="disabled"
245
257
  v-bind="{ ...$attrs, ...ariaAttrs }"
246
- class="sr-only"
247
- tabindex="-1"
248
- >
258
+ />
249
259
  </Primitive>
250
260
  </template>
@@ -2,9 +2,10 @@ import type { AppConfig } from '@nuxt/schema';
2
2
  import type { UseFileDialogReturn } from '@vueuse/core';
3
3
  import theme from '#build/ui/file-upload';
4
4
  import type { ButtonProps, IconProps } from '../types';
5
+ import type { InputHTMLAttributes } from '../types/html';
5
6
  import type { ComponentConfig } from '../types/tv';
6
7
  type FileUpload = ComponentConfig<typeof theme, AppConfig, 'fileUpload'>;
7
- export interface FileUploadProps<M extends boolean = false> {
8
+ export interface FileUploadProps<M extends boolean = false> extends /** @vue-ignore */ Pick<InputHTMLAttributes, 'form' | 'formaction' | 'formenctype' | 'formmethod' | 'formnovalidate' | 'formtarget'> {
8
9
  /**
9
10
  * The element or component this component should render as.
10
11
  * @defaultValue 'div'
@@ -89,6 +90,11 @@ export interface FileUploadProps<M extends boolean = false> {
89
90
  * @IconifyIcon
90
91
  */
91
92
  fileDeleteIcon?: IconProps['name'];
93
+ /**
94
+ * Show the file preview/list after upload.
95
+ * @defaultValue true
96
+ */
97
+ preview?: boolean;
92
98
  class?: any;
93
99
  ui?: FileUpload['slots'];
94
100
  }
@@ -156,7 +162,7 @@ declare const __VLS_export: <M extends boolean = false>(__VLS_props: NonNullable
156
162
  "onUpdate:modelValue"?: ((value: (M extends true ? File[] : File) | null | undefined) => any) | undefined;
157
163
  }> & import("vue").PublicProps;
158
164
  expose: (exposed: import("vue").ShallowUnwrapRef<{
159
- inputRef: import("vue").Ref<HTMLInputElement | undefined, HTMLInputElement | undefined>;
165
+ inputRef: Readonly<import("vue").Ref<HTMLInputElement, HTMLInputElement>>;
160
166
  dropzoneRef: import("vue").Ref<HTMLDivElement | undefined, HTMLDivElement | undefined>;
161
167
  }>) => void;
162
168
  attrs: any;
@@ -19,26 +19,26 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.footer || {}
19
19
  </script>
20
20
 
21
21
  <template>
22
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
23
- <div v-if="!!slots.top" :class="ui.top({ class: props.ui?.top })">
22
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
23
+ <div v-if="!!slots.top" data-slot="top" :class="ui.top({ class: props.ui?.top })">
24
24
  <slot name="top" />
25
25
  </div>
26
26
 
27
- <UContainer :class="ui.container({ class: props.ui?.container })">
28
- <div :class="ui.right({ class: props.ui?.right })">
27
+ <UContainer data-slot="container" :class="ui.container({ class: props.ui?.container })">
28
+ <div data-slot="right" :class="ui.right({ class: props.ui?.right })">
29
29
  <slot name="right" />
30
30
  </div>
31
31
 
32
- <div :class="ui.center({ class: props.ui?.center })">
32
+ <div data-slot="center" :class="ui.center({ class: props.ui?.center })">
33
33
  <slot />
34
34
  </div>
35
35
 
36
- <div :class="ui.left({ class: props.ui?.left })">
36
+ <div data-slot="left" :class="ui.left({ class: props.ui?.left })">
37
37
  <slot name="left" />
38
38
  </div>
39
39
  </UContainer>
40
40
 
41
- <div v-if="!!slots.bottom" :class="ui.bottom({ class: props.ui?.bottom })">
41
+ <div v-if="!!slots.bottom" data-slot="bottom" :class="ui.bottom({ class: props.ui?.bottom })">
42
42
  <slot name="bottom" />
43
43
  </div>
44
44
  </Primitive>
@@ -23,35 +23,35 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.footerColumns
23
23
  </script>
24
24
 
25
25
  <template>
26
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
27
- <div v-if="!!slots.left" :class="ui.left({ class: props.ui?.left })">
26
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
27
+ <div v-if="!!slots.left" data-slot="left" :class="ui.left({ class: props.ui?.left })">
28
28
  <slot name="left" />
29
29
  </div>
30
30
 
31
- <div v-if="!!slots.default || columns?.length" :class="ui.center({ class: props.ui?.center })">
31
+ <div v-if="!!slots.default || columns?.length" data-slot="center" :class="ui.center({ class: props.ui?.center })">
32
32
  <slot>
33
33
  <div v-for="(column, index) in columns" :key="index">
34
- <h3 :class="ui.label({ class: props.ui?.label })">
34
+ <h3 data-slot="label" :class="ui.label({ class: props.ui?.label })">
35
35
  <slot name="column-label" :column="column">
36
36
  {{ column.label }}
37
37
  </slot>
38
38
  </h3>
39
39
 
40
- <ul :class="ui.list({ class: props.ui?.list })">
41
- <li v-for="(link, linkIndex) in column.children" :key="linkIndex" :class="ui.item({ class: [props.ui?.item, link.ui?.item] })">
40
+ <ul data-slot="list" :class="ui.list({ class: props.ui?.list })">
41
+ <li v-for="(link, linkIndex) in column.children" :key="linkIndex" data-slot="item" :class="ui.item({ class: [props.ui?.item, link.ui?.item] })">
42
42
  <ULink v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(link)" custom>
43
- <ULinkBase v-bind="slotProps" :class="ui.link({ class: [props.ui?.link, link.ui?.link, link.class], active })">
43
+ <ULinkBase v-bind="slotProps" data-slot="link" :class="ui.link({ class: [props.ui?.link, link.ui?.link, link.class], active })">
44
44
  <slot name="link" :link="link" :active="active" :ui="ui">
45
45
  <slot name="link-leading" :link="link" :active="active" :ui="ui">
46
- <UIcon v-if="link.icon" :name="link.icon" :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, link.ui?.linkLeadingIcon], active })" />
46
+ <UIcon v-if="link.icon" :name="link.icon" data-slot="linkLeadingIcon" :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, link.ui?.linkLeadingIcon], active })" />
47
47
  </slot>
48
48
 
49
- <span v-if="link.label || !!slots['link-label']" :class="ui.linkLabel({ class: [props.ui?.linkLabel, link.ui?.linkLabel], active })">
49
+ <span v-if="link.label || !!slots['link-label']" data-slot="linkLabel" :class="ui.linkLabel({ class: [props.ui?.linkLabel, link.ui?.linkLabel], active })">
50
50
  <slot name="link-label" :link="link" :active="active">
51
51
  {{ link.label }}
52
52
  </slot>
53
53
 
54
- <UIcon v-if="link.target === '_blank'" :name="appConfig.ui.icons.external" :class="ui.linkLabelExternalIcon({ class: [props.ui?.linkLabelExternalIcon, link.ui?.linkLabelExternalIcon], active })" />
54
+ <UIcon v-if="link.target === '_blank'" :name="appConfig.ui.icons.external" data-slot="linkLabelExternalIcon" :class="ui.linkLabelExternalIcon({ class: [props.ui?.linkLabelExternalIcon, link.ui?.linkLabelExternalIcon], active })" />
55
55
  </span>
56
56
 
57
57
  <slot name="link-trailing" :link="link" :active="active" />
@@ -64,7 +64,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.footerColumns
64
64
  </slot>
65
65
  </div>
66
66
 
67
- <div v-if="!!slots.right" :class="ui.right({ class: props.ui?.right })">
67
+ <div v-if="!!slots.right" data-slot="right" :class="ui.right({ class: props.ui?.right })">
68
68
  <slot name="right" />
69
69
  </div>
70
70
  </Primitive>
@@ -1,4 +1,5 @@
1
1
  import type { FormSchema, FormError, FormInputEvents, FormErrorEvent, FormSubmitEvent, FormErrorWithId, InferInput, FormData } from '../types/form';
2
+ import type { FormHTMLAttributes } from '../types/html';
2
3
  export type FormProps<S extends FormSchema, T extends boolean = true, N extends boolean = false> = {
3
4
  id?: string | number;
4
5
  /** Schema to validate the form state. Supports Standard Schema objects, Yup, Joi, and Superstructs. */
@@ -38,7 +39,7 @@ export type FormProps<S extends FormSchema, T extends boolean = true, N extends
38
39
  * If true, this form will attach to its parent Form and validate at the same time.
39
40
  * @defaultValue `false`
40
41
  */
41
- nested?: N;
42
+ nested?: N & boolean;
42
43
  /**
43
44
  * When `true`, all form elements will be disabled on `@submit` event.
44
45
  * This will cause any focused input elements to lose their focus state.
@@ -47,7 +48,7 @@ export type FormProps<S extends FormSchema, T extends boolean = true, N extends
47
48
  loadingAuto?: boolean;
48
49
  class?: any;
49
50
  onSubmit?: ((event: FormSubmitEvent<FormData<S, T>>) => void | Promise<void>) | (() => void | Promise<void>);
50
- };
51
+ } & /** @vue-ignore */ Omit<FormHTMLAttributes, 'name'>;
51
52
  export interface FormEmits<S extends FormSchema, T extends boolean = true> {
52
53
  submit: [event: FormSubmitEvent<FormData<S, T>>];
53
54
  error: [event: FormErrorEvent];
@@ -22,7 +22,7 @@ const props = defineProps({
22
22
  name: { type: null, required: false },
23
23
  validateOnInputDelay: { type: Number, required: false, default: 300 },
24
24
  transform: { type: null, required: false, default: () => true },
25
- nested: { type: null, required: false },
25
+ nested: { type: Boolean, required: false },
26
26
  loadingAuto: { type: Boolean, required: false, default: true },
27
27
  class: { type: null, required: false },
28
28
  onSubmit: { type: Function, required: false }
@@ -33,12 +33,11 @@ const appConfig = useAppConfig();
33
33
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.form || {} }));
34
34
  const formId = props.id ?? useId();
35
35
  const bus = useEventBus(`form-${formId}`);
36
- const isNested = props.nested?.toString() === "" || props.nested === true;
37
- const parentBus = isNested && inject(
36
+ const parentBus = props.nested === true && inject(
38
37
  formBusInjectionKey,
39
38
  void 0
40
39
  );
41
- const parentState = isNested ? inject(formStateInjectionKey, void 0) : void 0;
40
+ const parentState = props.nested === true ? inject(formStateInjectionKey, void 0) : void 0;
42
41
  const state = computed(() => {
43
42
  if (parentState?.value) {
44
43
  return props.name ? getAtPath(parentState.value, props.name) : parentState.value;
@@ -1,4 +1,5 @@
1
1
  import type { FormSchema, FormError, FormInputEvents, FormErrorEvent, FormSubmitEvent, FormErrorWithId, InferInput, FormData } from '../types/form';
2
+ import type { FormHTMLAttributes } from '../types/html';
2
3
  export type FormProps<S extends FormSchema, T extends boolean = true, N extends boolean = false> = {
3
4
  id?: string | number;
4
5
  /** Schema to validate the form state. Supports Standard Schema objects, Yup, Joi, and Superstructs. */
@@ -38,7 +39,7 @@ export type FormProps<S extends FormSchema, T extends boolean = true, N extends
38
39
  * If true, this form will attach to its parent Form and validate at the same time.
39
40
  * @defaultValue `false`
40
41
  */
41
- nested?: N;
42
+ nested?: N & boolean;
42
43
  /**
43
44
  * When `true`, all form elements will be disabled on `@submit` event.
44
45
  * This will cause any focused input elements to lose their focus state.
@@ -47,7 +48,7 @@ export type FormProps<S extends FormSchema, T extends boolean = true, N extends
47
48
  loadingAuto?: boolean;
48
49
  class?: any;
49
50
  onSubmit?: ((event: FormSubmitEvent<FormData<S, T>>) => void | Promise<void>) | (() => void | Promise<void>);
50
- };
51
+ } & /** @vue-ignore */ Omit<FormHTMLAttributes, 'name'>;
51
52
  export interface FormEmits<S extends FormSchema, T extends boolean = true> {
52
53
  submit: [event: FormSubmitEvent<FormData<S, T>>];
53
54
  error: [event: FormErrorEvent];
@@ -56,22 +56,22 @@ provide(formFieldInjectionKey, computed(() => ({
56
56
  </script>
57
57
 
58
58
  <template>
59
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
60
- <div :class="ui.wrapper({ class: props.ui?.wrapper })">
61
- <div v-if="label || !!slots.label" :class="ui.labelWrapper({ class: props.ui?.labelWrapper })">
62
- <Label :for="id" :class="ui.label({ class: props.ui?.label })">
59
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
60
+ <div data-slot="wrapper" :class="ui.wrapper({ class: props.ui?.wrapper })">
61
+ <div v-if="label || !!slots.label" data-slot="labelWrapper" :class="ui.labelWrapper({ class: props.ui?.labelWrapper })">
62
+ <Label :for="id" data-slot="label" :class="ui.label({ class: props.ui?.label })">
63
63
  <slot name="label" :label="label">
64
64
  {{ label }}
65
65
  </slot>
66
66
  </Label>
67
- <span v-if="hint || !!slots.hint" :id="`${ariaId}-hint`" :class="ui.hint({ class: props.ui?.hint })">
67
+ <span v-if="hint || !!slots.hint" :id="`${ariaId}-hint`" data-slot="hint" :class="ui.hint({ class: props.ui?.hint })">
68
68
  <slot name="hint" :hint="hint">
69
69
  {{ hint }}
70
70
  </slot>
71
71
  </span>
72
72
  </div>
73
73
 
74
- <p v-if="description || !!slots.description" :id="`${ariaId}-description`" :class="ui.description({ class: props.ui?.description })">
74
+ <p v-if="description || !!slots.description" :id="`${ariaId}-description`" data-slot="description" :class="ui.description({ class: props.ui?.description })">
75
75
  <slot name="description" :description="description">
76
76
  {{ description }}
77
77
  </slot>
@@ -81,12 +81,12 @@ provide(formFieldInjectionKey, computed(() => ({
81
81
  <div :class="[(label || !!slots.label || description || !!slots.description) && ui.container({ class: props.ui?.container })]">
82
82
  <slot :error="error" />
83
83
 
84
- <div v-if="typeof error === 'string' && error || !!slots.error" :id="`${ariaId}-error`" :class="ui.error({ class: props.ui?.error })">
84
+ <div v-if="typeof error === 'string' && error || !!slots.error" :id="`${ariaId}-error`" data-slot="error" :class="ui.error({ class: props.ui?.error })">
85
85
  <slot name="error" :error="error">
86
86
  {{ error }}
87
87
  </slot>
88
88
  </div>
89
- <div v-else-if="help || !!slots.help" :id="`${ariaId}-help`" :class="ui.help({ class: props.ui?.help })">
89
+ <div v-else-if="help || !!slots.help" :id="`${ariaId}-help`" data-slot="help" :class="ui.help({ class: props.ui?.help })">
90
90
  <slot name="help" :help="help">
91
91
  {{ help }}
92
92
  </slot>
@@ -70,6 +70,7 @@ function toggleOpen() {
70
70
  :aria-label="open ? t('header.close') : t('header.open')"
71
71
  :icon="open ? appConfig.ui.icons.close : appConfig.ui.icons.menu"
72
72
  v-bind="typeof toggle === 'object' ? toggle : {}"
73
+ data-slot="toggle"
73
74
  :class="ui.toggle({ class: props.ui?.toggle, toggleSide })"
74
75
  @click="toggleOpen"
75
76
  />
@@ -77,11 +78,11 @@ function toggleOpen() {
77
78
  </DefineToggleTemplate>
78
79
 
79
80
  <DefineLeftTemplate>
80
- <div :class="ui.left({ class: props.ui?.left })">
81
+ <div data-slot="left" :class="ui.left({ class: props.ui?.left })">
81
82
  <ReuseToggleTemplate v-if="toggleSide === 'left'" />
82
83
 
83
84
  <slot name="left">
84
- <ULink :to="to" :aria-label="ariaLabel" :class="ui.title({ class: props.ui?.title })">
85
+ <ULink :to="to" :aria-label="ariaLabel" data-slot="title" :class="ui.title({ class: props.ui?.title })">
85
86
  <slot name="title">
86
87
  {{ title }}
87
88
  </slot>
@@ -91,20 +92,20 @@ function toggleOpen() {
91
92
  </DefineLeftTemplate>
92
93
 
93
94
  <DefineRightTemplate>
94
- <div :class="ui.right({ class: props.ui?.right })">
95
+ <div data-slot="right" :class="ui.right({ class: props.ui?.right })">
95
96
  <slot name="right" />
96
97
 
97
98
  <ReuseToggleTemplate v-if="toggleSide === 'right'" />
98
99
  </div>
99
100
  </DefineRightTemplate>
100
101
 
101
- <Primitive :as="as" v-bind="$attrs" :class="ui.root({ class: [props.ui?.root, props.class] })">
102
+ <Primitive :as="as" v-bind="$attrs" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
102
103
  <slot name="top" />
103
104
 
104
- <UContainer :class="ui.container({ class: props.ui?.container })">
105
+ <UContainer data-slot="container" :class="ui.container({ class: props.ui?.container })">
105
106
  <ReuseLeftTemplate />
106
107
 
107
- <div :class="ui.center({ class: props.ui?.center })">
108
+ <div data-slot="center" :class="ui.center({ class: props.ui?.center })">
108
109
  <slot />
109
110
  </div>
110
111
 
@@ -126,13 +127,13 @@ function toggleOpen() {
126
127
  >
127
128
  <template #content="contentData">
128
129
  <slot name="content" v-bind="contentData">
129
- <div v-if="mode !== 'drawer'" :class="ui.header({ class: props.ui?.header })">
130
+ <div v-if="mode !== 'drawer'" data-slot="header" :class="ui.header({ class: props.ui?.header })">
130
131
  <ReuseLeftTemplate />
131
132
 
132
133
  <ReuseRightTemplate />
133
134
  </div>
134
135
 
135
- <div :class="ui.body({ class: props.ui?.body })">
136
+ <div data-slot="body" :class="ui.body({ class: props.ui?.body })">
136
137
  <slot name="body" />
137
138
  </div>
138
139
  </slot>
@@ -1,13 +1,13 @@
1
- import type { InputHTMLAttributes } from 'vue';
2
1
  import type { AppConfig } from '@nuxt/schema';
3
2
  import theme from '#build/ui/input';
4
3
  import type { UseComponentIconsProps } from '../composables/useComponentIcons';
4
+ import type { InputHTMLAttributes } from '../types/html';
5
5
  import type { ModelModifiers } from '../types/input';
6
6
  import type { AcceptableValue } from '../types/utils';
7
7
  import type { ComponentConfig } from '../types/tv';
8
8
  type Input = ComponentConfig<typeof theme, AppConfig, 'input'>;
9
9
  export type InputValue = AcceptableValue;
10
- export interface InputProps<T extends InputValue = InputValue> extends UseComponentIconsProps {
10
+ export interface InputProps<T extends InputValue = InputValue> extends UseComponentIconsProps, /** @vue-ignore */ Omit<InputHTMLAttributes, 'name' | 'type' | 'placeholder' | 'required' | 'autocomplete' | 'autofocus' | 'disabled'> {
11
11
  /**
12
12
  * The element or component this component should render as.
13
13
  * @defaultValue 'div'
@@ -39,7 +39,7 @@ export interface InputProps<T extends InputValue = InputValue> extends UseCompon
39
39
  highlight?: boolean;
40
40
  modelValue?: T;
41
41
  defaultValue?: T;
42
- modelModifiers?: ModelModifiers;
42
+ modelModifiers?: ModelModifiers<T>;
43
43
  class?: any;
44
44
  ui?: Input['slots'];
45
45
  }
@@ -61,16 +61,16 @@ export interface InputSlots {
61
61
  }
62
62
  declare const __VLS_export: <T extends InputValue>(__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<{
63
63
  props: __VLS_PrettifyLocal<InputProps<T> & {
64
- onBlur?: ((event: FocusEvent) => any) | undefined;
65
64
  onChange?: ((event: Event) => any) | undefined;
65
+ onBlur?: ((event: FocusEvent) => any) | undefined;
66
66
  "onUpdate:modelValue"?: ((value: T) => any) | undefined;
67
67
  }> & import("vue").PublicProps;
68
68
  expose: (exposed: import("vue").ShallowUnwrapRef<{
69
- inputRef: import("vue").Ref<HTMLInputElement | null, HTMLInputElement | null>;
69
+ inputRef: Readonly<import("vue").ShallowRef<HTMLInputElement | null>>;
70
70
  }>) => void;
71
71
  attrs: any;
72
72
  slots: InputSlots;
73
- emit: ((evt: "blur", event: FocusEvent) => void) & ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: T) => void);
73
+ emit: ((evt: "change", event: Event) => void) & ((evt: "blur", event: FocusEvent) => void) & ((evt: "update:modelValue", value: T) => void);
74
74
  }>) => import("vue").VNode & {
75
75
  __ctx?: Awaited<typeof __VLS_setup>;
76
76
  };
@@ -3,7 +3,7 @@ import theme from "#build/ui/input";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { ref, computed, onMounted } from "vue";
6
+ import { useTemplateRef, computed, onMounted } from "vue";
7
7
  import { Primitive } from "reka-ui";
8
8
  import { useVModel } from "@vueuse/core";
9
9
  import { useAppConfig } from "#imports";
@@ -63,7 +63,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.input || {} }
63
63
  trailing: isTrailing.value || !!slots.trailing,
64
64
  fieldGroup: orientation.value
65
65
  }));
66
- const inputRef = ref(null);
66
+ const inputRef = useTemplateRef("inputRef");
67
67
  function updateInput(value) {
68
68
  if (props.modelModifiers?.trim) {
69
69
  value = value?.trim() ?? null;
@@ -116,7 +116,7 @@ defineExpose({
116
116
  </script>
117
117
 
118
118
  <template>
119
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
119
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
120
120
  <input
121
121
  :id="id"
122
122
  ref="inputRef"
@@ -124,6 +124,7 @@ defineExpose({
124
124
  :value="modelValue"
125
125
  :name="name"
126
126
  :placeholder="placeholder"
127
+ data-slot="base"
127
128
  :class="ui.base({ class: props.ui?.base })"
128
129
  :disabled="disabled"
129
130
  :required="required"
@@ -137,16 +138,16 @@ defineExpose({
137
138
 
138
139
  <slot :ui="ui" />
139
140
 
140
- <span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
141
+ <span v-if="isLeading || !!avatar || !!slots.leading" data-slot="leading" :class="ui.leading({ class: props.ui?.leading })">
141
142
  <slot name="leading" :ui="ui">
142
- <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
143
- <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
143
+ <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" data-slot="leadingIcon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
144
+ <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" data-slot="leadingAvatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
144
145
  </slot>
145
146
  </span>
146
147
 
147
- <span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })">
148
+ <span v-if="isTrailing || !!slots.trailing" data-slot="trailing" :class="ui.trailing({ class: props.ui?.trailing })">
148
149
  <slot name="trailing" :ui="ui">
149
- <UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
150
+ <UIcon v-if="trailingIconName" :name="trailingIconName" data-slot="trailingIcon" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
150
151
  </slot>
151
152
  </span>
152
153
  </Primitive>