@tanstack/vue-table 8.20.2 → 8.20.4

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.
@@ -1,7 +1,7 @@
1
1
  import { TableOptions, RowData } from '@tanstack/table-core';
2
2
  import { MaybeRef } from 'vue';
3
3
  export * from '@tanstack/table-core';
4
- type TableOptionsWithReactiveData<TData extends RowData> = Omit<TableOptions<TData>, 'data'> & {
4
+ export type TableOptionsWithReactiveData<TData extends RowData> = Omit<TableOptions<TData>, 'data'> & {
5
5
  data: MaybeRef<TData[]>;
6
6
  };
7
7
  export declare const FlexRender: import("vue").DefineComponent<Readonly<{
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { createTable } from '@tanstack/table-core';
12
12
  export * from '@tanstack/table-core';
13
- import { defineComponent, h, isRef, watch, unref, ref, watchEffect } from 'vue';
13
+ import { defineComponent, h, isRef, shallowRef, watch, ref, watchEffect, unref } from 'vue';
14
14
 
15
15
  function trueFn() {
16
16
  return true;
@@ -88,6 +88,7 @@ function getOptionsWithReactiveData(options) {
88
88
  });
89
89
  }
90
90
  function useVueTable(initialOptions) {
91
+ const IS_REACTIVE = isRef(initialOptions.data);
91
92
  const resolvedOptions = mergeProxy({
92
93
  state: {},
93
94
  // Dummy state
@@ -95,21 +96,24 @@ function useVueTable(initialOptions) {
95
96
  // noop
96
97
  renderFallbackValue: null,
97
98
  mergeOptions(defaultOptions, options) {
98
- return mergeProxy(defaultOptions, options);
99
+ return IS_REACTIVE ? {
100
+ ...defaultOptions,
101
+ ...options
102
+ } : mergeProxy(defaultOptions, options);
99
103
  }
100
- }, getOptionsWithReactiveData(initialOptions));
104
+ }, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions);
101
105
  const table = createTable(resolvedOptions);
102
106
 
103
107
  // Add reactivity support
104
- if (isRef(initialOptions.data)) {
105
- watch(initialOptions.data, () => {
108
+ if (IS_REACTIVE) {
109
+ const dataRef = shallowRef(initialOptions.data);
110
+ watch(dataRef, () => {
106
111
  table.setState(prev => ({
107
112
  ...prev,
108
- data: unref(initialOptions.data)
113
+ data: dataRef.value
109
114
  }));
110
115
  }, {
111
- immediate: true,
112
- deep: true
116
+ immediate: true
113
117
  });
114
118
  }
115
119
 
@@ -121,7 +125,7 @@ function useVueTable(initialOptions) {
121
125
  const stateProxy = new Proxy({}, {
122
126
  get: (_, prop) => state.value[prop]
123
127
  });
124
- return mergeProxy(prev, getOptionsWithReactiveData(initialOptions), {
128
+ return mergeProxy(prev, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions, {
125
129
  // merge the initialState and `options.state`
126
130
  // create a new proxy on each `setOptions` call
127
131
  // and get the value from state on each property access
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../src/merge-proxy.ts","../../src/index.ts"],"sourcesContent":["function trueFn() {\n return true\n}\n\nconst $PROXY = Symbol('merge-proxy')\n\n// https://github.com/solidjs/solid/blob/c20ca4fd8c36bc0522fedb2c7f38a110b7ee2663/packages/solid/src/render/component.ts#L51-L118\nconst propTraps: ProxyHandler<{\n get: (k: string | number | symbol) => any\n has: (k: string | number | symbol) => boolean\n keys: () => string[]\n}> = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver\n return _.get(property)\n },\n has(_, property) {\n return _.has(property)\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property)\n },\n set: trueFn,\n deleteProperty: trueFn,\n }\n },\n ownKeys(_) {\n return _.keys()\n },\n}\n\ntype UnboxLazy<T> = T extends () => infer U ? U : T\ntype BoxedTupleTypes<T extends any[]> = {\n [P in keyof T]: [UnboxLazy<T[P]>]\n}[Exclude<keyof T, keyof any[]>]\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never\ntype UnboxIntersection<T> = T extends { 0: infer U } ? U : never\ntype MergeProxy<T extends any[]> = UnboxIntersection<\n UnionToIntersection<BoxedTupleTypes<T>>\n>\n\nfunction resolveSource(s: any) {\n return 'value' in s ? s.value : s\n}\n\nexport function mergeProxy<T extends any[]>(...sources: T): MergeProxy<T>\nexport function mergeProxy(...sources: any): any {\n return new Proxy(\n {\n get(property: string | number | symbol) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property]\n if (v !== undefined) return v\n }\n },\n has(property: string | number | symbol) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true\n }\n return false\n },\n keys() {\n const keys = []\n for (let i = 0; i < sources.length; i++)\n keys.push(...Object.keys(resolveSource(sources[i])))\n return [...Array.from(new Set(keys))]\n },\n },\n propTraps\n )\n}\n","import { TableOptions, createTable, RowData } from '@tanstack/table-core'\nimport {\n h,\n watchEffect,\n ref,\n defineComponent,\n isRef,\n unref,\n MaybeRef,\n watch,\n} from 'vue'\nimport { mergeProxy } from './merge-proxy'\n\nexport * from '@tanstack/table-core'\n\ntype TableOptionsWithReactiveData<TData extends RowData> = Omit<\n TableOptions<TData>,\n 'data'\n> & {\n data: MaybeRef<TData[]>\n}\n\nexport const FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: (props: { render: any; props: any }) => {\n return () => {\n if (\n typeof props.render === 'function' ||\n typeof props.render === 'object'\n ) {\n return h(props.render, props.props)\n }\n\n return props.render\n }\n },\n})\n\nfunction getOptionsWithReactiveData<TData extends RowData>(\n options: TableOptionsWithReactiveData<TData>\n) {\n return mergeProxy(options, {\n data: unref(options.data),\n })\n}\n\nexport function useVueTable<TData extends RowData>(\n initialOptions: TableOptionsWithReactiveData<TData>\n) {\n const resolvedOptions = mergeProxy(\n {\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n renderFallbackValue: null,\n mergeOptions(\n defaultOptions: TableOptions<TData>,\n options: TableOptions<TData>\n ) {\n return mergeProxy(defaultOptions, options)\n },\n },\n getOptionsWithReactiveData(initialOptions)\n )\n\n const table = createTable<TData>(resolvedOptions)\n\n // Add reactivity support\n if (isRef(initialOptions.data)) {\n watch(\n initialOptions.data,\n () => {\n table.setState(prev => ({\n ...prev,\n data: unref(initialOptions.data),\n }))\n },\n { immediate: true, deep: true }\n )\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState)\n\n watchEffect(() => {\n table.setOptions(prev => {\n const stateProxy = new Proxy({} as typeof state.value, {\n get: (_, prop) => state.value[prop as keyof typeof state.value],\n })\n\n return mergeProxy(prev, getOptionsWithReactiveData(initialOptions), {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, initialOptions.state ?? {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: (updater: any) => {\n if (updater instanceof Function) {\n state.value = updater(state.value)\n } else {\n state.value = updater\n }\n\n initialOptions.onStateChange?.(updater)\n },\n })\n })\n })\n\n return table\n}\n"],"names":["trueFn","$PROXY","Symbol","propTraps","get","_","property","receiver","has","set","deleteProperty","getOwnPropertyDescriptor","configurable","enumerable","ownKeys","keys","resolveSource","s","value","mergeProxy","_len","arguments","length","sources","Array","_key","Proxy","i","v","undefined","push","Object","from","Set","FlexRender","defineComponent","props","setup","render","h","getOptionsWithReactiveData","options","data","unref","useVueTable","initialOptions","resolvedOptions","state","onStateChange","renderFallbackValue","mergeOptions","defaultOptions","table","createTable","isRef","watch","setState","prev","immediate","deep","ref","initialState","watchEffect","setOptions","_initialOptions$state","stateProxy","prop","updater","Function"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/merge-proxy.ts","../../src/index.ts"],"sourcesContent":["function trueFn() {\n return true\n}\n\nconst $PROXY = Symbol('merge-proxy')\n\n// https://github.com/solidjs/solid/blob/c20ca4fd8c36bc0522fedb2c7f38a110b7ee2663/packages/solid/src/render/component.ts#L51-L118\nconst propTraps: ProxyHandler<{\n get: (k: string | number | symbol) => any\n has: (k: string | number | symbol) => boolean\n keys: () => string[]\n}> = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver\n return _.get(property)\n },\n has(_, property) {\n return _.has(property)\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property)\n },\n set: trueFn,\n deleteProperty: trueFn,\n }\n },\n ownKeys(_) {\n return _.keys()\n },\n}\n\ntype UnboxLazy<T> = T extends () => infer U ? U : T\ntype BoxedTupleTypes<T extends any[]> = {\n [P in keyof T]: [UnboxLazy<T[P]>]\n}[Exclude<keyof T, keyof any[]>]\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never\ntype UnboxIntersection<T> = T extends { 0: infer U } ? U : never\ntype MergeProxy<T extends any[]> = UnboxIntersection<\n UnionToIntersection<BoxedTupleTypes<T>>\n>\n\nfunction resolveSource(s: any) {\n return 'value' in s ? s.value : s\n}\n\nexport function mergeProxy<T extends any[]>(...sources: T): MergeProxy<T>\nexport function mergeProxy(...sources: any): any {\n return new Proxy(\n {\n get(property: string | number | symbol) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property]\n if (v !== undefined) return v\n }\n },\n has(property: string | number | symbol) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true\n }\n return false\n },\n keys() {\n const keys = []\n for (let i = 0; i < sources.length; i++)\n keys.push(...Object.keys(resolveSource(sources[i])))\n return [...Array.from(new Set(keys))]\n },\n },\n propTraps\n )\n}\n","import {\n TableOptions,\n createTable,\n RowData,\n TableOptionsResolved,\n} from '@tanstack/table-core'\nimport {\n h,\n watchEffect,\n ref,\n defineComponent,\n isRef,\n unref,\n MaybeRef,\n watch,\n shallowRef,\n} from 'vue'\nimport { mergeProxy } from './merge-proxy'\n\nexport * from '@tanstack/table-core'\n\nexport type TableOptionsWithReactiveData<TData extends RowData> = Omit<\n TableOptions<TData>,\n 'data'\n> & {\n data: MaybeRef<TData[]>\n}\n\nexport const FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: (props: { render: any; props: any }) => {\n return () => {\n if (\n typeof props.render === 'function' ||\n typeof props.render === 'object'\n ) {\n return h(props.render, props.props)\n }\n\n return props.render\n }\n },\n})\n\nfunction getOptionsWithReactiveData<TData extends RowData>(\n options: TableOptionsWithReactiveData<TData>\n) {\n return mergeProxy(options, {\n data: unref(options.data),\n })\n}\n\nexport function useVueTable<TData extends RowData>(\n initialOptions: TableOptionsWithReactiveData<TData>\n) {\n const IS_REACTIVE = isRef(initialOptions.data)\n\n const resolvedOptions = mergeProxy(\n {\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n renderFallbackValue: null,\n mergeOptions(\n defaultOptions: TableOptions<TData>,\n options: TableOptions<TData>\n ) {\n return IS_REACTIVE\n ? {\n ...defaultOptions,\n ...options,\n }\n : mergeProxy(defaultOptions, options)\n },\n },\n IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions\n )\n\n const table = createTable<TData>(\n resolvedOptions as TableOptionsResolved<TData>\n )\n\n // Add reactivity support\n if (IS_REACTIVE) {\n const dataRef = shallowRef(initialOptions.data)\n watch(\n dataRef,\n () => {\n table.setState(prev => ({\n ...prev,\n data: dataRef.value,\n }))\n },\n { immediate: true }\n )\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState)\n\n watchEffect(() => {\n table.setOptions(prev => {\n const stateProxy = new Proxy({} as typeof state.value, {\n get: (_, prop) => state.value[prop as keyof typeof state.value],\n })\n\n return mergeProxy(\n prev,\n IS_REACTIVE\n ? getOptionsWithReactiveData(initialOptions)\n : initialOptions,\n {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, initialOptions.state ?? {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: (updater: any) => {\n if (updater instanceof Function) {\n state.value = updater(state.value)\n } else {\n state.value = updater\n }\n\n initialOptions.onStateChange?.(updater)\n },\n }\n )\n })\n })\n\n return table\n}\n"],"names":["trueFn","$PROXY","Symbol","propTraps","get","_","property","receiver","has","set","deleteProperty","getOwnPropertyDescriptor","configurable","enumerable","ownKeys","keys","resolveSource","s","value","mergeProxy","_len","arguments","length","sources","Array","_key","Proxy","i","v","undefined","push","Object","from","Set","FlexRender","defineComponent","props","setup","render","h","getOptionsWithReactiveData","options","data","unref","useVueTable","initialOptions","IS_REACTIVE","isRef","resolvedOptions","state","onStateChange","renderFallbackValue","mergeOptions","defaultOptions","table","createTable","dataRef","shallowRef","watch","setState","prev","immediate","ref","initialState","watchEffect","setOptions","_initialOptions$state","stateProxy","prop","updater","Function"],"mappings":"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"}
@@ -31,6 +31,7 @@ function getOptionsWithReactiveData(options) {
31
31
  });
32
32
  }
33
33
  function useVueTable(initialOptions) {
34
+ const IS_REACTIVE = vue.isRef(initialOptions.data);
34
35
  const resolvedOptions = mergeProxy.mergeProxy({
35
36
  state: {},
36
37
  // Dummy state
@@ -38,21 +39,24 @@ function useVueTable(initialOptions) {
38
39
  // noop
39
40
  renderFallbackValue: null,
40
41
  mergeOptions(defaultOptions, options) {
41
- return mergeProxy.mergeProxy(defaultOptions, options);
42
+ return IS_REACTIVE ? {
43
+ ...defaultOptions,
44
+ ...options
45
+ } : mergeProxy.mergeProxy(defaultOptions, options);
42
46
  }
43
- }, getOptionsWithReactiveData(initialOptions));
47
+ }, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions);
44
48
  const table = tableCore.createTable(resolvedOptions);
45
49
 
46
50
  // Add reactivity support
47
- if (vue.isRef(initialOptions.data)) {
48
- vue.watch(initialOptions.data, () => {
51
+ if (IS_REACTIVE) {
52
+ const dataRef = vue.shallowRef(initialOptions.data);
53
+ vue.watch(dataRef, () => {
49
54
  table.setState(prev => ({
50
55
  ...prev,
51
- data: vue.unref(initialOptions.data)
56
+ data: dataRef.value
52
57
  }));
53
58
  }, {
54
- immediate: true,
55
- deep: true
59
+ immediate: true
56
60
  });
57
61
  }
58
62
 
@@ -64,7 +68,7 @@ function useVueTable(initialOptions) {
64
68
  const stateProxy = new Proxy({}, {
65
69
  get: (_, prop) => state.value[prop]
66
70
  });
67
- return mergeProxy.mergeProxy(prev, getOptionsWithReactiveData(initialOptions), {
71
+ return mergeProxy.mergeProxy(prev, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions, {
68
72
  // merge the initialState and `options.state`
69
73
  // create a new proxy on each `setOptions` call
70
74
  // and get the value from state on each property access
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { TableOptions, createTable, RowData } from '@tanstack/table-core'\nimport {\n h,\n watchEffect,\n ref,\n defineComponent,\n isRef,\n unref,\n MaybeRef,\n watch,\n} from 'vue'\nimport { mergeProxy } from './merge-proxy'\n\nexport * from '@tanstack/table-core'\n\ntype TableOptionsWithReactiveData<TData extends RowData> = Omit<\n TableOptions<TData>,\n 'data'\n> & {\n data: MaybeRef<TData[]>\n}\n\nexport const FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: (props: { render: any; props: any }) => {\n return () => {\n if (\n typeof props.render === 'function' ||\n typeof props.render === 'object'\n ) {\n return h(props.render, props.props)\n }\n\n return props.render\n }\n },\n})\n\nfunction getOptionsWithReactiveData<TData extends RowData>(\n options: TableOptionsWithReactiveData<TData>\n) {\n return mergeProxy(options, {\n data: unref(options.data),\n })\n}\n\nexport function useVueTable<TData extends RowData>(\n initialOptions: TableOptionsWithReactiveData<TData>\n) {\n const resolvedOptions = mergeProxy(\n {\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n renderFallbackValue: null,\n mergeOptions(\n defaultOptions: TableOptions<TData>,\n options: TableOptions<TData>\n ) {\n return mergeProxy(defaultOptions, options)\n },\n },\n getOptionsWithReactiveData(initialOptions)\n )\n\n const table = createTable<TData>(resolvedOptions)\n\n // Add reactivity support\n if (isRef(initialOptions.data)) {\n watch(\n initialOptions.data,\n () => {\n table.setState(prev => ({\n ...prev,\n data: unref(initialOptions.data),\n }))\n },\n { immediate: true, deep: true }\n )\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState)\n\n watchEffect(() => {\n table.setOptions(prev => {\n const stateProxy = new Proxy({} as typeof state.value, {\n get: (_, prop) => state.value[prop as keyof typeof state.value],\n })\n\n return mergeProxy(prev, getOptionsWithReactiveData(initialOptions), {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, initialOptions.state ?? {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: (updater: any) => {\n if (updater instanceof Function) {\n state.value = updater(state.value)\n } else {\n state.value = updater\n }\n\n initialOptions.onStateChange?.(updater)\n },\n })\n })\n })\n\n return table\n}\n"],"names":["FlexRender","defineComponent","props","setup","render","h","getOptionsWithReactiveData","options","mergeProxy","data","unref","useVueTable","initialOptions","resolvedOptions","state","onStateChange","renderFallbackValue","mergeOptions","defaultOptions","table","createTable","isRef","watch","setState","prev","immediate","deep","ref","initialState","watchEffect","setOptions","_initialOptions$state","stateProxy","Proxy","get","_","prop","value","updater","Function"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import {\n TableOptions,\n createTable,\n RowData,\n TableOptionsResolved,\n} from '@tanstack/table-core'\nimport {\n h,\n watchEffect,\n ref,\n defineComponent,\n isRef,\n unref,\n MaybeRef,\n watch,\n shallowRef,\n} from 'vue'\nimport { mergeProxy } from './merge-proxy'\n\nexport * from '@tanstack/table-core'\n\nexport type TableOptionsWithReactiveData<TData extends RowData> = Omit<\n TableOptions<TData>,\n 'data'\n> & {\n data: MaybeRef<TData[]>\n}\n\nexport const FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: (props: { render: any; props: any }) => {\n return () => {\n if (\n typeof props.render === 'function' ||\n typeof props.render === 'object'\n ) {\n return h(props.render, props.props)\n }\n\n return props.render\n }\n },\n})\n\nfunction getOptionsWithReactiveData<TData extends RowData>(\n options: TableOptionsWithReactiveData<TData>\n) {\n return mergeProxy(options, {\n data: unref(options.data),\n })\n}\n\nexport function useVueTable<TData extends RowData>(\n initialOptions: TableOptionsWithReactiveData<TData>\n) {\n const IS_REACTIVE = isRef(initialOptions.data)\n\n const resolvedOptions = mergeProxy(\n {\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n renderFallbackValue: null,\n mergeOptions(\n defaultOptions: TableOptions<TData>,\n options: TableOptions<TData>\n ) {\n return IS_REACTIVE\n ? {\n ...defaultOptions,\n ...options,\n }\n : mergeProxy(defaultOptions, options)\n },\n },\n IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions\n )\n\n const table = createTable<TData>(\n resolvedOptions as TableOptionsResolved<TData>\n )\n\n // Add reactivity support\n if (IS_REACTIVE) {\n const dataRef = shallowRef(initialOptions.data)\n watch(\n dataRef,\n () => {\n table.setState(prev => ({\n ...prev,\n data: dataRef.value,\n }))\n },\n { immediate: true }\n )\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState)\n\n watchEffect(() => {\n table.setOptions(prev => {\n const stateProxy = new Proxy({} as typeof state.value, {\n get: (_, prop) => state.value[prop as keyof typeof state.value],\n })\n\n return mergeProxy(\n prev,\n IS_REACTIVE\n ? getOptionsWithReactiveData(initialOptions)\n : initialOptions,\n {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, initialOptions.state ?? {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: (updater: any) => {\n if (updater instanceof Function) {\n state.value = updater(state.value)\n } else {\n state.value = updater\n }\n\n initialOptions.onStateChange?.(updater)\n },\n }\n )\n })\n })\n\n return table\n}\n"],"names":["FlexRender","defineComponent","props","setup","render","h","getOptionsWithReactiveData","options","mergeProxy","data","unref","useVueTable","initialOptions","IS_REACTIVE","isRef","resolvedOptions","state","onStateChange","renderFallbackValue","mergeOptions","defaultOptions","table","createTable","dataRef","shallowRef","watch","setState","prev","value","immediate","ref","initialState","watchEffect","setOptions","_initialOptions$state","stateProxy","Proxy","get","_","prop","updater","Function"],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { createTable } from '@tanstack/table-core';
12
12
  export * from '@tanstack/table-core';
13
- import { defineComponent, h, isRef, watch, unref, ref, watchEffect } from 'vue';
13
+ import { defineComponent, h, isRef, shallowRef, watch, ref, watchEffect, unref } from 'vue';
14
14
 
15
15
  function trueFn() {
16
16
  return true;
@@ -88,6 +88,7 @@ function getOptionsWithReactiveData(options) {
88
88
  });
89
89
  }
90
90
  function useVueTable(initialOptions) {
91
+ const IS_REACTIVE = isRef(initialOptions.data);
91
92
  const resolvedOptions = mergeProxy({
92
93
  state: {},
93
94
  // Dummy state
@@ -95,21 +96,24 @@ function useVueTable(initialOptions) {
95
96
  // noop
96
97
  renderFallbackValue: null,
97
98
  mergeOptions(defaultOptions, options) {
98
- return mergeProxy(defaultOptions, options);
99
+ return IS_REACTIVE ? {
100
+ ...defaultOptions,
101
+ ...options
102
+ } : mergeProxy(defaultOptions, options);
99
103
  }
100
- }, getOptionsWithReactiveData(initialOptions));
104
+ }, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions);
101
105
  const table = createTable(resolvedOptions);
102
106
 
103
107
  // Add reactivity support
104
- if (isRef(initialOptions.data)) {
105
- watch(initialOptions.data, () => {
108
+ if (IS_REACTIVE) {
109
+ const dataRef = shallowRef(initialOptions.data);
110
+ watch(dataRef, () => {
106
111
  table.setState(prev => ({
107
112
  ...prev,
108
- data: unref(initialOptions.data)
113
+ data: dataRef.value
109
114
  }));
110
115
  }, {
111
- immediate: true,
112
- deep: true
116
+ immediate: true
113
117
  });
114
118
  }
115
119
 
@@ -121,7 +125,7 @@ function useVueTable(initialOptions) {
121
125
  const stateProxy = new Proxy({}, {
122
126
  get: (_, prop) => state.value[prop]
123
127
  });
124
- return mergeProxy(prev, getOptionsWithReactiveData(initialOptions), {
128
+ return mergeProxy(prev, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions, {
125
129
  // merge the initialState and `options.state`
126
130
  // create a new proxy on each `setOptions` call
127
131
  // and get the value from state on each property access
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/merge-proxy.ts","../../src/index.ts"],"sourcesContent":["function trueFn() {\n return true\n}\n\nconst $PROXY = Symbol('merge-proxy')\n\n// https://github.com/solidjs/solid/blob/c20ca4fd8c36bc0522fedb2c7f38a110b7ee2663/packages/solid/src/render/component.ts#L51-L118\nconst propTraps: ProxyHandler<{\n get: (k: string | number | symbol) => any\n has: (k: string | number | symbol) => boolean\n keys: () => string[]\n}> = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver\n return _.get(property)\n },\n has(_, property) {\n return _.has(property)\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property)\n },\n set: trueFn,\n deleteProperty: trueFn,\n }\n },\n ownKeys(_) {\n return _.keys()\n },\n}\n\ntype UnboxLazy<T> = T extends () => infer U ? U : T\ntype BoxedTupleTypes<T extends any[]> = {\n [P in keyof T]: [UnboxLazy<T[P]>]\n}[Exclude<keyof T, keyof any[]>]\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never\ntype UnboxIntersection<T> = T extends { 0: infer U } ? U : never\ntype MergeProxy<T extends any[]> = UnboxIntersection<\n UnionToIntersection<BoxedTupleTypes<T>>\n>\n\nfunction resolveSource(s: any) {\n return 'value' in s ? s.value : s\n}\n\nexport function mergeProxy<T extends any[]>(...sources: T): MergeProxy<T>\nexport function mergeProxy(...sources: any): any {\n return new Proxy(\n {\n get(property: string | number | symbol) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property]\n if (v !== undefined) return v\n }\n },\n has(property: string | number | symbol) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true\n }\n return false\n },\n keys() {\n const keys = []\n for (let i = 0; i < sources.length; i++)\n keys.push(...Object.keys(resolveSource(sources[i])))\n return [...Array.from(new Set(keys))]\n },\n },\n propTraps\n )\n}\n","import { TableOptions, createTable, RowData } from '@tanstack/table-core'\nimport {\n h,\n watchEffect,\n ref,\n defineComponent,\n isRef,\n unref,\n MaybeRef,\n watch,\n} from 'vue'\nimport { mergeProxy } from './merge-proxy'\n\nexport * from '@tanstack/table-core'\n\ntype TableOptionsWithReactiveData<TData extends RowData> = Omit<\n TableOptions<TData>,\n 'data'\n> & {\n data: MaybeRef<TData[]>\n}\n\nexport const FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: (props: { render: any; props: any }) => {\n return () => {\n if (\n typeof props.render === 'function' ||\n typeof props.render === 'object'\n ) {\n return h(props.render, props.props)\n }\n\n return props.render\n }\n },\n})\n\nfunction getOptionsWithReactiveData<TData extends RowData>(\n options: TableOptionsWithReactiveData<TData>\n) {\n return mergeProxy(options, {\n data: unref(options.data),\n })\n}\n\nexport function useVueTable<TData extends RowData>(\n initialOptions: TableOptionsWithReactiveData<TData>\n) {\n const resolvedOptions = mergeProxy(\n {\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n renderFallbackValue: null,\n mergeOptions(\n defaultOptions: TableOptions<TData>,\n options: TableOptions<TData>\n ) {\n return mergeProxy(defaultOptions, options)\n },\n },\n getOptionsWithReactiveData(initialOptions)\n )\n\n const table = createTable<TData>(resolvedOptions)\n\n // Add reactivity support\n if (isRef(initialOptions.data)) {\n watch(\n initialOptions.data,\n () => {\n table.setState(prev => ({\n ...prev,\n data: unref(initialOptions.data),\n }))\n },\n { immediate: true, deep: true }\n )\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState)\n\n watchEffect(() => {\n table.setOptions(prev => {\n const stateProxy = new Proxy({} as typeof state.value, {\n get: (_, prop) => state.value[prop as keyof typeof state.value],\n })\n\n return mergeProxy(prev, getOptionsWithReactiveData(initialOptions), {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, initialOptions.state ?? {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: (updater: any) => {\n if (updater instanceof Function) {\n state.value = updater(state.value)\n } else {\n state.value = updater\n }\n\n initialOptions.onStateChange?.(updater)\n },\n })\n })\n })\n\n return table\n}\n"],"names":["trueFn","$PROXY","Symbol","propTraps","get","_","property","receiver","has","set","deleteProperty","getOwnPropertyDescriptor","configurable","enumerable","ownKeys","keys","resolveSource","s","value","mergeProxy","_len","arguments","length","sources","Array","_key","Proxy","i","v","undefined","push","Object","from","Set","FlexRender","defineComponent","props","setup","render","h","getOptionsWithReactiveData","options","data","unref","useVueTable","initialOptions","resolvedOptions","state","onStateChange","renderFallbackValue","mergeOptions","defaultOptions","table","createTable","isRef","watch","setState","prev","immediate","deep","ref","initialState","watchEffect","setOptions","_initialOptions$state","stateProxy","prop","updater","Function"],"mappings":";;;;;;;;;;;;;;AAAA,SAASA,MAAMA,GAAG;AAChB,EAAA,OAAO,IAAI,CAAA;AACb,CAAA;AAEA,MAAMC,MAAM,GAAGC,MAAM,CAAC,aAAa,CAAC,CAAA;;AAEpC;AACA,MAAMC,SAIJ,GAAG;AACHC,EAAAA,GAAGA,CAACC,CAAC,EAAEC,QAAQ,EAAEC,QAAQ,EAAE;AACzB,IAAA,IAAID,QAAQ,KAAKL,MAAM,EAAE,OAAOM,QAAQ,CAAA;AACxC,IAAA,OAAOF,CAAC,CAACD,GAAG,CAACE,QAAQ,CAAC,CAAA;GACvB;AACDE,EAAAA,GAAGA,CAACH,CAAC,EAAEC,QAAQ,EAAE;AACf,IAAA,OAAOD,CAAC,CAACG,GAAG,CAACF,QAAQ,CAAC,CAAA;GACvB;AACDG,EAAAA,GAAG,EAAET,MAAM;AACXU,EAAAA,cAAc,EAAEV,MAAM;AACtBW,EAAAA,wBAAwBA,CAACN,CAAC,EAAEC,QAAQ,EAAE;IACpC,OAAO;AACLM,MAAAA,YAAY,EAAE,IAAI;AAClBC,MAAAA,UAAU,EAAE,IAAI;AAChBT,MAAAA,GAAGA,GAAG;AACJ,QAAA,OAAOC,CAAC,CAACD,GAAG,CAACE,QAAQ,CAAC,CAAA;OACvB;AACDG,MAAAA,GAAG,EAAET,MAAM;AACXU,MAAAA,cAAc,EAAEV,MAAAA;KACjB,CAAA;GACF;EACDc,OAAOA,CAACT,CAAC,EAAE;AACT,IAAA,OAAOA,CAAC,CAACU,IAAI,EAAE,CAAA;AACjB,GAAA;AACF,CAAC,CAAA;AAgBD,SAASC,aAAaA,CAACC,CAAM,EAAE;EAC7B,OAAO,OAAO,IAAIA,CAAC,GAAGA,CAAC,CAACC,KAAK,GAAGD,CAAC,CAAA;AACnC,CAAA;AAGO,SAASE,UAAUA,GAAuB;AAAA,EAAA,KAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAnBC,OAAO,GAAAC,IAAAA,KAAA,CAAAJ,IAAA,GAAAK,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA,EAAA,EAAA;AAAPF,IAAAA,OAAO,CAAAE,IAAA,CAAAJ,GAAAA,SAAA,CAAAI,IAAA,CAAA,CAAA;AAAA,GAAA;EACnC,OAAO,IAAIC,KAAK,CACd;IACEtB,GAAGA,CAACE,QAAkC,EAAE;AACtC,MAAA,KAAK,IAAIqB,CAAC,GAAGJ,OAAO,CAACD,MAAM,GAAG,CAAC,EAAEK,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;QAC5C,MAAMC,CAAC,GAAGZ,aAAa,CAACO,OAAO,CAACI,CAAC,CAAC,CAAC,CAACrB,QAAQ,CAAC,CAAA;AAC7C,QAAA,IAAIsB,CAAC,KAAKC,SAAS,EAAE,OAAOD,CAAC,CAAA;AAC/B,OAAA;KACD;IACDpB,GAAGA,CAACF,QAAkC,EAAE;AACtC,MAAA,KAAK,IAAIqB,CAAC,GAAGJ,OAAO,CAACD,MAAM,GAAG,CAAC,EAAEK,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;QAC5C,IAAIrB,QAAQ,IAAIU,aAAa,CAACO,OAAO,CAACI,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAA;AACxD,OAAA;AACA,MAAA,OAAO,KAAK,CAAA;KACb;AACDZ,IAAAA,IAAIA,GAAG;MACL,MAAMA,IAAI,GAAG,EAAE,CAAA;AACf,MAAA,KAAK,IAAIY,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,OAAO,CAACD,MAAM,EAAEK,CAAC,EAAE,EACrCZ,IAAI,CAACe,IAAI,CAAC,GAAGC,MAAM,CAAChB,IAAI,CAACC,aAAa,CAACO,OAAO,CAACI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,MAAA,OAAO,CAAC,GAAGH,KAAK,CAACQ,IAAI,CAAC,IAAIC,GAAG,CAAClB,IAAI,CAAC,CAAC,CAAC,CAAA;AACvC,KAAA;GACD,EACDZ,SACF,CAAC,CAAA;AACH;;AC1Da+B,MAAAA,UAAU,GAAGC,eAAe,CAAC;AACxCC,EAAAA,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;EAC1BC,KAAK,EAAGD,KAAkC,IAAK;AAC7C,IAAA,OAAO,MAAM;AACX,MAAA,IACE,OAAOA,KAAK,CAACE,MAAM,KAAK,UAAU,IAClC,OAAOF,KAAK,CAACE,MAAM,KAAK,QAAQ,EAChC;QACA,OAAOC,CAAC,CAACH,KAAK,CAACE,MAAM,EAAEF,KAAK,CAACA,KAAK,CAAC,CAAA;AACrC,OAAA;MAEA,OAAOA,KAAK,CAACE,MAAM,CAAA;KACpB,CAAA;AACH,GAAA;AACF,CAAC,EAAC;AAEF,SAASE,0BAA0BA,CACjCC,OAA4C,EAC5C;EACA,OAAOtB,UAAU,CAACsB,OAAO,EAAE;AACzBC,IAAAA,IAAI,EAAEC,KAAK,CAACF,OAAO,CAACC,IAAI,CAAA;AAC1B,GAAC,CAAC,CAAA;AACJ,CAAA;AAEO,SAASE,WAAWA,CACzBC,cAAmD,EACnD;EACA,MAAMC,eAAe,GAAG3B,UAAU,CAChC;IACE4B,KAAK,EAAE,EAAE;AAAE;AACXC,IAAAA,aAAa,EAAEA,MAAM,EAAE;AAAE;AACzBC,IAAAA,mBAAmB,EAAE,IAAI;AACzBC,IAAAA,YAAYA,CACVC,cAAmC,EACnCV,OAA4B,EAC5B;AACA,MAAA,OAAOtB,UAAU,CAACgC,cAAc,EAAEV,OAAO,CAAC,CAAA;AAC5C,KAAA;AACF,GAAC,EACDD,0BAA0B,CAACK,cAAc,CAC3C,CAAC,CAAA;AAED,EAAA,MAAMO,KAAK,GAAGC,WAAW,CAAQP,eAAe,CAAC,CAAA;;AAEjD;AACA,EAAA,IAAIQ,KAAK,CAACT,cAAc,CAACH,IAAI,CAAC,EAAE;AAC9Ba,IAAAA,KAAK,CACHV,cAAc,CAACH,IAAI,EACnB,MAAM;AACJU,MAAAA,KAAK,CAACI,QAAQ,CAACC,IAAI,KAAK;AACtB,QAAA,GAAGA,IAAI;AACPf,QAAAA,IAAI,EAAEC,KAAK,CAACE,cAAc,CAACH,IAAI,CAAA;AACjC,OAAC,CAAC,CAAC,CAAA;AACL,KAAC,EACD;AAAEgB,MAAAA,SAAS,EAAE,IAAI;AAAEC,MAAAA,IAAI,EAAE,IAAA;AAAK,KAChC,CAAC,CAAA;AACH,GAAA;;AAEA;AACA,EAAA,MAAMZ,KAAK,GAAGa,GAAG,CAACR,KAAK,CAACS,YAAY,CAAC,CAAA;AAErCC,EAAAA,WAAW,CAAC,MAAM;AAChBV,IAAAA,KAAK,CAACW,UAAU,CAACN,IAAI,IAAI;AAAA,MAAA,IAAAO,qBAAA,CAAA;AACvB,MAAA,MAAMC,UAAU,GAAG,IAAIvC,KAAK,CAAC,EAAE,EAAwB;QACrDtB,GAAG,EAAEA,CAACC,CAAC,EAAE6D,IAAI,KAAKnB,KAAK,CAAC7B,KAAK,CAACgD,IAAI,CAAA;AACpC,OAAC,CAAC,CAAA;MAEF,OAAO/C,UAAU,CAACsC,IAAI,EAAEjB,0BAA0B,CAACK,cAAc,CAAC,EAAE;AAClE;AACA;AACA;AACAE,QAAAA,KAAK,EAAE5B,UAAU,CAAC8C,UAAU,GAAAD,qBAAA,GAAEnB,cAAc,CAACE,KAAK,KAAAiB,IAAAA,GAAAA,qBAAA,GAAI,EAAE,CAAC;AACzD;AACA;QACAhB,aAAa,EAAGmB,OAAY,IAAK;UAC/B,IAAIA,OAAO,YAAYC,QAAQ,EAAE;YAC/BrB,KAAK,CAAC7B,KAAK,GAAGiD,OAAO,CAACpB,KAAK,CAAC7B,KAAK,CAAC,CAAA;AACpC,WAAC,MAAM;YACL6B,KAAK,CAAC7B,KAAK,GAAGiD,OAAO,CAAA;AACvB,WAAA;UAEAtB,cAAc,CAACG,aAAa,IAA5BH,IAAAA,IAAAA,cAAc,CAACG,aAAa,CAAGmB,OAAO,CAAC,CAAA;AACzC,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAC,CAAC,CAAA;AAEF,EAAA,OAAOf,KAAK,CAAA;AACd;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/merge-proxy.ts","../../src/index.ts"],"sourcesContent":["function trueFn() {\n return true\n}\n\nconst $PROXY = Symbol('merge-proxy')\n\n// https://github.com/solidjs/solid/blob/c20ca4fd8c36bc0522fedb2c7f38a110b7ee2663/packages/solid/src/render/component.ts#L51-L118\nconst propTraps: ProxyHandler<{\n get: (k: string | number | symbol) => any\n has: (k: string | number | symbol) => boolean\n keys: () => string[]\n}> = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver\n return _.get(property)\n },\n has(_, property) {\n return _.has(property)\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property)\n },\n set: trueFn,\n deleteProperty: trueFn,\n }\n },\n ownKeys(_) {\n return _.keys()\n },\n}\n\ntype UnboxLazy<T> = T extends () => infer U ? U : T\ntype BoxedTupleTypes<T extends any[]> = {\n [P in keyof T]: [UnboxLazy<T[P]>]\n}[Exclude<keyof T, keyof any[]>]\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never\ntype UnboxIntersection<T> = T extends { 0: infer U } ? U : never\ntype MergeProxy<T extends any[]> = UnboxIntersection<\n UnionToIntersection<BoxedTupleTypes<T>>\n>\n\nfunction resolveSource(s: any) {\n return 'value' in s ? s.value : s\n}\n\nexport function mergeProxy<T extends any[]>(...sources: T): MergeProxy<T>\nexport function mergeProxy(...sources: any): any {\n return new Proxy(\n {\n get(property: string | number | symbol) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property]\n if (v !== undefined) return v\n }\n },\n has(property: string | number | symbol) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true\n }\n return false\n },\n keys() {\n const keys = []\n for (let i = 0; i < sources.length; i++)\n keys.push(...Object.keys(resolveSource(sources[i])))\n return [...Array.from(new Set(keys))]\n },\n },\n propTraps\n )\n}\n","import {\n TableOptions,\n createTable,\n RowData,\n TableOptionsResolved,\n} from '@tanstack/table-core'\nimport {\n h,\n watchEffect,\n ref,\n defineComponent,\n isRef,\n unref,\n MaybeRef,\n watch,\n shallowRef,\n} from 'vue'\nimport { mergeProxy } from './merge-proxy'\n\nexport * from '@tanstack/table-core'\n\nexport type TableOptionsWithReactiveData<TData extends RowData> = Omit<\n TableOptions<TData>,\n 'data'\n> & {\n data: MaybeRef<TData[]>\n}\n\nexport const FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: (props: { render: any; props: any }) => {\n return () => {\n if (\n typeof props.render === 'function' ||\n typeof props.render === 'object'\n ) {\n return h(props.render, props.props)\n }\n\n return props.render\n }\n },\n})\n\nfunction getOptionsWithReactiveData<TData extends RowData>(\n options: TableOptionsWithReactiveData<TData>\n) {\n return mergeProxy(options, {\n data: unref(options.data),\n })\n}\n\nexport function useVueTable<TData extends RowData>(\n initialOptions: TableOptionsWithReactiveData<TData>\n) {\n const IS_REACTIVE = isRef(initialOptions.data)\n\n const resolvedOptions = mergeProxy(\n {\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n renderFallbackValue: null,\n mergeOptions(\n defaultOptions: TableOptions<TData>,\n options: TableOptions<TData>\n ) {\n return IS_REACTIVE\n ? {\n ...defaultOptions,\n ...options,\n }\n : mergeProxy(defaultOptions, options)\n },\n },\n IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions\n )\n\n const table = createTable<TData>(\n resolvedOptions as TableOptionsResolved<TData>\n )\n\n // Add reactivity support\n if (IS_REACTIVE) {\n const dataRef = shallowRef(initialOptions.data)\n watch(\n dataRef,\n () => {\n table.setState(prev => ({\n ...prev,\n data: dataRef.value,\n }))\n },\n { immediate: true }\n )\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState)\n\n watchEffect(() => {\n table.setOptions(prev => {\n const stateProxy = new Proxy({} as typeof state.value, {\n get: (_, prop) => state.value[prop as keyof typeof state.value],\n })\n\n return mergeProxy(\n prev,\n IS_REACTIVE\n ? getOptionsWithReactiveData(initialOptions)\n : initialOptions,\n {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, initialOptions.state ?? {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: (updater: any) => {\n if (updater instanceof Function) {\n state.value = updater(state.value)\n } else {\n state.value = updater\n }\n\n initialOptions.onStateChange?.(updater)\n },\n }\n )\n })\n })\n\n return table\n}\n"],"names":["trueFn","$PROXY","Symbol","propTraps","get","_","property","receiver","has","set","deleteProperty","getOwnPropertyDescriptor","configurable","enumerable","ownKeys","keys","resolveSource","s","value","mergeProxy","_len","arguments","length","sources","Array","_key","Proxy","i","v","undefined","push","Object","from","Set","FlexRender","defineComponent","props","setup","render","h","getOptionsWithReactiveData","options","data","unref","useVueTable","initialOptions","IS_REACTIVE","isRef","resolvedOptions","state","onStateChange","renderFallbackValue","mergeOptions","defaultOptions","table","createTable","dataRef","shallowRef","watch","setState","prev","immediate","ref","initialState","watchEffect","setOptions","_initialOptions$state","stateProxy","prop","updater","Function"],"mappings":"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"}
@@ -3608,6 +3608,7 @@
3608
3608
  });
3609
3609
  }
3610
3610
  function useVueTable(initialOptions) {
3611
+ const IS_REACTIVE = vue.isRef(initialOptions.data);
3611
3612
  const resolvedOptions = mergeProxy({
3612
3613
  state: {},
3613
3614
  // Dummy state
@@ -3615,21 +3616,24 @@
3615
3616
  // noop
3616
3617
  renderFallbackValue: null,
3617
3618
  mergeOptions(defaultOptions, options) {
3618
- return mergeProxy(defaultOptions, options);
3619
+ return IS_REACTIVE ? {
3620
+ ...defaultOptions,
3621
+ ...options
3622
+ } : mergeProxy(defaultOptions, options);
3619
3623
  }
3620
- }, getOptionsWithReactiveData(initialOptions));
3624
+ }, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions);
3621
3625
  const table = createTable(resolvedOptions);
3622
3626
 
3623
3627
  // Add reactivity support
3624
- if (vue.isRef(initialOptions.data)) {
3625
- vue.watch(initialOptions.data, () => {
3628
+ if (IS_REACTIVE) {
3629
+ const dataRef = vue.shallowRef(initialOptions.data);
3630
+ vue.watch(dataRef, () => {
3626
3631
  table.setState(prev => ({
3627
3632
  ...prev,
3628
- data: vue.unref(initialOptions.data)
3633
+ data: dataRef.value
3629
3634
  }));
3630
3635
  }, {
3631
- immediate: true,
3632
- deep: true
3636
+ immediate: true
3633
3637
  });
3634
3638
  }
3635
3639
 
@@ -3641,7 +3645,7 @@
3641
3645
  const stateProxy = new Proxy({}, {
3642
3646
  get: (_, prop) => state.value[prop]
3643
3647
  });
3644
- return mergeProxy(prev, getOptionsWithReactiveData(initialOptions), {
3648
+ return mergeProxy(prev, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions, {
3645
3649
  // merge the initialState and `options.state`
3646
3650
  // create a new proxy on each `setOptions` call
3647
3651
  // and get the value from state on each property access