{"version":3,"file":"mtxSplit.mjs","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.ts","../../../projects/extensions/split/split.html","../../../projects/extensions/split/split-pane.ts","../../../projects/extensions/split/split-module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n  MtxSplitArea,\n  MtxSplitPoint,\n  MtxSplitAreaSnapshot,\n  MtxSplitSideAbsorptionCapacity,\n  MtxSplitAreaAbsorptionCapacity,\n} from './interfaces';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n  // TouchEvent\n  if (\n    (event as TouchEvent).changedTouches !== undefined &&\n    (event as TouchEvent).changedTouches.length > 0\n  ) {\n    return {\n      x: (event as TouchEvent).changedTouches[0].clientX,\n      y: (event as TouchEvent).changedTouches[0].clientY,\n    };\n  }\n  // MouseEvent\n  else if (\n    (event as MouseEvent).clientX !== undefined &&\n    (event as MouseEvent).clientY !== undefined\n  ) {\n    return {\n      x: (event as MouseEvent).clientX,\n      y: (event as MouseEvent).clientY,\n    };\n  }\n  return null;\n}\n\nexport function getElementPixelSize(\n  elRef: ElementRef,\n  direction: 'horizontal' | 'vertical'\n): number {\n  const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n  return direction === 'horizontal' ? rect.width : rect.height;\n}\n\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\n  if (v === null || v === undefined) {\n    return defaultValue;\n  }\n\n  v = Number(v);\n  return !isNaN(v) && v >= 0 ? v : defaultValue;\n}\n\nexport function isUserSizesValid(\n  unit: 'percent' | 'pixel',\n  sizes: number[]\n): boolean | number | void {\n  // All sizes have to be not null and total should be 100\n  if (unit === 'percent') {\n    const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\n    return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\n  }\n\n  // A size at null is mandatory but only one.\n  if (unit === 'pixel') {\n    return sizes.filter(s => s === null).length === 1;\n  }\n}\n\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\n  if (a.size === null) {\n    return null;\n  }\n\n  if (a.component.lockSize === true) {\n    return a.size;\n  }\n\n  if (a.component.minSize === null) {\n    return null;\n  }\n\n  if (a.component.minSize > a.size) {\n    return a.size;\n  }\n\n  return a.component.minSize;\n}\n\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\n  if (a.size === null) {\n    return null;\n  }\n\n  if (a.component.lockSize === true) {\n    return a.size;\n  }\n\n  if (a.component.maxSize === null) {\n    return null;\n  }\n\n  if (a.component.maxSize < a.size) {\n    return a.size;\n  }\n\n  return a.component.maxSize;\n}\n\nexport function getGutterSideAbsorptionCapacity(\n  unit: 'percent' | 'pixel',\n  sideAreas: MtxSplitAreaSnapshot[],\n  pixels: number,\n  allAreasSizePixel: number\n): MtxSplitSideAbsorptionCapacity {\n  return sideAreas.reduce(\n    (acc: any, area) => {\n      const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\n      acc.list.push(res);\n      acc.remain = res && res.pixelRemain;\n      return acc;\n    },\n    { remain: pixels, list: [] }\n  );\n}\n\nexport function getAreaAbsorptionCapacity(\n  unit: 'percent' | 'pixel',\n  areaSnapshot: MtxSplitAreaSnapshot,\n  pixels: number,\n  allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n  // No pain no gain\n  if (pixels === 0) {\n    return {\n      areaSnapshot,\n      pixelAbsorb: 0,\n      percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\n      pixelRemain: 0,\n    };\n  }\n\n  // Area start at zero and need to be reduced, not possible\n  if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\n    return {\n      areaSnapshot,\n      pixelAbsorb: 0,\n      percentAfterAbsorption: 0,\n      pixelRemain: pixels,\n    };\n  }\n\n  if (unit === 'percent') {\n    return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\n  }\n\n  if (unit === 'pixel') {\n    return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\n  }\n}\n\nexport function getAreaAbsorptionCapacityPercent(\n  areaSnapshot: MtxSplitAreaSnapshot,\n  pixels: number,\n  allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n  const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n  const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\n\n  // ENLARGE AREA\n\n  if (pixels > 0) {\n    // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n    if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\n      // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\n      const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\n      return {\n        areaSnapshot,\n        pixelAbsorb: maxSizePixel,\n        percentAfterAbsorption: areaSnapshot.area.maxSize,\n        pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\n      };\n    }\n    return {\n      areaSnapshot,\n      pixelAbsorb: pixels,\n      percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\n      pixelRemain: 0,\n    };\n  }\n\n  // REDUCE AREA\n  else if (pixels < 0) {\n    // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n    if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\n      // Use area.area.minSize as newPercentSize and return calculate pixels remaining\n      const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\n      return {\n        areaSnapshot,\n        pixelAbsorb: minSizePixel,\n        percentAfterAbsorption: areaSnapshot.area.minSize,\n        pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\n      };\n    }\n    // If reduced under zero > return remaining pixels\n    else if (tempPercentSize < 0) {\n      // Use 0 as newPercentSize and return calculate pixels remaining\n      return {\n        areaSnapshot,\n        pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n        percentAfterAbsorption: 0,\n        pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n      };\n    }\n    return {\n      areaSnapshot,\n      pixelAbsorb: pixels,\n      percentAfterAbsorption: tempPercentSize,\n      pixelRemain: 0,\n    };\n  }\n}\n\nexport function getAreaAbsorptionCapacityPixel(\n  areaSnapshot: MtxSplitAreaSnapshot,\n  pixels: number,\n  containerSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n  const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n\n  // ENLARGE AREA\n\n  if (pixels > 0) {\n    // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n    if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\n      return {\n        areaSnapshot,\n        pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\n        percentAfterAbsorption: -1,\n        pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\n      };\n    }\n    return {\n      areaSnapshot,\n      pixelAbsorb: pixels,\n      percentAfterAbsorption: -1,\n      pixelRemain: 0,\n    };\n  }\n\n  // REDUCE AREA\n  else if (pixels < 0) {\n    // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n    if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\n      return {\n        areaSnapshot,\n        pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\n        percentAfterAbsorption: -1,\n        pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\n      };\n    }\n    // If reduced under zero > return remaining pixels\n    else if (tempPixelSize < 0) {\n      return {\n        areaSnapshot,\n        pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n        percentAfterAbsorption: -1,\n        pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n      };\n    }\n    return {\n      areaSnapshot,\n      pixelAbsorb: pixels,\n      percentAfterAbsorption: -1,\n      pixelRemain: 0,\n    };\n  }\n}\n\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\n  if (unit === 'percent') {\n    item.areaSnapshot.area.size = item.percentAfterAbsorption;\n  } else if (unit === 'pixel') {\n    // Update size except for the wildcard size area\n    if (item.areaSnapshot.area.size !== null) {\n      item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  Output,\n  QueryList,\n  Renderer2,\n  ViewChildren,\n  ViewEncapsulation,\n  booleanAttribute,\n  inject,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { Observable, Subject, Subscriber } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n  MtxSplitArea,\n  MtxSplitAreaSnapshot,\n  MtxSplitDefaultOptions,\n  MtxSplitOutputAreaSizes,\n  MtxSplitOutputData,\n  MtxSplitPoint,\n  MtxSplitSnapshot,\n} from './interfaces';\nimport { MtxSplitPane } from './split-pane';\nimport {\n  getAreaMaxSize,\n  getAreaMinSize,\n  getElementPixelSize,\n  getGutterSideAbsorptionCapacity,\n  getInputPositiveNumber,\n  getPointFromEvent,\n  isUserSizesValid,\n  updateAreaSize,\n} from './utils';\n\n/** Injection token that can be used to specify default split options. */\nexport const MTX_SPLIT_DEFAULT_OPTIONS = new InjectionToken<MtxSplitDefaultOptions>(\n  'mtx-split-default-options'\n);\n\n/**\n * mtx-split\n *\n *\n *  PERCENT MODE ([unit]=\"'percent'\")\n *  ___________________________________________________________________________________________\n * |       A       [g1]       B       [g2]       C       [g3]       D       [g4]       E       |\n * |-------------------------------------------------------------------------------------------|\n * |       20                 30                 20                 15                 15      | <-- [size]=\"x\"\n * |               10px               10px               10px               10px               | <-- [gutterSize]=\"10\"\n * |calc(20% - 8px)    calc(30% - 12px)   calc(20% - 8px)    calc(15% - 6px)    calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\n * |     152px              228px              152px              114px              114px     | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n *                                                                                 800px         <-- el.getBoundingClientRect().width\n *  flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n *  PIXEL MODE ([unit]=\"'pixel'\")\n *  ___________________________________________________________________________________________\n * |       A       [g1]       B       [g2]       C       [g3]       D       [g4]       E       |\n * |-------------------------------------------------------------------------------------------|\n * |      100                250                 *                 150                100      | <-- [size]=\"y\"\n * |               10px               10px               10px               10px               | <-- [gutterSize]=\"10\"\n * |   0 0 100px          0 0 250px           1 1 auto          0 0 150px          0 0 100px   | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * |     100px              250px              200px              150px              100px     | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n *                                                                                 800px         <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n  selector: 'mtx-split',\n  exportAs: 'mtxSplit',\n  host: {\n    class: 'mtx-split',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrl: './split.scss',\n  templateUrl: './split.html',\n})\nexport class MtxSplit implements AfterViewInit, OnDestroy {\n  private ngZone = inject(NgZone);\n  private elRef = inject(ElementRef);\n  private cdRef = inject(ChangeDetectorRef);\n  private renderer = inject(Renderer2);\n  protected _defaultOptions = inject<MtxSplitDefaultOptions>(MTX_SPLIT_DEFAULT_OPTIONS, {\n    optional: true,\n  });\n\n  @Input() color: ThemePalette;\n\n  /** The split direction. */\n  @Input()\n  get direction() {\n    return this._direction;\n  }\n  set direction(v: 'horizontal' | 'vertical') {\n    this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n    this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n    this.renderer.removeClass(\n      this.elRef.nativeElement,\n      `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n    );\n\n    this.build(false, false);\n  }\n  private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n  /** The unit you want to specify area sizes. */\n  @Input()\n  get unit() {\n    return this._unit;\n  }\n  set unit(v: 'percent' | 'pixel') {\n    this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n    this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n    this.renderer.removeClass(\n      this.elRef.nativeElement,\n      `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n    );\n\n    this.build(false, true);\n  }\n  private _unit: 'percent' | 'pixel' = 'percent';\n\n  /** Gutters's size (dragging elements) in pixels. */\n  @Input()\n  get gutterSize() {\n    return this._gutterSize;\n  }\n  set gutterSize(v: number) {\n    this._gutterSize = getInputPositiveNumber(v, 4);\n\n    this.build(false, false);\n  }\n  private _gutterSize = 4;\n\n  /** Gutter step while moving in pixels. */\n  @Input()\n  get gutterStep() {\n    return this._gutterStep;\n  }\n  set gutterStep(v: number) {\n    this._gutterStep = getInputPositiveNumber(v, 1);\n  }\n  private _gutterStep = 1;\n\n  /** Set to true if you want to limit gutter move to adjacent areas only. */\n  @Input({ transform: booleanAttribute }) restrictMove = false;\n\n  /** Add transition when toggling visibility using `visible` or `size` changes. */\n  @Input({ transform: booleanAttribute })\n  get useTransition() {\n    return this._useTransition;\n  }\n  set useTransition(v: boolean) {\n    this._useTransition = v;\n\n    if (this._useTransition) {\n      this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n    } else {\n      this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n    }\n  }\n  private _useTransition = false;\n\n  /**\n   * Disable the dragging feature (remove cursor/image on gutters).\n   * `gutterClick`/`gutterDblClick` still emits.\n   */\n  @Input({ transform: booleanAttribute })\n  get disabled() {\n    return this._disabled;\n  }\n  set disabled(v: boolean) {\n    this._disabled = v;\n\n    if (this._disabled) {\n      this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n    } else {\n      this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n    }\n  }\n  private _disabled = false;\n\n  /** Indicates the directionality of the areas. */\n  @Input()\n  get dir() {\n    return this._dir;\n  }\n  set dir(v: 'ltr' | 'rtl') {\n    this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n    this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n  }\n  private _dir: 'ltr' | 'rtl' = 'ltr';\n\n  /**\n   * Milliseconds to detect a double click on a gutter. Set it around 300-500ms if\n   * you want to use `gutterDblClick` event.\n   */\n  @Input()\n  get gutterDblClickDuration() {\n    return this._gutterDblClickDuration;\n  }\n  set gutterDblClickDuration(v: number) {\n    this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n  }\n  private _gutterDblClickDuration = 0;\n\n  /** Event emitted when drag starts. */\n  @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n  /** Event emitted when drag ends. */\n  @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n  /** Event emitted when user clicks on a gutter. */\n  @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n  /** Event emitted when user double clicks on a gutter. */\n  @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n  /**\n   * Event emitted when transition ends (could be triggered from `visible` or `size` changes).\n   * Only if `useTransition` equals true.\n   */\n  @Output()\n  get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n    return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n      debounceTime<any>(20)\n    );\n  }\n  private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n\n  private dragProgressSubject = new Subject<MtxSplitOutputData>();\n  dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n  private isDragging = false;\n  private dragListeners: (() => void)[] = [];\n  private snapshot: MtxSplitSnapshot | null = null;\n  private startPoint: MtxSplitPoint | null = null;\n  private endPoint: MtxSplitPoint | null = null;\n\n  public readonly displayedAreas: MtxSplitArea[] = [];\n  private readonly hidedAreas: MtxSplitArea[] = [];\n\n  @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n  constructor() {\n    const _defaultOptions = this._defaultOptions;\n\n    if (_defaultOptions) {\n      this.color = _defaultOptions.color ?? 'primary';\n      this.direction = _defaultOptions.direction ?? 'horizontal';\n      this.dir = _defaultOptions.dir ?? 'ltr';\n      this.unit = _defaultOptions.unit ?? 'percent';\n      this.gutterDblClickDuration = _defaultOptions.gutterDblClickDuration ?? 0;\n      this.gutterSize = _defaultOptions.gutterSize ?? 4;\n      this.gutterStep = _defaultOptions.gutterStep ?? 1;\n      this.restrictMove = _defaultOptions.restrictMove ?? false;\n      this.useTransition = _defaultOptions.useTransition ?? false;\n    }\n  }\n\n  ngAfterViewInit() {\n    this.ngZone.runOutsideAngular(() => {\n      // To avoid transition at first rendering\n      setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n    });\n  }\n\n  private getNbGutters(): number {\n    return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n  }\n\n  addArea(component: MtxSplitPane): void {\n    const newArea: MtxSplitArea = {\n      component,\n      order: 0,\n      size: 0,\n      minSize: null,\n      maxSize: null,\n    };\n\n    if (component.visible === true) {\n      this.displayedAreas.push(newArea);\n\n      this.build(true, true);\n    } else {\n      this.hidedAreas.push(newArea);\n    }\n  }\n\n  removeArea(component: MtxSplitPane): void {\n    if (this.displayedAreas.some(a => a.component === component)) {\n      const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n      this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n      this.build(true, true);\n    } else if (this.hidedAreas.some(a => a.component === component)) {\n      const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n      this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n    }\n  }\n\n  updateArea(component: MtxSplitPane, resetOrders: boolean, resetSizes: boolean): void {\n    if (component.visible === true) {\n      this.build(resetOrders, resetSizes);\n    }\n  }\n\n  showArea(component: MtxSplitPane): void {\n    const area = this.hidedAreas.find(a => a.component === component);\n    if (area === undefined) {\n      return;\n    }\n\n    const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n    this.displayedAreas.push(...areas);\n\n    this.build(true, true);\n  }\n\n  hideArea(comp: MtxSplitPane): void {\n    const area = this.displayedAreas.find(a => a.component === comp);\n    if (area === undefined) {\n      return;\n    }\n\n    const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n    areas.forEach(_area => {\n      _area.order = 0;\n      _area.size = 0;\n    });\n    this.hidedAreas.push(...areas);\n\n    this.build(true, true);\n  }\n\n  getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n    return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n  }\n\n  setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n    if (sizes.length !== this.displayedAreas.length) {\n      return false;\n    }\n\n    const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n    const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n    if (isValid === false) {\n      return false;\n    }\n\n    this.displayedAreas.forEach((area, i) => (area.component.size = formatedSizes[i]));\n\n    this.build(false, true);\n    return true;\n  }\n\n  private build(resetOrders: boolean, resetSizes: boolean): void {\n    this.stopDragging();\n\n    // ¤ AREAS ORDER\n\n    if (resetOrders === true) {\n      // If user provided 'order' for each area, use it to sort them.\n      if (this.displayedAreas.every(a => a.component.order !== null)) {\n        this.displayedAreas.sort(\n          (a, b) => (a.component.order as number) - (b.component.order as number)\n        );\n      }\n\n      // Then set real order with multiples of 2, numbers between will be used by gutters.\n      this.displayedAreas.forEach((area, i) => {\n        area.order = i * 2;\n        area.component.setStyleOrder(area.order);\n      });\n    }\n\n    // ¤ AREAS SIZE\n\n    if (resetSizes === true) {\n      const useUserSizes = isUserSizesValid(\n        this.unit,\n        this.displayedAreas.map(a => a.component.size) as number[]\n      );\n\n      switch (this.unit) {\n        case 'percent': {\n          const defaultSize = 100 / this.displayedAreas.length;\n\n          this.displayedAreas.forEach(area => {\n            area.size = useUserSizes ? (area.component.size as number) : defaultSize;\n            area.minSize = getAreaMinSize(area);\n            area.maxSize = getAreaMaxSize(area);\n          });\n          break;\n        }\n        case 'pixel': {\n          if (useUserSizes) {\n            this.displayedAreas.forEach(area => {\n              area.size = area.component.size;\n              area.minSize = getAreaMinSize(area);\n              area.maxSize = getAreaMaxSize(area);\n            });\n          } else {\n            const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\n\n            // No wildcard area > Need to select one arbitrarily > first\n            if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\n              this.displayedAreas.forEach((area, i) => {\n                area.size = i === 0 ? null : area.component.size;\n                area.minSize = i === 0 ? null : getAreaMinSize(area);\n                area.maxSize = i === 0 ? null : getAreaMaxSize(area);\n              });\n            }\n            // More than one wildcard area > Need to keep only one arbitrarly > first\n            else if (wildcardSizeAreas.length > 1) {\n              let alreadyGotOne = false;\n              this.displayedAreas.forEach(area => {\n                if (area.component.size === null) {\n                  if (alreadyGotOne === false) {\n                    area.size = null;\n                    area.minSize = null;\n                    area.maxSize = null;\n                    alreadyGotOne = true;\n                  } else {\n                    area.size = 100;\n                    area.minSize = null;\n                    area.maxSize = null;\n                  }\n                } else {\n                  area.size = area.component.size;\n                  area.minSize = getAreaMinSize(area);\n                  area.maxSize = getAreaMaxSize(area);\n                }\n              });\n            }\n          }\n          break;\n        }\n      }\n    }\n\n    this.refreshStyleSizes();\n    this.cdRef.markForCheck();\n  }\n\n  private refreshStyleSizes(): void {\n    ///////////////////////////////////////////\n    // PERCENT MODE\n    if (this.unit === 'percent') {\n      // Only one area > flex-basis 100%\n      if (this.displayedAreas.length === 1) {\n        this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\n      }\n      // Multiple areas > use each percent basis\n      else {\n        const sumGutterSize = this.getNbGutters() * this.gutterSize;\n\n        this.displayedAreas.forEach(area => {\n          area.component.setStyleFlex(\n            0,\n            0,\n            `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\n            area.minSize !== null && area.minSize === area.size ? true : false,\n            area.maxSize !== null && area.maxSize === area.size ? true : false\n          );\n        });\n      }\n    }\n    ///////////////////////////////////////////\n    // PIXEL MODE\n    else if (this.unit === 'pixel') {\n      this.displayedAreas.forEach(area => {\n        // Area with wildcard size\n        if (area.size === null) {\n          if (this.displayedAreas.length === 1) {\n            area.component.setStyleFlex(1, 1, `100%`, false, false);\n          } else {\n            area.component.setStyleFlex(1, 1, `auto`, false, false);\n          }\n        }\n        // Area with pixel size\n        else {\n          // Only one area > flex-basis 100%\n          if (this.displayedAreas.length === 1) {\n            area.component.setStyleFlex(0, 0, `100%`, false, false);\n          }\n          // Multiple areas > use each pixel basis\n          else {\n            area.component.setStyleFlex(\n              0,\n              0,\n              `${area.size}px`,\n              area.minSize !== null && area.minSize === area.size ? true : false,\n              area.maxSize !== null && area.maxSize === area.size ? true : false\n            );\n          }\n        }\n      });\n    }\n  }\n\n  _clickTimeout: number | null = null;\n\n  clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\n    const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\n\n    // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\n    if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\n      // If timeout in progress and new click > clearTimeout & dblClickEvent\n      if (this._clickTimeout !== null) {\n        window.clearTimeout(this._clickTimeout);\n        this._clickTimeout = null;\n        this.notify('dblclick', gutterNum);\n        this.stopDragging();\n      }\n      // Else start timeout to call clickEvent at end\n      else {\n        this._clickTimeout = window.setTimeout(() => {\n          this._clickTimeout = null;\n          this.notify('click', gutterNum);\n          this.stopDragging();\n        }, this.gutterDblClickDuration);\n      }\n    }\n  }\n\n  startDragging(event: MouseEvent | TouchEvent, gutterOrder: number, gutterNum: number): void {\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.startPoint = getPointFromEvent(event);\n    if (this.startPoint === null || this.disabled === true) {\n      return;\n    }\n\n    this.snapshot = {\n      gutterNum,\n      lastSteppedOffset: 0,\n      allAreasSizePixel:\n        getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\n      allInvolvedAreasSizePercent: 100,\n      areasBeforeGutter: [],\n      areasAfterGutter: [],\n    };\n\n    this.displayedAreas.forEach(area => {\n      const areaSnapshot: MtxSplitAreaSnapshot = {\n        area,\n        sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\n        sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\n      };\n\n      if (area.order < gutterOrder) {\n        if (this.restrictMove === true) {\n          (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\n        } else {\n          (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\n        }\n      } else if (area.order > gutterOrder) {\n        if (this.restrictMove === true) {\n          if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\n            (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\n          }\n        } else {\n          (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\n        }\n      }\n    });\n\n    this.snapshot.allInvolvedAreasSizePercent = [\n      ...this.snapshot.areasBeforeGutter,\n      ...this.snapshot.areasAfterGutter,\n    ].reduce((t, a) => t + a.sizePercentAtStart, 0);\n\n    if (\n      this.snapshot.areasBeforeGutter.length === 0 ||\n      this.snapshot.areasAfterGutter.length === 0\n    ) {\n      return;\n    }\n\n    this.dragListeners.push(\n      this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\n    );\n    this.dragListeners.push(\n      this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\n    );\n    this.dragListeners.push(\n      this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\n    );\n\n    this.ngZone.runOutsideAngular(() => {\n      this.dragListeners.push(\n        this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\n      );\n      this.dragListeners.push(\n        this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\n      );\n    });\n\n    this.displayedAreas.forEach(area => area.component.lockEvents());\n\n    this.isDragging = true;\n    this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\n    this.renderer.addClass(\n      this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\n      'mtx-dragged'\n    );\n\n    this.notify('start', this.snapshot.gutterNum);\n  }\n\n  private dragEvent(event: MouseEvent | TouchEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (this._clickTimeout !== null) {\n      window.clearTimeout(this._clickTimeout);\n      this._clickTimeout = null;\n    }\n\n    if (this.isDragging === false) {\n      return;\n    }\n\n    this.endPoint = getPointFromEvent(event);\n    if (this.endPoint === null) {\n      return;\n    }\n\n    // Calculate steppedOffset\n\n    let offset =\n      this.direction === 'horizontal'\n        ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\n        : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\n    if (this.dir === 'rtl' && this.direction === 'horizontal') {\n      offset = -offset;\n    }\n    const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\n\n    if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\n      return;\n    }\n\n    (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\n\n    // Need to know if each gutter side areas could reacts to steppedOffset\n\n    let areasBefore = getGutterSideAbsorptionCapacity(\n      this.unit,\n      (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n      -steppedOffset,\n      (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n    );\n    let areasAfter = getGutterSideAbsorptionCapacity(\n      this.unit,\n      (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n      steppedOffset,\n      (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n    );\n\n    // Each gutter side areas can't absorb all offset\n    if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\n      if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\n        /** */\n      } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\n        areasAfter = getGutterSideAbsorptionCapacity(\n          this.unit,\n          (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n          steppedOffset + areasBefore.remain,\n          (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n        );\n      } else {\n        areasBefore = getGutterSideAbsorptionCapacity(\n          this.unit,\n          (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n          -(steppedOffset - areasAfter.remain),\n          (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n        );\n      }\n    }\n    // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\n    else if (areasBefore.remain !== 0) {\n      areasAfter = getGutterSideAbsorptionCapacity(\n        this.unit,\n        (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n        steppedOffset + areasBefore.remain,\n        (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n      );\n    }\n    // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\n    else if (areasAfter.remain !== 0) {\n      areasBefore = getGutterSideAbsorptionCapacity(\n        this.unit,\n        (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n        -(steppedOffset - areasAfter.remain),\n        (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n      );\n    }\n\n    if (this.unit === 'percent') {\n      // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\n      // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\n      const all = [...areasBefore.list, ...areasAfter.list];\n      const areaToReset = all.find(\n        a =>\n          a.percentAfterAbsorption !== 0 &&\n          a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\n          a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\n      );\n\n      if (areaToReset) {\n        areaToReset.percentAfterAbsorption =\n          (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\n          all\n            .filter(a => a !== areaToReset)\n            .reduce((total, a) => total + a.percentAfterAbsorption, 0);\n      }\n    }\n\n    // Now we know areas could absorb steppedOffset, time to really update sizes\n\n    areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\n    areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\n\n    this.refreshStyleSizes();\n    this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\n  }\n\n  private stopDragging(event?: Event): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n\n    if (this.isDragging === false) {\n      return;\n    }\n\n    this.displayedAreas.forEach(area => area.component.unlockEvents());\n\n    while (this.dragListeners.length > 0) {\n      const fct = this.dragListeners.pop();\n      if (fct) {\n        fct();\n      }\n    }\n\n    // Warning: Have to be before \"notify('end')\"\n    // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\n    this.isDragging = false;\n\n    // If moved from starting point, notify end\n    if (\n      this.endPoint &&\n      ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\n        (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\n    ) {\n      this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\n    }\n\n    this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\n    this.renderer.removeClass(\n      this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\n      'mtx-dragged'\n    );\n    this.snapshot = null;\n\n    // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\n    this.ngZone.runOutsideAngular(() => {\n      setTimeout(() => {\n        this.startPoint = null;\n        this.endPoint = null;\n      });\n    });\n  }\n\n  notify(\n    type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\n    gutterNum: number\n  ): void {\n    const sizes = this.getVisibleAreaSizes();\n\n    if (type === 'start') {\n      this.dragStart.emit({ gutterNum, sizes });\n    } else if (type === 'end') {\n      this.dragEnd.emit({ gutterNum, sizes });\n    } else if (type === 'click') {\n      this.gutterClick.emit({ gutterNum, sizes });\n    } else if (type === 'dblclick') {\n      this.gutterDblClick.emit({ gutterNum, sizes });\n    } else if (type === 'transitionEnd') {\n      if (this.transitionEndSubscriber) {\n        this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\n      }\n    } else if (type === 'progress') {\n      // Stay outside zone to allow users do what they want about change detection mechanism.\n      this.dragProgressSubject.next({ gutterNum, sizes });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.stopDragging();\n  }\n}\n","<ng-content></ng-content>\r\n@for (area of displayedAreas; track area; let index = $index; let last = $last) {\r\n  @if (!last) {\r\n    <div\r\n      #gutterEls\r\n      class=\"mtx-split-gutter\"\r\n      [class]=\"color ? 'mat-' + color : ''\"\r\n      [style.flex-basis.px]=\"gutterSize\"\r\n      [style.order]=\"index * 2 + 1\"\r\n      (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n      (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n      (mouseup)=\"clickGutter($event, index + 1)\"\r\n      (touchend)=\"clickGutter($event, index + 1)\"\r\n    >\r\n      <div class=\"mtx-split-gutter-handle\"></div>\r\n    </div>\r\n  }\r\n}\r\n","import {\n  Directive,\n  ElementRef,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  booleanAttribute,\n  inject,\n} from '@angular/core';\n\nimport { MtxSplit } from './split';\nimport { getInputPositiveNumber } from './utils';\n\n@Directive({\n  selector: 'mtx-split-pane, [mtx-split-pane]',\n  exportAs: 'mtxSplitPane',\n})\nexport class MtxSplitPane implements OnInit, OnDestroy {\n  private ngZone = inject(NgZone);\n  private renderer = inject(Renderer2);\n  private split = inject(MtxSplit);\n\n  elRef = inject(ElementRef);\n\n  /**\n   * Order of the area. Used to maintain the order of areas when toggling their visibility.\n   * Toggling area visibility without specifying an `order` leads to weird behavior.\n   */\n  @Input()\n  get order() {\n    return this._order;\n  }\n  set order(v: number | null) {\n    this._order = getInputPositiveNumber(v, null);\n\n    this.split.updateArea(this, true, false);\n  }\n  private _order: number | null = null;\n\n  /**\n   * Size of the area in selected unit (percent/pixel).\n   * - Percent: All areas sizes should equal to `100`, If not, all areas will have the same size.\n   * - Pixel: An area with wildcard size (`size=\"*\"`) is mandatory (only one) and\n   *   can't have `visible=\"false\"` or `minSize`/`maxSize`/`lockSize` properties.\n   */\n  @Input()\n  get size() {\n    return this._size;\n  }\n  set size(v: number | null) {\n    this._size = getInputPositiveNumber(v, null);\n\n    this.split.updateArea(this, false, true);\n  }\n  private _size: number | null = null;\n\n  /** Minimum pixel or percent size, should be equal to or smaller than provided `size`. */\n  @Input()\n  get minSize() {\n    return this._minSize;\n  }\n  set minSize(v: number | null) {\n    this._minSize = getInputPositiveNumber(v, null);\n\n    this.split.updateArea(this, false, true);\n  }\n  private _minSize: number | null = null;\n\n  /** Maximum pixel or percent size, should be equal to or larger than provided `size`. */\n  @Input()\n  get maxSize() {\n    return this._maxSize;\n  }\n  set maxSize(v: number | null) {\n    this._maxSize = getInputPositiveNumber(v, null);\n\n    this.split.updateArea(this, false, true);\n  }\n  private _maxSize: number | null = null;\n\n  /** Lock area size, same as `minSize`=`maxSize`=`size`. */\n  @Input({ transform: booleanAttribute })\n  get lockSize() {\n    return this._lockSize;\n  }\n  set lockSize(v: boolean) {\n    this._lockSize = v;\n\n    this.split.updateArea(this, false, true);\n  }\n  private _lockSize = false;\n\n  /** Hide area visually but still present in the DOM, use `ngIf` to completely remove it. */\n  @Input({ transform: booleanAttribute })\n  get visible() {\n    return this._visible;\n  }\n  set visible(v: boolean) {\n    this._visible = v;\n\n    if (this._visible) {\n      this.split.showArea(this);\n      this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n    } else {\n      this.split.hideArea(this);\n      this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n    }\n  }\n  private _visible = true;\n\n  private transitionListener!: () => void;\n  private readonly lockListeners: (() => void)[] = [];\n\n  constructor() {\n    this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n  }\n\n  ngOnInit(): void {\n    this.split.addArea(this);\n\n    this.ngZone.runOutsideAngular(() => {\n      this.transitionListener = this.renderer.listen(\n        this.elRef.nativeElement,\n        'transitionend',\n        (event: TransitionEvent) => {\n          // Limit only flex-basis transition to trigger the event\n          if (event.propertyName === 'flex-basis') {\n            this.split.notify('transitionEnd', -1);\n          }\n        }\n      );\n    });\n  }\n\n  setStyleOrder(value: number): void {\n    this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n  }\n\n  setStyleFlex(grow: number, shrink: number, basis: string, isMin: boolean, isMax: boolean): void {\n    // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n    this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n    this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n    this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n    if (isMin === true) {\n      this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n    } else {\n      this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n    }\n\n    if (isMax === true) {\n      this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n    } else {\n      this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n    }\n  }\n\n  lockEvents(): void {\n    this.ngZone.runOutsideAngular(() => {\n      this.lockListeners.push(\n        this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n      );\n      this.lockListeners.push(\n        this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n      );\n    });\n  }\n\n  unlockEvents(): void {\n    while (this.lockListeners.length > 0) {\n      const fct = this.lockListeners.pop();\n      if (fct) {\n        fct();\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.unlockEvents();\n\n    if (this.transitionListener) {\n      this.transitionListener();\n    }\n\n    this.split.removeArea(this);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplit } from './split';\nimport { MtxSplitPane } from './split-pane';\n\n@NgModule({\n  imports: [CommonModule, MtxSplit, MtxSplitPane],\n  exports: [MtxSplit, MtxSplitPane],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}