@nuxt/ui 3.0.2 → 3.1.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 (220) hide show
  1. package/.nuxt/ui/accordion.ts +25 -4
  2. package/.nuxt/ui/alert.ts +52 -31
  3. package/.nuxt/ui/avatar-group.ts +24 -3
  4. package/.nuxt/ui/avatar.ts +26 -5
  5. package/.nuxt/ui/badge.ts +56 -35
  6. package/.nuxt/ui/breadcrumb.ts +28 -7
  7. package/.nuxt/ui/button-group.ts +23 -2
  8. package/.nuxt/ui/button.ts +66 -45
  9. package/.nuxt/ui/calendar.ts +39 -18
  10. package/.nuxt/ui/card.ts +28 -7
  11. package/.nuxt/ui/carousel.ts +29 -8
  12. package/.nuxt/ui/checkbox-group.ts +82 -0
  13. package/.nuxt/ui/checkbox.ts +163 -29
  14. package/.nuxt/ui/chip.ts +31 -10
  15. package/.nuxt/ui/collapsible.ts +23 -2
  16. package/.nuxt/ui/color-picker.ts +26 -5
  17. package/.nuxt/ui/command-palette.ts +37 -16
  18. package/.nuxt/ui/container.ts +23 -2
  19. package/.nuxt/ui/context-menu.ts +56 -35
  20. package/.nuxt/ui/drawer.ts +33 -12
  21. package/.nuxt/ui/dropdown-menu.ts +57 -36
  22. package/.nuxt/ui/form-field.ts +29 -8
  23. package/.nuxt/ui/form.ts +23 -2
  24. package/.nuxt/ui/index.ts +1 -0
  25. package/.nuxt/ui/input-menu.ts +65 -44
  26. package/.nuxt/ui/input-number.ts +43 -22
  27. package/.nuxt/ui/input.ts +46 -25
  28. package/.nuxt/ui/kbd.ts +27 -6
  29. package/.nuxt/ui/link.ts +26 -5
  30. package/.nuxt/ui/modal.ts +28 -7
  31. package/.nuxt/ui/navigation-menu.ts +102 -83
  32. package/.nuxt/ui/pagination.ts +23 -2
  33. package/.nuxt/ui/pin-input.ts +43 -22
  34. package/.nuxt/ui/popover.ts +25 -4
  35. package/.nuxt/ui/progress.ts +40 -19
  36. package/.nuxt/ui/radio-group.ts +273 -37
  37. package/.nuxt/ui/select-menu.ts +59 -35
  38. package/.nuxt/ui/select.ts +55 -34
  39. package/.nuxt/ui/separator.ts +31 -10
  40. package/.nuxt/ui/skeleton.ts +24 -3
  41. package/.nuxt/ui/slideover.ts +27 -6
  42. package/.nuxt/ui/slider.ts +39 -18
  43. package/.nuxt/ui/stepper.ts +41 -20
  44. package/.nuxt/ui/switch.ts +43 -22
  45. package/.nuxt/ui/table.ts +38 -17
  46. package/.nuxt/ui/tabs.ts +55 -34
  47. package/.nuxt/ui/textarea.ts +63 -37
  48. package/.nuxt/ui/toast.ts +47 -26
  49. package/.nuxt/ui/toaster.ts +23 -2
  50. package/.nuxt/ui/tooltip.ts +25 -4
  51. package/.nuxt/ui/tree.ts +41 -20
  52. package/.nuxt/ui.css +56 -12
  53. package/README.md +11 -0
  54. package/cli/templates.mjs +18 -17
  55. package/dist/module.json +5 -5
  56. package/dist/module.mjs +11 -7
  57. package/dist/runtime/components/Accordion.vue +36 -93
  58. package/dist/runtime/components/Accordion.vue.d.ts +91 -0
  59. package/dist/runtime/components/Alert.vue +37 -100
  60. package/dist/runtime/components/Alert.vue.d.ts +96 -0
  61. package/dist/runtime/components/App.vue +28 -34
  62. package/dist/runtime/components/App.vue.d.ts +24 -0
  63. package/dist/runtime/components/Avatar.vue +42 -75
  64. package/dist/runtime/components/Avatar.vue.d.ts +60 -0
  65. package/dist/runtime/components/AvatarGroup.vue +40 -77
  66. package/dist/runtime/components/AvatarGroup.vue.d.ts +40 -0
  67. package/dist/runtime/components/Badge.vue +33 -62
  68. package/dist/runtime/components/Badge.vue.d.ts +62 -0
  69. package/dist/runtime/components/Breadcrumb.vue +37 -90
  70. package/dist/runtime/components/Breadcrumb.vue.d.ts +82 -0
  71. package/dist/runtime/components/Button.vue +95 -104
  72. package/dist/runtime/components/Button.vue.d.ts +73 -0
  73. package/dist/runtime/components/ButtonGroup.vue +20 -46
  74. package/dist/runtime/components/ButtonGroup.vue.d.ts +55 -0
  75. package/dist/runtime/components/Calendar.vue +67 -150
  76. package/dist/runtime/components/Calendar.vue.d.ts +107 -0
  77. package/dist/runtime/components/Card.vue +18 -40
  78. package/dist/runtime/components/Card.vue.d.ts +38 -0
  79. package/dist/runtime/components/Carousel.vue +112 -234
  80. package/dist/runtime/components/Carousel.vue.d.ts +120 -0
  81. package/dist/runtime/components/Checkbox.vue +52 -93
  82. package/dist/runtime/components/Checkbox.vue.d.ts +76 -0
  83. package/dist/runtime/components/CheckboxGroup.vue +121 -0
  84. package/dist/runtime/components/CheckboxGroup.vue.d.ts +75 -0
  85. package/dist/runtime/components/Chip.vue +26 -69
  86. package/dist/runtime/components/Chip.vue.d.ts +71 -0
  87. package/dist/runtime/components/Collapsible.vue +22 -41
  88. package/dist/runtime/components/Collapsible.vue.d.ts +50 -0
  89. package/dist/runtime/components/ColorPicker.vue +111 -197
  90. package/dist/runtime/components/ColorPicker.vue.d.ts +63 -0
  91. package/dist/runtime/components/CommandPalette.vue +96 -237
  92. package/dist/runtime/components/CommandPalette.vue.d.ts +173 -0
  93. package/dist/runtime/components/Container.vue +15 -28
  94. package/dist/runtime/components/Container.vue.d.ts +27 -0
  95. package/dist/runtime/components/ContextMenu.vue +34 -133
  96. package/dist/runtime/components/ContextMenu.vue.d.ts +127 -0
  97. package/dist/runtime/components/ContextMenuContent.vue +73 -81
  98. package/dist/runtime/components/ContextMenuContent.vue.d.ts +105 -0
  99. package/dist/runtime/components/Drawer.vue +49 -83
  100. package/dist/runtime/components/Drawer.vue.d.ts +88 -0
  101. package/dist/runtime/components/DropdownMenu.vue +39 -142
  102. package/dist/runtime/components/DropdownMenu.vue.d.ts +141 -0
  103. package/dist/runtime/components/DropdownMenuContent.vue +78 -88
  104. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +55 -0
  105. package/dist/runtime/components/Form.vue +135 -220
  106. package/dist/runtime/components/Form.vue.d.ts +66 -0
  107. package/dist/runtime/components/FormField.vue +35 -77
  108. package/dist/runtime/components/FormField.vue.d.ts +70 -0
  109. package/dist/runtime/components/Icon.vue +12 -19
  110. package/dist/runtime/components/Icon.vue.d.ts +17 -0
  111. package/dist/runtime/components/Input.vue +82 -140
  112. package/dist/runtime/components/Input.vue.d.ts +91 -0
  113. package/dist/runtime/components/InputMenu.vue +185 -332
  114. package/dist/runtime/components/InputMenu.vue.d.ts +312 -0
  115. package/dist/runtime/components/InputNumber.vue +71 -133
  116. package/dist/runtime/components/InputNumber.vue.d.ts +193 -0
  117. package/dist/runtime/components/Kbd.vue +20 -46
  118. package/dist/runtime/components/Kbd.vue.d.ts +55 -0
  119. package/dist/runtime/components/Link.vue +98 -176
  120. package/dist/runtime/components/Link.vue.d.ts +124 -0
  121. package/dist/runtime/components/LinkBase.vue +33 -42
  122. package/dist/runtime/components/LinkBase.vue.d.ts +48 -0
  123. package/dist/runtime/components/Modal.vue +53 -116
  124. package/dist/runtime/components/Modal.vue.d.ts +109 -0
  125. package/dist/runtime/components/NavigationMenu.vue +77 -209
  126. package/dist/runtime/components/NavigationMenu.vue.d.ts +159 -0
  127. package/dist/runtime/components/OverlayProvider.vue +14 -18
  128. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -0
  129. package/dist/runtime/components/Pagination.vue +46 -140
  130. package/dist/runtime/components/Pagination.vue.d.ts +143 -0
  131. package/dist/runtime/components/PinInput.vue +61 -78
  132. package/dist/runtime/components/PinInput.vue.d.ts +68 -0
  133. package/dist/runtime/components/Popover.vue +47 -84
  134. package/dist/runtime/components/Popover.vue.d.ts +80 -0
  135. package/dist/runtime/components/Progress.vue +70 -131
  136. package/dist/runtime/components/Progress.vue.d.ts +97 -0
  137. package/dist/runtime/components/RadioGroup.vue +70 -132
  138. package/dist/runtime/components/RadioGroup.vue.d.ts +88 -0
  139. package/dist/runtime/components/Select.vue +110 -224
  140. package/dist/runtime/components/Select.vue.d.ts +139 -0
  141. package/dist/runtime/components/SelectMenu.vue +161 -310
  142. package/dist/runtime/components/SelectMenu.vue.d.ts +184 -0
  143. package/dist/runtime/components/Separator.vue +29 -71
  144. package/dist/runtime/components/Separator.vue.d.ts +75 -0
  145. package/dist/runtime/components/Skeleton.vue +21 -23
  146. package/dist/runtime/components/Skeleton.vue.d.ts +26 -0
  147. package/dist/runtime/components/Slideover.vue +53 -120
  148. package/dist/runtime/components/Slideover.vue.d.ts +111 -0
  149. package/dist/runtime/components/Slider.vue +46 -84
  150. package/dist/runtime/components/Slider.vue.d.ts +71 -0
  151. package/dist/runtime/components/Stepper.vue +45 -115
  152. package/dist/runtime/components/Stepper.vue.d.ts +89 -0
  153. package/dist/runtime/components/Switch.vue +45 -93
  154. package/dist/runtime/components/Switch.vue.d.ts +73 -0
  155. package/dist/runtime/components/Table.vue +163 -267
  156. package/dist/runtime/components/Table.vue.d.ts +183 -0
  157. package/dist/runtime/components/Tabs.vue +41 -107
  158. package/dist/runtime/components/Tabs.vue.d.ts +104 -0
  159. package/dist/runtime/components/Textarea.vue +113 -158
  160. package/dist/runtime/components/Textarea.vue.d.ts +95 -0
  161. package/dist/runtime/components/Toast.vue +49 -110
  162. package/dist/runtime/components/Toast.vue.d.ts +95 -0
  163. package/dist/runtime/components/Toaster.vue +70 -107
  164. package/dist/runtime/components/Toaster.vue.d.ts +63 -0
  165. package/dist/runtime/components/Tooltip.vue +38 -65
  166. package/dist/runtime/components/Tooltip.vue.d.ts +65 -0
  167. package/dist/runtime/components/Tree.vue +59 -166
  168. package/dist/runtime/components/Tree.vue.d.ts +128 -0
  169. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  170. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  171. package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
  172. package/dist/runtime/composables/useFormField.d.ts +2 -2
  173. package/dist/runtime/composables/useOverlay.d.ts +14 -7
  174. package/dist/runtime/composables/useOverlay.js +14 -6
  175. package/dist/runtime/composables/usePortal.d.ts +6 -0
  176. package/dist/runtime/composables/usePortal.js +17 -0
  177. package/dist/runtime/index.css +1 -1
  178. package/dist/runtime/inertia/components/Link.vue +146 -0
  179. package/dist/runtime/inertia/components/Link.vue.d.ts +92 -0
  180. package/dist/runtime/inertia/stubs.d.ts +43 -0
  181. package/dist/runtime/inertia/stubs.js +82 -0
  182. package/dist/runtime/locale/bg.d.ts +3 -0
  183. package/dist/runtime/locale/bg.js +54 -0
  184. package/dist/runtime/locale/index.d.ts +5 -1
  185. package/dist/runtime/locale/index.js +5 -1
  186. package/dist/runtime/locale/kk.d.ts +3 -0
  187. package/dist/runtime/locale/kk.js +54 -0
  188. package/dist/runtime/locale/tj.d.ts +3 -0
  189. package/dist/runtime/locale/tj.js +54 -0
  190. package/dist/runtime/locale/ug_cn.d.ts +3 -0
  191. package/dist/runtime/locale/ug_cn.js +55 -0
  192. package/dist/runtime/types/form.d.ts +4 -1
  193. package/dist/runtime/types/index.d.ts +1 -0
  194. package/dist/runtime/types/index.js +1 -0
  195. package/dist/runtime/types/utils.d.ts +47 -7
  196. package/dist/runtime/utils/link.d.ts +3 -3
  197. package/dist/runtime/utils/link.js +1 -0
  198. package/dist/runtime/utils/tv.js +2 -2
  199. package/dist/runtime/vue/components/Icon.vue +7 -8
  200. package/dist/runtime/vue/components/Icon.vue.d.ts +14 -0
  201. package/dist/runtime/vue/components/Link.vue +118 -202
  202. package/dist/runtime/vue/components/Link.vue.d.ts +124 -0
  203. package/dist/runtime/vue/stubs.d.ts +2 -2
  204. package/dist/shared/{ui.BkNUP964.mjs → ui.D7lOOabO.mjs} +621 -362
  205. package/dist/types.d.mts +3 -5
  206. package/dist/unplugin.d.mts +4 -0
  207. package/dist/unplugin.mjs +25 -4
  208. package/dist/vite.mjs +1 -1
  209. package/package.json +94 -53
  210. package/dist/module.cjs +0 -62
  211. package/dist/module.d.cts +0 -45
  212. package/dist/module.d.ts +0 -45
  213. package/dist/shared/ui.BL-XB3u1.cjs +0 -3555
  214. package/dist/types.d.ts +0 -7
  215. package/dist/unplugin.cjs +0 -232
  216. package/dist/unplugin.d.cts +0 -62
  217. package/dist/unplugin.d.ts +0 -62
  218. package/dist/vite.cjs +0 -23
  219. package/dist/vite.d.cts +0 -15
  220. package/dist/vite.d.ts +0 -15
@@ -1,318 +1,196 @@
1
- <!-- eslint-disable vue/block-tag-newline -->
2
- <script lang="ts">
3
- import type { Ref } from 'vue'
4
- import type { VariantProps } from 'tailwind-variants'
5
- import type { AppConfig } from '@nuxt/schema'
6
- import type { RowData } from '@tanstack/table-core'
7
- import type {
8
- CellContext,
9
- ColumnDef,
10
- ColumnFiltersOptions,
11
- ColumnFiltersState,
12
- ColumnOrderState,
13
- ColumnPinningOptions,
14
- ColumnPinningState,
15
- ColumnSizingInfoState,
16
- ColumnSizingOptions,
17
- ColumnSizingState,
18
- CoreOptions,
19
- ExpandedOptions,
20
- ExpandedState,
21
- FacetedOptions,
22
- GlobalFilterOptions,
23
- GroupingOptions,
24
- GroupingState,
25
- HeaderContext,
26
- PaginationOptions,
27
- PaginationState,
28
- Row,
29
- RowPinningOptions,
30
- RowPinningState,
31
- RowSelectionOptions,
32
- RowSelectionState,
33
- SortingOptions,
34
- SortingState,
35
- Updater,
36
- VisibilityOptions,
37
- VisibilityState
38
- } from '@tanstack/vue-table'
39
- import _appConfig from '#build/app.config'
40
- import theme from '#build/ui/table'
41
- import { tv } from '../utils/tv'
42
-
43
- declare module '@tanstack/table-core' {
44
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
45
- interface ColumnMeta<TData extends RowData, TValue> {
46
- class?: {
47
- th?: string
48
- td?: string
49
- }
50
- }
51
- }
52
-
53
- const appConfigTable = _appConfig as AppConfig & { ui: { table: Partial<typeof theme> } }
54
-
55
- const table = tv({ extend: tv(theme), ...(appConfigTable.ui?.table || {}) })
56
-
57
- type TableVariants = VariantProps<typeof table>
58
-
59
- export type TableRow<T> = Row<T>
60
- export type TableData = RowData
61
- export type TableColumn<T extends TableData, D = unknown> = ColumnDef<T, D>
62
-
63
- export interface TableOptions<T extends TableData> extends Omit<CoreOptions<T>, 'data' | 'columns' | 'getCoreRowModel' | 'state' | 'onStateChange' | 'renderFallbackValue'> {
64
- state?: CoreOptions<T>['state']
65
- onStateChange?: CoreOptions<T>['onStateChange']
66
- renderFallbackValue?: CoreOptions<T>['renderFallbackValue']
67
- }
68
-
69
- export interface TableProps<T extends TableData> extends TableOptions<T> {
70
- /**
71
- * The element or component this component should render as.
72
- * @defaultValue 'div'
73
- */
74
- as?: any
75
- data?: T[]
76
- columns?: TableColumn<T>[]
77
- caption?: string
78
- /**
79
- * The text to display when the table is empty.
80
- * @defaultValue t('table.noData')
81
- */
82
- empty?: string
83
- /**
84
- * Whether the table should have a sticky header.
85
- * @defaultValue false
86
- */
87
- sticky?: boolean
88
- /** Whether the table should be in loading state. */
89
- loading?: boolean
90
- /**
91
- * @defaultValue 'primary'
92
- */
93
- loadingColor?: TableVariants['loadingColor']
94
- /**
95
- * @defaultValue 'carousel'
96
- */
97
- loadingAnimation?: TableVariants['loadingAnimation']
98
- /**
99
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#table-options)
100
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)
101
- */
102
- globalFilterOptions?: Omit<GlobalFilterOptions<T>, 'onGlobalFilterChange'>
103
- /**
104
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#table-options)
105
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)
106
- */
107
- columnFiltersOptions?: Omit<ColumnFiltersOptions<T>, 'getFilteredRowModel' | 'onColumnFiltersChange'>
108
- /**
109
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#table-options)
110
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)
111
- */
112
- columnPinningOptions?: Omit<ColumnPinningOptions, 'onColumnPinningChange'>
113
- /**
114
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#table-options)
115
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)
116
- */
117
- columnSizingOptions?: Omit<ColumnSizingOptions, 'onColumnSizingChange' | 'onColumnSizingInfoChange'>
118
- /**
119
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#table-options)
120
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)
121
- */
122
- visibilityOptions?: Omit<VisibilityOptions, 'onColumnVisibilityChange'>
123
- /**
124
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#table-options)
125
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)
126
- */
127
- sortingOptions?: Omit<SortingOptions<T>, 'getSortedRowModel' | 'onSortingChange'>
128
- /**
129
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#table-options)
130
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)
131
- */
132
- groupingOptions?: Omit<GroupingOptions, 'onGroupingChange'>
133
- /**
134
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#table-options)
135
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)
136
- */
137
- expandedOptions?: Omit<ExpandedOptions<T>, 'getExpandedRowModel' | 'onExpandedChange'>
138
- /**
139
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#table-options)
140
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)
141
- */
142
- rowSelectionOptions?: Omit<RowSelectionOptions<T>, 'onRowSelectionChange'>
143
- /**
144
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#table-options)
145
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)
146
- */
147
- rowPinningOptions?: Omit<RowPinningOptions<T>, 'onRowPinningChange'>
148
- /**
149
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#table-options)
150
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)
151
- */
152
- paginationOptions?: Omit<PaginationOptions, 'onPaginationChange'>
153
- /**
154
- * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-faceting#table-options)
155
- * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)
156
- */
157
- facetedOptions?: FacetedOptions<T>
158
- onSelect?: (row: TableRow<T>, e?: Event) => void
159
- class?: any
160
- ui?: Partial<typeof table.slots>
161
- }
162
-
163
- type DynamicHeaderSlots<T, K = keyof T> = Record<string, (props: HeaderContext<T, unknown>) => any> & Record<`${K extends string ? K : never}-header`, (props: HeaderContext<T, unknown>) => any>
164
- type DynamicCellSlots<T, K = keyof T> = Record<string, (props: CellContext<T, unknown>) => any> & Record<`${K extends string ? K : never}-cell`, (props: CellContext<T, unknown>) => any>
165
-
166
- export type TableSlots<T> = {
167
- expanded: (props: { row: Row<T> }) => any
168
- empty: (props?: {}) => any
169
- loading: (props?: {}) => any
170
- caption: (props?: {}) => any
171
- } & DynamicHeaderSlots<T> & DynamicCellSlots<T>
172
-
1
+ <script>
2
+ import theme from "#build/ui/table";
173
3
  </script>
174
4
 
175
- <script setup lang="ts" generic="T extends TableData">
176
- import { computed } from 'vue'
177
- import { Primitive } from 'reka-ui'
178
- import { upperFirst } from 'scule'
179
- import { FlexRender, getCoreRowModel, getFilteredRowModel, getSortedRowModel, getExpandedRowModel, useVueTable } from '@tanstack/vue-table'
180
- import { reactiveOmit } from '@vueuse/core'
181
- import { useLocale } from '../composables/useLocale'
182
-
183
- const props = defineProps<TableProps<T>>()
184
- const slots = defineSlots<TableSlots<T>>()
185
-
186
- const { t } = useLocale()
187
-
188
- const data = computed(() => props.data ?? [])
189
- const columns = computed<TableColumn<T>[]>(() => props.columns ?? Object.keys(data.value[0] ?? {}).map((accessorKey: string) => ({ accessorKey, header: upperFirst(accessorKey) })))
190
-
191
- const ui = computed(() => table({
5
+ <script setup>
6
+ import { computed, ref, watch } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { upperFirst } from "scule";
9
+ import { FlexRender, getCoreRowModel, getFilteredRowModel, getSortedRowModel, getExpandedRowModel, useVueTable } from "@tanstack/vue-table";
10
+ import { reactiveOmit } from "@vueuse/core";
11
+ import { useAppConfig } from "#imports";
12
+ import { useLocale } from "../composables/useLocale";
13
+ import { tv } from "../utils/tv";
14
+ const props = defineProps({
15
+ as: { type: null, required: false },
16
+ data: { type: Array, required: false },
17
+ columns: { type: Array, required: false },
18
+ caption: { type: String, required: false },
19
+ meta: { type: Object, required: false },
20
+ empty: { type: String, required: false },
21
+ sticky: { type: Boolean, required: false },
22
+ loading: { type: Boolean, required: false },
23
+ loadingColor: { type: null, required: false },
24
+ loadingAnimation: { type: null, required: false },
25
+ watchOptions: { type: Object, required: false, default: () => ({
26
+ deep: true
27
+ }) },
28
+ globalFilterOptions: { type: Object, required: false },
29
+ columnFiltersOptions: { type: Object, required: false },
30
+ columnPinningOptions: { type: Object, required: false },
31
+ columnSizingOptions: { type: Object, required: false },
32
+ visibilityOptions: { type: Object, required: false },
33
+ sortingOptions: { type: Object, required: false },
34
+ groupingOptions: { type: Object, required: false },
35
+ expandedOptions: { type: Object, required: false },
36
+ rowSelectionOptions: { type: Object, required: false },
37
+ rowPinningOptions: { type: Object, required: false },
38
+ paginationOptions: { type: Object, required: false },
39
+ facetedOptions: { type: Object, required: false },
40
+ onSelect: { type: Function, required: false },
41
+ class: { type: null, required: false },
42
+ ui: { type: null, required: false },
43
+ state: { type: Object, required: false },
44
+ onStateChange: { type: Function, required: false },
45
+ renderFallbackValue: { type: null, required: false },
46
+ _features: { type: Array, required: false },
47
+ autoResetAll: { type: Boolean, required: false },
48
+ debugAll: { type: Boolean, required: false },
49
+ debugCells: { type: Boolean, required: false },
50
+ debugColumns: { type: Boolean, required: false },
51
+ debugHeaders: { type: Boolean, required: false },
52
+ debugRows: { type: Boolean, required: false },
53
+ debugTable: { type: Boolean, required: false },
54
+ defaultColumn: { type: Object, required: false },
55
+ getRowId: { type: Function, required: false },
56
+ getSubRows: { type: Function, required: false },
57
+ initialState: { type: Object, required: false },
58
+ mergeOptions: { type: Function, required: false }
59
+ });
60
+ const slots = defineSlots();
61
+ const { t } = useLocale();
62
+ const appConfig = useAppConfig();
63
+ const data = ref(props.data ?? []);
64
+ const columns = computed(() => props.columns ?? Object.keys(data.value[0] ?? {}).map((accessorKey) => ({ accessorKey, header: upperFirst(accessorKey) })));
65
+ const meta = computed(() => props.meta ?? {});
66
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.table || {} })({
192
67
  sticky: props.sticky,
193
68
  loading: props.loading,
194
69
  loadingColor: props.loadingColor,
195
70
  loadingAnimation: props.loadingAnimation
196
- }))
197
-
198
- const globalFilterState = defineModel<string>('globalFilter', { default: undefined })
199
- const columnFiltersState = defineModel<ColumnFiltersState>('columnFilters', { default: [] })
200
- const columnOrderState = defineModel<ColumnOrderState>('columnOrder', { default: [] })
201
- const columnVisibilityState = defineModel<VisibilityState>('columnVisibility', { default: {} })
202
- const columnPinningState = defineModel<ColumnPinningState>('columnPinning', { default: {} })
203
- const columnSizingState = defineModel<ColumnSizingState>('columnSizing', { default: {} })
204
- const columnSizingInfoState = defineModel<ColumnSizingInfoState>('columnSizingInfo', { default: {} })
205
- const rowSelectionState = defineModel<RowSelectionState>('rowSelection', { default: {} })
206
- const rowPinningState = defineModel<RowPinningState>('rowPinning', { default: {} })
207
- const sortingState = defineModel<SortingState>('sorting', { default: [] })
208
- const groupingState = defineModel<GroupingState>('grouping', { default: [] })
209
- const expandedState = defineModel<ExpandedState>('expanded', { default: {} })
210
- const paginationState = defineModel<PaginationState>('pagination', { default: {} })
211
-
71
+ }));
72
+ const globalFilterState = defineModel("globalFilter", { type: String, ...{ default: void 0 } });
73
+ const columnFiltersState = defineModel("columnFilters", { type: Array, ...{ default: [] } });
74
+ const columnOrderState = defineModel("columnOrder", { type: Array, ...{ default: [] } });
75
+ const columnVisibilityState = defineModel("columnVisibility", { type: Object, ...{ default: {} } });
76
+ const columnPinningState = defineModel("columnPinning", { type: Object, ...{ default: {} } });
77
+ const columnSizingState = defineModel("columnSizing", { type: Object, ...{ default: {} } });
78
+ const columnSizingInfoState = defineModel("columnSizingInfo", { type: Object, ...{ default: {} } });
79
+ const rowSelectionState = defineModel("rowSelection", { type: Object, ...{ default: {} } });
80
+ const rowPinningState = defineModel("rowPinning", { type: Object, ...{ default: {} } });
81
+ const sortingState = defineModel("sorting", { type: Array, ...{ default: [] } });
82
+ const groupingState = defineModel("grouping", { type: Array, ...{ default: [] } });
83
+ const expandedState = defineModel("expanded", { type: [Boolean, Object], ...{ default: {} } });
84
+ const paginationState = defineModel("pagination", { type: Object, ...{ default: {} } });
85
+ const tableRef = ref();
212
86
  const tableApi = useVueTable({
213
- ...reactiveOmit(props, 'as', 'data', 'columns', 'caption', 'sticky', 'loading', 'loadingColor', 'loadingAnimation', 'class', 'ui'),
87
+ ...reactiveOmit(props, "as", "data", "columns", "caption", "sticky", "loading", "loadingColor", "loadingAnimation", "class", "ui"),
214
88
  data,
215
89
  columns: columns.value,
90
+ meta: meta.value,
216
91
  getCoreRowModel: getCoreRowModel(),
217
- ...(props.globalFilterOptions || {}),
218
- onGlobalFilterChange: updaterOrValue => valueUpdater(updaterOrValue, globalFilterState),
219
- ...(props.columnFiltersOptions || {}),
92
+ ...props.globalFilterOptions || {},
93
+ onGlobalFilterChange: (updaterOrValue) => valueUpdater(updaterOrValue, globalFilterState),
94
+ ...props.columnFiltersOptions || {},
220
95
  getFilteredRowModel: getFilteredRowModel(),
221
- onColumnFiltersChange: updaterOrValue => valueUpdater(updaterOrValue, columnFiltersState),
222
- onColumnOrderChange: updaterOrValue => valueUpdater(updaterOrValue, columnOrderState),
223
- ...(props.visibilityOptions || {}),
224
- onColumnVisibilityChange: updaterOrValue => valueUpdater(updaterOrValue, columnVisibilityState),
225
- ...(props.columnPinningOptions || {}),
226
- onColumnPinningChange: updaterOrValue => valueUpdater(updaterOrValue, columnPinningState),
227
- ...(props.columnSizingOptions || {}),
228
- onColumnSizingChange: updaterOrValue => valueUpdater(updaterOrValue, columnSizingState),
229
- onColumnSizingInfoChange: updaterOrValue => valueUpdater(updaterOrValue, columnSizingInfoState),
230
- ...(props.rowSelectionOptions || {}),
231
- onRowSelectionChange: updaterOrValue => valueUpdater(updaterOrValue, rowSelectionState),
232
- ...(props.rowPinningOptions || {}),
233
- onRowPinningChange: updaterOrValue => valueUpdater(updaterOrValue, rowPinningState),
234
- ...(props.sortingOptions || {}),
96
+ onColumnFiltersChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnFiltersState),
97
+ onColumnOrderChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnOrderState),
98
+ ...props.visibilityOptions || {},
99
+ onColumnVisibilityChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnVisibilityState),
100
+ ...props.columnPinningOptions || {},
101
+ onColumnPinningChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnPinningState),
102
+ ...props.columnSizingOptions || {},
103
+ onColumnSizingChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnSizingState),
104
+ onColumnSizingInfoChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnSizingInfoState),
105
+ ...props.rowSelectionOptions || {},
106
+ onRowSelectionChange: (updaterOrValue) => valueUpdater(updaterOrValue, rowSelectionState),
107
+ ...props.rowPinningOptions || {},
108
+ onRowPinningChange: (updaterOrValue) => valueUpdater(updaterOrValue, rowPinningState),
109
+ ...props.sortingOptions || {},
235
110
  getSortedRowModel: getSortedRowModel(),
236
- onSortingChange: updaterOrValue => valueUpdater(updaterOrValue, sortingState),
237
- ...(props.groupingOptions || {}),
238
- onGroupingChange: updaterOrValue => valueUpdater(updaterOrValue, groupingState),
239
- ...(props.expandedOptions || {}),
111
+ onSortingChange: (updaterOrValue) => valueUpdater(updaterOrValue, sortingState),
112
+ ...props.groupingOptions || {},
113
+ onGroupingChange: (updaterOrValue) => valueUpdater(updaterOrValue, groupingState),
114
+ ...props.expandedOptions || {},
240
115
  getExpandedRowModel: getExpandedRowModel(),
241
- onExpandedChange: updaterOrValue => valueUpdater(updaterOrValue, expandedState),
242
- ...(props.paginationOptions || {}),
243
- onPaginationChange: updaterOrValue => valueUpdater(updaterOrValue, paginationState),
244
- ...(props.facetedOptions || {}),
116
+ onExpandedChange: (updaterOrValue) => valueUpdater(updaterOrValue, expandedState),
117
+ ...props.paginationOptions || {},
118
+ onPaginationChange: (updaterOrValue) => valueUpdater(updaterOrValue, paginationState),
119
+ ...props.facetedOptions || {},
245
120
  state: {
246
121
  get globalFilter() {
247
- return globalFilterState.value
122
+ return globalFilterState.value;
248
123
  },
249
124
  get columnFilters() {
250
- return columnFiltersState.value
125
+ return columnFiltersState.value;
251
126
  },
252
127
  get columnOrder() {
253
- return columnOrderState.value
128
+ return columnOrderState.value;
254
129
  },
255
130
  get columnVisibility() {
256
- return columnVisibilityState.value
131
+ return columnVisibilityState.value;
257
132
  },
258
133
  get columnPinning() {
259
- return columnPinningState.value
134
+ return columnPinningState.value;
260
135
  },
261
136
  get expanded() {
262
- return expandedState.value
137
+ return expandedState.value;
263
138
  },
264
139
  get rowSelection() {
265
- return rowSelectionState.value
140
+ return rowSelectionState.value;
266
141
  },
267
142
  get sorting() {
268
- return sortingState.value
143
+ return sortingState.value;
269
144
  },
270
145
  get grouping() {
271
- return groupingState.value
146
+ return groupingState.value;
272
147
  },
273
148
  get rowPinning() {
274
- return rowPinningState.value
149
+ return rowPinningState.value;
275
150
  },
276
151
  get columnSizing() {
277
- return columnSizingState.value
152
+ return columnSizingState.value;
278
153
  },
279
154
  get columnSizingInfo() {
280
- return columnSizingInfoState.value
155
+ return columnSizingInfoState.value;
281
156
  },
282
157
  get pagination() {
283
- return paginationState.value
158
+ return paginationState.value;
284
159
  }
285
160
  }
286
- })
287
-
288
- function valueUpdater<T extends Updater<any>>(updaterOrValue: T, ref: Ref) {
289
- ref.value = typeof updaterOrValue === 'function' ? updaterOrValue(ref.value) : updaterOrValue
161
+ });
162
+ function valueUpdater(updaterOrValue, ref2) {
163
+ ref2.value = typeof updaterOrValue === "function" ? updaterOrValue(ref2.value) : updaterOrValue;
290
164
  }
291
-
292
- function handleRowSelect(row: TableRow<T>, e: Event) {
165
+ function handleRowSelect(row, e) {
293
166
  if (!props.onSelect) {
294
- return
167
+ return;
295
168
  }
296
- const target = e.target as HTMLElement
297
- const isInteractive = target.closest('button') || target.closest('a')
169
+ const target = e.target;
170
+ const isInteractive = target.closest("button") || target.closest("a");
298
171
  if (isInteractive) {
299
- return
172
+ return;
300
173
  }
301
-
302
- e.preventDefault()
303
- e.stopPropagation()
304
-
305
- props.onSelect(row, e)
174
+ e.preventDefault();
175
+ e.stopPropagation();
176
+ props.onSelect(row, e);
306
177
  }
307
-
178
+ watch(
179
+ () => props.data,
180
+ () => {
181
+ data.value = props.data ? [...props.data] : [];
182
+ },
183
+ props.watchOptions
184
+ );
308
185
  defineExpose({
186
+ tableRef,
309
187
  tableApi
310
- })
188
+ });
311
189
  </script>
312
190
 
313
191
  <template>
314
192
  <Primitive :as="as" :class="ui.root({ class: [props.class, props.ui?.root] })">
315
- <table :class="ui.base({ class: [props.ui?.base] })">
193
+ <table ref="tableRef" :class="ui.base({ class: [props.ui?.base] })">
316
194
  <caption v-if="caption || !!slots.caption" :class="ui.caption({ class: [props.ui?.caption] })">
317
195
  <slot name="caption">
318
196
  {{ caption }}
@@ -325,7 +203,14 @@ defineExpose({
325
203
  v-for="header in headerGroup.headers"
326
204
  :key="header.id"
327
205
  :data-pinned="header.column.getIsPinned()"
328
- :class="ui.th({ class: [props.ui?.th, header.column.columnDef.meta?.class?.th], pinned: !!header.column.getIsPinned() })"
206
+ :colspan="header.colSpan > 1 ? header.colSpan : void 0"
207
+ :class="ui.th({
208
+ class: [
209
+ props.ui?.th,
210
+ typeof header.column.columnDef.meta?.class?.th === 'function' ? header.column.columnDef.meta.class.th(header) : header.column.columnDef.meta?.class?.th
211
+ ],
212
+ pinned: !!header.column.getIsPinned()
213
+ })"
329
214
  >
330
215
  <slot :name="`${header.id}-header`" v-bind="header.getContext()">
331
216
  <FlexRender v-if="!header.isPlaceholder" :render="header.column.columnDef.header" :props="header.getContext()" />
@@ -341,16 +226,27 @@ defineExpose({
341
226
  :data-selected="row.getIsSelected()"
342
227
  :data-selectable="!!props.onSelect"
343
228
  :data-expanded="row.getIsExpanded()"
344
- :role="props.onSelect ? 'button' : undefined"
345
- :tabindex="props.onSelect ? 0 : undefined"
346
- :class="ui.tr({ class: [props.ui?.tr] })"
229
+ :role="props.onSelect ? 'button' : void 0"
230
+ :tabindex="props.onSelect ? 0 : void 0"
231
+ :class="ui.tr({
232
+ class: [
233
+ props.ui?.tr,
234
+ typeof tableApi.options.meta?.class?.tr === 'function' ? tableApi.options.meta.class.tr(row) : tableApi.options.meta?.class?.tr
235
+ ]
236
+ })"
347
237
  @click="handleRowSelect(row, $event)"
348
238
  >
349
239
  <td
350
240
  v-for="cell in row.getVisibleCells()"
351
241
  :key="cell.id"
352
242
  :data-pinned="cell.column.getIsPinned()"
353
- :class="ui.td({ class: [props.ui?.td, cell.column.columnDef.meta?.class?.td], pinned: !!cell.column.getIsPinned() })"
243
+ :class="ui.td({
244
+ class: [
245
+ props.ui?.td,
246
+ typeof cell.column.columnDef.meta?.class?.td === 'function' ? cell.column.columnDef.meta.class.td(cell) : cell.column.columnDef.meta?.class?.td
247
+ ],
248
+ pinned: !!cell.column.getIsPinned()
249
+ })"
354
250
  >
355
251
  <slot :name="`${cell.column.id}-cell`" v-bind="cell.getContext()">
356
252
  <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />