{"version":3,"file":"ng-zorro-antd-splitter.mjs","sources":["../../components/splitter/splitter-bar.component.ts","../../components/splitter/splitter-panel.component.ts","../../components/splitter/utils.ts","../../components/splitter/splitter.component.ts","../../components/splitter/splitter.module.ts","../../components/splitter/typings.ts","../../components/splitter/public-api.ts","../../components/splitter/ng-zorro-antd-splitter.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\n\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { getEventWithPoint } from 'ng-zorro-antd/resizable';\n\nimport { NzSplitterCollapseOption } from './typings';\n\n@Component({\n  selector: '[nz-splitter-bar]',\n  imports: [NzIconModule],\n  template: `\n    @if (lazy()) {\n      @let preview = active() && !!this.constrainedOffset();\n      <div\n        class=\"ant-splitter-bar-preview\"\n        [class.ant-splitter-bar-preview-active]=\"preview\"\n        [style.transform]=\"preview ? previewTransform() : null\"\n      ></div>\n    }\n\n    <div\n      class=\"ant-splitter-bar-dragger\"\n      [class.ant-splitter-bar-dragger-disabled]=\"!resizable()\"\n      [class.ant-splitter-bar-dragger-active]=\"active()\"\n      (mousedown)=\"resizeStartEvent($event)\"\n      (touchstart)=\"resizeStartEvent($event)\"\n    ></div>\n\n    @if (collapsible()?.start) {\n      <div class=\"ant-splitter-bar-collapse-bar ant-splitter-bar-collapse-bar-start\" (click)=\"collapseEvent('start')\">\n        <nz-icon\n          [nzType]=\"vertical() ? 'up' : 'left'\"\n          class=\"ant-splitter-bar-collapse-icon ant-splitter-bar-collapse-start\"\n        />\n      </div>\n    }\n\n    @if (collapsible()?.end) {\n      <div class=\"ant-splitter-bar-collapse-bar ant-splitter-bar-collapse-bar-end\" (click)=\"collapseEvent('end')\">\n        <nz-icon\n          [nzType]=\"vertical() ? 'down' : 'right'\"\n          class=\"ant-splitter-bar-collapse-icon ant-splitter-bar-collapse-end\"\n        />\n      </div>\n    }\n  `,\n  host: {\n    role: 'separator',\n    class: 'ant-splitter-bar',\n    '[attr.aria-valuenow]': 'getValidNumber(ariaNow())',\n    '[attr.aria-valuemin]': 'getValidNumber(ariaMin())',\n    '[attr.aria-valuemax]': 'getValidNumber(ariaMax())'\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NzSplitterBarComponent {\n  readonly ariaNow = input.required<number>();\n  readonly ariaMin = input.required<number>();\n  readonly ariaMax = input.required<number>();\n  readonly active = input(false);\n  readonly resizable = input(true);\n  readonly vertical = input<boolean>();\n  readonly lazy = input(false);\n  readonly collapsible = input<NzSplitterCollapseOption>();\n  readonly constrainedOffset = input<number>();\n\n  readonly offsetStart = output<[x: number, y: number]>();\n  readonly collapse = output<'start' | 'end'>();\n\n  protected readonly previewTransform = computed(() => {\n    const offset = coerceCssPixelValue(this.constrainedOffset());\n    return this.vertical() ? `translateY(${offset})` : `translateX(${offset})`;\n  });\n\n  protected resizeStartEvent(event: MouseEvent | TouchEvent): void {\n    if (this.resizable()) {\n      const { pageX, pageY } = getEventWithPoint(event);\n      this.offsetStart.emit([pageX, pageY]);\n    }\n  }\n\n  protected collapseEvent(type: 'start' | 'end'): void {\n    this.collapse.emit(type);\n  }\n\n  protected getValidNumber(num: number | undefined): number {\n    return typeof num === 'number' && !isNaN(num) ? Math.round(num) : 0;\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport {\n  input,\n  TemplateRef,\n  Component,\n  ViewEncapsulation,\n  viewChild,\n  booleanAttribute,\n  ChangeDetectionStrategy\n} from '@angular/core';\n\nimport { NzSplitterCollapsible } from './typings';\n\n@Component({\n  selector: 'nz-splitter-panel',\n  exportAs: 'nzSplitterPanel',\n  template: `\n    <ng-template #contentTemplate>\n      <ng-content />\n    </ng-template>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NzSplitterPanelComponent {\n  readonly nzDefaultSize = input<number | string>();\n  readonly nzMin = input<number | string>();\n  readonly nzMax = input<number | string>();\n  readonly nzSize = input<number | string>();\n  readonly nzCollapsible = input<NzSplitterCollapsible>(false);\n  readonly nzResizable = input(true, { transform: booleanAttribute });\n  readonly contentTemplate = viewChild.required<TemplateRef<void>>('contentTemplate');\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { NzSplitterCollapseOption, NzSplitterCollapsible } from './typings';\n\n/**\n * Get the percentage value of the string. (e.g. '50%' => 0.5)\n * @param str\n */\nexport function getPercentValue(str: string): number {\n  return Number(str.slice(0, -1)) / 100;\n}\n\n/**\n * Check if the size is percentage.\n * @param size\n */\nexport function isPercent(size: string | number | undefined): size is string {\n  return typeof size === 'string' && size.endsWith('%');\n}\n\n/**\n * Coerce the panel collapsible option to the NzSplitterCollapseOption type.\n */\nexport function coerceCollapsible(collapsible: NzSplitterCollapsible): NzSplitterCollapseOption {\n  if (collapsible && typeof collapsible === 'object') {\n    return collapsible;\n  }\n\n  const mergedCollapsible = !!collapsible;\n  return {\n    start: mergedCollapsible,\n    end: mergedCollapsible\n  };\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChildren,\n  DOCUMENT,\n  ElementRef,\n  inject,\n  input,\n  linkedSignal,\n  output,\n  signal,\n  ViewEncapsulation\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map, merge, Subject, takeUntil } from 'rxjs';\nimport { pairwise, startWith } from 'rxjs/operators';\n\nimport { NzResizeObserver } from 'ng-zorro-antd/cdk/resize-observer';\nimport { NzDestroyService } from 'ng-zorro-antd/core/services';\nimport { fromEventOutsideAngular } from 'ng-zorro-antd/core/util';\nimport { getEventWithPoint } from 'ng-zorro-antd/resizable';\n\nimport { NzSplitterBarComponent } from './splitter-bar.component';\nimport { NzSplitterPanelComponent } from './splitter-panel.component';\nimport { NzSplitterCollapseOption, NzSplitterLayout } from './typings';\nimport { coerceCollapsible, getPercentValue, isPercent } from './utils';\n\ninterface PanelSize {\n  // Calculated size of the panel in pixels, constrained by the min and max size.\n  size: string | number | undefined;\n  // Size in pixels\n  postPxSize: number;\n  // The percentage size of the panel, calculated based on the container size.\n  percentage: number;\n  // Original min size of the panel set by the user.\n  min: string | number | undefined;\n  // Original max size of the panel set by the user.\n  max: string | number | undefined;\n  // Post processed min size of the panel in percentage.\n  postPercentMinSize: number;\n  // Post processed max size of the panel in percentage.\n  postPercentMaxSize: number;\n}\n\ninterface ResizableInfo {\n  resizable: boolean;\n  collapsible: Required<NzSplitterCollapseOption>;\n}\n\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });\n\n@Component({\n  selector: 'nz-splitter',\n  exportAs: 'nzSplitter',\n  template: `\n    @for (panel of panelProps(); track $index) {\n      @let size = sizes()[$index];\n      @let flexBasis = !!size.size ? size.size : 'auto';\n      @let flexGrow = !!size.size ? 0 : 1;\n      <div\n        class=\"ant-splitter-panel\"\n        [class.ant-splitter-panel-hidden]=\"size.postPxSize === 0\"\n        [style.flex-basis]=\"flexBasis\"\n        [style.flex-grow]=\"flexGrow\"\n      >\n        <ng-container *ngTemplateOutlet=\"panel.contentTemplate\" />\n      </div>\n\n      @if (!$last) {\n        @let resizableInfo = resizableInfos()[$index];\n        @let ariaInfo = ariaInfos()[$index];\n        <div\n          nz-splitter-bar\n          [ariaNow]=\"ariaInfo.ariaNow\"\n          [ariaMin]=\"ariaInfo.ariaMin\"\n          [ariaMax]=\"ariaInfo.ariaMax\"\n          [resizable]=\"resizableInfo.resizable\"\n          [collapsible]=\"resizableInfo.collapsible\"\n          [active]=\"movingIndex()?.index === $index\"\n          [vertical]=\"nzLayout() === 'vertical'\"\n          [lazy]=\"nzLazy()\"\n          [constrainedOffset]=\"constrainedOffset()\"\n          (offsetStart)=\"startResize($index, $event)\"\n          (collapse)=\"collapse($index, $event)\"\n        ></div>\n      }\n    }\n\n    <!-- Fake mask for cursor -->\n    @if (movingIndex() !== null) {\n      <div\n        aria-hidden\n        class=\"ant-splitter-mask\"\n        [class.ant-splitter-mask-horizontal]=\"nzLayout() === 'horizontal'\"\n        [class.ant-splitter-mask-vertical]=\"nzLayout() === 'vertical'\"\n      ></div>\n    }\n  `,\n  imports: [NgTemplateOutlet, NzSplitterBarComponent],\n  providers: [NzDestroyService],\n  host: {\n    class: 'ant-splitter',\n    '[class.ant-splitter-horizontal]': 'nzLayout() === \"horizontal\"',\n    '[class.ant-splitter-vertical]': 'nzLayout() === \"vertical\"',\n    '[class.ant-splitter-rtl]': 'dir() === \"rtl\"'\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NzSplitterComponent {\n  /** ------------------- Props ------------------- */\n  readonly nzLayout = input<NzSplitterLayout>('horizontal');\n  readonly nzLazy = input(false, { transform: booleanAttribute });\n  readonly nzResizeStart = output<number[]>();\n  readonly nzResize = output<number[]>();\n  readonly nzResizeEnd = output<number[]>();\n\n  protected readonly destroy$ = inject(NzDestroyService);\n  protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected readonly directionality = inject(Directionality);\n  protected readonly resizeObserver = inject(NzResizeObserver);\n  protected readonly document = inject(DOCUMENT);\n\n  protected readonly dir = toSignal(this.directionality.change, { initialValue: this.directionality.value });\n\n  /** ------------------- Panels ------------------- */\n  // Get all panels from content children\n  protected readonly panels = contentChildren(NzSplitterPanelComponent);\n  // Subscribe to the change of properties\n  protected readonly panelProps = computed(() =>\n    this.panels().map(panel => ({\n      defaultSize: panel.nzDefaultSize(),\n      size: panel.nzSize(),\n      min: panel.nzMin(),\n      max: panel.nzMax(),\n      resizable: panel.nzResizable(),\n      collapsible: coerceCollapsible(panel.nzCollapsible()),\n      contentTemplate: panel.contentTemplate()\n    }))\n  );\n\n  /** ------------------- Sizes ------------------- */\n  /**\n   * Observe the size of the container.\n   */\n  private readonly containerBox = toSignal(\n    this.resizeObserver.observe(this.elementRef).pipe(\n      map(([item]) => item.target as HTMLElement),\n      map(el => ({ width: el.clientWidth, height: el.clientHeight }))\n    ),\n    {\n      initialValue: {\n        width: this.elementRef.nativeElement.clientWidth || 0,\n        height: this.elementRef.nativeElement.clientHeight || 0\n      }\n    }\n  );\n  /**\n   * The size of the container, used to calculate the percentage size and flex basis of each panel.\n   */\n  protected readonly containerSize = computed(() =>\n    this.nzLayout() === 'horizontal' ? this.containerBox().width : this.containerBox().height\n  );\n  /**\n   * Derived from defaultSize of each panel.\n   * After that it will be updated by the resize event with **real** size in pixels.\n   */\n  protected readonly innerSizes = linkedSignal({\n    source: this.panelProps,\n    computation: source => source.map(panel => panel.defaultSize)\n  });\n  /**\n   * Calculate the size of each panel based on the container size and the percentage size.\n   */\n  protected readonly sizes = computed(() => {\n    let emptyCount = 0;\n    const containerSize = this.containerSize();\n    const innerSizes = this.innerSizes();\n    /**\n     * Get the calculated size, min and max percentage of each panel\n     */\n    const sizes = this.panelProps().map((panel, index) => {\n      const size = panel.size ?? innerSizes[index];\n\n      // Calculate the percentage size of each panel.\n      let percentage: number | undefined;\n      if (isPercent(size)) {\n        percentage = getPercentValue(size);\n      } else if (size || size === 0) {\n        const num = Number(size);\n        if (!isNaN(num)) {\n          percentage = num / containerSize;\n        }\n      } else {\n        percentage = undefined;\n        emptyCount++;\n      }\n\n      // Calculate the min and max percentage size of each panel.\n      const minSize = panel.min;\n      const maxSize = panel.max;\n      const postPercentMinSize = isPercent(minSize) ? getPercentValue(minSize) : (minSize || 0) / containerSize;\n      const postPercentMaxSize = isPercent(maxSize)\n        ? getPercentValue(maxSize)\n        : (maxSize || containerSize) / containerSize;\n\n      return {\n        size,\n        percentage,\n        min: minSize,\n        max: maxSize,\n        postPercentMinSize,\n        postPercentMaxSize\n      } as PanelSize;\n    });\n\n    /**\n     * Normalize the percentage size of each panel if the total percentage is larger than 1 or smaller than 1.\n     */\n    const totalPercentage = sizes.reduce((acc, { percentage }) => acc + (percentage ?? 0), 0);\n\n    for (const size of sizes) {\n      if (totalPercentage > 1 && !emptyCount) {\n        // If total percentage is larger than 1, we will scale it down.\n        const scale = 1 / totalPercentage;\n        size.percentage = size.percentage === undefined ? 0 : size.percentage * scale;\n      } else {\n        // If total percentage is smaller than 1, we will fill the rest.\n        const averagePercentage = (1 - totalPercentage) / emptyCount;\n        size.percentage = size.percentage === undefined ? averagePercentage : size.percentage;\n      }\n\n      size.postPxSize = size.percentage * containerSize;\n      size.size = containerSize ? coerceCssPixelValue(size.postPxSize) : size.size;\n    }\n\n    return sizes;\n  });\n\n  protected readonly ariaInfos = computed(() => {\n    const stackSizes: number[] = [];\n    const ariaInfos: Array<{ ariaNow: number; ariaMin: number; ariaMax: number }> = [];\n    const sizes = this.sizes();\n\n    let stack = 0;\n    for (const size of sizes) {\n      stack += size.percentage;\n      stackSizes.push(stack);\n    }\n\n    for (let i = 0; i < sizes.length - 1; i += 1) {\n      const ariaMinStart = (stackSizes[i - 1] || 0) + sizes[i].postPercentMinSize;\n      const ariaMinEnd = (stackSizes[i + 1] || 100) - sizes[i + 1].postPercentMaxSize;\n\n      const ariaMaxStart = (stackSizes[i - 1] || 0) + sizes[i].postPercentMaxSize;\n      const ariaMaxEnd = (stackSizes[i + 1] || 100) - sizes[i + 1].postPercentMinSize;\n\n      ariaInfos.push({\n        ariaNow: stackSizes[i] * 100,\n        ariaMin: Math.max(ariaMinStart, ariaMinEnd) * 100,\n        ariaMax: Math.min(ariaMaxStart, ariaMaxEnd) * 100\n      });\n    }\n\n    return ariaInfos;\n  });\n\n  private getPxSizes(): number[] {\n    return this.sizes().map(s => s.postPxSize);\n  }\n\n  /** ------------------ Resize ------------------ */\n  /**\n   * The index of the panel that is being resized.\n   * @note Mark the moving splitter bar as activated to show the dragging effect even if the mouse is outside the\n   * splitter container.\n   */\n  protected readonly movingIndex = signal<{ index: number; confirmed: boolean } | null>(null);\n  /**\n   * The offset of preview position (lazy mode) when dragging the splitter bar.\n   * Constrained by the min and max size of the target panel.\n   */\n  protected readonly constrainedOffset = signal<number>(0);\n  /**\n   * The resizable information of each splitter bar.\n   */\n  protected readonly resizableInfos = computed(() => {\n    const items = this.panelProps();\n    const pxSizes = this.getPxSizes();\n\n    const resizeInfos: ResizableInfo[] = [];\n\n    for (let i = 0; i < items.length - 1; i += 1) {\n      const prevItem = items[i];\n      const nextItem = items[i + 1];\n      const prevSize = pxSizes[i];\n      const nextSize = pxSizes[i + 1];\n\n      const { resizable: prevResizable = true, min: prevMin, collapsible: prevCollapsible } = prevItem;\n      const { resizable: nextResizable = true, min: nextMin, collapsible: nextCollapsible } = nextItem;\n\n      const mergedResizable =\n        // Both need to be resizable\n        prevResizable &&\n        nextResizable &&\n        // Prev is not collapsed and limit min size\n        (prevSize !== 0 || !prevMin) &&\n        // Next is not collapsed and limit min size\n        (nextSize !== 0 || !nextMin);\n\n      const startCollapsible =\n        // Self is collapsible\n        (prevCollapsible.end && prevSize > 0) ||\n        // Collapsed and can be collapsed\n        (nextCollapsible.start && nextSize === 0 && prevSize > 0);\n\n      const endCollapsible =\n        // Self is collapsible\n        (nextCollapsible.start && nextSize > 0) ||\n        // Collapsed and can be collapsed\n        (prevCollapsible.end && prevSize === 0 && nextSize > 0);\n\n      resizeInfos[i] = {\n        resizable: mergedResizable,\n        collapsible: {\n          start: !!(this.dir() === 'rtl' ? endCollapsible : startCollapsible),\n          end: !!(this.dir() === 'rtl' ? startCollapsible : endCollapsible)\n        }\n      };\n    }\n\n    return resizeInfos;\n  });\n\n  /**\n   * Handle the resize start event for the specified panel.\n   * @param index The index of the panel.\n   * @param startPos The start position of the resize event.\n   */\n  protected startResize(index: number, startPos: [x: number, y: number]): void {\n    this.movingIndex.set({ index, confirmed: false });\n    this.nzResizeStart.emit(this.getPxSizes());\n    const end$ = new Subject<void>();\n\n    // Updated constraint calculation\n    const getConstrainedOffset = (rawOffset: number): number => {\n      const { percentage, postPercentMinSize, postPercentMaxSize } = this.sizes()[index];\n      const [ariaNow, ariaMin, ariaMax] = [percentage, postPercentMinSize, postPercentMaxSize].map(p => p * 100);\n\n      const containerSize = this.containerSize();\n      const currentPos = (containerSize * ariaNow) / 100;\n      const newPos = currentPos + rawOffset;\n\n      // Calculate available space\n      const minAllowed = Math.max(0, (containerSize * ariaMin) / 100);\n      const maxAllowed = Math.min(containerSize, (containerSize * ariaMax) / 100);\n\n      // Constrain new position within bounds\n      const clampedPos = Math.max(minAllowed, Math.min(maxAllowed, newPos));\n      return clampedPos - currentPos;\n    };\n\n    const handleLazyMove = (offset: number): void => {\n      this.constrainedOffset.set(getConstrainedOffset(offset));\n    };\n\n    const handleLazyEnd = (): void => {\n      this.updateOffset(index, this.constrainedOffset());\n      this.constrainedOffset.set(0);\n    };\n\n    // resizing\n    merge(\n      fromEventOutsideAngular<MouseEvent>(this.document, 'mousemove', passiveEventListenerOptions),\n      fromEventOutsideAngular<TouchEvent>(this.document, 'touchmove', passiveEventListenerOptions)\n    )\n      .pipe(\n        map(event => getEventWithPoint(event)),\n        map(({ pageX, pageY }) => (this.nzLayout() === 'horizontal' ? pageX - startPos[0] : pageY - startPos[1])),\n        // flip the offset if the direction is rtl\n        map(offset => (this.nzLayout() === 'horizontal' && this.dir() === 'rtl' ? -offset : offset)),\n        startWith(0),\n        pairwise(),\n        takeUntil(merge(end$, this.destroy$))\n      )\n      .subscribe(([prev, next]) => {\n        if (this.nzLazy() && next !== 0) {\n          handleLazyMove(next);\n        } else {\n          const deltaOffset = next - prev;\n          // filter out the 0 delta offset\n          if (deltaOffset !== 0) {\n            this.updateOffset(index, deltaOffset);\n          }\n        }\n      });\n\n    // resize end\n    merge(\n      fromEventOutsideAngular<MouseEvent>(this.document, 'mouseup'),\n      fromEventOutsideAngular<TouchEvent>(this.document, 'touchend')\n    )\n      .pipe(takeUntil(merge(end$, this.destroy$)))\n      .subscribe(() => {\n        if (this.nzLazy()) {\n          handleLazyEnd();\n        }\n        this.movingIndex.set(null);\n        this.nzResizeEnd.emit(this.getPxSizes());\n        end$.next();\n      });\n  }\n\n  /**\n   * Update the sizes of specified panels based on the move offset.\n   * @param index The index of the panel.\n   * @param offset The move offset in pixels.\n   */\n  private updateOffset(index: number, offset: number): void {\n    const containerSize = this.containerSize();\n    const limitSizes = this.sizes().map(p => [p.min, p.max]);\n    const pxSizes = this.sizes().map(p => p.percentage * containerSize);\n\n    const getLimitSize = (size: string | number | undefined, defaultLimit: number): number => {\n      if (typeof size === 'string') {\n        return getPercentValue(size) * containerSize;\n      }\n      return size ?? defaultLimit;\n    };\n\n    // First time trigger move index update is not sync in the state\n    let confirmedIndex: number | null = null;\n    const movingIndex = this.movingIndex();\n    // we need to know what the real index is\n    if ((!movingIndex || !movingIndex.confirmed) && offset !== 0) {\n      // search for the real index\n      if (offset > 0) {\n        confirmedIndex = index;\n        this.movingIndex.set({ index, confirmed: true });\n      } else {\n        for (let i = index; i >= 0; i -= 1) {\n          if (pxSizes[i] > 0 && this.resizableInfos()[i].resizable) {\n            confirmedIndex = i;\n            this.movingIndex.set({ index: i, confirmed: true });\n            break;\n          }\n        }\n      }\n    }\n\n    const mergedIndex = confirmedIndex ?? index;\n    const nextIndex = mergedIndex + 1;\n\n    // Get boundary\n    const startMinSize = getLimitSize(limitSizes[mergedIndex][0], 0);\n    const endMinSize = getLimitSize(limitSizes[nextIndex][0], 0);\n    const startMaxSize = getLimitSize(limitSizes[mergedIndex][1], containerSize);\n    const endMaxSize = getLimitSize(limitSizes[nextIndex][1], containerSize);\n\n    let mergedOffset = offset;\n\n    // Align with the boundary\n    if (pxSizes[mergedIndex] + mergedOffset < startMinSize) {\n      mergedOffset = startMinSize - pxSizes[mergedIndex];\n    }\n    if (pxSizes[nextIndex] - mergedOffset < endMinSize) {\n      mergedOffset = pxSizes[nextIndex] - endMinSize;\n    }\n    if (pxSizes[mergedIndex] + mergedOffset > startMaxSize) {\n      mergedOffset = startMaxSize - pxSizes[mergedIndex];\n    }\n    if (pxSizes[nextIndex] - mergedOffset > endMaxSize) {\n      mergedOffset = pxSizes[nextIndex] - endMaxSize;\n    }\n\n    // Do offset\n    pxSizes[mergedIndex] += mergedOffset;\n    pxSizes[nextIndex] -= mergedOffset;\n    this.innerSizes.set(pxSizes);\n    this.nzResize.emit(pxSizes);\n  }\n\n  /** ------------------ Resize ------------------ */\n  /**\n   * Record the original size of the collapsed panel.\n   * Used to restore the size when the panel is expanded back.\n   */\n  private readonly cacheCollapsedSize: number[] = [];\n\n  /**\n   * Collapse the specified panel.\n   * @param index The index of the panel to collapse.\n   * @param type The type of collapse, either `start` or `end`.\n   */\n  protected collapse(index: number, type: 'start' | 'end'): void {\n    const containerSize = this.containerSize();\n    const limitSizes = this.sizes().map(p => [p.min, p.max]);\n    const currentSizes = this.sizes().map(p => p.percentage * containerSize);\n    const adjustedType = this.dir() === 'rtl' ? (type === 'start' ? 'end' : 'start') : type;\n\n    const currentIndex = adjustedType === 'start' ? index : index + 1;\n    const targetIndex = adjustedType == 'start' ? index + 1 : index;\n    const currentSize = currentSizes[currentIndex];\n    const targetSize = currentSizes[targetIndex];\n\n    const getLimitSize = (size: string | number | undefined, defaultLimit: number): number => {\n      if (typeof size === 'string') {\n        return getPercentValue(size) * containerSize;\n      }\n      return size ?? defaultLimit;\n    };\n\n    if (currentSize !== 0 && targetSize !== 0) {\n      // Collapse directly\n      currentSizes[currentIndex] = 0;\n      currentSizes[targetIndex] += currentSize;\n      this.cacheCollapsedSize[index] = currentSize;\n    } else {\n      const totalSize = currentSize + targetSize;\n\n      const currentSizeMin = getLimitSize(limitSizes[currentIndex][0], 0);\n      const currentSizeMax = getLimitSize(limitSizes[currentIndex][1], containerSize);\n      const targetSizeMin = getLimitSize(limitSizes[targetIndex][0], 0);\n      const targetSizeMax = getLimitSize(limitSizes[targetIndex][1], containerSize);\n\n      const limitStart = Math.max(currentSizeMin, totalSize - targetSizeMax);\n      const limitEnd = Math.min(currentSizeMax, totalSize - targetSizeMin);\n      const halfOffset = (limitEnd - limitStart) / 2;\n\n      const targetCacheCollapsedSize = this.cacheCollapsedSize[index];\n      const currentCacheCollapsedSize = totalSize - targetCacheCollapsedSize;\n\n      const shouldUseCache =\n        targetCacheCollapsedSize &&\n        targetCacheCollapsedSize <= targetSizeMax &&\n        targetCacheCollapsedSize >= targetSizeMin &&\n        currentCacheCollapsedSize <= currentSizeMax &&\n        currentCacheCollapsedSize >= currentSizeMin;\n\n      if (shouldUseCache) {\n        currentSizes[targetIndex] = targetCacheCollapsedSize;\n        currentSizes[currentIndex] = currentCacheCollapsedSize;\n      } else {\n        currentSizes[currentIndex] -= halfOffset;\n        currentSizes[targetIndex] += halfOffset;\n      }\n    }\n\n    this.innerSizes.set(currentSizes);\n    this.nzResize.emit(currentSizes);\n    this.nzResizeEnd.emit(currentSizes);\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { NzSplitterPanelComponent } from './splitter-panel.component';\nimport { NzSplitterComponent } from './splitter.component';\n\n@NgModule({\n  imports: [NzSplitterComponent, NzSplitterPanelComponent],\n  exports: [NzSplitterComponent, NzSplitterPanelComponent]\n})\nexport class NzSplitterModule {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport type NzSplitterLayout = 'horizontal' | 'vertical';\nexport type NzSplitterCollapsible = boolean | NzSplitterCollapseOption;\n\nexport interface NzSplitterCollapseOption {\n  start?: boolean;\n  end?: boolean;\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './splitter.component';\nexport * from './splitter-panel.component';\nexport * from './splitter.module';\nexport * from './typings';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}