{"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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"}