{"version":3,"file":"handsontable-angular-wrapper.mjs","sources":["../../../projects/hot-table/src/lib/editor/custom-editor-placeholder.component.ts","../../../projects/hot-table/src/lib/editor/base-editor-adapter.ts","../../../projects/hot-table/src/lib/renderer/hot-cell-renderer-base.directive.ts","../../../projects/hot-table/src/lib/renderer/hot-cell-renderer.component.ts","../../../projects/hot-table/src/lib/editor/hot-cell-editor-base.directive.ts","../../../projects/hot-table/src/lib/editor/hot-cell-editor.component.ts","../../../projects/hot-table/src/lib/editor/editor-factory-adapter.ts","../../../projects/hot-table/src/lib/renderer/hot-cell-renderer-advanced.component.ts","../../../projects/hot-table/src/lib/editor/hot-cell-editor-advanced.component.ts","../../../projects/hot-table/src/lib/renderer/hot-dynamic-renderer-component.service.ts","../../../projects/hot-table/src/lib/services/hot-settings-resolver.service.ts","../../../projects/hot-table/src/lib/services/hot-global-config.service.ts","../../../projects/hot-table/src/lib/hot-table.component.ts","../../../projects/hot-table/src/lib/hot-table.module.ts","../../../projects/hot-table/src/public-api.ts","../../../projects/hot-table/src/handsontable-angular-wrapper.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ComponentRef, Input, ViewChild, ViewContainerRef } from '@angular/core';\nimport { HotCellEditorComponent } from './hot-cell-editor.component';\nimport { HotCellEditorAdvancedComponent } from './hot-cell-editor-advanced.component';\n\n/**\n * Component representing a placeholder for a custom editor in Handsontable.\n * It is used only within the wrapper.\n */\n@Component({\n  template: ` <div\n    [class]=\"placeholderCustomClass\"\n    [style.display]=\"display\"\n    [style.width.px]=\"width\"\n    [style.height.px]=\"height\"\n    [style.maxWidth.px]=\"width\"\n    [style.maxHeight.px]=\"height\"\n    [style.top.px]=\"top\"\n    [style.left.px]=\"left\"\n  >\n    <ng-template #inputPlaceholder></ng-template>\n  </div>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class CustomEditorPlaceholderComponent {\n  /** The top position of the editor. */\n  @Input() top: number;\n\n  /** The left position of the editor. */\n  @Input() left: number;\n\n  /** The height of the editor. */\n  @Input() height: number;\n\n  /** The width of the editor. */\n  @Input() width: number;\n\n  @Input()\n  set isVisible(value: boolean) {\n    this._isVisible = value;\n  }\n\n  @Input() placeholderCustomClass = 'handsontableInputHolder ht_clone_master';\n\n  /** The reference to the component instance of the editor. */\n  @Input() set componentRef(\n    hotEditorComponentRef: ComponentRef<HotCellEditorComponent<any>> |\n    ComponentRef<HotCellEditorAdvancedComponent<any>>) {\n    if (hotEditorComponentRef) {\n      this.container.insert(hotEditorComponentRef.hostView);\n    }\n  }\n\n  /** The container for the editor's input placeholder. */\n  @ViewChild('inputPlaceholder', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\n\n  /** The display style of the editor. */\n  get display(): string {\n    return this._isVisible ? 'block' : 'none';\n  }\n\n  private _isVisible = false;\n\n  /**\n   * Detaches the container from the Handsontable.\n   */\n  detachEditor(): void {\n    this.container.detach();\n  }\n}\n","import Handsontable from 'handsontable/base';\nimport {\n  ComponentRef,\n  createComponent,\n  EnvironmentInjector,\n} from '@angular/core';\nimport { CustomEditorPlaceholderComponent } from './custom-editor-placeholder.component';\nimport { ColumnSettingsInternal } from '../models/column-settings';\nimport { HotCellEditorComponent } from './hot-cell-editor.component';\nimport { Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\n/**\n * Adapter for BaseEditor from Handsontable.\n */\nexport class BaseEditorAdapter extends Handsontable.editors.BaseEditor {\n  /** Reference to the custom editor component. */\n  private _componentRef?: ComponentRef<HotCellEditorComponent<any>>;\n\n  /** Reference to the editor placeholder component. */\n  private _editorPlaceHolderRef: ComponentRef<CustomEditorPlaceholderComponent>;\n\n  /** Flag indicating whether the placeholder is ready. */\n  private _isPlaceholderReady = false;\n\n  /** Subscription for the finish edit event. */\n  private _finishEditSubscription?: Subscription;\n\n  /** Subscription for the cancel edit event. */\n  private _cancelEditSubscription?: Subscription;\n\n  /**\n   * Creates an instance of BaseEditorAdapter.\n   * @param instance The Handsontable instance.\n   */\n  constructor(instance: Handsontable.Core) {\n    super(instance);\n\n    this.hot.addHook('afterRowResize', this.onAfterRowResize.bind(this));\n    this.hot.addHook('afterColumnResize', this.onAfterColumnResize.bind(this));\n    this.hot.addHook('afterDestroy', this.onAfterDestroy.bind(this));\n  }\n\n  /**\n   * Prepares the editor for editing. Parameters are passed from Handsontable.\n   * @param row The row index.\n   * @param column The column index.\n   * @param prop The property name.\n   * @param TD The table cell element.\n   * @param originalValue The original value of the cell.\n   * @param cellProperties The cell properties.\n   */\n  override prepare(\n    row: number,\n    column: number,\n    prop: string | number,\n    TD: HTMLTableCellElement,\n    originalValue: any,\n    cellProperties: Handsontable.CellProperties\n  ): void {\n    if (!this.isOpened()) {\n      super.prepare(row, column, prop, TD, originalValue, cellProperties);\n      const columnMeta: ColumnSettingsInternal = this.hot.getColumnMeta(\n        column\n      ) as ColumnSettingsInternal;\n\n      if (!this._isPlaceholderReady) {\n        this.createEditorPlaceholder(columnMeta._environmentInjector);\n        this._isPlaceholderReady = true;\n      }\n\n      this._componentRef = columnMeta._editorComponentReference;\n\n      this.cleanupSubscriptions();\n\n      this._finishEditSubscription = this._componentRef.instance.finishEdit\n        .pipe(take(1))\n        .subscribe(() => {\n          this.finishEditing();\n        });\n\n      this._cancelEditSubscription = this._componentRef.instance.cancelEdit\n        .pipe(take(1))\n        .subscribe(() => {\n          this.cancelChanges();\n        });\n    }\n  }\n\n  /**\n   * Closes the editor. This event is triggered by Handsontable.\n   */\n  close(): void {\n    if (this.isOpened()) {\n      this.resetEditorState();\n      this._editorPlaceHolderRef?.changeDetectorRef.detectChanges();\n      this._editorPlaceHolderRef?.instance.detachEditor();\n      this._componentRef?.instance.onClose();\n    }\n  }\n\n  /**\n   * Focuses the editor. This event is triggered by Handsontable.\n   */\n  focus(): void {\n    this._componentRef?.instance.onFocus();\n  }\n\n  /**\n   * Gets the value from the editor.\n   * @returns The value from the editor.\n   */\n  getValue(): any {\n    return this._componentRef?.instance?.getValue();\n  }\n\n  /**\n   * Opens the editor. This event is triggered by Handsontable.\n   * When opening, we set the shortcut context to 'editor'.\n   * This allows the built-in keyboard shortcuts to operate within the editor.\n   * @param event The event that triggered the opening of the editor.\n   * @remarks When entering edit mode using double-click, keyboard shortcuts do not work.\n   */\n  open(event?: Event): void {\n    this.hot.getShortcutManager().setActiveContextName('editor');\n    this.applyPropsToEditor();\n    this._componentRef?.instance.onOpen(event);\n  }\n\n  /**\n   * Sets the value for the custom editor.\n   * @param newValue The value to set.\n   */\n  setValue(newValue?: any): void {\n    this._componentRef?.instance?.setValue(newValue);\n    this._componentRef?.changeDetectorRef.detectChanges();\n  }\n\n  /**\n   * Applies properties to the custom editor and editor placeholder.\n   */\n  private applyPropsToEditor(): void {\n    if (!this._componentRef || !this._editorPlaceHolderRef) {\n      return;\n    }\n\n    const rect = this.getEditedCellRect();\n\n    if (!this.isInFullEditMode()) {\n      this._componentRef.instance.setValue(null);\n    }\n\n    this._componentRef.setInput('originalValue', this.originalValue);\n    this._componentRef.setInput('row', this.row);\n    this._componentRef.setInput('column', this.col);\n    this._componentRef.setInput('prop', this.prop);\n    this._componentRef.setInput('cellProperties', this.cellProperties);\n\n    this._editorPlaceHolderRef.setInput('top', rect.top);\n    this._editorPlaceHolderRef.setInput('left', rect.start);\n    this._editorPlaceHolderRef.setInput('height', rect.height);\n    this._editorPlaceHolderRef.setInput('width', rect.width);\n    this._editorPlaceHolderRef.setInput('isVisible', true);\n    this._editorPlaceHolderRef.setInput('componentRef', this._componentRef);\n    this._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n  }\n\n  /**\n   * Creates the editor placeholder and append it to hot rootElement.\n   * @param injector The environment injector.\n   */\n  private createEditorPlaceholder(injector: EnvironmentInjector): void {\n    this._editorPlaceHolderRef = createComponent(\n      CustomEditorPlaceholderComponent,\n      {\n        environmentInjector: injector as EnvironmentInjector,\n      }\n    );\n\n    this.hot.rootElement.appendChild(\n      this._editorPlaceHolderRef.location.nativeElement\n    );\n  }\n\n  /**\n   * Handles the after column resize event.\n   * Helps adjust the editor size to the column size and update its position.\n   */\n  private onAfterColumnResize(): void {\n    if (this.isOpened()) {\n      this.applyPropsToEditor();\n    }\n  }\n\n  /**\n   * Handles the after row resize event.\n   * Helps adjust the editor size to the column size and update its position.\n   */\n  private onAfterRowResize(): void {\n    if (this.isOpened()) {\n      this.applyPropsToEditor();\n    }\n  }\n\n  /**\n   * Handles the after destroy event.\n   */\n  private onAfterDestroy(): void {\n    this.cleanupSubscriptions();\n    this._editorPlaceHolderRef?.destroy();\n  }\n\n  /**\n   * Unsubscribes the finish/cancel edit subscriptions if they are still active.\n   * Without this, destroying the table while an editor was prepared but never\n   * finished/cancelled leaves the `take(1)` subscriptions hanging (they never emit).\n   */\n  private cleanupSubscriptions(): void {\n    if (this._finishEditSubscription) {\n      this._finishEditSubscription.unsubscribe();\n      this._finishEditSubscription = undefined;\n    }\n\n    if (this._cancelEditSubscription) {\n      this._cancelEditSubscription.unsubscribe();\n      this._cancelEditSubscription = undefined;\n    }\n  }\n\n  /**\n   * Resets the editor placeholder state.\n   * We need to reset the editor placeholder state because we use it\n   * to store multiple references to the custom editor.\n   */\n  private resetEditorState(): void {\n    if (!this._editorPlaceHolderRef) {\n      return;\n    }\n\n    this._editorPlaceHolderRef.setInput('top', undefined);\n    this._editorPlaceHolderRef.setInput('left', undefined);\n    this._editorPlaceHolderRef.setInput('height', undefined);\n    this._editorPlaceHolderRef.setInput('width', undefined);\n    this._editorPlaceHolderRef.setInput('isVisible', false);\n    this._editorPlaceHolderRef.setInput('componentRef', undefined);\n  }\n}\n","import Handsontable from 'handsontable/base';\nimport { Directive, Input } from '@angular/core';\n\n/**\n * Shared base directive for HotCellRendererComponent and HotCellRendererAdvancedComponent.\n * Holds all @Input() properties and getProps() that both renderer variants share.\n *\n * @template TValue - The type of the rendered cell value.\n * @template TProps - The type of additional renderer properties.\n */\n@Directive()\nexport abstract class HotCellRendererBase<\n  TValue extends string | number | boolean | Record<string, any> | Array<any> = string,\n  TProps extends {} = any\n> {\n  @Input() value: TValue = '' as TValue;\n\n  @Input() instance: Handsontable;\n  @Input() td: HTMLTableCellElement;\n  @Input() row: number;\n  @Input() col: number;\n  @Input() prop: string | number;\n\n  @Input() cellProperties: Handsontable.CellProperties & { rendererProps?: TProps };\n\n  public getProps(): TProps {\n    return this.cellProperties?.rendererProps ?? ({} as TProps);\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { HotCellRendererBase } from './hot-cell-renderer-base.directive';\n\n/**\n * Abstract base component for creating custom cell renderer components for Handsontable.\n *\n * Extend this component and provide your own template to implement a custom renderer.\n * Value type is limited to primitives (`string | number | boolean`).\n * For object and array values use {@link HotCellRendererAdvancedComponent}.\n *\n * @template TValue - The type of the component renderer.\n * @template TProps - The type of additional renderer properties.\n */\n@Component({\n  selector: 'hot-cell-renderer',\n  template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`,\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class HotCellRendererComponent<TValue extends string | number | boolean = string, TProps extends {} = any>\n  extends HotCellRendererBase<TValue, TProps> {\n  static readonly RENDERER_MARKER = Symbol('HotCellRendererComponent');\n}\n","import Handsontable from 'handsontable/base';\nimport { Directive, EventEmitter, HostBinding, Input, Output } from '@angular/core';\n\n/**\n * Shared base directive for HotCellEditorComponent and HotCellEditorAdvancedComponent.\n * Holds all @Input(), @Output() and @HostBinding() declarations that both editor variants share.\n *\n * @template T - The type of the edited cell value.\n */\n@Directive()\nexport abstract class HotCellEditorBase<\n  T extends string | number | boolean | Record<string, any> | Array<any>\n> {\n  @HostBinding('style.height.%') protected heightFitParentContainer = 100;\n  @HostBinding('style.width.%') protected widthFitParentContainer = 100;\n\n  @Input() row: number;\n  @Input() column: number;\n  @Input() prop: string | number;\n  @Input() originalValue: T;\n  @Input() cellProperties: Handsontable.CellProperties;\n\n  @Output() finishEdit = new EventEmitter<void>();\n  @Output() cancelEdit = new EventEmitter<void>();\n\n  protected value: T;\n\n  getValue(): T {\n    return this.value;\n  }\n\n  setValue(value: T): void {\n    this.value = value;\n  }\n}\n","import { Directive, HostBinding } from '@angular/core';\nimport { HotCellEditorBase } from './hot-cell-editor-base.directive';\n\n/**\n * Abstract class representing a basic Handsontable cell editor in Angular.\n *\n * Extend this class and decorate the subclass with `@Component()` to implement a custom editor.\n * Value type is limited to primitives (`string | number | boolean`).\n * For object and array values use {@link HotCellEditorAdvancedComponent}.\n */\n@Directive()\nexport abstract class HotCellEditorComponent<T extends string | number | boolean> extends HotCellEditorBase<T> {\n  static readonly EDITOR_MARKER = Symbol('HotCellEditorComponent');\n\n  /** The tabindex attribute for the editor. */\n  @HostBinding('attr.tabindex') protected tabindex = -1;\n\n  /** The data-hot-input attribute for the editor. */\n  @HostBinding('attr.data-hot-input') protected dataHotInput = '';\n\n  /** The handsontableInput class for the editor. */\n  @HostBinding('class.handsontableInput') protected handsontableInputClass = true;\n\n  /** Event triggered by Handsontable on closing the editor. */\n  onClose(): void {}\n\n  /** Event triggered by Handsontable on opening the editor. */\n  onOpen(event?: Event): void {}\n\n  /**\n   * Event triggered by Handsontable on focusing the editor.\n   * Must be implemented by the subclass to move focus to the actual input element.\n   * @example\n   * ```typescript\n   * @Component({ template: `<input #inputElement>` })\n   * class CustomEditor extends HotCellEditorComponent<string> {\n   *   @ViewChild('inputElement') inputElement!: ElementRef;\n   *   onFocus(): void { this.inputElement.nativeElement.focus(); }\n   * }\n   * ```\n   */\n  abstract onFocus(): void;\n}\n","import { ComponentRef, createComponent, EnvironmentInjector } from '@angular/core';\nimport { CustomEditorPlaceholderComponent } from './custom-editor-placeholder.component';\nimport { AngularEditorProperties, HotInstanceWithAngularInjector } from './models/factory-editor-properties';\nimport { editorFactory, ExtendedEditor } from 'handsontable/editors/factory';\nimport { take } from 'rxjs/operators';\nimport { HotCellEditorAdvancedComponent } from './hot-cell-editor-advanced.component';\n\n/**\n * Combined type representing an extended editor with Angular component properties.\n * Used internally by the factory adapter to bridge Angular and Handsontable.\n */\ntype EditorInstance = ExtendedEditor<AngularEditorProperties & HotCellEditorAdvancedComponent<any>>;\n\n/**\n * Factory function to create a custom Handsontable editor adapter for Angular components.\n *\n * This adapter integrates Angular components with Handsontable's editor system using the new\n * editorFactory API, allowing you to use Angular components as custom cell editors while\n * maintaining full Angular lifecycle management and change detection.\n *\n * @returns A custom editor class that can be used in Handsontable column settings.\n *\n */\nexport const FactoryEditorAdapter = (componentRef: ComponentRef<HotCellEditorAdvancedComponent<any>>) =>\n  editorFactory<ExtendedEditor<any>>({\n    position: componentRef.instance.position,\n    shortcuts: componentRef.instance.shortcuts,\n    config: componentRef.instance.config,\n    init(editor: EditorInstance): void {\n      editor._componentRef = componentRef;\n      editor._editorPlaceHolderRef = undefined;\n      editor._finishEditSubscription = undefined;\n      editor._cancelEditSubscription = undefined;\n\n      createEditorPlaceholder(editor, (editor.hot as HotInstanceWithAngularInjector)._angularEnvironmentInjector);\n      editor.input = editor._editorPlaceHolderRef?.location.nativeElement ?? document.createElement('div');\n\n      editor._afterRowResizeCallback = (): void => {\n        if (editor.isOpened()) {\n          applyPropsToEditor(editor);\n        }\n      };\n\n      editor._afterColumnResizeCallback = (): void => {\n        if (editor.isOpened()) {\n          applyPropsToEditor(editor);\n        }\n      };\n\n      editor._afterDestroyCallback = (): void => {\n        cleanupSubscriptions(editor);\n        if (editor._editorPlaceHolderRef) {\n          editor._editorPlaceHolderRef.destroy();\n        }\n      };\n\n      // Hooks are automatically removed by Handsontable on table destroy\n      editor.hot.addHook('afterRowResize', editor._afterRowResizeCallback);\n      editor.hot.addHook('afterColumnResize', editor._afterColumnResizeCallback);\n      editor.hot.addHook('afterDestroy', editor._afterDestroyCallback);\n    },\n\n    afterInit: (editor) => editor._componentRef.instance.afterInit?.(editor),\n    beforeOpen: (editor: EditorInstance, context) => {\n      cleanupSubscriptions(editor);\n\n      applyPropsToEditor(editor);\n\n      editor._finishEditSubscription = editor._componentRef.instance.finishEdit.pipe(take(1)).subscribe((): void => {\n        editor.finishEditing();\n      });\n\n      editor._cancelEditSubscription = editor._componentRef.instance.cancelEdit.pipe(take(1)).subscribe((): void => {\n        editor.cancelChanges();\n      });\n      editor._componentRef.instance.beforeOpen?.(editor, context);\n    },\n    afterOpen: (editor, event) => {\n      editor._componentRef.instance.afterOpen?.(editor, event);\n    },\n    onFocus: (editor) => editor._componentRef.instance.onFocus?.(editor),\n    afterClose: (editor: EditorInstance) => {\n      resetEditorState(editor);\n      editor._editorPlaceHolderRef?.changeDetectorRef.detectChanges();\n      editor._editorPlaceHolderRef?.instance.detachEditor();\n      editor._componentRef.instance.afterClose?.(editor);\n    },\n    getValue: (editor) => editor._componentRef.instance.getValue(),\n    setValue: (editor: EditorInstance, value) => {\n      editor.value = value;\n      editor._componentRef.instance.setValue(value);\n      editor._componentRef.changeDetectorRef.detectChanges();\n    },\n  });\n\n/**\n * Creates the editor placeholder component.\n * @param editor The editor instance.\n * @param injector The environment injector from Angular.\n */\nfunction createEditorPlaceholder(editor: EditorInstance, injector: EnvironmentInjector | undefined): void {\n  if (!injector) {\n    return;\n  }\n\n  editor._editorPlaceHolderRef = createComponent(CustomEditorPlaceholderComponent, {\n    environmentInjector: injector,\n  });\n}\n\n/**\n * Applies properties to the custom Angular editor and editor placeholder.\n * Updates position, size, and cell context information.\n * @param editor The editor instance.\n */\nfunction applyPropsToEditor(editor: EditorInstance): void {\n  if (!editor._componentRef || !editor._editorPlaceHolderRef) {\n    return;\n  }\n\n  editor._componentRef.setInput('originalValue', editor.originalValue);\n  editor._componentRef.setInput('row', editor.row);\n  editor._componentRef.setInput('column', editor.col);\n  editor._componentRef.setInput('prop', editor.prop);\n  editor._componentRef.setInput('cellProperties', editor.cellProperties);\n\n  const rect = editor.hot.getCell(editor.row, editor.col)?.getBoundingClientRect();\n\n  editor._editorPlaceHolderRef.setInput('placeholderCustomClass', '');\n  editor._editorPlaceHolderRef.setInput('height', rect?.height ?? 0);\n  editor._editorPlaceHolderRef.setInput('width', rect?.width ?? 0);\n  editor._editorPlaceHolderRef.setInput('isVisible', true);\n  editor._editorPlaceHolderRef.setInput('componentRef', editor._componentRef);\n\n  editor._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n}\n\n/**\n * Resets the editor placeholder state.\n * Clears all positioning and visibility settings.\n * @param editor The editor instance.\n */\nfunction resetEditorState(editor: EditorInstance): void {\n  if (!editor._editorPlaceHolderRef) {\n    return;\n  }\n\n  editor._editorPlaceHolderRef.setInput('top', undefined);\n  editor._editorPlaceHolderRef.setInput('left', undefined);\n  editor._editorPlaceHolderRef.setInput('height', undefined);\n  editor._editorPlaceHolderRef.setInput('width', undefined);\n  editor._editorPlaceHolderRef.setInput('isVisible', false);\n  editor._editorPlaceHolderRef.setInput('componentRef', undefined);\n}\n\n/**\n * Cleans up existing subscriptions.\n * @param editor The editor instance.\n */\nfunction cleanupSubscriptions(editor: EditorInstance): void {\n  if (editor._finishEditSubscription) {\n    editor._finishEditSubscription.unsubscribe();\n    editor._finishEditSubscription = undefined;\n  }\n\n  if (editor._cancelEditSubscription) {\n    editor._cancelEditSubscription.unsubscribe();\n    editor._cancelEditSubscription = undefined;\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { HotCellRendererBase } from './hot-cell-renderer-base.directive';\n\n/**\n * Abstract base component for creating advanced custom cell renderer components for Handsontable.\n *\n * Extend this component and provide your own template to implement a custom renderer.\n * Unlike {@link HotCellRendererComponent}, this variant also accepts object and array values.\n *\n * @template TValue - The type of the component renderer.\n * @template TProps - The type of additional renderer properties.\n */\n@Component({\n  selector: 'hot-cell-renderer-advanced',\n  template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`,\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class HotCellRendererAdvancedComponent<\n  TValue extends string | number | boolean | Record<string, any> | Array<any> = string,\n  TProps extends {} = any\n> extends HotCellRendererBase<TValue, TProps> {\n  static readonly RENDERER_MARKER = Symbol('HotCellRendererAdvancedComponent');\n}\n","import { Directive } from '@angular/core';\nimport { ExtendedEditor } from 'handsontable/editors/factory';\nimport { CellProperties } from 'handsontable/settings';\nimport { KeyboardShortcutConfig } from './models/keyboard-shortcut-config';\nimport { HotCellEditorBase } from './hot-cell-editor-base.directive';\n\n/**\n * Abstract class representing an advanced Handsontable cell editor in Angular.\n *\n * Extend this class and decorate the subclass with `@Component()` to implement a custom editor.\n * Unlike {@link HotCellEditorComponent}, this variant also accepts object and array values\n * and provides additional lifecycle hooks and positioning options.\n */\n@Directive()\nexport abstract class HotCellEditorAdvancedComponent<\n  T extends string | number | boolean | Record<string, any> | Array<any>\n> extends HotCellEditorBase<T> {\n  static readonly EDITOR_MARKER = Symbol('HotCellEditorAdvancedComponent');\n\n  /** Event triggered by Handsontable on focusing the editor. Available in advanced mode. */\n  onFocus(editor?: ExtendedEditor<T>): void {}\n\n  /** The position of the editor in the DOM. Available in advanced mode. */\n  position: 'container' | 'portal' = 'container';\n\n  /** The shortcuts available for the editor. Available in advanced mode. */\n  shortcuts?: KeyboardShortcutConfig[];\n\n  /** The group name for the shortcuts. Available in advanced mode. */\n  shortcutsGroup?: string;\n\n  /** Configuration object. Available in advanced mode. */\n  config?: any;\n\n  /** Lifecycle hook called after the editor is opened. Available in advanced mode. */\n  afterOpen(editor: ExtendedEditor<T>, event?: Event): void {}\n\n  /** Lifecycle hook called after the editor is closed. Available in advanced mode. */\n  afterClose(editor: ExtendedEditor<T>): void {}\n\n  /** Lifecycle hook called after the editor is initialized. Available in advanced mode. */\n  afterInit(editor: ExtendedEditor<T>): void {}\n\n  /** Lifecycle hook called before the editor is opened. Available in advanced mode. */\n  beforeOpen(\n    editor: ExtendedEditor<T>,\n    {\n      row,\n      col,\n      prop,\n      td,\n      originalValue,\n      cellProperties,\n    }: {\n      row: number;\n      col: number;\n      prop: string | number;\n      td: HTMLTableCellElement;\n      originalValue: any;\n      cellProperties: CellProperties;\n    }\n  ): void {}\n}\n","import {\n  ApplicationRef,\n  ComponentRef,\n  createComponent,\n  EmbeddedViewRef,\n  EnvironmentInjector,\n  Injectable,\n  TemplateRef,\n  Type\n} from '@angular/core';\nimport { baseRenderer, BaseRenderer, registerRenderer, rendererFactory } from 'handsontable/renderers';\nimport Handsontable from 'handsontable/base';\nimport { HotCellRendererBase } from './hot-cell-renderer-base.directive';\nimport { HotCellRendererComponent } from './hot-cell-renderer.component';\nimport { HotCellRendererAdvancedComponent } from './hot-cell-renderer-advanced.component';\n\nexport const INVALID_RENDERER_WARNING =\n  'The provided renderer component was not recognized as a valid custom renderer. ' +\n  'It must either extend HotCellRendererComponent or be a valid TemplateRef. ' +\n  'Please ensure that your custom renderer is implemented correctly and imported from the proper source.';\n\nexport const INVALID_ADVANCED_RENDERER_WARNING =\n  'The provided renderer component was not recognized as a valid custom renderer. ' +\n  'It must either extend HotCellRendererAdvancedComponent. ' +\n  'Please ensure that your custom renderer is implemented correctly and imported from the proper source.';\n\n/**\n * An object representing the parameters passed to a Handsontable renderer.\n */\ninterface BaseRendererParametersObject {\n  instance: Handsontable.Core;\n  td: HTMLTableCellElement;\n  row: number;\n  col: number;\n  prop: string | number;\n  value: any;\n  cellProperties: Handsontable.CellProperties;\n}\n\n// Renderer component inputs, listed once at module scope so the per-cell render path can set them\n// without allocating a fresh key array (via Object.keys) on every cell of every render frame.\nconst RENDERER_INPUT_KEYS: (keyof BaseRendererParametersObject)[] = [\n  'instance', 'td', 'row', 'col', 'prop', 'value', 'cellProperties',\n];\n\n/**\n * Type guard that checks if the given object is a TemplateRef.\n *\n * @param obj - The object to check.\n * @returns True if the object is a TemplateRef; otherwise, false.\n */\nexport function isTemplateRef<T>(obj: any): obj is TemplateRef<T> {\n  return !!obj && typeof obj.createEmbeddedView === 'function';\n}\n\n/**\n * Type guard to check if an object is an instance of HotCellRendererComponent.\n *\n * @param obj - The object to check.\n * @returns True if the object is a HotCellRendererComponent, false otherwise.\n */\nexport function isHotCellRendererComponent(obj: any): obj is Type<HotCellRendererComponent> {\n  return obj?.RENDERER_MARKER === HotCellRendererComponent.RENDERER_MARKER;\n}\n\n/**\n * Type guard to check if an object is an instance of HotCellRendererAdvancedComponent.\n *\n * @param obj - The object to check.\n * @returns True if the object is a HotCellRendererAdvancedComponent, false otherwise.\n */\nexport function isAdvancedHotCellRendererComponent(obj: any): obj is Type<HotCellRendererAdvancedComponent> {\n  return obj?.RENDERER_MARKER === HotCellRendererAdvancedComponent.RENDERER_MARKER;\n}\n\n/**\n * Service for dynamically creating Angular components or templates as custom renderers for Handsontable.\n *\n * This service allows you to create a renderer function that wraps a given Angular component or TemplateRef\n * so that it can be used as a Handsontable renderer.\n *\n * @example\n * const customRenderer = dynamicComponentService.createRendererFromComponent(MyRendererComponent, { someProp: value });\n * // Use customRenderer in your Handsontable configuration\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DynamicComponentService {\n  // Track Angular component refs and embedded views keyed by the TD element they are attached to.\n  // When a cell is re-rendered the previous component is destroyed before a new one is created.\n  private readonly _tdComponentRefs = new WeakMap<HTMLTableCellElement, ComponentRef<any>>();\n  private readonly _tdEmbeddedViews = new WeakMap<HTMLTableCellElement, EmbeddedViewRef<any>>();\n\n  // Per-instance registries of every renderer ref/view currently attached to the application.\n  // The WeakMaps above only allow per-TD lookup; these sets let us sweep refs whose TD was dropped\n  // from Handsontable's virtual viewport (scrolling, updateData), which would otherwise stay\n  // attached to ApplicationRef forever and leak both memory and change-detection work.\n  //\n  // The registries are scoped per Handsontable instance (not one global set) because this service\n  // is a root singleton shared by every <hot-table>. A global sweep would scan the cells of every\n  // table on the page on each `afterViewRender`, i.e. on every scroll frame of any one of them.\n  // Keying by instance bounds each sweep to the cells of the table that actually re-rendered.\n  private readonly _instanceComponentRefs = new WeakMap<Handsontable.Core, Set<ComponentRef<any>>>();\n  private readonly _instanceEmbeddedViews = new WeakMap<Handsontable.Core, Set<EmbeddedViewRef<any>>>();\n\n  // Instances we already wired the sweep hook into, so each instance is hooked at most once.\n  private readonly _hookedInstances = new WeakSet<Handsontable.Core>();\n\n  constructor(private appRef: ApplicationRef, private environmentInjector: EnvironmentInjector) {}\n\n  /**\n   * Creates a custom renderer function for Handsontable from an Angular component or TemplateRef.\n   * The generated renderer function will be used by Handsontable to render cell content.\n   *\n   * @param component - The Angular component type or TemplateRef to use as renderer.\n   * @param componentProps - An object containing additional properties to use by the renderer.\n   * @param register - If true, registers the renderer with Handsontable using the component's name.\n   * @returns A renderer function that can be used in Handsontable's configuration.\n   */\n  createRendererFromComponent(\n    component: Type<HotCellRendererComponent> | TemplateRef<any>,\n    componentProps: Record<string, any> = {},\n    register: boolean = false\n  ) {\n    let registered = false;\n\n    return (\n      instance: Handsontable.Core,\n      td: HTMLTableCellElement,\n      row: number,\n      col: number,\n      prop: string | number,\n      value: any,\n      cellProperties: Handsontable.CellProperties\n    ) => {\n      const properties: BaseRendererParametersObject = {\n        value,\n        instance,\n        td,\n        row,\n        col,\n        prop,\n        cellProperties,\n      };\n\n      (cellProperties as any).rendererProps = componentProps;\n\n      baseRenderer.call(this, instance, td, row, col, prop, value, cellProperties);\n\n      this.registerSweepHook(instance);\n\n      if (isTemplateRef(component)) {\n        // Embedded views carry a per-render context, so they are always rebuilt.\n        this.replaceCellContent(instance, td);\n        const embeddedView = this.attachTemplateToElement(component, td, properties);\n        this.trackEmbeddedView(instance, td, embeddedView);\n      } else if (isHotCellRendererComponent(component)) {\n        this.renderComponent(td, component, properties);\n      } else {\n        console.warn(INVALID_RENDERER_WARNING);\n      }\n\n      if (register && !registered && isHotCellRendererComponent(component)) {\n        Handsontable.renderers.registerRenderer((component as Type<any>).name, component as any as BaseRenderer);\n        registered = true;\n      }\n\n      return td;\n    };\n  }\n\n  /**\n   * Creates a custom renderer function using rendererFactory from Handsontable.\n   * This is an alternative implementation that uses the factory pattern.\n   *\n   * @param component - The Angular component type to use as renderer.\n   * @param componentProps - An object containing additional properties to use by the renderer.\n   * @param register - If true, registers the renderer with Handsontable using the component's name.\n   * @returns A renderer function that can be used in Handsontable's configuration.\n   */\n  createRendererWithFactory(\n    component: Type<HotCellRendererAdvancedComponent>,\n    componentProps: Record<string, any> = {},\n    register: boolean = false\n  ) {\n    let registered = false;\n\n    return rendererFactory(({\n      instance,\n      td,\n      row,\n      column,\n      prop,\n      value,\n      cellProperties\n    }) => {\n      const properties: BaseRendererParametersObject = {\n        value,\n        instance,\n        td,\n        row,\n        col: column,\n        prop,\n        cellProperties,\n      };\n\n      (cellProperties as any).rendererProps = componentProps;\n\n      // Apply the base renderer so the TD gets the same base classes/attributes as the\n      // createRendererFromComponent path (rendererFactory itself does not call it).\n      baseRenderer.call(this, instance, td, row, column, prop, value, cellProperties);\n\n      this.registerSweepHook(instance);\n\n      if (isAdvancedHotCellRendererComponent(component)) {\n        this.renderComponent(td, component, properties);\n      } else {\n        console.warn(INVALID_ADVANCED_RENDERER_WARNING);\n      }\n\n      if (register && !registered && isAdvancedHotCellRendererComponent(component)) {\n        registerRenderer(component.name, component as any as BaseRenderer);\n        registered = true;\n      }\n    });\n  }\n\n  /**\n   * Destroys all renderer components and embedded views attached to cells within a container element.\n   * Must be called before destroying the Handsontable instance to prevent Angular component leaks.\n   *\n   * @param container - The root DOM element of the Handsontable instance.\n   * @param instance - The Handsontable instance whose registries should be torn down. When omitted\n   *   (e.g. test stubs), only refs reachable through TDs still in the container are destroyed.\n   */\n  cleanupContainer(container: HTMLElement, instance?: Handsontable.Core): void {\n    const compRefs = instance ? this._instanceComponentRefs.get(instance) : undefined;\n    const embViews = instance ? this._instanceEmbeddedViews.get(instance) : undefined;\n\n    container.querySelectorAll<HTMLTableCellElement>('td').forEach((td) => {\n      const compRef = this._tdComponentRefs.get(td);\n      if (compRef) {\n        this.destroyComponent(compRef);\n        this._tdComponentRefs.delete(td);\n        compRefs?.delete(compRef);\n      }\n      const embView = this._tdEmbeddedViews.get(td);\n      if (embView) {\n        this.destroyEmbeddedView(embView);\n        this._tdEmbeddedViews.delete(td);\n        embViews?.delete(embView);\n      }\n    });\n\n    // The loop above only reaches TDs still present in the container. Refs for cells already\n    // dropped from the viewport (but not yet swept) would otherwise be orphaned once this\n    // instance's afterViewRender hook is gone after destroy. Tear down whatever is left and drop\n    // the per-instance registries so a repeated cleanup call is a no-op. (Entries removed in the\n    // loop above are already gone from these sets, so nothing is destroyed twice.)\n    compRefs?.forEach((ref) => this.destroyComponent(ref));\n    embViews?.forEach((view) => this.destroyEmbeddedView(view));\n\n    if (instance) {\n      this._instanceComponentRefs.delete(instance);\n      this._instanceEmbeddedViews.delete(instance);\n    }\n  }\n\n  /**\n   * Registers a one-time `afterViewRender` hook on the given Handsontable instance that sweeps\n   * renderer refs whose TD is no longer connected to the document. Handsontable recycles a pool of\n   * TD elements while virtualizing rows; cells that leave the viewport are never re-rendered, so\n   * without this sweep their Angular components stay attached to ApplicationRef and leak.\n   *\n   * Guarded against instances that do not expose `addHook` (e.g. test stubs).\n   *\n   * @param instance - The Handsontable instance whose render cycle drives the sweep.\n   */\n  private registerSweepHook(instance: Handsontable.Core): void {\n    if (this._hookedInstances.has(instance) || typeof (instance as any)?.addHook !== 'function') {\n      return;\n    }\n\n    this._hookedInstances.add(instance);\n    instance.addHook('afterViewRender', () => this.sweepDetachedViews(instance));\n  }\n\n  /**\n   * Destroys every renderer ref/view tracked for the given instance whose root node is no longer\n   * attached to the document.\n   *\n   * @param instance - The Handsontable instance whose registries should be swept.\n   */\n  private sweepDetachedViews(instance: Handsontable.Core): void {\n    const compRefs = this._instanceComponentRefs.get(instance);\n    compRefs?.forEach((ref) => {\n      if (!this.isViewConnected(ref.hostView as EmbeddedViewRef<any>)) {\n        this.destroyComponent(ref);\n        compRefs.delete(ref);\n      }\n    });\n\n    const embViews = this._instanceEmbeddedViews.get(instance);\n    embViews?.forEach((view) => {\n      if (!this.isViewConnected(view)) {\n        this.destroyEmbeddedView(view);\n        embViews.delete(view);\n      }\n    });\n  }\n\n  /**\n   * @returns True if any of the view's root nodes is still connected to the document.\n   */\n  private isViewConnected(view: EmbeddedViewRef<any>): boolean {\n    return view.rootNodes.some((node: Node) => !!node?.isConnected);\n  }\n\n  /**\n   * Destroys the renderer ref/view previously attached to a cell and clears the cell content,\n   * so a fresh renderer can take over the TD without leaking the old one.\n   *\n   * @param instance - The Handsontable instance owning the cell, used to update its registries.\n   * @param td - The table cell whose previous content should be torn down.\n   */\n  private replaceCellContent(instance: Handsontable.Core, td: HTMLTableCellElement): void {\n    const prevRef = this._tdComponentRefs.get(td);\n    if (prevRef) {\n      this.destroyComponent(prevRef);\n      this._tdComponentRefs.delete(td);\n      this._instanceComponentRefs.get(instance)?.delete(prevRef);\n    }\n\n    const prevView = this._tdEmbeddedViews.get(td);\n    if (prevView) {\n      this.destroyEmbeddedView(prevView);\n      this._tdEmbeddedViews.delete(td);\n      this._instanceEmbeddedViews.get(instance)?.delete(prevView);\n    }\n\n    td.innerHTML = '';\n  }\n\n  /**\n   * Tracks a component ref both by its TD (for fast replacement) and in the instance registry\n   * (for sweeping and full teardown).\n   */\n  private trackComponentRef(\n    instance: Handsontable.Core, td: HTMLTableCellElement, ref: ComponentRef<any>\n  ): void {\n    this._tdComponentRefs.set(td, ref);\n    this.registryFor(this._instanceComponentRefs, instance).add(ref);\n  }\n\n  /**\n   * Tracks an embedded view both by its TD (for fast replacement) and in the instance registry\n   * (for sweeping and full teardown).\n   */\n  private trackEmbeddedView(\n    instance: Handsontable.Core, td: HTMLTableCellElement, view: EmbeddedViewRef<any>\n  ): void {\n    this._tdEmbeddedViews.set(td, view);\n    this.registryFor(this._instanceEmbeddedViews, instance).add(view);\n  }\n\n  /**\n   * Returns the per-instance registry set for the given instance, creating it on first use.\n   */\n  private registryFor<T>(registry: WeakMap<Handsontable.Core, Set<T>>, instance: Handsontable.Core): Set<T> {\n    let set = registry.get(instance);\n    if (!set) {\n      set = new Set<T>();\n      registry.set(instance, set);\n    }\n    return set;\n  }\n\n  /**\n   * Attaches an embedded view created from a TemplateRef to a given DOM element.\n   *\n   * @param template - The TemplateRef to create an embedded view from.\n   * @param tdEl - The target DOM element (a table cell) to which the view will be appended.\n   * @param properties - Context object providing properties to be used within the template.\n   * @returns The created EmbeddedViewRef so the caller can track and destroy it later.\n   */\n  private attachTemplateToElement(\n    template: TemplateRef<any>, tdEl: HTMLTableCellElement, properties: BaseRendererParametersObject\n  ): EmbeddedViewRef<any> {\n    const embeddedView: EmbeddedViewRef<any> = template.createEmbeddedView({\n      $implicit: properties.value,\n      ...properties,\n    });\n    embeddedView.detectChanges();\n\n    embeddedView.rootNodes.forEach((node) => {\n      tdEl.appendChild(node);\n    });\n\n    return embeddedView;\n  }\n\n  /**\n   * Dynamically creates an Angular component of the given type.\n   *\n   * @param component - The Angular component type to be created.\n   * @param rendererParameters - An object containing input properties to assign to the component instance.\n   * @returns The ComponentRef of the dynamically created component.\n   */\n  private createComponent<T extends HotCellRendererBase>(\n    component: Type<T>,\n    rendererParameters: BaseRendererParametersObject\n  ): ComponentRef<T> {\n    const componentRef = createComponent(component, {\n      environmentInjector: this.environmentInjector,\n    });\n\n    this.applyInputs(componentRef, rendererParameters);\n    componentRef.changeDetectorRef.detectChanges();\n\n    this.appRef.attachView(componentRef.hostView);\n\n    return componentRef;\n  }\n\n  /**\n   * Renders an Angular component into the given cell, recycling the component already attached to\n   * the TD when it is of the same type. Handsontable recycles its pool of TD elements heavily while\n   * virtualizing rows, so recreating an Angular component on every re-render would cause needless\n   * teardown/instantiation churn and GC pressure. When the type matches we only refresh the inputs.\n   *\n   * @param td - The target table cell.\n   * @param component - The renderer component type to render.\n   * @param properties - The renderer parameters to feed as component inputs.\n   */\n  private renderComponent<T extends HotCellRendererBase>(\n    td: HTMLTableCellElement,\n    component: Type<T>,\n    properties: BaseRendererParametersObject\n  ): void {\n    const prevRef = this._tdComponentRefs.get(td);\n\n    if (\n      prevRef &&\n      prevRef.componentType === component &&\n      this.isViewConnected(prevRef.hostView as EmbeddedViewRef<any>)\n    ) {\n      this.applyInputs(prevRef, properties);\n      prevRef.changeDetectorRef.detectChanges();\n      return;\n    }\n\n    this.replaceCellContent(properties.instance, td);\n    const componentRef = this.createComponent(component, properties);\n    this.attachComponentToElement(componentRef, td);\n    this.trackComponentRef(properties.instance, td, componentRef);\n  }\n\n  /**\n   * Assigns every renderer parameter as an input on the given component ref.\n   *\n   * @param componentRef - The component ref whose inputs should be set.\n   * @param rendererParameters - The renderer parameters to assign.\n   */\n  private applyInputs<T>(componentRef: ComponentRef<T>, rendererParameters: BaseRendererParametersObject): void {\n    RENDERER_INPUT_KEYS.forEach((key) => {\n      componentRef.setInput(key, rendererParameters[key]);\n    });\n  }\n\n  /**\n   * Attaches a dynamically created component's view to a specified DOM container element.\n   *\n   * @param componentRef - The reference to the dynamically created component.\n   * @param container - The target DOM element to which the component's root node will be appended.\n   */\n  private attachComponentToElement<T>(componentRef: ComponentRef<T>, container: HTMLElement): void {\n    (componentRef.hostView as EmbeddedViewRef<T>).rootNodes.forEach((node) => {\n      container.appendChild(node);\n    });\n  }\n\n  /**\n   * Destroys a dynamically created component and detaches its view from the Angular application.\n   *\n   * Idempotent: a TD recycled after `sweepDetachedViews` already destroyed its ref still maps to that\n   * stale ref in `_tdComponentRefs`, so the next render path may reach this with an already-destroyed\n   * ref. Guarding on `destroyed` skips the redundant detach/destroy instead of relying on Angular's\n   * internal no-op behaviour.\n   *\n   * @param componentRef - The reference to the component to be destroyed.\n   */\n  destroyComponent<T>(componentRef: ComponentRef<T>): void {\n    const hostView = componentRef.hostView as EmbeddedViewRef<T>;\n    if (hostView.destroyed) {\n      return;\n    }\n    this.appRef.detachView(hostView);\n    componentRef.destroy();\n  }\n\n  /**\n   * Destroys an embedded view. Idempotent for the same reason as {@link destroyComponent}: a recycled\n   * TD can still map to an already-destroyed view in `_tdEmbeddedViews`.\n   *\n   * @param view - The embedded view to destroy.\n   */\n  private destroyEmbeddedView(view: EmbeddedViewRef<any>): void {\n    if (view.destroyed) {\n      return;\n    }\n    view.destroy();\n  }\n}\n","import { ComponentRef, createComponent, EnvironmentInjector, Injectable, NgZone, TemplateRef, Type } from '@angular/core';\nimport { DynamicComponentService } from '../renderer/hot-dynamic-renderer-component.service';\nimport { BaseEditorAdapter } from '../editor/base-editor-adapter';\nimport { GridSettings, GridSettingsInternal } from '../models/grid-settings';\nimport { CustomValidatorFn, ColumnSettings, ColumnSettingsInternal } from '../models/column-settings';\nimport { HotCellRendererComponent } from '../renderer/hot-cell-renderer.component';\nimport { HotCellEditorComponent } from '../editor/hot-cell-editor.component';\nimport Handsontable from 'handsontable/base';\nimport { FactoryEditorAdapter } from '../editor/editor-factory-adapter';\nimport { HotCellRendererAdvancedComponent } from '../renderer/hot-cell-renderer-advanced.component';\nimport { HotCellEditorAdvancedComponent } from '../editor/hot-cell-editor-advanced.component';\n\nconst AVAILABLE_HOOKS_SET = new Set<string>(Handsontable.hooks.getRegistered());\nconst HOT_ZONE_WRAPPED = Symbol('hotZoneWrapped');\n\n/**\n * Service to resolve and apply custom settings for Handsontable settings object.\n */\n@Injectable()\nexport class HotSettingsResolver {\n  constructor(\n    private readonly dynamicComponentService: DynamicComponentService,\n    private readonly environmentInjector: EnvironmentInjector,\n    private readonly ngZone: NgZone,\n  ) {}\n\n  /**\n   * Applies custom settings to the provided GridSettings.\n   * @param settings The original grid settings.\n   * @param previousColumns The previously resolved columns (from the prior settings cycle). When\n   *   supplied, an editor component already created for a column whose editor type is unchanged is\n   *   recycled instead of being recreated, avoiding needless Angular component teardown/rebuild.\n   * @returns The merged grid settings with custom settings applied.\n   */\n  applyCustomSettings(settings: GridSettings, previousColumns?: ColumnSettings[]): GridSettingsInternal {\n    // Shallow-clone the user settings (and each column) before mutating. Otherwise we would\n    // write generated renderers/editors and `_editorComponentReference` straight onto the\n    // caller's objects. When the same settings/columns are shared across two <hot-table>\n    // instances, the second resolution would overwrite the first instance's editor refs,\n    // leaking them and cross-wiring a single editor component between tables.\n    const mergedSettings: GridSettings = { ...settings };\n\n    if (Array.isArray(mergedSettings.columns)) {\n      mergedSettings.columns = mergedSettings.columns.map((column) => ({ ...column }));\n    }\n\n    this.updateColumnRendererForGivenCustomRenderer(mergedSettings);\n    this.updateColumnEditorForGivenCustomEditor(mergedSettings, previousColumns);\n    this.updateColumnValidatorForGivenCustomValidator(mergedSettings);\n\n    this.wrapHooksInNgZone(mergedSettings);\n\n    return mergedSettings as GridSettingsInternal;\n  }\n\n  /**\n   * Ensures that hook callbacks in the provided grid settings run inside Angular's zone.\n   *\n   * @param settings The original grid settings.\n   */\n  private wrapHooksInNgZone(settings: GridSettings): void {\n    const ngZone = this.ngZone;\n\n    // Iterate only the keys actually present in settings instead of all ~100 registered HOT hooks.\n    Object.keys(settings).forEach((key) => {\n      if (!AVAILABLE_HOOKS_SET.has(key)) {\n        return;\n      }\n      const option = settings[key];\n\n      if (typeof option === 'function' && !(option as any)[HOT_ZONE_WRAPPED]) {\n        const wrapped = function (...args: any) {\n          return ngZone.run(() => option.apply(this, args));\n        };\n        (wrapped as any)[HOT_ZONE_WRAPPED] = true;\n        settings[key] = wrapped;\n      }\n    });\n  }\n\n  /**\n   * Updates the column renderer for columns with a custom renderer.\n   * @param mergedSettings The merged grid settings.\n   */\n  private updateColumnRendererForGivenCustomRenderer(mergedSettings: GridSettings): void {\n    if (!Array.isArray(mergedSettings?.columns)) {\n      return;\n    }\n\n    (mergedSettings?.columns as ColumnSettings[])\n      ?.filter((settings) => this.isCustomRenderer(settings.renderer))\n      ?.forEach((cellSettings) => {\n        const renderer = cellSettings.renderer;\n        const props: any = cellSettings.rendererProps ?? {};\n\n        if (this.isAdvancedRendererComponentRefType(renderer)) {\n          cellSettings.renderer = this.dynamicComponentService.createRendererWithFactory(renderer, props);\n        } else if (this.isRendererComponentRefType(renderer) || this.isTemplateRef(renderer)) {\n          cellSettings.renderer = this.dynamicComponentService.createRendererFromComponent(renderer, props);\n        }\n      });\n  }\n\n  /**\n   * Updates the column editor for columns with a custom editor.\n   *\n   * Iterates by original column index (not a filtered subset) so each column can be matched against\n   * the column at the same index in `previousColumns` for editor-component recycling.\n   *\n   * @param mergedSettings The merged grid settings.\n   * @param previousColumns The previously resolved columns, used to recycle editor components.\n   */\n  private updateColumnEditorForGivenCustomEditor(mergedSettings: GridSettings, previousColumns?: ColumnSettings[]): void {\n    if (!Array.isArray(mergedSettings?.columns)) {\n      return;\n    }\n\n    (mergedSettings.columns as ColumnSettings[]).forEach((cellSettings, index) => {\n      const isAdvanced = this.isAdvancedEditorComponentRefType(cellSettings.editor);\n      const isBasic = this.isEditorComponentRefType(cellSettings.editor);\n\n      if (!isAdvanced && !isBasic) {\n        return;\n      }\n\n      const editorType = cellSettings.editor as Type<HotCellEditorComponent<any>> | Type<HotCellEditorAdvancedComponent<any>>;\n      const reusableRef = this.reusableEditorRef(previousColumns?.[index], cellSettings, editorType);\n      const internalSettings = cellSettings as ColumnSettingsInternal;\n\n      // Recycle the editor component from the previous settings cycle when the same editor type\n      // sits at the same column index AND the same logical column (by `data`) still occupies it.\n      // Recreating it on every settings change would tear down and rebuild an Angular component\n      // (and its DOM/internal state) for no reason. The reused ref is carried into the new column;\n      // HotTableComponent.ngOnChanges detects it by identity and skips destroying it.\n      const component = reusableRef ?? createComponent(editorType as Type<any>, {\n        environmentInjector: this.environmentInjector,\n      });\n\n      internalSettings._editorComponentReference = component as ComponentRef<HotCellEditorComponent<any>>;\n\n      if (isAdvanced) {\n        cellSettings.editor = FactoryEditorAdapter(component as ComponentRef<HotCellEditorAdvancedComponent<any>>);\n      } else {\n        internalSettings._environmentInjector = this.environmentInjector;\n        cellSettings.editor = BaseEditorAdapter;\n      }\n    });\n  }\n\n  /**\n   * Returns the previous column's editor component ref when it can be reused for the new column, or\n   * `undefined` to signal a fresh component is needed.\n   *\n   * A ref is only recycled when, at the same index, both the editor component type AND the logical\n   * column identity (its `data` binding) are unchanged. The component-type check alone would already\n   * be functionally safe — a Handsontable editor is not per-cell rendered state but a single\n   * on-demand component that `BaseEditorAdapter`/`FactoryEditorAdapter` re-prepare on every edit\n   * (`prepare()` re-reads the ref from the *current* column meta and `applyPropsToEditor()` re-applies\n   * the full cell context on each `open()`). The extra `data` check is a defensive guard: when columns\n   * are reordered/shortened so a *different* logical column lands on an index, we build a fresh editor\n   * rather than carry the previous column's instance over, so no custom editor that caches\n   * column-specific config at construction can leak stale state into the new cell.\n   *\n   * @param previousColumn The column at the same index in the previous settings cycle.\n   * @param currentColumn The column now occupying this index.\n   * @param editorType The editor component type requested for the new column.\n   */\n  private reusableEditorRef(\n    previousColumn: ColumnSettings | undefined,\n    currentColumn: ColumnSettings,\n    editorType: Type<unknown>\n  ): ComponentRef<any> | undefined {\n    const previousRef = (previousColumn as ColumnSettingsInternal | undefined)?._editorComponentReference;\n\n    if (!previousRef || previousRef.componentType !== editorType) {\n      return undefined;\n    }\n\n    // Same logical column still occupies this index. Columns without a `data` binding are identified\n    // purely by position, so two `undefined` data values compare equal and recycle as before.\n    const sameLogicalColumn =\n      (previousColumn as Handsontable.ColumnSettings | undefined)?.data ===\n      (currentColumn as Handsontable.ColumnSettings).data;\n\n    return sameLogicalColumn ? previousRef : undefined;\n  }\n\n  /**\n   * Updates the column validator for columns with a custom validator.\n   * @param mergedSettings The merged grid settings.\n   */\n  private updateColumnValidatorForGivenCustomValidator(mergedSettings: GridSettings): void {\n    if (!Array.isArray(mergedSettings?.columns)) {\n      return;\n    }\n\n    (mergedSettings?.columns as ColumnSettings[])\n      ?.filter((settings) => this.isCustomValidatorFn(settings.validator))\n      ?.forEach((cellSettings) => {\n        const customValidatorFn = cellSettings.validator as CustomValidatorFn<any>;\n\n        cellSettings.validator = (value: any, callback: (result: boolean) => void) => {\n          callback(customValidatorFn(value));\n        };\n      });\n  }\n\n  private isCustomValidatorFn(validator: unknown): validator is CustomValidatorFn<any> {\n    return typeof validator === 'function' && validator.length === 1;\n  }\n\n  private isEditorComponentRefType(editor: any): editor is Type<HotCellEditorComponent<any>> {\n    // ecmp - we need it to check if the editor is a component\n    return typeof editor === 'function' &&\n      !!(editor as any)?.ɵcmp &&\n      (editor as any)?.EDITOR_MARKER === HotCellEditorComponent.EDITOR_MARKER;\n  }\n\n  private isAdvancedEditorComponentRefType(editor: any): editor is Type<HotCellEditorAdvancedComponent<any>> {\n    // ecmp - we need it to check if the editor is a component\n    return typeof editor === 'function' &&\n      !!(editor as any)?.ɵcmp &&\n      (editor as any)?.EDITOR_MARKER === HotCellEditorAdvancedComponent.EDITOR_MARKER;\n  }\n\n  private isRendererComponentRefType(renderer: any): renderer is Type<HotCellRendererComponent<any, any>> {\n    // ecmp - we need it to check if the renderer is a component\n    return typeof renderer === 'function' &&\n      !!(renderer as any)?.ɵcmp &&\n      (renderer as any)?.RENDERER_MARKER === HotCellRendererComponent.RENDERER_MARKER;\n  }\n\n  private isAdvancedRendererComponentRefType(renderer: any): renderer is Type<HotCellRendererAdvancedComponent<any, any>> {\n    // ecmp - we need it to check if the renderer is a component\n    return typeof renderer === 'function' &&\n      !!(renderer as any)?.ɵcmp &&\n      (renderer as any)?.RENDERER_MARKER === HotCellRendererAdvancedComponent.RENDERER_MARKER;\n  }\n\n  private isTemplateRef(renderer: any): renderer is TemplateRef<any> {\n    return renderer && typeof renderer.createEmbeddedView === 'function';\n  }\n\n  private isCustomRenderer(renderer: any): renderer is Type<HotCellRendererComponent<any, any>> |\n    TemplateRef<any> |\n    Type<HotCellRendererAdvancedComponent<any, any>> {\n    return this.isRendererComponentRefType(renderer) ||\n      this.isTemplateRef(renderer) ||\n      this.isAdvancedRendererComponentRefType(renderer);\n  }\n}\n","import {Injectable, InjectionToken, Inject} from '@angular/core';\nimport {BehaviorSubject, Observable} from 'rxjs';\n\n/**\n * A constant representing the non-commercial and evaluation license.\n * */\nexport const NON_COMMERCIAL_LICENSE = 'non-commercial-and-evaluation';\n\n/**\n * Type representing a theme name.\n * Possible values include predefined themes and any custom string.\n */\nexport enum PredefinedTheme {\n  Main = 'ht-theme-main',\n  MainDark = 'ht-theme-main-dark',\n  MainDarkAuto = 'ht-theme-main-dark-auto',\n  Horizon = 'ht-theme-horizon',\n  HorizonDark = 'ht-theme-horizon-dark',\n  HorizonDarkAuto = 'ht-theme-horizon-dark-auto'\n}\n\nexport type ThemeName = PredefinedTheme | string;\n\n/**\n * Interface for the Handsontable global configuration.\n */\nexport interface HotGlobalConfig {\n  /**\n   * The license key for Handsontable.\n   */\n  license?: string;\n\n  /**\n   * The name of the theme to be used.\n   */\n  themeName?: ThemeName;\n\n  /**\n   * The theme to be used (ThemeBuilder instance or theme name string).\n   * When set, takes precedence over `themeName` for Handsontable 17+.\n   */\n  theme?: object | string;\n\n  /**\n   * The language code to be used for localization.\n   * For example, 'en-US', 'pl-PL', etc.\n   * **Note:** The language must be chosen from the languages supported by Handsontable and registered in the application.\n   */\n  language?: string;\n\n  /**\n   * The layout direction for the Handsontable instance.\n   * This property defines whether the layout should be left-to-right ('ltr'), right-to-left ('rtl'),\n   * or inherit the direction from the parent element ('inherit').\n   */\n  layoutDirection?: 'ltr' | 'rtl' | 'inherit';\n}\n\n/**\n * Injection token for providing a global default configuration.\n */\nexport const HOT_GLOBAL_CONFIG = new InjectionToken<HotGlobalConfig>('HOT_GLOBAL_CONFIG', {\n  providedIn: 'root',\n  factory: () => ({})\n});\n\n/**\n * Service for configuring Handsontable settings.\n * This service allows setting and retrieving global configuration.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class HotGlobalConfigService {\n\n  /**\n   * The default configuration object for Handsontable.\n   *\n   * This object is used as the initial value for the configuration BehaviorSubject.\n   * It can be overridden by a global configuration provided through the\n   * {@link HOT_GLOBAL_CONFIG} injection token.\n   *\n   * @private\n   * @type {HotGlobalConfig}\n   */\n  private defaultConfig: HotGlobalConfig = {};\n\n  /**\n   * A BehaviorSubject that holds the current Handsontable configuration.\n   *\n   * New configuration values can be emitted by calling next() on this subject.\n   * This allows subscribers to react to configuration changes dynamically.\n   *\n   * @private\n   * @type {BehaviorSubject<HotGlobalConfig>}\n   */\n  private configSubject = new BehaviorSubject<HotGlobalConfig>(this.defaultConfig);\n\n  /**\n   * An Observable stream of the current Handsontable configuration.\n   *\n   * Components can subscribe to this observable to receive updates whenever the configuration changes.\n   *\n   * @returns The configuration as an observable stream.\n   */\n  get config$(): Observable<HotGlobalConfig> {\n    return this.configSubject.asObservable();\n  }\n\n  constructor(\n    @Inject(HOT_GLOBAL_CONFIG) globalConfig: HotGlobalConfig\n  ) {\n    // Merge global configuration (if provided) into defaultConfig immutably.\n    this.defaultConfig = { ...this.defaultConfig, ...globalConfig };\n    this.configSubject.next(this.defaultConfig);\n  }\n\n  /**\n   * Sets the global configuration for Handsontable.\n   *\n   * @param config - An object containing configuration options.\n   *                 Each Handsontable instance can override this configuration by providing its own settings.\n   */\n  setConfig(config: HotGlobalConfig) {\n    this.configSubject.next({ ...this.defaultConfig, ...config });\n  }\n\n  /**\n   * Retrieves the current Handsontable configuration.\n   *\n   * @returns An object with the current settings.\n   */\n  getConfig(): HotGlobalConfig {\n    return this.configSubject.value;\n  }\n\n  /**\n   * Resets the configuration to the default settings.\n   * This method updates the configuration BehaviorSubject with the default configuration.\n   */\n  resetConfig(): void {\n    this.configSubject.next({ ...this.defaultConfig });\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  DestroyRef,\n  ElementRef,\n  EnvironmentInjector,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n  inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport Handsontable from 'handsontable/base';\nimport { HotSettingsResolver } from './services/hot-settings-resolver.service';\nimport { HotGlobalConfigService } from './services/hot-global-config.service';\nimport { GridSettings } from './models/grid-settings';\nimport { DynamicComponentService } from './renderer/hot-dynamic-renderer-component.service';\nimport { HotInstanceWithAngularInjector } from './editor/models/factory-editor-properties';\nimport { skip } from 'rxjs/operators';\n\nexport const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be' + ' used properly.';\n\n@Component({\n  selector: 'hot-table',\n  template: '<div #container></div>',\n  encapsulation: ViewEncapsulation.None,\n  providers: [HotSettingsResolver],\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n    `,\n  ],\n})\nexport class HotTableComponent implements AfterViewInit, OnChanges, OnDestroy {\n  // component inputs\n  /** The data for the Handsontable instance. */\n  @Input() data: Handsontable.GridSettings['data'] | null = null;\n  /** The settings for the Handsontable instance. */\n  @Input() settings: GridSettings = {};\n\n  /** The container element for the Handsontable instance. */\n  @ViewChild('container', { static: false })\n  public container: ElementRef<HTMLDivElement>;\n\n  /** The Handsontable instance. */\n  private __hotInstance: Handsontable | null = null;\n  private readonly _destroyRef = inject(DestroyRef);\n\n  constructor(\n    private _hotSettingsResolver: HotSettingsResolver,\n    private _hotConfig: HotGlobalConfigService,\n    public ngZone: NgZone,\n    private readonly environmentInjector: EnvironmentInjector,\n    private readonly _dynamicComponentService: DynamicComponentService\n  ) {}\n\n  /**\n   * Gets the Handsontable instance.\n   * @returns The Handsontable instance or `null` if it's not yet been created or has been destroyed.\n   */\n  public get hotInstance(): Handsontable | null {\n    if (!this.__hotInstance || !this.__hotInstance.isDestroyed) {\n      // Will return the Handsontable instance or `null` if it's not yet been created.\n      return this.__hotInstance;\n    } else {\n      console.warn(HOT_DESTROYED_WARNING);\n      return null;\n    }\n  }\n\n  /**\n   * Sets the Handsontable instance.\n   * @param hotInstance The Handsontable instance to set.\n   */\n  private set hotInstance(hotInstance) {\n    this.__hotInstance = hotInstance;\n  }\n\n  /**\n   * Initializes the Handsontable instance after the view has been initialized.\n   * The initial settings of the table are also prepared here\n   */\n  ngAfterViewInit(): void {\n    let options: Handsontable.GridSettings = this._hotSettingsResolver.applyCustomSettings(this.settings);\n\n    const negotiatedSettings = this.getNegotiatedSettings(options);\n    options = { ...options, ...negotiatedSettings, ...(this.data != null ? { data: this.data } : {}) };\n\n    this.ngZone.runOutsideAngular(() => {\n      this.hotInstance = new Handsontable.Core(this.container.nativeElement, options);\n\n      (this.hotInstance as HotInstanceWithAngularInjector)._angularEnvironmentInjector = this.environmentInjector;\n\n      this.hotInstance.init();\n    });\n\n    this._hotConfig.config$.pipe(skip(1), takeUntilDestroyed(this._destroyRef)).subscribe((config) => {\n      if (this.hotInstance) {\n        const negotiatedSettings = this.getNegotiatedSettings(this.settings);\n        this.updateHotTable(negotiatedSettings);\n      }\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.hotInstance === null) {\n      return;\n    }\n\n    if (changes.settings && !changes.settings.firstChange) {\n      // Capture old editor refs before applying new settings so HOT can close any active editor first.\n      const prevColumns = this.__hotInstance?.getSettings().columns;\n      const prevColumnsArray = Array.isArray(prevColumns) ? prevColumns : undefined;\n\n      // Pass the previous columns so unchanged editor types recycle their existing component\n      // instead of creating a fresh one on every settings change.\n      const newOptions: Handsontable.GridSettings = this._hotSettingsResolver.applyCustomSettings(\n        changes.settings.currentValue,\n        prevColumnsArray\n      );\n\n      // updateHotTable closes any active editor via HOT.updateSettings before we destroy old refs.\n      this.updateHotTable(newOptions);\n\n      // Only destroy old editor refs when new settings actually replace columns.\n      // If newOptions has no columns, HOT keeps the old column objects active — destroying\n      // their refs would crash FactoryEditorAdapter / BaseEditorAdapter on next edit.\n      if (prevColumnsArray && Array.isArray(newOptions.columns)) {\n        // Refs recycled into the new columns must survive — destroy only the ones left behind.\n        const reusedRefs = new Set(\n          newOptions.columns\n            .map((column) => column._editorComponentReference)\n            .filter((ref): ref is NonNullable<typeof ref> => !!ref)\n        );\n\n        prevColumnsArray.forEach((column) => {\n          if (column._editorComponentReference && !reusedRefs.has(column._editorComponentReference)) {\n            column._editorComponentReference.destroy();\n          }\n        });\n      }\n    }\n\n    if (changes.data && !changes.data.firstChange) {\n      this.hotInstance?.updateData(changes.data.currentValue);\n    }\n  }\n\n  /**\n   * Destroys the Handsontable instance and clears the columns from custom editors.\n   */\n  ngOnDestroy(): void {\n    this.ngZone.runOutsideAngular(() => {\n      if (!this.__hotInstance || this.__hotInstance.isDestroyed) {\n        return;\n      }\n\n      // Destroy renderer Angular components attached to table cells before HOT removes the DOM.\n      if (this.container) {\n        this._dynamicComponentService.cleanupContainer(this.container.nativeElement, this.__hotInstance);\n      }\n\n      const columns = this.__hotInstance.getSettings().columns;\n\n      if (columns && Array.isArray(columns)) {\n        columns.forEach((column) => {\n          if (column._editorComponentReference) {\n            column._editorComponentReference.destroy();\n          }\n        });\n      }\n\n      this.__hotInstance.destroy();\n    });\n  }\n\n  /**\n   * Updates the Handsontable instance with new settings.\n   * @param newSettings The new settings to apply to the Handsontable instance.\n   */\n  private updateHotTable(newSettings: Handsontable.GridSettings): void {\n    if (!this.hotInstance) {\n      return;\n    }\n\n    const initOnlySettingKeys = new Set<string>(\n      (this.hotInstance.getSettings() as any)?._initOnlySettings ?? []\n    );\n    const filteredSettings: Handsontable.GridSettings = {};\n\n    for (const key of Object.keys(newSettings)) {\n      if (!initOnlySettingKeys.has(key)) {\n        (filteredSettings as any)[key] = (newSettings as any)[key];\n      }\n    }\n\n    this.ngZone.runOutsideAngular(() => {\n      this.hotInstance?.updateSettings(filteredSettings, false);\n    });\n  }\n\n  /**\n   * Merges the provided Handsontable grid settings with the global configuration.\n   *\n   * This method retrieves the global configuration from the HotGlobalConfigService and negotiates the final\n   * Handsontable settings by giving precedence to the provided settings.\n   * Additionally, the `layoutDirection` is only merged if the Handsontable instance has not yet been initialized.\n   *\n   * @param settings - The grid settings provided by the user or component.\n   * @returns The final negotiated grid settings after merging with global defaults.\n   */\n  private getNegotiatedSettings(settings: GridSettings): Handsontable.GridSettings {\n    const hotConfig = this._hotConfig.getConfig();\n    const negotiatedSettings: Handsontable.GridSettings = {};\n\n    negotiatedSettings.licenseKey = settings.licenseKey ?? hotConfig.license;\n    negotiatedSettings.language = settings.language ?? hotConfig.language;\n\n    const theme = settings.theme ?? hotConfig.theme;\n    const themeName = settings.themeName ?? hotConfig.themeName;\n\n    if (theme !== undefined) {\n      negotiatedSettings.theme = theme as Handsontable.GridSettings['theme'];\n    } else if (themeName) {\n      negotiatedSettings.themeName = themeName;\n    }\n\n    // settings that can be set only before the Handsontable instance is initialized\n    if (!this.__hotInstance) {\n      negotiatedSettings.layoutDirection = settings.layoutDirection ?? hotConfig.layoutDirection;\n    }\n\n    return negotiatedSettings;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { HotTableComponent } from './hot-table.component';\n\n@NgModule({\n  imports: [HotTableComponent],\n  exports: [HotTableComponent],\n})\nexport class HotTableModule {\n  static readonly version = '18.0.0';\n}\n","/*\n * Public API Surface of hot-table\n */\n\nexport * from './lib/hot-table.component';\nexport * from './lib/services/hot-settings-resolver.service';\nexport * from './lib/hot-table.module';\nexport * from './lib/services/hot-global-config.service';\nexport * from './lib/renderer/hot-dynamic-renderer-component.service';\nexport * from './lib/renderer/hot-cell-renderer.component';\nexport * from './lib/editor/hot-cell-editor.component';\nexport * from './lib/renderer/hot-cell-renderer-advanced.component';\nexport * from './lib/editor/hot-cell-editor-advanced.component';\nexport * from './lib/editor/models/keyboard-shortcut-config';\nexport { GridSettings } from './lib/models/grid-settings';\nexport { ColumnSettings, CustomValidatorFn } from './lib/models/column-settings';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DynamicComponentService","i1.HotSettingsResolver","i2.HotGlobalConfigService","i3.DynamicComponentService"],"mappings":"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"}