@tanstack/angular-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.
Files changed (54) hide show
  1. package/README.md +127 -0
  2. package/dist/README.md +127 -0
  3. package/dist/fesm2022/tanstack-angular-table-static-functions.mjs +6 -0
  4. package/dist/fesm2022/tanstack-angular-table-static-functions.mjs.map +1 -0
  5. package/dist/fesm2022/tanstack-angular-table.mjs +1337 -242
  6. package/dist/fesm2022/tanstack-angular-table.mjs.map +1 -1
  7. package/dist/types/tanstack-angular-table-static-functions.d.ts +1 -0
  8. package/dist/types/tanstack-angular-table.d.ts +793 -0
  9. package/package.json +39 -19
  10. package/skills/angular/angular-rendering-directives/SKILL.md +415 -0
  11. package/skills/angular/angular-rendering-directives/references/content-shapes.md +142 -0
  12. package/skills/angular/angular-rendering-directives/references/create-table-hook-registries.md +89 -0
  13. package/skills/angular/angular-rendering-directives/references/di-tokens.md +171 -0
  14. package/skills/angular/angular-rendering-directives/references/flex-render-component-options.md +64 -0
  15. package/skills/angular/client-to-server/SKILL.md +467 -0
  16. package/skills/angular/compose-with-tanstack-query/SKILL.md +482 -0
  17. package/skills/angular/compose-with-tanstack-store/SKILL.md +397 -0
  18. package/skills/angular/compose-with-tanstack-virtual/SKILL.md +400 -0
  19. package/skills/angular/getting-started/SKILL.md +496 -0
  20. package/skills/angular/getting-started/references/feature-row-model-mapping.md +48 -0
  21. package/skills/angular/migrate-v8-to-v9/SKILL.md +419 -0
  22. package/skills/angular/migrate-v8-to-v9/references/v8-to-v9-mapping.md +261 -0
  23. package/skills/angular/production-readiness/SKILL.md +469 -0
  24. package/skills/angular/table-state/SKILL.md +429 -0
  25. package/skills/angular/table-state/references/external-atoms-and-app-hook.md +152 -0
  26. package/src/flex-render/context.ts +14 -0
  27. package/src/flex-render/flags.ts +34 -0
  28. package/src/flex-render/flexRenderComponent.ts +288 -0
  29. package/src/flex-render/flexRenderComponentFactory.ts +251 -0
  30. package/src/flex-render/renderer.ts +393 -0
  31. package/src/flex-render/view.ts +226 -0
  32. package/src/flexRender.ts +124 -0
  33. package/src/helpers/cell.ts +104 -0
  34. package/src/helpers/createTableHook.ts +499 -0
  35. package/src/helpers/flexRenderCell.ts +136 -0
  36. package/src/helpers/header.ts +99 -0
  37. package/src/helpers/table.ts +85 -0
  38. package/src/index.ts +23 -70
  39. package/src/injectTable.ts +212 -0
  40. package/src/{lazy-signal-initializer.ts → lazySignalInitializer.ts} +2 -2
  41. package/src/reactivity.ts +105 -0
  42. package/static-functions/index.ts +1 -0
  43. package/static-functions/ng-package.json +6 -0
  44. package/dist/esm2022/flex-render.mjs +0 -150
  45. package/dist/esm2022/index.mjs +0 -48
  46. package/dist/esm2022/lazy-signal-initializer.mjs +0 -43
  47. package/dist/esm2022/proxy.mjs +0 -83
  48. package/dist/esm2022/tanstack-angular-table.mjs +0 -5
  49. package/dist/flex-render.d.ts +0 -31
  50. package/dist/index.d.ts +0 -5
  51. package/dist/lazy-signal-initializer.d.ts +0 -5
  52. package/dist/proxy.d.ts +0 -3
  53. package/src/flex-render.ts +0 -187
  54. package/src/proxy.ts +0 -97
@@ -1,150 +0,0 @@
1
- import { ChangeDetectorRef, ComponentRef, Directive, EmbeddedViewRef, Inject, InjectionToken, Injector, Input, TemplateRef, Type, ViewContainerRef, inject, isSignal, } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class FlexRenderDirective {
4
- viewContainerRef;
5
- templateRef;
6
- content = undefined;
7
- props = {};
8
- injector = inject(Injector);
9
- constructor(viewContainerRef, templateRef) {
10
- this.viewContainerRef = viewContainerRef;
11
- this.templateRef = templateRef;
12
- }
13
- ref = null;
14
- ngOnInit() {
15
- this.ref = this.render();
16
- }
17
- ngDoCheck() {
18
- if (this.ref instanceof ComponentRef) {
19
- this.ref.injector.get(ChangeDetectorRef).markForCheck();
20
- }
21
- else if (this.ref instanceof EmbeddedViewRef) {
22
- this.ref.markForCheck();
23
- }
24
- }
25
- render() {
26
- this.viewContainerRef.clear();
27
- const { content, props } = this;
28
- if (!this.content) {
29
- return null;
30
- }
31
- if (typeof content === 'string' || typeof content === 'number') {
32
- return this.renderStringContent();
33
- }
34
- if (typeof content === 'function') {
35
- return this.renderContent(content(props));
36
- }
37
- return null;
38
- }
39
- renderContent(content) {
40
- if (typeof content === 'string' || typeof content === 'number') {
41
- return this.renderStringContent();
42
- }
43
- if (content instanceof TemplateRef) {
44
- return this.viewContainerRef.createEmbeddedView(content, this.getTemplateRefContext());
45
- }
46
- else if (content instanceof FlexRenderComponent) {
47
- return this.renderComponent(content);
48
- }
49
- else if (content instanceof Type) {
50
- return this.renderCustomComponent(content);
51
- }
52
- else {
53
- return null;
54
- }
55
- }
56
- renderStringContent() {
57
- const context = () => {
58
- return typeof this.content === 'string' ||
59
- typeof this.content === 'number'
60
- ? this.content
61
- : this.content?.(this.props);
62
- };
63
- return this.viewContainerRef.createEmbeddedView(this.templateRef, {
64
- get $implicit() {
65
- return context();
66
- },
67
- });
68
- }
69
- renderComponent(flexRenderComponent) {
70
- const { component, inputs, injector } = flexRenderComponent;
71
- const getContext = () => this.props;
72
- const proxy = new Proxy(this.props, {
73
- get: (_, key) => getContext()?.[key],
74
- });
75
- const componentInjector = Injector.create({
76
- parent: injector ?? this.injector,
77
- providers: [{ provide: FlexRenderComponentProps, useValue: proxy }],
78
- });
79
- const componentRef = this.viewContainerRef.createComponent(component, {
80
- injector: componentInjector,
81
- });
82
- for (const prop in inputs) {
83
- if (componentRef.instance?.hasOwnProperty(prop)) {
84
- componentRef.setInput(prop, inputs[prop]);
85
- }
86
- }
87
- return componentRef;
88
- }
89
- renderCustomComponent(component) {
90
- const componentRef = this.viewContainerRef.createComponent(component, {
91
- injector: this.injector,
92
- });
93
- for (const prop in this.props) {
94
- // Only signal based input can be added here
95
- if (componentRef.instance?.hasOwnProperty(prop) &&
96
- // @ts-ignore
97
- isSignal(componentRef.instance[prop])) {
98
- componentRef.setInput(prop, this.props[prop]);
99
- }
100
- }
101
- return componentRef;
102
- }
103
- getTemplateRefContext() {
104
- const getContext = () => this.props;
105
- return {
106
- get $implicit() {
107
- return getContext();
108
- },
109
- };
110
- }
111
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FlexRenderDirective, deps: [{ token: ViewContainerRef }, { token: TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
112
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.5", type: FlexRenderDirective, isStandalone: true, selector: "[flexRender]", inputs: { content: ["flexRender", "content"], props: ["flexRenderProps", "props"], injector: ["flexRenderInjector", "injector"] }, ngImport: i0 });
113
- }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FlexRenderDirective, decorators: [{
115
- type: Directive,
116
- args: [{
117
- selector: '[flexRender]',
118
- standalone: true,
119
- }]
120
- }], ctorParameters: () => [{ type: i0.ViewContainerRef, decorators: [{
121
- type: Inject,
122
- args: [ViewContainerRef]
123
- }] }, { type: i0.TemplateRef, decorators: [{
124
- type: Inject,
125
- args: [TemplateRef]
126
- }] }], propDecorators: { content: [{
127
- type: Input,
128
- args: [{ required: true, alias: 'flexRender' }]
129
- }], props: [{
130
- type: Input,
131
- args: [{ required: true, alias: 'flexRenderProps' }]
132
- }], injector: [{
133
- type: Input,
134
- args: [{ required: false, alias: 'flexRenderInjector' }]
135
- }] } });
136
- export class FlexRenderComponent {
137
- component;
138
- inputs;
139
- injector;
140
- constructor(component, inputs = {}, injector) {
141
- this.component = component;
142
- this.inputs = inputs;
143
- this.injector = injector;
144
- }
145
- }
146
- const FlexRenderComponentProps = new InjectionToken('[@tanstack/angular-table] Flex render component context props');
147
- export function injectFlexRenderContext() {
148
- return inject(FlexRenderComponentProps);
149
- }
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC1yZW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmxleC1yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osU0FBUyxFQUNULGVBQWUsRUFDZixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFFBQVEsR0FHVCxNQUFNLGVBQWUsQ0FBQTs7QUFldEIsTUFBTSxPQUFPLG1CQUFtQjtJQWtCWDtJQUVBO0lBaEJuQixPQUFPLEdBSVMsU0FBUyxDQUFBO0lBR3pCLEtBQUssR0FBVyxFQUFZLENBQUE7SUFHNUIsUUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUVyQyxZQUVtQixnQkFBa0MsRUFFbEMsV0FBNkI7UUFGN0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUVsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7SUFDN0MsQ0FBQztJQUVKLEdBQUcsR0FBNkQsSUFBSSxDQUFBO0lBRXBFLFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxZQUFZLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUN6RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxZQUFZLGVBQWUsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtB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QixXQUFXOzJGQW5CVixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBa0JJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFFdkIsTUFBTTsyQkFBQyxXQUFXO3lDQWZyQixPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBUTlDLEtBQUs7c0JBREosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFO2dCQUluRCxRQUFRO3NCQURQLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTs7QUFnSXpELE1BQU0sT0FBTyxtQkFBbUI7SUFFbkI7SUFDQTtJQUNBO0lBSFgsWUFDVyxTQUF3QixFQUN4QixTQUFZLEVBQU8sRUFDbkIsUUFBbUI7UUFGbkIsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFhO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVc7SUFDM0IsQ0FBQztDQUNMO0FBRUQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDakQsK0RBQStELENBQ2hFLENBQUE7QUFFRCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sTUFBTSxDQUFJLHdCQUF3QixDQUFDLENBQUE7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBpbmplY3QsXG4gIGlzU2lnbmFsLFxuICB0eXBlIERvQ2hlY2ssXG4gIHR5cGUgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5leHBvcnQgdHlwZSBGbGV4UmVuZGVyQ29udGVudDxUUHJvcHMgZXh0ZW5kcyBOb25OdWxsYWJsZTx1bmtub3duPj4gPVxuICB8IHN0cmluZ1xuICB8IG51bWJlclxuICB8IFR5cGU8VFByb3BzPlxuICB8IEZsZXhSZW5kZXJDb21wb25lbnQ8VFByb3BzPlxuICB8IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUUHJvcHMgfT5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmbGV4UmVuZGVyXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZsZXhSZW5kZXJEaXJlY3RpdmU8VFByb3BzIGV4dGVuZHMgTm9uTnVsbGFibGU8dW5rbm93bj4+XG4gIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrXG57XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2ZsZXhSZW5kZXInIH0pXG4gIGNvbnRlbnQ6XG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgKChwcm9wczogVFByb3BzKSA9PiBGbGV4UmVuZGVyQ29udGVudDxUUHJvcHM+KVxuICAgIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiAnZmxleFJlbmRlclByb3BzJyB9KVxuICBwcm9wczogVFByb3BzID0ge30gYXMgVFByb3BzXG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlLCBhbGlhczogJ2ZsZXhSZW5kZXJJbmplY3RvcicgfSlcbiAgaW5qZWN0b3I6IEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVmlld0NvbnRhaW5lclJlZilcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgQEluamVjdChUZW1wbGF0ZVJlZilcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+XG4gICkge31cblxuICByZWY/OiBDb21wb25lbnRSZWY8dW5rbm93bj4gfCBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbFxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVmID0gdGhpcy5yZW5kZXIoKVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICh0aGlzLnJlZiBpbnN0YW5jZW9mIENvbXBvbmVudFJlZikge1xuICAgICAgdGhpcy5yZWYuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKS5tYXJrRm9yQ2hlY2soKVxuICAgIH0gZWxzZSBpZiAodGhpcy5yZWYgaW5zdGFuY2VvZiBFbWJlZGRlZFZpZXdSZWYpIHtcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpXG4gICAgY29uc3QgeyBjb250ZW50LCBwcm9wcyB9ID0gdGhpc1xuICAgIGlmICghdGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNvbnRlbnQgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJTdHJpbmdDb250ZW50KClcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJDb250ZW50KGNvbnRlbnQocHJvcHMpKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDb250ZW50KGNvbnRlbnQ6IEZsZXhSZW5kZXJDb250ZW50PFRQcm9wcz4pIHtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyU3RyaW5nQ29udGVudCgpXG4gICAgfVxuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICBjb250ZW50LFxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlUmVmQ29udGV4dCgpXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgRmxleFJlbmRlckNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29tcG9uZW50KGNvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3VzdG9tQ29tcG9uZW50KGNvbnRlbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTdHJpbmdDb250ZW50KCk6IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPiB7XG4gICAgY29uc3QgY29udGV4dCA9ICgpID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5jb250ZW50ID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgdGhpcy5jb250ZW50ID09PSAnbnVtYmVyJ1xuICAgICAgICA/IHRoaXMuY29udGVudFxuICAgICAgICA6IHRoaXMuY29udGVudD8uKHRoaXMucHJvcHMpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHtcbiAgICAgIGdldCAkaW1wbGljaXQoKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0KClcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29tcG9uZW50KFxuICAgIGZsZXhSZW5kZXJDb21wb25lbnQ6IEZsZXhSZW5kZXJDb21wb25lbnQ8VFByb3BzPlxuICApOiBDb21wb25lbnRSZWY8dW5rbm93bj4ge1xuICAgIGNvbnN0IHsgY29tcG9uZW50LCBpbnB1dHMsIGluamVjdG9yIH0gPSBmbGV4UmVuZGVyQ29tcG9uZW50XG5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gdGhpcy5wcm9wc1xuXG4gICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkodGhpcy5wcm9wcywge1xuICAgICAgZ2V0OiAoXywga2V5KSA9PiBnZXRDb250ZXh0KCk/LltrZXkgYXMga2V5b2YgdHlwZW9mIF9dLFxuICAgIH0pXG5cbiAgICBjb25zdCBjb21wb25lbnRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwYXJlbnQ6IGluamVjdG9yID8/IHRoaXMuaW5qZWN0b3IsXG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEZsZXhSZW5kZXJDb21wb25lbnRQcm9wcywgdXNlVmFsdWU6IHByb3h5IH1dLFxuICAgIH0pXG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xuICAgICAgaW5qZWN0b3I6IGNvbXBvbmVudEluamVjdG9yLFxuICAgIH0pXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGlucHV0cykge1xuICAgICAgaWYgKGNvbXBvbmVudFJlZi5pbnN0YW5jZT8uaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KHByb3AsIGlucHV0c1twcm9wXSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZlxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDdXN0b21Db21wb25lbnQoXG4gICAgY29tcG9uZW50OiBUeXBlPHVua25vd24+XG4gICk6IENvbXBvbmVudFJlZjx1bmtub3duPiB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yLFxuICAgIH0pXG4gICAgZm9yIChjb25zdCBwcm9wIGluIHRoaXMucHJvcHMpIHtcbiAgICAgIC8vIE9ubHkgc2lnbmFsIGJhc2VkIGlucHV0IGNhbiBiZSBhZGRlZCBoZXJlXG4gICAgICBpZiAoXG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZT8uaGFzT3duUHJvcGVydHkocHJvcCkgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpc1NpZ25hbChjb21wb25lbnRSZWYuaW5zdGFuY2VbcHJvcF0pXG4gICAgICApIHtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KHByb3AsIHRoaXMucHJvcHNbcHJvcF0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRSZWZcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVSZWZDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiB0aGlzLnByb3BzXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldCAkaW1wbGljaXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0KClcbiAgICAgIH0sXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGbGV4UmVuZGVyQ29tcG9uZW50PFQgZXh0ZW5kcyBOb25OdWxsYWJsZTx1bmtub3duPj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBjb21wb25lbnQ6IFR5cGU8dW5rbm93bj4sXG4gICAgcmVhZG9ubHkgaW5wdXRzOiBUID0ge30gYXMgVCxcbiAgICByZWFkb25seSBpbmplY3Rvcj86IEluamVjdG9yXG4gICkge31cbn1cblxuY29uc3QgRmxleFJlbmRlckNvbXBvbmVudFByb3BzID0gbmV3IEluamVjdGlvblRva2VuPE5vbk51bGxhYmxlPHVua25vd24+PihcbiAgJ1tAdGFuc3RhY2svYW5ndWxhci10YWJsZV0gRmxleCByZW5kZXIgY29tcG9uZW50IGNvbnRleHQgcHJvcHMnXG4pXG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RGbGV4UmVuZGVyQ29udGV4dDxUIGV4dGVuZHMgTm9uTnVsbGFibGU8dW5rbm93bj4+KCk6IFQge1xuICByZXR1cm4gaW5qZWN0PFQ+KEZsZXhSZW5kZXJDb21wb25lbnRQcm9wcylcbn1cbiJdfQ==
@@ -1,48 +0,0 @@
1
- import { computed, signal } from '@angular/core';
2
- import { _createTable, } from '@tanstack/table-core';
3
- import { lazyInit } from './lazy-signal-initializer';
4
- import { proxifyTable } from './proxy';
5
- export * from '@tanstack/table-core';
6
- export { FlexRenderComponent, FlexRenderDirective, injectFlexRenderContext, } from './flex-render';
7
- export function injectTable(options) {
8
- return lazyInit(() => {
9
- const resolvedOptions = {
10
- state: {},
11
- onStateChange: () => { },
12
- renderFallbackValue: null,
13
- ...options(),
14
- };
15
- const table = _createTable(resolvedOptions);
16
- // By default, manage table state here using the table's initial state
17
- const state = signal(table.initialState);
18
- // Compose table options using computed.
19
- // This is to allow `tableSignal` to listen and set table option
20
- const updatedOptions = computed(() => {
21
- // listen to table state changed
22
- const tableState = state();
23
- // listen to input options changed
24
- const tableOptions = options();
25
- return {
26
- ...table.options,
27
- ...resolvedOptions,
28
- ...tableOptions,
29
- state: { ...tableState, ...tableOptions.state },
30
- onStateChange: updater => {
31
- const value = updater instanceof Function ? updater(tableState) : updater;
32
- state.set(value);
33
- resolvedOptions.onStateChange?.(updater);
34
- },
35
- };
36
- });
37
- // convert table instance to signal for proxify to listen to any table state and options changes
38
- const tableSignal = computed(() => {
39
- table.setOptions(updatedOptions());
40
- return table;
41
- }, {
42
- equal: () => false,
43
- });
44
- // proxify Table instance to provide ability for consumer to listen to any table state changes
45
- return proxifyTable(tableSignal);
46
- });
47
- }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBZSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDN0QsT0FBTyxFQUtMLFlBQVksR0FFYixNQUFNLHNCQUFzQixDQUFBO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRXRDLGNBQWMsc0JBQXNCLENBQUE7QUFFcEMsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsdUJBQXVCLEdBQ3hCLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQWtDO0lBRWxDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQixNQUFNLGVBQWUsR0FBRztZQUN0QixLQUFLLEVBQUUsRUFBRTtZQUNULGFBQWEsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1lBQ3ZCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsR0FBRyxPQUFPLEVBQUU7U0FDYixDQUFBO1FBRUQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRTNDLHNFQUFzRTtRQUN0RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQWEsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXBELHdDQUF3QztRQUN4QyxnRUFBZ0U7UUFDaEUsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUE4QixHQUFHLEVBQUU7WUFDaEUsZ0NBQWdDO1lBQ2hDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxDQUFBO1lBQzFCLGtDQUFrQztZQUNsQyxNQUFNLFlBQVksR0FBRyxPQUFPLEVBQUUsQ0FBQTtZQUM5QixPQUFPO2dCQUNMLEdBQUcsS0FBSyxDQUFDLE9BQU87Z0JBQ2hCLEdBQUcsZUFBZTtnQkFDbEIsR0FBRyxZQUFZO2dCQUNmLEtBQUssRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRTtnQkFDL0MsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN2QixNQUFNLEtBQUssR0FDVCxPQUFPLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtvQkFDN0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDaEIsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUMxQyxDQUFDO2FBQ0YsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsZ0dBQWdHO1FBQ2hHLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FDMUIsR0FBRyxFQUFFO1lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO1lBQ2xDLE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQyxFQUNEO1lBQ0UsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7U0FDbkIsQ0FDRixDQUFBO1FBRUQsOEZBQThGO1FBQzlGLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIFJvd0RhdGEsXG4gIFRhYmxlT3B0aW9ucyxcbiAgVGFibGVPcHRpb25zUmVzb2x2ZWQsXG4gIFRhYmxlU3RhdGUsXG4gIF9jcmVhdGVUYWJsZSxcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSAnQHRhbnN0YWNrL3RhYmxlLWNvcmUnXG5pbXBvcnQgeyBsYXp5SW5pdCB9IGZyb20gJy4vbGF6eS1zaWduYWwtaW5pdGlhbGl6ZXInXG5pbXBvcnQgeyBwcm94aWZ5VGFibGUgfSBmcm9tICcuL3Byb3h5J1xuXG5leHBvcnQgKiBmcm9tICdAdGFuc3RhY2svdGFibGUtY29yZSdcblxuZXhwb3J0IHtcbiAgdHlwZSBGbGV4UmVuZGVyQ29udGVudCxcbiAgRmxleFJlbmRlckNvbXBvbmVudCxcbiAgRmxleFJlbmRlckRpcmVjdGl2ZSxcbiAgaW5qZWN0RmxleFJlbmRlckNvbnRleHQsXG59IGZyb20gJy4vZmxleC1yZW5kZXInXG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RUYWJsZTxURGF0YSBleHRlbmRzIFJvd0RhdGE+KFxuICBvcHRpb25zOiAoKSA9PiBUYWJsZU9wdGlvbnM8VERhdGE+XG4pOiBUYWJsZTxURGF0YT4gJiBTaWduYWw8VGFibGU8VERhdGE+PiB7XG4gIHJldHVybiBsYXp5SW5pdCgoKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0ge1xuICAgICAgc3RhdGU6IHt9LFxuICAgICAgb25TdGF0ZUNoYW5nZTogKCkgPT4ge30sXG4gICAgICByZW5kZXJGYWxsYmFja1ZhbHVlOiBudWxsLFxuICAgICAgLi4ub3B0aW9ucygpLFxuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gX2NyZWF0ZVRhYmxlKHJlc29sdmVkT3B0aW9ucylcblxuICAgIC8vIEJ5IGRlZmF1bHQsIG1hbmFnZSB0YWJsZSBzdGF0ZSBoZXJlIHVzaW5nIHRoZSB0YWJsZSdzIGluaXRpYWwgc3RhdGVcbiAgICBjb25zdCBzdGF0ZSA9IHNpZ25hbDxUYWJsZVN0YXRlPih0YWJsZS5pbml0aWFsU3RhdGUpXG5cbiAgICAvLyBDb21wb3NlIHRhYmxlIG9wdGlvbnMgdXNpbmcgY29tcHV0ZWQuXG4gICAgLy8gVGhpcyBpcyB0byBhbGxvdyBgdGFibGVTaWduYWxgIHRvIGxpc3RlbiBhbmQgc2V0IHRhYmxlIG9wdGlvblxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gY29tcHV0ZWQ8VGFibGVPcHRpb25zUmVzb2x2ZWQ8VERhdGE+PigoKSA9PiB7XG4gICAgICAvLyBsaXN0ZW4gdG8gdGFibGUgc3RhdGUgY2hhbmdlZFxuICAgICAgY29uc3QgdGFibGVTdGF0ZSA9IHN0YXRlKClcbiAgICAgIC8vIGxpc3RlbiB0byBpbnB1dCBvcHRpb25zIGNoYW5nZWRcbiAgICAgIGNvbnN0IHRhYmxlT3B0aW9ucyA9IG9wdGlvbnMoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGFibGUub3B0aW9ucyxcbiAgICAgICAgLi4ucmVzb2x2ZWRPcHRpb25zLFxuICAgICAgICAuLi50YWJsZU9wdGlvbnMsXG4gICAgICAgIHN0YXRlOiB7IC4uLnRhYmxlU3RhdGUsIC4uLnRhYmxlT3B0aW9ucy5zdGF0ZSB9LFxuICAgICAgICBvblN0YXRlQ2hhbmdlOiB1cGRhdGVyID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICAgICB1cGRhdGVyIGluc3RhbmNlb2YgRnVuY3Rpb24gPyB1cGRhdGVyKHRhYmxlU3RhdGUpIDogdXBkYXRlclxuICAgICAgICAgIHN0YXRlLnNldCh2YWx1ZSlcbiAgICAgICAgICByZXNvbHZlZE9wdGlvbnMub25TdGF0ZUNoYW5nZT8uKHVwZGF0ZXIpXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIGNvbnZlcnQgdGFibGUgaW5zdGFuY2UgdG8gc2lnbmFsIGZvciBwcm94aWZ5IHRvIGxpc3RlbiB0byBhbnkgdGFibGUgc3RhdGUgYW5kIG9wdGlvbnMgY2hhbmdlc1xuICAgIGNvbnN0IHRhYmxlU2lnbmFsID0gY29tcHV0ZWQoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRhYmxlLnNldE9wdGlvbnModXBkYXRlZE9wdGlvbnMoKSlcbiAgICAgICAgcmV0dXJuIHRhYmxlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBlcXVhbDogKCkgPT4gZmFsc2UsXG4gICAgICB9XG4gICAgKVxuXG4gICAgLy8gcHJveGlmeSBUYWJsZSBpbnN0YW5jZSB0byBwcm92aWRlIGFiaWxpdHkgZm9yIGNvbnN1bWVyIHRvIGxpc3RlbiB0byBhbnkgdGFibGUgc3RhdGUgY2hhbmdlc1xuICAgIHJldHVybiBwcm94aWZ5VGFibGUodGFibGVTaWduYWwpXG4gIH0pXG59XG4iXX0=
@@ -1,43 +0,0 @@
1
- import { untracked } from '@angular/core';
2
- /**
3
- * Implementation from @tanstack/angular-query
4
- * {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}
5
- */
6
- export function lazyInit(initializer) {
7
- let object = null;
8
- const initializeObject = () => {
9
- if (!object) {
10
- object = untracked(() => initializer());
11
- }
12
- };
13
- queueMicrotask(() => initializeObject());
14
- const table = () => { };
15
- return new Proxy(table, {
16
- apply(target, thisArg, argArray) {
17
- initializeObject();
18
- if (typeof object === 'function') {
19
- return Reflect.apply(object, thisArg, argArray);
20
- }
21
- return Reflect.apply(target, thisArg, argArray);
22
- },
23
- get(_, prop, receiver) {
24
- initializeObject();
25
- return Reflect.get(object, prop, receiver);
26
- },
27
- has(_, prop) {
28
- initializeObject();
29
- return Reflect.has(object, prop);
30
- },
31
- ownKeys() {
32
- initializeObject();
33
- return Reflect.ownKeys(object);
34
- },
35
- getOwnPropertyDescriptor() {
36
- return {
37
- enumerable: true,
38
- configurable: true,
39
- };
40
- },
41
- });
42
- }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1zaWduYWwtaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGF6eS1zaWduYWwtaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFtQixXQUFvQjtJQUM3RCxJQUFJLE1BQU0sR0FBYSxJQUFJLENBQUE7SUFFM0IsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7UUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ3pDLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO0lBRXhDLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQTtJQUV0QixPQUFPLElBQUksS0FBSyxDQUFJLEtBQVUsRUFBRTtRQUM5QixLQUFLLENBQUMsTUFBUyxFQUFFLE9BQVksRUFBRSxRQUFlO1lBQzVDLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDakQsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFDRCxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRO1lBQ25CLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDakQsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSTtZQUNULGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBQ0QsT0FBTztZQUNMLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQVcsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFDRCx3QkFBd0I7WUFDdEIsT0FBTztnQkFDTCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQTtRQUNILENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBmcm9tIEB0YW5zdGFjay9hbmd1bGFyLXF1ZXJ5XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1RhblN0YWNrL3F1ZXJ5L2Jsb2IvbWFpbi9wYWNrYWdlcy9hbmd1bGFyLXF1ZXJ5LWV4cGVyaW1lbnRhbC9zcmMvdXRpbC9sYXp5LWluaXQvbGF6eS1pbml0LnRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF6eUluaXQ8VCBleHRlbmRzIG9iamVjdD4oaW5pdGlhbGl6ZXI6ICgpID0+IFQpOiBUIHtcbiAgbGV0IG9iamVjdDogVCB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgaW5pdGlhbGl6ZU9iamVjdCA9ICgpID0+IHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgb2JqZWN0ID0gdW50cmFja2VkKCgpID0+IGluaXRpYWxpemVyKCkpXG4gICAgfVxuICB9XG5cbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4gaW5pdGlhbGl6ZU9iamVjdCgpKVxuXG4gIGNvbnN0IHRhYmxlID0gKCkgPT4ge31cblxuICByZXR1cm4gbmV3IFByb3h5PFQ+KHRhYmxlIGFzIFQsIHtcbiAgICBhcHBseSh0YXJnZXQ6IFQsIHRoaXNBcmc6IGFueSwgYXJnQXJyYXk6IGFueVtdKTogYW55IHtcbiAgICAgIGluaXRpYWxpemVPYmplY3QoKVxuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob2JqZWN0LCB0aGlzQXJnLCBhcmdBcnJheSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRhcmdldCBhcyBhbnksIHRoaXNBcmcsIGFyZ0FycmF5KVxuICAgIH0sXG4gICAgZ2V0KF8sIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICBpbml0aWFsaXplT2JqZWN0KClcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldChvYmplY3QgYXMgVCwgcHJvcCwgcmVjZWl2ZXIpXG4gICAgfSxcbiAgICBoYXMoXywgcHJvcCkge1xuICAgICAgaW5pdGlhbGl6ZU9iamVjdCgpXG4gICAgICByZXR1cm4gUmVmbGVjdC5oYXMob2JqZWN0IGFzIFQsIHByb3ApXG4gICAgfSxcbiAgICBvd25LZXlzKCkge1xuICAgICAgaW5pdGlhbGl6ZU9iamVjdCgpXG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKG9iamVjdCBhcyBUKVxuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfVxuICAgIH0sXG4gIH0pXG59XG4iXX0=
@@ -1,83 +0,0 @@
1
- import { computed, untracked } from '@angular/core';
2
- export function proxifyTable(tableSignal) {
3
- const internalState = tableSignal;
4
- return new Proxy(internalState, {
5
- apply() {
6
- return tableSignal();
7
- },
8
- get(target, property) {
9
- if (target[property]) {
10
- return target[property];
11
- }
12
- const table = untracked(tableSignal);
13
- /**
14
- * Attempt to convert all accessors into computed ones,
15
- * excluding handlers as they do not retain any reactive value
16
- */
17
- if (property.startsWith('get') &&
18
- !property.endsWith('Handler') &&
19
- !property.endsWith('Model')) {
20
- const maybeFn = table[property];
21
- if (typeof maybeFn === 'function') {
22
- Object.defineProperty(target, property, {
23
- value: toComputed(tableSignal, maybeFn),
24
- configurable: true,
25
- enumerable: true,
26
- });
27
- return target[property];
28
- }
29
- }
30
- // @ts-expect-error
31
- return (target[property] = table[property]);
32
- },
33
- has(_, prop) {
34
- return !!untracked(tableSignal)[prop];
35
- },
36
- ownKeys() {
37
- return Reflect.ownKeys(untracked(tableSignal));
38
- },
39
- getOwnPropertyDescriptor() {
40
- return {
41
- enumerable: true,
42
- configurable: true,
43
- };
44
- },
45
- });
46
- }
47
- /**
48
- * Here we'll handle all type of accessors:
49
- * - 0 argument -> e.g. table.getCanNextPage())
50
- * - 0~1 arguments -> e.g. table.getIsSomeRowsPinned(position?)
51
- * - 1 required argument -> e.g. table.getColumn(columnId)
52
- * - 1+ argument -> e.g. table.getRow(id, searchAll?)
53
- *
54
- * Since we are not able to detect automatically the accessors parameters,
55
- * we'll wrap all accessors into a cached function wrapping a computed
56
- * that return it's value based on the given parameters
57
- */
58
- function toComputed(signal, fn) {
59
- const hasArgs = fn.length > 0;
60
- if (!hasArgs) {
61
- return computed(() => {
62
- void signal();
63
- return fn();
64
- });
65
- }
66
- const computedCache = {};
67
- return (...argsArray) => {
68
- const serializedArgs = serializeArgs(...argsArray);
69
- if (computedCache.hasOwnProperty(serializedArgs)) {
70
- return computedCache[serializedArgs]?.();
71
- }
72
- const computedSignal = computed(() => {
73
- void signal();
74
- return fn(...argsArray);
75
- });
76
- computedCache[serializedArgs] = computedSignal;
77
- return computedSignal();
78
- };
79
- }
80
- function serializeArgs(...args) {
81
- return JSON.stringify(args);
82
- }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFLaEUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsV0FBNkI7SUFFN0IsTUFBTSxhQUFhLEdBQUcsV0FBNkIsQ0FBQTtJQUVuRCxPQUFPLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtRQUM5QixLQUFLO1lBQ0gsT0FBTyxXQUFXLEVBQUUsQ0FBQTtRQUN0QixDQUFDO1FBQ0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUF3QjtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN6QixDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3BDOzs7ZUFHRztZQUNILElBQ0UsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQzFCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDM0IsQ0FBQztnQkFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFxQixDQUFBO2dCQUNuRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7d0JBQ3RDLEtBQUssRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQzt3QkFDdkMsWUFBWSxFQUFFLElBQUk7d0JBQ2xCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQixDQUFDLENBQUE7b0JBQ0YsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1lBQ0QsbUJBQW1CO1lBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDN0MsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBb0I7WUFDekIsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZDLENBQUM7UUFDRCxPQUFPO1lBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBQ2hELENBQUM7UUFDRCx3QkFBd0I7WUFDdEIsT0FBTztnQkFDTCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQTtRQUNILENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsVUFBVSxDQUFJLE1BQXdCLEVBQUUsRUFBWTtJQUMzRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsS0FBSyxNQUFNLEVBQUUsQ0FBQTtZQUNiLE9BQU8sRUFBRSxFQUFFLENBQUE7UUFDYixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBb0MsRUFBRSxDQUFBO0lBRXpELE9BQU8sQ0FBQyxHQUFHLFNBQWdCLEVBQUUsRUFBRTtRQUM3QixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQTtRQUNsRCxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUE7UUFDMUMsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsS0FBSyxNQUFNLEVBQUUsQ0FBQTtZQUNiLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7UUFFRixhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxDQUFBO1FBRTlDLE9BQU8sY0FBYyxFQUFFLENBQUE7SUFDekIsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEdBQUcsSUFBVztJQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCB0eXBlIFNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IHR5cGUgVGFibGUgfSBmcm9tICdAdGFuc3RhY2svdGFibGUtY29yZSdcblxudHlwZSBUYWJsZVNpZ25hbDxUPiA9IFRhYmxlPFQ+ICYgU2lnbmFsPFRhYmxlPFQ+PlxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGlmeVRhYmxlPFQ+KFxuICB0YWJsZVNpZ25hbDogU2lnbmFsPFRhYmxlPFQ+PlxuKTogVGFibGU8VD4gJiBTaWduYWw8VGFibGU8VD4+IHtcbiAgY29uc3QgaW50ZXJuYWxTdGF0ZSA9IHRhYmxlU2lnbmFsIGFzIFRhYmxlU2lnbmFsPFQ+XG5cbiAgcmV0dXJuIG5ldyBQcm94eShpbnRlcm5hbFN0YXRlLCB7XG4gICAgYXBwbHkoKSB7XG4gICAgICByZXR1cm4gdGFibGVTaWduYWwoKVxuICAgIH0sXG4gICAgZ2V0KHRhcmdldCwgcHJvcGVydHk6IGtleW9mIFRhYmxlPFQ+KTogYW55IHtcbiAgICAgIGlmICh0YXJnZXRbcHJvcGVydHldKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcGVydHldXG4gICAgICB9XG4gICAgICBjb25zdCB0YWJsZSA9IHVudHJhY2tlZCh0YWJsZVNpZ25hbClcbiAgICAgIC8qKlxuICAgICAgICogQXR0ZW1wdCB0byBjb252ZXJ0IGFsbCBhY2Nlc3NvcnMgaW50byBjb21wdXRlZCBvbmVzLFxuICAgICAgICogZXhjbHVkaW5nIGhhbmRsZXJzIGFzIHRoZXkgZG8gbm90IHJldGFpbiBhbnkgcmVhY3RpdmUgdmFsdWVcbiAgICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBwcm9wZXJ0eS5zdGFydHNXaXRoKCdnZXQnKSAmJlxuICAgICAgICAhcHJvcGVydHkuZW5kc1dpdGgoJ0hhbmRsZXInKSAmJlxuICAgICAgICAhcHJvcGVydHkuZW5kc1dpdGgoJ01vZGVsJylcbiAgICAgICkge1xuICAgICAgICBjb25zdCBtYXliZUZuID0gdGFibGVbcHJvcGVydHldIGFzIEZ1bmN0aW9uIHwgbmV2ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHZhbHVlOiB0b0NvbXB1dGVkKHRhYmxlU2lnbmFsLCBtYXliZUZuKSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4gKHRhcmdldFtwcm9wZXJ0eV0gPSB0YWJsZVtwcm9wZXJ0eV0pXG4gICAgfSxcbiAgICBoYXMoXywgcHJvcDoga2V5b2YgVGFibGU8VD4pIHtcbiAgICAgIHJldHVybiAhIXVudHJhY2tlZCh0YWJsZVNpZ25hbClbcHJvcF1cbiAgICB9LFxuICAgIG93bktleXMoKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHVudHJhY2tlZCh0YWJsZVNpZ25hbCkpXG4gICAgfSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cblxuLyoqXG4gKiBIZXJlIHdlJ2xsIGhhbmRsZSBhbGwgdHlwZSBvZiBhY2Nlc3NvcnM6XG4gKiAtIDAgYXJndW1lbnQgLT4gZS5nLiB0YWJsZS5nZXRDYW5OZXh0UGFnZSgpKVxuICogLSAwfjEgYXJndW1lbnRzIC0+IGUuZy4gdGFibGUuZ2V0SXNTb21lUm93c1Bpbm5lZChwb3NpdGlvbj8pXG4gKiAtIDEgcmVxdWlyZWQgYXJndW1lbnQgLT4gZS5nLiB0YWJsZS5nZXRDb2x1bW4oY29sdW1uSWQpXG4gKiAtIDErIGFyZ3VtZW50IC0+IGUuZy4gdGFibGUuZ2V0Um93KGlkLCBzZWFyY2hBbGw/KVxuICpcbiAqIFNpbmNlIHdlIGFyZSBub3QgYWJsZSB0byBkZXRlY3QgYXV0b21hdGljYWxseSB0aGUgYWNjZXNzb3JzIHBhcmFtZXRlcnMsXG4gKiB3ZSdsbCB3cmFwIGFsbCBhY2Nlc3NvcnMgaW50byBhIGNhY2hlZCBmdW5jdGlvbiB3cmFwcGluZyBhIGNvbXB1dGVkXG4gKiB0aGF0IHJldHVybiBpdCdzIHZhbHVlIGJhc2VkIG9uIHRoZSBnaXZlbiBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIHRvQ29tcHV0ZWQ8VD4oc2lnbmFsOiBTaWduYWw8VGFibGU8VD4+LCBmbjogRnVuY3Rpb24pIHtcbiAgY29uc3QgaGFzQXJncyA9IGZuLmxlbmd0aCA+IDBcbiAgaWYgKCFoYXNBcmdzKSB7XG4gICAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHZvaWQgc2lnbmFsKClcbiAgICAgIHJldHVybiBmbigpXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGNvbXB1dGVkQ2FjaGU6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4gPSB7fVxuXG4gIHJldHVybiAoLi4uYXJnc0FycmF5OiBhbnlbXSkgPT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRBcmdzID0gc2VyaWFsaXplQXJncyguLi5hcmdzQXJyYXkpXG4gICAgaWYgKGNvbXB1dGVkQ2FjaGUuaGFzT3duUHJvcGVydHkoc2VyaWFsaXplZEFyZ3MpKSB7XG4gICAgICByZXR1cm4gY29tcHV0ZWRDYWNoZVtzZXJpYWxpemVkQXJnc10/LigpXG4gICAgfVxuICAgIGNvbnN0IGNvbXB1dGVkU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgdm9pZCBzaWduYWwoKVxuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3NBcnJheSlcbiAgICB9KVxuXG4gICAgY29tcHV0ZWRDYWNoZVtzZXJpYWxpemVkQXJnc10gPSBjb21wdXRlZFNpZ25hbFxuXG4gICAgcmV0dXJuIGNvbXB1dGVkU2lnbmFsKClcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVBcmdzKC4uLmFyZ3M6IGFueVtdKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzKVxufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuc3RhY2stYW5ndWxhci10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YW5zdGFjay1hbmd1bGFyLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -1,31 +0,0 @@
1
- import { ComponentRef, EmbeddedViewRef, Injector, TemplateRef, Type, ViewContainerRef, type DoCheck, type OnInit } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export type FlexRenderContent<TProps extends NonNullable<unknown>> = string | number | Type<TProps> | FlexRenderComponent<TProps> | TemplateRef<{
4
- $implicit: TProps;
5
- }> | null | undefined;
6
- export declare class FlexRenderDirective<TProps extends NonNullable<unknown>> implements OnInit, DoCheck {
7
- private readonly viewContainerRef;
8
- private readonly templateRef;
9
- content: number | string | ((props: TProps) => FlexRenderContent<TProps>) | undefined;
10
- props: TProps;
11
- injector: Injector;
12
- constructor(viewContainerRef: ViewContainerRef, templateRef: TemplateRef<any>);
13
- ref?: ComponentRef<unknown> | EmbeddedViewRef<unknown> | null;
14
- ngOnInit(): void;
15
- ngDoCheck(): void;
16
- render(): ComponentRef<unknown> | EmbeddedViewRef<unknown>;
17
- private renderContent;
18
- private renderStringContent;
19
- private renderComponent;
20
- private renderCustomComponent;
21
- private getTemplateRefContext;
22
- static ɵfac: i0.ɵɵFactoryDeclaration<FlexRenderDirective<any>, never>;
23
- static ɵdir: i0.ɵɵDirectiveDeclaration<FlexRenderDirective<any>, "[flexRender]", never, { "content": { "alias": "flexRender"; "required": true; }; "props": { "alias": "flexRenderProps"; "required": true; }; "injector": { "alias": "flexRenderInjector"; "required": false; }; }, {}, never, never, true, never>;
24
- }
25
- export declare class FlexRenderComponent<T extends NonNullable<unknown>> {
26
- readonly component: Type<unknown>;
27
- readonly inputs: T;
28
- readonly injector?: Injector;
29
- constructor(component: Type<unknown>, inputs?: T, injector?: Injector);
30
- }
31
- export declare function injectFlexRenderContext<T extends NonNullable<unknown>>(): T;
package/dist/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import { type Signal } from '@angular/core';
2
- import { RowData, TableOptions, type Table } from '@tanstack/table-core';
3
- export * from '@tanstack/table-core';
4
- export { type FlexRenderContent, FlexRenderComponent, FlexRenderDirective, injectFlexRenderContext, } from './flex-render';
5
- export declare function injectTable<TData extends RowData>(options: () => TableOptions<TData>): Table<TData> & Signal<Table<TData>>;
@@ -1,5 +0,0 @@
1
- /**
2
- * Implementation from @tanstack/angular-query
3
- * {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}
4
- */
5
- export declare function lazyInit<T extends object>(initializer: () => T): T;
package/dist/proxy.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { type Signal } from '@angular/core';
2
- import { type Table } from '@tanstack/table-core';
3
- export declare function proxifyTable<T>(tableSignal: Signal<Table<T>>): Table<T> & Signal<Table<T>>;
@@ -1,187 +0,0 @@
1
- import {
2
- ChangeDetectorRef,
3
- ComponentRef,
4
- Directive,
5
- EmbeddedViewRef,
6
- Inject,
7
- InjectionToken,
8
- Injector,
9
- Input,
10
- TemplateRef,
11
- Type,
12
- ViewContainerRef,
13
- inject,
14
- isSignal,
15
- type DoCheck,
16
- type OnInit,
17
- } from '@angular/core'
18
-
19
- export type FlexRenderContent<TProps extends NonNullable<unknown>> =
20
- | string
21
- | number
22
- | Type<TProps>
23
- | FlexRenderComponent<TProps>
24
- | TemplateRef<{ $implicit: TProps }>
25
- | null
26
- | undefined
27
-
28
- @Directive({
29
- selector: '[flexRender]',
30
- standalone: true,
31
- })
32
- export class FlexRenderDirective<TProps extends NonNullable<unknown>>
33
- implements OnInit, DoCheck
34
- {
35
- @Input({ required: true, alias: 'flexRender' })
36
- content:
37
- | number
38
- | string
39
- | ((props: TProps) => FlexRenderContent<TProps>)
40
- | undefined = undefined
41
-
42
- @Input({ required: true, alias: 'flexRenderProps' })
43
- props: TProps = {} as TProps
44
-
45
- @Input({ required: false, alias: 'flexRenderInjector' })
46
- injector: Injector = inject(Injector)
47
-
48
- constructor(
49
- @Inject(ViewContainerRef)
50
- private readonly viewContainerRef: ViewContainerRef,
51
- @Inject(TemplateRef)
52
- private readonly templateRef: TemplateRef<any>
53
- ) {}
54
-
55
- ref?: ComponentRef<unknown> | EmbeddedViewRef<unknown> | null = null
56
-
57
- ngOnInit(): void {
58
- this.ref = this.render()
59
- }
60
-
61
- ngDoCheck() {
62
- if (this.ref instanceof ComponentRef) {
63
- this.ref.injector.get(ChangeDetectorRef).markForCheck()
64
- } else if (this.ref instanceof EmbeddedViewRef) {
65
- this.ref.markForCheck()
66
- }
67
- }
68
-
69
- render() {
70
- this.viewContainerRef.clear()
71
- const { content, props } = this
72
- if (!this.content) {
73
- return null
74
- }
75
-
76
- if (typeof content === 'string' || typeof content === 'number') {
77
- return this.renderStringContent()
78
- }
79
- if (typeof content === 'function') {
80
- return this.renderContent(content(props))
81
- }
82
- return null
83
- }
84
-
85
- private renderContent(content: FlexRenderContent<TProps>) {
86
- if (typeof content === 'string' || typeof content === 'number') {
87
- return this.renderStringContent()
88
- }
89
- if (content instanceof TemplateRef) {
90
- return this.viewContainerRef.createEmbeddedView(
91
- content,
92
- this.getTemplateRefContext()
93
- )
94
- } else if (content instanceof FlexRenderComponent) {
95
- return this.renderComponent(content)
96
- } else if (content instanceof Type) {
97
- return this.renderCustomComponent(content)
98
- } else {
99
- return null
100
- }
101
- }
102
-
103
- private renderStringContent(): EmbeddedViewRef<unknown> {
104
- const context = () => {
105
- return typeof this.content === 'string' ||
106
- typeof this.content === 'number'
107
- ? this.content
108
- : this.content?.(this.props)
109
- }
110
- return this.viewContainerRef.createEmbeddedView(this.templateRef, {
111
- get $implicit() {
112
- return context()
113
- },
114
- })
115
- }
116
-
117
- private renderComponent(
118
- flexRenderComponent: FlexRenderComponent<TProps>
119
- ): ComponentRef<unknown> {
120
- const { component, inputs, injector } = flexRenderComponent
121
-
122
- const getContext = () => this.props
123
-
124
- const proxy = new Proxy(this.props, {
125
- get: (_, key) => getContext()?.[key as keyof typeof _],
126
- })
127
-
128
- const componentInjector = Injector.create({
129
- parent: injector ?? this.injector,
130
- providers: [{ provide: FlexRenderComponentProps, useValue: proxy }],
131
- })
132
-
133
- const componentRef = this.viewContainerRef.createComponent(component, {
134
- injector: componentInjector,
135
- })
136
- for (const prop in inputs) {
137
- if (componentRef.instance?.hasOwnProperty(prop)) {
138
- componentRef.setInput(prop, inputs[prop])
139
- }
140
- }
141
- return componentRef
142
- }
143
-
144
- private renderCustomComponent(
145
- component: Type<unknown>
146
- ): ComponentRef<unknown> {
147
- const componentRef = this.viewContainerRef.createComponent(component, {
148
- injector: this.injector,
149
- })
150
- for (const prop in this.props) {
151
- // Only signal based input can be added here
152
- if (
153
- componentRef.instance?.hasOwnProperty(prop) &&
154
- // @ts-ignore
155
- isSignal(componentRef.instance[prop])
156
- ) {
157
- componentRef.setInput(prop, this.props[prop])
158
- }
159
- }
160
- return componentRef
161
- }
162
-
163
- private getTemplateRefContext() {
164
- const getContext = () => this.props
165
- return {
166
- get $implicit() {
167
- return getContext()
168
- },
169
- }
170
- }
171
- }
172
-
173
- export class FlexRenderComponent<T extends NonNullable<unknown>> {
174
- constructor(
175
- readonly component: Type<unknown>,
176
- readonly inputs: T = {} as T,
177
- readonly injector?: Injector
178
- ) {}
179
- }
180
-
181
- const FlexRenderComponentProps = new InjectionToken<NonNullable<unknown>>(
182
- '[@tanstack/angular-table] Flex render component context props'
183
- )
184
-
185
- export function injectFlexRenderContext<T extends NonNullable<unknown>>(): T {
186
- return inject<T>(FlexRenderComponentProps)
187
- }