{"version":3,"file":"gridstack-angular.mjs","sources":["../../../angular/projects/lib/src/lib/gridstack-item.component.ts","../../../angular/projects/lib/src/lib/gridstack.component.ts","../../../angular/projects/lib/src/lib/base-widget.ts","../../../angular/projects/lib/src/lib/gridstack.module.ts","../../../angular/projects/lib/src/public-api.ts","../../../angular/projects/lib/src/gridstack-angular.ts"],"sourcesContent":["/**\n * gridstack-item.component.ts 8.4.0\n * Copyright (c) 2022 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/** store element to Ng Class pointer back */\nexport interface GridItemCompHTMLElement extends GridItemHTMLElement {\n  _gridItemComp?: GridstackItemComponent;\n}\n\n/**\n * HTML Component Wrapper for gridstack items, in combination with GridstackComponent for parent grid\n */\n@Component({\n  selector: 'gridstack-item',\n  template: `\n    <div class=\"grid-stack-item-content\">\n      <!-- where dynamic items go based on component types, or sub-grids, etc...) -->\n      <ng-template #container></ng-template>\n      <!-- any static (defined in dom) content goes here -->\n      <ng-content></ng-content>\n      <!-- fallback HTML content from GridStackWidget content field if used instead -->\n      {{options.content}}\n    </div>`,\n  styles: [`\n    :host { display: block; }\n  `],\n  // changeDetection: ChangeDetectionStrategy.OnPush, // IFF you want to optimize and control when ChangeDetection needs to happen...\n})\nexport class GridstackItemComponent implements OnDestroy {\n\n  /** container to append items dynamically */\n  @ViewChild('container', { read: ViewContainerRef, static: true}) public container?: ViewContainerRef;\n\n  /** ComponentRef of ourself - used by dynamic object to correctly get removed */\n  public ref: ComponentRef<GridstackItemComponent> | undefined;\n\n  /** child component so we can save/restore additional data to be saved along */\n  public childWidget: BaseWidget | undefined;\n\n  /** list of options for creating/updating this item */\n  @Input() public set options(val: GridStackNode) {\n    if (this.el.gridstackNode?.grid) {\n      // already built, do an update...\n      this.el.gridstackNode.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  private _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(private readonly elementRef: ElementRef<GridItemHTMLElement>) {\n    this.el._gridItemComp = this;\n  }\n\n  public ngOnDestroy(): void {\n    delete this.ref;\n    delete this.el._gridItemComp;\n  }\n}\n","/**\n * gridstack.component.ts 8.4.0\n * Copyright (c) 2022 Alain Dumesny - see GridStack root license\n */\n\nimport { AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, Input,\n  OnDestroy, OnInit, Output, QueryList, Type, ViewChild, ViewContainerRef, reflectComponentType, ComponentRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { GridHTMLElement, GridItemHTMLElement, GridStack, GridStackNode, GridStackOptions, GridStackWidget } from 'gridstack';\n\nimport { GridItemCompHTMLElement, GridstackItemComponent } from './gridstack-item.component';\nimport { BaseWidget } from './base-widget';\n\n/** events handlers emitters signature for different events */\nexport type eventCB = {event: Event};\nexport type elementCB = {event: Event, el: GridItemHTMLElement};\nexport type nodesCB = {event: Event, nodes: GridStackNode[]};\nexport type droppedCB = {event: Event, previousNode: GridStackNode, newNode: GridStackNode};\n\nexport type NgCompInputs = {[key: string]: any};\n\n/** extends to store Ng Component selector, instead/inAddition to content */\nexport interface NgGridStackWidget extends GridStackWidget {\n  selector?: string; // component type to create as content\n  input?: NgCompInputs; // serialized data for the component input fields\n}\nexport interface NgGridStackNode extends GridStackNode {\n  selector?: string; // component type to create as content\n}\nexport interface NgGridStackOptions extends GridStackOptions {\n  children?: NgGridStackWidget[];\n  subGridOpts?: NgGridStackOptions;\n}\n\n/** store element to Ng Class pointer back */\nexport interface GridCompHTMLElement extends GridHTMLElement {\n  _gridComp?: GridstackComponent;\n}\n\n/** selector string to runtime Type mapping */\nexport type SelectorToType = {[key: string]: Type<Object>};\n\n/**\n * HTML Component Wrapper for gridstack, in combination with GridstackItemComponent for the items\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  // 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  /** track list of TEMPLATE grid items so we can sync between DOM and GS internals */\n  @ContentChildren(GridstackItemComponent) public gridstackItems?: QueryList<GridstackItemComponent>;\n  /** container to append items dynamically */\n  @ViewChild('container', { read: ViewContainerRef, static: true}) public container?: ViewContainerRef;\n\n  /** initial options for creation of the grid */\n  @Input() public set options(val: GridStackOptions) { this._options = val; }\n  /** return the current running options */\n  public get options(): GridStackOptions { return this._grid?.opts || this._options || {}; }\n\n  /** true while ng-content with 'no-item-content' should be shown when last item is removed from a grid */\n  @Input() public isEmpty?: boolean;\n\n  /** individual list of GridStackEvent callbacks handlers as output\n   * otherwise use this.grid.on('name1 name2 name3', callback) to handle multiple at once\n   * see https://github.com/gridstack/gridstack.js/blob/master/demo/events.js#L4\n   *\n   * Note: camel casing and 'CB' added at the end to prevent @angular-eslint/no-output-native\n   * eg: 'change' would trigger the raw CustomEvent so use different name.\n   */\n  @Output() public addedCB = new EventEmitter<nodesCB>();\n  @Output() public changeCB = new EventEmitter<nodesCB>();\n  @Output() public disableCB = new EventEmitter<eventCB>();\n  @Output() public dragCB = new EventEmitter<elementCB>();\n  @Output() public dragStartCB = new EventEmitter<elementCB>();\n  @Output() public dragStopCB = new EventEmitter<elementCB>();\n  @Output() public droppedCB = new EventEmitter<droppedCB>();\n  @Output() public enableCB = new EventEmitter<eventCB>();\n  @Output() public removedCB = new EventEmitter<nodesCB>();\n  @Output() public resizeCB = new EventEmitter<elementCB>();\n  @Output() public resizeStartCB = new EventEmitter<elementCB>();\n  @Output() public resizeStopCB = new EventEmitter<elementCB>();\n\n  /** return the native element that contains grid specific fields as well */\n  public get el(): GridCompHTMLElement { return this.elementRef.nativeElement; }\n\n  /** return the GridStack class */\n  public get grid(): GridStack | undefined { return this._grid; }\n\n  /** ComponentRef of ourself - used by dynamic object to correctly get removed */\n  public ref: ComponentRef<GridstackComponent> | undefined;\n\n  /**\n   * stores the selector -> Type mapping, so we can create items dynamically from a string.\n   * Unfortunately Ng doesn't provide public access to that mapping.\n   */\n  public static selectorToType: SelectorToType = {};\n  /** add a list of ng Component to be mapped to selector */\n  public static addComponentToSelectorType(typeList: Array<Type<Object>>) {\n    typeList.forEach(type => GridstackComponent.selectorToType[ GridstackComponent.getSelector(type) ] = type);\n  }\n  /** return the ng Component selector */\n  public static getSelector(type: Type<Object>): string {\n    return reflectComponentType(type)!.selector;\n  }\n\n  private _options?: GridStackOptions;\n  private _grid?: GridStack;\n  private loaded?: boolean;\n  private ngUnsubscribe: Subject<void> = new Subject();\n\n  constructor(\n    // private readonly zone: NgZone,\n    // private readonly cd: ChangeDetectorRef,\n    private readonly elementRef: ElementRef<GridCompHTMLElement>,\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.gridstackItems?.changes\n      .pipe(takeUntil(this.ngUnsubscribe))\n      .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    delete this.ref;\n    this.ngUnsubscribe.next();\n    this.ngUnsubscribe.complete();\n    this.grid?.destroy();\n    delete this._grid;\n    delete this.el._gridComp;\n  }\n\n  /**\n   * called when the TEMPLATE 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    const isEmpty = !this.grid.engine.nodes.length;\n    if (isEmpty === this.isEmpty) return;\n    this.isEmpty = isEmpty;\n    // this.cd.detectChanges();\n  }\n\n  /** get all known events as easy to use Outputs for convenience */\n  private hookEvents(grid?: GridStack) {\n    if (!grid) return;\n    grid\n    .on('added', (event: Event, nodes: GridStackNode[]) => { this.checkEmpty(); this.addedCB.emit({event, nodes}); })\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[]) => { this.checkEmpty(); this.removedCB.emit({event, nodes}); })\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\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, w: NgGridStackWidget | GridStackNode, 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      const container = (host.parentElement as GridItemCompHTMLElement)?._gridItemComp?.container;\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      const gridRef = container?.createComponent(GridstackComponent);\n      const grid = gridRef?.instance;\n      if (!grid) return;\n      grid.ref = gridRef;\n      grid.options = w as GridStackOptions;\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      // IFF we're not a subGrid, define what type of component to create as child, OR you can do it GridstackItemComponent template, but this is more generic\n      const selector = (w as NgGridStackWidget).selector;\n      const type = selector ? GridstackComponent.selectorToType[selector] : undefined;\n      if (!w.subGridOpts && type) {\n        const childWidget = gridItem.container?.createComponent(type)?.instance as BaseWidget;\n        if (typeof childWidget?.serialize === 'function' && typeof childWidget?.deserialize === 'function') {\n          // proper BaseWidget subclass, save it and load additional data\n          gridItem.childWidget = childWidget;\n          childWidget.deserialize(w);\n        }\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    const n = w as GridStackNode;\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 private 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","/**\r\n * gridstack-item.component.ts 8.4.0\r\n * Copyright (c) 2022 Alain Dumesny - see GridStack root license\r\n */\r\n\r\n/**\r\n * Base interface that all widgets need to implement in order for GridstackItemComponent to correctly save/load/delete/..\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { NgCompInputs, NgGridStackWidget } from './gridstack.component';\r\n\r\n @Injectable()\r\n export abstract class BaseWidget {\r\n  /**\r\n   * REDEFINE to return an object representing the data needed to re-create yourself, other than `selector` already handled.\r\n   * This should map directly to the @Input() fields of this objects on create, so a simple apply can be used on read\r\n   */\r\n  public serialize(): NgCompInputs | undefined  { return; }\r\n\r\n  /**\r\n   * REDEFINE this if your widget needs to read from saved data and transform it to create itself - you do this for\r\n   * things that are not mapped directly into @Input() fields for example.\r\n   */\r\n  public deserialize(w: NgGridStackWidget)  {\r\n    if (w.input)  Object.assign(this, w.input);\r\n  }\r\n }\r\n","/**\r\n * gridstack.component.ts 8.4.0\r\n * Copyright (c) 2022 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { GridStack } from \"gridstack\";\r\nimport { GridstackComponent, gsCreateNgComponents, gsSaveAdditionalNgInfo } from \"./gridstack.component\";\r\nimport { GridstackItemComponent } from \"./gridstack-item.component\";\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n  ],\r\n  declarations: [\r\n    GridstackComponent,\r\n    GridstackItemComponent,\r\n  ],\r\n  exports: [\r\n    GridstackComponent,\r\n    GridstackItemComponent,\r\n  ],\r\n})\r\nexport class GridstackModule {\r\n  constructor() {\r\n    // set globally our method to create the right widget type\r\n    GridStack.addRemoveCB = gsCreateNgComponents;\r\n    GridStack.saveCB = gsSaveAdditionalNgInfo;\r\n  }\r\n}\r\n","/*\n * Public API Surface of gridstack-angular\n */\n\nexport * from './lib/gridstack-item.component';\nexport * from './lib/gridstack.component';\nexport * from './lib/base-widget';\nexport * from './lib/gridstack.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}