@byyuurin/ui 0.0.11 → 0.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 (297) hide show
  1. package/README.md +170 -58
  2. package/dist/module.d.mts +4 -13
  3. package/dist/module.json +4 -4
  4. package/dist/module.mjs +54 -20
  5. package/dist/runtime/components/Accordion.vue +28 -23
  6. package/dist/runtime/components/Accordion.vue.d.ts +51 -29
  7. package/dist/runtime/components/Alert.vue +47 -27
  8. package/dist/runtime/components/Alert.vue.d.ts +37 -25
  9. package/dist/runtime/components/App.vue +9 -8
  10. package/dist/runtime/components/App.vue.d.ts +22 -20
  11. package/dist/runtime/components/Avatar.vue +65 -21
  12. package/dist/runtime/components/Avatar.vue.d.ts +27 -13
  13. package/dist/runtime/components/AvatarGroup.vue +14 -10
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +12 -9
  15. package/dist/runtime/components/Badge.vue +64 -32
  16. package/dist/runtime/components/Badge.vue.d.ts +30 -29
  17. package/dist/runtime/components/Breadcrumb.vue +40 -22
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +48 -21
  19. package/dist/runtime/components/Button.vue +113 -52
  20. package/dist/runtime/components/Button.vue.d.ts +36 -20
  21. package/dist/runtime/components/Calendar.vue +50 -43
  22. package/dist/runtime/components/Calendar.vue.d.ts +58 -31
  23. package/dist/runtime/components/Card.vue +18 -14
  24. package/dist/runtime/components/Card.vue.d.ts +18 -14
  25. package/dist/runtime/components/Carousel.vue +99 -46
  26. package/dist/runtime/components/Carousel.vue.d.ts +46 -25
  27. package/dist/runtime/components/Checkbox.vue +60 -35
  28. package/dist/runtime/components/Checkbox.vue.d.ts +35 -28
  29. package/dist/runtime/components/CheckboxGroup.vue +131 -0
  30. package/dist/runtime/components/CheckboxGroup.vue.d.ts +89 -0
  31. package/dist/runtime/components/Chip.vue +35 -32
  32. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  33. package/dist/runtime/components/Collapsible.vue +13 -9
  34. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  35. package/dist/runtime/components/Drawer.vue +80 -70
  36. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  37. package/dist/runtime/components/DropdownMenu.vue +23 -16
  38. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  39. package/dist/runtime/components/DropdownMenuContent.vue +136 -106
  40. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  41. package/dist/runtime/components/FieldGroup.vue +33 -0
  42. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  43. package/dist/runtime/components/Form.vue +172 -88
  44. package/dist/runtime/components/Form.vue.d.ts +69 -44
  45. package/dist/runtime/components/FormField.vue +108 -0
  46. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  47. package/dist/runtime/components/Icon.vue +20 -0
  48. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  49. package/dist/runtime/components/Input.vue +84 -79
  50. package/dist/runtime/components/Input.vue.d.ts +55 -43
  51. package/dist/runtime/components/InputNumber.vue +66 -52
  52. package/dist/runtime/components/InputNumber.vue.d.ts +50 -109
  53. package/dist/runtime/components/InputTags.vue +155 -0
  54. package/dist/runtime/components/InputTags.vue.d.ts +85 -0
  55. package/dist/runtime/components/Kbd.vue +11 -5
  56. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  57. package/dist/runtime/components/Link.vue +54 -197
  58. package/dist/runtime/components/Link.vue.d.ts +17 -17
  59. package/dist/runtime/components/LinkBase.vue +11 -33
  60. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  61. package/dist/runtime/components/Marquee.vue +38 -0
  62. package/dist/runtime/components/Marquee.vue.d.ts +54 -0
  63. package/dist/runtime/components/Modal.vue +53 -39
  64. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  65. package/dist/runtime/components/NavigationMenu.vue +345 -0
  66. package/dist/runtime/components/NavigationMenu.vue.d.ts +216 -0
  67. package/dist/runtime/components/OverlayProvider.vue +3 -3
  68. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  69. package/dist/runtime/components/Pagination.vue +39 -47
  70. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  71. package/dist/runtime/components/PinInput.vue +46 -32
  72. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  73. package/dist/runtime/components/Popover.vue +33 -19
  74. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  75. package/dist/runtime/components/Progress.vue +31 -26
  76. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  77. package/dist/runtime/components/RadioGroup.vue +75 -48
  78. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  79. package/dist/runtime/components/ScrollArea.vue +33 -31
  80. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  81. package/dist/runtime/components/Select.vue +166 -76
  82. package/dist/runtime/components/Select.vue.d.ts +206 -65
  83. package/dist/runtime/components/Separator.vue +42 -16
  84. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  85. package/dist/runtime/components/Skeleton.vue +18 -6
  86. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  87. package/dist/runtime/components/Slider.vue +42 -24
  88. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  89. package/dist/runtime/components/Switch.vue +40 -31
  90. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  91. package/dist/runtime/components/Table.vue +329 -79
  92. package/dist/runtime/components/Table.vue.d.ts +152 -66
  93. package/dist/runtime/components/Tabs.vue +70 -23
  94. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  95. package/dist/runtime/components/Textarea.vue +102 -54
  96. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  97. package/dist/runtime/components/Timeline.vue +102 -0
  98. package/dist/runtime/components/Timeline.vue.d.ts +74 -0
  99. package/dist/runtime/components/Toast.vue +84 -38
  100. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  101. package/dist/runtime/components/ToastProvider.vue +31 -22
  102. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  103. package/dist/runtime/components/Tooltip.vue +33 -21
  104. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  105. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  106. package/dist/runtime/composables/defineShortcuts.js +129 -0
  107. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  108. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  109. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  110. package/dist/runtime/composables/useComponentIcons.js +4 -4
  111. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  112. package/dist/runtime/composables/useFieldGroup.js +14 -0
  113. package/dist/runtime/composables/useFormField.d.ts +62 -0
  114. package/dist/runtime/composables/useFormField.js +99 -0
  115. package/dist/runtime/composables/useKbd.d.ts +3 -2
  116. package/dist/runtime/composables/useKbd.js +3 -2
  117. package/dist/runtime/composables/useLocale.d.ts +68 -5
  118. package/dist/runtime/composables/useLocale.js +11 -11
  119. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  120. package/dist/runtime/composables/useOverlay.js +44 -30
  121. package/dist/runtime/composables/usePortal.d.ts +6 -0
  122. package/dist/runtime/composables/usePortal.js +17 -0
  123. package/dist/runtime/composables/useToast.d.ts +12 -5
  124. package/dist/runtime/composables/useToast.js +12 -7
  125. package/dist/runtime/locale/en.d.ts +30 -1
  126. package/dist/runtime/locale/en.js +2 -1
  127. package/dist/runtime/locale/index.d.ts +2 -2
  128. package/dist/runtime/locale/index.js +1 -1
  129. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  130. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  131. package/dist/runtime/plugins/colors.d.ts +2 -0
  132. package/dist/runtime/plugins/colors.js +50 -0
  133. package/dist/runtime/types/app.config.d.ts +6 -0
  134. package/dist/runtime/types/form.d.ts +58 -17
  135. package/dist/runtime/types/form.js +11 -0
  136. package/dist/runtime/types/index.d.ts +56 -8
  137. package/dist/runtime/types/index.js +49 -1
  138. package/dist/runtime/types/input.d.ts +8 -0
  139. package/dist/runtime/types/locale.d.ts +5 -0
  140. package/dist/runtime/types/style.d.ts +33 -0
  141. package/dist/runtime/types/style.js +0 -0
  142. package/dist/runtime/types/unocss.d.ts +4 -0
  143. package/dist/runtime/types/utils.d.ts +41 -37
  144. package/dist/runtime/utils/form.d.ts +5 -1
  145. package/dist/runtime/utils/form.js +49 -0
  146. package/dist/runtime/utils/index.d.ts +10 -13
  147. package/dist/runtime/utils/index.js +41 -48
  148. package/dist/runtime/utils/link.d.ts +3 -2
  149. package/dist/runtime/utils/link.js +16 -2
  150. package/dist/runtime/utils/locale.d.ts +5 -0
  151. package/dist/runtime/utils/locale.js +10 -0
  152. package/dist/runtime/utils/style.d.ts +94 -0
  153. package/dist/runtime/utils/style.js +37 -0
  154. package/dist/runtime/vue/components/Icon.vue +15 -0
  155. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  156. package/dist/runtime/vue/components/Link.vue +163 -0
  157. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  158. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  159. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  160. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  161. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  162. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  163. package/dist/runtime/vue/plugins/head.js +9 -0
  164. package/dist/runtime/vue/stubs.d.ts +16 -1
  165. package/dist/runtime/vue/stubs.js +32 -1
  166. package/dist/setup.d.mts +13 -0
  167. package/dist/setup.mjs +12 -0
  168. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  169. package/dist/shared/ui.DLOxhmP0.mjs +4242 -0
  170. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  171. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  172. package/dist/types.d.mts +3 -1
  173. package/dist/unocss.d.mts +12 -52
  174. package/dist/unocss.mjs +144 -254
  175. package/dist/unplugin.d.mts +13 -26
  176. package/dist/unplugin.mjs +193 -18
  177. package/dist/vite.d.mts +10 -1
  178. package/dist/vite.mjs +12 -3
  179. package/package.json +154 -87
  180. package/vue-plugin.d.ts +5 -0
  181. package/dist/module.d.ts +0 -13
  182. package/dist/module.mjs.map +0 -1
  183. package/dist/runtime/app/injections.d.ts +0 -9331
  184. package/dist/runtime/app/injections.js +0 -61
  185. package/dist/runtime/components/ButtonGroup.vue +0 -26
  186. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  187. package/dist/runtime/components/FormItem.vue +0 -90
  188. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  189. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  190. package/dist/runtime/composables/useButtonGroup.js +0 -9
  191. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  192. package/dist/runtime/composables/useFormItem.js +0 -64
  193. package/dist/runtime/composables/useTheme.d.ts +0 -9
  194. package/dist/runtime/composables/useTheme.js +0 -23
  195. package/dist/runtime/index.d.ts +0 -44
  196. package/dist/runtime/index.js +0 -44
  197. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  198. package/dist/runtime/theme/accordion.d.ts +0 -50
  199. package/dist/runtime/theme/accordion.js +0 -28
  200. package/dist/runtime/theme/alert.d.ts +0 -119
  201. package/dist/runtime/theme/alert.js +0 -47
  202. package/dist/runtime/theme/app.d.ts +0 -19
  203. package/dist/runtime/theme/app.js +0 -19
  204. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  205. package/dist/runtime/theme/avatar-group.js +0 -32
  206. package/dist/runtime/theme/avatar.d.ts +0 -50
  207. package/dist/runtime/theme/avatar.js +0 -34
  208. package/dist/runtime/theme/badge.d.ts +0 -76
  209. package/dist/runtime/theme/badge.js +0 -92
  210. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  211. package/dist/runtime/theme/breadcrumb.js +0 -44
  212. package/dist/runtime/theme/button-group.d.ts +0 -60
  213. package/dist/runtime/theme/button-group.js +0 -42
  214. package/dist/runtime/theme/button.d.ts +0 -184
  215. package/dist/runtime/theme/button.js +0 -164
  216. package/dist/runtime/theme/calendar.d.ts +0 -58
  217. package/dist/runtime/theme/calendar.js +0 -86
  218. package/dist/runtime/theme/card.d.ts +0 -56
  219. package/dist/runtime/theme/card.js +0 -37
  220. package/dist/runtime/theme/carousel.d.ts +0 -107
  221. package/dist/runtime/theme/carousel.js +0 -43
  222. package/dist/runtime/theme/checkbox.d.ts +0 -82
  223. package/dist/runtime/theme/checkbox.js +0 -54
  224. package/dist/runtime/theme/chip.d.ts +0 -61
  225. package/dist/runtime/theme/chip.js +0 -66
  226. package/dist/runtime/theme/collapsible.d.ts +0 -32
  227. package/dist/runtime/theme/collapsible.js +0 -10
  228. package/dist/runtime/theme/drawer.d.ts +0 -142
  229. package/dist/runtime/theme/drawer.js +0 -113
  230. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  231. package/dist/runtime/theme/dropdown-menu.js +0 -83
  232. package/dist/runtime/theme/form-item.d.ts +0 -70
  233. package/dist/runtime/theme/form-item.js +0 -34
  234. package/dist/runtime/theme/form.d.ts +0 -2
  235. package/dist/runtime/theme/form.js +0 -7
  236. package/dist/runtime/theme/index.d.ts +0 -41
  237. package/dist/runtime/theme/index.js +0 -41
  238. package/dist/runtime/theme/input-number.d.ts +0 -115
  239. package/dist/runtime/theme/input-number.js +0 -95
  240. package/dist/runtime/theme/input.d.ts +0 -172
  241. package/dist/runtime/theme/input.js +0 -151
  242. package/dist/runtime/theme/kbd.d.ts +0 -33
  243. package/dist/runtime/theme/kbd.js +0 -26
  244. package/dist/runtime/theme/link.d.ts +0 -38
  245. package/dist/runtime/theme/link.js +0 -26
  246. package/dist/runtime/theme/modal.d.ts +0 -42
  247. package/dist/runtime/theme/modal.js +0 -55
  248. package/dist/runtime/theme/pagination.d.ts +0 -74
  249. package/dist/runtime/theme/pagination.js +0 -17
  250. package/dist/runtime/theme/pinInput.d.ts +0 -94
  251. package/dist/runtime/theme/pinInput.js +0 -111
  252. package/dist/runtime/theme/popover.d.ts +0 -32
  253. package/dist/runtime/theme/popover.js +0 -13
  254. package/dist/runtime/theme/progress.d.ts +0 -180
  255. package/dist/runtime/theme/progress.js +0 -95
  256. package/dist/runtime/theme/radio-group.d.ts +0 -104
  257. package/dist/runtime/theme/radio-group.js +0 -61
  258. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  259. package/dist/runtime/theme/scroll-area.js +0 -33
  260. package/dist/runtime/theme/select.d.ts +0 -186
  261. package/dist/runtime/theme/select.js +0 -173
  262. package/dist/runtime/theme/separator.d.ts +0 -74
  263. package/dist/runtime/theme/separator.js +0 -53
  264. package/dist/runtime/theme/skeleton.d.ts +0 -2
  265. package/dist/runtime/theme/skeleton.js +0 -7
  266. package/dist/runtime/theme/slider.d.ts +0 -70
  267. package/dist/runtime/theme/slider.js +0 -52
  268. package/dist/runtime/theme/switch.d.ts +0 -116
  269. package/dist/runtime/theme/switch.js +0 -78
  270. package/dist/runtime/theme/table.d.ts +0 -86
  271. package/dist/runtime/theme/table.js +0 -36
  272. package/dist/runtime/theme/tabs.d.ts +0 -129
  273. package/dist/runtime/theme/tabs.js +0 -146
  274. package/dist/runtime/theme/textarea.d.ts +0 -90
  275. package/dist/runtime/theme/textarea.js +0 -116
  276. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  277. package/dist/runtime/theme/toast-provider.js +0 -97
  278. package/dist/runtime/theme/toast.d.ts +0 -83
  279. package/dist/runtime/theme/toast.js +0 -35
  280. package/dist/runtime/theme/tooltip.d.ts +0 -38
  281. package/dist/runtime/theme/tooltip.js +0 -11
  282. package/dist/runtime/types/components.d.ts +0 -42
  283. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  284. package/dist/runtime/utils/extend-theme.js +0 -27
  285. package/dist/runtime/utils/styler.d.ts +0 -4
  286. package/dist/runtime/utils/styler.js +0 -10
  287. package/dist/runtime/utils/translator.d.ts +0 -18
  288. package/dist/runtime/utils/translator.js +0 -8
  289. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  290. package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
  291. package/dist/unocss.d.ts +0 -52
  292. package/dist/unocss.mjs.map +0 -1
  293. package/dist/unplugin.d.ts +0 -26
  294. package/dist/unplugin.mjs.map +0 -1
  295. package/dist/vite.d.ts +0 -9
  296. package/dist/vite.mjs.map +0 -1
  297. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -1,23 +1,47 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/table";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { FlexRender, getCoreRowModel, getExpandedRowModel, getFilteredRowModel, getSortedRowModel, useVueTable } from "@tanstack/vue-table";
7
- import { reactiveOmit } from "@vueuse/core";
8
- import { Primitive } from "reka-ui";
7
+ import { useVirtualizer } from "@tanstack/vue-virtual";
8
+ import { createReusableTemplate, reactivePick } from "@vueuse/core";
9
+ import { defu } from "defu";
10
+ import { Primitive, useForwardProps } from "reka-ui";
9
11
  import { upperFirst } from "scule";
10
- import { computed } from "vue";
12
+ import { computed, ref, shallowRef, toRef, watch } from "vue";
13
+ import { useAppConfig } from "#imports";
11
14
  import { useLocale } from "../composables/useLocale";
12
- import { useTheme } from "../composables/useTheme";
15
+ import { cv, merge } from "../utils/style";
16
+ defineOptions({ inheritAttrs: false });
13
17
  const props = defineProps({
14
18
  as: { type: null, required: false },
15
19
  data: { type: Array, required: false },
16
20
  columns: { type: Array, required: false },
17
21
  caption: { type: String, required: false },
22
+ meta: { type: Object, required: false },
23
+ virtualize: { type: [Boolean, Object], required: false, default: false },
18
24
  empty: { type: String, required: false },
19
- sticky: { type: Boolean, required: false },
25
+ sticky: { type: [Boolean, String], required: false },
20
26
  loading: { type: Boolean, required: false },
27
+ loadingColor: { type: null, required: false },
28
+ loadingAnimation: { type: null, required: false },
29
+ globalFilter: { type: String, required: false },
30
+ columnFilters: { type: Array, required: false },
31
+ columnOrder: { type: Array, required: false },
32
+ columnVisibility: { type: Object, required: false },
33
+ columnPinning: { type: Object, required: false },
34
+ columnSizing: { type: Object, required: false },
35
+ columnSizingInfo: { type: Object, required: false },
36
+ rowSelection: { type: Object, required: false },
37
+ rowPinning: { type: Object, required: false },
38
+ sorting: { type: Array, required: false },
39
+ grouping: { type: Array, required: false },
40
+ expanded: { type: [Boolean, Object], required: false },
41
+ pagination: { type: Object, required: false },
42
+ watchOptions: { type: Object, required: false, default: () => ({
43
+ deep: true
44
+ }) },
21
45
  globalFilterOptions: { type: Object, required: false },
22
46
  columnFiltersOptions: { type: Object, required: false },
23
47
  columnPinningOptions: { type: Object, required: false },
@@ -30,8 +54,11 @@ const props = defineProps({
30
54
  rowPinningOptions: { type: Object, required: false },
31
55
  paginationOptions: { type: Object, required: false },
32
56
  facetedOptions: { type: Object, required: false },
33
- class: { type: null, required: false },
57
+ onSelect: { type: Function, required: false },
58
+ onHover: { type: Function, required: false },
59
+ onContextmenu: { type: [Function, Array], required: false },
34
60
  ui: { type: null, required: false },
61
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
35
62
  state: { type: Object, required: false },
36
63
  onStateChange: { type: Function, required: false },
37
64
  renderFallbackValue: { type: null, required: false },
@@ -47,61 +74,108 @@ const props = defineProps({
47
74
  getRowId: { type: Function, required: false },
48
75
  getSubRows: { type: Function, required: false },
49
76
  initialState: { type: Object, required: false },
50
- mergeOptions: { type: Function, required: false },
51
- meta: { type: Object, required: false }
77
+ mergeOptions: { type: Function, required: false }
52
78
  });
53
79
  const slots = defineSlots();
54
- const globalFilterState = defineModel("globalFilter", { type: String, ...{ default: void 0 } });
55
- const columnFiltersState = defineModel("columnFilters", { type: Array, ...{ default: [] } });
56
- const columnOrderState = defineModel("columnOrder", { type: Array, ...{ default: [] } });
57
- const columnVisibilityState = defineModel("columnVisibility", { type: Object, ...{ default: {} } });
58
- const columnPinningState = defineModel("columnPinning", { type: Object, ...{ default: {} } });
59
- const columnSizingState = defineModel("columnSizing", { type: Object, ...{ default: {} } });
60
- const columnSizingInfoState = defineModel("columnSizingInfo", { type: Object, ...{ default: {} } });
61
- const rowSelectionState = defineModel("rowSelection", { type: Object, ...{ default: {} } });
62
- const rowPinningState = defineModel("rowPinning", { type: Object, ...{ default: {} } });
63
- const sortingState = defineModel("sorting", { type: Array, ...{ default: [] } });
64
- const groupingState = defineModel("grouping", { type: Array, ...{ default: [] } });
65
- const expandedState = defineModel("expanded", { type: [Boolean, Object], ...{ default: {} } });
66
- const paginationState = defineModel("pagination", { type: Object, ...{ default: {} } });
67
- const data = computed(() => props.data ?? []);
80
+ const [DefineTableTemplate, ReuseTableTemplate] = createReusableTemplate();
81
+ const [DefineRowTemplate, ReuseRowTemplate] = createReusableTemplate({
82
+ props: {
83
+ row: {
84
+ type: Object,
85
+ required: true
86
+ },
87
+ style: {
88
+ type: Object,
89
+ required: false
90
+ }
91
+ }
92
+ });
93
+ const globalFilterState = defineModel("globalFilter", { type: String });
94
+ const columnFiltersState = defineModel("columnFilters", { type: Array });
95
+ const columnOrderState = defineModel("columnOrder", { type: Array });
96
+ const columnVisibilityState = defineModel("columnVisibility", { type: Object });
97
+ const columnPinningState = defineModel("columnPinning", { type: Object });
98
+ const columnSizingState = defineModel("columnSizing", { type: Object });
99
+ const columnSizingInfoState = defineModel("columnSizingInfo", { type: Object });
100
+ const rowSelectionState = defineModel("rowSelection", { type: Object });
101
+ const rowPinningState = defineModel("rowPinning", { type: Object });
102
+ const sortingState = defineModel("sorting", { type: Array });
103
+ const groupingState = defineModel("grouping", { type: Array });
104
+ const expandedState = defineModel("expanded", { type: [Boolean, Object] });
105
+ const paginationState = defineModel("pagination", { type: Object });
106
+ const rootRef = shallowRef();
107
+ const tableRef = shallowRef(null);
108
+ const data = ref(props.data ?? []);
109
+ const meta = computed(() => props.meta ?? {});
68
110
  const columns = computed(
69
- () => props.columns ?? Object.keys(data.value[0] ?? {}).map(
70
- (accessorKey) => ({ accessorKey, header: upperFirst(accessorKey) })
71
- )
111
+ () => processColumns(props.columns ?? Object.keys(data.value[0] ?? {}).map((accessorKey) => ({ accessorKey, header: upperFirst(accessorKey) })))
72
112
  );
113
+ function processColumns(columns2) {
114
+ return columns2.map((column) => {
115
+ const col = { ...column };
116
+ if ("columns" in col && col.columns)
117
+ col.columns = processColumns(col.columns);
118
+ if (!col.cell) {
119
+ col.cell = ({ getValue }) => {
120
+ const value = getValue();
121
+ if (value === "" || value === null || value === void 0)
122
+ return "\xA0";
123
+ return String(value);
124
+ };
125
+ }
126
+ return col;
127
+ });
128
+ }
129
+ const hasFooter = computed(() => {
130
+ function hasFooterRecursive(columns2) {
131
+ for (const column of columns2) {
132
+ if ("footer" in column)
133
+ return true;
134
+ if ("columns" in column && hasFooterRecursive(column.columns))
135
+ return true;
136
+ }
137
+ return false;
138
+ }
139
+ return hasFooterRecursive(columns.value);
140
+ });
141
+ const tableProps = useForwardProps(reactivePick(props, "_features", "autoResetAll", "debugAll", "debugCells", "debugColumns", "debugHeaders", "debugRows", "debugTable", "defaultColumn", "getRowId", "getSubRows", "initialState", "mergeOptions", "renderFallbackValue"));
73
142
  const tableApi = useVueTable({
74
- ...reactiveOmit(props, "data", "columns", "caption", "sticky", "loading", "class", "ui"),
75
- data,
76
- columns: columns.value,
143
+ ...tableProps.value,
144
+ get data() {
145
+ return data.value;
146
+ },
147
+ get columns() {
148
+ return columns.value;
149
+ },
150
+ meta: meta.value,
77
151
  getCoreRowModel: getCoreRowModel(),
78
152
  ...props.globalFilterOptions,
79
- onGlobalFilterChange: (updaterOrValue) => valueUpdater(updaterOrValue, globalFilterState),
153
+ ...globalFilterState.value !== void 0 && { onGlobalFilterChange: (updaterOrValue) => valueUpdater(updaterOrValue, globalFilterState) },
80
154
  ...props.columnFiltersOptions,
81
155
  getFilteredRowModel: getFilteredRowModel(),
82
- onColumnFiltersChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnFiltersState),
83
- onColumnOrderChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnOrderState),
156
+ ...columnFiltersState.value !== void 0 && { onColumnFiltersChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnFiltersState) },
157
+ ...columnOrderState.value !== void 0 && { onColumnOrderChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnOrderState) },
84
158
  ...props.visibilityOptions,
85
- onColumnVisibilityChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnVisibilityState),
159
+ ...columnVisibilityState.value !== void 0 && { onColumnVisibilityChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnVisibilityState) },
86
160
  ...props.columnPinningOptions,
87
- onColumnPinningChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnPinningState),
161
+ ...columnPinningState.value !== void 0 && { onColumnPinningChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnPinningState) },
88
162
  ...props.columnSizingOptions,
89
- onColumnSizingChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnSizingState),
90
- onColumnSizingInfoChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnSizingInfoState),
163
+ ...columnSizingState.value !== void 0 && { onColumnSizingChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnSizingState) },
164
+ ...columnSizingInfoState.value !== void 0 && { onColumnSizingInfoChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnSizingInfoState) },
91
165
  ...props.rowSelectionOptions,
92
- onRowSelectionChange: (updaterOrValue) => valueUpdater(updaterOrValue, rowSelectionState),
166
+ ...rowSelectionState.value !== void 0 && { onRowSelectionChange: (updaterOrValue) => valueUpdater(updaterOrValue, rowSelectionState) },
93
167
  ...props.rowPinningOptions,
94
- onRowPinningChange: (updaterOrValue) => valueUpdater(updaterOrValue, rowPinningState),
168
+ ...rowPinningState.value !== void 0 && { onRowPinningChange: (updaterOrValue) => valueUpdater(updaterOrValue, rowPinningState) },
95
169
  ...props.sortingOptions,
96
170
  getSortedRowModel: getSortedRowModel(),
97
- onSortingChange: (updaterOrValue) => valueUpdater(updaterOrValue, sortingState),
171
+ ...sortingState.value !== void 0 && { onSortingChange: (updaterOrValue) => valueUpdater(updaterOrValue, sortingState) },
98
172
  ...props.groupingOptions,
99
- onGroupingChange: (updaterOrValue) => valueUpdater(updaterOrValue, groupingState),
173
+ ...groupingState.value !== void 0 && { onGroupingChange: (updaterOrValue) => valueUpdater(updaterOrValue, groupingState) },
100
174
  ...props.expandedOptions,
101
175
  getExpandedRowModel: getExpandedRowModel(),
102
- onExpandedChange: (updaterOrValue) => valueUpdater(updaterOrValue, expandedState),
176
+ ...expandedState.value !== void 0 && { onExpandedChange: (updaterOrValue) => valueUpdater(updaterOrValue, expandedState) },
103
177
  ...props.paginationOptions,
104
- onPaginationChange: (updaterOrValue) => valueUpdater(updaterOrValue, paginationState),
178
+ ...paginationState.value !== void 0 && { onPaginationChange: (updaterOrValue) => valueUpdater(updaterOrValue, paginationState) },
105
179
  ...props.facetedOptions,
106
180
  state: {
107
181
  get globalFilter() {
@@ -145,80 +219,256 @@ const tableApi = useVueTable({
145
219
  }
146
220
  }
147
221
  });
148
- function valueUpdater(updaterOrValue, ref) {
149
- ref.value = typeof updaterOrValue === "function" ? updaterOrValue(ref.value) : updaterOrValue;
222
+ const rows = computed(() => tableApi.getRowModel().rows);
223
+ const virtualizerProps = toRef(() => defu(typeof props.virtualize === "boolean" ? {} : props.virtualize, {
224
+ estimateSize: 65,
225
+ overscan: 12
226
+ }));
227
+ const virtualizer = !!props.virtualize && useVirtualizer({
228
+ ...virtualizerProps.value,
229
+ get count() {
230
+ return rows.value.length;
231
+ },
232
+ getScrollElement: () => rootRef.value?.$el,
233
+ estimateSize: () => virtualizerProps.value.estimateSize
234
+ });
235
+ function valueUpdater(updaterOrValue, ref2) {
236
+ ref2.value = typeof updaterOrValue === "function" ? updaterOrValue(ref2.value) : updaterOrValue;
237
+ }
238
+ function onRowSelect(e, row) {
239
+ if (!props.onSelect)
240
+ return;
241
+ const target = e.target;
242
+ const isInteractive = target.closest("button") || target.closest("a");
243
+ if (isInteractive)
244
+ return;
245
+ e.preventDefault();
246
+ e.stopPropagation();
247
+ props.onSelect(e, row);
248
+ }
249
+ function onRowHover(e, row) {
250
+ if (!props.onHover)
251
+ return;
252
+ props.onHover(e, row);
150
253
  }
254
+ function onRowContextmenu(e, row) {
255
+ if (!props.onContextmenu)
256
+ return;
257
+ if (Array.isArray(props.onContextmenu))
258
+ props.onContextmenu.forEach((fn) => fn(e, row));
259
+ else
260
+ props.onContextmenu(e, row);
261
+ }
262
+ function resolveValue(prop, arg) {
263
+ if (typeof prop === "function") {
264
+ return prop(arg);
265
+ }
266
+ return prop;
267
+ }
268
+ function getColumnStyles(column) {
269
+ const styles = {};
270
+ const pinned = column.getIsPinned();
271
+ if (pinned === "left")
272
+ styles.left = `${column.getStart("left")}px`;
273
+ else if (pinned === "right")
274
+ styles.right = `${column.getAfter("right")}px`;
275
+ return styles;
276
+ }
277
+ watch(() => props.data, () => {
278
+ data.value = props.data ? [...props.data] : [];
279
+ }, props.watchOptions);
151
280
  const { t } = useLocale();
152
- const { generateStyle } = useTheme();
153
- const style = computed(() => generateStyle("table", props));
281
+ const appConfig = useAppConfig();
282
+ const ui = computed(() => {
283
+ const styler = cv(merge(theme, appConfig.ui.table));
284
+ return styler({
285
+ ...props,
286
+ sticky: props.virtualize ? false : props.sticky,
287
+ virtualize: !!props.virtualize
288
+ });
289
+ });
154
290
  defineExpose({
291
+ get $el() {
292
+ return rootRef.value?.$el;
293
+ },
294
+ tableRef,
155
295
  tableApi
156
296
  });
157
297
  </script>
158
298
 
159
299
  <template>
160
- <Primitive :as="props.as" :class="style.root({ class: [props.class, props.ui?.root] })" data-part="root">
161
- <table :class="style.base({ class: props.ui?.base })" data-part="base">
162
- <caption v-if="props.caption || slots.caption" :class="style.caption({ class: props.caption })" data-part="caption">
300
+ <DefineRowTemplate v-slot="{ row, style }">
301
+ <tr
302
+ :role="props.onSelect ? 'button' : void 0"
303
+ :tabindex="props.onSelect ? 0 : void 0"
304
+ :class="ui.tr({
305
+ class: [
306
+ props.ui?.tr,
307
+ resolveValue(tableApi.options.meta?.class?.tr, row)
308
+ ]
309
+ })"
310
+ :data-selected="row.getIsSelected()"
311
+ :data-selectable="!!props.onSelect || !!props.onHover || !!props.onContextmenu"
312
+ :data-expanded="row.getIsExpanded()"
313
+ data-part="tr"
314
+ :style="[resolveValue(tableApi.options.meta?.style?.tr, row), style]"
315
+ @click="onRowSelect($event, row)"
316
+ @pointerenter="onRowHover($event, row)"
317
+ @pointerleave="onRowHover($event, null)"
318
+ @contextmenu="onRowContextmenu($event, row)"
319
+ >
320
+ <td
321
+ v-for="cell in row.getVisibleCells()"
322
+ :key="cell.id"
323
+ :colspan="resolveValue(cell.column.columnDef.meta?.colspan?.td, cell)"
324
+ :rowspan="resolveValue(cell.column.columnDef.meta?.rowspan?.td, cell)"
325
+ :class="ui.td({
326
+ class: [
327
+ props.ui?.td,
328
+ resolveValue(cell.column.columnDef.meta?.class?.td, cell)
329
+ ],
330
+ pinned: !!cell.column.getIsPinned()
331
+ })"
332
+ :data-pinned="cell.column.getIsPinned()"
333
+ data-part="td"
334
+ :style="[
335
+ getColumnStyles(cell.column),
336
+ resolveValue(cell.column.columnDef.meta?.style?.td, cell)
337
+ ]"
338
+ >
339
+ <slot :name="`${cell.column.id}-cell`" v-bind="cell.getContext()">
340
+ <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
341
+ </slot>
342
+ </td>
343
+ </tr>
344
+
345
+ <tr v-if="row.getIsExpanded()" :class="ui.tr({ class: props.ui?.tr })" data-part="tr">
346
+ <td :colspan="row.getAllCells().length" :class="ui.td({ class: props.ui?.td })" data-part="td">
347
+ <slot name="expanded" :row="row"></slot>
348
+ </td>
349
+ </tr>
350
+ </DefineRowTemplate>
351
+
352
+ <DefineTableTemplate>
353
+ <table ref="tableRef" :class="ui.base({ class: props.ui?.base })" data-part="base">
354
+ <caption v-if="caption || !!slots.caption" :class="ui.caption({ class: [props.ui?.caption] })" data-part="caption">
163
355
  <slot name="caption">
164
- {{ props.caption }}
356
+ {{ caption }}
165
357
  </slot>
166
358
  </caption>
167
359
 
168
- <thead :class="style.thead({ class: props.ui?.thead })" data-part="thead">
169
- <tr v-for="headerGroup in tableApi.getHeaderGroups()" :key="headerGroup.id" :class="style.tr({ class: props.ui?.tr })" data-part="tr">
360
+ <thead :class="ui.thead({ class: [props.ui?.thead] })" data-part="thead">
361
+ <tr v-for="headerGroup in tableApi.getHeaderGroups()" :key="headerGroup.id" :class="ui.tr({ class: [props.ui?.tr] })" data-part="tr">
170
362
  <th
171
363
  v-for="header in headerGroup.headers"
172
364
  :key="header.id"
173
365
  :data-pinned="header.column.getIsPinned()"
174
- :class="style.th({ class: props.ui?.th, pinned: !!header.column.getIsPinned() })"
366
+ :scope="header.colSpan > 1 ? 'colgroup' : 'col'"
367
+ :colspan="header.colSpan > 1 ? header.colSpan : void 0"
368
+ :rowspan="header.rowSpan > 1 ? header.rowSpan : void 0"
369
+ :class="ui.th({
370
+ class: [
371
+ props.ui?.th,
372
+ resolveValue(header.column.columnDef.meta?.class?.th, header)
373
+ ],
374
+ pinned: !!header.column.getIsPinned()
375
+ })"
175
376
  data-part="th"
377
+ :style="[
378
+ getColumnStyles(header.column),
379
+ resolveValue(header.column.columnDef.meta?.style?.th, header)
380
+ ]"
176
381
  >
177
382
  <slot :name="`${header.id}-header`" v-bind="header.getContext()">
178
- <FlexRender v-if="!header.isPlaceholder" :render="header.column.columnDef.header" :props="header.getContext" />
383
+ <FlexRender v-if="!header.isPlaceholder" :render="header.column.columnDef.header" :props="header.getContext()" />
179
384
  </slot>
180
385
  </th>
181
386
  </tr>
387
+
388
+ <tr :class="ui.separator({ class: [props.ui?.separator] })" data-part="separator"></tr>
182
389
  </thead>
183
390
 
184
- <tbody :class="style.tbody({ class: props.ui?.tbody })" data-part="tbody">
185
- <template v-if="tableApi.getRowModel().rows.length > 0">
186
- <template v-for="row in tableApi.getRowModel().rows" :key="row.id">
187
- <tr :data-selected="row.getIsSelected()" :data-expanded="row.getIsExpanded()" :class="style.tr({ class: props.ui?.tr })">
188
- <td
189
- v-for="cell in row.getVisibleCells()"
190
- :key="cell.id"
191
- :class="style.td({ class: props.ui?.td, pinned: !!cell.column.getIsPinned() })"
192
- data-part="td"
193
- :data-pinned="cell.column.getIsPinned()"
194
- >
195
- <slot :name="`${cell.column.id}-cell`" v-bind="cell.getContext()">
196
- <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
197
- </slot>
198
- </td>
199
- </tr>
200
- <tr v-if="row.getIsExpanded()" :class="style.tr({ class: props.ui?.tr, expanded: true })" data-part="tr">
201
- <td :colspan="row.getAllCells().length" :class="style.td({ class: props.ui?.td })" data-part="td">
202
- <slot name="expanded" :row="row"></slot>
203
- </td>
204
- </tr>
391
+ <tbody :class="ui.tbody({ class: [props.ui?.tbody] })" data-part="tbody">
392
+ <slot name="body-top"></slot>
393
+
394
+ <template v-if="rows.length">
395
+ <template v-if="virtualizer">
396
+ <template v-for="(virtualRow, index) in virtualizer.getVirtualItems()" :key="rows[virtualRow.index]?.id">
397
+ <ReuseRowTemplate
398
+ :row="rows[virtualRow.index]"
399
+ :style="{
400
+ height: `${virtualRow.size}px`,
401
+ transform: `translateY(${virtualRow.start - index * virtualRow.size}px)`
402
+ }"
403
+ />
404
+ </template>
405
+ </template>
406
+
407
+ <template v-else>
408
+ <ReuseRowTemplate v-for="row in rows" :key="row.id" :row="row" />
205
409
  </template>
206
410
  </template>
207
411
 
208
- <tr v-else-if="props.loading && slots.loading">
209
- <td :colspan="columns.length" :class="style.loading({ class: props.ui?.loading })" data-part="loading">
412
+ <tr v-else-if="props.loading && !!slots.loading">
413
+ <td :colspan="tableApi.getAllLeafColumns().length" :class="ui.loading({ class: props.ui?.loading })" data-part="loading">
210
414
  <slot name="loading"></slot>
211
415
  </td>
212
416
  </tr>
213
417
 
214
- <tr v-else :class="style.tr({ class: props.ui?.tr })" data-part="tr">
215
- <td :colspan="columns.length" :class="style.empty({ class: props.ui?.empty })" data-part="empty">
418
+ <tr v-else>
419
+ <td :colspan="tableApi.getAllLeafColumns().length" :class="ui.empty({ class: props.ui?.empty })" data-part="empty">
216
420
  <slot name="empty">
217
421
  {{ props.empty || t("table.noData") }}
218
422
  </slot>
219
423
  </td>
220
424
  </tr>
425
+
426
+ <slot name="body-bottom"></slot>
221
427
  </tbody>
428
+
429
+ <tfoot
430
+ v-if="hasFooter"
431
+ :class="ui.tfoot({ class: props.ui?.tfoot })"
432
+ data-part="tfoot"
433
+ :style="virtualizer ? {
434
+ transform: `translateY(${virtualizer.getTotalSize() - virtualizer.getVirtualItems().length * virtualizerProps.estimateSize}px)`
435
+ } : void 0"
436
+ >
437
+ <tr :class="ui.separator({ class: props.ui?.separator })" data-part="separator"></tr>
438
+
439
+ <tr v-for="footerGroup in tableApi.getFooterGroups()" :key="footerGroup.id" :class="ui.tr({ class: props.ui?.tr })" data-part="tr">
440
+ <th
441
+ v-for="header in footerGroup.headers"
442
+ :key="header.id"
443
+ :data-pinned="header.column.getIsPinned()"
444
+ :colspan="header.colSpan > 1 ? header.colSpan : void 0"
445
+ :rowspan="header.rowSpan > 1 ? header.rowSpan : void 0"
446
+ :class="ui.th({
447
+ class: [
448
+ props.ui?.th,
449
+ resolveValue(header.column.columnDef.meta?.class?.th, header)
450
+ ],
451
+ pinned: !!header.column.getIsPinned()
452
+ })"
453
+ data-part="th"
454
+ :style="[
455
+ getColumnStyles(header.column),
456
+ resolveValue(header.column.columnDef.meta?.style?.th, header)
457
+ ]"
458
+ >
459
+ <slot :name="`${header.id}-footer`" v-bind="header.getContext()">
460
+ <FlexRender v-if="!header.isPlaceholder" :render="header.column.columnDef.footer" :props="header.getContext()" />
461
+ </slot>
462
+ </th>
463
+ </tr>
464
+ </tfoot>
222
465
  </table>
466
+ </DefineTableTemplate>
467
+
468
+ <Primitive ref="rootRef" :as="props.as" v-bind="$attrs" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
469
+ <div v-if="virtualizer" :style="{ height: `${virtualizer.getTotalSize()}px` }">
470
+ <ReuseTableTemplate />
471
+ </div>
472
+ <ReuseTableTemplate v-else />
223
473
  </Primitive>
224
474
  </template>