@tanstack/vue-table 9.0.0-alpha.25 → 9.0.0-alpha.30

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,22 +1,73 @@
1
1
  let vue = require("vue");
2
2
 
3
3
  //#region src/FlexRender.ts
4
+ /**
5
+ * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.
6
+ * @example flexRender(cell.column.columnDef.cell, cell.getContext())
7
+ */
8
+ function flexRender(render, props) {
9
+ if (typeof render === "function") {
10
+ const rendered = render(props);
11
+ if ((0, vue.isVNode)(rendered)) return rendered;
12
+ if (typeof rendered === "function" || typeof rendered === "object") return (0, vue.h)(rendered, props);
13
+ return rendered;
14
+ }
15
+ if (typeof render === "object") return (0, vue.h)(render, props);
16
+ return render;
17
+ }
18
+ /**
19
+ * Simplified component for rendering headers, cells, or footers.
20
+ *
21
+ * Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:
22
+ * @example
23
+ * ```vue
24
+ * <!-- New shorthand pattern -->
25
+ * <FlexRender :cell="cell" />
26
+ * <FlexRender :header="header" />
27
+ * <FlexRender :footer="header" />
28
+ *
29
+ * <!-- Legacy pattern (still supported) -->
30
+ * <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
31
+ * ```
32
+ */
4
33
  const FlexRender = (0, vue.defineComponent)({
5
- props: ["render", "props"],
34
+ props: {
35
+ render: {
36
+ type: [
37
+ Function,
38
+ Object,
39
+ String
40
+ ],
41
+ default: void 0
42
+ },
43
+ props: {
44
+ type: Object,
45
+ default: void 0
46
+ },
47
+ cell: {
48
+ type: Object,
49
+ default: void 0
50
+ },
51
+ header: {
52
+ type: Object,
53
+ default: void 0
54
+ },
55
+ footer: {
56
+ type: Object,
57
+ default: void 0
58
+ }
59
+ },
6
60
  setup: (props) => {
7
61
  return () => {
8
- if (typeof props.render === "function") {
9
- const rendered = props.render(props.props);
10
- if ((0, vue.isVNode)(rendered)) return rendered;
11
- if (typeof rendered === "function" || typeof rendered === "object") return (0, vue.h)(rendered, props.props);
12
- return rendered;
13
- }
14
- if (typeof props.render === "object") return (0, vue.h)(props.render, props.props);
15
- return props.render;
62
+ if (props.cell) return flexRender(props.cell.column.columnDef.cell, props.cell.getContext());
63
+ if (props.header) return flexRender(props.header.column.columnDef.header, props.header.getContext());
64
+ if (props.footer) return flexRender(props.footer.column.columnDef.footer, props.footer.getContext());
65
+ return flexRender(props.render, props.props);
16
66
  };
17
67
  }
18
68
  });
19
69
 
20
70
  //#endregion
21
71
  exports.FlexRender = FlexRender;
72
+ exports.flexRender = flexRender;
22
73
  //# sourceMappingURL=FlexRender.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlexRender.cjs","names":[],"sources":["../src/FlexRender.ts"],"sourcesContent":["import { defineComponent, h, isVNode } from 'vue'\n\nexport const FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: (props: { render: any; props: any }) => {\n return () => {\n if (typeof props.render === 'function') {\n const rendered = props.render(props.props)\n\n if (isVNode(rendered)) {\n return rendered\n }\n\n if (typeof rendered === 'function' || typeof rendered === 'object') {\n return h(rendered, props.props)\n }\n\n return rendered\n }\n\n if (typeof props.render === 'object') {\n return h(props.render, props.props)\n }\n\n return props.render\n }\n },\n})\n"],"mappings":";;;AAEA,MAAa,sCAA6B;CACxC,OAAO,CAAC,UAAU,QAAQ;CAC1B,QAAQ,UAAuC;AAC7C,eAAa;AACX,OAAI,OAAO,MAAM,WAAW,YAAY;IACtC,MAAM,WAAW,MAAM,OAAO,MAAM,MAAM;AAE1C,yBAAY,SAAS,CACnB,QAAO;AAGT,QAAI,OAAO,aAAa,cAAc,OAAO,aAAa,SACxD,mBAAS,UAAU,MAAM,MAAM;AAGjC,WAAO;;AAGT,OAAI,OAAO,MAAM,WAAW,SAC1B,mBAAS,MAAM,QAAQ,MAAM,MAAM;AAGrC,UAAO,MAAM;;;CAGlB,CAAC"}
1
+ {"version":3,"file":"FlexRender.cjs","names":[],"sources":["../src/FlexRender.ts"],"sourcesContent":["import { defineComponent, h, isVNode } from 'vue'\nimport type { PropType } from 'vue'\nimport type {\n Cell,\n CellData,\n Header,\n RowData,\n TableFeatures,\n} from '@tanstack/table-core'\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n * @example flexRender(cell.column.columnDef.cell, cell.getContext())\n */\nexport function flexRender(render: any, props: any): any {\n if (typeof render === 'function') {\n const rendered = render(props)\n\n if (isVNode(rendered)) {\n return rendered\n }\n\n if (typeof rendered === 'function' || typeof rendered === 'object') {\n return h(rendered, props)\n }\n\n return rendered\n }\n\n if (typeof render === 'object') {\n return h(render, props)\n }\n\n return render\n}\n\n/**\n * Simplified component for rendering headers, cells, or footers.\n *\n * Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:\n * @example\n * ```vue\n * <!-- New shorthand pattern -->\n * <FlexRender :cell=\"cell\" />\n * <FlexRender :header=\"header\" />\n * <FlexRender :footer=\"header\" />\n *\n * <!-- Legacy pattern (still supported) -->\n * <FlexRender :render=\"cell.column.columnDef.cell\" :props=\"cell.getContext()\" />\n * ```\n */\nexport const FlexRender = defineComponent({\n props: {\n render: {\n type: [Function, Object, String] as PropType<any>,\n default: undefined,\n },\n props: {\n type: Object as PropType<any>,\n default: undefined,\n },\n cell: {\n type: Object as PropType<Cell<any, any, any>>,\n default: undefined,\n },\n header: {\n type: Object as PropType<Header<any, any, any>>,\n default: undefined,\n },\n footer: {\n type: Object as PropType<Header<any, any, any>>,\n default: undefined,\n },\n },\n setup: (props: {\n render?: any\n props?: any\n cell?: Cell<any, any, any>\n header?: Header<any, any, any>\n footer?: Header<any, any, any>\n }) => {\n return () => {\n // New shorthand pattern: extract render and props from cell/header/footer\n if (props.cell) {\n return flexRender(\n props.cell.column.columnDef.cell,\n props.cell.getContext(),\n )\n }\n\n if (props.header) {\n return flexRender(\n props.header.column.columnDef.header,\n props.header.getContext(),\n )\n }\n\n if (props.footer) {\n return flexRender(\n props.footer.column.columnDef.footer,\n props.footer.getContext(),\n )\n }\n\n // Legacy pattern: use render and props directly\n return flexRender(props.render, props.props)\n }\n },\n})\n"],"mappings":";;;;;;;AAcA,SAAgB,WAAW,QAAa,OAAiB;AACvD,KAAI,OAAO,WAAW,YAAY;EAChC,MAAM,WAAW,OAAO,MAAM;AAE9B,uBAAY,SAAS,CACnB,QAAO;AAGT,MAAI,OAAO,aAAa,cAAc,OAAO,aAAa,SACxD,mBAAS,UAAU,MAAM;AAG3B,SAAO;;AAGT,KAAI,OAAO,WAAW,SACpB,mBAAS,QAAQ,MAAM;AAGzB,QAAO;;;;;;;;;;;;;;;;;AAkBT,MAAa,sCAA6B;CACxC,OAAO;EACL,QAAQ;GACN,MAAM;IAAC;IAAU;IAAQ;IAAO;GAChC,SAAS;GACV;EACD,OAAO;GACL,MAAM;GACN,SAAS;GACV;EACD,MAAM;GACJ,MAAM;GACN,SAAS;GACV;EACD,QAAQ;GACN,MAAM;GACN,SAAS;GACV;EACD,QAAQ;GACN,MAAM;GACN,SAAS;GACV;EACF;CACD,QAAQ,UAMF;AACJ,eAAa;AAEX,OAAI,MAAM,KACR,QAAO,WACL,MAAM,KAAK,OAAO,UAAU,MAC5B,MAAM,KAAK,YAAY,CACxB;AAGH,OAAI,MAAM,OACR,QAAO,WACL,MAAM,OAAO,OAAO,UAAU,QAC9B,MAAM,OAAO,YAAY,CAC1B;AAGH,OAAI,MAAM,OACR,QAAO,WACL,MAAM,OAAO,OAAO,UAAU,QAC9B,MAAM,OAAO,YAAY,CAC1B;AAIH,UAAO,WAAW,MAAM,QAAQ,MAAM,MAAM;;;CAGjD,CAAC"}
@@ -1,13 +1,46 @@
1
1
  import * as _$vue from "vue";
2
+ import { Cell, Header } from "@tanstack/table-core";
2
3
 
3
4
  //#region src/FlexRender.d.ts
5
+ /**
6
+ * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.
7
+ * @example flexRender(cell.column.columnDef.cell, cell.getContext())
8
+ */
9
+ declare function flexRender(render: any, props: any): any;
10
+ /**
11
+ * Simplified component for rendering headers, cells, or footers.
12
+ *
13
+ * Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:
14
+ * @example
15
+ * ```vue
16
+ * <!-- New shorthand pattern -->
17
+ * <FlexRender :cell="cell" />
18
+ * <FlexRender :header="header" />
19
+ * <FlexRender :footer="header" />
20
+ *
21
+ * <!-- Legacy pattern (still supported) -->
22
+ * <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
23
+ * ```
24
+ */
4
25
  declare const FlexRender: _$vue.DefineComponent<{
5
- render: any;
6
- props: any;
26
+ render?: any;
27
+ props?: any;
28
+ cell?: Cell<any, any, any>;
29
+ header?: Header<any, any, any>;
30
+ footer?: Header<any, any, any>;
7
31
  }, () => any, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<{
8
- render: any;
32
+ render?: any;
33
+ props?: any;
34
+ cell?: Cell<any, any, any>;
35
+ header?: Header<any, any, any>;
36
+ footer?: Header<any, any, any>;
37
+ }> & Readonly<{}>, {
9
38
  props: any;
10
- }> & Readonly<{}>, {}, {}, {}, {}, string, _$vue.ComponentProvideOptions, true, {}, any>;
39
+ render: any;
40
+ cell: any;
41
+ header: any;
42
+ footer: any;
43
+ }, {}, {}, {}, string, _$vue.ComponentProvideOptions, true, {}, any>;
11
44
  //#endregion
12
- export { FlexRender };
45
+ export { FlexRender, flexRender };
13
46
  //# sourceMappingURL=FlexRender.d.cts.map
@@ -1,13 +1,46 @@
1
1
  import * as _$vue from "vue";
2
+ import { Cell, Header } from "@tanstack/table-core";
2
3
 
3
4
  //#region src/FlexRender.d.ts
5
+ /**
6
+ * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.
7
+ * @example flexRender(cell.column.columnDef.cell, cell.getContext())
8
+ */
9
+ declare function flexRender(render: any, props: any): any;
10
+ /**
11
+ * Simplified component for rendering headers, cells, or footers.
12
+ *
13
+ * Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:
14
+ * @example
15
+ * ```vue
16
+ * <!-- New shorthand pattern -->
17
+ * <FlexRender :cell="cell" />
18
+ * <FlexRender :header="header" />
19
+ * <FlexRender :footer="header" />
20
+ *
21
+ * <!-- Legacy pattern (still supported) -->
22
+ * <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
23
+ * ```
24
+ */
4
25
  declare const FlexRender: _$vue.DefineComponent<{
5
- render: any;
6
- props: any;
26
+ render?: any;
27
+ props?: any;
28
+ cell?: Cell<any, any, any>;
29
+ header?: Header<any, any, any>;
30
+ footer?: Header<any, any, any>;
7
31
  }, () => any, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<{
8
- render: any;
32
+ render?: any;
33
+ props?: any;
34
+ cell?: Cell<any, any, any>;
35
+ header?: Header<any, any, any>;
36
+ footer?: Header<any, any, any>;
37
+ }> & Readonly<{}>, {
9
38
  props: any;
10
- }> & Readonly<{}>, {}, {}, {}, {}, string, _$vue.ComponentProvideOptions, true, {}, any>;
39
+ render: any;
40
+ cell: any;
41
+ header: any;
42
+ footer: any;
43
+ }, {}, {}, {}, string, _$vue.ComponentProvideOptions, true, {}, any>;
11
44
  //#endregion
12
- export { FlexRender };
45
+ export { FlexRender, flexRender };
13
46
  //# sourceMappingURL=FlexRender.d.ts.map
@@ -1,22 +1,72 @@
1
1
  import { defineComponent, h, isVNode } from "vue";
2
2
 
3
3
  //#region src/FlexRender.ts
4
+ /**
5
+ * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.
6
+ * @example flexRender(cell.column.columnDef.cell, cell.getContext())
7
+ */
8
+ function flexRender(render, props) {
9
+ if (typeof render === "function") {
10
+ const rendered = render(props);
11
+ if (isVNode(rendered)) return rendered;
12
+ if (typeof rendered === "function" || typeof rendered === "object") return h(rendered, props);
13
+ return rendered;
14
+ }
15
+ if (typeof render === "object") return h(render, props);
16
+ return render;
17
+ }
18
+ /**
19
+ * Simplified component for rendering headers, cells, or footers.
20
+ *
21
+ * Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:
22
+ * @example
23
+ * ```vue
24
+ * <!-- New shorthand pattern -->
25
+ * <FlexRender :cell="cell" />
26
+ * <FlexRender :header="header" />
27
+ * <FlexRender :footer="header" />
28
+ *
29
+ * <!-- Legacy pattern (still supported) -->
30
+ * <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
31
+ * ```
32
+ */
4
33
  const FlexRender = defineComponent({
5
- props: ["render", "props"],
34
+ props: {
35
+ render: {
36
+ type: [
37
+ Function,
38
+ Object,
39
+ String
40
+ ],
41
+ default: void 0
42
+ },
43
+ props: {
44
+ type: Object,
45
+ default: void 0
46
+ },
47
+ cell: {
48
+ type: Object,
49
+ default: void 0
50
+ },
51
+ header: {
52
+ type: Object,
53
+ default: void 0
54
+ },
55
+ footer: {
56
+ type: Object,
57
+ default: void 0
58
+ }
59
+ },
6
60
  setup: (props) => {
7
61
  return () => {
8
- if (typeof props.render === "function") {
9
- const rendered = props.render(props.props);
10
- if (isVNode(rendered)) return rendered;
11
- if (typeof rendered === "function" || typeof rendered === "object") return h(rendered, props.props);
12
- return rendered;
13
- }
14
- if (typeof props.render === "object") return h(props.render, props.props);
15
- return props.render;
62
+ if (props.cell) return flexRender(props.cell.column.columnDef.cell, props.cell.getContext());
63
+ if (props.header) return flexRender(props.header.column.columnDef.header, props.header.getContext());
64
+ if (props.footer) return flexRender(props.footer.column.columnDef.footer, props.footer.getContext());
65
+ return flexRender(props.render, props.props);
16
66
  };
17
67
  }
18
68
  });
19
69
 
20
70
  //#endregion
21
- export { FlexRender };
71
+ export { FlexRender, flexRender };
22
72
  //# sourceMappingURL=FlexRender.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlexRender.js","names":[],"sources":["../src/FlexRender.ts"],"sourcesContent":["import { defineComponent, h, isVNode } from 'vue'\n\nexport const FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: (props: { render: any; props: any }) => {\n return () => {\n if (typeof props.render === 'function') {\n const rendered = props.render(props.props)\n\n if (isVNode(rendered)) {\n return rendered\n }\n\n if (typeof rendered === 'function' || typeof rendered === 'object') {\n return h(rendered, props.props)\n }\n\n return rendered\n }\n\n if (typeof props.render === 'object') {\n return h(props.render, props.props)\n }\n\n return props.render\n }\n },\n})\n"],"mappings":";;;AAEA,MAAa,aAAa,gBAAgB;CACxC,OAAO,CAAC,UAAU,QAAQ;CAC1B,QAAQ,UAAuC;AAC7C,eAAa;AACX,OAAI,OAAO,MAAM,WAAW,YAAY;IACtC,MAAM,WAAW,MAAM,OAAO,MAAM,MAAM;AAE1C,QAAI,QAAQ,SAAS,CACnB,QAAO;AAGT,QAAI,OAAO,aAAa,cAAc,OAAO,aAAa,SACxD,QAAO,EAAE,UAAU,MAAM,MAAM;AAGjC,WAAO;;AAGT,OAAI,OAAO,MAAM,WAAW,SAC1B,QAAO,EAAE,MAAM,QAAQ,MAAM,MAAM;AAGrC,UAAO,MAAM;;;CAGlB,CAAC"}
1
+ {"version":3,"file":"FlexRender.js","names":[],"sources":["../src/FlexRender.ts"],"sourcesContent":["import { defineComponent, h, isVNode } from 'vue'\nimport type { PropType } from 'vue'\nimport type {\n Cell,\n CellData,\n Header,\n RowData,\n TableFeatures,\n} from '@tanstack/table-core'\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n * @example flexRender(cell.column.columnDef.cell, cell.getContext())\n */\nexport function flexRender(render: any, props: any): any {\n if (typeof render === 'function') {\n const rendered = render(props)\n\n if (isVNode(rendered)) {\n return rendered\n }\n\n if (typeof rendered === 'function' || typeof rendered === 'object') {\n return h(rendered, props)\n }\n\n return rendered\n }\n\n if (typeof render === 'object') {\n return h(render, props)\n }\n\n return render\n}\n\n/**\n * Simplified component for rendering headers, cells, or footers.\n *\n * Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:\n * @example\n * ```vue\n * <!-- New shorthand pattern -->\n * <FlexRender :cell=\"cell\" />\n * <FlexRender :header=\"header\" />\n * <FlexRender :footer=\"header\" />\n *\n * <!-- Legacy pattern (still supported) -->\n * <FlexRender :render=\"cell.column.columnDef.cell\" :props=\"cell.getContext()\" />\n * ```\n */\nexport const FlexRender = defineComponent({\n props: {\n render: {\n type: [Function, Object, String] as PropType<any>,\n default: undefined,\n },\n props: {\n type: Object as PropType<any>,\n default: undefined,\n },\n cell: {\n type: Object as PropType<Cell<any, any, any>>,\n default: undefined,\n },\n header: {\n type: Object as PropType<Header<any, any, any>>,\n default: undefined,\n },\n footer: {\n type: Object as PropType<Header<any, any, any>>,\n default: undefined,\n },\n },\n setup: (props: {\n render?: any\n props?: any\n cell?: Cell<any, any, any>\n header?: Header<any, any, any>\n footer?: Header<any, any, any>\n }) => {\n return () => {\n // New shorthand pattern: extract render and props from cell/header/footer\n if (props.cell) {\n return flexRender(\n props.cell.column.columnDef.cell,\n props.cell.getContext(),\n )\n }\n\n if (props.header) {\n return flexRender(\n props.header.column.columnDef.header,\n props.header.getContext(),\n )\n }\n\n if (props.footer) {\n return flexRender(\n props.footer.column.columnDef.footer,\n props.footer.getContext(),\n )\n }\n\n // Legacy pattern: use render and props directly\n return flexRender(props.render, props.props)\n }\n },\n})\n"],"mappings":";;;;;;;AAcA,SAAgB,WAAW,QAAa,OAAiB;AACvD,KAAI,OAAO,WAAW,YAAY;EAChC,MAAM,WAAW,OAAO,MAAM;AAE9B,MAAI,QAAQ,SAAS,CACnB,QAAO;AAGT,MAAI,OAAO,aAAa,cAAc,OAAO,aAAa,SACxD,QAAO,EAAE,UAAU,MAAM;AAG3B,SAAO;;AAGT,KAAI,OAAO,WAAW,SACpB,QAAO,EAAE,QAAQ,MAAM;AAGzB,QAAO;;;;;;;;;;;;;;;;;AAkBT,MAAa,aAAa,gBAAgB;CACxC,OAAO;EACL,QAAQ;GACN,MAAM;IAAC;IAAU;IAAQ;IAAO;GAChC,SAAS;GACV;EACD,OAAO;GACL,MAAM;GACN,SAAS;GACV;EACD,MAAM;GACJ,MAAM;GACN,SAAS;GACV;EACD,QAAQ;GACN,MAAM;GACN,SAAS;GACV;EACD,QAAQ;GACN,MAAM;GACN,SAAS;GACV;EACF;CACD,QAAQ,UAMF;AACJ,eAAa;AAEX,OAAI,MAAM,KACR,QAAO,WACL,MAAM,KAAK,OAAO,UAAU,MAC5B,MAAM,KAAK,YAAY,CACxB;AAGH,OAAI,MAAM,OACR,QAAO,WACL,MAAM,OAAO,OAAO,UAAU,QAC9B,MAAM,OAAO,YAAY,CAC1B;AAGH,OAAI,MAAM,OACR,QAAO,WACL,MAAM,OAAO,OAAO,UAAU,QAC9B,MAAM,OAAO,YAAY,CAC1B;AAIH,UAAO,WAAW,MAAM,QAAQ,MAAM,MAAM;;;CAGjD,CAAC"}
@@ -99,9 +99,9 @@ declare const AppFlexRender: _$vue.DefineComponent<_$vue.ExtractPropTypes<{
99
99
  default: undefined;
100
100
  };
101
101
  }>> & Readonly<{}>, {
102
- footer: any;
103
- header: any;
104
102
  cell: any;
103
+ header: any;
104
+ footer: any;
105
105
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, true, {}, any>;
106
106
  declare function createTableHook<TFeatures extends TableFeatures, const TTableComponents extends Record<string, ComponentType<any>>, const TCellComponents extends Record<string, ComponentType<any>>, const THeaderComponents extends Record<string, ComponentType<any>>>({
107
107
  tableComponents,
@@ -99,9 +99,9 @@ declare const AppFlexRender: _$vue.DefineComponent<_$vue.ExtractPropTypes<{
99
99
  default: undefined;
100
100
  };
101
101
  }>> & Readonly<{}>, {
102
- footer: any;
103
- header: any;
104
102
  cell: any;
103
+ header: any;
104
+ footer: any;
105
105
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, true, {}, any>;
106
106
  declare function createTableHook<TFeatures extends TableFeatures, const TTableComponents extends Record<string, ComponentType<any>>, const TCellComponents extends Record<string, ComponentType<any>>, const THeaderComponents extends Record<string, ComponentType<any>>>({
107
107
  tableComponents,
package/dist/index.cjs CHANGED
@@ -6,6 +6,7 @@ const require_createTableHook = require('./createTableHook.cjs');
6
6
  exports.AppFlexRender = require_createTableHook.AppFlexRender;
7
7
  exports.FlexRender = require_FlexRender.FlexRender;
8
8
  exports.createTableHook = require_createTableHook.createTableHook;
9
+ exports.flexRender = require_FlexRender.flexRender;
9
10
  exports.useTable = require_useTable.useTable;
10
11
  var _tanstack_table_core = require("@tanstack/table-core");
11
12
  Object.keys(_tanstack_table_core).forEach(function (k) {
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { FlexRender } from "./FlexRender.cjs";
1
+ import { FlexRender, flexRender } from "./FlexRender.cjs";
2
2
  import { TableOptionsWithReactiveData, VueTable, useTable } from "./useTable.cjs";
3
3
  import { AppCellContext, AppCellProps, AppColumnHelper, AppFlexRender, AppHeaderContext, AppHeaderProps, AppTableProps, AppVueTable, CreateTableHookOptions, createTableHook } from "./createTableHook.cjs";
4
4
  export * from "@tanstack/table-core";
5
- export { AppCellContext, AppCellProps, AppColumnHelper, AppFlexRender, AppHeaderContext, AppHeaderProps, AppTableProps, AppVueTable, CreateTableHookOptions, FlexRender, TableOptionsWithReactiveData, VueTable, createTableHook, useTable };
5
+ export { AppCellContext, AppCellProps, AppColumnHelper, AppFlexRender, AppHeaderContext, AppHeaderProps, AppTableProps, AppVueTable, CreateTableHookOptions, FlexRender, TableOptionsWithReactiveData, VueTable, createTableHook, flexRender, useTable };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { FlexRender } from "./FlexRender.js";
1
+ import { FlexRender, flexRender } from "./FlexRender.js";
2
2
  import { TableOptionsWithReactiveData, VueTable, useTable } from "./useTable.js";
3
3
  import { AppCellContext, AppCellProps, AppColumnHelper, AppFlexRender, AppHeaderContext, AppHeaderProps, AppTableProps, AppVueTable, CreateTableHookOptions, createTableHook } from "./createTableHook.js";
4
4
  export * from "@tanstack/table-core";
5
- export { AppCellContext, AppCellProps, AppColumnHelper, AppFlexRender, AppHeaderContext, AppHeaderProps, AppTableProps, AppVueTable, CreateTableHookOptions, FlexRender, TableOptionsWithReactiveData, VueTable, createTableHook, useTable };
5
+ export { AppCellContext, AppCellProps, AppColumnHelper, AppFlexRender, AppHeaderContext, AppHeaderProps, AppTableProps, AppVueTable, CreateTableHookOptions, FlexRender, TableOptionsWithReactiveData, VueTable, createTableHook, flexRender, useTable };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { FlexRender } from "./FlexRender.js";
1
+ import { FlexRender, flexRender } from "./FlexRender.js";
2
2
  import { useTable } from "./useTable.js";
3
3
  import { AppFlexRender, createTableHook } from "./createTableHook.js";
4
4
 
5
5
  export * from "@tanstack/table-core"
6
6
 
7
- export { AppFlexRender, FlexRender, createTableHook, useTable };
7
+ export { AppFlexRender, FlexRender, createTableHook, flexRender, useTable };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/vue-table",
3
- "version": "9.0.0-alpha.25",
3
+ "version": "9.0.0-alpha.30",
4
4
  "description": "Headless UI for building powerful tables & datagrids for Vue.",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -41,12 +41,12 @@
41
41
  ],
42
42
  "dependencies": {
43
43
  "@tanstack/vue-store": "^0.9.3",
44
- "@tanstack/table-core": "9.0.0-alpha.23"
44
+ "@tanstack/table-core": "9.0.0-alpha.30"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@vitejs/plugin-vue": "^6.0.5",
48
48
  "eslint-plugin-vue": "^10.8.0",
49
- "vue": "^3.5.31"
49
+ "vue": "^3.5.32"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "vue": ">=3.2"
package/src/FlexRender.ts CHANGED
@@ -1,28 +1,109 @@
1
1
  import { defineComponent, h, isVNode } from 'vue'
2
+ import type { PropType } from 'vue'
3
+ import type {
4
+ Cell,
5
+ CellData,
6
+ Header,
7
+ RowData,
8
+ TableFeatures,
9
+ } from '@tanstack/table-core'
2
10
 
3
- export const FlexRender = defineComponent({
4
- props: ['render', 'props'],
5
- setup: (props: { render: any; props: any }) => {
6
- return () => {
7
- if (typeof props.render === 'function') {
8
- const rendered = props.render(props.props)
11
+ /**
12
+ * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.
13
+ * @example flexRender(cell.column.columnDef.cell, cell.getContext())
14
+ */
15
+ export function flexRender(render: any, props: any): any {
16
+ if (typeof render === 'function') {
17
+ const rendered = render(props)
18
+
19
+ if (isVNode(rendered)) {
20
+ return rendered
21
+ }
22
+
23
+ if (typeof rendered === 'function' || typeof rendered === 'object') {
24
+ return h(rendered, props)
25
+ }
9
26
 
10
- if (isVNode(rendered)) {
11
- return rendered
12
- }
27
+ return rendered
28
+ }
13
29
 
14
- if (typeof rendered === 'function' || typeof rendered === 'object') {
15
- return h(rendered, props.props)
16
- }
30
+ if (typeof render === 'object') {
31
+ return h(render, props)
32
+ }
33
+
34
+ return render
35
+ }
36
+
37
+ /**
38
+ * Simplified component for rendering headers, cells, or footers.
39
+ *
40
+ * Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:
41
+ * @example
42
+ * ```vue
43
+ * <!-- New shorthand pattern -->
44
+ * <FlexRender :cell="cell" />
45
+ * <FlexRender :header="header" />
46
+ * <FlexRender :footer="header" />
47
+ *
48
+ * <!-- Legacy pattern (still supported) -->
49
+ * <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
50
+ * ```
51
+ */
52
+ export const FlexRender = defineComponent({
53
+ props: {
54
+ render: {
55
+ type: [Function, Object, String] as PropType<any>,
56
+ default: undefined,
57
+ },
58
+ props: {
59
+ type: Object as PropType<any>,
60
+ default: undefined,
61
+ },
62
+ cell: {
63
+ type: Object as PropType<Cell<any, any, any>>,
64
+ default: undefined,
65
+ },
66
+ header: {
67
+ type: Object as PropType<Header<any, any, any>>,
68
+ default: undefined,
69
+ },
70
+ footer: {
71
+ type: Object as PropType<Header<any, any, any>>,
72
+ default: undefined,
73
+ },
74
+ },
75
+ setup: (props: {
76
+ render?: any
77
+ props?: any
78
+ cell?: Cell<any, any, any>
79
+ header?: Header<any, any, any>
80
+ footer?: Header<any, any, any>
81
+ }) => {
82
+ return () => {
83
+ // New shorthand pattern: extract render and props from cell/header/footer
84
+ if (props.cell) {
85
+ return flexRender(
86
+ props.cell.column.columnDef.cell,
87
+ props.cell.getContext(),
88
+ )
89
+ }
17
90
 
18
- return rendered
91
+ if (props.header) {
92
+ return flexRender(
93
+ props.header.column.columnDef.header,
94
+ props.header.getContext(),
95
+ )
19
96
  }
20
97
 
21
- if (typeof props.render === 'object') {
22
- return h(props.render, props.props)
98
+ if (props.footer) {
99
+ return flexRender(
100
+ props.footer.column.columnDef.footer,
101
+ props.footer.getContext(),
102
+ )
23
103
  }
24
104
 
25
- return props.render
105
+ // Legacy pattern: use render and props directly
106
+ return flexRender(props.render, props.props)
26
107
  }
27
108
  },
28
109
  })