{"version":3,"file":"acorex-components-grid-layout-builder.mjs","sources":["../../../../packages/components/grid-layout-builder/src/lib/utility.ts","../../../../packages/components/grid-layout-builder/src/lib/grid-layout-widget.component.ts","../../../../packages/components/grid-layout-builder/src/lib/grid-layout-container.component.ts","../../../../packages/components/grid-layout-builder/src/lib/grid-layout-builder.module.ts","../../../../packages/components/grid-layout-builder/src/acorex-components-grid-layout-builder.ts"],"sourcesContent":["import { AXGridLayoutNode, AXGridLayoutOptions, AXGridLayoutSize, AXGridLayoutWidget } from './types';\n\nexport const AX_GRID_LAYOUT_ALLOWED_SIZES_ATTR = 'data-ax-allowed-sizes';\n\n// Convert AXGridLayoutWidget to GridStackWidget\nexport function convertAXGridLayoutWidgetToGridStackWidget(\n  widget: AXGridLayoutWidget,\n): import('gridstack').GridStackWidget {\n  const normalized = normalizeLayoutNodeWithAllowedSizes(widget);\n\n  return {\n    id: normalized.id,\n    x: normalized.x,\n    y: normalized.y,\n    w: normalized.width,\n    h: normalized.height,\n    maxW: normalized.maxWidth,\n    maxH: normalized.maxHeight,\n    minW: normalized.minWidth,\n    minH: normalized.minHeight,\n    noResize: normalized.disableResize,\n    noMove: normalized.disableDrag,\n  };\n}\n\n// Convert GridStackWidget to AXGridLayoutWidget\nexport function convertGridStackWidgetToAXGridLayoutWidget(\n  widget: import('gridstack').GridStackWidget,\n): AXGridLayoutWidget {\n  return {\n    id: widget.id,\n    x: widget.x,\n    y: widget.y,\n    width: widget.w,\n    height: widget.h,\n    maxWidth: widget.maxW,\n    maxHeight: widget.maxH,\n    minWidth: widget.minW,\n    minHeight: widget.minH,\n    disableResize: widget.noResize,\n    disableDrag: widget.noMove,\n  };\n}\n\n// Convert AXGridLayoutNode to GridStackNode\nexport function convertAXGridLayoutNodeToGridStackNode(node: AXGridLayoutNode): import('gridstack').GridStackNode {\n  const normalized = normalizeLayoutNodeWithAllowedSizes(node);\n\n  return {\n    id: normalized.id,\n    x: normalized.x,\n    y: normalized.y,\n    w: normalized.width,\n    h: normalized.height,\n    maxW: normalized.maxWidth,\n    maxH: normalized.maxHeight,\n    minW: normalized.minWidth,\n    minH: normalized.minHeight,\n    noResize: normalized.disableResize,\n    noMove: normalized.disableDrag,\n    el: normalized.element,\n  };\n}\n\n// Convert GridStackNode to AXGridLayoutNode\nexport function convertGridStackNodeToAXGridLayoutNode(node: import('gridstack').GridStackNode): AXGridLayoutNode {\n  const element = node.el;\n  const allowedSizes = element ? readAllowedSizesFromElement(element) : undefined;\n\n  return {\n    id: node.id,\n    x: node.x,\n    y: node.y,\n    width: node.w,\n    height: node.h,\n    maxWidth: node.maxW,\n    maxHeight: node.maxH,\n    minWidth: node.minW,\n    minHeight: node.minH,\n    disableResize: node.noResize,\n    disableDrag: node.noMove,\n    allowedSizes,\n    element,\n  };\n}\n\n// Convert AXGridLayoutOptions to GridStackOptions\nexport function convertAXGridLayoutOptionsToGridStackOptions(\n  options: AXGridLayoutOptions,\n): import('gridstack').GridStackOptions {\n  return {\n    column: options.column,\n    disableDrag: options.disableDrag,\n    disableResize: options.disableResize,\n    margin: options.gap,\n    cellHeight: options.cellHeight,\n    rtl: options.rtl,\n    maxRow: options.maxRow,\n    minRow: options.minRow,\n    row: options.row,\n    removable: options.removableSelector || options.removable,\n    acceptWidgets: options.acceptWidgets,\n    float: options.float,\n    handle: options.dragHandlerSelector,\n    columnOpts: { breakpoints: options?.responsiveLayout?.map((i) => ({ c: i.column, w: i.width })) },\n  };\n}\n\n// Convert GridStackOptions to AXGridLayoutOptions\nexport function convertGridStackOptionsToAXGridLayoutOptions(\n  options: import('gridstack').GridStackOptions,\n): AXGridLayoutOptions {\n  return {\n    column: options.column,\n    disableDrag: options.disableDrag,\n    disableResize: options.disableResize,\n    gap: options.margin,\n    cellHeight: options.cellHeight,\n    rtl: options.rtl,\n    maxRow: options.maxRow,\n    minRow: options.minRow,\n    row: options.row,\n    removableSelector: typeof options.removable === 'string' ? options.removable : undefined,\n    removable: typeof options.removable === 'boolean' ? options.removable : undefined,\n    acceptWidgets: options.acceptWidgets as boolean,\n    float: options.float,\n    dragHandlerSelector: options.handle,\n    responsiveLayout: options?.columnOpts?.breakpoints?.map((i) => ({ width: i.w, column: i.c })),\n  };\n}\n\n/** remove keys which are undefined */\nexport function removeUndefinedKeys<T extends object>(obj: T): T {\n  const newObj = { ...obj } as Record<string, unknown>;\n  for (const key in newObj) {\n    if (newObj[key] === undefined) {\n      delete newObj[key];\n    }\n  }\n  return newObj as T;\n}\n\nexport function writeAllowedSizesToElement(\n  element: HTMLElement | undefined,\n  allowedSizes: readonly AXGridLayoutSize[] | undefined,\n): void {\n  if (!element) {\n    return;\n  }\n\n  if (!allowedSizes?.length) {\n    element.removeAttribute(AX_GRID_LAYOUT_ALLOWED_SIZES_ATTR);\n    return;\n  }\n\n  element.setAttribute(AX_GRID_LAYOUT_ALLOWED_SIZES_ATTR, JSON.stringify(allowedSizes));\n}\n\nexport function readAllowedSizesFromElement(element: HTMLElement): readonly AXGridLayoutSize[] | undefined {\n  const raw = element.getAttribute(AX_GRID_LAYOUT_ALLOWED_SIZES_ATTR);\n  if (!raw) {\n    return undefined;\n  }\n\n  try {\n    const parsed = JSON.parse(raw) as unknown;\n    if (!Array.isArray(parsed) || parsed.length === 0) {\n      return undefined;\n    }\n\n    const sizes = parsed\n      .filter((entry): entry is [number, number] => Array.isArray(entry) && entry.length === 2)\n      .map(([width, height]) => [Number(width), Number(height)] as const)\n      .filter(([width, height]) => Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0);\n\n    return sizes.length > 0 ? sizes : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\nexport const AX_GRID_LAYOUT_RESIZE_INVALID_CLASS = 'ax-grid-layout-resize-invalid';\nexport const AX_GRID_LAYOUT_RESIZE_PREV_SIZE_ATTR = 'data-ax-resize-prev-size';\n\nexport function isExactAllowedSize(\n  width: number,\n  height: number,\n  allowedSizes: readonly AXGridLayoutSize[],\n): boolean {\n  const safeWidth = Number.isFinite(width) && width > 0 ? Math.round(width) : 1;\n  const safeHeight = Number.isFinite(height) && height > 0 ? Math.round(height) : 1;\n\n  return allowedSizes.some(([w, h]) => w === safeWidth && h === safeHeight);\n}\n\nexport function updateResizeValidityMarkers(\n  gridEl: HTMLElement,\n  element: import('gridstack').GridItemHTMLElement,\n): void {\n  const allowedSizes = readAllowedSizesFromElement(element);\n  if (!allowedSizes?.length) {\n    clearResizeValidityMarkers(gridEl);\n    return;\n  }\n\n  const node = element.gridstackNode;\n  const isValid = isExactAllowedSize(node?.w ?? 1, node?.h ?? 1, allowedSizes);\n\n  element.classList.toggle(AX_GRID_LAYOUT_RESIZE_INVALID_CLASS, !isValid);\n  gridEl\n    .querySelector('.grid-stack-placeholder')\n    ?.classList.toggle(AX_GRID_LAYOUT_RESIZE_INVALID_CLASS, !isValid);\n}\n\nexport function clearResizeValidityMarkers(gridEl: HTMLElement): void {\n  gridEl.querySelectorAll(`.${AX_GRID_LAYOUT_RESIZE_INVALID_CLASS}`).forEach((el) => {\n    el.classList.remove(AX_GRID_LAYOUT_RESIZE_INVALID_CLASS);\n  });\n}\n\nexport function storeResizeStartSize(element: import('gridstack').GridItemHTMLElement): void {\n  const node = element.gridstackNode;\n  if (!node) {\n    return;\n  }\n\n  const width = node.w ?? 1;\n  const height = node.h ?? 1;\n  element.setAttribute(AX_GRID_LAYOUT_RESIZE_PREV_SIZE_ATTR, JSON.stringify([width, height]));\n}\n\nexport function clearResizeStartSize(element: HTMLElement): void {\n  element.removeAttribute(AX_GRID_LAYOUT_RESIZE_PREV_SIZE_ATTR);\n}\n\nexport function readResizeStartSize(element: HTMLElement): AXGridLayoutSize | undefined {\n  const raw = element.getAttribute(AX_GRID_LAYOUT_RESIZE_PREV_SIZE_ATTR);\n  if (!raw) {\n    return undefined;\n  }\n\n  try {\n    const parsed = JSON.parse(raw) as unknown;\n    if (!Array.isArray(parsed) || parsed.length !== 2) {\n      return undefined;\n    }\n\n    const [width, height] = parsed;\n    if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {\n      return undefined;\n    }\n\n    return [width, height];\n  } catch {\n    return undefined;\n  }\n}\n\nexport function snapToAllowedSize(\n  width: number,\n  height: number,\n  allowedSizes: readonly AXGridLayoutSize[],\n): AXGridLayoutSize {\n  const safeWidth = Number.isFinite(width) && width > 0 ? width : 1;\n  const safeHeight = Number.isFinite(height) && height > 0 ? height : 1;\n\n  return allowedSizes.reduce<AXGridLayoutSize>((best, size) => {\n    const bestDistance = (best[0] - safeWidth) ** 2 + (best[1] - safeHeight) ** 2;\n    const nextDistance = (size[0] - safeWidth) ** 2 + (size[1] - safeHeight) ** 2;\n    return nextDistance < bestDistance ? size : best;\n  }, allowedSizes[0]);\n}\n\nexport function deriveMinMaxFromAllowedSizes(allowedSizes: readonly AXGridLayoutSize[]): Pick<\n  AXGridLayoutWidget,\n  'minWidth' | 'maxWidth' | 'minHeight' | 'maxHeight'\n> {\n  const widths = allowedSizes.map(([width]) => width);\n  const heights = allowedSizes.map(([, height]) => height);\n\n  return {\n    minWidth: Math.min(...widths),\n    maxWidth: Math.max(...widths),\n    minHeight: Math.min(...heights),\n    maxHeight: Math.max(...heights),\n  };\n}\n\nexport function normalizeLayoutNodeWithAllowedSizes<T extends AXGridLayoutWidget>(node: T): T {\n  if (!node.allowedSizes?.length) {\n    return node;\n  }\n\n  const [width, height] = snapToAllowedSize(node.width ?? 1, node.height ?? 1, node.allowedSizes);\n  const bounds = deriveMinMaxFromAllowedSizes(node.allowedSizes);\n\n  return {\n    ...node,\n    width,\n    height,\n    minWidth: bounds.minWidth,\n    maxWidth: bounds.maxWidth,\n    minHeight: bounds.minHeight,\n    maxHeight: bounds.maxHeight,\n  };\n}\n\nexport function snapElementToAllowedSize(\n  grid: import('gridstack').GridStack,\n  element: import('gridstack').GridItemHTMLElement,\n): boolean {\n  const allowedSizes = readAllowedSizesFromElement(element);\n  if (!allowedSizes?.length) {\n    return false;\n  }\n\n  const node = element.gridstackNode;\n  if (!node) {\n    return false;\n  }\n\n  const [width, height] = snapToAllowedSize(node.w ?? 1, node.h ?? 1, allowedSizes);\n  if (node.w === width && node.h === height) {\n    return false;\n  }\n\n  grid.update(element, { w: width, h: height });\n  return true;\n}\n\nexport function revertElementToAllowedSizeIfInvalid(\n  grid: import('gridstack').GridStack,\n  element: import('gridstack').GridItemHTMLElement,\n): boolean {\n  const allowedSizes = readAllowedSizesFromElement(element);\n  if (!allowedSizes?.length) {\n    return false;\n  }\n\n  const node = element.gridstackNode;\n  if (!node) {\n    return false;\n  }\n\n  const currentWidth = node.w ?? 1;\n  const currentHeight = node.h ?? 1;\n\n  if (isExactAllowedSize(currentWidth, currentHeight, allowedSizes)) {\n    return false;\n  }\n\n  const previousSize = readResizeStartSize(element);\n  if (!previousSize) {\n    return false;\n  }\n\n  const [width, height] = previousSize;\n  if (node.w === width && node.h === height) {\n    return false;\n  }\n\n  grid.update(element, { w: width, h: height });\n  return true;\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, effect, ElementRef, inject, input, untracked, ViewEncapsulation } from '@angular/core';\nimport { AXGridLayoutNode, AXGridLayoutWidget, AXGridLayoutWidgetElement } from './types';\nimport {\n  convertAXGridLayoutWidgetToGridStackWidget,\n  convertGridStackNodeToAXGridLayoutNode,\n  normalizeLayoutNodeWithAllowedSizes,\n  removeUndefinedKeys,\n  writeAllowedSizesToElement,\n} from './utility';\n\n@Component({\n  selector: 'ax-grid-layout-widget',\n  template: `<div class=\"grid-stack-item-content\"><ng-content></ng-content></div>`,\n\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: AXComponent, useExisting: AXGridLayoutWidgetComponent }],\n})\nexport class AXGridLayoutWidgetComponent {\n  private readonly elementRef: ElementRef<AXGridLayoutWidgetElement> = inject(ElementRef);\n\n  public options = input<AXGridLayoutNode>();\n\n  #eff = effect(() => {\n    const options = this.options();\n\n    untracked(() => {\n      const element = this.elementRef.nativeElement;\n      const normalized = options ? normalizeLayoutNodeWithAllowedSizes(options) : undefined;\n      writeAllowedSizesToElement(element, normalized?.allowedSizes);\n\n      const gridstackNode = element.gridstackNode as import('gridstack').GridStackNode;\n      if (gridstackNode?.grid && normalized) {\n        gridstackNode.grid.update(\n          element,\n          removeUndefinedKeys(convertAXGridLayoutWidgetToGridStackWidget(normalized)),\n        );\n      }\n    });\n  });\n\n  /**\n   * Locks or unlocks the widget (prevents dragging and resizing).\n   *\n   * @param state - If true, the widget will be locked.\n   * @returns void - No return value. The widget lock state is updated.\n   */\n  public setLockable(state: boolean): void {\n    this.updateWidgetOptions({ disableResize: state, disableDrag: state });\n  }\n\n  /**\n   * Enables or disables resizing of the widget.\n   *\n   * @param state - If true, resizing will be enabled.\n   * @returns void - No return value. The widget resize state is updated.\n   */\n  public setResizable(state: boolean): void {\n    this.updateWidgetOptions({ disableResize: !state });\n  }\n\n  /**\n   * Updates the widget options.\n   *\n   * @param options - The new options for the widget.\n   * @returns void - No return value. The widget options are updated.\n   */\n  public setOptions(options: AXGridLayoutWidget): void {\n    this.updateWidgetOptions(options);\n  }\n\n  /**\n   * Returns the current options of the widget.\n   *\n   * @returns AXGridLayoutNode - The current widget options.\n   */\n  public getOptions(): AXGridLayoutNode {\n    const gridstackNode = this.elementRef.nativeElement.gridstackNode;\n    return gridstackNode\n      ? removeUndefinedKeys(convertGridStackNodeToAXGridLayoutNode(gridstackNode))\n      : { ...this.options(), element: this.elementRef.nativeElement };\n  }\n\n  /**\n   * Returns the widget options from the Angular input binding (stored/desired positions),\n   * bypassing the live gridstackNode which may have been auto-reflowed.\n   * Used by the container to load correct per-breakpoint layouts after column changes.\n   *\n   * @returns AXGridLayoutNode - The widget options from the input signal.\n   */\n  public getInputOptions(): AXGridLayoutNode {\n    const opts = this.options();\n    const normalized = opts ? normalizeLayoutNodeWithAllowedSizes(opts) : undefined;\n    return normalized\n      ? { ...normalized, element: this.elementRef.nativeElement }\n      : { element: this.elementRef.nativeElement };\n  }\n\n  /**\n   * Returns the native DOM element of the widget.\n   *\n   * @returns AXGridLayoutWidgetElement - The native element.\n   */\n  public get element(): AXGridLayoutWidgetElement {\n    return this.elementRef.nativeElement;\n  }\n\n  /**\n   * Updates the widget options and triggers a grid update.\n   * @param options - The partial options to update.\n   */\n  private updateWidgetOptions(options: Partial<AXGridLayoutWidget>): void {\n    const gridstackNode = this.elementRef.nativeElement.gridstackNode as import('gridstack').GridStackNode;\n    if (gridstackNode?.grid) {\n      gridstackNode.grid.update(\n        this.elementRef.nativeElement,\n        removeUndefinedKeys(convertAXGridLayoutWidgetToGridStackWidget(options)),\n      );\n    }\n  }\n}\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport {\n  Component,\n  ContentChildren,\n  ElementRef,\n  NgZone,\n  OnDestroy,\n  QueryList,\n  ViewEncapsulation,\n  afterNextRender,\n  effect,\n  inject,\n  input,\n  model,\n  output,\n  untracked,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { AXGridLayoutWidgetComponent } from './grid-layout-widget.component';\nimport {\n  AXGridLayout,\n  AXGridLayoutContainerElement,\n  AXGridLayoutEvent,\n  AXGridLayoutNode,\n  AXGridLayoutOptions,\n  AXGridLayoutPosition,\n  AXGridLayoutWidget,\n  AXGridLayoutWidgetElement,\n} from './types';\nimport {\n  convertAXGridLayoutNodeToGridStackNode,\n  convertAXGridLayoutOptionsToGridStackOptions,\n  convertAXGridLayoutWidgetToGridStackWidget,\n  convertGridStackNodeToAXGridLayoutNode,\n  convertGridStackOptionsToAXGridLayoutOptions,\n  clearResizeValidityMarkers,\n  clearResizeStartSize,\n  normalizeLayoutNodeWithAllowedSizes,\n  removeUndefinedKeys,\n  revertElementToAllowedSizeIfInvalid,\n  storeResizeStartSize,\n  updateResizeValidityMarkers,\n  writeAllowedSizesToElement,\n} from './utility';\n\n@Component({\n  selector: 'ax-grid-layout-container',\n  template: `<ng-content></ng-content> `,\n  styleUrl: './grid-layout-container.css',\n\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: AXComponent, useExisting: AXGridLayoutContainerComponent }],\n})\nexport class AXGridLayoutContainerComponent extends NXComponent implements OnDestroy {\n  //#region Inputs and Outputs\n  public options = input<AXGridLayoutOptions>();\n\n  protected onAdded = output<AXGridLayoutEvent>();\n  protected onRemoved = output<AXGridLayoutEvent>();\n  protected onWidgetChange = output<AXGridLayoutEvent>();\n  protected onChange = output<AXGridLayoutEvent>();\n  protected onRender = output<void>();\n\n  protected isEmpty = model(false);\n  //#endregion\n\n  //#region Private Properties\n  private readonly elementRef: ElementRef<AXGridLayoutContainerElement> = inject(ElementRef);\n  private readonly ngZone = inject(NgZone);\n\n  @ContentChildren(AXGridLayoutWidgetComponent) public gridstackItems?: QueryList<AXGridLayoutWidgetComponent>;\n\n  private el = this.elementRef.nativeElement;\n  private grid?: AXGridLayout;\n  protected _sub: Subscription | undefined;\n  private isInitialized = false;\n  //#endregion\n\n  //#region Initialization\n  #init = afterNextRender(() => {\n    this.ngZone.runOutsideAngular(async () => {\n      const { GridStack } = await import('gridstack');\n      const gridStackOptions = removeUndefinedKeys(convertAXGridLayoutOptionsToGridStackOptions(this.options() ?? {}));\n      this.grid = GridStack.init(gridStackOptions, this.el);\n      this.updateAll();\n      this.hookEvents(this.grid);\n      this.onRender.emit();\n      this.isInitialized = true;\n    });\n    this._sub = this.gridstackItems?.changes.subscribe(() => {\n      this.updateAll();\n    });\n  });\n\n  // Watch for options changes\n  #optionsEffect = effect(() => {\n    const newOptions = this.options();\n    if (this.isInitialized && this.grid && newOptions) {\n      untracked(() => {\n        this.ngZone.runOutsideAngular(() => {\n          const gridStackOptions = removeUndefinedKeys(convertAXGridLayoutOptionsToGridStackOptions(newOptions));\n\n          const column = gridStackOptions.column;\n\n          // Detect whether the column count is changing — requires loading from stored input positions\n          const isColumnChange = typeof column === 'number' && column !== this.grid?.opts?.column;\n\n          // Use 'none' layout mode to prevent GridStack from auto-reflowing widget positions.\n          // The correct per-breakpoint positions will be loaded explicitly via updateAll(true).\n          if (typeof column === 'number') {\n            this.grid?.column(column, 'none');\n          }\n\n          if (gridStackOptions.cellHeight !== undefined) {\n            this.grid?.cellHeight(gridStackOptions.cellHeight);\n          }\n\n          if (gridStackOptions.margin !== undefined) {\n            this.grid?.margin(gridStackOptions.margin);\n          }\n\n          if (gridStackOptions.disableResize !== undefined) {\n            this.grid?.enableResize(!gridStackOptions.disableResize);\n          }\n\n          if (gridStackOptions.disableDrag !== undefined) {\n            this.grid?.enableMove(!gridStackOptions.disableDrag);\n          }\n\n          if (gridStackOptions.float !== undefined) {\n            this.grid?.float(gridStackOptions.float);\n          }\n\n          if (gridStackOptions.animate !== undefined) {\n            this.grid?.setAnimation(gridStackOptions.animate);\n          }\n\n          // When column count changes, read from Angular inputs (stored per-breakpoint positions)\n          // to avoid using stale gridstackNode positions from the old column layout.\n          // For non-column changes, read from gridstackNode to preserve live drag/resize state.\n          this.updateAll(isColumnChange);\n        });\n      });\n    }\n  });\n\n  public ngOnDestroy(): void {\n    this.unhookEvents(this.grid);\n    this._sub?.unsubscribe();\n    this.destroy();\n  }\n  //#endregion\n\n  //#region Internal Methods\n\n  /**\n   * Synchronizes the grid layout with the current widget list.\n   *\n   * @param useInputValues - When true, reads positions from Angular input bindings\n   * (stored per-breakpoint positions). When false, reads from live gridstackNode\n   * (preserving user drag/resize state). Use true after column/breakpoint changes.\n   */\n  private updateAll(useInputValues = false) {\n    if (!this.grid) return;\n\n    const arrays = this.gridstackItems?.toArray() ?? [];\n\n    if (arrays.length === 0) {\n      this.grid.removeAll(true);\n      this.checkEmpty();\n      return;\n    }\n\n    const layout: AXGridLayoutNode[] = [];\n    arrays.forEach((item) => {\n      const widgetOptions = useInputValues ? item.getInputOptions() : item.getOptions();\n      if (widgetOptions) {\n        const normalized = normalizeLayoutNodeWithAllowedSizes(widgetOptions);\n        writeAllowedSizesToElement(normalized.element ?? item.element, normalized.allowedSizes);\n        layout.push(removeUndefinedKeys(convertAXGridLayoutNodeToGridStackNode(normalized)));\n      }\n    });\n\n    this.grid.load(layout);\n    this.checkEmpty();\n  }\n\n  private checkEmpty() {\n    if (this.grid) {\n      const isEmpty = !this.getChildren().length;\n      if (isEmpty === this.isEmpty()) return;\n      this.isEmpty.set(isEmpty);\n    }\n  }\n\n  private hookEvents(grid?: AXGridLayout): void {\n    if (grid) {\n      grid\n        .on('added', (event: Event, nodes: import('gridstack').GridStackNode[]) => {\n          const mappedNodes = nodes.map((node) => removeUndefinedKeys(convertGridStackNodeToAXGridLayoutNode(node)));\n          this.checkEmpty();\n          this.onAdded.emit({ sender: this, nodes: mappedNodes });\n          this._dispatchChangeEvent();\n        })\n        .on('removed', (event: Event, nodes: import('gridstack').GridStackNode[]) => {\n          const mappedNodes = nodes.map((node) => removeUndefinedKeys(convertGridStackNodeToAXGridLayoutNode(node)));\n          this.checkEmpty();\n          this.onRemoved.emit({ sender: this, nodes: mappedNodes });\n          this._dispatchChangeEvent();\n        })\n        .on('change', (event: Event, nodes: import('gridstack').GridStackNode[]) => {\n          const mappedNodes = nodes.map((node) => removeUndefinedKeys(convertGridStackNodeToAXGridLayoutNode(node)));\n          this.onWidgetChange.emit({ sender: this, nodes: mappedNodes });\n          this._dispatchChangeEvent();\n        })\n        .on('resizestart', (_event: Event, element: import('gridstack').GridItemHTMLElement) => {\n          if (!this.grid) {\n            return;\n          }\n          storeResizeStartSize(element);\n          updateResizeValidityMarkers(this.grid.el, element);\n        })\n        .on('resize', (_event: Event, element: import('gridstack').GridItemHTMLElement) => {\n          if (!this.grid) {\n            return;\n          }\n          updateResizeValidityMarkers(this.grid.el, element);\n        })\n        .on('resizestop', (_event: Event, element: import('gridstack').GridItemHTMLElement) => {\n          if (!this.grid) {\n            return;\n          }\n\n          clearResizeValidityMarkers(this.grid.el);\n\n          const didRevert = revertElementToAllowedSizeIfInvalid(this.grid, element);\n          clearResizeStartSize(element);\n          if (didRevert) {\n            this._dispatchChangeEvent();\n          }\n        });\n    }\n  }\n\n  private unhookEvents(grid?: AXGridLayout) {\n    if (grid) grid.offAll();\n  }\n\n  private _dispatchChangeEvent() {\n    if (this.getChildren().length) {\n      this.onChange.emit({\n        sender: this,\n        nodes: this.getChildren(),\n      });\n    }\n  }\n  //#endregion\n\n  /**\n   * Adds a widget to the grid layout.\n   *\n   * @param w - Widget configuration object.\n   * @param withAutoArrange - Whether to compact the grid before adding the widget.\n   * @returns AXGridLayoutWidgetElement | undefined - The created widget element or undefined if failed.\n   */\n  public addWidget(w: AXGridLayoutWidget, withAutoArrange = false): AXGridLayoutWidgetElement | undefined {\n    if (withAutoArrange) this.compact();\n\n    const gridStackWidget = removeUndefinedKeys(convertAXGridLayoutWidgetToGridStackWidget(w));\n    const node = this.grid?.addWidget(gridStackWidget)?.gridstackNode;\n    if (!node) return undefined;\n\n    const widgetElement: AXGridLayoutWidgetElement = node.el as AXGridLayoutWidgetElement;\n    widgetElement.gridstackNode = removeUndefinedKeys(convertGridStackNodeToAXGridLayoutNode(node));\n\n    return widgetElement;\n  }\n\n  /**\n   * Compacts the grid layout.\n   *\n   * @param layout - Layout type for compacting ('list' or 'compact').\n   * @param doSort - Whether to sort items while compacting.\n   * @returns void - No return value. The grid layout is compacted.\n   */\n  public compact(layout: 'list' | 'compact' = 'compact', doSort = true): void {\n    this.grid?.compact(layout, doSort);\n  }\n\n  /**\n   * Sets the cell height of the grid.\n   *\n   * @param val - New cell height value.\n   * @returns void - No return value. The cell height is updated.\n   */\n  public setCellHeight(val: number): void {\n    this.grid?.cellHeight(val);\n  }\n\n  /**\n   * Sets the number of columns in the grid.\n   *\n   * @param column - Number of columns.\n   * @param layout - Layout type for the change ('list', 'compact', 'moveScale', 'move', 'scale', or 'none').\n   * @returns void - No return value. The column count is updated.\n   */\n  public setColumn(\n    column: number,\n    layout: 'list' | 'compact' | 'moveScale' | 'move' | 'scale' | 'none' = 'moveScale',\n  ): void {\n    this.grid?.column(column, layout);\n  }\n\n  /**\n   * Destroys the grid instance.\n   *\n   * @param removeDOM - Whether to remove DOM elements.\n   * @returns void - No return value. The grid instance is destroyed.\n   */\n  public destroy(removeDOM = true): void {\n    this.grid?.destroy(removeDOM);\n  }\n\n  /**\n   * Enables or disables moving of widgets.\n   *\n   * @param state - Whether to enable moving.\n   * @param recurse - Whether to apply to all child widgets.\n   * @returns void - No return value. The move state is updated.\n   */\n  public setMovable(state: boolean, recurse?: boolean) {\n    this.grid?.enableMove(state, recurse);\n  }\n\n  /**\n   * Enables or disables resizing of widgets.\n   *\n   * @param state - Whether to enable resizing.\n   * @param recurse - Whether to apply to all child widgets.\n   * @returns void - No return value. The resize state is updated.\n   */\n  public setResizable(state: boolean, recurse?: boolean) {\n    this.grid?.enableResize(state, recurse);\n  }\n\n  /**\n   * Sets the float property of the grid.\n   *\n   * @param val - Whether to enable floating widgets.\n   * @returns void - No return value. The float state is updated.\n   */\n  public setFloat(val: boolean): void {\n    this.grid?.float(val);\n  }\n\n  /**\n   * Sets the margin between grid items.\n   *\n   * @param value - Margin value (number in pixels or string with units).\n   * @returns void - No return value. The margin is updated.\n   */\n  public setMargin(value: number | string): void {\n    this.grid?.margin(value);\n  }\n\n  /**\n   * Removes a specific widget from the grid.\n   *\n   * @param el - The widget element to remove.\n   * @param removeDOM - Whether to remove the DOM element.\n   * @param triggerEvent - Whether to trigger removal events.\n   * @returns void - No return value. The widget is removed.\n   */\n  public removeWidget(el: AXGridLayoutWidgetElement, removeDOM = true, triggerEvent = true): void {\n    this.grid?.removeWidget(el, removeDOM, triggerEvent);\n  }\n\n  /**\n   * Removes all widgets from the grid.\n   *\n   * @param removeDOM - Whether to remove DOM elements.\n   * @returns void - No return value. All widgets are removed.\n   */\n  public removeAll(removeDOM = true): void {\n    this.grid?.removeAll(removeDOM);\n  }\n\n  /**\n   * Sets the animation state for the grid.\n   *\n   * @param doAnimate - Whether to enable animations.\n   * @returns void - No return value. The animation state is updated.\n   */\n  public setAnimation(doAnimate: boolean): void {\n    this.grid?.setAnimation(doAnimate);\n  }\n\n  /**\n   * Sets up draggable functionality for external elements.\n   *\n   * @param dragIn - CSS selector string or array of HTML elements to make draggable.\n   * @param widgets - Optional widget configuration for dragged items.\n   * @returns Promise<void> - Promise that resolves when drag setup is complete.\n   */\n  public async setupDraggable(dragIn?: string | HTMLElement[], widgets?: AXGridLayoutWidget) {\n    if (typeof dragIn === 'string') {\n      document.querySelectorAll(dragIn).forEach((item) => {\n        if (!item.classList.contains('grid-stack-item')) {\n          item.classList.add('grid-stack-item');\n        }\n      });\n    }\n    const { GridStack } = await import('gridstack');\n    const gridStackWidgets = widgets\n      ? [removeUndefinedKeys(convertAXGridLayoutWidgetToGridStackWidget(widgets))]\n      : undefined;\n    GridStack.setupDragIn(dragIn, undefined, gridStackWidgets);\n  }\n\n  /**\n   * Gets the current grid options.\n   *\n   * @returns AXGridLayoutOptions - Current grid configuration options.\n   */\n  public getOptions(): AXGridLayoutOptions {\n    const opts = this.grid?.opts;\n    if (!opts) return {};\n\n    return removeUndefinedKeys(convertGridStackOptionsToAXGridLayoutOptions(opts));\n  }\n\n  /**\n   * Gets all child widgets in the grid.\n   *\n   * @returns AXGridLayoutNode[] - Array of all child widget nodes.\n   */\n  public getChildren(): AXGridLayoutNode[] {\n    const children = this.grid?.engine.nodes ?? [];\n    return children.map((node) => removeUndefinedKeys(convertGridStackNodeToAXGridLayoutNode(node)));\n  }\n\n  /**\n   * Finds an empty space in the grid for a widget.\n   *\n   * @param input - Dimensions of the widget with height and width.\n   * @returns { x: number; y: number } - Object containing x and y coordinates of empty space.\n   */\n  public findEmptySpace(\n    input: Required<Pick<AXGridLayoutPosition, 'height' | 'width'>>,\n  ): Pick<AXGridLayoutPosition, 'x' | 'y'> {\n    const value = { h: input.height, w: input.width } as import('gridstack').GridStackNode;\n    this.grid?.engine.findEmptyPosition(value);\n    return { x: value.x, y: value.y };\n  }\n  //#endregion\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXGridLayoutContainerComponent } from './grid-layout-container.component';\nimport { AXGridLayoutWidgetComponent } from './grid-layout-widget.component';\n\n@NgModule({\n  imports: [CommonModule, AXGridLayoutContainerComponent, AXGridLayoutWidgetComponent],\n  exports: [AXGridLayoutContainerComponent, AXGridLayoutWidgetComponent],\n})\nexport class AXGridLayoutBuilderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}