@tanstack/vue-table 9.0.0-alpha.8 → 9.0.0-beta.1
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.
- package/README.md +127 -0
- package/dist/FlexRender.cjs +80 -0
- package/dist/FlexRender.cjs.map +1 -0
- package/dist/FlexRender.d.cts +45 -0
- package/dist/FlexRender.d.ts +45 -0
- package/dist/FlexRender.js +79 -0
- package/dist/FlexRender.js.map +1 -0
- package/dist/createTableHook.cjs +234 -0
- package/dist/createTableHook.cjs.map +1 -0
- package/dist/createTableHook.d.cts +138 -0
- package/dist/createTableHook.d.ts +138 -0
- package/dist/createTableHook.js +233 -0
- package/dist/createTableHook.js.map +1 -0
- package/dist/flex-render.cjs +5 -0
- package/dist/flex-render.d.cts +2 -0
- package/dist/flex-render.d.ts +2 -0
- package/dist/flex-render.js +3 -0
- package/dist/index.cjs +17 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +7 -0
- package/dist/merge-proxy.cjs +77 -0
- package/dist/merge-proxy.cjs.map +1 -0
- package/dist/merge-proxy.js +75 -0
- package/dist/merge-proxy.js.map +1 -0
- package/dist/reactivity.cjs +73 -0
- package/dist/reactivity.cjs.map +1 -0
- package/dist/reactivity.js +73 -0
- package/dist/reactivity.js.map +1 -0
- package/dist/static-functions.cjs +9 -0
- package/dist/static-functions.d.cts +1 -0
- package/dist/static-functions.d.ts +1 -0
- package/dist/static-functions.js +3 -0
- package/dist/useTable.cjs +83 -0
- package/dist/useTable.cjs.map +1 -0
- package/dist/useTable.d.cts +76 -0
- package/dist/useTable.d.ts +76 -0
- package/dist/useTable.js +83 -0
- package/dist/useTable.js.map +1 -0
- package/package.json +31 -19
- package/skills/vue/client-to-server/SKILL.md +365 -0
- package/skills/vue/compose-with-tanstack-form/SKILL.md +369 -0
- package/skills/vue/compose-with-tanstack-pacer/SKILL.md +318 -0
- package/skills/vue/compose-with-tanstack-query/SKILL.md +385 -0
- package/skills/vue/compose-with-tanstack-store/SKILL.md +301 -0
- package/skills/vue/compose-with-tanstack-virtual/SKILL.md +340 -0
- package/skills/vue/getting-started/SKILL.md +409 -0
- package/skills/vue/migrate-v8-to-v9/SKILL.md +375 -0
- package/skills/vue/production-readiness/SKILL.md +271 -0
- package/skills/vue/table-state/SKILL.md +403 -0
- package/src/FlexRender.ts +123 -0
- package/src/createTableHook.ts +597 -0
- package/src/flex-render.ts +1 -0
- package/src/index.ts +3 -74
- package/src/merge-proxy.ts +66 -15
- package/src/reactivity.ts +115 -0
- package/src/static-functions.ts +1 -0
- package/src/useTable.ts +251 -0
- package/dist/cjs/index.cjs +0 -68
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/index.d.cts +0 -14
- package/dist/cjs/merge-proxy.cjs +0 -61
- package/dist/cjs/merge-proxy.cjs.map +0 -1
- package/dist/cjs/merge-proxy.d.cts +0 -11
- package/dist/esm/index.d.ts +0 -14
- package/dist/esm/index.js +0 -63
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/merge-proxy.d.ts +0 -11
- package/dist/esm/merge-proxy.js +0 -61
- package/dist/esm/merge-proxy.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="./media/header_table.png" alt="TanStack Table">
|
|
3
|
+
</div>
|
|
4
|
+
|
|
5
|
+
<br />
|
|
6
|
+
|
|
7
|
+
<div align="center">
|
|
8
|
+
<a href="https://npmjs.com/package/@tanstack/react-table" target="\_parent">
|
|
9
|
+
<img alt="npm downloads" src="https://img.shields.io/npm/dm/@tanstack/react-table.svg" />
|
|
10
|
+
</a>
|
|
11
|
+
<a href="https://github.com/tanstack/table" target="\_parent">
|
|
12
|
+
<img alt="github stars" src="https://img.shields.io/github/stars/tanstack/react-table.svg?style=social&label=Star" />
|
|
13
|
+
</a>
|
|
14
|
+
<a href="https://bundlephobia.com/result?p=@tanstack/react-table@latest" target="\_parent">
|
|
15
|
+
<img alt="bundle size" src="https://badgen.net/bundlephobia/minzip/@tanstack/react-table@latest" />
|
|
16
|
+
</a>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div align="center">
|
|
20
|
+
<a href="#badge">
|
|
21
|
+
<img alt="semantic-release" src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg">
|
|
22
|
+
</a>
|
|
23
|
+
<a href="https://bestofjs.org/projects/tanstack-table"><img alt="Best of JS" src="https://img.shields.io/endpoint?url=https://bestofjs-serverless.now.sh/api/project-badge?fullName=TanStack%2Ftable%26since=daily" /></a>
|
|
24
|
+
<a href="https://twitter.com/tan_stack"><img src="https://img.shields.io/twitter/follow/tan_stack.svg?style=social" alt="Follow @TanStack"/></a>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
### [Become a Sponsor!](https://github.com/sponsors/tannerlinsley/)
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
# TanStack Table
|
|
32
|
+
|
|
33
|
+
> [!NOTE]
|
|
34
|
+
> You may know TanStack Table by the adapter names:
|
|
35
|
+
>
|
|
36
|
+
> - [Angular Table](https://tanstack.com/table/alpha/docs/framework/angular/angular-table)
|
|
37
|
+
> - [Lit Table](https://tanstack.com/table/alpha/docs/framework/lit/lit-table)
|
|
38
|
+
> - [React Table](https://tanstack.com/table/alpha/docs/framework/react/react-table)
|
|
39
|
+
> - [Solid Table](https://tanstack.com/table/alpha/docs/framework/solid/solid-table)
|
|
40
|
+
> - [Svelte Table](https://tanstack.com/table/alpha/docs/framework/svelte/svelte-table)
|
|
41
|
+
> - [Vue Table](https://tanstack.com/table/alpha/docs/framework/vue/vue-table)
|
|
42
|
+
|
|
43
|
+
A headless table library for building powerful datagrids with full control over markup, styles, and behavior.
|
|
44
|
+
|
|
45
|
+
- Framework‑agnostic core with bindings for React, Vue & Solid
|
|
46
|
+
- 100% customizable — bring your own UI, components, and styles
|
|
47
|
+
- Sorting, filtering, grouping, aggregation & row selection
|
|
48
|
+
- Lightweight, virtualizable & server‑side friendly
|
|
49
|
+
|
|
50
|
+
### <a href="https://tanstack.com/table">Read the Docs →</a>
|
|
51
|
+
|
|
52
|
+
## Using an AI Coding Agent?
|
|
53
|
+
|
|
54
|
+
TanStack Table ships [TanStack Intent](https://github.com/TanStack/intent) skills inside each adapter package. After installing the library, run:
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
npx @tanstack/intent@latest install
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
to add skill-loading guidance for your agent (Claude Code, Cursor, Copilot, etc.). The same CLI also exposes `intent list` to browse available skills and `intent load <skill>` to print one for inspection. Skills version with the library — your agent gets guidance that matches the version of `@tanstack/<framework>-table` you installed. Only available for v9 and above.
|
|
61
|
+
|
|
62
|
+
## Get Involved
|
|
63
|
+
|
|
64
|
+
- We welcome issues and pull requests!
|
|
65
|
+
- Participate in [GitHub discussions](https://github.com/TanStack/table/discussions)
|
|
66
|
+
- Chat with the community on [Discord](https://discord.com/invite/WrRKjPJ)
|
|
67
|
+
- See [CONTRIBUTING.md](./CONTRIBUTING.md) for setup instructions
|
|
68
|
+
|
|
69
|
+
## Partners
|
|
70
|
+
|
|
71
|
+
<table align="center">
|
|
72
|
+
<tr>
|
|
73
|
+
<td>
|
|
74
|
+
<a href="https://www.coderabbit.ai/?via=tanstack&dub_id=aCcEEdAOqqutX6OS">
|
|
75
|
+
<picture>
|
|
76
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://tanstack.com/assets/coderabbit-dark-CMcuvjEy.svg" height="40" />
|
|
77
|
+
<source media="(prefers-color-scheme: light)" srcset="https://tanstack.com/assets/coderabbit-light-DVMJ2jHi.svg" height="40" />
|
|
78
|
+
<img src="https://tanstack.com/assets/coderabbit-light-DVMJ2jHi.svg" height="40" alt="CodeRabbit" />
|
|
79
|
+
</picture>
|
|
80
|
+
</a>
|
|
81
|
+
</td>
|
|
82
|
+
<td padding="20">
|
|
83
|
+
<a href="https://www.cloudflare.com?utm_source=tanstack">
|
|
84
|
+
<picture>
|
|
85
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://tanstack.com/assets/cloudflare-white-DQDB7UaL.svg" height="60" />
|
|
86
|
+
<source media="(prefers-color-scheme: light)" srcset="https://tanstack.com/assets/cloudflare-black-CPufaW0B.svg" height="60" />
|
|
87
|
+
<img src="https://tanstack.com/assets/cloudflare-black-CPufaW0B.svg" height="60" alt="Cloudflare" />
|
|
88
|
+
</picture>
|
|
89
|
+
</a>
|
|
90
|
+
</td>
|
|
91
|
+
<td>
|
|
92
|
+
<a href="https://ag-grid.com/react-data-grid/?utm_source=reacttable&utm_campaign=githubreacttable" style="display: flex; align-items: center; border: none;">
|
|
93
|
+
<picture>
|
|
94
|
+
<source media="(prefers-color-scheme: dark)" srcset="./media/ag-grid-dark.svg" height="40" />
|
|
95
|
+
<source media="(prefers-color-scheme: light)" srcset="./media/ag-grid-light.svg" height="40" />
|
|
96
|
+
<img src="https://raw.githubusercontent.com/tannerlinsley/files/master/partners/ag-grid.svg" height="60" alt="AG Grid" />
|
|
97
|
+
</picture>
|
|
98
|
+
</a>
|
|
99
|
+
</td>
|
|
100
|
+
</tr>
|
|
101
|
+
</table>
|
|
102
|
+
|
|
103
|
+
<div align="center">
|
|
104
|
+
<img src="./media/partner_logo.svg" alt="Table & you?" height="65">
|
|
105
|
+
<p>
|
|
106
|
+
We're looking for TanStack Table Partners to join our mission! Partner with us to push the boundaries of TanStack Table and build amazing things together.
|
|
107
|
+
</p>
|
|
108
|
+
<a href="mailto:partners@tanstack.com?subject=TanStack Table Partnership"><b>LET'S CHAT</b></a>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
## Explore the TanStack Ecosystem
|
|
112
|
+
|
|
113
|
+
- <a href="https://github.com/tanstack/config"><b>TanStack Config</b></a> – Tooling for JS/TS packages
|
|
114
|
+
- <a href="https://github.com/tanstack/db"><b>TanStack DB</b></a> – Reactive sync client store
|
|
115
|
+
- <a href="https://github.com/tanstack/devtools"><b>TanStack DevTools</b></a> – Unified devtools panel
|
|
116
|
+
- <a href="https://github.com/tanstack/form"><b>TanStack Form</b></a> – Type‑safe form state
|
|
117
|
+
- <a href="https://github.com/tanstack/pacer"><b>TanStack Pacer</b></a> – Debouncing, throttling, batching <br/>
|
|
118
|
+
- <a href="https://github.com/tanstack/query"><b>TanStack Query</b></a> – Async state & caching
|
|
119
|
+
- <a href="https://github.com/tanstack/ranger"><b>TanStack Ranger</b></a> – Range & slider primitives
|
|
120
|
+
- <a href="https://github.com/tanstack/router"><b>TanStack Router</b></a> – Type‑safe routing, caching & URL state
|
|
121
|
+
- <a href="https://github.com/tanstack/router"><b>TanStack Start</b></a> – Full‑stack SSR & streaming
|
|
122
|
+
- <a href="https://github.com/tanstack/store"><b>TanStack Store</b></a> – Reactive data store
|
|
123
|
+
- <a href="https://github.com/tanstack/virtual"><b>TanStack Virtual</b></a> – Virtualized rendering
|
|
124
|
+
|
|
125
|
+
… and more at <a href="https://tanstack.com"><b>TanStack.com »</b></a>
|
|
126
|
+
|
|
127
|
+
<!-- USE THE FORCE LUKE -->
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
let vue = require("vue");
|
|
2
|
+
|
|
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
|
+
*/
|
|
33
|
+
const FlexRender = (0, vue.defineComponent)({
|
|
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
|
+
},
|
|
60
|
+
setup: (props) => {
|
|
61
|
+
return () => {
|
|
62
|
+
if (props.cell) {
|
|
63
|
+
var _cell$getIsAggregated, _cell$getIsPlaceholde;
|
|
64
|
+
const cell = props.cell;
|
|
65
|
+
const def = cell.column.columnDef;
|
|
66
|
+
if ((_cell$getIsAggregated = cell.getIsAggregated) === null || _cell$getIsAggregated === void 0 ? void 0 : _cell$getIsAggregated.call(cell)) return flexRender(def.aggregatedCell ?? def.cell, cell.getContext());
|
|
67
|
+
if ((_cell$getIsPlaceholde = cell.getIsPlaceholder) === null || _cell$getIsPlaceholde === void 0 ? void 0 : _cell$getIsPlaceholde.call(cell)) return null;
|
|
68
|
+
return flexRender(def.cell, cell.getContext());
|
|
69
|
+
}
|
|
70
|
+
if (props.header) return flexRender(props.header.column.columnDef.header, props.header.getContext());
|
|
71
|
+
if (props.footer) return flexRender(props.footer.column.columnDef.footer, props.footer.getContext());
|
|
72
|
+
return flexRender(props.render, props.props);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
exports.FlexRender = FlexRender;
|
|
79
|
+
exports.flexRender = flexRender;
|
|
80
|
+
//# sourceMappingURL=FlexRender.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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 const cell = props.cell\n const def = cell.column.columnDef\n // When the column-grouping feature is registered, a cell can be in\n // one of three special modes that should not render `columnDef.cell`\n // directly:\n // - aggregated: render `columnDef.aggregatedCell` (falling back to\n // `columnDef.cell` if the column did not define one)\n // - placeholder: a duplicate value within a group — render nothing\n // - grouped: fall through to `columnDef.cell`; consumers that want\n // a custom group header typically branch on `cell.getIsGrouped()`\n // themselves first\n if (cell.getIsAggregated?.()) {\n return flexRender(def.aggregatedCell ?? def.cell, cell.getContext())\n }\n if (cell.getIsPlaceholder?.()) {\n return null\n }\n return flexRender(def.cell, cell.getContext())\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;CACvD,IAAI,OAAO,WAAW,YAAY;EAChC,MAAM,WAAW,OAAO,KAAK;EAE7B,qBAAY,QAAQ,GAClB,OAAO;EAGT,IAAI,OAAO,aAAa,cAAc,OAAO,aAAa,UACxD,kBAAS,UAAU,KAAK;EAG1B,OAAO;CACT;CAEA,IAAI,OAAO,WAAW,UACpB,kBAAS,QAAQ,KAAK;CAGxB,OAAO;AACT;;;;;;;;;;;;;;;;AAiBA,MAAa,sCAA6B;CACxC,OAAO;EACL,QAAQ;GACN,MAAM;IAAC;IAAU;IAAQ;GAAM;GAC/B,SAAS;EACX;EACA,OAAO;GACL,MAAM;GACN,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;EACX;EACA,QAAQ;GACN,MAAM;GACN,SAAS;EACX;EACA,QAAQ;GACN,MAAM;GACN,SAAS;EACX;CACF;CACA,QAAQ,UAMF;EACJ,aAAa;GAEX,IAAI,MAAM,MAAM;;IACd,MAAM,OAAO,MAAM;IACnB,MAAM,MAAM,KAAK,OAAO;IAUxB,6BAAI,KAAK,wGAAkB,GACzB,OAAO,WAAW,IAAI,kBAAkB,IAAI,MAAM,KAAK,WAAW,CAAC;IAErE,6BAAI,KAAK,yGAAmB,GAC1B,OAAO;IAET,OAAO,WAAW,IAAI,MAAM,KAAK,WAAW,CAAC;GAC/C;GAEA,IAAI,MAAM,QACR,OAAO,WACL,MAAM,OAAO,OAAO,UAAU,QAC9B,MAAM,OAAO,WAAW,CAC1B;GAGF,IAAI,MAAM,QACR,OAAO,WACL,MAAM,OAAO,OAAO,UAAU,QAC9B,MAAM,OAAO,WAAW,CAC1B;GAIF,OAAO,WAAW,MAAM,QAAQ,MAAM,KAAK;EAC7C;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Cell, Header } from "@tanstack/table-core";
|
|
2
|
+
|
|
3
|
+
//#region src/FlexRender.d.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
|
+
declare function flexRender(render: any, props: any): any;
|
|
9
|
+
/**
|
|
10
|
+
* Simplified component for rendering headers, cells, or footers.
|
|
11
|
+
*
|
|
12
|
+
* Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:
|
|
13
|
+
* @example
|
|
14
|
+
* ```vue
|
|
15
|
+
* <!-- New shorthand pattern -->
|
|
16
|
+
* <FlexRender :cell="cell" />
|
|
17
|
+
* <FlexRender :header="header" />
|
|
18
|
+
* <FlexRender :footer="header" />
|
|
19
|
+
*
|
|
20
|
+
* <!-- Legacy pattern (still supported) -->
|
|
21
|
+
* <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare const FlexRender: import("vue").DefineComponent<{
|
|
25
|
+
render?: any;
|
|
26
|
+
props?: any;
|
|
27
|
+
cell?: Cell<any, any, any>;
|
|
28
|
+
header?: Header<any, any, any>;
|
|
29
|
+
footer?: Header<any, any, any>;
|
|
30
|
+
}, () => any, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
31
|
+
render?: any;
|
|
32
|
+
props?: any;
|
|
33
|
+
cell?: Cell<any, any, any>;
|
|
34
|
+
header?: Header<any, any, any>;
|
|
35
|
+
footer?: Header<any, any, any>;
|
|
36
|
+
}> & Readonly<{}>, {
|
|
37
|
+
props: any;
|
|
38
|
+
render: any;
|
|
39
|
+
cell: any;
|
|
40
|
+
header: any;
|
|
41
|
+
footer: any;
|
|
42
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { FlexRender, flexRender };
|
|
45
|
+
//# sourceMappingURL=FlexRender.d.cts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Cell, Header } from "@tanstack/table-core";
|
|
2
|
+
|
|
3
|
+
//#region src/FlexRender.d.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
|
+
declare function flexRender(render: any, props: any): any;
|
|
9
|
+
/**
|
|
10
|
+
* Simplified component for rendering headers, cells, or footers.
|
|
11
|
+
*
|
|
12
|
+
* Supports both the new shorthand pattern and the legacy `:render`/`:props` pattern:
|
|
13
|
+
* @example
|
|
14
|
+
* ```vue
|
|
15
|
+
* <!-- New shorthand pattern -->
|
|
16
|
+
* <FlexRender :cell="cell" />
|
|
17
|
+
* <FlexRender :header="header" />
|
|
18
|
+
* <FlexRender :footer="header" />
|
|
19
|
+
*
|
|
20
|
+
* <!-- Legacy pattern (still supported) -->
|
|
21
|
+
* <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare const FlexRender: import("vue").DefineComponent<{
|
|
25
|
+
render?: any;
|
|
26
|
+
props?: any;
|
|
27
|
+
cell?: Cell<any, any, any>;
|
|
28
|
+
header?: Header<any, any, any>;
|
|
29
|
+
footer?: Header<any, any, any>;
|
|
30
|
+
}, () => any, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
31
|
+
render?: any;
|
|
32
|
+
props?: any;
|
|
33
|
+
cell?: Cell<any, any, any>;
|
|
34
|
+
header?: Header<any, any, any>;
|
|
35
|
+
footer?: Header<any, any, any>;
|
|
36
|
+
}> & Readonly<{}>, {
|
|
37
|
+
props: any;
|
|
38
|
+
render: any;
|
|
39
|
+
cell: any;
|
|
40
|
+
header: any;
|
|
41
|
+
footer: any;
|
|
42
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { FlexRender, flexRender };
|
|
45
|
+
//# sourceMappingURL=FlexRender.d.ts.map
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { defineComponent, h, isVNode } from "vue";
|
|
2
|
+
|
|
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
|
+
*/
|
|
33
|
+
const FlexRender = defineComponent({
|
|
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
|
+
},
|
|
60
|
+
setup: (props) => {
|
|
61
|
+
return () => {
|
|
62
|
+
if (props.cell) {
|
|
63
|
+
var _cell$getIsAggregated, _cell$getIsPlaceholde;
|
|
64
|
+
const cell = props.cell;
|
|
65
|
+
const def = cell.column.columnDef;
|
|
66
|
+
if ((_cell$getIsAggregated = cell.getIsAggregated) === null || _cell$getIsAggregated === void 0 ? void 0 : _cell$getIsAggregated.call(cell)) return flexRender(def.aggregatedCell ?? def.cell, cell.getContext());
|
|
67
|
+
if ((_cell$getIsPlaceholde = cell.getIsPlaceholder) === null || _cell$getIsPlaceholde === void 0 ? void 0 : _cell$getIsPlaceholde.call(cell)) return null;
|
|
68
|
+
return flexRender(def.cell, cell.getContext());
|
|
69
|
+
}
|
|
70
|
+
if (props.header) return flexRender(props.header.column.columnDef.header, props.header.getContext());
|
|
71
|
+
if (props.footer) return flexRender(props.footer.column.columnDef.footer, props.footer.getContext());
|
|
72
|
+
return flexRender(props.render, props.props);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { FlexRender, flexRender };
|
|
79
|
+
//# sourceMappingURL=FlexRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 const cell = props.cell\n const def = cell.column.columnDef\n // When the column-grouping feature is registered, a cell can be in\n // one of three special modes that should not render `columnDef.cell`\n // directly:\n // - aggregated: render `columnDef.aggregatedCell` (falling back to\n // `columnDef.cell` if the column did not define one)\n // - placeholder: a duplicate value within a group — render nothing\n // - grouped: fall through to `columnDef.cell`; consumers that want\n // a custom group header typically branch on `cell.getIsGrouped()`\n // themselves first\n if (cell.getIsAggregated?.()) {\n return flexRender(def.aggregatedCell ?? def.cell, cell.getContext())\n }\n if (cell.getIsPlaceholder?.()) {\n return null\n }\n return flexRender(def.cell, cell.getContext())\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;CACvD,IAAI,OAAO,WAAW,YAAY;EAChC,MAAM,WAAW,OAAO,KAAK;EAE7B,IAAI,QAAQ,QAAQ,GAClB,OAAO;EAGT,IAAI,OAAO,aAAa,cAAc,OAAO,aAAa,UACxD,OAAO,EAAE,UAAU,KAAK;EAG1B,OAAO;CACT;CAEA,IAAI,OAAO,WAAW,UACpB,OAAO,EAAE,QAAQ,KAAK;CAGxB,OAAO;AACT;;;;;;;;;;;;;;;;AAiBA,MAAa,aAAa,gBAAgB;CACxC,OAAO;EACL,QAAQ;GACN,MAAM;IAAC;IAAU;IAAQ;GAAM;GAC/B,SAAS;EACX;EACA,OAAO;GACL,MAAM;GACN,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;EACX;EACA,QAAQ;GACN,MAAM;GACN,SAAS;EACX;EACA,QAAQ;GACN,MAAM;GACN,SAAS;EACX;CACF;CACA,QAAQ,UAMF;EACJ,aAAa;GAEX,IAAI,MAAM,MAAM;;IACd,MAAM,OAAO,MAAM;IACnB,MAAM,MAAM,KAAK,OAAO;IAUxB,6BAAI,KAAK,wGAAkB,GACzB,OAAO,WAAW,IAAI,kBAAkB,IAAI,MAAM,KAAK,WAAW,CAAC;IAErE,6BAAI,KAAK,yGAAmB,GAC1B,OAAO;IAET,OAAO,WAAW,IAAI,MAAM,KAAK,WAAW,CAAC;GAC/C;GAEA,IAAI,MAAM,QACR,OAAO,WACL,MAAM,OAAO,OAAO,UAAU,QAC9B,MAAM,OAAO,WAAW,CAC1B;GAGF,IAAI,MAAM,QACR,OAAO,WACL,MAAM,OAAO,OAAO,UAAU,QAC9B,MAAM,OAAO,WAAW,CAC1B;GAIF,OAAO,WAAW,MAAM,QAAQ,MAAM,KAAK;EAC7C;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
const require_FlexRender = require('./FlexRender.cjs');
|
|
2
|
+
const require_merge_proxy = require('./merge-proxy.cjs');
|
|
3
|
+
const require_useTable = require('./useTable.cjs');
|
|
4
|
+
let vue = require("vue");
|
|
5
|
+
let _tanstack_table_core = require("@tanstack/table-core");
|
|
6
|
+
let _tanstack_vue_store = require("@tanstack/vue-store");
|
|
7
|
+
|
|
8
|
+
//#region src/createTableHook.ts
|
|
9
|
+
const AppFlexRender = (0, vue.defineComponent)({
|
|
10
|
+
name: "TableFlexRender",
|
|
11
|
+
props: {
|
|
12
|
+
cell: {
|
|
13
|
+
type: Object,
|
|
14
|
+
default: void 0
|
|
15
|
+
},
|
|
16
|
+
header: {
|
|
17
|
+
type: Object,
|
|
18
|
+
default: void 0
|
|
19
|
+
},
|
|
20
|
+
footer: {
|
|
21
|
+
type: Object,
|
|
22
|
+
default: void 0
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
setup(props) {
|
|
26
|
+
return () => {
|
|
27
|
+
if (props.cell) return (0, vue.h)(require_FlexRender.FlexRender, {
|
|
28
|
+
render: props.cell.column.columnDef.cell,
|
|
29
|
+
props: props.cell.getContext()
|
|
30
|
+
});
|
|
31
|
+
if (props.header) return (0, vue.h)(require_FlexRender.FlexRender, {
|
|
32
|
+
render: props.header.column.columnDef.header,
|
|
33
|
+
props: props.header.getContext()
|
|
34
|
+
});
|
|
35
|
+
if (props.footer) return (0, vue.h)(require_FlexRender.FlexRender, {
|
|
36
|
+
render: props.footer.column.columnDef.footer,
|
|
37
|
+
props: props.footer.getContext()
|
|
38
|
+
});
|
|
39
|
+
return null;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Creates app-scoped Vue table helpers with features, row models, and
|
|
45
|
+
* renderable component maps pre-bound.
|
|
46
|
+
*
|
|
47
|
+
* Use this when an app or design system wants typed `useAppTable`, a pre-bound
|
|
48
|
+
* column helper, and context helpers for table, cell, and header components.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* const { useAppTable, createAppColumnHelper } = createTableHook({
|
|
53
|
+
* features,
|
|
54
|
+
* rowModels: {},
|
|
55
|
+
* tableComponents: {},
|
|
56
|
+
* cellComponents: {},
|
|
57
|
+
* headerComponents: {},
|
|
58
|
+
* })
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
function createTableHook({ tableComponents, cellComponents, headerComponents, ...defaultTableOptions }) {
|
|
62
|
+
const TableContext = Symbol("TableContext");
|
|
63
|
+
const CellContext = Symbol("CellContext");
|
|
64
|
+
const HeaderContext = Symbol("HeaderContext");
|
|
65
|
+
function createAppColumnHelper() {
|
|
66
|
+
return (0, _tanstack_table_core.createColumnHelper)();
|
|
67
|
+
}
|
|
68
|
+
function useTableContext() {
|
|
69
|
+
const table = (0, vue.inject)(TableContext);
|
|
70
|
+
if (!table) throw new Error("`useTableContext` must be used within an `AppTable` component. Make sure your component is wrapped with `<table.AppTable>...</table.AppTable>`.");
|
|
71
|
+
return table;
|
|
72
|
+
}
|
|
73
|
+
function useCellContext() {
|
|
74
|
+
const cell = (0, vue.inject)(CellContext);
|
|
75
|
+
if (!cell) throw new Error("`useCellContext` must be used within an `AppCell` component. Make sure your component is wrapped with `<table.AppCell :cell=\"cell\">...</table.AppCell>`.");
|
|
76
|
+
return cell;
|
|
77
|
+
}
|
|
78
|
+
function useHeaderContext() {
|
|
79
|
+
const header = (0, vue.inject)(HeaderContext);
|
|
80
|
+
if (!header) throw new Error("`useHeaderContext` must be used within an `AppHeader` or `AppFooter` component.");
|
|
81
|
+
return header;
|
|
82
|
+
}
|
|
83
|
+
const CellFlexRender = (0, vue.defineComponent)({
|
|
84
|
+
name: "AppCellFlexRender",
|
|
85
|
+
setup() {
|
|
86
|
+
const cell = useCellContext();
|
|
87
|
+
return () => (0, vue.h)(AppFlexRender, { cell });
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
const HeaderFlexRender = (0, vue.defineComponent)({
|
|
91
|
+
name: "AppHeaderFlexRender",
|
|
92
|
+
setup() {
|
|
93
|
+
const header = useHeaderContext();
|
|
94
|
+
return () => (0, vue.h)(AppFlexRender, { header });
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
const FooterFlexRender = (0, vue.defineComponent)({
|
|
98
|
+
name: "AppFooterFlexRender",
|
|
99
|
+
setup() {
|
|
100
|
+
const header = useHeaderContext();
|
|
101
|
+
return () => (0, vue.h)(AppFlexRender, { footer: header });
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
function useAppTable(tableOptions, selector) {
|
|
105
|
+
const table = require_useTable.useTable(require_merge_proxy.mergeProxy(defaultTableOptions, tableOptions), selector);
|
|
106
|
+
const AppTable = (0, vue.defineComponent)({
|
|
107
|
+
name: "AppTable",
|
|
108
|
+
props: { selector: {
|
|
109
|
+
type: Function,
|
|
110
|
+
default: void 0
|
|
111
|
+
} },
|
|
112
|
+
setup(props, { slots }) {
|
|
113
|
+
(0, vue.provide)(TableContext, table);
|
|
114
|
+
const selected = props.selector ? (0, _tanstack_vue_store.useSelector)(table.store, props.selector) : void 0;
|
|
115
|
+
return () => {
|
|
116
|
+
var _slots$default2;
|
|
117
|
+
if (!props.selector) {
|
|
118
|
+
var _slots$default;
|
|
119
|
+
return (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots);
|
|
120
|
+
}
|
|
121
|
+
return (_slots$default2 = slots.default) === null || _slots$default2 === void 0 ? void 0 : _slots$default2.call(slots, { state: selected === null || selected === void 0 ? void 0 : selected.value });
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
const AppCell = (0, vue.defineComponent)({
|
|
126
|
+
name: "AppCell",
|
|
127
|
+
props: {
|
|
128
|
+
cell: {
|
|
129
|
+
type: Object,
|
|
130
|
+
required: true
|
|
131
|
+
},
|
|
132
|
+
selector: {
|
|
133
|
+
type: Function,
|
|
134
|
+
default: void 0
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
setup(props, { slots }) {
|
|
138
|
+
const cell = props.cell;
|
|
139
|
+
(0, vue.provide)(CellContext, cell);
|
|
140
|
+
const selected = props.selector ? (0, _tanstack_vue_store.useSelector)(table.store, props.selector) : void 0;
|
|
141
|
+
const extendedCell = Object.assign(cell, {
|
|
142
|
+
FlexRender: CellFlexRender,
|
|
143
|
+
...cellComponents ?? {}
|
|
144
|
+
});
|
|
145
|
+
return () => {
|
|
146
|
+
var _slots$default3;
|
|
147
|
+
return (_slots$default3 = slots.default) === null || _slots$default3 === void 0 ? void 0 : _slots$default3.call(slots, props.selector ? {
|
|
148
|
+
cell: extendedCell,
|
|
149
|
+
state: selected === null || selected === void 0 ? void 0 : selected.value
|
|
150
|
+
} : { cell: extendedCell });
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
const AppHeader = (0, vue.defineComponent)({
|
|
155
|
+
name: "AppHeader",
|
|
156
|
+
props: {
|
|
157
|
+
header: {
|
|
158
|
+
type: Object,
|
|
159
|
+
required: true
|
|
160
|
+
},
|
|
161
|
+
selector: {
|
|
162
|
+
type: Function,
|
|
163
|
+
default: void 0
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
setup(props, { slots }) {
|
|
167
|
+
const header = props.header;
|
|
168
|
+
(0, vue.provide)(HeaderContext, header);
|
|
169
|
+
const selected = props.selector ? (0, _tanstack_vue_store.useSelector)(table.store, props.selector) : void 0;
|
|
170
|
+
const extendedHeader = Object.assign(header, {
|
|
171
|
+
FlexRender: HeaderFlexRender,
|
|
172
|
+
...headerComponents ?? {}
|
|
173
|
+
});
|
|
174
|
+
return () => {
|
|
175
|
+
var _slots$default4;
|
|
176
|
+
return (_slots$default4 = slots.default) === null || _slots$default4 === void 0 ? void 0 : _slots$default4.call(slots, props.selector ? {
|
|
177
|
+
header: extendedHeader,
|
|
178
|
+
state: selected === null || selected === void 0 ? void 0 : selected.value
|
|
179
|
+
} : { header: extendedHeader });
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
const AppFooter = (0, vue.defineComponent)({
|
|
184
|
+
name: "AppFooter",
|
|
185
|
+
props: {
|
|
186
|
+
header: {
|
|
187
|
+
type: Object,
|
|
188
|
+
required: true
|
|
189
|
+
},
|
|
190
|
+
selector: {
|
|
191
|
+
type: Function,
|
|
192
|
+
default: void 0
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
setup(props, { slots }) {
|
|
196
|
+
const header = props.header;
|
|
197
|
+
(0, vue.provide)(HeaderContext, header);
|
|
198
|
+
const selected = props.selector ? (0, _tanstack_vue_store.useSelector)(table.store, props.selector) : void 0;
|
|
199
|
+
const extendedHeader = Object.assign(header, {
|
|
200
|
+
FlexRender: FooterFlexRender,
|
|
201
|
+
...headerComponents ?? {}
|
|
202
|
+
});
|
|
203
|
+
return () => {
|
|
204
|
+
var _slots$default5;
|
|
205
|
+
return (_slots$default5 = slots.default) === null || _slots$default5 === void 0 ? void 0 : _slots$default5.call(slots, props.selector ? {
|
|
206
|
+
header: extendedHeader,
|
|
207
|
+
state: selected === null || selected === void 0 ? void 0 : selected.value
|
|
208
|
+
} : { header: extendedHeader });
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
return Object.assign(table, {
|
|
213
|
+
AppTable,
|
|
214
|
+
AppCell,
|
|
215
|
+
AppHeader,
|
|
216
|
+
AppFooter,
|
|
217
|
+
FlexRender: AppFlexRender,
|
|
218
|
+
...tableComponents ?? {}
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
appFeatures: defaultTableOptions.features,
|
|
223
|
+
createAppColumnHelper,
|
|
224
|
+
useAppTable,
|
|
225
|
+
useTableContext,
|
|
226
|
+
useCellContext,
|
|
227
|
+
useHeaderContext
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
//#endregion
|
|
232
|
+
exports.AppFlexRender = AppFlexRender;
|
|
233
|
+
exports.createTableHook = createTableHook;
|
|
234
|
+
//# sourceMappingURL=createTableHook.cjs.map
|