{"version":3,"file":"mtxSplit.mjs","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.component.ts","../../../projects/extensions/split/split.component.html","../../../projects/extensions/split/split-pane.directive.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 './interface';\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 getInputBoolean(v: any): boolean {\n  return typeof v === 'boolean' ? v : v === 'false' ? false : true;\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: Array<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: Array<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\nfunction 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\nfunction 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\nfunction 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  Component,\n  Input,\n  Output,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Renderer2,\n  AfterViewInit,\n  OnDestroy,\n  ElementRef,\n  NgZone,\n  ViewChildren,\n  QueryList,\n  EventEmitter,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { CanColor, mixinColor } from '@angular/material/core';\nimport { Observable, Subscriber, Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n  MtxSplitArea,\n  MtxSplitPoint,\n  MtxSplitSnapshot,\n  MtxSplitAreaSnapshot,\n  MtxSplitOutputData,\n  MtxSplitOutputAreaSizes,\n} from './interface';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\nimport {\n  getInputPositiveNumber,\n  getInputBoolean,\n  isUserSizesValid,\n  getAreaMinSize,\n  getAreaMaxSize,\n  getPointFromEvent,\n  getElementPixelSize,\n  getGutterSideAbsorptionCapacity,\n  updateAreaSize,\n} from './utils';\n\n// Boilerplate for applying mixins to _MtxSplitComponentBase.\n/** @docs-private */\nconst _MtxSplitComponentBase = mixinColor(\n  class {\n    constructor(public _elementRef: ElementRef) {}\n  }\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  styleUrls: [`./split.component.scss`],\n  templateUrl: './split.component.html',\n  inputs: ['color'],\n})\nexport class MtxSplitComponent\n  extends _MtxSplitComponentBase\n  implements AfterViewInit, OnDestroy, CanColor\n{\n  private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n  @Input() 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\n  get direction(): 'horizontal' | 'vertical' {\n    return this._direction;\n  }\n\n  ////\n\n  private _unit: 'percent' | 'pixel' = 'percent';\n\n  @Input() 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\n  get unit(): 'percent' | 'pixel' {\n    return this._unit;\n  }\n\n  ////\n\n  private _gutterSize = 4;\n\n  @Input() set gutterSize(v: number) {\n    this._gutterSize = getInputPositiveNumber(v, 11);\n\n    this.build(false, false);\n  }\n\n  get gutterSize(): number {\n    return this._gutterSize;\n  }\n\n  ////\n\n  private _gutterStep = 1;\n\n  @Input() set gutterStep(v: number) {\n    this._gutterStep = getInputPositiveNumber(v, 1);\n  }\n\n  get gutterStep(): number {\n    return this._gutterStep;\n  }\n\n  ////\n\n  private _restrictMove = false;\n\n  @Input() set restrictMove(v: boolean) {\n    this._restrictMove = getInputBoolean(v);\n  }\n\n  get restrictMove(): boolean {\n    return this._restrictMove;\n  }\n\n  ////\n\n  private _useTransition = false;\n\n  @Input() set useTransition(v: boolean) {\n    this._useTransition = getInputBoolean(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\n  get useTransition(): boolean {\n    return this._useTransition;\n  }\n\n  ////\n\n  private _disabled = false;\n\n  @Input() set disabled(v: boolean) {\n    this._disabled = getInputBoolean(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\n  get disabled(): boolean {\n    return this._disabled;\n  }\n\n  ////\n\n  private _dir: 'ltr' | 'rtl' = 'ltr';\n\n  @Input() 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\n  get dir(): 'ltr' | 'rtl' {\n    return this._dir;\n  }\n\n  ////\n\n  private _gutterDblClickDuration = 0;\n\n  @Input() set gutterDblClickDuration(v: number) {\n    this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n  }\n\n  get gutterDblClickDuration(): number {\n    return this._gutterDblClickDuration;\n  }\n\n  ////\n\n  @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n  @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n  @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n  @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n\n  private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n  @Output() get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n    return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n      debounceTime<any>(20)\n    );\n  }\n\n  private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n  dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n  ////\n\n  private isDragging = false;\n  private dragListeners: Array<() => void> = [];\n  private snapshot: MtxSplitSnapshot | null = null;\n  private startPoint: MtxSplitPoint | null = null;\n  private endPoint: MtxSplitPoint | null = null;\n\n  public readonly displayedAreas: Array<MtxSplitArea> = [];\n  private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n  @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n  constructor(\n    private ngZone: NgZone,\n    private elRef: ElementRef,\n    private cdRef: ChangeDetectorRef,\n    private renderer: Renderer2\n  ) {\n    super(elRef);\n    // To force adding default class, could be override by user @Input() or not\n    this.direction = this._direction;\n  }\n\n  public 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  public addArea(component: MtxSplitPaneDirective): 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  public removeArea(component: MtxSplitPaneDirective): 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  public updateArea(\n    component: MtxSplitPaneDirective,\n    resetOrders: boolean,\n    resetSizes: boolean\n  ): void {\n    if (component.visible === true) {\n      this.build(resetOrders, resetSizes);\n    }\n  }\n\n  public showArea(component: MtxSplitPaneDirective): 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  public hideArea(comp: MtxSplitPaneDirective): 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  public getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n    return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n  }\n\n  public 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    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\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)) 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  public 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  public startDragging(\n    event: MouseEvent | TouchEvent,\n    gutterOrder: number,\n    gutterNum: number\n  ): 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') {\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  public 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  public ngOnDestroy(): void {\n    this.stopDragging();\n  }\n}\n","<ng-content></ng-content>\r\n<ng-template ngFor [ngForOf]=\"displayedAreas\" let-index=\"index\" let-last=\"last\">\r\n  <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\r\n       *ngIf=\"last === false\"\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    <div class=\"mtx-split-gutter-handle\"></div>\r\n  </div>\r\n</ng-template>\r\n","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\n\nimport { MtxSplitComponent } from './split.component';\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\n\n@Directive({\n  selector: 'mtx-split-pane, [mtx-split-pane]',\n  exportAs: 'mtxSplitPane',\n})\nexport class MtxSplitPaneDirective implements OnInit, OnDestroy {\n  private _order: number | null = null;\n\n  @Input() set order(v: number | null) {\n    this._order = getInputPositiveNumber(v, null);\n\n    this.split.updateArea(this, true, false);\n  }\n\n  get order(): number | null {\n    return this._order;\n  }\n\n  ////\n\n  private _size: number | null = null;\n\n  @Input() set size(v: number | null) {\n    this._size = getInputPositiveNumber(v, null);\n\n    this.split.updateArea(this, false, true);\n  }\n\n  get size(): number | null {\n    return this._size;\n  }\n\n  ////\n\n  private _minSize: number | null = null;\n\n  @Input() set minSize(v: number | null) {\n    this._minSize = getInputPositiveNumber(v, null);\n\n    this.split.updateArea(this, false, true);\n  }\n\n  get minSize(): number | null {\n    return this._minSize;\n  }\n\n  ////\n\n  private _maxSize: number | null = null;\n\n  @Input() set maxSize(v: number | null) {\n    this._maxSize = getInputPositiveNumber(v, null);\n\n    this.split.updateArea(this, false, true);\n  }\n\n  get maxSize(): number | null {\n    return this._maxSize;\n  }\n\n  ////\n\n  private _lockSize = false;\n\n  @Input() set lockSize(v: boolean) {\n    this._lockSize = getInputBoolean(v);\n\n    this.split.updateArea(this, false, true);\n  }\n\n  get lockSize(): boolean {\n    return this._lockSize;\n  }\n\n  ////\n\n  private _visible = true;\n\n  @Input() set visible(v: boolean) {\n    this._visible = getInputBoolean(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\n  get visible(): boolean {\n    return this._visible;\n  }\n\n  ////\n\n  private transitionListener!: () => void;\n  private readonly lockListeners: Array<() => void> = [];\n\n  constructor(\n    private ngZone: NgZone,\n    public elRef: ElementRef,\n    private renderer: Renderer2,\n    private split: MtxSplitComponent\n  ) {\n    this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n  }\n\n  public 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  public setStyleOrder(value: number): void {\n    this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n  }\n\n  public setStyleFlex(\n    grow: number,\n    shrink: number,\n    basis: string,\n    isMin: boolean,\n    isMax: boolean\n  ): 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  public 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  public unlockEvents(): void {\n    while (this.lockListeners.length > 0) {\n      const fct = this.lockListeners.pop();\n      if (fct) {\n        fct();\n      }\n    }\n  }\n\n  public 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 { MtxSplitComponent } from './split.component';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [MtxSplitComponent, MtxSplitPaneDirective],\n  exports: [MtxSplitComponent, MtxSplitPaneDirective],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MtxSplitComponent"],"mappings":"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"}