@nuxt/ui 4.0.1 → 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 (499) hide show
  1. package/cli/templates.mjs +16 -4
  2. package/dist/module.d.mts +25 -0
  3. package/dist/module.json +2 -2
  4. package/dist/module.mjs +7 -4
  5. package/dist/runtime/components/Accordion.d.vue.ts +7 -1
  6. package/dist/runtime/components/Accordion.vue +13 -12
  7. package/dist/runtime/components/Accordion.vue.d.ts +7 -1
  8. package/dist/runtime/components/Alert.d.vue.ts +4 -4
  9. package/dist/runtime/components/Alert.vue +10 -9
  10. package/dist/runtime/components/Alert.vue.d.ts +4 -4
  11. package/dist/runtime/components/App.d.vue.ts +1 -1
  12. package/dist/runtime/components/App.vue +2 -1
  13. package/dist/runtime/components/App.vue.d.ts +1 -1
  14. package/dist/runtime/components/AuthForm.d.vue.ts +12 -9
  15. package/dist/runtime/components/AuthForm.vue +29 -21
  16. package/dist/runtime/components/AuthForm.vue.d.ts +12 -9
  17. package/dist/runtime/components/Avatar.d.vue.ts +7 -5
  18. package/dist/runtime/components/Avatar.vue +14 -5
  19. package/dist/runtime/components/Avatar.vue.d.ts +7 -5
  20. package/dist/runtime/components/AvatarGroup.vue +3 -3
  21. package/dist/runtime/components/Badge.d.vue.ts +9 -3
  22. package/dist/runtime/components/Badge.vue +8 -8
  23. package/dist/runtime/components/Badge.vue.d.ts +9 -3
  24. package/dist/runtime/components/Banner.d.vue.ts +4 -2
  25. package/dist/runtime/components/Banner.vue +10 -9
  26. package/dist/runtime/components/Banner.vue.d.ts +4 -2
  27. package/dist/runtime/components/BlogPost.d.vue.ts +9 -3
  28. package/dist/runtime/components/BlogPost.vue +21 -12
  29. package/dist/runtime/components/BlogPost.vue.d.ts +9 -3
  30. package/dist/runtime/components/BlogPosts.d.vue.ts +22 -13
  31. package/dist/runtime/components/BlogPosts.vue +8 -2
  32. package/dist/runtime/components/BlogPosts.vue.d.ts +22 -13
  33. package/dist/runtime/components/Breadcrumb.d.vue.ts +19 -4
  34. package/dist/runtime/components/Breadcrumb.vue +14 -14
  35. package/dist/runtime/components/Breadcrumb.vue.d.ts +19 -4
  36. package/dist/runtime/components/Button.d.vue.ts +9 -3
  37. package/dist/runtime/components/Button.vue +9 -7
  38. package/dist/runtime/components/Button.vue.d.ts +9 -3
  39. package/dist/runtime/components/Calendar.d.vue.ts +4 -0
  40. package/dist/runtime/components/Calendar.vue +15 -9
  41. package/dist/runtime/components/Calendar.vue.d.ts +4 -0
  42. package/dist/runtime/components/Card.vue +4 -4
  43. package/dist/runtime/components/Carousel.vue +10 -5
  44. package/dist/runtime/components/ChangelogVersion.d.vue.ts +12 -4
  45. package/dist/runtime/components/ChangelogVersion.vue +25 -17
  46. package/dist/runtime/components/ChangelogVersion.vue.d.ts +12 -4
  47. package/dist/runtime/components/ChangelogVersions.d.vue.ts +8 -36
  48. package/dist/runtime/components/ChangelogVersions.vue +6 -6
  49. package/dist/runtime/components/ChangelogVersions.vue.d.ts +8 -36
  50. package/dist/runtime/components/ChatMessage.d.vue.ts +1 -0
  51. package/dist/runtime/components/ChatMessage.vue +8 -8
  52. package/dist/runtime/components/ChatMessage.vue.d.ts +1 -0
  53. package/dist/runtime/components/ChatMessages.d.vue.ts +14 -15
  54. package/dist/runtime/components/ChatMessages.vue +28 -10
  55. package/dist/runtime/components/ChatMessages.vue.d.ts +14 -15
  56. package/dist/runtime/components/ChatPalette.vue +3 -3
  57. package/dist/runtime/components/ChatPrompt.d.vue.ts +3 -6
  58. package/dist/runtime/components/ChatPrompt.vue +23 -14
  59. package/dist/runtime/components/ChatPrompt.vue.d.ts +3 -6
  60. package/dist/runtime/components/ChatPromptSubmit.d.vue.ts +4 -4
  61. package/dist/runtime/components/ChatPromptSubmit.vue +51 -4
  62. package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +4 -4
  63. package/dist/runtime/components/Checkbox.d.vue.ts +2 -1
  64. package/dist/runtime/components/Checkbox.vue +9 -8
  65. package/dist/runtime/components/Checkbox.vue.d.ts +2 -1
  66. package/dist/runtime/components/CheckboxGroup.vue +7 -4
  67. package/dist/runtime/components/Chip.vue +2 -2
  68. package/dist/runtime/components/Collapsible.vue +2 -2
  69. package/dist/runtime/components/ColorPicker.vue +7 -3
  70. package/dist/runtime/components/CommandPalette.d.vue.ts +43 -12
  71. package/dist/runtime/components/CommandPalette.vue +175 -84
  72. package/dist/runtime/components/CommandPalette.vue.d.ts +43 -12
  73. package/dist/runtime/components/ContextMenu.d.vue.ts +28 -6
  74. package/dist/runtime/components/ContextMenu.vue +2 -0
  75. package/dist/runtime/components/ContextMenu.vue.d.ts +28 -6
  76. package/dist/runtime/components/ContextMenuContent.d.vue.ts +2 -3
  77. package/dist/runtime/components/ContextMenuContent.vue +35 -23
  78. package/dist/runtime/components/ContextMenuContent.vue.d.ts +2 -3
  79. package/dist/runtime/components/DashboardNavbar.d.vue.ts +9 -3
  80. package/dist/runtime/components/DashboardNavbar.vue +10 -9
  81. package/dist/runtime/components/DashboardNavbar.vue.d.ts +9 -3
  82. package/dist/runtime/components/DashboardPanel.vue +3 -1
  83. package/dist/runtime/components/DashboardSearch.d.vue.ts +3 -1
  84. package/dist/runtime/components/DashboardSearch.vue +4 -3
  85. package/dist/runtime/components/DashboardSearch.vue.d.ts +3 -1
  86. package/dist/runtime/components/DashboardSearchButton.d.vue.ts +2 -3
  87. package/dist/runtime/components/DashboardSearchButton.vue +48 -10
  88. package/dist/runtime/components/DashboardSearchButton.vue.d.ts +2 -3
  89. package/dist/runtime/components/DashboardSidebar.d.vue.ts +5 -1
  90. package/dist/runtime/components/DashboardSidebar.vue +13 -10
  91. package/dist/runtime/components/DashboardSidebar.vue.d.ts +5 -1
  92. package/dist/runtime/components/DashboardSidebarCollapse.d.vue.ts +7 -4
  93. package/dist/runtime/components/DashboardSidebarCollapse.vue +51 -7
  94. package/dist/runtime/components/DashboardSidebarCollapse.vue.d.ts +7 -4
  95. package/dist/runtime/components/DashboardSidebarToggle.d.vue.ts +7 -4
  96. package/dist/runtime/components/DashboardSidebarToggle.vue +52 -7
  97. package/dist/runtime/components/DashboardSidebarToggle.vue.d.ts +7 -4
  98. package/dist/runtime/components/DashboardToolbar.vue +3 -3
  99. package/dist/runtime/components/Drawer.d.vue.ts +1 -1
  100. package/dist/runtime/components/Drawer.vue +11 -14
  101. package/dist/runtime/components/Drawer.vue.d.ts +1 -1
  102. package/dist/runtime/components/DropdownMenu.d.vue.ts +28 -6
  103. package/dist/runtime/components/DropdownMenu.vue +3 -1
  104. package/dist/runtime/components/DropdownMenu.vue.d.ts +28 -6
  105. package/dist/runtime/components/DropdownMenuContent.d.vue.ts +8 -5
  106. package/dist/runtime/components/DropdownMenuContent.vue +35 -23
  107. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +8 -5
  108. package/dist/runtime/components/Empty.d.vue.ts +53 -0
  109. package/dist/runtime/components/Empty.vue +68 -0
  110. package/dist/runtime/components/Empty.vue.d.ts +53 -0
  111. package/dist/runtime/components/Error.d.vue.ts +1 -2
  112. package/dist/runtime/components/Error.vue +6 -6
  113. package/dist/runtime/components/Error.vue.d.ts +1 -2
  114. package/dist/runtime/components/FileUpload.d.vue.ts +14 -3
  115. package/dist/runtime/components/FileUpload.vue +41 -30
  116. package/dist/runtime/components/FileUpload.vue.d.ts +14 -3
  117. package/dist/runtime/components/Footer.vue +7 -7
  118. package/dist/runtime/components/FooterColumns.d.vue.ts +9 -2
  119. package/dist/runtime/components/FooterColumns.vue +13 -13
  120. package/dist/runtime/components/FooterColumns.vue.d.ts +9 -2
  121. package/dist/runtime/components/Form.d.vue.ts +3 -2
  122. package/dist/runtime/components/Form.vue +3 -4
  123. package/dist/runtime/components/Form.vue.d.ts +3 -2
  124. package/dist/runtime/components/FormField.vue +8 -8
  125. package/dist/runtime/components/Header.d.vue.ts +4 -1
  126. package/dist/runtime/components/Header.vue +12 -11
  127. package/dist/runtime/components/Header.vue.d.ts +4 -1
  128. package/dist/runtime/components/Input.d.vue.ts +15 -9
  129. package/dist/runtime/components/Input.vue +12 -11
  130. package/dist/runtime/components/Input.vue.d.ts +15 -9
  131. package/dist/runtime/components/InputDate.d.vue.ts +89 -0
  132. package/dist/runtime/components/InputDate.vue +161 -0
  133. package/dist/runtime/components/InputDate.vue.d.ts +89 -0
  134. package/dist/runtime/components/InputMenu.d.vue.ts +46 -137
  135. package/dist/runtime/components/InputMenu.vue +143 -83
  136. package/dist/runtime/components/InputMenu.vue.d.ts +46 -137
  137. package/dist/runtime/components/InputNumber.d.vue.ts +26 -127
  138. package/dist/runtime/components/InputNumber.vue +13 -12
  139. package/dist/runtime/components/InputNumber.vue.d.ts +26 -127
  140. package/dist/runtime/components/InputTags.d.vue.ts +15 -111
  141. package/dist/runtime/components/InputTags.vue +24 -20
  142. package/dist/runtime/components/InputTags.vue.d.ts +15 -111
  143. package/dist/runtime/components/InputTime.d.vue.ts +72 -0
  144. package/dist/runtime/components/InputTime.vue +137 -0
  145. package/dist/runtime/components/InputTime.vue.d.ts +72 -0
  146. package/dist/runtime/components/Link.d.vue.ts +4 -49
  147. package/dist/runtime/components/Link.vue +1 -0
  148. package/dist/runtime/components/Link.vue.d.ts +4 -49
  149. package/dist/runtime/components/Main.d.vue.ts +2 -4
  150. package/dist/runtime/components/Main.vue +1 -1
  151. package/dist/runtime/components/Main.vue.d.ts +2 -4
  152. package/dist/runtime/components/Marquee.d.vue.ts +1 -1
  153. package/dist/runtime/components/Marquee.vue +2 -6
  154. package/dist/runtime/components/Marquee.vue.d.ts +1 -1
  155. package/dist/runtime/components/Modal.d.vue.ts +8 -6
  156. package/dist/runtime/components/Modal.vue +55 -22
  157. package/dist/runtime/components/Modal.vue.d.ts +8 -6
  158. package/dist/runtime/components/NavigationMenu.d.vue.ts +60 -13
  159. package/dist/runtime/components/NavigationMenu.vue +86 -49
  160. package/dist/runtime/components/NavigationMenu.vue.d.ts +60 -13
  161. package/dist/runtime/components/Page.vue +4 -4
  162. package/dist/runtime/components/PageAnchors.d.vue.ts +9 -2
  163. package/dist/runtime/components/PageAnchors.vue +10 -10
  164. package/dist/runtime/components/PageAnchors.vue.d.ts +9 -2
  165. package/dist/runtime/components/PageAside.vue +6 -6
  166. package/dist/runtime/components/PageCTA.vue +9 -9
  167. package/dist/runtime/components/PageCard.d.vue.ts +3 -1
  168. package/dist/runtime/components/PageCard.vue +12 -11
  169. package/dist/runtime/components/PageCard.vue.d.ts +3 -1
  170. package/dist/runtime/components/PageFeature.d.vue.ts +3 -1
  171. package/dist/runtime/components/PageFeature.vue +7 -7
  172. package/dist/runtime/components/PageFeature.vue.d.ts +3 -1
  173. package/dist/runtime/components/PageHeader.vue +7 -7
  174. package/dist/runtime/components/PageHero.vue +10 -10
  175. package/dist/runtime/components/PageLinks.d.vue.ts +9 -2
  176. package/dist/runtime/components/PageLinks.vue +10 -10
  177. package/dist/runtime/components/PageLinks.vue.d.ts +9 -2
  178. package/dist/runtime/components/PageLogos.vue +6 -3
  179. package/dist/runtime/components/PageSection.d.vue.ts +3 -1
  180. package/dist/runtime/components/PageSection.vue +14 -14
  181. package/dist/runtime/components/PageSection.vue.d.ts +3 -1
  182. package/dist/runtime/components/Pagination.d.vue.ts +5 -3
  183. package/dist/runtime/components/Pagination.vue +9 -9
  184. package/dist/runtime/components/Pagination.vue.d.ts +5 -3
  185. package/dist/runtime/components/PinInput.d.vue.ts +2 -2
  186. package/dist/runtime/components/PinInput.vue +2 -0
  187. package/dist/runtime/components/PinInput.vue.d.ts +2 -2
  188. package/dist/runtime/components/Popover.d.vue.ts +24 -23
  189. package/dist/runtime/components/Popover.vue +6 -6
  190. package/dist/runtime/components/Popover.vue.d.ts +24 -23
  191. package/dist/runtime/components/PricingPlan.d.vue.ts +9 -3
  192. package/dist/runtime/components/PricingPlan.vue +31 -24
  193. package/dist/runtime/components/PricingPlan.vue.d.ts +9 -3
  194. package/dist/runtime/components/PricingPlans.d.vue.ts +20 -13
  195. package/dist/runtime/components/PricingPlans.vue +7 -1
  196. package/dist/runtime/components/PricingPlans.vue.d.ts +20 -13
  197. package/dist/runtime/components/PricingTable.vue +35 -31
  198. package/dist/runtime/components/Progress.d.vue.ts +1 -1
  199. package/dist/runtime/components/Progress.vue +6 -6
  200. package/dist/runtime/components/Progress.vue.d.ts +1 -1
  201. package/dist/runtime/components/RadioGroup.d.vue.ts +5 -5
  202. package/dist/runtime/components/RadioGroup.vue +13 -11
  203. package/dist/runtime/components/RadioGroup.vue.d.ts +5 -5
  204. package/dist/runtime/components/Select.d.vue.ts +25 -115
  205. package/dist/runtime/components/Select.vue +41 -29
  206. package/dist/runtime/components/Select.vue.d.ts +25 -115
  207. package/dist/runtime/components/SelectMenu.d.vue.ts +43 -114
  208. package/dist/runtime/components/SelectMenu.vue +145 -78
  209. package/dist/runtime/components/SelectMenu.vue.d.ts +43 -114
  210. package/dist/runtime/components/Separator.d.vue.ts +3 -1
  211. package/dist/runtime/components/Separator.vue +8 -8
  212. package/dist/runtime/components/Separator.vue.d.ts +3 -1
  213. package/dist/runtime/components/Slideover.d.vue.ts +3 -6
  214. package/dist/runtime/components/Slideover.vue +12 -13
  215. package/dist/runtime/components/Slideover.vue.d.ts +3 -6
  216. package/dist/runtime/components/Slider.vue +5 -4
  217. package/dist/runtime/components/Stepper.d.vue.ts +4 -1
  218. package/dist/runtime/components/Stepper.vue +13 -11
  219. package/dist/runtime/components/Stepper.vue.d.ts +4 -1
  220. package/dist/runtime/components/Switch.d.vue.ts +2 -1
  221. package/dist/runtime/components/Switch.vue +10 -9
  222. package/dist/runtime/components/Switch.vue.d.ts +2 -1
  223. package/dist/runtime/components/Table.d.vue.ts +25 -4
  224. package/dist/runtime/components/Table.vue +156 -71
  225. package/dist/runtime/components/Table.vue.d.ts +25 -4
  226. package/dist/runtime/components/Tabs.d.vue.ts +8 -3
  227. package/dist/runtime/components/Tabs.vue +13 -10
  228. package/dist/runtime/components/Tabs.vue.d.ts +8 -3
  229. package/dist/runtime/components/Textarea.d.vue.ts +15 -8
  230. package/dist/runtime/components/Textarea.vue +12 -11
  231. package/dist/runtime/components/Textarea.vue.d.ts +15 -8
  232. package/dist/runtime/components/Timeline.vue +16 -7
  233. package/dist/runtime/components/Toast.d.vue.ts +4 -4
  234. package/dist/runtime/components/Toast.vue +16 -13
  235. package/dist/runtime/components/Toast.vue.d.ts +4 -4
  236. package/dist/runtime/components/Toaster.d.vue.ts +6 -0
  237. package/dist/runtime/components/Toaster.vue +8 -3
  238. package/dist/runtime/components/Toaster.vue.d.ts +6 -0
  239. package/dist/runtime/components/Tooltip.d.vue.ts +3 -1
  240. package/dist/runtime/components/Tooltip.vue +5 -5
  241. package/dist/runtime/components/Tooltip.vue.d.ts +3 -1
  242. package/dist/runtime/components/Tree.d.vue.ts +43 -5
  243. package/dist/runtime/components/Tree.vue +176 -81
  244. package/dist/runtime/components/Tree.vue.d.ts +43 -5
  245. package/dist/runtime/components/User.d.vue.ts +3 -1
  246. package/dist/runtime/components/User.vue +14 -7
  247. package/dist/runtime/components/User.vue.d.ts +3 -1
  248. package/dist/runtime/components/color-mode/ColorModeAvatar.d.vue.ts +3 -3
  249. package/dist/runtime/components/color-mode/ColorModeAvatar.vue +16 -4
  250. package/dist/runtime/components/color-mode/ColorModeAvatar.vue.d.ts +3 -3
  251. package/dist/runtime/components/color-mode/ColorModeButton.d.vue.ts +6 -13
  252. package/dist/runtime/components/color-mode/ColorModeButton.vue +59 -18
  253. package/dist/runtime/components/color-mode/ColorModeButton.vue.d.ts +6 -13
  254. package/dist/runtime/components/color-mode/ColorModeImage.d.vue.ts +4 -3
  255. package/dist/runtime/components/color-mode/ColorModeImage.vue +4 -0
  256. package/dist/runtime/components/color-mode/ColorModeImage.vue.d.ts +4 -3
  257. package/dist/runtime/components/color-mode/ColorModeSelect.d.vue.ts +5 -3
  258. package/dist/runtime/components/color-mode/ColorModeSelect.vue +45 -5
  259. package/dist/runtime/components/color-mode/ColorModeSelect.vue.d.ts +5 -3
  260. package/dist/runtime/components/color-mode/ColorModeSwitch.d.vue.ts +2 -2
  261. package/dist/runtime/components/color-mode/ColorModeSwitch.vue +29 -5
  262. package/dist/runtime/components/color-mode/ColorModeSwitch.vue.d.ts +2 -2
  263. package/dist/runtime/components/content/ContentNavigation.d.vue.ts +1 -0
  264. package/dist/runtime/components/content/ContentNavigation.vue +18 -17
  265. package/dist/runtime/components/content/ContentNavigation.vue.d.ts +1 -0
  266. package/dist/runtime/components/content/ContentSearch.d.vue.ts +3 -1
  267. package/dist/runtime/components/content/ContentSearch.vue +64 -67
  268. package/dist/runtime/components/content/ContentSearch.vue.d.ts +3 -1
  269. package/dist/runtime/components/content/ContentSearchButton.d.vue.ts +2 -3
  270. package/dist/runtime/components/content/ContentSearchButton.vue +48 -10
  271. package/dist/runtime/components/content/ContentSearchButton.vue.d.ts +2 -3
  272. package/dist/runtime/components/content/ContentSurround.d.vue.ts +1 -0
  273. package/dist/runtime/components/content/ContentSurround.vue +10 -10
  274. package/dist/runtime/components/content/ContentSurround.vue.d.ts +1 -0
  275. package/dist/runtime/components/content/ContentToc.d.vue.ts +2 -0
  276. package/dist/runtime/components/content/ContentToc.vue +17 -17
  277. package/dist/runtime/components/content/ContentToc.vue.d.ts +2 -0
  278. package/dist/runtime/components/locale/LocaleSelect.d.vue.ts +10 -6
  279. package/dist/runtime/components/locale/LocaleSelect.vue +54 -6
  280. package/dist/runtime/components/locale/LocaleSelect.vue.d.ts +10 -6
  281. package/dist/runtime/components/prose/Accordion.d.vue.ts +6 -0
  282. package/dist/runtime/components/prose/Accordion.vue +3 -2
  283. package/dist/runtime/components/prose/Accordion.vue.d.ts +6 -0
  284. package/dist/runtime/components/prose/CodeTree.vue +40 -36
  285. package/dist/runtime/components/prose/Collapsible.d.vue.ts +2 -2
  286. package/dist/runtime/components/prose/Collapsible.vue +2 -2
  287. package/dist/runtime/components/prose/Collapsible.vue.d.ts +2 -2
  288. package/dist/runtime/components/prose/Field.d.vue.ts +1 -1
  289. package/dist/runtime/components/prose/Field.vue.d.ts +1 -1
  290. package/dist/runtime/components/prose/Img.vue +14 -3
  291. package/dist/runtime/components/prose/Tabs.d.vue.ts +6 -0
  292. package/dist/runtime/components/prose/Tabs.vue +3 -2
  293. package/dist/runtime/components/prose/Tabs.vue.d.ts +6 -0
  294. package/dist/runtime/composables/index.d.ts +8 -0
  295. package/dist/runtime/composables/index.js +8 -0
  296. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  297. package/dist/runtime/composables/useContentSearch.d.ts +5 -0
  298. package/dist/runtime/composables/useContentSearch.js +31 -1
  299. package/dist/runtime/composables/useFieldGroup.d.ts +1 -1
  300. package/dist/runtime/composables/useFileUpload.d.ts +2 -1
  301. package/dist/runtime/composables/useFileUpload.js +13 -4
  302. package/dist/runtime/composables/useFormField.d.ts +1 -1
  303. package/dist/runtime/composables/useKbd.js +1 -1
  304. package/dist/runtime/composables/useToast.d.ts +3 -1
  305. package/dist/runtime/composables/useToast.js +4 -3
  306. package/dist/runtime/index.css +1 -1
  307. package/dist/runtime/inertia/components/Link.d.vue.ts +17 -10
  308. package/dist/runtime/inertia/components/Link.vue +19 -13
  309. package/dist/runtime/inertia/components/Link.vue.d.ts +17 -10
  310. package/dist/runtime/inertia/stubs.js +1 -1
  311. package/dist/runtime/keyframes.css +1 -1
  312. package/dist/runtime/locale/gl.d.ts +3 -0
  313. package/dist/runtime/locale/gl.js +129 -0
  314. package/dist/runtime/locale/hr.d.ts +3 -0
  315. package/dist/runtime/locale/hr.js +129 -0
  316. package/dist/runtime/locale/index.d.ts +3 -0
  317. package/dist/runtime/locale/index.js +3 -0
  318. package/dist/runtime/locale/sq.d.ts +3 -0
  319. package/dist/runtime/locale/sq.js +129 -0
  320. package/dist/runtime/plugins/colors.js +8 -6
  321. package/dist/runtime/types/html.d.ts +8 -0
  322. package/dist/runtime/types/html.js +0 -0
  323. package/dist/runtime/types/index.d.ts +7 -1
  324. package/dist/runtime/types/index.js +7 -1
  325. package/dist/runtime/types/input.d.ts +5 -5
  326. package/dist/runtime/types/tv.d.ts +6 -0
  327. package/dist/runtime/types/utils.d.ts +2 -0
  328. package/dist/runtime/utils/content.d.ts +2 -2
  329. package/dist/runtime/utils/link.d.ts +1 -0
  330. package/dist/runtime/utils/link.js +40 -24
  331. package/dist/runtime/utils/virtualizer.d.ts +6 -0
  332. package/dist/runtime/utils/virtualizer.js +30 -0
  333. package/dist/runtime/vue/components/Link.d.vue.ts +8 -37
  334. package/dist/runtime/vue/components/Link.vue +5 -10
  335. package/dist/runtime/vue/components/Link.vue.d.ts +8 -37
  336. package/dist/runtime/vue/components/color-mode/ColorModeSelect.d.vue.ts +5 -3
  337. package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue +44 -3
  338. package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue.d.ts +5 -3
  339. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.d.vue.ts +1 -1
  340. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.vue +24 -3
  341. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.vue.d.ts +1 -1
  342. package/dist/runtime/vue/stubs.d.ts +1 -1
  343. package/dist/runtime/vue/stubs.js +1 -1
  344. package/dist/shared/{ui.D-FDXAUi.mjs → ui.B77q-Dvh.mjs} +679 -102
  345. package/dist/unplugin.d.mts +1 -0
  346. package/dist/unplugin.mjs +31 -2
  347. package/dist/vite.mjs +5 -2
  348. package/package.json +46 -40
  349. package/.nuxt/ui/accordion.ts +0 -20
  350. package/.nuxt/ui/alert.ts +0 -264
  351. package/.nuxt/ui/auth-form.ts +0 -20
  352. package/.nuxt/ui/avatar-group.ts +0 -52
  353. package/.nuxt/ui/avatar.ts +0 -54
  354. package/.nuxt/ui/badge.ts +0 -263
  355. package/.nuxt/ui/banner.ts +0 -108
  356. package/.nuxt/ui/blog-post.ts +0 -142
  357. package/.nuxt/ui/blog-posts.ts +0 -9
  358. package/.nuxt/ui/breadcrumb.ts +0 -45
  359. package/.nuxt/ui/button.ts +0 -378
  360. package/.nuxt/ui/calendar.ts +0 -103
  361. package/.nuxt/ui/card.ts +0 -34
  362. package/.nuxt/ui/carousel.ts +0 -38
  363. package/.nuxt/ui/changelog-version.ts +0 -41
  364. package/.nuxt/ui/changelog-versions.ts +0 -8
  365. package/.nuxt/ui/chat-message.ts +0 -129
  366. package/.nuxt/ui/chat-messages.ts +0 -14
  367. package/.nuxt/ui/chat-palette.ts +0 -8
  368. package/.nuxt/ui/chat-prompt-submit.ts +0 -5
  369. package/.nuxt/ui/chat-prompt.ts +0 -35
  370. package/.nuxt/ui/checkbox-group.ts +0 -204
  371. package/.nuxt/ui/checkbox.ts +0 -236
  372. package/.nuxt/ui/chip.ts +0 -96
  373. package/.nuxt/ui/collapsible.ts +0 -6
  374. package/.nuxt/ui/color-picker.ts +0 -47
  375. package/.nuxt/ui/command-palette.ts +0 -52
  376. package/.nuxt/ui/container.ts +0 -3
  377. package/.nuxt/ui/content/content-navigation.ts +0 -368
  378. package/.nuxt/ui/content/content-search-button.ts +0 -6
  379. package/.nuxt/ui/content/content-search.ts +0 -13
  380. package/.nuxt/ui/content/content-surround.ts +0 -34
  381. package/.nuxt/ui/content/content-toc.ts +0 -155
  382. package/.nuxt/ui/context-menu.ts +0 -217
  383. package/.nuxt/ui/dashboard-group.ts +0 -3
  384. package/.nuxt/ui/dashboard-navbar.ts +0 -21
  385. package/.nuxt/ui/dashboard-panel.ts +0 -17
  386. package/.nuxt/ui/dashboard-resize-handle.ts +0 -3
  387. package/.nuxt/ui/dashboard-search-button.ts +0 -6
  388. package/.nuxt/ui/dashboard-search.ts +0 -13
  389. package/.nuxt/ui/dashboard-sidebar-collapse.ts +0 -9
  390. package/.nuxt/ui/dashboard-sidebar-toggle.ts +0 -9
  391. package/.nuxt/ui/dashboard-sidebar.ts +0 -37
  392. package/.nuxt/ui/dashboard-toolbar.ts +0 -7
  393. package/.nuxt/ui/drawer.ts +0 -149
  394. package/.nuxt/ui/dropdown-menu.ts +0 -218
  395. package/.nuxt/ui/error.ts +0 -9
  396. package/.nuxt/ui/field-group.ts +0 -16
  397. package/.nuxt/ui/file-upload.ts +0 -290
  398. package/.nuxt/ui/footer-columns.ts +0 -28
  399. package/.nuxt/ui/footer.ts +0 -11
  400. package/.nuxt/ui/form-field.ts +0 -48
  401. package/.nuxt/ui/form.ts +0 -3
  402. package/.nuxt/ui/header.ts +0 -25
  403. package/.nuxt/ui/index.ts +0 -105
  404. package/.nuxt/ui/input-menu.ts +0 -450
  405. package/.nuxt/ui/input-number.ts +0 -245
  406. package/.nuxt/ui/input-tags.ts +0 -310
  407. package/.nuxt/ui/input.ts +0 -289
  408. package/.nuxt/ui/kbd.ts +0 -195
  409. package/.nuxt/ui/link.ts +0 -22
  410. package/.nuxt/ui/main.ts +0 -3
  411. package/.nuxt/ui/marquee.ts +0 -66
  412. package/.nuxt/ui/modal.ts +0 -29
  413. package/.nuxt/ui/navigation-menu.ts +0 -510
  414. package/.nuxt/ui/page-anchors.ts +0 -30
  415. package/.nuxt/ui/page-aside.ts +0 -10
  416. package/.nuxt/ui/page-body.ts +0 -3
  417. package/.nuxt/ui/page-card.ts +0 -279
  418. package/.nuxt/ui/page-columns.ts +0 -3
  419. package/.nuxt/ui/page-cta.ts +0 -70
  420. package/.nuxt/ui/page-feature.ts +0 -26
  421. package/.nuxt/ui/page-grid.ts +0 -3
  422. package/.nuxt/ui/page-header.ts +0 -18
  423. package/.nuxt/ui/page-hero.ts +0 -44
  424. package/.nuxt/ui/page-links.ts +0 -25
  425. package/.nuxt/ui/page-list.ts +0 -8
  426. package/.nuxt/ui/page-logos.ts +0 -15
  427. package/.nuxt/ui/page-section.ts +0 -84
  428. package/.nuxt/ui/page.ts +0 -32
  429. package/.nuxt/ui/pagination.ts +0 -13
  430. package/.nuxt/ui/pin-input.ts +0 -171
  431. package/.nuxt/ui/popover.ts +0 -6
  432. package/.nuxt/ui/pricing-plan.ts +0 -101
  433. package/.nuxt/ui/pricing-plans.ts +0 -22
  434. package/.nuxt/ui/pricing-table.ts +0 -51
  435. package/.nuxt/ui/progress.ts +0 -297
  436. package/.nuxt/ui/prose/a.ts +0 -6
  437. package/.nuxt/ui/prose/accordion-item.ts +0 -3
  438. package/.nuxt/ui/prose/accordion.ts +0 -6
  439. package/.nuxt/ui/prose/badge.ts +0 -3
  440. package/.nuxt/ui/prose/blockquote.ts +0 -3
  441. package/.nuxt/ui/prose/callout.ts +0 -129
  442. package/.nuxt/ui/prose/card-group.ts +0 -3
  443. package/.nuxt/ui/prose/card.ts +0 -119
  444. package/.nuxt/ui/prose/code-collapse.ts +0 -19
  445. package/.nuxt/ui/prose/code-group.ts +0 -13
  446. package/.nuxt/ui/prose/code-icon.ts +0 -66
  447. package/.nuxt/ui/prose/code-preview.ts +0 -14
  448. package/.nuxt/ui/prose/code-tree.ts +0 -28
  449. package/.nuxt/ui/prose/code.ts +0 -27
  450. package/.nuxt/ui/prose/collapsible.ts +0 -12
  451. package/.nuxt/ui/prose/em.ts +0 -3
  452. package/.nuxt/ui/prose/field-group.ts +0 -3
  453. package/.nuxt/ui/prose/field.ts +0 -11
  454. package/.nuxt/ui/prose/h1.ts +0 -6
  455. package/.nuxt/ui/prose/h2.ts +0 -14
  456. package/.nuxt/ui/prose/h3.ts +0 -14
  457. package/.nuxt/ui/prose/h4.ts +0 -6
  458. package/.nuxt/ui/prose/hr.ts +0 -3
  459. package/.nuxt/ui/prose/icon.ts +0 -3
  460. package/.nuxt/ui/prose/img.ts +0 -22
  461. package/.nuxt/ui/prose/index.ts +0 -41
  462. package/.nuxt/ui/prose/kbd.ts +0 -3
  463. package/.nuxt/ui/prose/li.ts +0 -3
  464. package/.nuxt/ui/prose/ol.ts +0 -3
  465. package/.nuxt/ui/prose/p.ts +0 -3
  466. package/.nuxt/ui/prose/pre.ts +0 -17
  467. package/.nuxt/ui/prose/steps.ts +0 -19
  468. package/.nuxt/ui/prose/strong.ts +0 -3
  469. package/.nuxt/ui/prose/table.ts +0 -6
  470. package/.nuxt/ui/prose/tabs-item.ts +0 -3
  471. package/.nuxt/ui/prose/tabs.ts +0 -5
  472. package/.nuxt/ui/prose/tbody.ts +0 -3
  473. package/.nuxt/ui/prose/td.ts +0 -3
  474. package/.nuxt/ui/prose/th.ts +0 -3
  475. package/.nuxt/ui/prose/thead.ts +0 -3
  476. package/.nuxt/ui/prose/tr.ts +0 -3
  477. package/.nuxt/ui/prose/ul.ts +0 -3
  478. package/.nuxt/ui/radio-group.ts +0 -350
  479. package/.nuxt/ui/select-menu.ts +0 -351
  480. package/.nuxt/ui/select.ts +0 -346
  481. package/.nuxt/ui/separator.ts +0 -172
  482. package/.nuxt/ui/skeleton.ts +0 -3
  483. package/.nuxt/ui/slideover.ts +0 -71
  484. package/.nuxt/ui/slider.ts +0 -171
  485. package/.nuxt/ui/stepper.ts +0 -202
  486. package/.nuxt/ui/switch.ts +0 -131
  487. package/.nuxt/ui/table.ts +0 -156
  488. package/.nuxt/ui/tabs.ts +0 -258
  489. package/.nuxt/ui/textarea.ts +0 -294
  490. package/.nuxt/ui/timeline.ts +0 -321
  491. package/.nuxt/ui/toast.ts +0 -74
  492. package/.nuxt/ui/toaster.ts +0 -91
  493. package/.nuxt/ui/tooltip.ts +0 -9
  494. package/.nuxt/ui/tree.ts +0 -154
  495. package/.nuxt/ui/user.ts +0 -101
  496. package/.nuxt/ui.css +0 -146
  497. package/dist/runtime/vue/components/color-mode/ColorModeButton.d.vue.ts +0 -17
  498. package/dist/runtime/vue/components/color-mode/ColorModeButton.vue +0 -35
  499. package/dist/runtime/vue/components/color-mode/ColorModeButton.vue.d.ts +0 -17
@@ -1,8 +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
+ import type { VirtualizerOptions } from '@tanstack/vue-virtual';
5
6
  import theme from '#build/ui/table';
7
+ import type { TableHTMLAttributes } from '../types/html';
6
8
  import type { ComponentConfig } from '../types/tv';
7
9
  declare module '@tanstack/table-core' {
8
10
  interface ColumnMeta<TData extends RowData, TValue> {
@@ -39,7 +41,7 @@ export interface TableOptions<T extends TableData = TableData> extends Omit<Core
39
41
  onStateChange?: CoreOptions<T>['onStateChange'];
40
42
  renderFallbackValue?: CoreOptions<T>['renderFallbackValue'];
41
43
  }
42
- export interface TableProps<T extends TableData = TableData> extends TableOptions<T> {
44
+ export interface TableProps<T extends TableData = TableData> extends TableOptions<T>, /** @vue-ignore */ TableHTMLAttributes {
43
45
  /**
44
46
  * The element or component this component should render as.
45
47
  * @defaultValue 'div'
@@ -49,6 +51,23 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
49
51
  columns?: TableColumn<T>[];
50
52
  caption?: string;
51
53
  meta?: TableMeta<T>;
54
+ /**
55
+ * Enable virtualization for large datasets.
56
+ * Note: when enabled, the divider between rows and sticky properties are not supported.
57
+ * @defaultValue false
58
+ */
59
+ virtualize?: boolean | (Partial<Omit<VirtualizerOptions<Element, Element>, 'getScrollElement' | 'count' | 'estimateSize' | 'overscan'>> & {
60
+ /**
61
+ * Number of items rendered outside the visible area
62
+ * @defaultValue 12
63
+ */
64
+ overscan?: number;
65
+ /**
66
+ * Estimated size (in px) of each item, or a function that returns the size for a given index
67
+ * @defaultValue 65
68
+ */
69
+ estimateSize?: number | ((index: number) => number);
70
+ });
52
71
  /**
53
72
  * The text to display when the table is empty.
54
73
  * @defaultValue t('table.noData')
@@ -56,6 +75,7 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
56
75
  empty?: string;
57
76
  /**
58
77
  * Whether the table should have a sticky header or footer. True for both, 'header' for header only, 'footer' for footer only.
78
+ * Note: this prop is not supported when `virtualize` is true.
59
79
  * @defaultValue false
60
80
  */
61
81
  sticky?: boolean | 'header' | 'footer';
@@ -136,7 +156,7 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
136
156
  * @see [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)
137
157
  */
138
158
  facetedOptions?: FacetedOptions<T>;
139
- onSelect?: (row: TableRow<T>, e?: Event) => void;
159
+ onSelect?: (e: Event, row: TableRow<T>) => void;
140
160
  onHover?: (e: Event, row: TableRow<T> | null) => void;
141
161
  onContextmenu?: ((e: Event, row: TableRow<T>) => void) | Array<((e: Event, row: TableRow<T>) => void)>;
142
162
  class?: any;
@@ -186,7 +206,8 @@ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Await
186
206
  "onUpdate:pagination"?: ((value: PaginationState) => any) | undefined;
187
207
  }> & import("vue").PublicProps;
188
208
  expose: (exposed: import("vue").ShallowUnwrapRef<{
189
- tableRef: Ref<HTMLTableElement | null, HTMLTableElement | null>;
209
+ readonly $el: HTMLElement;
210
+ tableRef: Readonly<import("vue").ShallowRef<HTMLTableElement | null>>;
190
211
  tableApi: import("@tanstack/table-core").Table<T>;
191
212
  }>) => void;
192
213
  attrs: any;
@@ -3,20 +3,24 @@ import theme from "#build/ui/table";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { computed, ref, watch } 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
+ import { defu } from "defu";
9
10
  import { FlexRender, getCoreRowModel, getFilteredRowModel, getSortedRowModel, getExpandedRowModel, useVueTable } from "@tanstack/vue-table";
10
- import { reactiveOmit } from "@vueuse/core";
11
+ import { useVirtualizer } from "@tanstack/vue-virtual";
12
+ import { reactiveOmit, createReusableTemplate } from "@vueuse/core";
11
13
  import { useAppConfig } from "#imports";
12
14
  import { useLocale } from "../composables/useLocale";
13
15
  import { tv } from "../utils/tv";
16
+ defineOptions({ inheritAttrs: false });
14
17
  const props = defineProps({
15
18
  as: { type: null, required: false },
16
19
  data: { type: Array, required: false },
17
20
  columns: { type: Array, required: false },
18
21
  caption: { type: String, required: false },
19
22
  meta: { type: Object, required: false },
23
+ virtualize: { type: [Boolean, Object], required: false, default: false },
20
24
  empty: { type: String, required: false },
21
25
  sticky: { type: [Boolean, String], required: false },
22
26
  loading: { type: Boolean, required: false },
@@ -84,11 +88,25 @@ function processColumns(columns2) {
84
88
  });
85
89
  }
86
90
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.table || {} })({
87
- sticky: props.sticky,
91
+ sticky: props.virtualize ? false : props.sticky,
88
92
  loading: props.loading,
89
93
  loadingColor: props.loadingColor,
90
- loadingAnimation: props.loadingAnimation
94
+ loadingAnimation: props.loadingAnimation,
95
+ virtualize: !!props.virtualize
91
96
  }));
97
+ const [DefineTableTemplate, ReuseTableTemplate] = createReusableTemplate();
98
+ const [DefineRowTemplate, ReuseRowTemplate] = createReusableTemplate({
99
+ props: {
100
+ row: {
101
+ type: Object,
102
+ required: true
103
+ },
104
+ style: {
105
+ type: Object,
106
+ required: false
107
+ }
108
+ }
109
+ });
92
110
  const hasFooter = computed(() => {
93
111
  function hasFooterRecursive(columns2) {
94
112
  for (const column of columns2) {
@@ -116,9 +134,10 @@ const sortingState = defineModel("sorting", { type: Array, ...{ default: [] } })
116
134
  const groupingState = defineModel("grouping", { type: Array, ...{ default: [] } });
117
135
  const expandedState = defineModel("expanded", { type: [Boolean, Object], ...{ default: {} } });
118
136
  const paginationState = defineModel("pagination", { type: Object, ...{ default: {} } });
119
- const tableRef = ref(null);
137
+ const rootRef = useTemplateRef("rootRef");
138
+ const tableRef = useTemplateRef("tableRef");
120
139
  const tableApi = useVueTable({
121
- ...reactiveOmit(props, "as", "data", "columns", "caption", "sticky", "loading", "loadingColor", "loadingAnimation", "class", "ui"),
140
+ ...reactiveOmit(props, "as", "data", "columns", "virtualize", "caption", "sticky", "loading", "loadingColor", "loadingAnimation", "class", "ui"),
122
141
  data,
123
142
  get columns() {
124
143
  return columns.value;
@@ -195,6 +214,32 @@ const tableApi = useVueTable({
195
214
  }
196
215
  }
197
216
  });
217
+ const rows = computed(() => tableApi.getRowModel().rows);
218
+ const virtualizerProps = toRef(() => defu(typeof props.virtualize === "boolean" ? {} : props.virtualize, {
219
+ estimateSize: 65,
220
+ overscan: 12
221
+ }));
222
+ const virtualizer = !!props.virtualize && useVirtualizer({
223
+ ...virtualizerProps.value,
224
+ get count() {
225
+ return rows.value.length;
226
+ },
227
+ getScrollElement: () => rootRef.value?.$el,
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);
242
+ });
198
243
  function valueUpdater(updaterOrValue, ref2) {
199
244
  ref2.value = typeof updaterOrValue === "function" ? updaterOrValue(ref2.value) : updaterOrValue;
200
245
  }
@@ -209,7 +254,7 @@ function onRowSelect(e, row) {
209
254
  }
210
255
  e.preventDefault();
211
256
  e.stopPropagation();
212
- props.onSelect(row, e);
257
+ props.onSelect(e, row);
213
258
  }
214
259
  function onRowHover(e, row) {
215
260
  if (!props.onHover) {
@@ -233,30 +278,78 @@ function resolveValue(prop, arg) {
233
278
  }
234
279
  return prop;
235
280
  }
236
- watch(
237
- () => props.data,
238
- () => {
239
- data.value = props.data ? [...props.data] : [];
240
- },
241
- props.watchOptions
242
- );
281
+ watch(() => props.data, () => {
282
+ data.value = props.data ? [...props.data] : [];
283
+ }, props.watchOptions);
243
284
  defineExpose({
285
+ get $el() {
286
+ return rootRef.value?.$el;
287
+ },
244
288
  tableRef,
245
289
  tableApi
246
290
  });
247
291
  </script>
248
292
 
249
293
  <template>
250
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
251
- <table ref="tableRef" :class="ui.base({ class: [props.ui?.base] })">
252
- <caption v-if="caption || !!slots.caption" :class="ui.caption({ class: [props.ui?.caption] })">
294
+ <DefineRowTemplate v-slot="{ row, style }">
295
+ <tr
296
+ :data-selected="row.getIsSelected()"
297
+ :data-selectable="!!props.onSelect || !!props.onHover || !!props.onContextmenu"
298
+ :data-expanded="row.getIsExpanded()"
299
+ :role="props.onSelect ? 'button' : void 0"
300
+ :tabindex="props.onSelect ? 0 : void 0"
301
+ data-slot="tr"
302
+ :class="ui.tr({
303
+ class: [
304
+ props.ui?.tr,
305
+ resolveValue(tableApi.options.meta?.class?.tr, row)
306
+ ]
307
+ })"
308
+ :style="[resolveValue(tableApi.options.meta?.style?.tr, row), style]"
309
+ @click="onRowSelect($event, row)"
310
+ @pointerenter="onRowHover($event, row)"
311
+ @pointerleave="onRowHover($event, null)"
312
+ @contextmenu="onRowContextmenu($event, row)"
313
+ >
314
+ <td
315
+ v-for="cell in row.getVisibleCells()"
316
+ :key="cell.id"
317
+ :data-pinned="cell.column.getIsPinned()"
318
+ :colspan="resolveValue(cell.column.columnDef.meta?.colspan?.td, cell)"
319
+ :rowspan="resolveValue(cell.column.columnDef.meta?.rowspan?.td, cell)"
320
+ data-slot="td"
321
+ :class="ui.td({
322
+ class: [
323
+ props.ui?.td,
324
+ resolveValue(cell.column.columnDef.meta?.class?.td, cell)
325
+ ],
326
+ pinned: !!cell.column.getIsPinned()
327
+ })"
328
+ :style="resolveValue(cell.column.columnDef.meta?.style?.td, cell)"
329
+ >
330
+ <slot :name="`${cell.column.id}-cell`" v-bind="cell.getContext()">
331
+ <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
332
+ </slot>
333
+ </td>
334
+ </tr>
335
+
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] })">
338
+ <slot name="expanded" :row="row" />
339
+ </td>
340
+ </tr>
341
+ </DefineRowTemplate>
342
+
343
+ <DefineTableTemplate>
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] })">
253
346
  <slot name="caption">
254
347
  {{ caption }}
255
348
  </slot>
256
349
  </caption>
257
350
 
258
- <thead :class="ui.thead({ class: [props.ui?.thead] })">
259
- <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] })">
260
353
  <th
261
354
  v-for="header in headerGroup.headers"
262
355
  :key="header.id"
@@ -264,6 +357,7 @@ defineExpose({
264
357
  :scope="header.colSpan > 1 ? 'colgroup' : 'col'"
265
358
  :colspan="header.colSpan > 1 ? header.colSpan : void 0"
266
359
  :rowspan="header.rowSpan > 1 ? header.rowSpan : void 0"
360
+ data-slot="th"
267
361
  :class="ui.th({
268
362
  class: [
269
363
  props.ui?.th,
@@ -271,6 +365,7 @@ defineExpose({
271
365
  ],
272
366
  pinned: !!header.column.getIsPinned()
273
367
  })"
368
+ :style="resolveValue(header.column.columnDef.meta?.style?.th, header)"
274
369
  >
275
370
  <slot :name="`${header.id}-header`" v-bind="header.getContext()">
276
371
  <FlexRender v-if="!header.isPlaceholder" :render="header.column.columnDef.header" :props="header.getContext()" />
@@ -278,68 +373,38 @@ defineExpose({
278
373
  </th>
279
374
  </tr>
280
375
 
281
- <tr :class="ui.separator({ class: [props.ui?.separator] })" />
376
+ <tr data-slot="separator" :class="ui.separator({ class: [props.ui?.separator] })" />
282
377
  </thead>
283
378
 
284
- <tbody :class="ui.tbody({ class: [props.ui?.tbody] })">
379
+ <tbody data-slot="tbody" :class="ui.tbody({ class: [props.ui?.tbody] })">
285
380
  <slot name="body-top" />
286
381
 
287
- <template v-if="tableApi.getRowModel().rows?.length">
288
- <template v-for="row in tableApi.getRowModel().rows" :key="row.id">
289
- <tr
290
- :data-selected="row.getIsSelected()"
291
- :data-selectable="!!props.onSelect || !!props.onHover || !!props.onContextmenu"
292
- :data-expanded="row.getIsExpanded()"
293
- :role="props.onSelect ? 'button' : void 0"
294
- :tabindex="props.onSelect ? 0 : void 0"
295
- :class="ui.tr({
296
- class: [
297
- props.ui?.tr,
298
- resolveValue(tableApi.options.meta?.class?.tr, row)
299
- ]
300
- })"
301
- :style="resolveValue(tableApi.options.meta?.style?.tr, row)"
302
- @click="onRowSelect($event, row)"
303
- @pointerenter="onRowHover($event, row)"
304
- @pointerleave="onRowHover($event, null)"
305
- @contextmenu="onRowContextmenu($event, row)"
306
- >
307
- <td
308
- v-for="cell in row.getVisibleCells()"
309
- :key="cell.id"
310
- :data-pinned="cell.column.getIsPinned()"
311
- :colspan="resolveValue(cell.column.columnDef.meta?.colspan?.td, cell)"
312
- :rowspan="resolveValue(cell.column.columnDef.meta?.rowspan?.td, cell)"
313
- :class="ui.td({
314
- class: [
315
- props.ui?.td,
316
- resolveValue(cell.column.columnDef.meta?.class?.td, cell)
317
- ],
318
- pinned: !!cell.column.getIsPinned()
319
- })"
320
- :style="resolveValue(cell.column.columnDef.meta?.style?.td, cell)"
321
- >
322
- <slot :name="`${cell.column.id}-cell`" v-bind="cell.getContext()">
323
- <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
324
- </slot>
325
- </td>
326
- </tr>
327
- <tr v-if="row.getIsExpanded()" :class="ui.tr({ class: [props.ui?.tr] })">
328
- <td :colspan="row.getAllCells().length" :class="ui.td({ class: [props.ui?.td] })">
329
- <slot name="expanded" :row="row" />
330
- </td>
331
- </tr>
382
+ <template v-if="rows.length">
383
+ <template v-if="virtualizer">
384
+ <template v-for="(virtualRow, index) in virtualizer.getVirtualItems()" :key="rows[virtualRow.index]?.id">
385
+ <ReuseRowTemplate
386
+ :row="rows[virtualRow.index]"
387
+ :style="{
388
+ height: `${virtualRow.size}px`,
389
+ transform: `translateY(${virtualRow.start - index * virtualRow.size}px)`
390
+ }"
391
+ />
392
+ </template>
393
+ </template>
394
+
395
+ <template v-else>
396
+ <ReuseRowTemplate v-for="row in rows" :key="row.id" :row="row" />
332
397
  </template>
333
398
  </template>
334
399
 
335
400
  <tr v-else-if="loading && !!slots['loading']">
336
- <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 })">
337
402
  <slot name="loading" />
338
403
  </td>
339
404
  </tr>
340
405
 
341
406
  <tr v-else>
342
- <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 })">
343
408
  <slot name="empty">
344
409
  {{ empty || t("table.noData") }}
345
410
  </slot>
@@ -349,16 +414,24 @@ defineExpose({
349
414
  <slot name="body-bottom" />
350
415
  </tbody>
351
416
 
352
- <tfoot v-if="hasFooter" :class="ui.tfoot({ class: [props.ui?.tfoot] })">
353
- <tr :class="ui.separator({ class: [props.ui?.separator] })" />
417
+ <tfoot
418
+ v-if="hasFooter"
419
+ data-slot="tfoot"
420
+ :class="ui.tfoot({ class: [props.ui?.tfoot] })"
421
+ :style="virtualizer ? {
422
+ transform: `translateY(${virtualizer.getTotalSize() - renderedSize}px)`
423
+ } : void 0"
424
+ >
425
+ <tr data-slot="separator" :class="ui.separator({ class: [props.ui?.separator] })" />
354
426
 
355
- <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] })">
356
428
  <th
357
429
  v-for="header in footerGroup.headers"
358
430
  :key="header.id"
359
431
  :data-pinned="header.column.getIsPinned()"
360
432
  :colspan="header.colSpan > 1 ? header.colSpan : void 0"
361
433
  :rowspan="header.rowSpan > 1 ? header.rowSpan : void 0"
434
+ data-slot="th"
362
435
  :class="ui.th({
363
436
  class: [
364
437
  props.ui?.th,
@@ -375,5 +448,17 @@ defineExpose({
375
448
  </tr>
376
449
  </tfoot>
377
450
  </table>
451
+ </DefineTableTemplate>
452
+
453
+ <Primitive ref="rootRef" :as="as" v-bind="$attrs" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
454
+ <div
455
+ v-if="virtualizer"
456
+ :style="{
457
+ height: `${virtualizer.getTotalSize()}px`
458
+ }"
459
+ >
460
+ <ReuseTableTemplate />
461
+ </div>
462
+ <ReuseTableTemplate v-else />
378
463
  </Primitive>
379
464
  </template>
@@ -1,8 +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
+ import type { VirtualizerOptions } from '@tanstack/vue-virtual';
5
6
  import theme from '#build/ui/table';
7
+ import type { TableHTMLAttributes } from '../types/html';
6
8
  import type { ComponentConfig } from '../types/tv';
7
9
  declare module '@tanstack/table-core' {
8
10
  interface ColumnMeta<TData extends RowData, TValue> {
@@ -39,7 +41,7 @@ export interface TableOptions<T extends TableData = TableData> extends Omit<Core
39
41
  onStateChange?: CoreOptions<T>['onStateChange'];
40
42
  renderFallbackValue?: CoreOptions<T>['renderFallbackValue'];
41
43
  }
42
- export interface TableProps<T extends TableData = TableData> extends TableOptions<T> {
44
+ export interface TableProps<T extends TableData = TableData> extends TableOptions<T>, /** @vue-ignore */ TableHTMLAttributes {
43
45
  /**
44
46
  * The element or component this component should render as.
45
47
  * @defaultValue 'div'
@@ -49,6 +51,23 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
49
51
  columns?: TableColumn<T>[];
50
52
  caption?: string;
51
53
  meta?: TableMeta<T>;
54
+ /**
55
+ * Enable virtualization for large datasets.
56
+ * Note: when enabled, the divider between rows and sticky properties are not supported.
57
+ * @defaultValue false
58
+ */
59
+ virtualize?: boolean | (Partial<Omit<VirtualizerOptions<Element, Element>, 'getScrollElement' | 'count' | 'estimateSize' | 'overscan'>> & {
60
+ /**
61
+ * Number of items rendered outside the visible area
62
+ * @defaultValue 12
63
+ */
64
+ overscan?: number;
65
+ /**
66
+ * Estimated size (in px) of each item, or a function that returns the size for a given index
67
+ * @defaultValue 65
68
+ */
69
+ estimateSize?: number | ((index: number) => number);
70
+ });
52
71
  /**
53
72
  * The text to display when the table is empty.
54
73
  * @defaultValue t('table.noData')
@@ -56,6 +75,7 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
56
75
  empty?: string;
57
76
  /**
58
77
  * Whether the table should have a sticky header or footer. True for both, 'header' for header only, 'footer' for footer only.
78
+ * Note: this prop is not supported when `virtualize` is true.
59
79
  * @defaultValue false
60
80
  */
61
81
  sticky?: boolean | 'header' | 'footer';
@@ -136,7 +156,7 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
136
156
  * @see [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)
137
157
  */
138
158
  facetedOptions?: FacetedOptions<T>;
139
- onSelect?: (row: TableRow<T>, e?: Event) => void;
159
+ onSelect?: (e: Event, row: TableRow<T>) => void;
140
160
  onHover?: (e: Event, row: TableRow<T> | null) => void;
141
161
  onContextmenu?: ((e: Event, row: TableRow<T>) => void) | Array<((e: Event, row: TableRow<T>) => void)>;
142
162
  class?: any;
@@ -186,7 +206,8 @@ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Await
186
206
  "onUpdate:pagination"?: ((value: PaginationState) => any) | undefined;
187
207
  }> & import("vue").PublicProps;
188
208
  expose: (exposed: import("vue").ShallowUnwrapRef<{
189
- tableRef: Ref<HTMLTableElement | null, HTMLTableElement | null>;
209
+ readonly $el: HTMLElement;
210
+ tableRef: Readonly<import("vue").ShallowRef<HTMLTableElement | null>>;
190
211
  tableApi: import("@tanstack/table-core").Table<T>;
191
212
  }>) => void;
192
213
  attrs: any;
@@ -69,16 +69,21 @@ export interface TabsEmits extends TabsRootEmits<string | number> {
69
69
  type SlotProps<T extends TabsItem> = (props: {
70
70
  item: T;
71
71
  index: number;
72
+ ui: Tabs['ui'];
72
73
  }) => any;
73
74
  export type TabsSlots<T extends TabsItem = TabsItem> = {
74
75
  'leading': SlotProps<T>;
75
- 'default': SlotProps<T>;
76
+ 'default'(props: {
77
+ item: T;
78
+ index: number;
79
+ }): any;
76
80
  'trailing': SlotProps<T>;
77
81
  'content': SlotProps<T>;
78
- 'list-leading': (props?: {}) => any;
79
- 'list-trailing': (props?: {}) => any;
82
+ 'list-leading'(props?: {}): any;
83
+ 'list-trailing'(props?: {}): any;
80
84
  } & DynamicSlots<T, undefined, {
81
85
  index: number;
86
+ ui: Tabs['ui'];
82
87
  }>;
83
88
  declare const __VLS_export: <T extends TabsItem>(__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<{
84
89
  props: __VLS_PrettifyLocal<TabsProps<T> & {
@@ -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
- <slot name="leading" :item="item" :index="index">
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] })" />
71
+ <slot name="leading" :item="item" :index="index" :ui="ui">
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
- <slot name="trailing" :item="item" :index="index">
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,8 +94,8 @@ 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] })">
95
- <slot :name="item.slot || 'content'" :item="item" :index="index">
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] })">
98
+ <slot :name="item.slot || 'content'" :item="item" :index="index" :ui="ui">
96
99
  {{ item.content }}
97
100
  </slot>
98
101
  </TabsContent>
@@ -69,16 +69,21 @@ export interface TabsEmits extends TabsRootEmits<string | number> {
69
69
  type SlotProps<T extends TabsItem> = (props: {
70
70
  item: T;
71
71
  index: number;
72
+ ui: Tabs['ui'];
72
73
  }) => any;
73
74
  export type TabsSlots<T extends TabsItem = TabsItem> = {
74
75
  'leading': SlotProps<T>;
75
- 'default': SlotProps<T>;
76
+ 'default'(props: {
77
+ item: T;
78
+ index: number;
79
+ }): any;
76
80
  'trailing': SlotProps<T>;
77
81
  'content': SlotProps<T>;
78
- 'list-leading': (props?: {}) => any;
79
- 'list-trailing': (props?: {}) => any;
82
+ 'list-leading'(props?: {}): any;
83
+ 'list-trailing'(props?: {}): any;
80
84
  } & DynamicSlots<T, undefined, {
81
85
  index: number;
86
+ ui: Tabs['ui'];
82
87
  }>;
83
88
  declare const __VLS_export: <T extends TabsItem>(__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<{
84
89
  props: __VLS_PrettifyLocal<TabsProps<T> & {
@@ -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
  }
@@ -49,22 +50,28 @@ export interface TextareaEmits<T extends TextareaValue = TextareaValue> {
49
50
  'change': [event: Event];
50
51
  }
51
52
  export interface TextareaSlots {
52
- leading(props?: {}): any;
53
- default(props?: {}): any;
54
- trailing(props?: {}): any;
53
+ leading(props: {
54
+ ui: Textarea['ui'];
55
+ }): any;
56
+ default(props: {
57
+ ui: Textarea['ui'];
58
+ }): any;
59
+ trailing(props: {
60
+ ui: Textarea['ui'];
61
+ }): any;
55
62
  }
56
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<{
57
64
  props: __VLS_PrettifyLocal<TextareaProps<T> & {
58
- onBlur?: ((event: FocusEvent) => any) | undefined;
59
65
  onChange?: ((event: Event) => any) | undefined;
66
+ onBlur?: ((event: FocusEvent) => any) | undefined;
60
67
  "onUpdate:modelValue"?: ((value: T) => any) | undefined;
61
68
  }> & import("vue").PublicProps;
62
69
  expose: (exposed: import("vue").ShallowUnwrapRef<{
63
- textareaRef: import("vue").Ref<HTMLTextAreaElement | null, HTMLTextAreaElement | null>;
70
+ textareaRef: Readonly<import("vue").ShallowRef<HTMLTextAreaElement | null>>;
64
71
  }>) => void;
65
72
  attrs: any;
66
73
  slots: TextareaSlots;
67
- 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);
68
75
  }>) => import("vue").VNode & {
69
76
  __ctx?: Awaited<typeof __VLS_setup>;
70
77
  };