{"version":3,"file":"gridstack-angular.mjs","sources":["../../../angular/projects/lib/src/lib/types.ts","../../../angular/projects/lib/src/lib/base-widget.ts","../../../angular/projects/lib/src/lib/gridstack-item.component.ts","../../../angular/projects/lib/src/lib/gridstack.component.ts","../../../angular/projects/lib/src/lib/gridstack.module.ts","../../../angular/projects/lib/src/index.ts","../../../angular/projects/lib/src/gridstack-angular.ts"],"sourcesContent":["/**\r\n * gridstack-item.component.ts 12.6.0\r\n * Copyright (c) 2025 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { GridStackNode, GridStackOptions, GridStackWidget } from \"gridstack\";\r\n\r\n/**\r\n * Extended GridStackWidget interface for Angular integration.\r\n * Adds Angular-specific properties for dynamic component creation.\r\n */\r\nexport interface NgGridStackWidget extends GridStackWidget {\r\n  /** Angular component selector for dynamic creation (e.g., 'my-widget') */\r\n  selector?: string;\r\n  /** Serialized data for component @Input() properties */\r\n  input?: NgCompInputs;\r\n  /** Configuration for nested sub-grids */\r\n  subGridOpts?: NgGridStackOptions;\r\n}\r\n\r\n/**\r\n * Extended GridStackNode interface for Angular integration.\r\n * Adds component selector for dynamic content creation.\r\n */\r\nexport interface NgGridStackNode extends GridStackNode {\r\n  /** Angular component selector for this node's content */\r\n  selector?: string;\r\n}\r\n\r\n/**\r\n * Extended GridStackOptions interface for Angular integration.\r\n * Supports Angular-specific widget definitions and nested grids.\r\n */\r\nexport interface NgGridStackOptions extends GridStackOptions {\r\n  /** Array of Angular widget definitions for initial grid setup */\r\n  children?: NgGridStackWidget[];\r\n  /** Configuration for nested sub-grids (Angular-aware) */\r\n  subGridOpts?: NgGridStackOptions;\r\n}\r\n\r\n/**\r\n * Type for component input data serialization.\r\n * Maps @Input() property names to their values for widget persistence.\r\n *\r\n * @example\r\n * ```typescript\r\n * const inputs: NgCompInputs = {\r\n *   title: 'My Widget',\r\n *   value: 42,\r\n *   config: { enabled: true }\r\n * };\r\n * ```\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type NgCompInputs = {[key: string]: any};\r\n","/**\r\n * gridstack-item.component.ts 12.6.0\r\n * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license\r\n */\r\n\r\n/**\r\n * Abstract base class that all custom widgets should extend.\r\n *\r\n * This class provides the interface needed for GridstackItemComponent to:\r\n * - Serialize/deserialize widget data\r\n * - Save/restore widget state\r\n * - Integrate with Angular lifecycle\r\n *\r\n * Extend this class when creating custom widgets for dynamic grids.\r\n *\r\n * @example\r\n * ```typescript\r\n * @Component({\r\n *   selector: 'my-custom-widget',\r\n *   template: '<div>{{data}}</div>'\r\n * })\r\n * export class MyCustomWidget extends BaseWidget {\r\n *   @Input() data: string = '';\r\n *\r\n *   serialize() {\r\n *     return { data: this.data };\r\n *   }\r\n * }\r\n * ```\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { NgCompInputs, NgGridStackWidget } from './types';\r\n\r\n/**\r\n * Base widget class for GridStack Angular integration.\r\n */\r\n@Injectable()\r\nexport abstract class BaseWidget {\r\n\r\n  /**\r\n   * Complete widget definition including position, size, and Angular-specific data.\r\n   * Populated automatically when the widget is loaded or saved.\r\n   */\r\n  public widgetItem?: NgGridStackWidget;\r\n\r\n  /**\r\n   * Override this method to return serializable data for this widget.\r\n   *\r\n   * Return an object with properties that map to your component's @Input() fields.\r\n   * The selector is handled automatically, so only include component-specific data.\r\n   *\r\n   * @returns Object containing serializable component data\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * serialize() {\r\n   *   return {\r\n   *     title: this.title,\r\n   *     value: this.value,\r\n   *     settings: this.settings\r\n   *   };\r\n   * }\r\n   * ```\r\n   */\r\n  public serialize(): NgCompInputs | undefined  { return; }\r\n\r\n  /**\r\n   * Override this method to handle widget restoration from saved data.\r\n   *\r\n   * Use this for complex initialization that goes beyond simple @Input() mapping.\r\n   * The default implementation automatically assigns input data to component properties.\r\n   *\r\n   * @param w The saved widget data including input properties\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * deserialize(w: NgGridStackWidget) {\r\n   *   super.deserialize(w); // Call parent for basic setup\r\n   *\r\n   *   // Custom initialization logic\r\n   *   if (w.input?.complexData) {\r\n   *     this.processComplexData(w.input.complexData);\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  public deserialize(w: NgGridStackWidget)  {\r\n    // save full description for meta data\r\n    this.widgetItem = w;\r\n    if (!w) return;\r\n\r\n    if (w.input)  Object.assign(this, w.input);\r\n  }\r\n}\r\n","/**\n * gridstack-item.component.ts 12.6.0\n * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license\n */\n\nimport { Component, ElementRef, Input, ViewChild, ViewContainerRef, OnDestroy, ComponentRef } from '@angular/core';\nimport { GridItemHTMLElement, GridStackNode } from 'gridstack';\nimport { BaseWidget } from './base-widget';\n\n/**\n * Extended HTMLElement interface for grid items.\n * Stores a back-reference to the Angular component for integration.\n */\nexport interface GridItemCompHTMLElement extends GridItemHTMLElement {\n  /** Back-reference to the Angular GridStackItem component */\n  _gridItemComp?: GridstackItemComponent;\n}\n\n/**\n * Angular component wrapper for individual GridStack items.\n *\n * This component represents a single grid item and handles:\n * - Dynamic content creation and management\n * - Integration with parent GridStack component\n * - Component lifecycle and cleanup\n * - Widget options and configuration\n *\n * Use in combination with GridstackComponent for the parent grid.\n *\n * @example\n * ```html\n * <gridstack>\n *   <gridstack-item [options]=\"{x: 0, y: 0, w: 2, h: 1}\">\n *     <my-widget-component></my-widget-component>\n *   </gridstack-item>\n * </gridstack>\n * ```\n */\n@Component({\n  selector: 'gridstack-item',\n  template: `\n    <div class=\"grid-stack-item-content\">\n      <!-- where dynamic items go based on component selector (recommended way), or sub-grids, etc...) -->\n      <ng-template #container></ng-template>\n      <!-- any static (defined in DOM - not recommended) content goes here -->\n      <ng-content></ng-content>\n      <!-- fallback HTML content from GridStackWidget.content if used instead (not recommended) -->\n      {{options.content}}\n    </div>`,\n  styles: [`\n    :host { display: block; }\n  `],\n  standalone: true,\n  // changeDetection: ChangeDetectionStrategy.OnPush, // IFF you want to optimize and control when ChangeDetection needs to happen...\n})\nexport class GridstackItemComponent implements OnDestroy {\n\n  /**\n   * Container for dynamic component creation within this grid item.\n   * Used to append child components programmatically.\n   */\n  @ViewChild('container', { read: ViewContainerRef, static: true}) public container?: ViewContainerRef;\n\n  /**\n   * Component reference for dynamic component removal.\n   * Used internally when this component is created dynamically.\n   */\n  public ref: ComponentRef<GridstackItemComponent> | undefined;\n\n  /**\n   * Reference to child widget component for serialization.\n   * Used to save/restore additional data along with grid position.\n   */\n  public childWidget: BaseWidget | undefined;\n\n  /**\n   * Grid item configuration options.\n   * Defines position, size, and behavior of this grid item.\n   *\n   * @example\n   * ```typescript\n   * itemOptions: GridStackNode = {\n   *   x: 0, y: 0, w: 2, h: 1,\n   *   noResize: true,\n   *   content: 'Item content'\n   * };\n   * ```\n   */\n  @Input() public set options(val: GridStackNode) {\n    const grid = this.el.gridstackNode?.grid;\n    if (grid) {\n      // already built, do an update...\n      grid.update(this.el, val);\n    } else {\n      // store our custom element in options so we can update it and not re-create a generic div!\n      this._options = {...val, el: this.el};\n    }\n  }\n  /** return the latest grid options (from GS once built, otherwise initial values) */\n  public get options(): GridStackNode {\n    return this.el.gridstackNode || this._options || {el: this.el};\n  }\n\n  protected _options?: GridStackNode;\n\n  /** return the native element that contains grid specific fields as well */\n  public get el(): GridItemCompHTMLElement { return this.elementRef.nativeElement; }\n\n  /** clears the initial options now that we've built */\n  public clearOptions() {\n    delete this._options;\n  }\n\n  constructor(protected readonly elementRef: ElementRef<GridItemCompHTMLElement>) {\n    this.el._gridItemComp = this;\n  }\n\n  public ngOnDestroy(): void {\n    this.clearOptions();\n    delete this.childWidget\n    delete this.el._gridItemComp;\n    delete this.container;\n    delete this.ref;\n  }\n}\n","/**\n * gridstack.component.ts 12.6.0\n * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license\n */\n\nimport {\n  AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, Input,\n  OnDestroy, OnInit, Output, QueryList, Type, ViewChild, ViewContainerRef, reflectComponentType, ComponentRef\n} from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { GridHTMLElement, GridItemHTMLElement, GridStack, GridStackNode, GridStackOptions, GridStackWidget } from 'gridstack';\n\nimport { NgGridStackNode, NgGridStackWidget } from './types';\nimport { BaseWidget } from './base-widget';\nimport { GridItemCompHTMLElement, GridstackItemComponent } from './gridstack-item.component';\n\n/**\n * Event handler callback signatures for different GridStack events.\n * These types define the structure of data passed to Angular event emitters.\n */\n\n/** Callback for general events (enable, disable, etc.) */\nexport type eventCB = {event: Event};\n\n/** Callback for element-specific events (resize, drag, etc.) */\nexport type elementCB = {event: Event, el: GridItemHTMLElement};\n\n/** Callback for events affecting multiple nodes (change, etc.) */\nexport type nodesCB = {event: Event, nodes: GridStackNode[]};\n\n/** Callback for drop events with before/after node state */\nexport type droppedCB = {event: Event, previousNode: GridStackNode, newNode: GridStackNode};\n\n/**\n * Extended HTMLElement interface for the grid container.\n * Stores a back-reference to the Angular component for integration purposes.\n */\nexport interface GridCompHTMLElement extends GridHTMLElement {\n  /** Back-reference to the Angular GridStack component */\n  _gridComp?: GridstackComponent;\n}\n\n/**\n * Mapping of selector strings to Angular component types.\n * Used for dynamic component creation based on widget selectors.\n */\nexport type SelectorToType = {[key: string]: Type<object>};\n\n/**\n * Angular component wrapper for GridStack.\n *\n * This component provides Angular integration for GridStack grids, handling:\n * - Grid initialization and lifecycle\n * - Dynamic component creation and management\n * - Event binding and emission\n * - Integration with Angular change detection\n *\n * Use in combination with GridstackItemComponent for individual grid items.\n *\n * @example\n * ```html\n * <gridstack [options]=\"gridOptions\" (change)=\"onGridChange($event)\">\n *   <div empty-content>Drag widgets here</div>\n * </gridstack>\n * ```\n */\n@Component({\n  selector: 'gridstack',\n  template: `\n    <!-- content to show when when grid is empty, like instructions on how to add widgets -->\n    <ng-content select=\"[empty-content]\" *ngIf=\"isEmpty\"></ng-content>\n    <!-- where dynamic items go -->\n    <ng-template #container></ng-template>\n    <!-- where template items go -->\n    <ng-content></ng-content>\n  `,\n  styles: [`\n    :host { display: block; }\n  `],\n  standalone: true,\n  imports: [NgIf]\n  // changeDetection: ChangeDetectionStrategy.OnPush, // IFF you want to optimize and control when ChangeDetection needs to happen...\n})\nexport class GridstackComponent implements OnInit, AfterContentInit, OnDestroy {\n\n  /**\n   * List of template-based grid items (not recommended approach).\n   * Used to sync between DOM and GridStack internals when items are defined in templates.\n   * Prefer dynamic component creation instead.\n   */\n  @ContentChildren(GridstackItemComponent) public gridstackItems?: QueryList<GridstackItemComponent>;\n  /**\n   * Container for dynamic component creation (recommended approach).\n   * Used to append grid items programmatically at runtime.\n   */\n  @ViewChild('container', { read: ViewContainerRef, static: true}) public container?: ViewContainerRef;\n\n  /**\n   * Grid configuration options.\n   * Can be set before grid initialization or updated after grid is created.\n   *\n   * @example\n   * ```typescript\n   * gridOptions: GridStackOptions = {\n   *   column: 12,\n   *   cellHeight: 'auto',\n   *   animate: true\n   * };\n   * ```\n   */\n  @Input() public set options(o: GridStackOptions) {\n    if (this._grid) {\n      this._grid.updateOptions(o);\n    } else {\n      this._options = o;\n    }\n  }\n  /** Get the current running grid options */\n  public get options(): GridStackOptions { return this._grid?.opts || this._options || {}; }\n\n  /**\n   * Controls whether empty content should be displayed.\n   * Set to true to show ng-content with 'empty-content' selector when grid has no items.\n   *\n   * @example\n   * ```html\n   * <gridstack [isEmpty]=\"gridItems.length === 0\">\n   *   <div empty-content>Drag widgets here to get started</div>\n   * </gridstack>\n   * ```\n   */\n  @Input() public isEmpty?: boolean;\n\n  /**\n   * GridStack event emitters for Angular integration.\n   *\n   * These provide Angular-style event handling for GridStack events.\n   * Alternatively, use `this.grid.on('event1 event2', callback)` for multiple events.\n   *\n   * Note: 'CB' suffix prevents conflicts with native DOM events.\n   *\n   * @example\n   * ```html\n   * <gridstack (changeCB)=\"onGridChange($event)\" (droppedCB)=\"onItemDropped($event)\">\n   * </gridstack>\n   * ```\n   */\n\n  /** Emitted when widgets are added to the grid */\n  @Output() public addedCB = new EventEmitter<nodesCB>();\n\n  /** Emitted when grid layout changes */\n  @Output() public changeCB = new EventEmitter<nodesCB>();\n\n  /** Emitted when grid is disabled */\n  @Output() public disableCB = new EventEmitter<eventCB>();\n\n  /** Emitted during widget drag operations */\n  @Output() public dragCB = new EventEmitter<elementCB>();\n\n  /** Emitted when widget drag starts */\n  @Output() public dragStartCB = new EventEmitter<elementCB>();\n\n  /** Emitted when widget drag stops */\n  @Output() public dragStopCB = new EventEmitter<elementCB>();\n\n  /** Emitted when widget is dropped */\n  @Output() public droppedCB = new EventEmitter<droppedCB>();\n\n  /** Emitted when grid is enabled */\n  @Output() public enableCB = new EventEmitter<eventCB>();\n\n  /** Emitted when widgets are removed from the grid */\n  @Output() public removedCB = new EventEmitter<nodesCB>();\n\n  /** Emitted during widget resize operations */\n  @Output() public resizeCB = new EventEmitter<elementCB>();\n\n  /** Emitted when widget resize starts */\n  @Output() public resizeStartCB = new EventEmitter<elementCB>();\n\n  /** Emitted when widget resize stops */\n  @Output() public resizeStopCB = new EventEmitter<elementCB>();\n\n  /**\n   * Get the native DOM element that contains grid-specific fields.\n   * This element has GridStack properties attached to it.\n   */\n  public get el(): GridCompHTMLElement { return this.elementRef.nativeElement; }\n\n  /**\n   * Get the underlying GridStack instance.\n   * Use this to access GridStack API methods directly.\n   *\n   * @example\n   * ```typescript\n   * this.gridComponent.grid.addWidget({x: 0, y: 0, w: 2, h: 1});\n   * ```\n   */\n  public get grid(): GridStack | undefined { return this._grid; }\n\n  /**\n   * Component reference for dynamic component removal.\n   * Used internally when this component is created dynamically.\n   */\n  public ref: ComponentRef<GridstackComponent> | undefined;\n\n  /**\n   * Mapping of component selectors to their types for dynamic creation.\n   *\n   * This enables dynamic component instantiation from string selectors.\n   * Angular doesn't provide public access to this mapping, so we maintain our own.\n   *\n   * @example\n   * ```typescript\n   * GridstackComponent.addComponentToSelectorType([MyWidgetComponent]);\n   * ```\n   */\n  public static selectorToType: SelectorToType = {};\n  /**\n   * Register a list of Angular components for dynamic creation.\n   *\n   * @param typeList Array of component types to register\n   *\n   * @example\n   * ```typescript\n   * GridstackComponent.addComponentToSelectorType([\n   *   MyWidgetComponent,\n   *   AnotherWidgetComponent\n   * ]);\n   * ```\n   */\n  public static addComponentToSelectorType(typeList: Array<Type<object>>) {\n    typeList.forEach(type => GridstackComponent.selectorToType[ GridstackComponent.getSelector(type) ] = type);\n  }\n  /**\n   * Extract the selector string from an Angular component type.\n   *\n   * @param type The component type to get selector from\n   * @returns The component's selector string\n   */\n  public static getSelector(type: Type<object>): string {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return reflectComponentType(type)!.selector;\n  }\n\n  protected _options?: GridStackOptions;\n  protected _grid?: GridStack;\n  protected _sub: Subscription | undefined;\n  protected loaded?: boolean;\n\n  constructor(protected readonly elementRef: ElementRef<GridCompHTMLElement>) {\n    // set globally our method to create the right widget type\n    if (!GridStack.addRemoveCB) {\n      GridStack.addRemoveCB = gsCreateNgComponents;\n    }\n    if (!GridStack.saveCB) {\n      GridStack.saveCB = gsSaveAdditionalNgInfo;\n    }\n    if (!GridStack.updateCB) {\n      GridStack.updateCB = gsUpdateNgComponents;\n    }\n    this.el._gridComp = this;\n  }\n\n  public ngOnInit(): void {\n    // init ourself before any template children are created since we track them below anyway - no need to double create+update widgets\n    this.loaded = !!this.options?.children?.length;\n    this._grid = GridStack.init(this._options, this.el);\n    delete this._options; // GS has it now\n\n    this.checkEmpty();\n  }\n\n  /** wait until after all DOM is ready to init gridstack children (after angular ngFor and sub-components run first) */\n  public ngAfterContentInit(): void {\n    // track whenever the children list changes and update the layout...\n    this._sub = this.gridstackItems?.changes.subscribe(() => this.updateAll());\n    // ...and do this once at least unless we loaded children already\n    if (!this.loaded) this.updateAll();\n    this.hookEvents(this.grid);\n  }\n\n  public ngOnDestroy(): void {\n    this.unhookEvents(this._grid);\n    this._sub?.unsubscribe();\n    this._grid?.destroy();\n    delete this._grid;\n    delete this.el._gridComp;\n    delete this.container;\n    delete this.ref;\n  }\n\n  /**\n   * called when the TEMPLATE (not recommended) list of items changes - get a list of nodes and\n   * update the layout accordingly (which will take care of adding/removing items changed by Angular)\n   */\n  public updateAll() {\n    if (!this.grid) return;\n    const layout: GridStackWidget[] = [];\n    this.gridstackItems?.forEach(item => {\n      layout.push(item.options);\n      item.clearOptions();\n    });\n    this.grid.load(layout); // efficient that does diffs only\n  }\n\n  /** check if the grid is empty, if so show alternative content */\n  public checkEmpty() {\n    if (!this.grid) return;\n    this.isEmpty = !this.grid.engine.nodes.length;\n  }\n\n  /** get all known events as easy to use Outputs for convenience */\n  protected hookEvents(grid?: GridStack) {\n    if (!grid) return;\n    // nested grids don't have events in v12.1+ so skip\n    if (grid.parentGridNode) return;\n    grid\n      .on('added', (event: Event, nodes: GridStackNode[]) => {\n        const gridComp = (nodes[0].grid?.el as GridCompHTMLElement)._gridComp || this;\n        gridComp.checkEmpty();\n        this.addedCB.emit({event, nodes});\n      })\n      .on('change', (event: Event, nodes: GridStackNode[]) => this.changeCB.emit({event, nodes}))\n      .on('disable', (event: Event) => this.disableCB.emit({event}))\n      .on('drag', (event: Event, el: GridItemHTMLElement) => this.dragCB.emit({event, el}))\n      .on('dragstart', (event: Event, el: GridItemHTMLElement) => this.dragStartCB.emit({event, el}))\n      .on('dragstop', (event: Event, el: GridItemHTMLElement) => this.dragStopCB.emit({event, el}))\n      .on('dropped', (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => this.droppedCB.emit({event, previousNode, newNode}))\n      .on('enable', (event: Event) => this.enableCB.emit({event}))\n      .on('removed', (event: Event, nodes: GridStackNode[]) => {\n        const gridComp = (nodes[0].grid?.el as GridCompHTMLElement)._gridComp || this;\n        gridComp.checkEmpty();\n        this.removedCB.emit({event, nodes});\n      })\n      .on('resize', (event: Event, el: GridItemHTMLElement) => this.resizeCB.emit({event, el}))\n      .on('resizestart', (event: Event, el: GridItemHTMLElement) => this.resizeStartCB.emit({event, el}))\n      .on('resizestop', (event: Event, el: GridItemHTMLElement) => this.resizeStopCB.emit({event, el}))\n  }\n\n  protected unhookEvents(grid?: GridStack) {\n    if (!grid) return;\n    // nested grids don't have events in v12.1+ so skip\n    if (grid.parentGridNode) return;\n    grid.off('added change disable drag dragstart dragstop dropped enable removed resize resizestart resizestop');\n  }\n}\n\n/**\n * can be used when a new item needs to be created, which we do as a Angular component, or deleted (skip)\n **/\nexport function gsCreateNgComponents(host: GridCompHTMLElement | HTMLElement, n: NgGridStackNode, add: boolean, isGrid: boolean): HTMLElement | undefined {\n  if (add) {\n    //\n    // create the component dynamically - see https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html\n    //\n    if (!host) return;\n    if (isGrid) {\n      // TODO: figure out how to create ng component inside regular Div. need to access app injectors...\n      // if (!container) {\n      //   const hostElement: Element = host;\n      //   const environmentInjector: EnvironmentInjector;\n      //   grid = createComponent(GridstackComponent, {environmentInjector, hostElement})?.instance;\n      // }\n\n      const gridItemComp = (host.parentElement as GridItemCompHTMLElement)?._gridItemComp;\n      if (!gridItemComp) return;\n      // check if gridItem has a child component with 'container' exposed to create under..\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const container = (gridItemComp.childWidget as any)?.container || gridItemComp.container;\n      const gridRef = container?.createComponent(GridstackComponent);\n      const grid = gridRef?.instance;\n      if (!grid) return;\n      grid.ref = gridRef;\n      grid.options = n;\n      return grid.el;\n    } else {\n      const gridComp = (host as GridCompHTMLElement)._gridComp;\n      const gridItemRef = gridComp?.container?.createComponent(GridstackItemComponent);\n      const gridItem = gridItemRef?.instance;\n      if (!gridItem) return;\n      gridItem.ref = gridItemRef\n\n      // define what type of component to create as child, OR you can do it GridstackItemComponent template, but this is more generic\n      const selector = n.selector;\n      const type = selector ? GridstackComponent.selectorToType[selector] : undefined;\n      if (type) {\n        // shared code to create our selector component\n        const createComp = () => {\n          const childWidget = gridItem.container?.createComponent(type)?.instance as BaseWidget;\n          // if proper BaseWidget subclass, save it and load additional data\n          if (childWidget && typeof childWidget.serialize === 'function' && typeof childWidget.deserialize === 'function') {\n            gridItem.childWidget = childWidget;\n            childWidget.deserialize(n);\n          }\n        }\n\n        const lazyLoad = n.lazyLoad || n.grid?.opts?.lazyLoad && n.lazyLoad !== false;\n        if (lazyLoad) {\n          if (!n.visibleObservable) {\n            n.visibleObservable = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) {\n              n.visibleObservable?.disconnect();\n              delete n.visibleObservable;\n              createComp();\n            }});\n            window.setTimeout(() => n.visibleObservable?.observe(gridItem.el)); // wait until callee sets position attributes\n          }\n        } else createComp();\n      }\n\n      return gridItem.el;\n    }\n  } else {\n    //\n    // REMOVE - have to call ComponentRef:destroy() for dynamic objects to correctly remove themselves\n    // Note: this will destroy all children dynamic components as well: gridItem -> childWidget\n    //\n    if (isGrid) {\n      const grid = (n.el as GridCompHTMLElement)?._gridComp;\n      if (grid?.ref) grid.ref.destroy();\n      else grid?.ngOnDestroy();\n    } else {\n      const gridItem = (n.el as GridItemCompHTMLElement)?._gridItemComp;\n      if (gridItem?.ref) gridItem.ref.destroy();\n      else gridItem?.ngOnDestroy();\n    }\n  }\n  return;\n}\n\n/**\n * called for each item in the grid - check if additional information needs to be saved.\n * Note: since this is options minus gridstack protected members using Utils.removeInternalForSave(),\n * this typically doesn't need to do anything. However your custom Component @Input() are now supported\n * using BaseWidget.serialize()\n */\nexport function gsSaveAdditionalNgInfo(n: NgGridStackNode, w: NgGridStackWidget) {\n  const gridItem = (n.el as GridItemCompHTMLElement)?._gridItemComp;\n  if (gridItem) {\n    const input = gridItem.childWidget?.serialize();\n    if (input) {\n      w.input = input;\n    }\n    return;\n  }\n  // else check if Grid\n  const grid = (n.el as GridCompHTMLElement)?._gridComp;\n  if (grid) {\n    //.... save any custom data\n  }\n}\n\n/**\n * track when widgeta re updated (rather than created) to make sure we de-serialize them as well\n */\nexport function gsUpdateNgComponents(n: NgGridStackNode) {\n  const w: NgGridStackWidget = n;\n  const gridItem = (n.el as GridItemCompHTMLElement)?._gridItemComp;\n  if (gridItem?.childWidget && w.input) gridItem.childWidget.deserialize(w);\n}","/**\r\n * gridstack.component.ts 12.6.0\r\n * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { NgModule } from \"@angular/core\";\r\n\r\nimport { GridstackItemComponent } from \"./gridstack-item.component\";\r\nimport { GridstackComponent } from \"./gridstack.component\";\r\n\r\n/**\r\n * @deprecated Use GridstackComponent and GridstackItemComponent as standalone components instead.\r\n *\r\n * This NgModule is provided for backward compatibility but is no longer the recommended approach.\r\n * Import components directly in your standalone components or use the new Angular module structure.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Preferred approach - standalone components\r\n * @Component({\r\n *   selector: 'my-app',\r\n *   imports: [GridstackComponent, GridstackItemComponent],\r\n *   template: '<gridstack></gridstack>'\r\n * })\r\n * export class AppComponent {}\r\n *\r\n * // Legacy approach (deprecated)\r\n * @NgModule({\r\n *   imports: [GridstackModule]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@NgModule({\r\n  imports: [\r\n    GridstackItemComponent,\r\n    GridstackComponent,\r\n  ],\r\n  exports: [\r\n    GridstackItemComponent,\r\n    GridstackComponent,\r\n  ],\r\n})\r\nexport class GridstackModule {}\r\n","/*\n * Public API Surface of gridstack-angular\n */\n\nexport * from './lib/types';\nexport * from './lib/base-widget';\nexport * from './lib/gridstack-item.component';\nexport * from './lib/gridstack.component';\nexport * from './lib/gridstack.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}