@tanstack/angular-table 8.21.3 → 8.21.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"tanstack-angular-table.mjs","sources":["../../../src/lazy-signal-initializer.ts","../../../src/proxy.ts","../../../src/flex-render/context.ts","../../../src/flex-render/flags.ts","../../../src/flex-render/flex-render-component.ts","../../../src/flex-render/flex-render-component-ref.ts","../../../src/flex-render/view.ts","../../../src/flex-render.ts","../../../src/index.ts","../../../src/tanstack-angular-table.ts"],"sourcesContent":["import { untracked } from '@angular/core'\n\n/**\n * Implementation from @tanstack/angular-query\n * {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}\n */\nexport function lazyInit<T extends object>(initializer: () => T): T {\n let object: T | null = null\n\n const initializeObject = () => {\n if (!object) {\n object = untracked(() => initializer())\n }\n }\n\n queueMicrotask(() => initializeObject())\n\n const table = () => {}\n\n return new Proxy<T>(table as T, {\n apply(target: T, thisArg: any, argArray: any[]): any {\n initializeObject()\n if (typeof object === 'function') {\n return Reflect.apply(object, thisArg, argArray)\n }\n return Reflect.apply(target as any, thisArg, argArray)\n },\n get(_, prop, receiver) {\n initializeObject()\n return Reflect.get(object as T, prop, receiver)\n },\n has(_, prop) {\n initializeObject()\n return Reflect.has(object as T, prop)\n },\n ownKeys() {\n initializeObject()\n return Reflect.ownKeys(object as T)\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n })\n}\n","import { computed, type Signal, untracked } from '@angular/core'\nimport { type Table } from '@tanstack/table-core'\n\ntype TableSignal<T> = Table<T> & Signal<Table<T>>\n\nexport function proxifyTable<T>(\n tableSignal: Signal<Table<T>>\n): Table<T> & Signal<Table<T>> {\n const internalState = tableSignal as TableSignal<T>\n\n return new Proxy(internalState, {\n apply() {\n return tableSignal()\n },\n get(target, property: keyof Table<T>): any {\n if (target[property]) {\n return target[property]\n }\n const table = untracked(tableSignal)\n /**\n * Attempt to convert all accessors into computed ones,\n * excluding handlers as they do not retain any reactive value\n */\n if (\n property.startsWith('get') &&\n !property.endsWith('Handler')\n // e.g. getCoreRowModel, getSelectedRowModel etc.\n // We need that after a signal change even `rowModel` may mark the view as dirty.\n // This allows to always get the latest `getContext` value while using flexRender\n // && !property.endsWith('Model')\n ) {\n const maybeFn = table[property] as Function | never\n if (typeof maybeFn === 'function') {\n Object.defineProperty(target, property, {\n value: toComputed(tableSignal, maybeFn),\n configurable: true,\n enumerable: true,\n })\n return target[property]\n }\n }\n // @ts-expect-error\n return (target[property] = table[property])\n },\n has(_, prop: keyof Table<T>) {\n return !!untracked(tableSignal)[prop]\n },\n ownKeys() {\n return Reflect.ownKeys(untracked(tableSignal))\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n })\n}\n\n/**\n * Here we'll handle all type of accessors:\n * - 0 argument -> e.g. table.getCanNextPage())\n * - 0~1 arguments -> e.g. table.getIsSomeRowsPinned(position?)\n * - 1 required argument -> e.g. table.getColumn(columnId)\n * - 1+ argument -> e.g. table.getRow(id, searchAll?)\n *\n * Since we are not able to detect automatically the accessors parameters,\n * we'll wrap all accessors into a cached function wrapping a computed\n * that return it's value based on the given parameters\n */\nfunction toComputed<T>(signal: Signal<Table<T>>, fn: Function) {\n const hasArgs = fn.length > 0\n if (!hasArgs) {\n return computed(() => {\n void signal()\n return fn()\n })\n }\n\n const computedCache: Record<string, Signal<unknown>> = {}\n\n return (...argsArray: any[]) => {\n const serializedArgs = serializeArgs(...argsArray)\n if (computedCache.hasOwnProperty(serializedArgs)) {\n return computedCache[serializedArgs]?.()\n }\n const computedSignal = computed(() => {\n void signal()\n return fn(...argsArray)\n })\n\n computedCache[serializedArgs] = computedSignal\n\n return computedSignal()\n }\n}\n\nfunction serializeArgs(...args: any[]) {\n return JSON.stringify(args)\n}\n","import { inject, InjectionToken } from '@angular/core'\n\nexport const FlexRenderComponentProps = new InjectionToken<\n NonNullable<unknown>\n>('[@tanstack/angular-table] Flex render component context props')\n\nexport function injectFlexRenderContext<T extends NonNullable<unknown>>(): T {\n return inject<T>(FlexRenderComponentProps)\n}\n","/**\n * Flags used to manage and optimize the rendering lifecycle of content of the cell,\n * while using FlexRenderDirective.\n */\nexport enum FlexRenderFlags {\n /**\n * Indicates that the view is being created for the first time or will be cleared during the next update phase.\n * This is the initial state and will transition after the first ngDoCheck.\n */\n ViewFirstRender = 1 << 0,\n /**\n * Represents a state where the view is not dirty, meaning no changes require rendering updates.\n */\n Pristine = 1 << 1,\n /**\n * Indicates the `content` property has been modified or the view requires a complete re-render.\n * When this flag is enabled, the view will be cleared and recreated from scratch.\n */\n ContentChanged = 1 << 2,\n /**\n * Indicates that the `props` property reference has changed.\n * When this flag is enabled, the view context is updated based on the type of the content.\n *\n * For Component view, inputs will be updated and view will be marked as dirty.\n * For TemplateRef and primitive values, view will be marked as dirty\n */\n PropsReferenceChanged = 1 << 3,\n /**\n * Indicates that the current rendered view needs to be checked for changes.\n */\n DirtyCheck = 1 << 4,\n /**\n * Indicates that a signal within the `content(props)` result has changed\n */\n DirtySignal = 1 << 5,\n /**\n * Indicates that the first render effect has been checked at least one time.\n */\n RenderEffectChecked = 1 << 6,\n}\n","import {\n ComponentMirror,\n Injector,\n InputSignal,\n OutputEmitterRef,\n reflectComponentType,\n Type,\n} from '@angular/core'\n\ntype Inputs<T> = {\n [K in keyof T as T[K] extends InputSignal<infer R>\n ? K\n : never]?: T[K] extends InputSignal<infer R> ? R : never\n}\n\ntype Outputs<T> = {\n [K in keyof T as T[K] extends OutputEmitterRef<infer R>\n ? K\n : never]?: T[K] extends OutputEmitterRef<infer R>\n ? OutputEmitterRef<R>['emit']\n : never\n}\n\ntype OptionalKeys<T, K = keyof T> = K extends keyof T\n ? T[K] extends Required<T>[K]\n ? undefined extends T[K]\n ? K\n : never\n : K\n : never\n\ninterface FlexRenderRequiredOptions<\n TInputs extends Record<string, any>,\n TOutputs extends Record<string, any>,\n> {\n /**\n * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)\n */\n inputs: TInputs\n /**\n * Component instance outputs.\n */\n outputs?: TOutputs\n /**\n * Optional {@link Injector} that will be used when rendering the component\n */\n injector?: Injector\n}\n\ninterface FlexRenderOptions<\n TInputs extends Record<string, any>,\n TOutputs extends Record<string, any>,\n> {\n /**\n * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)\n */\n inputs?: TInputs\n /**\n * Component instance outputs.\n */\n outputs?: TOutputs\n /**\n * Optional {@link Injector} that will be used when rendering the component\n */\n injector?: Injector\n}\n\n/**\n * Helper function to create a [@link FlexRenderComponent] instance, with better type-safety.\n *\n * - options object must be passed when the given component instance contains at least one required signal input.\n * - options/inputs is typed with the given component inputs\n * - options/outputs is typed with the given component outputs\n */\nexport function flexRenderComponent<\n TComponent = any,\n TInputs extends Inputs<TComponent> = Inputs<TComponent>,\n TOutputs extends Outputs<TComponent> = Outputs<TComponent>,\n>(\n component: Type<TComponent>,\n ...options: OptionalKeys<TInputs> extends never\n ? [FlexRenderOptions<TInputs, TOutputs>?]\n : [FlexRenderRequiredOptions<TInputs, TOutputs>]\n) {\n const { inputs, injector, outputs } = options?.[0] ?? {}\n return new FlexRenderComponent(component, inputs, injector, outputs)\n}\n\n/**\n * Wrapper class for a component that will be used as content for {@link FlexRenderDirective}\n *\n * Prefer {@link flexRenderComponent} helper for better type-safety\n */\nexport class FlexRenderComponent<TComponent = any> {\n readonly mirror: ComponentMirror<TComponent>\n readonly allowedInputNames: string[] = []\n readonly allowedOutputNames: string[] = []\n\n constructor(\n readonly component: Type<TComponent>,\n readonly inputs?: Inputs<TComponent>,\n readonly injector?: Injector,\n readonly outputs?: Outputs<TComponent>\n ) {\n const mirror = reflectComponentType(component)\n if (!mirror) {\n throw new Error(\n `[@tanstack-table/angular] The provided symbol is not a component`\n )\n }\n this.mirror = mirror\n for (const input of this.mirror.inputs) {\n this.allowedInputNames.push(input.propName)\n }\n for (const output of this.mirror.outputs) {\n this.allowedOutputNames.push(output.propName)\n }\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentRef,\n inject,\n Injectable,\n Injector,\n KeyValueDiffer,\n KeyValueDiffers,\n OutputEmitterRef,\n OutputRefSubscription,\n ViewContainerRef,\n} from '@angular/core'\nimport { FlexRenderComponent } from './flex-render-component'\n\n@Injectable()\nexport class FlexRenderComponentFactory {\n #viewContainerRef = inject(ViewContainerRef)\n\n createComponent<T>(\n flexRenderComponent: FlexRenderComponent<T>,\n componentInjector: Injector\n ): FlexRenderComponentRef<T> {\n const componentRef = this.#viewContainerRef.createComponent(\n flexRenderComponent.component,\n {\n injector: componentInjector,\n }\n )\n const view = new FlexRenderComponentRef(\n componentRef,\n flexRenderComponent,\n componentInjector\n )\n\n const { inputs, outputs } = flexRenderComponent\n\n if (inputs) view.setInputs(inputs)\n if (outputs) view.setOutputs(outputs)\n\n return view\n }\n}\n\nexport class FlexRenderComponentRef<T> {\n readonly #keyValueDiffersFactory: KeyValueDiffers\n #componentData: FlexRenderComponent<T>\n #inputValueDiffer: KeyValueDiffer<string, unknown>\n\n readonly #outputRegistry: FlexRenderComponentOutputManager\n\n constructor(\n readonly componentRef: ComponentRef<T>,\n componentData: FlexRenderComponent<T>,\n readonly componentInjector: Injector\n ) {\n this.#componentData = componentData\n this.#keyValueDiffersFactory = componentInjector.get(KeyValueDiffers)\n\n this.#outputRegistry = new FlexRenderComponentOutputManager(\n this.#keyValueDiffersFactory,\n this.outputs\n )\n\n this.#inputValueDiffer = this.#keyValueDiffersFactory\n .find(this.inputs)\n .create()\n this.#inputValueDiffer.diff(this.inputs)\n\n this.componentRef.onDestroy(() => this.#outputRegistry.unsubscribeAll())\n }\n\n get component() {\n return this.#componentData.component\n }\n\n get inputs() {\n return this.#componentData.inputs ?? {}\n }\n\n get outputs() {\n return this.#componentData.outputs ?? {}\n }\n\n /**\n * Get component input and output diff by the given item\n */\n diff(item: FlexRenderComponent<T>) {\n return {\n inputDiff: this.#inputValueDiffer.diff(item.inputs ?? {}),\n outputDiff: this.#outputRegistry.diff(item.outputs ?? {}),\n }\n }\n /**\n *\n * @param compare Whether the current ref component instance is the same as the given one\n */\n eqType(compare: FlexRenderComponent<T>): boolean {\n return compare.component === this.component\n }\n\n /**\n * Tries to update current component refs input by the new given content component.\n */\n update(content: FlexRenderComponent<T>) {\n const eq = this.eqType(content)\n if (!eq) return\n const { inputDiff, outputDiff } = this.diff(content)\n if (inputDiff) {\n inputDiff.forEachAddedItem(item =>\n this.setInput(item.key, item.currentValue)\n )\n inputDiff.forEachChangedItem(item =>\n this.setInput(item.key, item.currentValue)\n )\n inputDiff.forEachRemovedItem(item => this.setInput(item.key, undefined))\n }\n if (outputDiff) {\n outputDiff.forEachAddedItem(item => {\n this.setOutput(item.key, item.currentValue)\n })\n outputDiff.forEachChangedItem(item => {\n if (item.currentValue) {\n this.#outputRegistry.setListener(item.key, item.currentValue)\n } else {\n this.#outputRegistry.unsubscribe(item.key)\n }\n })\n outputDiff.forEachRemovedItem(item => {\n this.#outputRegistry.unsubscribe(item.key)\n })\n }\n\n this.#componentData = content\n }\n\n markAsDirty(): void {\n this.componentRef.injector.get(ChangeDetectorRef).markForCheck()\n }\n\n setInputs(inputs: Record<string, unknown>) {\n for (const prop in inputs) {\n this.setInput(prop, inputs[prop])\n }\n }\n\n setInput(key: string, value: unknown) {\n if (this.#componentData.allowedInputNames.includes(key)) {\n this.componentRef.setInput(key, value)\n }\n }\n\n setOutputs(\n outputs: Record<\n string,\n OutputEmitterRef<unknown>['emit'] | null | undefined\n >\n ) {\n this.#outputRegistry.unsubscribeAll()\n for (const prop in outputs) {\n this.setOutput(prop, outputs[prop])\n }\n }\n\n setOutput(\n outputName: string,\n emit: OutputEmitterRef<unknown>['emit'] | undefined | null\n ): void {\n if (!this.#componentData.allowedOutputNames.includes(outputName)) return\n if (!emit) {\n this.#outputRegistry.unsubscribe(outputName)\n return\n }\n\n const hasListener = this.#outputRegistry.hasListener(outputName)\n this.#outputRegistry.setListener(outputName, emit)\n\n if (hasListener) {\n return\n }\n\n const instance = this.componentRef.instance\n const output = instance[outputName as keyof typeof instance]\n if (output && output instanceof OutputEmitterRef) {\n output.subscribe(value => {\n this.#outputRegistry.getListener(outputName)?.(value)\n })\n }\n }\n}\n\nclass FlexRenderComponentOutputManager {\n readonly #outputSubscribers: Record<string, OutputRefSubscription> = {}\n readonly #outputListeners: Record<string, (...args: any[]) => void> = {}\n\n readonly #valueDiffer: KeyValueDiffer<\n string,\n undefined | null | OutputEmitterRef<unknown>['emit']\n >\n\n constructor(keyValueDiffers: KeyValueDiffers, initialOutputs: any) {\n this.#valueDiffer = keyValueDiffers.find(initialOutputs).create()\n if (initialOutputs) {\n this.#valueDiffer.diff(initialOutputs)\n }\n }\n\n hasListener(outputName: string) {\n return outputName in this.#outputListeners\n }\n\n setListener(outputName: string, callback: (...args: any[]) => void) {\n this.#outputListeners[outputName] = callback\n }\n\n getListener(outputName: string) {\n return this.#outputListeners[outputName]\n }\n\n unsubscribeAll(): void {\n for (const prop in this.#outputSubscribers) {\n this.unsubscribe(prop)\n }\n }\n\n unsubscribe(outputName: string) {\n if (outputName in this.#outputSubscribers) {\n this.#outputSubscribers[outputName]?.unsubscribe()\n delete this.#outputSubscribers[outputName]\n delete this.#outputListeners[outputName]\n }\n }\n\n diff(outputs: Record<string, OutputEmitterRef<unknown>['emit'] | undefined>) {\n return this.#valueDiffer.diff(outputs ?? {})\n }\n}\n","import { FlexRenderComponentRef } from './flex-render-component-ref'\nimport { EmbeddedViewRef, TemplateRef, Type } from '@angular/core'\nimport type { FlexRenderContent } from '../flex-render'\nimport { FlexRenderComponent } from './flex-render-component'\n\nexport type FlexRenderTypedContent =\n | { kind: 'null' }\n | {\n kind: 'primitive'\n content: string | number | Record<string, any>\n }\n | { kind: 'flexRenderComponent'; content: FlexRenderComponent<unknown> }\n | { kind: 'templateRef'; content: TemplateRef<unknown> }\n | { kind: 'component'; content: Type<unknown> }\n\nexport function mapToFlexRenderTypedContent(\n content: FlexRenderContent<any>\n): FlexRenderTypedContent {\n if (content === null || content === undefined) {\n return { kind: 'null' }\n }\n if (typeof content === 'string' || typeof content === 'number') {\n return { kind: 'primitive', content }\n }\n if (content instanceof FlexRenderComponent) {\n return { kind: 'flexRenderComponent', content }\n } else if (content instanceof TemplateRef) {\n return { kind: 'templateRef', content }\n } else if (content instanceof Type) {\n return { kind: 'component', content }\n } else {\n return { kind: 'primitive', content }\n }\n}\n\nexport abstract class FlexRenderView<\n TView extends FlexRenderComponentRef<any> | EmbeddedViewRef<unknown> | null,\n> {\n readonly view: TView\n #previousContent: FlexRenderTypedContent | undefined\n #content: FlexRenderTypedContent\n\n protected constructor(\n initialContent: Exclude<FlexRenderTypedContent, { kind: 'null' }>,\n view: TView\n ) {\n this.#content = initialContent\n this.view = view\n }\n\n get previousContent(): FlexRenderTypedContent {\n return this.#previousContent ?? { kind: 'null' }\n }\n\n get content() {\n return this.#content\n }\n\n set content(content: FlexRenderTypedContent) {\n this.#previousContent = this.#content\n this.#content = content\n }\n\n abstract updateProps(props: Record<string, any>): void\n\n abstract dirtyCheck(): void\n\n abstract onDestroy(callback: Function): void\n}\n\nexport class FlexRenderTemplateView extends FlexRenderView<\n EmbeddedViewRef<unknown>\n> {\n constructor(\n initialContent: Extract<\n FlexRenderTypedContent,\n { kind: 'primitive' | 'templateRef' }\n >,\n view: EmbeddedViewRef<unknown>\n ) {\n super(initialContent, view)\n }\n\n override updateProps(props: Record<string, any>) {\n this.view.markForCheck()\n }\n\n override dirtyCheck() {\n // Basically a no-op. When the view is created via EmbeddedViewRef, we don't need to do any manual update\n // since this type of content has a proxy as a context, then every time the root component is checked for changes,\n // the property getter will be re-evaluated.\n //\n // If in a future we need to manually mark the view as dirty, just uncomment next line\n // this.view.markForCheck()\n }\n\n override onDestroy(callback: Function) {\n this.view.onDestroy(callback)\n }\n}\n\nexport class FlexRenderComponentView extends FlexRenderView<\n FlexRenderComponentRef<unknown>\n> {\n constructor(\n initialContent: Extract<\n FlexRenderTypedContent,\n { kind: 'component' | 'flexRenderComponent' }\n >,\n view: FlexRenderComponentRef<unknown>\n ) {\n super(initialContent, view)\n }\n\n override updateProps(props: Record<string, any>) {\n switch (this.content.kind) {\n case 'component': {\n this.view.setInputs(props)\n break\n }\n case 'flexRenderComponent': {\n // No-op. When FlexRenderFlags.PropsReferenceChanged is set,\n // FlexRenderComponent will be updated into `dirtyCheck`.\n break\n }\n }\n }\n\n override dirtyCheck() {\n switch (this.content.kind) {\n case 'component': {\n // Component context is currently valuated with the cell context. Since it's reference\n // shouldn't change, we force mark the component as dirty in order to re-evaluate function invocation in view.\n // NOTE: this should behave like having a component with ChangeDetectionStrategy.Default\n this.view.markAsDirty()\n break\n }\n case 'flexRenderComponent': {\n // Given context instance will always have a different reference than the previous one,\n // so instead of recreating the entire view, we will only update the current view\n if (this.view.eqType(this.content.content)) {\n this.view.update(this.content.content)\n }\n this.view.markAsDirty()\n break\n }\n }\n }\n\n override onDestroy(callback: Function) {\n this.view.componentRef.onDestroy(callback)\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n DoCheck,\n effect,\n type EffectRef,\n Inject,\n inject,\n Injector,\n Input,\n OnChanges,\n runInInjectionContext,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core'\nimport { FlexRenderComponentProps } from './flex-render/context'\nimport { FlexRenderFlags } from './flex-render/flags'\nimport {\n flexRenderComponent,\n FlexRenderComponent,\n} from './flex-render/flex-render-component'\nimport { FlexRenderComponentFactory } from './flex-render/flex-render-component-ref'\nimport {\n FlexRenderComponentView,\n FlexRenderTemplateView,\n type FlexRenderTypedContent,\n FlexRenderView,\n mapToFlexRenderTypedContent,\n} from './flex-render/view'\nimport { memo } from '@tanstack/table-core'\n\nexport {\n injectFlexRenderContext,\n type FlexRenderComponentProps,\n} from './flex-render/context'\n\nexport type FlexRenderContent<TProps extends NonNullable<unknown>> =\n | string\n | number\n | Type<TProps>\n | FlexRenderComponent<TProps>\n | TemplateRef<{ $implicit: TProps }>\n | null\n | Record<any, any>\n | undefined\n\n@Directive({\n selector: '[flexRender]',\n standalone: true,\n providers: [FlexRenderComponentFactory],\n})\nexport class FlexRenderDirective<TProps extends NonNullable<unknown>>\n implements OnChanges, DoCheck\n{\n readonly #flexRenderComponentFactory = inject(FlexRenderComponentFactory)\n readonly #changeDetectorRef = inject(ChangeDetectorRef)\n\n @Input({ required: true, alias: 'flexRender' })\n content:\n | number\n | string\n | ((props: TProps) => FlexRenderContent<TProps>)\n | null\n | undefined = undefined\n\n @Input({ required: true, alias: 'flexRenderProps' })\n props: TProps = {} as TProps\n\n @Input({ required: false, alias: 'flexRenderInjector' })\n injector: Injector = inject(Injector)\n\n renderFlags = FlexRenderFlags.ViewFirstRender\n renderView: FlexRenderView<any> | null = null\n\n readonly #latestContent = () => {\n const { content, props } = this\n return typeof content !== 'function'\n ? content\n : runInInjectionContext(this.injector, () => content(props))\n }\n\n #getContentValue = memo(\n () => [this.#latestContent(), this.props, this.content],\n latestContent => {\n return mapToFlexRenderTypedContent(latestContent)\n },\n { key: 'flexRenderContentValue', debug: () => false }\n )\n\n constructor(\n @Inject(ViewContainerRef)\n private readonly viewContainerRef: ViewContainerRef,\n @Inject(TemplateRef)\n private readonly templateRef: TemplateRef<any>\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['props']) {\n this.renderFlags |= FlexRenderFlags.PropsReferenceChanged\n }\n if (changes['content']) {\n this.renderFlags |=\n FlexRenderFlags.ContentChanged | FlexRenderFlags.ViewFirstRender\n this.update()\n }\n }\n\n ngDoCheck(): void {\n if (this.renderFlags & FlexRenderFlags.ViewFirstRender) {\n // On the initial render, the view is created during the `ngOnChanges` hook.\n // Since `ngDoCheck` is called immediately afterward, there's no need to check for changes in this phase.\n this.renderFlags &= ~FlexRenderFlags.ViewFirstRender\n return\n }\n\n this.renderFlags |= FlexRenderFlags.DirtyCheck\n\n const latestContent = this.#getContentValue()\n if (latestContent.kind === 'null' || !this.renderView) {\n this.renderFlags |= FlexRenderFlags.ContentChanged\n } else {\n this.renderView.content = latestContent\n const { kind: previousKind } = this.renderView.previousContent\n if (latestContent.kind !== previousKind) {\n this.renderFlags |= FlexRenderFlags.ContentChanged\n }\n }\n this.update()\n }\n\n update() {\n if (\n this.renderFlags &\n (FlexRenderFlags.ContentChanged | FlexRenderFlags.ViewFirstRender)\n ) {\n this.render()\n return\n }\n if (this.renderFlags & FlexRenderFlags.PropsReferenceChanged) {\n if (this.renderView) this.renderView.updateProps(this.props)\n this.renderFlags &= ~FlexRenderFlags.PropsReferenceChanged\n }\n if (\n this.renderFlags &\n (FlexRenderFlags.DirtyCheck | FlexRenderFlags.DirtySignal)\n ) {\n if (this.renderView) this.renderView.dirtyCheck()\n this.renderFlags &= ~(\n FlexRenderFlags.DirtyCheck | FlexRenderFlags.DirtySignal\n )\n }\n }\n\n #currentEffectRef: EffectRef | null = null\n\n render() {\n if (this.#shouldRecreateEntireView() && this.#currentEffectRef) {\n this.#currentEffectRef.destroy()\n this.#currentEffectRef = null\n this.renderFlags &= ~FlexRenderFlags.RenderEffectChecked\n }\n\n this.viewContainerRef.clear()\n this.renderFlags =\n FlexRenderFlags.Pristine |\n (this.renderFlags & FlexRenderFlags.ViewFirstRender) |\n (this.renderFlags & FlexRenderFlags.RenderEffectChecked)\n\n const resolvedContent = this.#getContentValue()\n if (resolvedContent.kind === 'null') {\n this.renderView = null\n } else {\n this.renderView = this.#renderViewByContent(resolvedContent)\n }\n\n // If the content is a function `content(props)`, we initialize an effect\n // in order to react to changes if the given definition use signals.\n if (!this.#currentEffectRef && typeof this.content === 'function') {\n this.#currentEffectRef = effect(\n () => {\n this.#latestContent()\n if (!(this.renderFlags & FlexRenderFlags.RenderEffectChecked)) {\n this.renderFlags |= FlexRenderFlags.RenderEffectChecked\n return\n }\n this.renderFlags |= FlexRenderFlags.DirtySignal\n // This will mark the view as changed,\n // so we'll try to check for updates into ngDoCheck\n this.#changeDetectorRef.markForCheck()\n },\n { injector: this.viewContainerRef.injector }\n )\n }\n }\n\n #shouldRecreateEntireView() {\n return (\n this.renderFlags &\n FlexRenderFlags.ContentChanged &\n FlexRenderFlags.ViewFirstRender\n )\n }\n\n #renderViewByContent(\n content: FlexRenderTypedContent\n ): FlexRenderView<any> | null {\n if (content.kind === 'primitive') {\n return this.#renderStringContent(content)\n } else if (content.kind === 'templateRef') {\n return this.#renderTemplateRefContent(content)\n } else if (content.kind === 'flexRenderComponent') {\n return this.#renderComponent(content)\n } else if (content.kind === 'component') {\n return this.#renderCustomComponent(content)\n } else {\n return null\n }\n }\n\n #renderStringContent(\n template: Extract<FlexRenderTypedContent, { kind: 'primitive' }>\n ): FlexRenderTemplateView {\n const context = () => {\n return typeof this.content === 'string' ||\n typeof this.content === 'number'\n ? this.content\n : this.content?.(this.props)\n }\n const ref = this.viewContainerRef.createEmbeddedView(this.templateRef, {\n get $implicit() {\n return context()\n },\n })\n return new FlexRenderTemplateView(template, ref)\n }\n\n #renderTemplateRefContent(\n template: Extract<FlexRenderTypedContent, { kind: 'templateRef' }>\n ): FlexRenderTemplateView {\n const latestContext = () => this.props\n const view = this.viewContainerRef.createEmbeddedView(template.content, {\n get $implicit() {\n return latestContext()\n },\n })\n return new FlexRenderTemplateView(template, view)\n }\n\n #renderComponent(\n flexRenderComponent: Extract<\n FlexRenderTypedContent,\n { kind: 'flexRenderComponent' }\n >\n ): FlexRenderComponentView {\n const { inputs, outputs, injector } = flexRenderComponent.content\n\n const getContext = () => this.props\n const proxy = new Proxy(this.props, {\n get: (_, key) => getContext()[key as keyof typeof _],\n })\n const componentInjector = Injector.create({\n parent: injector ?? this.injector,\n providers: [{ provide: FlexRenderComponentProps, useValue: proxy }],\n })\n const view = this.#flexRenderComponentFactory.createComponent(\n flexRenderComponent.content,\n componentInjector\n )\n return new FlexRenderComponentView(flexRenderComponent, view)\n }\n\n #renderCustomComponent(\n component: Extract<FlexRenderTypedContent, { kind: 'component' }>\n ): FlexRenderComponentView {\n const view = this.#flexRenderComponentFactory.createComponent(\n flexRenderComponent(component.content, {\n inputs: this.props,\n injector: this.injector,\n }),\n this.injector\n )\n return new FlexRenderComponentView(component, view)\n }\n}\n","import { computed, type Signal, signal } from '@angular/core'\nimport {\n RowData,\n TableOptions,\n TableOptionsResolved,\n TableState,\n createTable,\n type Table,\n} from '@tanstack/table-core'\nimport { lazyInit } from './lazy-signal-initializer'\nimport { proxifyTable } from './proxy'\n\nexport * from '@tanstack/table-core'\n\nexport {\n type FlexRenderContent,\n FlexRenderDirective,\n FlexRenderDirective as FlexRender,\n injectFlexRenderContext,\n type FlexRenderComponentProps,\n} from './flex-render'\n\nexport {\n FlexRenderComponent,\n flexRenderComponent,\n} from './flex-render/flex-render-component'\n\nexport function createAngularTable<TData extends RowData>(\n options: () => TableOptions<TData>\n): Table<TData> & Signal<Table<TData>> {\n return lazyInit(() => {\n const resolvedOptions = {\n state: {},\n onStateChange: () => {},\n renderFallbackValue: null,\n ...options(),\n }\n\n const table = createTable(resolvedOptions)\n\n // By default, manage table state here using the table's initial state\n const state = signal<TableState>(table.initialState)\n\n // Compose table options using computed.\n // This is to allow `tableSignal` to listen and set table option\n const updatedOptions = computed<TableOptionsResolved<TData>>(() => {\n // listen to table state changed\n const tableState = state()\n // listen to input options changed\n const tableOptions = options()\n return {\n ...table.options,\n ...resolvedOptions,\n ...tableOptions,\n state: { ...tableState, ...tableOptions.state },\n onStateChange: updater => {\n const value =\n updater instanceof Function ? updater(tableState) : updater\n state.set(value)\n resolvedOptions.onStateChange?.(updater)\n },\n }\n })\n\n // convert table instance to signal for proxify to listen to any table state and options changes\n const tableSignal = computed(\n () => {\n table.setOptions(updatedOptions())\n return table\n },\n {\n equal: () => false,\n }\n )\n\n // proxify Table instance to provide ability for consumer to listen to any table state changes\n return proxifyTable(tableSignal)\n })\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tanstack-angular-table.mjs","sources":["../../../src/lazy-signal-initializer.ts","../../../src/proxy.ts","../../../src/flex-render/context.ts","../../../src/flex-render/flags.ts","../../../src/flex-render/flex-render-component.ts","../../../src/flex-render/flex-render-component-ref.ts","../../../src/flex-render/view.ts","../../../src/flex-render.ts","../../../src/index.ts","../../../src/tanstack-angular-table.ts"],"sourcesContent":["import { untracked } from '@angular/core'\n\n/**\n * Implementation from @tanstack/angular-query\n * {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}\n */\nexport function lazyInit<T extends object>(initializer: () => T): T {\n let object: T | null = null\n\n const initializeObject = () => {\n if (!object) {\n object = untracked(() => initializer())\n }\n }\n\n queueMicrotask(() => initializeObject())\n\n const table = () => {}\n\n return new Proxy<T>(table as T, {\n apply(target: T, thisArg: any, argArray: any[]): any {\n initializeObject()\n if (typeof object === 'function') {\n return Reflect.apply(object, thisArg, argArray)\n }\n return Reflect.apply(target as any, thisArg, argArray)\n },\n get(_, prop, receiver) {\n initializeObject()\n return Reflect.get(object as T, prop, receiver)\n },\n has(_, prop) {\n initializeObject()\n return Reflect.has(object as T, prop)\n },\n ownKeys() {\n initializeObject()\n return Reflect.ownKeys(object as T)\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n })\n}\n","import { computed, type Signal, untracked } from '@angular/core'\nimport { type Table } from '@tanstack/table-core'\n\ntype TableSignal<T> = Table<T> & Signal<Table<T>>\n\nexport function proxifyTable<T>(\n tableSignal: Signal<Table<T>>,\n): Table<T> & Signal<Table<T>> {\n const internalState = tableSignal as TableSignal<T>\n\n return new Proxy(internalState, {\n apply() {\n return tableSignal()\n },\n get(target, property: keyof Table<T>): any {\n if (target[property]) {\n return target[property]\n }\n const table = untracked(tableSignal)\n /**\n * Attempt to convert all accessors into computed ones,\n * excluding handlers as they do not retain any reactive value\n */\n if (\n property.startsWith('get') &&\n !property.endsWith('Handler')\n // e.g. getCoreRowModel, getSelectedRowModel etc.\n // We need that after a signal change even `rowModel` may mark the view as dirty.\n // This allows to always get the latest `getContext` value while using flexRender\n // && !property.endsWith('Model')\n ) {\n const maybeFn = table[property] as Function | never\n if (typeof maybeFn === 'function') {\n Object.defineProperty(target, property, {\n value: toComputed(tableSignal, maybeFn),\n configurable: true,\n enumerable: true,\n })\n return target[property]\n }\n }\n // @ts-expect-error\n return (target[property] = table[property])\n },\n has(_, prop: keyof Table<T>) {\n return !!untracked(tableSignal)[prop]\n },\n ownKeys() {\n return Reflect.ownKeys(untracked(tableSignal))\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n })\n}\n\n/**\n * Here we'll handle all type of accessors:\n * - 0 argument -> e.g. table.getCanNextPage())\n * - 0~1 arguments -> e.g. table.getIsSomeRowsPinned(position?)\n * - 1 required argument -> e.g. table.getColumn(columnId)\n * - 1+ argument -> e.g. table.getRow(id, searchAll?)\n *\n * Since we are not able to detect automatically the accessors parameters,\n * we'll wrap all accessors into a cached function wrapping a computed\n * that return it's value based on the given parameters\n */\nfunction toComputed<T>(signal: Signal<Table<T>>, fn: Function) {\n const hasArgs = fn.length > 0\n if (!hasArgs) {\n return computed(() => {\n void signal()\n return fn()\n })\n }\n\n const computedCache: Record<string, Signal<unknown>> = {}\n\n return (...argsArray: any[]) => {\n const serializedArgs = serializeArgs(...argsArray)\n if (computedCache.hasOwnProperty(serializedArgs)) {\n return computedCache[serializedArgs]?.()\n }\n const computedSignal = computed(() => {\n void signal()\n return fn(...argsArray)\n })\n\n computedCache[serializedArgs] = computedSignal\n\n return computedSignal()\n }\n}\n\nfunction serializeArgs(...args: any[]) {\n return JSON.stringify(args)\n}\n","import { inject, InjectionToken } from '@angular/core'\n\nexport const FlexRenderComponentProps = new InjectionToken<\n NonNullable<unknown>\n>('[@tanstack/angular-table] Flex render component context props')\n\nexport function injectFlexRenderContext<T extends NonNullable<unknown>>(): T {\n return inject<T>(FlexRenderComponentProps)\n}\n","/**\n * Flags used to manage and optimize the rendering lifecycle of content of the cell,\n * while using FlexRenderDirective.\n */\nexport enum FlexRenderFlags {\n /**\n * Indicates that the view is being created for the first time or will be cleared during the next update phase.\n * This is the initial state and will transition after the first ngDoCheck.\n */\n ViewFirstRender = 1 << 0,\n /**\n * Represents a state where the view is not dirty, meaning no changes require rendering updates.\n */\n Pristine = 1 << 1,\n /**\n * Indicates the `content` property has been modified or the view requires a complete re-render.\n * When this flag is enabled, the view will be cleared and recreated from scratch.\n */\n ContentChanged = 1 << 2,\n /**\n * Indicates that the `props` property reference has changed.\n * When this flag is enabled, the view context is updated based on the type of the content.\n *\n * For Component view, inputs will be updated and view will be marked as dirty.\n * For TemplateRef and primitive values, view will be marked as dirty\n */\n PropsReferenceChanged = 1 << 3,\n /**\n * Indicates that the current rendered view needs to be checked for changes.\n */\n DirtyCheck = 1 << 4,\n /**\n * Indicates that a signal within the `content(props)` result has changed\n */\n DirtySignal = 1 << 5,\n /**\n * Indicates that the first render effect has been checked at least one time.\n */\n RenderEffectChecked = 1 << 6,\n}\n","import {\n ComponentMirror,\n Injector,\n InputSignal,\n OutputEmitterRef,\n reflectComponentType,\n Type,\n} from '@angular/core'\n\ntype Inputs<T> = {\n [K in keyof T as T[K] extends InputSignal<infer R>\n ? K\n : never]?: T[K] extends InputSignal<infer R> ? R : never\n}\n\ntype Outputs<T> = {\n [K in keyof T as T[K] extends OutputEmitterRef<infer R>\n ? K\n : never]?: T[K] extends OutputEmitterRef<infer R>\n ? OutputEmitterRef<R>['emit']\n : never\n}\n\ntype OptionalKeys<T, K = keyof T> = K extends keyof T\n ? T[K] extends Required<T>[K]\n ? undefined extends T[K]\n ? K\n : never\n : K\n : never\n\ninterface FlexRenderRequiredOptions<\n TInputs extends Record<string, any>,\n TOutputs extends Record<string, any>,\n> {\n /**\n * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)\n */\n inputs: TInputs\n /**\n * Component instance outputs.\n */\n outputs?: TOutputs\n /**\n * Optional {@link Injector} that will be used when rendering the component\n */\n injector?: Injector\n}\n\ninterface FlexRenderOptions<\n TInputs extends Record<string, any>,\n TOutputs extends Record<string, any>,\n> {\n /**\n * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)\n */\n inputs?: TInputs\n /**\n * Component instance outputs.\n */\n outputs?: TOutputs\n /**\n * Optional {@link Injector} that will be used when rendering the component\n */\n injector?: Injector\n}\n\n/**\n * Helper function to create a [@link FlexRenderComponent] instance, with better type-safety.\n *\n * - options object must be passed when the given component instance contains at least one required signal input.\n * - options/inputs is typed with the given component inputs\n * - options/outputs is typed with the given component outputs\n */\nexport function flexRenderComponent<\n TComponent = any,\n TInputs extends Inputs<TComponent> = Inputs<TComponent>,\n TOutputs extends Outputs<TComponent> = Outputs<TComponent>,\n>(\n component: Type<TComponent>,\n ...options: OptionalKeys<TInputs> extends never\n ? [FlexRenderOptions<TInputs, TOutputs>?]\n : [FlexRenderRequiredOptions<TInputs, TOutputs>]\n) {\n const { inputs, injector, outputs } = options?.[0] ?? {}\n return new FlexRenderComponent(component, inputs, injector, outputs)\n}\n\n/**\n * Wrapper class for a component that will be used as content for {@link FlexRenderDirective}\n *\n * Prefer {@link flexRenderComponent} helper for better type-safety\n */\nexport class FlexRenderComponent<TComponent = any> {\n readonly mirror: ComponentMirror<TComponent>\n readonly allowedInputNames: string[] = []\n readonly allowedOutputNames: string[] = []\n\n constructor(\n readonly component: Type<TComponent>,\n readonly inputs?: Inputs<TComponent>,\n readonly injector?: Injector,\n readonly outputs?: Outputs<TComponent>,\n ) {\n const mirror = reflectComponentType(component)\n if (!mirror) {\n throw new Error(\n `[@tanstack-table/angular] The provided symbol is not a component`,\n )\n }\n this.mirror = mirror\n for (const input of this.mirror.inputs) {\n this.allowedInputNames.push(input.propName)\n }\n for (const output of this.mirror.outputs) {\n this.allowedOutputNames.push(output.propName)\n }\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentRef,\n inject,\n Injectable,\n Injector,\n KeyValueDiffer,\n KeyValueDiffers,\n OutputEmitterRef,\n OutputRefSubscription,\n ViewContainerRef,\n} from '@angular/core'\nimport { FlexRenderComponent } from './flex-render-component'\n\n@Injectable()\nexport class FlexRenderComponentFactory {\n #viewContainerRef = inject(ViewContainerRef)\n\n createComponent<T>(\n flexRenderComponent: FlexRenderComponent<T>,\n componentInjector: Injector,\n ): FlexRenderComponentRef<T> {\n const componentRef = this.#viewContainerRef.createComponent(\n flexRenderComponent.component,\n {\n injector: componentInjector,\n },\n )\n const view = new FlexRenderComponentRef(\n componentRef,\n flexRenderComponent,\n componentInjector,\n )\n\n const { inputs, outputs } = flexRenderComponent\n\n if (inputs) view.setInputs(inputs)\n if (outputs) view.setOutputs(outputs)\n\n return view\n }\n}\n\nexport class FlexRenderComponentRef<T> {\n readonly #keyValueDiffersFactory: KeyValueDiffers\n #componentData: FlexRenderComponent<T>\n #inputValueDiffer: KeyValueDiffer<string, unknown>\n\n readonly #outputRegistry: FlexRenderComponentOutputManager\n\n constructor(\n readonly componentRef: ComponentRef<T>,\n componentData: FlexRenderComponent<T>,\n readonly componentInjector: Injector,\n ) {\n this.#componentData = componentData\n this.#keyValueDiffersFactory = componentInjector.get(KeyValueDiffers)\n\n this.#outputRegistry = new FlexRenderComponentOutputManager(\n this.#keyValueDiffersFactory,\n this.outputs,\n )\n\n this.#inputValueDiffer = this.#keyValueDiffersFactory\n .find(this.inputs)\n .create()\n this.#inputValueDiffer.diff(this.inputs)\n\n this.componentRef.onDestroy(() => this.#outputRegistry.unsubscribeAll())\n }\n\n get component() {\n return this.#componentData.component\n }\n\n get inputs() {\n return this.#componentData.inputs ?? {}\n }\n\n get outputs() {\n return this.#componentData.outputs ?? {}\n }\n\n /**\n * Get component input and output diff by the given item\n */\n diff(item: FlexRenderComponent<T>) {\n return {\n inputDiff: this.#inputValueDiffer.diff(item.inputs ?? {}),\n outputDiff: this.#outputRegistry.diff(item.outputs ?? {}),\n }\n }\n /**\n *\n * @param compare Whether the current ref component instance is the same as the given one\n */\n eqType(compare: FlexRenderComponent<T>): boolean {\n return compare.component === this.component\n }\n\n /**\n * Tries to update current component refs input by the new given content component.\n */\n update(content: FlexRenderComponent<T>) {\n const eq = this.eqType(content)\n if (!eq) return\n const { inputDiff, outputDiff } = this.diff(content)\n if (inputDiff) {\n inputDiff.forEachAddedItem((item) =>\n this.setInput(item.key, item.currentValue),\n )\n inputDiff.forEachChangedItem((item) =>\n this.setInput(item.key, item.currentValue),\n )\n inputDiff.forEachRemovedItem((item) => this.setInput(item.key, undefined))\n }\n if (outputDiff) {\n outputDiff.forEachAddedItem((item) => {\n this.setOutput(item.key, item.currentValue)\n })\n outputDiff.forEachChangedItem((item) => {\n if (item.currentValue) {\n this.#outputRegistry.setListener(item.key, item.currentValue)\n } else {\n this.#outputRegistry.unsubscribe(item.key)\n }\n })\n outputDiff.forEachRemovedItem((item) => {\n this.#outputRegistry.unsubscribe(item.key)\n })\n }\n\n this.#componentData = content\n }\n\n markAsDirty(): void {\n this.componentRef.injector.get(ChangeDetectorRef).markForCheck()\n }\n\n setInputs(inputs: Record<string, unknown>) {\n for (const prop in inputs) {\n this.setInput(prop, inputs[prop])\n }\n }\n\n setInput(key: string, value: unknown) {\n if (this.#componentData.allowedInputNames.includes(key)) {\n this.componentRef.setInput(key, value)\n }\n }\n\n setOutputs(\n outputs: Record<\n string,\n OutputEmitterRef<unknown>['emit'] | null | undefined\n >,\n ) {\n this.#outputRegistry.unsubscribeAll()\n for (const prop in outputs) {\n this.setOutput(prop, outputs[prop])\n }\n }\n\n setOutput(\n outputName: string,\n emit: OutputEmitterRef<unknown>['emit'] | undefined | null,\n ): void {\n if (!this.#componentData.allowedOutputNames.includes(outputName)) return\n if (!emit) {\n this.#outputRegistry.unsubscribe(outputName)\n return\n }\n\n const hasListener = this.#outputRegistry.hasListener(outputName)\n this.#outputRegistry.setListener(outputName, emit)\n\n if (hasListener) {\n return\n }\n\n const instance = this.componentRef.instance\n const output = instance[outputName as keyof typeof instance]\n if (output && output instanceof OutputEmitterRef) {\n output.subscribe((value) => {\n this.#outputRegistry.getListener(outputName)?.(value)\n })\n }\n }\n}\n\nclass FlexRenderComponentOutputManager {\n readonly #outputSubscribers: Record<string, OutputRefSubscription> = {}\n readonly #outputListeners: Record<string, (...args: any[]) => void> = {}\n\n readonly #valueDiffer: KeyValueDiffer<\n string,\n undefined | null | OutputEmitterRef<unknown>['emit']\n >\n\n constructor(keyValueDiffers: KeyValueDiffers, initialOutputs: any) {\n this.#valueDiffer = keyValueDiffers.find(initialOutputs).create()\n if (initialOutputs) {\n this.#valueDiffer.diff(initialOutputs)\n }\n }\n\n hasListener(outputName: string) {\n return outputName in this.#outputListeners\n }\n\n setListener(outputName: string, callback: (...args: any[]) => void) {\n this.#outputListeners[outputName] = callback\n }\n\n getListener(outputName: string) {\n return this.#outputListeners[outputName]\n }\n\n unsubscribeAll(): void {\n for (const prop in this.#outputSubscribers) {\n this.unsubscribe(prop)\n }\n }\n\n unsubscribe(outputName: string) {\n if (outputName in this.#outputSubscribers) {\n this.#outputSubscribers[outputName]?.unsubscribe()\n delete this.#outputSubscribers[outputName]\n delete this.#outputListeners[outputName]\n }\n }\n\n diff(outputs: Record<string, OutputEmitterRef<unknown>['emit'] | undefined>) {\n return this.#valueDiffer.diff(outputs ?? {})\n }\n}\n","import { FlexRenderComponentRef } from './flex-render-component-ref'\nimport { EmbeddedViewRef, TemplateRef, Type } from '@angular/core'\nimport type { FlexRenderContent } from '../flex-render'\nimport { FlexRenderComponent } from './flex-render-component'\n\nexport type FlexRenderTypedContent =\n | { kind: 'null' }\n | {\n kind: 'primitive'\n content: string | number | Record<string, any>\n }\n | { kind: 'flexRenderComponent'; content: FlexRenderComponent<unknown> }\n | { kind: 'templateRef'; content: TemplateRef<unknown> }\n | { kind: 'component'; content: Type<unknown> }\n\nexport function mapToFlexRenderTypedContent(\n content: FlexRenderContent<any>,\n): FlexRenderTypedContent {\n if (content === null || content === undefined) {\n return { kind: 'null' }\n }\n if (typeof content === 'string' || typeof content === 'number') {\n return { kind: 'primitive', content }\n }\n if (content instanceof FlexRenderComponent) {\n return { kind: 'flexRenderComponent', content }\n } else if (content instanceof TemplateRef) {\n return { kind: 'templateRef', content }\n } else if (content instanceof Type) {\n return { kind: 'component', content }\n } else {\n return { kind: 'primitive', content }\n }\n}\n\nexport type FlexRenderViewAllowedType =\n | FlexRenderComponentRef<any>\n | EmbeddedViewRef<unknown>\n | null\n\nexport abstract class FlexRenderView<\n TView extends FlexRenderViewAllowedType,\n TContent extends FlexRenderTypedContent,\n> {\n readonly view: TView\n #previousContent: FlexRenderTypedContent | undefined\n #content: FlexRenderTypedContent\n\n protected constructor(\n initialContent: Exclude<FlexRenderTypedContent, { kind: 'null' }>,\n view: TView,\n ) {\n this.#content = initialContent\n this.view = view\n }\n\n get previousContent(): FlexRenderTypedContent {\n return this.#previousContent ?? { kind: 'null' }\n }\n\n get content() {\n return this.#content\n }\n\n set content(content: FlexRenderTypedContent) {\n this.#previousContent = this.#content\n this.#content = content\n }\n\n abstract updateProps(props: Record<string, any>): void\n\n abstract dirtyCheck(): void\n\n abstract onDestroy(callback: Function): void\n\n abstract eq(view: TContent): boolean\n}\n\nexport class FlexRenderTemplateView extends FlexRenderView<\n EmbeddedViewRef<unknown>,\n Extract<FlexRenderTypedContent, { kind: 'primitive' | 'templateRef' }>\n> {\n constructor(\n initialContent: Extract<\n FlexRenderTypedContent,\n { kind: 'primitive' | 'templateRef' }\n >,\n view: EmbeddedViewRef<unknown>,\n ) {\n super(initialContent, view)\n }\n\n override updateProps(props: Record<string, any>) {\n this.view.markForCheck()\n }\n\n override dirtyCheck() {\n // Basically a no-op. When the view is created via EmbeddedViewRef, we don't need to do any manual update\n // since this type of content has a proxy as a context, then every time the root component is checked for changes,\n // the property getter will be re-evaluated.\n //\n // If in a future we need to manually mark the view as dirty, just uncomment next line\n // this.view.markForCheck()\n }\n\n override onDestroy(callback: Function) {\n this.view.onDestroy(callback)\n }\n\n override eq(\n compare: Extract<\n FlexRenderTypedContent,\n { kind: 'primitive' | 'templateRef' }\n >,\n ): boolean {\n return (\n (this.content.kind === 'primitive' &&\n compare.kind === 'primitive' &&\n this.content.content === compare.content) ||\n (this.content.kind === 'templateRef' &&\n compare.kind === 'templateRef' &&\n this.content.content === compare.content)\n )\n }\n}\n\nexport class FlexRenderComponentView extends FlexRenderView<\n FlexRenderComponentRef<unknown>,\n Extract<FlexRenderTypedContent, { kind: 'component' | 'flexRenderComponent' }>\n> {\n constructor(\n initialContent: Extract<\n FlexRenderTypedContent,\n { kind: 'component' | 'flexRenderComponent' }\n >,\n view: FlexRenderComponentRef<unknown>,\n ) {\n super(initialContent, view)\n }\n\n override updateProps(props: Record<string, any>) {\n switch (this.content.kind) {\n case 'component': {\n this.view.setInputs(props)\n break\n }\n case 'flexRenderComponent': {\n // No-op. When FlexRenderFlags.PropsReferenceChanged is set,\n // FlexRenderComponent will be updated into `dirtyCheck`.\n break\n }\n }\n }\n\n override dirtyCheck() {\n switch (this.content.kind) {\n case 'component': {\n // Component context is currently valuated with the cell context. Since it's reference\n // shouldn't change, we force mark the component as dirty in order to re-evaluate function invocation in view.\n // NOTE: this should behave like having a component with ChangeDetectionStrategy.Default\n this.view.markAsDirty()\n break\n }\n case 'flexRenderComponent': {\n // Given context instance will always have a different reference than the previous one,\n // so instead of recreating the entire view, we will only update the current view\n if (this.view.eqType(this.content.content)) {\n this.view.update(this.content.content)\n }\n this.view.markAsDirty()\n break\n }\n }\n }\n\n override onDestroy(callback: Function) {\n this.view.componentRef.onDestroy(callback)\n }\n\n override eq(\n compare: Extract<\n FlexRenderTypedContent,\n { kind: 'component' | 'flexRenderComponent' }\n >,\n ): boolean {\n return (\n (this.content.kind === 'component' &&\n compare.kind === 'component' &&\n this.content.content === compare.content) ||\n (this.content.kind === 'flexRenderComponent' &&\n compare.kind === 'flexRenderComponent' &&\n this.content.content.component === compare.content.component)\n )\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n DoCheck,\n effect,\n type EffectRef,\n Inject,\n inject,\n Injector,\n Input,\n OnChanges,\n runInInjectionContext,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core'\nimport { memo } from '@tanstack/table-core'\nimport { FlexRenderComponentProps } from './flex-render/context'\nimport { FlexRenderFlags } from './flex-render/flags'\nimport {\n flexRenderComponent,\n FlexRenderComponent,\n} from './flex-render/flex-render-component'\nimport { FlexRenderComponentFactory } from './flex-render/flex-render-component-ref'\nimport {\n FlexRenderComponentView,\n FlexRenderTemplateView,\n type FlexRenderTypedContent,\n FlexRenderView,\n FlexRenderViewAllowedType,\n mapToFlexRenderTypedContent,\n} from './flex-render/view'\n\nexport {\n injectFlexRenderContext,\n type FlexRenderComponentProps,\n} from './flex-render/context'\n\nexport type FlexRenderContent<TProps extends NonNullable<unknown>> =\n | string\n | number\n | Type<TProps>\n | FlexRenderComponent<TProps>\n | TemplateRef<{ $implicit: TProps }>\n | null\n | Record<any, any>\n | undefined\n\n@Directive({\n selector: '[flexRender]',\n standalone: true,\n providers: [FlexRenderComponentFactory],\n})\nexport class FlexRenderDirective<TProps extends NonNullable<unknown>>\n implements OnChanges, DoCheck\n{\n readonly #flexRenderComponentFactory = inject(FlexRenderComponentFactory)\n readonly #changeDetectorRef = inject(ChangeDetectorRef)\n\n @Input({ required: true, alias: 'flexRender' })\n content:\n | number\n | string\n | ((props: TProps) => FlexRenderContent<TProps>)\n | null\n | undefined = undefined\n\n @Input({ required: true, alias: 'flexRenderProps' })\n props: TProps = {} as TProps\n\n @Input({ required: false, alias: 'flexRenderInjector' })\n injector: Injector = inject(Injector)\n\n renderFlags = FlexRenderFlags.ViewFirstRender\n renderView: FlexRenderView<\n FlexRenderViewAllowedType,\n FlexRenderTypedContent\n > | null = null\n\n readonly #latestContent = () => {\n const { content, props } = this\n return typeof content !== 'function'\n ? content\n : runInInjectionContext(this.injector, () => content(props))\n }\n\n #getContentValue = memo(\n () => [this.#latestContent(), this.props, this.content],\n (latestContent) => {\n return mapToFlexRenderTypedContent(latestContent)\n },\n { key: 'flexRenderContentValue', debug: () => false },\n )\n\n constructor(\n @Inject(ViewContainerRef)\n private readonly viewContainerRef: ViewContainerRef,\n @Inject(TemplateRef)\n private readonly templateRef: TemplateRef<any>,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['props']) {\n this.renderFlags |= FlexRenderFlags.PropsReferenceChanged\n }\n if (changes['content']) {\n this.renderFlags |=\n FlexRenderFlags.ContentChanged | FlexRenderFlags.ViewFirstRender\n this.update()\n }\n }\n\n ngDoCheck(): void {\n if (this.renderFlags & FlexRenderFlags.ViewFirstRender) {\n // On the initial render, the view is created during the `ngOnChanges` hook.\n // Since `ngDoCheck` is called immediately afterward, there's no need to check for changes in this phase.\n this.renderFlags &= ~FlexRenderFlags.ViewFirstRender\n return\n }\n\n this.renderFlags |= FlexRenderFlags.DirtyCheck\n\n const latestContent = this.#getContentValue()\n if (latestContent.kind === 'null' || !this.renderView) {\n this.renderFlags |= FlexRenderFlags.ContentChanged\n } else {\n const { kind: currentKind } = this.renderView.content\n if (\n latestContent.kind !== currentKind ||\n !this.renderView.eq(latestContent)\n ) {\n this.renderFlags |= FlexRenderFlags.ContentChanged\n }\n this.renderView.content = latestContent\n }\n this.update()\n }\n\n update() {\n if (\n this.renderFlags &\n (FlexRenderFlags.ContentChanged | FlexRenderFlags.ViewFirstRender)\n ) {\n this.render()\n return\n }\n if (this.renderFlags & FlexRenderFlags.PropsReferenceChanged) {\n if (this.renderView) this.renderView.updateProps(this.props)\n this.renderFlags &= ~FlexRenderFlags.PropsReferenceChanged\n }\n if (\n this.renderFlags &\n (FlexRenderFlags.DirtyCheck | FlexRenderFlags.DirtySignal)\n ) {\n if (this.renderView) this.renderView.dirtyCheck()\n this.renderFlags &= ~(\n FlexRenderFlags.DirtyCheck | FlexRenderFlags.DirtySignal\n )\n }\n }\n\n #currentEffectRef: EffectRef | null = null\n\n render() {\n if (this.#shouldRecreateEntireView() && this.#currentEffectRef) {\n this.#currentEffectRef.destroy()\n this.#currentEffectRef = null\n this.renderFlags &= ~FlexRenderFlags.RenderEffectChecked\n }\n\n this.viewContainerRef.clear()\n this.renderFlags =\n FlexRenderFlags.Pristine |\n (this.renderFlags & FlexRenderFlags.ViewFirstRender) |\n (this.renderFlags & FlexRenderFlags.RenderEffectChecked)\n\n const resolvedContent = this.#getContentValue()\n if (resolvedContent.kind === 'null') {\n this.renderView = null\n } else {\n this.renderView = this.#renderViewByContent(resolvedContent)\n }\n\n // If the content is a function `content(props)`, we initialize an effect\n // in order to react to changes if the given definition use signals.\n if (!this.#currentEffectRef && typeof this.content === 'function') {\n this.#currentEffectRef = effect(\n () => {\n this.#latestContent()\n if (!(this.renderFlags & FlexRenderFlags.RenderEffectChecked)) {\n this.renderFlags |= FlexRenderFlags.RenderEffectChecked\n return\n }\n this.renderFlags |= FlexRenderFlags.DirtySignal\n // This will mark the view as changed,\n // so we'll try to check for updates into ngDoCheck\n this.#changeDetectorRef.markForCheck()\n },\n { injector: this.viewContainerRef.injector },\n )\n }\n }\n\n #shouldRecreateEntireView() {\n return (\n this.renderFlags &\n FlexRenderFlags.ContentChanged &\n FlexRenderFlags.ViewFirstRender\n )\n }\n\n #renderViewByContent(\n content: FlexRenderTypedContent,\n ): FlexRenderView<FlexRenderViewAllowedType, FlexRenderTypedContent> | null {\n if (content.kind === 'primitive') {\n return this.#renderStringContent(content)\n } else if (content.kind === 'templateRef') {\n return this.#renderTemplateRefContent(content)\n } else if (content.kind === 'flexRenderComponent') {\n return this.#renderComponent(content)\n } else if (content.kind === 'component') {\n return this.#renderCustomComponent(content)\n } else {\n return null\n }\n }\n\n #renderStringContent(\n template: Extract<FlexRenderTypedContent, { kind: 'primitive' }>,\n ): FlexRenderTemplateView {\n const context = () => {\n return typeof this.content === 'string' ||\n typeof this.content === 'number'\n ? this.content\n : this.content?.(this.props)\n }\n const ref = this.viewContainerRef.createEmbeddedView(this.templateRef, {\n get $implicit() {\n return context()\n },\n })\n return new FlexRenderTemplateView(template, ref)\n }\n\n #renderTemplateRefContent(\n template: Extract<FlexRenderTypedContent, { kind: 'templateRef' }>,\n ): FlexRenderTemplateView {\n const latestContext = () => this.props\n const view = this.viewContainerRef.createEmbeddedView(template.content, {\n get $implicit() {\n return latestContext()\n },\n })\n return new FlexRenderTemplateView(template, view)\n }\n\n #renderComponent(\n flexRenderComponent: Extract<\n FlexRenderTypedContent,\n { kind: 'flexRenderComponent' }\n >,\n ): FlexRenderComponentView {\n const { inputs, outputs, injector } = flexRenderComponent.content\n\n const getContext = () => this.props\n const proxy = new Proxy(this.props, {\n get: (_, key) => getContext()[key as keyof typeof _],\n })\n const componentInjector = Injector.create({\n parent: injector ?? this.injector,\n providers: [{ provide: FlexRenderComponentProps, useValue: proxy }],\n })\n const view = this.#flexRenderComponentFactory.createComponent(\n flexRenderComponent.content,\n componentInjector,\n )\n return new FlexRenderComponentView(flexRenderComponent, view)\n }\n\n #renderCustomComponent(\n component: Extract<FlexRenderTypedContent, { kind: 'component' }>,\n ): FlexRenderComponentView {\n const view = this.#flexRenderComponentFactory.createComponent(\n flexRenderComponent(component.content, {\n inputs: this.props,\n injector: this.injector,\n }),\n this.injector,\n )\n return new FlexRenderComponentView(component, view)\n }\n}\n","import { computed, type Signal, signal } from '@angular/core'\nimport {\n RowData,\n TableOptions,\n TableOptionsResolved,\n TableState,\n createTable,\n type Table,\n} from '@tanstack/table-core'\nimport { lazyInit } from './lazy-signal-initializer'\nimport { proxifyTable } from './proxy'\n\nexport * from '@tanstack/table-core'\n\nexport {\n type FlexRenderContent,\n FlexRenderDirective,\n FlexRenderDirective as FlexRender,\n injectFlexRenderContext,\n type FlexRenderComponentProps,\n} from './flex-render'\n\nexport {\n FlexRenderComponent,\n flexRenderComponent,\n} from './flex-render/flex-render-component'\n\nexport function createAngularTable<TData extends RowData>(\n options: () => TableOptions<TData>,\n): Table<TData> & Signal<Table<TData>> {\n return lazyInit(() => {\n const resolvedOptions = {\n state: {},\n onStateChange: () => {},\n renderFallbackValue: null,\n ...options(),\n }\n\n const table = createTable(resolvedOptions)\n\n // By default, manage table state here using the table's initial state\n const state = signal<TableState>(table.initialState)\n\n // Compose table options using computed.\n // This is to allow `tableSignal` to listen and set table option\n const updatedOptions = computed<TableOptionsResolved<TData>>(() => {\n // listen to table state changed\n const tableState = state()\n // listen to input options changed\n const tableOptions = options()\n return {\n ...table.options,\n ...resolvedOptions,\n ...tableOptions,\n state: { ...tableState, ...tableOptions.state },\n onStateChange: (updater) => {\n const value =\n updater instanceof Function ? updater(tableState) : updater\n state.set(value)\n resolvedOptions.onStateChange?.(updater)\n },\n }\n })\n\n // convert table instance to signal for proxify to listen to any table state and options changes\n const tableSignal = computed(\n () => {\n table.setOptions(updatedOptions())\n return table\n },\n {\n equal: () => false,\n },\n )\n\n // proxify Table instance to provide ability for consumer to listen to any table state changes\n return proxifyTable(tableSignal)\n })\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -18,7 +18,8 @@ export type FlexRenderTypedContent = {
18
18
  content: Type<unknown>;
19
19
  };
20
20
  export declare function mapToFlexRenderTypedContent(content: FlexRenderContent<any>): FlexRenderTypedContent;
21
- export declare abstract class FlexRenderView<TView extends FlexRenderComponentRef<any> | EmbeddedViewRef<unknown> | null> {
21
+ export type FlexRenderViewAllowedType = FlexRenderComponentRef<any> | EmbeddedViewRef<unknown> | null;
22
+ export declare abstract class FlexRenderView<TView extends FlexRenderViewAllowedType, TContent extends FlexRenderTypedContent> {
22
23
  #private;
23
24
  readonly view: TView;
24
25
  protected constructor(initialContent: Exclude<FlexRenderTypedContent, {
@@ -30,20 +31,31 @@ export declare abstract class FlexRenderView<TView extends FlexRenderComponentRe
30
31
  abstract updateProps(props: Record<string, any>): void;
31
32
  abstract dirtyCheck(): void;
32
33
  abstract onDestroy(callback: Function): void;
34
+ abstract eq(view: TContent): boolean;
33
35
  }
34
- export declare class FlexRenderTemplateView extends FlexRenderView<EmbeddedViewRef<unknown>> {
36
+ export declare class FlexRenderTemplateView extends FlexRenderView<EmbeddedViewRef<unknown>, Extract<FlexRenderTypedContent, {
37
+ kind: 'primitive' | 'templateRef';
38
+ }>> {
35
39
  constructor(initialContent: Extract<FlexRenderTypedContent, {
36
40
  kind: 'primitive' | 'templateRef';
37
41
  }>, view: EmbeddedViewRef<unknown>);
38
42
  updateProps(props: Record<string, any>): void;
39
43
  dirtyCheck(): void;
40
44
  onDestroy(callback: Function): void;
45
+ eq(compare: Extract<FlexRenderTypedContent, {
46
+ kind: 'primitive' | 'templateRef';
47
+ }>): boolean;
41
48
  }
42
- export declare class FlexRenderComponentView extends FlexRenderView<FlexRenderComponentRef<unknown>> {
49
+ export declare class FlexRenderComponentView extends FlexRenderView<FlexRenderComponentRef<unknown>, Extract<FlexRenderTypedContent, {
50
+ kind: 'component' | 'flexRenderComponent';
51
+ }>> {
43
52
  constructor(initialContent: Extract<FlexRenderTypedContent, {
44
53
  kind: 'component' | 'flexRenderComponent';
45
54
  }>, view: FlexRenderComponentRef<unknown>);
46
55
  updateProps(props: Record<string, any>): void;
47
56
  dirtyCheck(): void;
48
57
  onDestroy(callback: Function): void;
58
+ eq(compare: Extract<FlexRenderTypedContent, {
59
+ kind: 'component' | 'flexRenderComponent';
60
+ }>): boolean;
49
61
  }
@@ -1,7 +1,7 @@
1
1
  import { DoCheck, Injector, OnChanges, SimpleChanges, TemplateRef, Type, ViewContainerRef } from '@angular/core';
2
2
  import { FlexRenderFlags } from './flex-render/flags';
3
3
  import { FlexRenderComponent } from './flex-render/flex-render-component';
4
- import { FlexRenderView } from './flex-render/view';
4
+ import { type FlexRenderTypedContent, FlexRenderView, FlexRenderViewAllowedType } from './flex-render/view';
5
5
  import * as i0 from "@angular/core";
6
6
  export { injectFlexRenderContext, type FlexRenderComponentProps, } from './flex-render/context';
7
7
  export type FlexRenderContent<TProps extends NonNullable<unknown>> = string | number | Type<TProps> | FlexRenderComponent<TProps> | TemplateRef<{
@@ -15,7 +15,7 @@ export declare class FlexRenderDirective<TProps extends NonNullable<unknown>> im
15
15
  props: TProps;
16
16
  injector: Injector;
17
17
  renderFlags: FlexRenderFlags;
18
- renderView: FlexRenderView<any> | null;
18
+ renderView: FlexRenderView<FlexRenderViewAllowedType, FlexRenderTypedContent> | null;
19
19
  constructor(viewContainerRef: ViewContainerRef, templateRef: TemplateRef<any>);
20
20
  ngOnChanges(changes: SimpleChanges): void;
21
21
  ngDoCheck(): void;
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@tanstack/angular-table",
3
- "version": "8.21.3",
3
+ "version": "8.21.4",
4
4
  "description": "Headless UI for building powerful tables & datagrids for Angular.",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "https://github.com/TanStack/table.git",
9
+ "url": "git+https://github.com/TanStack/table.git",
10
10
  "directory": "packages/angular-table"
11
11
  },
12
12
  "homepage": "https://tanstack.com/table",
@@ -59,5 +59,11 @@
59
59
  "@angular/core": ">=17"
60
60
  },
61
61
  "sideEffects": false,
62
- "scripts": {}
62
+ "scripts": {
63
+ "clean": "rimraf ./build",
64
+ "test:types": "tsc --noEmit && vitest --typecheck",
65
+ "test:lib": "vitest",
66
+ "test:lib:dev": "vitest --watch",
67
+ "build": "ng-packagr -p ng-package.json -c tsconfig.build.json && rimraf ./build/lib/package.json"
68
+ }
63
69
  }
@@ -18,18 +18,18 @@ export class FlexRenderComponentFactory {
18
18
 
19
19
  createComponent<T>(
20
20
  flexRenderComponent: FlexRenderComponent<T>,
21
- componentInjector: Injector
21
+ componentInjector: Injector,
22
22
  ): FlexRenderComponentRef<T> {
23
23
  const componentRef = this.#viewContainerRef.createComponent(
24
24
  flexRenderComponent.component,
25
25
  {
26
26
  injector: componentInjector,
27
- }
27
+ },
28
28
  )
29
29
  const view = new FlexRenderComponentRef(
30
30
  componentRef,
31
31
  flexRenderComponent,
32
- componentInjector
32
+ componentInjector,
33
33
  )
34
34
 
35
35
  const { inputs, outputs } = flexRenderComponent
@@ -51,14 +51,14 @@ export class FlexRenderComponentRef<T> {
51
51
  constructor(
52
52
  readonly componentRef: ComponentRef<T>,
53
53
  componentData: FlexRenderComponent<T>,
54
- readonly componentInjector: Injector
54
+ readonly componentInjector: Injector,
55
55
  ) {
56
56
  this.#componentData = componentData
57
57
  this.#keyValueDiffersFactory = componentInjector.get(KeyValueDiffers)
58
58
 
59
59
  this.#outputRegistry = new FlexRenderComponentOutputManager(
60
60
  this.#keyValueDiffersFactory,
61
- this.outputs
61
+ this.outputs,
62
62
  )
63
63
 
64
64
  this.#inputValueDiffer = this.#keyValueDiffersFactory
@@ -106,26 +106,26 @@ export class FlexRenderComponentRef<T> {
106
106
  if (!eq) return
107
107
  const { inputDiff, outputDiff } = this.diff(content)
108
108
  if (inputDiff) {
109
- inputDiff.forEachAddedItem(item =>
110
- this.setInput(item.key, item.currentValue)
109
+ inputDiff.forEachAddedItem((item) =>
110
+ this.setInput(item.key, item.currentValue),
111
111
  )
112
- inputDiff.forEachChangedItem(item =>
113
- this.setInput(item.key, item.currentValue)
112
+ inputDiff.forEachChangedItem((item) =>
113
+ this.setInput(item.key, item.currentValue),
114
114
  )
115
- inputDiff.forEachRemovedItem(item => this.setInput(item.key, undefined))
115
+ inputDiff.forEachRemovedItem((item) => this.setInput(item.key, undefined))
116
116
  }
117
117
  if (outputDiff) {
118
- outputDiff.forEachAddedItem(item => {
118
+ outputDiff.forEachAddedItem((item) => {
119
119
  this.setOutput(item.key, item.currentValue)
120
120
  })
121
- outputDiff.forEachChangedItem(item => {
121
+ outputDiff.forEachChangedItem((item) => {
122
122
  if (item.currentValue) {
123
123
  this.#outputRegistry.setListener(item.key, item.currentValue)
124
124
  } else {
125
125
  this.#outputRegistry.unsubscribe(item.key)
126
126
  }
127
127
  })
128
- outputDiff.forEachRemovedItem(item => {
128
+ outputDiff.forEachRemovedItem((item) => {
129
129
  this.#outputRegistry.unsubscribe(item.key)
130
130
  })
131
131
  }
@@ -153,7 +153,7 @@ export class FlexRenderComponentRef<T> {
153
153
  outputs: Record<
154
154
  string,
155
155
  OutputEmitterRef<unknown>['emit'] | null | undefined
156
- >
156
+ >,
157
157
  ) {
158
158
  this.#outputRegistry.unsubscribeAll()
159
159
  for (const prop in outputs) {
@@ -163,7 +163,7 @@ export class FlexRenderComponentRef<T> {
163
163
 
164
164
  setOutput(
165
165
  outputName: string,
166
- emit: OutputEmitterRef<unknown>['emit'] | undefined | null
166
+ emit: OutputEmitterRef<unknown>['emit'] | undefined | null,
167
167
  ): void {
168
168
  if (!this.#componentData.allowedOutputNames.includes(outputName)) return
169
169
  if (!emit) {
@@ -181,7 +181,7 @@ export class FlexRenderComponentRef<T> {
181
181
  const instance = this.componentRef.instance
182
182
  const output = instance[outputName as keyof typeof instance]
183
183
  if (output && output instanceof OutputEmitterRef) {
184
- output.subscribe(value => {
184
+ output.subscribe((value) => {
185
185
  this.#outputRegistry.getListener(outputName)?.(value)
186
186
  })
187
187
  }
@@ -100,12 +100,12 @@ export class FlexRenderComponent<TComponent = any> {
100
100
  readonly component: Type<TComponent>,
101
101
  readonly inputs?: Inputs<TComponent>,
102
102
  readonly injector?: Injector,
103
- readonly outputs?: Outputs<TComponent>
103
+ readonly outputs?: Outputs<TComponent>,
104
104
  ) {
105
105
  const mirror = reflectComponentType(component)
106
106
  if (!mirror) {
107
107
  throw new Error(
108
- `[@tanstack-table/angular] The provided symbol is not a component`
108
+ `[@tanstack-table/angular] The provided symbol is not a component`,
109
109
  )
110
110
  }
111
111
  this.mirror = mirror
@@ -14,7 +14,7 @@ export type FlexRenderTypedContent =
14
14
  | { kind: 'component'; content: Type<unknown> }
15
15
 
16
16
  export function mapToFlexRenderTypedContent(
17
- content: FlexRenderContent<any>
17
+ content: FlexRenderContent<any>,
18
18
  ): FlexRenderTypedContent {
19
19
  if (content === null || content === undefined) {
20
20
  return { kind: 'null' }
@@ -33,8 +33,14 @@ export function mapToFlexRenderTypedContent(
33
33
  }
34
34
  }
35
35
 
36
+ export type FlexRenderViewAllowedType =
37
+ | FlexRenderComponentRef<any>
38
+ | EmbeddedViewRef<unknown>
39
+ | null
40
+
36
41
  export abstract class FlexRenderView<
37
- TView extends FlexRenderComponentRef<any> | EmbeddedViewRef<unknown> | null,
42
+ TView extends FlexRenderViewAllowedType,
43
+ TContent extends FlexRenderTypedContent,
38
44
  > {
39
45
  readonly view: TView
40
46
  #previousContent: FlexRenderTypedContent | undefined
@@ -42,7 +48,7 @@ export abstract class FlexRenderView<
42
48
 
43
49
  protected constructor(
44
50
  initialContent: Exclude<FlexRenderTypedContent, { kind: 'null' }>,
45
- view: TView
51
+ view: TView,
46
52
  ) {
47
53
  this.#content = initialContent
48
54
  this.view = view
@@ -66,17 +72,20 @@ export abstract class FlexRenderView<
66
72
  abstract dirtyCheck(): void
67
73
 
68
74
  abstract onDestroy(callback: Function): void
75
+
76
+ abstract eq(view: TContent): boolean
69
77
  }
70
78
 
71
79
  export class FlexRenderTemplateView extends FlexRenderView<
72
- EmbeddedViewRef<unknown>
80
+ EmbeddedViewRef<unknown>,
81
+ Extract<FlexRenderTypedContent, { kind: 'primitive' | 'templateRef' }>
73
82
  > {
74
83
  constructor(
75
84
  initialContent: Extract<
76
85
  FlexRenderTypedContent,
77
86
  { kind: 'primitive' | 'templateRef' }
78
87
  >,
79
- view: EmbeddedViewRef<unknown>
88
+ view: EmbeddedViewRef<unknown>,
80
89
  ) {
81
90
  super(initialContent, view)
82
91
  }
@@ -97,17 +106,34 @@ export class FlexRenderTemplateView extends FlexRenderView<
97
106
  override onDestroy(callback: Function) {
98
107
  this.view.onDestroy(callback)
99
108
  }
109
+
110
+ override eq(
111
+ compare: Extract<
112
+ FlexRenderTypedContent,
113
+ { kind: 'primitive' | 'templateRef' }
114
+ >,
115
+ ): boolean {
116
+ return (
117
+ (this.content.kind === 'primitive' &&
118
+ compare.kind === 'primitive' &&
119
+ this.content.content === compare.content) ||
120
+ (this.content.kind === 'templateRef' &&
121
+ compare.kind === 'templateRef' &&
122
+ this.content.content === compare.content)
123
+ )
124
+ }
100
125
  }
101
126
 
102
127
  export class FlexRenderComponentView extends FlexRenderView<
103
- FlexRenderComponentRef<unknown>
128
+ FlexRenderComponentRef<unknown>,
129
+ Extract<FlexRenderTypedContent, { kind: 'component' | 'flexRenderComponent' }>
104
130
  > {
105
131
  constructor(
106
132
  initialContent: Extract<
107
133
  FlexRenderTypedContent,
108
134
  { kind: 'component' | 'flexRenderComponent' }
109
135
  >,
110
- view: FlexRenderComponentRef<unknown>
136
+ view: FlexRenderComponentRef<unknown>,
111
137
  ) {
112
138
  super(initialContent, view)
113
139
  }
@@ -150,4 +176,20 @@ export class FlexRenderComponentView extends FlexRenderView<
150
176
  override onDestroy(callback: Function) {
151
177
  this.view.componentRef.onDestroy(callback)
152
178
  }
179
+
180
+ override eq(
181
+ compare: Extract<
182
+ FlexRenderTypedContent,
183
+ { kind: 'component' | 'flexRenderComponent' }
184
+ >,
185
+ ): boolean {
186
+ return (
187
+ (this.content.kind === 'component' &&
188
+ compare.kind === 'component' &&
189
+ this.content.content === compare.content) ||
190
+ (this.content.kind === 'flexRenderComponent' &&
191
+ compare.kind === 'flexRenderComponent' &&
192
+ this.content.content.component === compare.content.component)
193
+ )
194
+ }
153
195
  }