@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
@@ -53,33 +53,34 @@ function onUpdate(value) {
53
53
  </script>
54
54
 
55
55
  <template>
56
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
57
- <div :class="ui.container({ class: props.ui?.container })">
56
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
57
+ <div data-slot="container" :class="ui.container({ class: props.ui?.container })">
58
58
  <SwitchRoot
59
59
  :id="id"
60
60
  v-bind="{ ...rootProps, ...$attrs, ...ariaAttrs }"
61
61
  v-model="modelValue"
62
62
  :name="name"
63
63
  :disabled="disabled || loading"
64
+ data-slot="base"
64
65
  :class="ui.base({ class: props.ui?.base })"
65
66
  @update:model-value="onUpdate"
66
67
  >
67
- <SwitchThumb :class="ui.thumb({ class: props.ui?.thumb })">
68
- <UIcon v-if="loading" :name="loadingIcon || appConfig.ui.icons.loading" :class="ui.icon({ class: props.ui?.icon, checked: true, unchecked: true })" />
68
+ <SwitchThumb data-slot="thumb" :class="ui.thumb({ class: props.ui?.thumb })">
69
+ <UIcon v-if="loading" :name="loadingIcon || appConfig.ui.icons.loading" data-slot="icon" :class="ui.icon({ class: props.ui?.icon, checked: true, unchecked: true })" />
69
70
  <template v-else>
70
- <UIcon v-if="checkedIcon" :name="checkedIcon" :class="ui.icon({ class: props.ui?.icon, checked: true })" />
71
- <UIcon v-if="uncheckedIcon" :name="uncheckedIcon" :class="ui.icon({ class: props.ui?.icon, unchecked: true })" />
71
+ <UIcon v-if="checkedIcon" :name="checkedIcon" data-slot="icon" :class="ui.icon({ class: props.ui?.icon, checked: true })" />
72
+ <UIcon v-if="uncheckedIcon" :name="uncheckedIcon" data-slot="icon" :class="ui.icon({ class: props.ui?.icon, unchecked: true })" />
72
73
  </template>
73
74
  </SwitchThumb>
74
75
  </SwitchRoot>
75
76
  </div>
76
- <div v-if="label || !!slots.label || (description || !!slots.description)" :class="ui.wrapper({ class: props.ui?.wrapper })">
77
- <Label v-if="label || !!slots.label" :for="id" :class="ui.label({ class: props.ui?.label })">
77
+ <div v-if="label || !!slots.label || (description || !!slots.description)" data-slot="wrapper" :class="ui.wrapper({ class: props.ui?.wrapper })">
78
+ <Label v-if="label || !!slots.label" :for="id" data-slot="label" :class="ui.label({ class: props.ui?.label })">
78
79
  <slot name="label" :label="label">
79
80
  {{ label }}
80
81
  </slot>
81
82
  </Label>
82
- <p v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
83
+ <p v-if="description || !!slots.description" data-slot="description" :class="ui.description({ class: props.ui?.description })">
83
84
  <slot name="description" :description="description">
84
85
  {{ description }}
85
86
  </slot>
@@ -2,9 +2,10 @@ import type { SwitchRootProps } from 'reka-ui';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
3
  import theme from '#build/ui/switch';
4
4
  import type { IconProps } from '../types';
5
+ import type { ButtonHTMLAttributes } from '../types/html';
5
6
  import type { ComponentConfig } from '../types/tv';
6
7
  type Switch = ComponentConfig<typeof theme, AppConfig, 'switch'>;
7
- export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue'> {
8
+ export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue'>, /** @vue-ignore */ Omit<ButtonHTMLAttributes, 'type' | 'disabled' | 'name'> {
8
9
  /**
9
10
  * The element or component this component should render as.
10
11
  * @defaultValue 'div'
@@ -1,9 +1,10 @@
1
- import type { Ref, WatchOptions } from 'vue';
1
+ import type { WatchOptions } from 'vue';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
3
  import type { Cell, Header, RowData, TableMeta } from '@tanstack/table-core';
4
4
  import type { CellContext, ColumnDef, ColumnFiltersOptions, ColumnFiltersState, ColumnOrderState, ColumnPinningOptions, ColumnPinningState, ColumnSizingInfoState, ColumnSizingOptions, ColumnSizingState, CoreOptions, ExpandedOptions, ExpandedState, FacetedOptions, GlobalFilterOptions, GroupingOptions, GroupingState, HeaderContext, PaginationOptions, PaginationState, Row, RowPinningOptions, RowPinningState, RowSelectionOptions, RowSelectionState, SortingOptions, SortingState, VisibilityOptions, VisibilityState } from '@tanstack/vue-table';
5
5
  import type { VirtualizerOptions } from '@tanstack/vue-virtual';
6
6
  import theme from '#build/ui/table';
7
+ import type { TableHTMLAttributes } from '../types/html';
7
8
  import type { ComponentConfig } from '../types/tv';
8
9
  declare module '@tanstack/table-core' {
9
10
  interface ColumnMeta<TData extends RowData, TValue> {
@@ -40,7 +41,7 @@ export interface TableOptions<T extends TableData = TableData> extends Omit<Core
40
41
  onStateChange?: CoreOptions<T>['onStateChange'];
41
42
  renderFallbackValue?: CoreOptions<T>['renderFallbackValue'];
42
43
  }
43
- export interface TableProps<T extends TableData = TableData> extends TableOptions<T> {
44
+ export interface TableProps<T extends TableData = TableData> extends TableOptions<T>, /** @vue-ignore */ TableHTMLAttributes {
44
45
  /**
45
46
  * The element or component this component should render as.
46
47
  * @defaultValue 'div'
@@ -62,10 +63,10 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
62
63
  */
63
64
  overscan?: number;
64
65
  /**
65
- * Estimated size (in px) of each item
66
+ * Estimated size (in px) of each item, or a function that returns the size for a given index
66
67
  * @defaultValue 65
67
68
  */
68
- estimateSize?: number;
69
+ estimateSize?: number | ((index: number) => number);
69
70
  });
70
71
  /**
71
72
  * The text to display when the table is empty.
@@ -205,8 +206,8 @@ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Await
205
206
  "onUpdate:pagination"?: ((value: PaginationState) => any) | undefined;
206
207
  }> & import("vue").PublicProps;
207
208
  expose: (exposed: import("vue").ShallowUnwrapRef<{
208
- readonly $el: any;
209
- tableRef: Ref<HTMLTableElement | null, HTMLTableElement | null>;
209
+ readonly $el: HTMLElement;
210
+ tableRef: Readonly<import("vue").ShallowRef<HTMLTableElement | null>>;
210
211
  tableApi: import("@tanstack/table-core").Table<T>;
211
212
  }>) => void;
212
213
  attrs: any;
@@ -3,7 +3,7 @@ import theme from "#build/ui/table";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { computed, ref, watch, toRef } from "vue";
6
+ import { ref, computed, useTemplateRef, watch, toRef } from "vue";
7
7
  import { Primitive } from "reka-ui";
8
8
  import { upperFirst } from "scule";
9
9
  import { defu } from "defu";
@@ -134,8 +134,8 @@ const sortingState = defineModel("sorting", { type: Array, ...{ default: [] } })
134
134
  const groupingState = defineModel("grouping", { type: Array, ...{ default: [] } });
135
135
  const expandedState = defineModel("expanded", { type: [Boolean, Object], ...{ default: {} } });
136
136
  const paginationState = defineModel("pagination", { type: Object, ...{ default: {} } });
137
- const rootRef = ref();
138
- const tableRef = ref(null);
137
+ const rootRef = useTemplateRef("rootRef");
138
+ const tableRef = useTemplateRef("tableRef");
139
139
  const tableApi = useVueTable({
140
140
  ...reactiveOmit(props, "as", "data", "columns", "virtualize", "caption", "sticky", "loading", "loadingColor", "loadingAnimation", "class", "ui"),
141
141
  data,
@@ -225,7 +225,20 @@ const virtualizer = !!props.virtualize && useVirtualizer({
225
225
  return rows.value.length;
226
226
  },
227
227
  getScrollElement: () => rootRef.value?.$el,
228
- estimateSize: () => virtualizerProps.value.estimateSize
228
+ estimateSize: (index) => {
229
+ const estimate = virtualizerProps.value.estimateSize;
230
+ return typeof estimate === "function" ? estimate(index) : estimate;
231
+ }
232
+ });
233
+ const renderedSize = computed(() => {
234
+ if (!virtualizer) {
235
+ return 0;
236
+ }
237
+ const virtualItems = virtualizer.value.getVirtualItems();
238
+ if (!virtualItems?.length) {
239
+ return 0;
240
+ }
241
+ return virtualItems.reduce((sum, item) => sum + item.size, 0);
229
242
  });
230
243
  function valueUpdater(updaterOrValue, ref2) {
231
244
  ref2.value = typeof updaterOrValue === "function" ? updaterOrValue(ref2.value) : updaterOrValue;
@@ -285,6 +298,7 @@ defineExpose({
285
298
  :data-expanded="row.getIsExpanded()"
286
299
  :role="props.onSelect ? 'button' : void 0"
287
300
  :tabindex="props.onSelect ? 0 : void 0"
301
+ data-slot="tr"
288
302
  :class="ui.tr({
289
303
  class: [
290
304
  props.ui?.tr,
@@ -303,6 +317,7 @@ defineExpose({
303
317
  :data-pinned="cell.column.getIsPinned()"
304
318
  :colspan="resolveValue(cell.column.columnDef.meta?.colspan?.td, cell)"
305
319
  :rowspan="resolveValue(cell.column.columnDef.meta?.rowspan?.td, cell)"
320
+ data-slot="td"
306
321
  :class="ui.td({
307
322
  class: [
308
323
  props.ui?.td,
@@ -318,23 +333,23 @@ defineExpose({
318
333
  </td>
319
334
  </tr>
320
335
 
321
- <tr v-if="row.getIsExpanded()" :class="ui.tr({ class: [props.ui?.tr] })">
322
- <td :colspan="row.getAllCells().length" :class="ui.td({ class: [props.ui?.td] })">
336
+ <tr v-if="row.getIsExpanded()" data-slot="tr" :class="ui.tr({ class: [props.ui?.tr] })">
337
+ <td :colspan="row.getAllCells().length" data-slot="td" :class="ui.td({ class: [props.ui?.td] })">
323
338
  <slot name="expanded" :row="row" />
324
339
  </td>
325
340
  </tr>
326
341
  </DefineRowTemplate>
327
342
 
328
343
  <DefineTableTemplate>
329
- <table ref="tableRef" :class="ui.base({ class: [props.ui?.base] })">
330
- <caption v-if="caption || !!slots.caption" :class="ui.caption({ class: [props.ui?.caption] })">
344
+ <table ref="tableRef" data-slot="base" :class="ui.base({ class: [props.ui?.base] })">
345
+ <caption v-if="caption || !!slots.caption" data-slot="caption" :class="ui.caption({ class: [props.ui?.caption] })">
331
346
  <slot name="caption">
332
347
  {{ caption }}
333
348
  </slot>
334
349
  </caption>
335
350
 
336
- <thead :class="ui.thead({ class: [props.ui?.thead] })">
337
- <tr v-for="headerGroup in tableApi.getHeaderGroups()" :key="headerGroup.id" :class="ui.tr({ class: [props.ui?.tr] })">
351
+ <thead data-slot="thead" :class="ui.thead({ class: [props.ui?.thead] })">
352
+ <tr v-for="headerGroup in tableApi.getHeaderGroups()" :key="headerGroup.id" data-slot="tr" :class="ui.tr({ class: [props.ui?.tr] })">
338
353
  <th
339
354
  v-for="header in headerGroup.headers"
340
355
  :key="header.id"
@@ -342,6 +357,7 @@ defineExpose({
342
357
  :scope="header.colSpan > 1 ? 'colgroup' : 'col'"
343
358
  :colspan="header.colSpan > 1 ? header.colSpan : void 0"
344
359
  :rowspan="header.rowSpan > 1 ? header.rowSpan : void 0"
360
+ data-slot="th"
345
361
  :class="ui.th({
346
362
  class: [
347
363
  props.ui?.th,
@@ -349,6 +365,7 @@ defineExpose({
349
365
  ],
350
366
  pinned: !!header.column.getIsPinned()
351
367
  })"
368
+ :style="resolveValue(header.column.columnDef.meta?.style?.th, header)"
352
369
  >
353
370
  <slot :name="`${header.id}-header`" v-bind="header.getContext()">
354
371
  <FlexRender v-if="!header.isPlaceholder" :render="header.column.columnDef.header" :props="header.getContext()" />
@@ -356,10 +373,10 @@ defineExpose({
356
373
  </th>
357
374
  </tr>
358
375
 
359
- <tr :class="ui.separator({ class: [props.ui?.separator] })" />
376
+ <tr data-slot="separator" :class="ui.separator({ class: [props.ui?.separator] })" />
360
377
  </thead>
361
378
 
362
- <tbody :class="ui.tbody({ class: [props.ui?.tbody] })">
379
+ <tbody data-slot="tbody" :class="ui.tbody({ class: [props.ui?.tbody] })">
363
380
  <slot name="body-top" />
364
381
 
365
382
  <template v-if="rows.length">
@@ -381,13 +398,13 @@ defineExpose({
381
398
  </template>
382
399
 
383
400
  <tr v-else-if="loading && !!slots['loading']">
384
- <td :colspan="tableApi.getAllLeafColumns().length" :class="ui.loading({ class: props.ui?.loading })">
401
+ <td :colspan="tableApi.getAllLeafColumns().length" data-slot="loading" :class="ui.loading({ class: props.ui?.loading })">
385
402
  <slot name="loading" />
386
403
  </td>
387
404
  </tr>
388
405
 
389
406
  <tr v-else>
390
- <td :colspan="tableApi.getAllLeafColumns().length" :class="ui.empty({ class: props.ui?.empty })">
407
+ <td :colspan="tableApi.getAllLeafColumns().length" data-slot="empty" :class="ui.empty({ class: props.ui?.empty })">
391
408
  <slot name="empty">
392
409
  {{ empty || t("table.noData") }}
393
410
  </slot>
@@ -399,20 +416,22 @@ defineExpose({
399
416
 
400
417
  <tfoot
401
418
  v-if="hasFooter"
419
+ data-slot="tfoot"
402
420
  :class="ui.tfoot({ class: [props.ui?.tfoot] })"
403
421
  :style="virtualizer ? {
404
- transform: `translateY(${virtualizer.getTotalSize() - virtualizer.getVirtualItems().length * virtualizerProps.estimateSize}px)`
422
+ transform: `translateY(${virtualizer.getTotalSize() - renderedSize}px)`
405
423
  } : void 0"
406
424
  >
407
- <tr :class="ui.separator({ class: [props.ui?.separator] })" />
425
+ <tr data-slot="separator" :class="ui.separator({ class: [props.ui?.separator] })" />
408
426
 
409
- <tr v-for="footerGroup in tableApi.getFooterGroups()" :key="footerGroup.id" :class="ui.tr({ class: [props.ui?.tr] })">
427
+ <tr v-for="footerGroup in tableApi.getFooterGroups()" :key="footerGroup.id" data-slot="tr" :class="ui.tr({ class: [props.ui?.tr] })">
410
428
  <th
411
429
  v-for="header in footerGroup.headers"
412
430
  :key="header.id"
413
431
  :data-pinned="header.column.getIsPinned()"
414
432
  :colspan="header.colSpan > 1 ? header.colSpan : void 0"
415
433
  :rowspan="header.rowSpan > 1 ? header.rowSpan : void 0"
434
+ data-slot="th"
416
435
  :class="ui.th({
417
436
  class: [
418
437
  props.ui?.th,
@@ -431,7 +450,7 @@ defineExpose({
431
450
  </table>
432
451
  </DefineTableTemplate>
433
452
 
434
- <Primitive ref="rootRef" :as="as" v-bind="$attrs" :class="ui.root({ class: [props.ui?.root, props.class] })">
453
+ <Primitive ref="rootRef" :as="as" v-bind="$attrs" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
435
454
  <div
436
455
  v-if="virtualizer"
437
456
  :style="{
@@ -1,9 +1,10 @@
1
- import type { Ref, WatchOptions } from 'vue';
1
+ import type { WatchOptions } from 'vue';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
3
  import type { Cell, Header, RowData, TableMeta } from '@tanstack/table-core';
4
4
  import type { CellContext, ColumnDef, ColumnFiltersOptions, ColumnFiltersState, ColumnOrderState, ColumnPinningOptions, ColumnPinningState, ColumnSizingInfoState, ColumnSizingOptions, ColumnSizingState, CoreOptions, ExpandedOptions, ExpandedState, FacetedOptions, GlobalFilterOptions, GroupingOptions, GroupingState, HeaderContext, PaginationOptions, PaginationState, Row, RowPinningOptions, RowPinningState, RowSelectionOptions, RowSelectionState, SortingOptions, SortingState, VisibilityOptions, VisibilityState } from '@tanstack/vue-table';
5
5
  import type { VirtualizerOptions } from '@tanstack/vue-virtual';
6
6
  import theme from '#build/ui/table';
7
+ import type { TableHTMLAttributes } from '../types/html';
7
8
  import type { ComponentConfig } from '../types/tv';
8
9
  declare module '@tanstack/table-core' {
9
10
  interface ColumnMeta<TData extends RowData, TValue> {
@@ -40,7 +41,7 @@ export interface TableOptions<T extends TableData = TableData> extends Omit<Core
40
41
  onStateChange?: CoreOptions<T>['onStateChange'];
41
42
  renderFallbackValue?: CoreOptions<T>['renderFallbackValue'];
42
43
  }
43
- export interface TableProps<T extends TableData = TableData> extends TableOptions<T> {
44
+ export interface TableProps<T extends TableData = TableData> extends TableOptions<T>, /** @vue-ignore */ TableHTMLAttributes {
44
45
  /**
45
46
  * The element or component this component should render as.
46
47
  * @defaultValue 'div'
@@ -62,10 +63,10 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
62
63
  */
63
64
  overscan?: number;
64
65
  /**
65
- * Estimated size (in px) of each item
66
+ * Estimated size (in px) of each item, or a function that returns the size for a given index
66
67
  * @defaultValue 65
67
68
  */
68
- estimateSize?: number;
69
+ estimateSize?: number | ((index: number) => number);
69
70
  });
70
71
  /**
71
72
  * The text to display when the table is empty.
@@ -205,8 +206,8 @@ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Await
205
206
  "onUpdate:pagination"?: ((value: PaginationState) => any) | undefined;
206
207
  }> & import("vue").PublicProps;
207
208
  expose: (exposed: import("vue").ShallowUnwrapRef<{
208
- readonly $el: any;
209
- tableRef: Ref<HTMLTableElement | null, HTMLTableElement | null>;
209
+ readonly $el: HTMLElement;
210
+ tableRef: Readonly<import("vue").ShallowRef<HTMLTableElement | null>>;
210
211
  tableApi: import("@tanstack/table-core").Table<T>;
211
212
  }>) => void;
212
213
  attrs: any;
@@ -51,10 +51,11 @@ defineExpose({
51
51
  :default-value="defaultValue"
52
52
  :orientation="orientation"
53
53
  :activation-mode="activationMode"
54
+ data-slot="root"
54
55
  :class="ui.root({ class: [props.ui?.root, props.class] })"
55
56
  >
56
- <TabsList :class="ui.list({ class: props.ui?.list })">
57
- <TabsIndicator :class="ui.indicator({ class: props.ui?.indicator })" />
57
+ <TabsList data-slot="list" :class="ui.list({ class: props.ui?.list })">
58
+ <TabsIndicator data-slot="indicator" :class="ui.indicator({ class: props.ui?.indicator })" />
58
59
 
59
60
  <slot name="list-leading" />
60
61
 
@@ -64,24 +65,26 @@ defineExpose({
64
65
  :ref="(el) => triggersRef[index] = el"
65
66
  :value="item.value ?? String(index)"
66
67
  :disabled="item.disabled"
68
+ data-slot="trigger"
67
69
  :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger] })"
68
70
  >
69
71
  <slot name="leading" :item="item" :index="index" :ui="ui">
70
- <UIcon v-if="item.icon" :name="item.icon" :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item.ui?.leadingIcon] })" />
71
- <UAvatar v-else-if="item.avatar" :size="item.ui?.leadingAvatarSize || props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="item.avatar" :class="ui.leadingAvatar({ class: [props.ui?.leadingAvatar, item.ui?.leadingAvatar] })" />
72
+ <UIcon v-if="item.icon" :name="item.icon" data-slot="leadingIcon" :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item.ui?.leadingIcon] })" />
73
+ <UAvatar v-else-if="item.avatar" :size="item.ui?.leadingAvatarSize || props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="item.avatar" data-slot="leadingAvatar" :class="ui.leadingAvatar({ class: [props.ui?.leadingAvatar, item.ui?.leadingAvatar] })" />
72
74
  </slot>
73
75
 
74
- <span v-if="get(item, props.labelKey) || !!slots.default" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })">
76
+ <span v-if="get(item, props.labelKey) || !!slots.default" data-slot="label" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })">
75
77
  <slot :item="item" :index="index">{{ get(item, props.labelKey) }}</slot>
76
78
  </span>
77
79
 
78
80
  <slot name="trailing" :item="item" :index="index" :ui="ui">
79
81
  <UBadge
80
- v-if="item.badge !== void 0"
82
+ v-if="item.badge || item.badge === 0"
81
83
  color="neutral"
82
84
  variant="outline"
83
85
  :size="item.ui?.trailingBadgeSize || props.ui?.trailingBadgeSize || ui.trailingBadgeSize()"
84
86
  v-bind="typeof item.badge === 'string' || typeof item.badge === 'number' ? { label: item.badge } : item.badge"
87
+ data-slot="trailingBadge"
85
88
  :class="ui.trailingBadge({ class: [props.ui?.trailingBadge, item.ui?.trailingBadge] })"
86
89
  />
87
90
  </slot>
@@ -91,7 +94,7 @@ defineExpose({
91
94
  </TabsList>
92
95
 
93
96
  <template v-if="!!content">
94
- <TabsContent v-for="(item, index) of items" :key="index" :value="item.value ?? String(index)" :class="ui.content({ class: [props.ui?.content, item.ui?.content, item.class] })">
97
+ <TabsContent v-for="(item, index) of items" :key="index" :value="item.value ?? String(index)" data-slot="content" :class="ui.content({ class: [props.ui?.content, item.ui?.content, item.class] })">
95
98
  <slot :name="item.slot || 'content'" :item="item" :index="index" :ui="ui">
96
99
  {{ item.content }}
97
100
  </slot>
@@ -1,11 +1,12 @@
1
1
  import type { AppConfig } from '@nuxt/schema';
2
2
  import theme from '#build/ui/textarea';
3
3
  import type { UseComponentIconsProps } from '../composables/useComponentIcons';
4
+ import type { TextareaHTMLAttributes } from '../types/html';
4
5
  import type { ModelModifiers } from '../types/input';
5
6
  import type { ComponentConfig } from '../types/tv';
6
7
  type Textarea = ComponentConfig<typeof theme, AppConfig, 'textarea'>;
7
8
  type TextareaValue = string | number | null;
8
- export interface TextareaProps<T extends TextareaValue = TextareaValue> extends UseComponentIconsProps {
9
+ export interface TextareaProps<T extends TextareaValue = TextareaValue> extends UseComponentIconsProps, /** @vue-ignore */ Omit<TextareaHTMLAttributes, 'name' | 'placeholder' | 'required' | 'autofocus' | 'disabled' | 'rows'> {
9
10
  /**
10
11
  * The element or component this component should render as.
11
12
  * @defaultValue 'div'
@@ -39,7 +40,7 @@ export interface TextareaProps<T extends TextareaValue = TextareaValue> extends
39
40
  highlight?: boolean;
40
41
  modelValue?: T;
41
42
  defaultValue?: T;
42
- modelModifiers?: ModelModifiers;
43
+ modelModifiers?: ModelModifiers<T>;
43
44
  class?: any;
44
45
  ui?: Textarea['slots'];
45
46
  }
@@ -61,16 +62,16 @@ export interface TextareaSlots {
61
62
  }
62
63
  declare const __VLS_export: <T extends TextareaValue>(__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
64
  props: __VLS_PrettifyLocal<TextareaProps<T> & {
64
- onBlur?: ((event: FocusEvent) => any) | undefined;
65
65
  onChange?: ((event: Event) => any) | undefined;
66
+ onBlur?: ((event: FocusEvent) => any) | undefined;
66
67
  "onUpdate:modelValue"?: ((value: T) => any) | undefined;
67
68
  }> & import("vue").PublicProps;
68
69
  expose: (exposed: import("vue").ShallowUnwrapRef<{
69
- textareaRef: import("vue").Ref<HTMLTextAreaElement | null, HTMLTextAreaElement | null>;
70
+ textareaRef: Readonly<import("vue").ShallowRef<HTMLTextAreaElement | null>>;
70
71
  }>) => void;
71
72
  attrs: any;
72
73
  slots: TextareaSlots;
73
- emit: ((evt: "blur", event: FocusEvent) => void) & ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: T) => void);
74
+ emit: ((evt: "change", event: Event) => void) & ((evt: "blur", event: FocusEvent) => void) & ((evt: "update:modelValue", value: T) => void);
74
75
  }>) => import("vue").VNode & {
75
76
  __ctx?: Awaited<typeof __VLS_setup>;
76
77
  };
@@ -3,7 +3,7 @@ import theme from "#build/ui/textarea";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { ref, computed, onMounted, nextTick, watch } from "vue";
6
+ import { useTemplateRef, computed, onMounted, nextTick, watch } from "vue";
7
7
  import { Primitive } from "reka-ui";
8
8
  import { useVModel } from "@vueuse/core";
9
9
  import { useAppConfig } from "#imports";
@@ -61,7 +61,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.textarea || {
61
61
  leading: isLeading.value || !!props.avatar || !!slots.leading,
62
62
  trailing: isTrailing.value || !!slots.trailing
63
63
  }));
64
- const textareaRef = ref(null);
64
+ const textareaRef = useTemplateRef("textareaRef");
65
65
  function updateInput(value) {
66
66
  if (props.modelModifiers?.trim) {
67
67
  value = value?.trim() ?? null;
@@ -139,7 +139,7 @@ defineExpose({
139
139
  </script>
140
140
 
141
141
  <template>
142
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
142
+ <Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
143
143
  <textarea
144
144
  :id="id"
145
145
  ref="textareaRef"
@@ -147,6 +147,7 @@ defineExpose({
147
147
  :name="name"
148
148
  :rows="rows"
149
149
  :placeholder="placeholder"
150
+ data-slot="base"
150
151
  :class="ui.base({ class: props.ui?.base })"
151
152
  :disabled="disabled"
152
153
  :required="required"
@@ -159,16 +160,16 @@ defineExpose({
159
160
 
160
161
  <slot :ui="ui" />
161
162
 
162
- <span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
163
+ <span v-if="isLeading || !!avatar || !!slots.leading" data-slot="leading" :class="ui.leading({ class: props.ui?.leading })">
163
164
  <slot name="leading" :ui="ui">
164
- <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
165
- <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
165
+ <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" data-slot="leadingIcon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
166
+ <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" data-slot="leadingAvatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
166
167
  </slot>
167
168
  </span>
168
169
 
169
- <span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })">
170
+ <span v-if="isTrailing || !!slots.trailing" data-slot="trailing" :class="ui.trailing({ class: props.ui?.trailing })">
170
171
  <slot name="trailing" :ui="ui">
171
- <UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
172
+ <UIcon v-if="trailingIconName" :name="trailingIconName" data-slot="trailingIcon" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
172
173
  </slot>
173
174
  </span>
174
175
  </Primitive>
@@ -1,11 +1,12 @@
1
1
  import type { AppConfig } from '@nuxt/schema';
2
2
  import theme from '#build/ui/textarea';
3
3
  import type { UseComponentIconsProps } from '../composables/useComponentIcons';
4
+ import type { TextareaHTMLAttributes } from '../types/html';
4
5
  import type { ModelModifiers } from '../types/input';
5
6
  import type { ComponentConfig } from '../types/tv';
6
7
  type Textarea = ComponentConfig<typeof theme, AppConfig, 'textarea'>;
7
8
  type TextareaValue = string | number | null;
8
- export interface TextareaProps<T extends TextareaValue = TextareaValue> extends UseComponentIconsProps {
9
+ export interface TextareaProps<T extends TextareaValue = TextareaValue> extends UseComponentIconsProps, /** @vue-ignore */ Omit<TextareaHTMLAttributes, 'name' | 'placeholder' | 'required' | 'autofocus' | 'disabled' | 'rows'> {
9
10
  /**
10
11
  * The element or component this component should render as.
11
12
  * @defaultValue 'div'
@@ -39,7 +40,7 @@ export interface TextareaProps<T extends TextareaValue = TextareaValue> extends
39
40
  highlight?: boolean;
40
41
  modelValue?: T;
41
42
  defaultValue?: T;
42
- modelModifiers?: ModelModifiers;
43
+ modelModifiers?: ModelModifiers<T>;
43
44
  class?: any;
44
45
  ui?: Textarea['slots'];
45
46
  }
@@ -61,16 +62,16 @@ export interface TextareaSlots {
61
62
  }
62
63
  declare const __VLS_export: <T extends TextareaValue>(__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
64
  props: __VLS_PrettifyLocal<TextareaProps<T> & {
64
- onBlur?: ((event: FocusEvent) => any) | undefined;
65
65
  onChange?: ((event: Event) => any) | undefined;
66
+ onBlur?: ((event: FocusEvent) => any) | undefined;
66
67
  "onUpdate:modelValue"?: ((value: T) => any) | undefined;
67
68
  }> & import("vue").PublicProps;
68
69
  expose: (exposed: import("vue").ShallowUnwrapRef<{
69
- textareaRef: import("vue").Ref<HTMLTextAreaElement | null, HTMLTextAreaElement | null>;
70
+ textareaRef: Readonly<import("vue").ShallowRef<HTMLTextAreaElement | null>>;
70
71
  }>) => void;
71
72
  attrs: any;
72
73
  slots: TextareaSlots;
73
- emit: ((evt: "blur", event: FocusEvent) => void) & ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: T) => void);
74
+ emit: ((evt: "change", event: Event) => void) & ((evt: "blur", event: FocusEvent) => void) & ((evt: "update:modelValue", value: T) => void);
74
75
  }>) => import("vue").VNode & {
75
76
  __ctx?: Awaited<typeof __VLS_setup>;
76
77
  };
@@ -51,37 +51,46 @@ function getItemState(index) {
51
51
  </script>
52
52
 
53
53
  <template>
54
- <Primitive :as="as" :data-orientation="orientation" :class="ui.root({ class: [props.ui?.root, props.class] })">
54
+ <Primitive :as="as" :data-orientation="orientation" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
55
55
  <div
56
56
  v-for="(item, index) in items"
57
57
  :key="item.value ?? index"
58
+ data-slot="item"
58
59
  :class="ui.item({ class: [props.ui?.item, item.ui?.item, item.class] })"
59
60
  :data-state="getItemState(index)"
60
61
  >
61
- <div :class="ui.container({ class: [props.ui?.container, item.ui?.container] })">
62
- <UAvatar :size="size" :icon="item.icon" v-bind="typeof item.avatar === 'object' ? item.avatar : {}" :class="ui.indicator({ class: [props.ui?.indicator, item.ui?.indicator] })" :ui="{ icon: 'text-inherit', fallback: 'text-inherit' }">
62
+ <div data-slot="container" :class="ui.container({ class: [props.ui?.container, item.ui?.container] })">
63
+ <UAvatar
64
+ :size="size"
65
+ :icon="item.icon"
66
+ v-bind="typeof item.avatar === 'object' ? item.avatar : {}"
67
+ data-slot="indicator"
68
+ :class="ui.indicator({ class: [props.ui?.indicator, item.ui?.indicator] })"
69
+ :ui="{ icon: 'text-inherit', fallback: 'text-inherit' }"
70
+ >
63
71
  <slot :name="item.slot ? `${item.slot}-indicator` : 'indicator'" :item="item" />
64
72
  </UAvatar>
65
73
 
66
74
  <Separator
67
75
  v-if="index < items.length - 1"
76
+ data-slot="separator"
68
77
  :class="ui.separator({ class: [props.ui?.separator, item.ui?.separator] })"
69
78
  :orientation="props.orientation"
70
79
  />
71
80
  </div>
72
81
 
73
- <div :class="ui.wrapper({ class: [props.ui?.wrapper, item.ui?.wrapper] })">
74
- <div v-if="item.date" :class="ui.date({ class: [props.ui?.date, item.ui?.date] })">
82
+ <div data-slot="wrapper" :class="ui.wrapper({ class: [props.ui?.wrapper, item.ui?.wrapper] })">
83
+ <div v-if="item.date" data-slot="date" :class="ui.date({ class: [props.ui?.date, item.ui?.date] })">
75
84
  <slot :name="item.slot ? `${item.slot}-date` : 'date'" :item="item">
76
85
  {{ item.date }}
77
86
  </slot>
78
87
  </div>
79
- <div v-if="item.title || !!slots.title" :class="ui.title({ class: [props.ui?.title, item.ui?.title] })">
88
+ <div v-if="item.title || !!slots.title" data-slot="title" :class="ui.title({ class: [props.ui?.title, item.ui?.title] })">
80
89
  <slot :name="item.slot ? `${item.slot}-title` : 'title'" :item="item">
81
90
  {{ item.title }}
82
91
  </slot>
83
92
  </div>
84
- <div v-if="item.description || !!slots.description" :class="ui.description({ class: [props.ui?.description, item.ui?.description] })">
93
+ <div v-if="item.description || !!slots.description" data-slot="description" :class="ui.description({ class: [props.ui?.description, item.ui?.description] })">
85
94
  <slot :name="item.slot ? `${item.slot}-description` : 'description'" :item="item">
86
95
  {{ item.description }}
87
96
  </slot>