{"version":3,"file":"angular-split.mjs","sources":["../../../projects/angular-split/src/lib/angular-split-config.token.ts","../../../projects/angular-split/src/lib/gutter/split-gutter.directive.ts","../../../projects/angular-split/src/lib/gutter/gutter-num-token.ts","../../../projects/angular-split/src/lib/gutter/split-gutter-drag-handle.directive.ts","../../../projects/angular-split/src/lib/gutter/split-gutter-exclude-from-drag.directive.ts","../../../projects/angular-split/src/lib/utils.ts","../../../projects/angular-split/src/lib/split-custom-events-behavior.directive.ts","../../../projects/angular-split/src/lib/validations.ts","../../../projects/angular-split/src/lib/gutter/split-gutter-dynamic-injector.directive.ts","../../../projects/angular-split/src/lib/split/split.component.ts","../../../projects/angular-split/src/lib/split/split.component.html","../../../projects/angular-split/src/lib/models.ts","../../../projects/angular-split/src/lib/split-area/split-area.component.ts","../../../projects/angular-split/src/lib/split-area/split-area.component.html","../../../projects/angular-split/src/lib/split-module.module.ts","../../../projects/angular-split/src/public_api.ts","../../../projects/angular-split/src/angular-split.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core'\nimport { SplitDir, SplitDirection, SplitUnit } from './models'\n\nexport interface AngularSplitDefaultOptions {\n  dir: SplitDir\n  direction: SplitDirection\n  disabled: boolean\n  gutterDblClickDuration: number\n  gutterSize: number\n  gutterStep: number\n  gutterClickDeltaPx: number\n  restrictMove: boolean\n  unit: SplitUnit\n  useTransition: boolean\n}\n\nconst defaultOptions: AngularSplitDefaultOptions = {\n  dir: 'ltr',\n  direction: 'horizontal',\n  disabled: false,\n  gutterDblClickDuration: 0,\n  gutterSize: 11,\n  gutterStep: 1,\n  gutterClickDeltaPx: 2,\n  restrictMove: false,\n  unit: 'percent',\n  useTransition: false,\n}\n\nexport const ANGULAR_SPLIT_DEFAULT_OPTIONS = new InjectionToken<AngularSplitDefaultOptions>(\n  'angular-split-global-config',\n  { providedIn: 'root', factory: () => defaultOptions },\n)\n\n/**\n * Provides default options for angular split. The options object has hierarchical inheritance\n * which means only the declared properties will be overridden\n */\nexport function provideAngularSplitOptions(options: Partial<AngularSplitDefaultOptions>): Provider {\n  return {\n    provide: ANGULAR_SPLIT_DEFAULT_OPTIONS,\n    useFactory: (): AngularSplitDefaultOptions => ({\n      ...inject(ANGULAR_SPLIT_DEFAULT_OPTIONS, { skipSelf: true }),\n      ...options,\n    }),\n  }\n}\n","import { Directive, ElementRef, inject, TemplateRef } from '@angular/core'\nimport { SplitAreaComponent } from '../split-area/split-area.component'\n\nexport interface SplitGutterTemplateContext {\n  /**\n   * The area before the gutter.\n   * In RTL the right area and in LTR the left area\n   */\n  areaBefore: SplitAreaComponent\n  /**\n   * The area after the gutter.\n   * In RTL the left area and in LTR the right area\n   */\n  areaAfter: SplitAreaComponent\n  /**\n   * The absolute number of the gutter based on direction (RTL and LTR).\n   * First gutter is 1, second is 2, etc...\n   */\n  gutterNum: number\n  /**\n   * Whether this is the first gutter.\n   * In RTL the most right area and in LTR the most left area\n   */\n  first: boolean\n  /**\n   * Whether this is the last gutter.\n   * In RTL the most left area and in LTR the most right area\n   */\n  last: boolean\n  /**\n   * Whether the gutter is being dragged now\n   */\n  isDragged: boolean\n}\n\n@Directive({\n  selector: '[asSplitGutter]',\n  standalone: true,\n})\nexport class SplitGutterDirective {\n  readonly template = inject<TemplateRef<SplitGutterTemplateContext>>(TemplateRef)\n\n  /**\n   * The map holds reference to the drag handle elements inside instances\n   * of the provided template.\n   *\n   * @internal\n   */\n  readonly _gutterToHandleElementMap = new Map<number, ElementRef<HTMLElement>[]>()\n  /**\n   * The map holds reference to the excluded drag elements inside instances\n   * of the provided template.\n   *\n   * @internal\n   */\n  readonly _gutterToExcludeDragElementMap = new Map<number, ElementRef<HTMLElement>[]>()\n\n  /**\n   * @internal\n   */\n  _canStartDragging(originElement: HTMLElement, gutterNum: number) {\n    if (this._gutterToExcludeDragElementMap.has(gutterNum)) {\n      const isInsideExclude = this._gutterToExcludeDragElementMap\n        .get(gutterNum)\n        .some((gutterExcludeElement) => gutterExcludeElement.nativeElement.contains(originElement))\n\n      if (isInsideExclude) {\n        return false\n      }\n    }\n\n    if (this._gutterToHandleElementMap.has(gutterNum)) {\n      return this._gutterToHandleElementMap\n        .get(gutterNum)\n        .some((gutterHandleElement) => gutterHandleElement.nativeElement.contains(originElement))\n    }\n\n    return true\n  }\n\n  /**\n   * @internal\n   */\n  _addToMap(map: Map<number, ElementRef<HTMLElement>[]>, gutterNum: number, elementRef: ElementRef<HTMLElement>) {\n    if (map.has(gutterNum)) {\n      map.get(gutterNum).push(elementRef)\n    } else {\n      map.set(gutterNum, [elementRef])\n    }\n  }\n\n  /**\n   * @internal\n   */\n  _removedFromMap(map: Map<number, ElementRef<HTMLElement>[]>, gutterNum: number, elementRef: ElementRef<HTMLElement>) {\n    const elements = map.get(gutterNum)\n    elements.splice(elements.indexOf(elementRef), 1)\n\n    if (elements.length === 0) {\n      map.delete(gutterNum)\n    }\n  }\n\n  static ngTemplateContextGuard(_dir: SplitGutterDirective, ctx: unknown): ctx is SplitGutterTemplateContext {\n    return true\n  }\n}\n","import { InjectionToken } from '@angular/core'\n\n/**\n * Identifies the gutter by number through DI\n * to allow SplitGutterDragHandleDirective and SplitGutterExcludeFromDragDirective to know\n * the gutter template context without inputs\n */\nexport const GUTTER_NUM_TOKEN = new InjectionToken<number>('Gutter num')\n","import { Directive, OnDestroy, ElementRef, inject } from '@angular/core'\nimport { SplitGutterDirective } from './split-gutter.directive'\nimport { GUTTER_NUM_TOKEN } from './gutter-num-token'\n\n@Directive({\n  selector: '[asSplitGutterDragHandle]',\n  standalone: true,\n})\nexport class SplitGutterDragHandleDirective implements OnDestroy {\n  private readonly gutterNum = inject(GUTTER_NUM_TOKEN)\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef)\n  private readonly gutterDir = inject(SplitGutterDirective)\n\n  constructor() {\n    this.gutterDir._addToMap(this.gutterDir._gutterToHandleElementMap, this.gutterNum, this.elementRef)\n  }\n\n  ngOnDestroy(): void {\n    this.gutterDir._removedFromMap(this.gutterDir._gutterToHandleElementMap, this.gutterNum, this.elementRef)\n  }\n}\n","import { Directive, OnDestroy, ElementRef, inject } from '@angular/core'\nimport { SplitGutterDirective } from './split-gutter.directive'\nimport { GUTTER_NUM_TOKEN } from './gutter-num-token'\n\n@Directive({\n  selector: '[asSplitGutterExcludeFromDrag]',\n  standalone: true,\n})\nexport class SplitGutterExcludeFromDragDirective implements OnDestroy {\n  private readonly gutterNum = inject(GUTTER_NUM_TOKEN)\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef)\n  private readonly gutterDir = inject(SplitGutterDirective)\n\n  constructor() {\n    this.gutterDir._addToMap(this.gutterDir._gutterToExcludeDragElementMap, this.gutterNum, this.elementRef)\n  }\n\n  ngOnDestroy(): void {\n    this.gutterDir._removedFromMap(this.gutterDir._gutterToExcludeDragElementMap, this.gutterNum, this.elementRef)\n  }\n}\n","import { NgZone, Signal, computed, inject, numberAttribute, signal, untracked } from '@angular/core'\nimport { Observable, filter, fromEvent, merge } from 'rxjs'\n\nexport interface ClientPoint {\n  x: number\n  y: number\n}\n\n/**\n * Only supporting a single {@link TouchEvent} point\n */\nexport function getPointFromEvent(event: MouseEvent | TouchEvent | KeyboardEvent): ClientPoint {\n  // NOTE: In firefox TouchEvent is only defined for touch capable devices\n  const isTouchEvent = (e: typeof event): e is TouchEvent => window.TouchEvent && event instanceof TouchEvent\n\n  if (isTouchEvent(event)) {\n    if (event.changedTouches.length === 0) {\n      return undefined\n    }\n\n    const { clientX, clientY } = event.changedTouches[0]\n\n    return {\n      x: clientX,\n      y: clientY,\n    }\n  }\n\n  if (event instanceof KeyboardEvent) {\n    const target = event.target as HTMLElement\n\n    // Calculate element midpoint\n    return {\n      x: target.offsetLeft + target.offsetWidth / 2,\n      y: target.offsetTop + target.offsetHeight / 2,\n    }\n  }\n\n  return {\n    x: event.clientX,\n    y: event.clientY,\n  }\n}\n\nexport function gutterEventsEqualWithDelta(\n  startEvent: MouseEvent | TouchEvent,\n  endEvent: MouseEvent | TouchEvent,\n  deltaInPx: number,\n  gutterElement: HTMLElement,\n) {\n  if (\n    !gutterElement.contains(startEvent.target as HTMLElement) ||\n    !gutterElement.contains(endEvent.target as HTMLElement)\n  ) {\n    return false\n  }\n\n  const startPoint = getPointFromEvent(startEvent)\n  const endPoint = getPointFromEvent(endEvent)\n\n  return Math.abs(endPoint.x - startPoint.x) <= deltaInPx && Math.abs(endPoint.y - startPoint.y) <= deltaInPx\n}\n\nexport function fromMouseDownEvent(target: HTMLElement | Document) {\n  return merge(\n    fromEvent<MouseEvent>(target, 'mousedown').pipe(filter((e) => e.button === 0)),\n    // We must prevent default here so we declare it as non passive explicitly\n    fromEvent<TouchEvent>(target, 'touchstart', { passive: false }),\n  )\n}\n\nexport function fromMouseMoveEvent(target: HTMLElement | Document) {\n  return merge(fromEvent<MouseEvent>(target, 'mousemove'), fromEvent<TouchEvent>(target, 'touchmove'))\n}\n\nexport function fromMouseUpEvent(target: HTMLElement | Document, includeTouchCancel = false) {\n  const withoutTouchCancel = merge(fromEvent<MouseEvent>(target, 'mouseup'), fromEvent<TouchEvent>(target, 'touchend'))\n\n  return includeTouchCancel\n    ? merge(withoutTouchCancel, fromEvent<TouchEvent>(target, 'touchcancel'))\n    : withoutTouchCancel\n}\n\nexport function sum<T>(array: T[] | readonly T[], fn: (item: T) => number) {\n  return (array as T[]).reduce((sum, item) => sum + fn(item), 0)\n}\n\nexport function toRecord<TItem, TKey extends string, TValue>(\n  array: TItem[] | readonly TItem[],\n  fn: (item: TItem, index: number) => [TKey, TValue],\n): Record<TKey, TValue> {\n  return (array as TItem[]).reduce<Record<TKey, TValue>>(\n    (record, item, index) => {\n      const [key, value] = fn(item, index)\n      record[key] = value\n      return record\n    },\n    {} as Record<TKey, TValue>,\n  )\n}\n\nexport function createClassesString(classesRecord: Record<string, boolean>) {\n  return Object.entries(classesRecord)\n    .filter(([, value]) => value)\n    .map(([key]) => key)\n    .join(' ')\n}\n\nexport interface MirrorSignal<T> {\n  (): T\n  set(value: T): void\n  reset(): void\n}\n\n/**\n * Creates a semi signal which allows writes but is based on an existing signal\n * Whenever the original signal changes the mirror signal gets aligned\n * overriding the current value inside.\n */\nexport function mirrorSignal<T>(outer: Signal<T>): MirrorSignal<T> {\n  const inner = computed(() => signal(outer()))\n  const mirror: MirrorSignal<T> = () => inner()()\n  mirror.set = (value: T) => untracked(inner).set(value)\n  mirror.reset = () => untracked(() => inner().set(outer()))\n  return mirror\n}\n\nexport function leaveNgZone<T>() {\n  return (source: Observable<T>) =>\n    new Observable<T>((observer) => inject(NgZone).runOutsideAngular(() => source.subscribe(observer)))\n}\n\nexport const numberAttributeWithFallback = (fallback: number) => (value: unknown) => numberAttribute(value, fallback)\n\nexport const assertUnreachable = (value: never, name: string) => {\n  throw new Error(`as-split: unknown value \"${value}\" for \"${name}\"`)\n}\n","/* eslint-disable @angular-eslint/no-output-native */\n/* eslint-disable @angular-eslint/no-output-rename */\n/* eslint-disable @angular-eslint/no-input-rename */\nimport { Directive, ElementRef, inject, input, output } from '@angular/core'\nimport {\n  gutterEventsEqualWithDelta,\n  fromMouseDownEvent,\n  fromMouseMoveEvent,\n  fromMouseUpEvent,\n  leaveNgZone,\n} from './utils'\nimport {\n  delay,\n  filter,\n  fromEvent,\n  map,\n  mergeMap,\n  of,\n  repeat,\n  scan,\n  switchMap,\n  take,\n  takeUntil,\n  tap,\n  timeInterval,\n} from 'rxjs'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { DOCUMENT } from '@angular/common'\n\n/**\n * Emits mousedown, click, double click and keydown out of zone\n *\n * Emulates browser behavior of click and double click with new features:\n * 1. Supports touch events (tap and double tap)\n * 2. Ignores the first click in a double click with the side effect of a bit slower emission of the click event\n * 3. Allow customizing the delay after mouse down to count another mouse down as a double click\n */\n@Directive({\n  selector: '[asSplitCustomEventsBehavior]',\n  standalone: true,\n})\nexport class SplitCustomEventsBehaviorDirective {\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef)\n  private readonly document = inject(DOCUMENT)\n\n  readonly multiClickThreshold = input.required<number>({ alias: 'asSplitCustomMultiClickThreshold' })\n  readonly deltaInPx = input.required<number>({ alias: 'asSplitCustomClickDeltaInPx' })\n  readonly mouseDown = output<MouseEvent | TouchEvent>({ alias: 'asSplitCustomMouseDown' })\n  readonly click = output({ alias: 'asSplitCustomClick' })\n  readonly dblClick = output({ alias: 'asSplitCustomDblClick' })\n  readonly keyDown = output<KeyboardEvent>({ alias: 'asSplitCustomKeyDown' })\n\n  constructor() {\n    fromEvent<KeyboardEvent>(this.elementRef.nativeElement, 'keydown')\n      .pipe(leaveNgZone(), takeUntilDestroyed())\n      .subscribe((e) => this.keyDown.emit(e))\n\n    // We just need to know when drag start to cancel all click related interactions\n    const dragStarted$ = fromMouseDownEvent(this.elementRef.nativeElement).pipe(\n      switchMap((mouseDownEvent) =>\n        fromMouseMoveEvent(this.document).pipe(\n          filter(\n            (e) => !gutterEventsEqualWithDelta(mouseDownEvent, e, this.deltaInPx(), this.elementRef.nativeElement),\n          ),\n          take(1),\n          map(() => true),\n          takeUntil(fromMouseUpEvent(this.document)),\n        ),\n      ),\n    )\n\n    fromMouseDownEvent(this.elementRef.nativeElement)\n      .pipe(\n        tap((e) => this.mouseDown.emit(e)),\n        // Gather mousedown events intervals to identify whether it is a single double or more click\n        timeInterval(),\n        // We only count a click as part of a multi click if the multiClickThreshold wasn't reached\n        scan((sum, { interval }) => (interval >= this.multiClickThreshold() ? 1 : sum + 1), 0),\n        // As mouseup always comes after mousedown if the delayed mouseup has yet to come\n        // but a new mousedown arrived we can discard the older mouseup as we are part of a multi click\n        switchMap((numOfConsecutiveClicks) =>\n          // In case of a double click we directly emit as we don't care about more than two consecutive clicks\n          // so we don't have to wait compared to a single click that might be followed by another for a double.\n          // In case of a mouse up that was too long after the mouse down\n          // we don't have to wait as we know it won't be a multi click but a single click\n          fromMouseUpEvent(this.elementRef.nativeElement).pipe(\n            timeInterval(),\n            take(1),\n            numOfConsecutiveClicks === 2\n              ? map(() => numOfConsecutiveClicks)\n              : mergeMap(({ interval }) =>\n                  interval >= this.multiClickThreshold()\n                    ? of(numOfConsecutiveClicks)\n                    : of(numOfConsecutiveClicks).pipe(delay(this.multiClickThreshold() - interval)),\n                ),\n          ),\n        ),\n        // Discard everything once drag started and listen again (repeat) to mouse down\n        takeUntil(dragStarted$),\n        repeat(),\n        leaveNgZone(),\n        takeUntilDestroyed(),\n      )\n      .subscribe((amount) => {\n        if (amount === 1) {\n          this.click.emit()\n        } else if (amount === 2) {\n          this.dblClick.emit()\n        }\n      })\n  }\n}\n","import { SplitAreaSize, SplitUnit } from './models'\nimport { SplitAreaComponent } from './split-area/split-area.component'\nimport { sum } from './utils'\n\nexport function areAreasValid(areas: readonly SplitAreaComponent[], unit: SplitUnit, logWarnings: boolean): boolean {\n  if (areas.length === 0) {\n    return true\n  }\n\n  const areaSizes = areas.map((area): SplitAreaSize => {\n    const size = area.size()\n    return size === 'auto' ? '*' : size\n  })\n\n  const wildcardAreas = areaSizes.filter((areaSize) => areaSize === '*')\n\n  if (wildcardAreas.length > 1) {\n    if (logWarnings) {\n      console.warn('as-split: Maximum one * area is allowed')\n    }\n\n    return false\n  }\n\n  if (unit === 'pixel') {\n    if (wildcardAreas.length === 1) {\n      return true\n    }\n\n    if (logWarnings) {\n      console.warn('as-split: Pixel mode must have exactly one * area')\n    }\n\n    return false\n  }\n\n  const sumPercent = sum(areaSizes, (areaSize) => (areaSize === '*' ? 0 : areaSize))\n\n  // As percent calculation isn't perfect we allow for a small margin of error\n  if (wildcardAreas.length === 1) {\n    if (sumPercent <= 100.1) {\n      return true\n    }\n\n    if (logWarnings) {\n      console.warn(`as-split: Percent areas must total 100%`)\n    }\n\n    return false\n  }\n\n  if (sumPercent < 99.9 || sumPercent > 100.1) {\n    if (logWarnings) {\n      console.warn('as-split: Percent areas must total 100%')\n    }\n\n    return false\n  }\n\n  return true\n}\n","import { Injector, Directive, ViewContainerRef, TemplateRef, input, effect, inject } from '@angular/core'\nimport { GUTTER_NUM_TOKEN } from './gutter-num-token'\n\ninterface SplitGutterDynamicInjectorTemplateContext {\n  $implicit: Injector\n}\n\n/**\n * This directive allows creating a dynamic injector inside ngFor\n * with dynamic gutter num and expose the injector for ngTemplateOutlet usage\n */\n@Directive({\n  selector: '[asSplitGutterDynamicInjector]',\n  standalone: true,\n})\nexport class SplitGutterDynamicInjectorDirective {\n  private readonly vcr = inject(ViewContainerRef)\n  private readonly templateRef = inject<TemplateRef<SplitGutterDynamicInjectorTemplateContext>>(TemplateRef)\n\n  protected readonly gutterNum = input.required<number>({ alias: 'asSplitGutterDynamicInjector' })\n\n  constructor() {\n    effect(() => {\n      this.vcr.clear()\n\n      const injector = Injector.create({\n        providers: [\n          {\n            provide: GUTTER_NUM_TOKEN,\n            useValue: this.gutterNum(),\n          },\n        ],\n        parent: this.vcr.injector,\n      })\n\n      this.vcr.createEmbeddedView(this.templateRef, { $implicit: injector })\n    })\n  }\n\n  static ngTemplateContextGuard(\n    _dir: SplitGutterDynamicInjectorDirective,\n    ctx: unknown,\n  ): ctx is SplitGutterDynamicInjectorTemplateContext {\n    return true\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  HostBinding,\n  InjectionToken,\n  NgZone,\n  Renderer2,\n  booleanAttribute,\n  computed,\n  contentChild,\n  contentChildren,\n  effect,\n  inject,\n  input,\n  isDevMode,\n  output,\n  signal,\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport type { SplitAreaComponent } from '../split-area/split-area.component'\nimport { Subject, filter, fromEvent, map, pairwise, skipWhile, startWith, switchMap, take, takeUntil, tap } from 'rxjs'\nimport {\n  ClientPoint,\n  createClassesString,\n  gutterEventsEqualWithDelta,\n  fromMouseMoveEvent,\n  fromMouseUpEvent,\n  getPointFromEvent,\n  leaveNgZone,\n  numberAttributeWithFallback,\n  sum,\n  toRecord,\n  assertUnreachable,\n} from '../utils'\nimport { DOCUMENT, NgStyle, NgTemplateOutlet } from '@angular/common'\nimport { SplitGutterInteractionEvent, SplitAreaSize } from '../models'\nimport { SplitCustomEventsBehaviorDirective } from '../split-custom-events-behavior.directive'\nimport { areAreasValid } from '../validations'\nimport { SplitGutterDirective } from '../gutter/split-gutter.directive'\nimport { SplitGutterDynamicInjectorDirective } from '../gutter/split-gutter-dynamic-injector.directive'\nimport { ANGULAR_SPLIT_DEFAULT_OPTIONS } from '../angular-split-config.token'\n\ninterface MouseDownContext {\n  mouseDownEvent: MouseEvent | TouchEvent\n  gutterIndex: number\n  gutterElement: HTMLElement\n  areaBeforeGutterIndex: number\n  areaAfterGutterIndex: number\n}\n\ninterface AreaBoundary {\n  min: number\n  max: number\n}\n\ninterface DragStartContext {\n  startEvent: MouseEvent | TouchEvent | KeyboardEvent\n  areasPixelSizes: number[]\n  totalAreasPixelSize: number\n  areaIndexToBoundaries: Record<number, AreaBoundary>\n  areaBeforeGutterIndex: number\n  areaAfterGutterIndex: number\n}\n\nexport const SPLIT_AREA_CONTRACT = new InjectionToken<SplitAreaComponent>('Split Area Contract')\n\n@Component({\n  selector: 'as-split',\n  imports: [NgStyle, SplitCustomEventsBehaviorDirective, SplitGutterDynamicInjectorDirective, NgTemplateOutlet],\n  exportAs: 'asSplit',\n  templateUrl: './split.component.html',\n  styleUrl: './split.component.css',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SplitComponent {\n  private readonly document = inject(DOCUMENT)\n  private readonly renderer = inject(Renderer2)\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef)\n  private readonly ngZone = inject(NgZone)\n  private readonly defaultOptions = inject(ANGULAR_SPLIT_DEFAULT_OPTIONS)\n\n  private readonly gutterMouseDownSubject = new Subject<MouseDownContext>()\n  private readonly dragProgressSubject = new Subject<SplitGutterInteractionEvent>()\n\n  /**\n   * @internal\n   */\n  readonly _areas = contentChildren(SPLIT_AREA_CONTRACT)\n  protected readonly customGutter = contentChild(SplitGutterDirective)\n  readonly gutterSize = input(this.defaultOptions.gutterSize, {\n    transform: numberAttributeWithFallback(this.defaultOptions.gutterSize),\n  })\n  readonly gutterStep = input(this.defaultOptions.gutterStep, {\n    transform: numberAttributeWithFallback(this.defaultOptions.gutterStep),\n  })\n  readonly disabled = input(this.defaultOptions.disabled, { transform: booleanAttribute })\n  readonly gutterClickDeltaPx = input(this.defaultOptions.gutterClickDeltaPx, {\n    transform: numberAttributeWithFallback(this.defaultOptions.gutterClickDeltaPx),\n  })\n  readonly direction = input(this.defaultOptions.direction)\n  readonly dir = input(this.defaultOptions.dir)\n  readonly unit = input(this.defaultOptions.unit)\n  readonly gutterAriaLabel = input<string>()\n  readonly restrictMove = input(this.defaultOptions.restrictMove, { transform: booleanAttribute })\n  readonly useTransition = input(this.defaultOptions.useTransition, { transform: booleanAttribute })\n  readonly gutterDblClickDuration = input(this.defaultOptions.gutterDblClickDuration, {\n    transform: numberAttributeWithFallback(this.defaultOptions.gutterDblClickDuration),\n  })\n  readonly gutterClick = output<SplitGutterInteractionEvent>()\n  readonly gutterDblClick = output<SplitGutterInteractionEvent>()\n  readonly dragStart = output<SplitGutterInteractionEvent>()\n  readonly dragEnd = output<SplitGutterInteractionEvent>()\n  readonly transitionEnd = output<SplitAreaSize[]>()\n\n  readonly dragProgress$ = this.dragProgressSubject.asObservable()\n\n  /**\n   * @internal\n   */\n  readonly _visibleAreas = computed(() => this._areas().filter((area) => area.visible()))\n  private readonly gridTemplateColumnsStyle = computed(() => this.createGridTemplateColumnsStyle())\n  private readonly hostClasses = computed(() =>\n    createClassesString({\n      [`as-${this.direction()}`]: true,\n      [`as-${this.unit()}`]: true,\n      ['as-disabled']: this.disabled(),\n      ['as-dragging']: this._isDragging(),\n      ['as-transition']: this.useTransition() && !this._isDragging(),\n    }),\n  )\n  protected readonly draggedGutterIndex = signal<number>(undefined)\n  /**\n   * @internal\n   */\n  readonly _isDragging = computed(() => this.draggedGutterIndex() !== undefined)\n  /**\n   * @internal\n   * Should only be used by {@link SplitAreaComponent._internalSize}\n   */\n  readonly _alignedVisibleAreasSizes = computed(() => this.createAlignedVisibleAreasSize())\n\n  @HostBinding('class') protected get hostClassesBinding() {\n    return this.hostClasses()\n  }\n\n  @HostBinding('dir') protected get hostDirBinding() {\n    return this.dir()\n  }\n\n  constructor() {\n    if (isDevMode()) {\n      // Logs warnings to console when the provided areas sizes are invalid\n      effect(() => {\n        // Special mode when no size input was declared which is a valid mode\n        if (this.unit() === 'percent' && this._visibleAreas().every((area) => area.size() === 'auto')) {\n          return\n        }\n\n        areAreasValid(this._visibleAreas(), this.unit(), true)\n      })\n    }\n\n    // Responsible for updating grid template style. Must be this way and not based on HostBinding\n    // as change detection for host binding is bound to the parent component and this style\n    // is updated on every mouse move. Doing it this way will prevent change detection cycles in parent.\n    effect(() => {\n      const gridTemplateColumnsStyle = this.gridTemplateColumnsStyle()\n      this.renderer.setStyle(this.elementRef.nativeElement, 'grid-template', gridTemplateColumnsStyle)\n    })\n\n    this.gutterMouseDownSubject\n      .pipe(\n        filter(\n          (context) =>\n            !this.customGutter() ||\n            this.customGutter()._canStartDragging(\n              context.mouseDownEvent.target as HTMLElement,\n              context.gutterIndex + 1,\n            ),\n        ),\n        switchMap((mouseDownContext) =>\n          // As we have gutterClickDeltaPx we can't just start the drag but need to make sure\n          // we are out of the delta pixels. As the delta can be any number we make sure\n          // we always start the drag if we go out of the gutter (delta based on mouse position is larger than gutter).\n          // As moving can start inside the drag and end outside of it we always keep track of the previous event\n          // so once the current is out of the delta size we use the previous one as the drag start baseline.\n          fromMouseMoveEvent(this.document).pipe(\n            startWith(mouseDownContext.mouseDownEvent),\n            pairwise(),\n            skipWhile(([, currMoveEvent]) =>\n              gutterEventsEqualWithDelta(\n                mouseDownContext.mouseDownEvent,\n                currMoveEvent,\n                this.gutterClickDeltaPx(),\n                mouseDownContext.gutterElement,\n              ),\n            ),\n            take(1),\n            takeUntil(fromMouseUpEvent(this.document, true)),\n            tap(() => {\n              this.ngZone.run(() => {\n                this.dragStart.emit(this.createDragInteractionEvent(mouseDownContext.gutterIndex))\n                this.draggedGutterIndex.set(mouseDownContext.gutterIndex)\n              })\n            }),\n            map(([prevMouseEvent]) =>\n              this.createDragStartContext(\n                prevMouseEvent,\n                mouseDownContext.areaBeforeGutterIndex,\n                mouseDownContext.areaAfterGutterIndex,\n              ),\n            ),\n            switchMap((dragStartContext) =>\n              fromMouseMoveEvent(this.document).pipe(\n                tap((moveEvent) => this.mouseDragMove(moveEvent, dragStartContext)),\n                takeUntil(fromMouseUpEvent(this.document, true)),\n                tap({\n                  complete: () =>\n                    this.ngZone.run(() => {\n                      this.dragEnd.emit(this.createDragInteractionEvent(this.draggedGutterIndex()))\n                      this.draggedGutterIndex.set(undefined)\n                    }),\n                }),\n              ),\n            ),\n          ),\n        ),\n        takeUntilDestroyed(),\n      )\n      .subscribe()\n\n    fromEvent<TransitionEvent>(this.elementRef.nativeElement, 'transitionend')\n      .pipe(\n        filter((e) => e.propertyName.startsWith('grid-template')),\n        leaveNgZone(),\n        takeUntilDestroyed(),\n      )\n      .subscribe(() => this.ngZone.run(() => this.transitionEnd.emit(this.createAreaSizes())))\n  }\n\n  protected gutterClicked(gutterIndex: number) {\n    this.ngZone.run(() => this.gutterClick.emit(this.createDragInteractionEvent(gutterIndex)))\n  }\n\n  protected gutterDoubleClicked(gutterIndex: number) {\n    this.ngZone.run(() => this.gutterDblClick.emit(this.createDragInteractionEvent(gutterIndex)))\n  }\n\n  protected gutterMouseDown(\n    e: MouseEvent | TouchEvent,\n    gutterElement: HTMLElement,\n    gutterIndex: number,\n    areaBeforeGutterIndex: number,\n    areaAfterGutterIndex: number,\n  ) {\n    if (this.disabled()) {\n      return\n    }\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    this.gutterMouseDownSubject.next({\n      mouseDownEvent: e,\n      gutterElement,\n      gutterIndex,\n      areaBeforeGutterIndex,\n      areaAfterGutterIndex,\n    })\n  }\n\n  protected gutterKeyDown(\n    e: KeyboardEvent,\n    gutterIndex: number,\n    areaBeforeGutterIndex: number,\n    areaAfterGutterIndex: number,\n  ) {\n    if (this.disabled()) {\n      return\n    }\n\n    const pixelsToMove = 50\n    const pageMoveMultiplier = 10\n\n    let xPointOffset = 0\n    let yPointOffset = 0\n\n    if (this.direction() === 'horizontal') {\n      // Even though we are going in the x axis we support page up and down\n      switch (e.key) {\n        case 'ArrowLeft':\n          xPointOffset -= pixelsToMove\n          break\n        case 'ArrowRight':\n          xPointOffset += pixelsToMove\n          break\n        case 'PageUp':\n          if (this.dir() === 'rtl') {\n            xPointOffset -= pixelsToMove * pageMoveMultiplier\n          } else {\n            xPointOffset += pixelsToMove * pageMoveMultiplier\n          }\n          break\n        case 'PageDown':\n          if (this.dir() === 'rtl') {\n            xPointOffset += pixelsToMove * pageMoveMultiplier\n          } else {\n            xPointOffset -= pixelsToMove * pageMoveMultiplier\n          }\n          break\n        default:\n          return\n      }\n    } else {\n      switch (e.key) {\n        case 'ArrowUp':\n          yPointOffset -= pixelsToMove\n          break\n        case 'ArrowDown':\n          yPointOffset += pixelsToMove\n          break\n        case 'PageUp':\n          yPointOffset -= pixelsToMove * pageMoveMultiplier\n          break\n        case 'PageDown':\n          yPointOffset += pixelsToMove * pageMoveMultiplier\n          break\n        default:\n          return\n      }\n    }\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    const gutterMidPoint = getPointFromEvent(e)\n    const dragStartContext = this.createDragStartContext(e, areaBeforeGutterIndex, areaAfterGutterIndex)\n\n    this.ngZone.run(() => {\n      this.dragStart.emit(this.createDragInteractionEvent(gutterIndex))\n      this.draggedGutterIndex.set(gutterIndex)\n    })\n\n    this.dragMoveToPoint({ x: gutterMidPoint.x + xPointOffset, y: gutterMidPoint.y + yPointOffset }, dragStartContext)\n\n    this.ngZone.run(() => {\n      this.dragEnd.emit(this.createDragInteractionEvent(gutterIndex))\n      this.draggedGutterIndex.set(undefined)\n    })\n  }\n\n  protected getGutterGridStyle(nextAreaIndex: number) {\n    const gutterNum = nextAreaIndex * 2\n    const style = `${gutterNum} / ${gutterNum}`\n\n    return {\n      ['grid-column']: this.direction() === 'horizontal' ? style : '1',\n      ['grid-row']: this.direction() === 'vertical' ? style : '1',\n    }\n  }\n\n  protected getAriaAreaSizeText(area: SplitAreaComponent): string {\n    const size = area._internalSize()\n\n    if (size === '*') {\n      return undefined\n    }\n\n    return `${size.toFixed(0)} ${this.unit()}`\n  }\n\n  protected getAriaValue(size: SplitAreaSize) {\n    return size === '*' ? undefined : size\n  }\n\n  private createDragInteractionEvent(gutterIndex: number): SplitGutterInteractionEvent {\n    return {\n      gutterNum: gutterIndex + 1,\n      sizes: this.createAreaSizes(),\n    }\n  }\n\n  private createAreaSizes() {\n    return this._visibleAreas().map((area) => area._internalSize())\n  }\n\n  private createDragStartContext(\n    startEvent: MouseEvent | TouchEvent | KeyboardEvent,\n    areaBeforeGutterIndex: number,\n    areaAfterGutterIndex: number,\n  ): DragStartContext {\n    const splitBoundingRect = this.elementRef.nativeElement.getBoundingClientRect()\n    const splitSize = this.direction() === 'horizontal' ? splitBoundingRect.width : splitBoundingRect.height\n    const totalAreasPixelSize = splitSize - (this._visibleAreas().length - 1) * this.gutterSize()\n    // Use the internal size and split size to calculate the pixel size from wildcard and percent areas\n    const areaPixelSizesWithWildcard = this._areas().map((area) => {\n      if (this.unit() === 'pixel') {\n        return area._internalSize()\n      } else {\n        const size = area._internalSize()\n\n        if (size === '*') {\n          return size\n        }\n\n        return (size / 100) * totalAreasPixelSize\n      }\n    })\n    const remainingSize = Math.max(\n      0,\n      totalAreasPixelSize - sum(areaPixelSizesWithWildcard, (size) => (size === '*' ? 0 : size)),\n    )\n    const areasPixelSizes = areaPixelSizesWithWildcard.map((size) => (size === '*' ? remainingSize : size))\n\n    return {\n      startEvent,\n      areaBeforeGutterIndex,\n      areaAfterGutterIndex,\n      areasPixelSizes,\n      totalAreasPixelSize,\n      areaIndexToBoundaries: toRecord(this._areas(), (area, index) => {\n        const percentToPixels = (percent: number) => (percent / 100) * totalAreasPixelSize\n\n        const value: AreaBoundary =\n          this.unit() === 'pixel'\n            ? {\n                min: area._normalizedMinSize(),\n                max: area._normalizedMaxSize(),\n              }\n            : {\n                min: percentToPixels(area._normalizedMinSize()),\n                max: percentToPixels(area._normalizedMaxSize()),\n              }\n\n        return [index.toString(), value]\n      }),\n    }\n  }\n\n  private mouseDragMove(moveEvent: MouseEvent | TouchEvent, dragStartContext: DragStartContext) {\n    moveEvent.preventDefault()\n    moveEvent.stopPropagation()\n\n    const endPoint = getPointFromEvent(moveEvent)\n\n    this.dragMoveToPoint(endPoint, dragStartContext)\n  }\n\n  private dragMoveToPoint(endPoint: ClientPoint, dragStartContext: DragStartContext) {\n    const startPoint = getPointFromEvent(dragStartContext.startEvent)\n    const preDirOffset = this.direction() === 'horizontal' ? endPoint.x - startPoint.x : endPoint.y - startPoint.y\n    const offset = this.direction() === 'horizontal' && this.dir() === 'rtl' ? -preDirOffset : preDirOffset\n    const isDraggingForward = offset > 0\n    // Align offset with gutter step and abs it as we need absolute pixels movement\n    const absSteppedOffset = Math.abs(Math.round(offset / this.gutterStep()) * this.gutterStep())\n    // Copy as we don't want to edit the original array\n    const tempAreasPixelSizes = [...dragStartContext.areasPixelSizes]\n    // As we are going to shuffle the areas order for easier iterations we should work with area indices array\n    // instead of actual area sizes array.\n    const areasIndices = tempAreasPixelSizes.map((_, index) => index)\n    // The two variables below are ordered for iterations with real area indices inside.\n    // We must also remove the invisible ones as we can't expand or shrink them.\n    const areasIndicesBeforeGutter = this.restrictMove()\n      ? [dragStartContext.areaBeforeGutterIndex]\n      : areasIndices\n          .slice(0, dragStartContext.areaBeforeGutterIndex + 1)\n          .filter((index) => this._areas()[index].visible())\n          .reverse()\n    const areasIndicesAfterGutter = this.restrictMove()\n      ? [dragStartContext.areaAfterGutterIndex]\n      : areasIndices.slice(dragStartContext.areaAfterGutterIndex).filter((index) => this._areas()[index].visible())\n    // Based on direction we need to decide which areas are expanding and which are shrinking\n    const potentialAreasIndicesArrToShrink = isDraggingForward ? areasIndicesAfterGutter : areasIndicesBeforeGutter\n    const potentialAreasIndicesArrToExpand = isDraggingForward ? areasIndicesBeforeGutter : areasIndicesAfterGutter\n\n    let remainingPixels = absSteppedOffset\n    let potentialShrinkArrIndex = 0\n    let potentialExpandArrIndex = 0\n\n    // We gradually run in both expand and shrink direction transferring pixels from the offset.\n    // We stop once no pixels are left or we reached the end of either the expanding areas or the shrinking areas\n    while (\n      remainingPixels !== 0 &&\n      potentialShrinkArrIndex < potentialAreasIndicesArrToShrink.length &&\n      potentialExpandArrIndex < potentialAreasIndicesArrToExpand.length\n    ) {\n      const areaIndexToShrink = potentialAreasIndicesArrToShrink[potentialShrinkArrIndex]\n      const areaIndexToExpand = potentialAreasIndicesArrToExpand[potentialExpandArrIndex]\n      const areaToShrinkSize = tempAreasPixelSizes[areaIndexToShrink]\n      const areaToExpandSize = tempAreasPixelSizes[areaIndexToExpand]\n      const areaToShrinkMinSize = dragStartContext.areaIndexToBoundaries[areaIndexToShrink].min\n      const areaToExpandMaxSize = dragStartContext.areaIndexToBoundaries[areaIndexToExpand].max\n      // We can only transfer pixels based on the shrinking area min size and the expanding area max size\n      // to avoid overflow. If any pixels left they will be handled by the next area in the next `while` iteration\n      const maxPixelsToShrink = areaToShrinkSize - areaToShrinkMinSize\n      const maxPixelsToExpand = areaToExpandMaxSize - areaToExpandSize\n      const pixelsToTransfer = Math.min(maxPixelsToShrink, maxPixelsToExpand, remainingPixels)\n\n      // Actual pixels transfer\n      tempAreasPixelSizes[areaIndexToShrink] -= pixelsToTransfer\n      tempAreasPixelSizes[areaIndexToExpand] += pixelsToTransfer\n      remainingPixels -= pixelsToTransfer\n\n      // Once min threshold reached we need to move to the next area in turn\n      if (tempAreasPixelSizes[areaIndexToShrink] === areaToShrinkMinSize) {\n        potentialShrinkArrIndex++\n      }\n\n      // Once max threshold reached we need to move to the next area in turn\n      if (tempAreasPixelSizes[areaIndexToExpand] === areaToExpandMaxSize) {\n        potentialExpandArrIndex++\n      }\n    }\n\n    this._areas().forEach((area, index) => {\n      // No need to update wildcard size\n      if (area._internalSize() === '*') {\n        return\n      }\n\n      if (this.unit() === 'pixel') {\n        area._internalSize.set(tempAreasPixelSizes[index])\n      } else {\n        const percentSize = (tempAreasPixelSizes[index] / dragStartContext.totalAreasPixelSize) * 100\n        // Fix javascript only working with float numbers which are inaccurate compared to decimals\n        area._internalSize.set(parseFloat(percentSize.toFixed(10)))\n      }\n    })\n\n    this.dragProgressSubject.next(this.createDragInteractionEvent(this.draggedGutterIndex()))\n  }\n\n  private createGridTemplateColumnsStyle(): string {\n    const columns: string[] = []\n    const sumNonWildcardSizes = sum(this._visibleAreas(), (area) => {\n      const size = area._internalSize()\n      return size === '*' ? 0 : size\n    })\n    const visibleAreasCount = this._visibleAreas().length\n\n    let visitedVisibleAreas = 0\n\n    this._areas().forEach((area, index, areas) => {\n      const unit = this.unit()\n      const areaSize = area._internalSize()\n\n      // Add area size column\n      if (!area.visible()) {\n        columns.push(unit === 'percent' || areaSize === '*' ? '0fr' : '0px')\n      } else {\n        if (unit === 'pixel') {\n          const columnValue = areaSize === '*' ? '1fr' : `${areaSize}px`\n          columns.push(columnValue)\n        } else {\n          const percentSize = areaSize === '*' ? 100 - sumNonWildcardSizes : areaSize\n          const columnValue = `${percentSize}fr`\n          columns.push(columnValue)\n        }\n\n        visitedVisibleAreas++\n      }\n\n      const isLastArea = index === areas.length - 1\n\n      if (isLastArea) {\n        return\n      }\n\n      const remainingVisibleAreas = visibleAreasCount - visitedVisibleAreas\n\n      // Only add gutter with size if this area is visible and there are more visible areas after this one\n      // to avoid ghost gutters\n      if (area.visible() && remainingVisibleAreas > 0) {\n        columns.push(`${this.gutterSize()}px`)\n      } else {\n        columns.push('0px')\n      }\n    })\n\n    return this.direction() === 'horizontal' ? `1fr / ${columns.join(' ')}` : `${columns.join(' ')} / 1fr`\n  }\n\n  private createAlignedVisibleAreasSize(): SplitAreaSize[] {\n    const visibleAreasSizes = this._visibleAreas().map((area): SplitAreaSize => {\n      const size = area.size()\n      return size === 'auto' ? '*' : size\n    })\n    const isValid = areAreasValid(this._visibleAreas(), this.unit(), false)\n\n    if (isValid) {\n      return visibleAreasSizes\n    }\n\n    const unit = this.unit()\n\n    if (unit === 'percent') {\n      // Distribute sizes equally\n      const defaultPercentSize = 100 / visibleAreasSizes.length\n      return visibleAreasSizes.map(() => defaultPercentSize)\n    }\n\n    if (unit === 'pixel') {\n      // Make sure only one wildcard area\n      const wildcardAreas = visibleAreasSizes.filter((areaSize) => areaSize === '*')\n\n      if (wildcardAreas.length === 0) {\n        return ['*', ...visibleAreasSizes.slice(1)]\n      } else {\n        const firstWildcardIndex = visibleAreasSizes.findIndex((areaSize) => areaSize === '*')\n        const defaultPxSize = 100\n\n        return visibleAreasSizes.map((areaSize, index) =>\n          index === firstWildcardIndex || areaSize !== '*' ? areaSize : defaultPxSize,\n        )\n      }\n    }\n\n    return assertUnreachable(unit, 'SplitUnit')\n  }\n}\n","<ng-content></ng-content>\n@for (area of _areas(); track area) {\n  @if (!$last) {\n    <div\n      #gutter\n      class=\"as-split-gutter\"\n      role=\"separator\"\n      tabindex=\"0\"\n      [attr.aria-label]=\"gutterAriaLabel()\"\n      [attr.aria-orientation]=\"direction()\"\n      [attr.aria-valuemin]=\"getAriaValue(area.minSize())\"\n      [attr.aria-valuemax]=\"getAriaValue(area.maxSize())\"\n      [attr.aria-valuenow]=\"getAriaValue(area._internalSize())\"\n      [attr.aria-valuetext]=\"getAriaAreaSizeText(area)\"\n      [ngStyle]=\"getGutterGridStyle($index + 1)\"\n      [class.as-dragged]=\"draggedGutterIndex() === $index\"\n      asSplitCustomEventsBehavior\n      [asSplitCustomMultiClickThreshold]=\"gutterDblClickDuration()\"\n      [asSplitCustomClickDeltaInPx]=\"gutterClickDeltaPx()\"\n      (asSplitCustomClick)=\"gutterClicked($index)\"\n      (asSplitCustomDblClick)=\"gutterDoubleClicked($index)\"\n      (asSplitCustomMouseDown)=\"gutterMouseDown($event, gutter, $index, $index, $index + 1)\"\n      (asSplitCustomKeyDown)=\"gutterKeyDown($event, $index, $index, $index + 1)\"\n    >\n      @if (customGutter()?.template) {\n        <ng-container *asSplitGutterDynamicInjector=\"$index + 1; let injector\">\n          <ng-container\n            *ngTemplateOutlet=\"\n              customGutter().template;\n              context: {\n                areaBefore: area,\n                areaAfter: _areas()[$index + 1],\n                gutterNum: $index + 1,\n                first: $first,\n                last: $index === _areas().length - 2,\n                isDragged: draggedGutterIndex() === $index\n              };\n              injector: injector\n            \"\n          ></ng-container>\n        </ng-container>\n      } @else {\n        <div class=\"as-split-gutter-icon\"></div>\n      }\n    </div>\n  }\n}\n","export type SplitAreaSize = number | '*'\n\nexport type SplitAreaSizeInput = SplitAreaSize | `${number}` | undefined | null\n\nconst internalAreaSizeTransform = (areaSize: SplitAreaSizeInput): SplitAreaSize =>\n  areaSize === undefined || areaSize === null || areaSize === '*' ? '*' : +areaSize\n\nexport const areaSizeTransform = (areaSize: SplitAreaSizeInput): SplitAreaSize | 'auto' =>\n  internalAreaSizeTransform(areaSize)\n\nexport const boundaryAreaSizeTransform = (areaSize: SplitAreaSizeInput): SplitAreaSize =>\n  internalAreaSizeTransform(areaSize)\n\nexport type SplitDirection = 'horizontal' | 'vertical'\n\nexport type SplitDir = 'ltr' | 'rtl'\n\nexport type SplitUnit = 'pixel' | 'percent'\n\nexport interface SplitGutterInteractionEvent {\n  gutterNum: number\n  sizes: SplitAreaSize[]\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  HostBinding,\n  Signal,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  isDevMode,\n} from '@angular/core'\nimport { SPLIT_AREA_CONTRACT, SplitComponent } from '../split/split.component'\nimport { createClassesString, mirrorSignal } from '../utils'\nimport { SplitAreaSize, areaSizeTransform, boundaryAreaSizeTransform } from '../models'\n\n@Component({\n  selector: 'as-split-area',\n  standalone: true,\n  exportAs: 'asSplitArea',\n  templateUrl: './split-area.component.html',\n  styleUrl: './split-area.component.css',\n  providers: [\n    {\n      provide: SPLIT_AREA_CONTRACT,\n      useExisting: SplitAreaComponent,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SplitAreaComponent {\n  protected readonly split = inject(SplitComponent)\n\n  readonly size = input('auto', { transform: areaSizeTransform })\n  readonly minSize = input('*', { transform: boundaryAreaSizeTransform })\n  readonly maxSize = input('*', { transform: boundaryAreaSizeTransform })\n  readonly lockSize = input(false, { transform: booleanAttribute })\n  readonly visible = input(true, { transform: booleanAttribute })\n\n  /**\n   * @internal\n   */\n  readonly _internalSize = mirrorSignal(\n    // As size is an input and we can change the size without the outside\n    // listening to the change we need an intermediate writeable signal\n    computed((): SplitAreaSize => {\n      if (!this.visible()) {\n        return 0\n      }\n\n      const visibleIndex = this.split._visibleAreas().findIndex((area) => area === this)\n\n      return this.split._alignedVisibleAreasSizes()[visibleIndex]\n    }),\n  )\n  /**\n   * @internal\n   */\n  readonly _normalizedMinSize = computed(() => this.normalizeMinSize())\n  /**\n   * @internal\n   */\n  readonly _normalizedMaxSize = computed(() => this.normalizeMaxSize())\n  private readonly index = computed(() => this.split._areas().findIndex((area) => area === this))\n  private readonly gridAreaNum = computed(() => this.index() * 2 + 1)\n  private readonly hostClasses = computed(() =>\n    createClassesString({\n      ['as-split-area']: true,\n      ['as-min']: this.visible() && this._internalSize() === this._normalizedMinSize(),\n      ['as-max']: this.visible() && this._internalSize() === this._normalizedMaxSize(),\n      ['as-hidden']: !this.visible(),\n    }),\n  )\n\n  @HostBinding('class') protected get hostClassesBinding() {\n    return this.hostClasses()\n  }\n  @HostBinding('style.grid-column') protected get hostGridColumnStyleBinding() {\n    return this.split.direction() === 'horizontal' ? `${this.gridAreaNum()} / ${this.gridAreaNum()}` : undefined\n  }\n  @HostBinding('style.grid-row') protected get hostGridRowStyleBinding() {\n    return this.split.direction() === 'vertical' ? `${this.gridAreaNum()} / ${this.gridAreaNum()}` : undefined\n  }\n  @HostBinding('style.position') protected get hostPositionStyleBinding() {\n    return this.split._isDragging() ? 'relative' : undefined\n  }\n\n  private normalizeMinSize() {\n    const defaultMinSize = 0\n\n    if (!this.visible()) {\n      return defaultMinSize\n    }\n\n    const minSize = this.normalizeSizeBoundary(this.minSize, defaultMinSize)\n    const size = this.size()\n\n    if (size !== '*' && size !== 'auto' && size < minSize) {\n      if (isDevMode()) {\n        console.warn('as-split: size cannot be smaller than minSize')\n      }\n\n      return defaultMinSize\n    }\n\n    return minSize\n  }\n\n  private normalizeMaxSize() {\n    const defaultMaxSize = Infinity\n\n    if (!this.visible()) {\n      return defaultMaxSize\n    }\n\n    const maxSize = this.normalizeSizeBoundary(this.maxSize, defaultMaxSize)\n    const size = this.size()\n\n    if (size !== '*' && size !== 'auto' && size > maxSize) {\n      if (isDevMode()) {\n        console.warn('as-split: size cannot be larger than maxSize')\n      }\n\n      return defaultMaxSize\n    }\n\n    return maxSize\n  }\n\n  private normalizeSizeBoundary(sizeBoundarySignal: Signal<SplitAreaSize>, defaultBoundarySize: number): number {\n    const size = this.size()\n    const lockSize = this.lockSize()\n    const boundarySize = sizeBoundarySignal()\n\n    if (lockSize) {\n      if (isDevMode() && boundarySize !== '*') {\n        console.warn('as-split: lockSize overwrites maxSize/minSize')\n      }\n\n      if (size === '*' || size === 'auto') {\n        if (isDevMode()) {\n          console.warn(`as-split: lockSize isn't supported on area with * size or without size`)\n        }\n\n        return defaultBoundarySize\n      }\n\n      return size\n    }\n\n    if (boundarySize === '*') {\n      return defaultBoundarySize\n    }\n\n    if (size === '*' || size === 'auto') {\n      if (isDevMode()) {\n        console.warn('as-split: maxSize/minSize not allowed on * or without size')\n      }\n\n      return defaultBoundarySize\n    }\n\n    return boundarySize\n  }\n}\n","<ng-content></ng-content>\n@if (split._isDragging()) {\n  <div class=\"as-iframe-fix\"></div>\n}\n","import { NgModule } from '@angular/core'\nimport { SplitAreaComponent } from './split-area/split-area.component'\nimport { SplitComponent } from './split/split.component'\nimport { SplitGutterDirective } from './gutter/split-gutter.directive'\nimport { SplitGutterDragHandleDirective } from './gutter/split-gutter-drag-handle.directive'\nimport { SplitGutterExcludeFromDragDirective } from './gutter/split-gutter-exclude-from-drag.directive'\n\n@NgModule({\n  imports: [\n    SplitComponent,\n    SplitAreaComponent,\n    SplitGutterDirective,\n    SplitGutterDragHandleDirective,\n    SplitGutterExcludeFromDragDirective,\n  ],\n  exports: [\n    SplitComponent,\n    SplitAreaComponent,\n    SplitGutterDirective,\n    SplitGutterDragHandleDirective,\n    SplitGutterExcludeFromDragDirective,\n  ],\n})\nexport class AngularSplitModule {}\n","/*\n * Public API Surface of angular-split\n */\n\nexport { AngularSplitDefaultOptions, provideAngularSplitOptions } from './lib/angular-split-config.token'\nexport { SplitGutterDragHandleDirective } from './lib/gutter/split-gutter-drag-handle.directive'\nexport { SplitGutterExcludeFromDragDirective } from './lib/gutter/split-gutter-exclude-from-drag.directive'\nexport { SplitGutterDirective, SplitGutterTemplateContext } from './lib/gutter/split-gutter.directive'\nexport {\n  SplitAreaSize,\n  SplitAreaSizeInput,\n  SplitDir,\n  SplitDirection,\n  SplitGutterInteractionEvent,\n  SplitUnit,\n} from './lib/models'\nexport { SplitAreaComponent } from './lib/split-area/split-area.component'\nexport { AngularSplitModule } from './lib/split-module.module'\nexport { SplitComponent } from './lib/split/split.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}