{"version":3,"file":"edsis-component-resizable.mjs","sources":["../../../library/component/resizable/resizable.component.ts","../../../library/component/resizable/edsis-component-resizable.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport {\n  Component,\n  Directive,\n  ElementRef,\n  OnDestroy,\n  booleanAttribute,\n  computed,\n  contentChildren,\n  effect,\n  forwardRef,\n  inject,\n  input,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { cn } from '@edsis/component/class';\nimport { uniqueId } from '@edsis/component/id';\n\nexport type ResizableOrientation = 'horizontal' | 'vertical';\nexport type ResizableSize = string | number | null | undefined;\n\ninterface ResizablePair {\n  readonly previous: ResizablePanelComponent;\n  readonly next: ResizablePanelComponent;\n}\n\ninterface ResizableBounds {\n  readonly min: number;\n  readonly max: number;\n}\n\ninterface ResizableHandleState {\n  readonly panelId: string;\n  readonly valueNow: number;\n  readonly valueMin: number;\n  readonly valueMax: number;\n}\n\ninterface ResizablePointerSession {\n  readonly handle: ResizableHandleComponent;\n  readonly pair: ResizablePair;\n  readonly startCoordinate: number;\n  readonly previousSize: number;\n}\n\n@Directive()\nexport abstract class ResizableGroupContextBase {\n  abstract groupOrientation(): ResizableOrientation;\n  abstract panelDirection(): 'ltr' | 'rtl';\n  abstract pairState(handle: ResizableHandleComponent): ResizableHandleState | null;\n  abstract beginPointerResize(handle: ResizableHandleComponent, event: PointerEvent): void;\n  abstract handleKeydown(handle: ResizableHandleComponent, event: KeyboardEvent): void;\n}\n\n@Component({\n  selector: 'ResizablePanel',\n  host: {\n    '[class]': 'classes()',\n    '[attr.id]': 'resolvedId()',\n    '[style.flex]': 'flexStyle()',\n  },\n  template: `<ng-content />`,\n})\nexport class ResizablePanelComponent {\n  private readonly ctx = inject(ResizableGroupContextBase);\n  private readonly host = inject(ElementRef<HTMLElement>);\n\n  readonly defaultSize = input<ResizableSize>(null);\n  readonly minSize = input<ResizableSize>('10%');\n  readonly maxSize = input<ResizableSize>('90%');\n  readonly id = input<string | null>(null);\n  readonly class = input<string>('');\n\n  private readonly generatedId = uniqueId('ResizablePanel');\n  private readonly currentSize = signal<number | null>(null);\n\n  protected readonly resolvedId = computed(() => this.id() ?? this.generatedId);\n  protected readonly classes = computed(() =>\n    cn(\n      'relative block min-h-0 min-w-0 overflow-hidden',\n      this.ctx.groupOrientation() === 'horizontal' ? 'h-full' : 'w-full',\n      this.class(),\n    ),\n  );\n  protected readonly flexStyle = computed(() => {\n    const size = this.currentSize();\n    return size == null ? '1 1 0%' : `0 0 ${size}%`;\n  });\n\n  panelId(): string {\n    return this.resolvedId();\n  }\n\n  preferredSizePercent(): number | null {\n    return parsePercent(this.defaultSize());\n  }\n\n  minSizePercent(): number {\n    return clamp(parsePercent(this.minSize()) ?? 10, 0, 100);\n  }\n\n  maxSizePercent(): number {\n    return clamp(parsePercent(this.maxSize()) ?? 90, this.minSizePercent(), 100);\n  }\n\n  size(): number {\n    return this.currentSize() ?? 0;\n  }\n\n  setSize(size: number): void {\n    this.currentSize.set(roundPercentage(clamp(size, 0, 100)));\n  }\n\n  nativeElement(): HTMLElement {\n    return this.host.nativeElement;\n  }\n}\n\n@Component({\n  selector: 'ResizableHandle',\n  host: {\n    '[class]': 'classes()',\n    role: 'separator',\n    tabindex: '0',\n    '[attr.data-active]': 'active() ? \"true\" : null',\n    '[attr.aria-controls]': 'controls()',\n    '[attr.aria-label]': 'label()',\n    '[attr.aria-orientation]': 'separatorOrientation()',\n    '[attr.aria-valuenow]': 'valueNow()',\n    '[attr.aria-valuemin]': 'valueMin()',\n    '[attr.aria-valuemax]': 'valueMax()',\n    '[attr.aria-valuetext]': 'valueText()',\n    '(keydown)': 'onKeydown($event)',\n    '(pointerdown)': 'onPointerDown($event)',\n  },\n  template: `\n    @if (withHandle()) {\n      <span\n        aria-hidden=\"true\"\n        class=\"pointer-events-none inline-flex items-center justify-center rounded-sm border border-border bg-background px-1 py-0.5 shadow-sm\"\n      >\n        <svg class=\"h-3 w-3 text-muted-foreground\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n          <circle cx=\"9\" cy=\"8\" r=\"1.25\" />\n          <circle cx=\"15\" cy=\"8\" r=\"1.25\" />\n          <circle cx=\"9\" cy=\"12\" r=\"1.25\" />\n          <circle cx=\"15\" cy=\"12\" r=\"1.25\" />\n          <circle cx=\"9\" cy=\"16\" r=\"1.25\" />\n          <circle cx=\"15\" cy=\"16\" r=\"1.25\" />\n        </svg>\n      </span>\n    }\n  `,\n})\nexport class ResizableHandleComponent {\n  private readonly ctx = inject(ResizableGroupContextBase);\n  private readonly host = inject(ElementRef<HTMLElement>);\n\n  readonly withHandle = input(false, { transform: booleanAttribute });\n  readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n  readonly class = input<string>('');\n\n  private readonly lastExpandedPrimarySize = signal<number | null>(null);\n  protected readonly active = signal(false);\n  private readonly state = computed(() => this.ctx.pairState(this));\n  protected readonly classes = computed(() =>\n    cn(\n      'group relative flex shrink-0 select-none items-center justify-center bg-transparent text-foreground transition-colors',\n      'touch-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n      this.ctx.groupOrientation() === 'horizontal'\n        ? 'h-full w-2 cursor-col-resize before:absolute before:inset-y-0 before:left-1/2 before:w-px before:-translate-x-1/2 before:bg-border'\n        : 'h-2 w-full cursor-row-resize before:absolute before:inset-x-0 before:top-1/2 before:h-px before:-translate-y-1/2 before:bg-border',\n      this.active() ? 'before:bg-foreground/60' : 'hover:before:bg-foreground/40',\n      this.class(),\n    ),\n  );\n\n  protected readonly separatorOrientation = computed(() =>\n    this.ctx.groupOrientation() === 'horizontal' ? 'vertical' : 'horizontal',\n  );\n  protected readonly controls = computed(() => this.state()?.panelId ?? null);\n  protected readonly label = computed(() => this.ariaLabel() ?? 'Resize panel');\n  protected readonly valueNow = computed(() => toAriaValue(this.state()?.valueNow));\n  protected readonly valueMin = computed(() => toAriaValue(this.state()?.valueMin));\n  protected readonly valueMax = computed(() => toAriaValue(this.state()?.valueMax));\n  protected readonly valueText = computed(() => {\n    const value = this.state()?.valueNow;\n    return value == null ? null : `${Math.round(value)}%`;\n  });\n\n  onPointerDown(event: PointerEvent): void {\n    if (event.button !== 0) {\n      return;\n    }\n\n    event.preventDefault();\n    this.host.nativeElement.focus();\n    this.ctx.beginPointerResize(this, event);\n  }\n\n  onKeydown(event: KeyboardEvent): void {\n    this.ctx.handleKeydown(this, event);\n  }\n\n  setActive(active: boolean): void {\n    this.active.set(active);\n  }\n\n  rememberPrimarySize(size: number): void {\n    this.lastExpandedPrimarySize.set(roundPercentage(size));\n  }\n\n  rememberedPrimarySize(): number | null {\n    return this.lastExpandedPrimarySize();\n  }\n\n  nativeElement(): HTMLElement {\n    return this.host.nativeElement;\n  }\n}\n\n@Component({\n  selector: 'ResizablePanelGroup',\n  providers: [\n    {\n      provide: ResizableGroupContextBase,\n      useExisting: forwardRef(() => ResizablePanelGroupComponent),\n    },\n  ],\n  host: {\n    '[class]': 'classes()',\n    '[attr.data-orientation]': 'orientation()',\n  },\n  template: `<ng-content />`,\n})\nexport class ResizablePanelGroupComponent extends ResizableGroupContextBase implements OnDestroy {\n  private readonly host = inject(ElementRef<HTMLElement>);\n  private readonly document = inject(DOCUMENT);\n\n  readonly orientation = input<ResizableOrientation>('horizontal');\n  readonly class = input<string>('');\n\n  private readonly panels = contentChildren(ResizablePanelComponent);\n  private readonly handles = contentChildren(ResizableHandleComponent);\n  private pointerSession: ResizablePointerSession | null = null;\n  private removePointerListeners: (() => void) | null = null;\n\n  protected readonly classes = computed(() =>\n    cn(\n      'flex w-full min-h-0 min-w-0 items-stretch',\n      this.orientation() === 'horizontal' ? 'flex-row' : 'flex-col',\n      this.class(),\n    ),\n  );\n\n  private readonly syncLayout = effect(() => {\n    const panels = this.panels();\n    void this.handles();\n\n    if (!panels.length) {\n      return;\n    }\n\n    untracked(() => this.initializeLayout(panels));\n  });\n\n  override groupOrientation(): ResizableOrientation {\n    return this.orientation();\n  }\n\n  override panelDirection(): 'ltr' | 'rtl' {\n    const view = this.document.defaultView;\n    if (!view) {\n      return 'ltr';\n    }\n\n    return view.getComputedStyle(this.host.nativeElement).direction === 'rtl' ? 'rtl' : 'ltr';\n  }\n\n  override pairState(handle: ResizableHandleComponent): ResizableHandleState | null {\n    const pair = this.resolvePair(handle);\n    if (!pair) {\n      return null;\n    }\n\n    const bounds = this.boundsForPair(pair);\n    return {\n      panelId: pair.previous.panelId(),\n      valueNow: pair.previous.size(),\n      valueMin: bounds.min,\n      valueMax: bounds.max,\n    };\n  }\n\n  override beginPointerResize(handle: ResizableHandleComponent, event: PointerEvent): void {\n    const pair = this.resolvePair(handle);\n    if (!pair) {\n      return;\n    }\n\n    this.finishPointerResize();\n    handle.setActive(true);\n    this.pointerSession = {\n      handle,\n      pair,\n      startCoordinate: this.coordinateFromEvent(event),\n      previousSize: pair.previous.size(),\n    };\n\n    const move = (nextEvent: PointerEvent) => {\n      const session = this.pointerSession;\n      if (!session) {\n        return;\n      }\n\n      const containerSize = this.containerSize();\n      if (containerSize <= 0) {\n        return;\n      }\n\n      const delta = this.coordinateFromEvent(nextEvent) - session.startCoordinate;\n      const directionFactor =\n        this.orientation() === 'horizontal' && this.panelDirection() === 'rtl' ? -1 : 1;\n      const deltaPercent = (delta / containerSize) * 100 * directionFactor;\n      this.applyPrimarySize(session.pair, session.previousSize + deltaPercent);\n    };\n\n    const end = () => this.finishPointerResize();\n\n    this.document.addEventListener('pointermove', move);\n    this.document.addEventListener('pointerup', end);\n    this.document.addEventListener('pointercancel', end);\n    this.removePointerListeners = () => {\n      this.document.removeEventListener('pointermove', move);\n      this.document.removeEventListener('pointerup', end);\n      this.document.removeEventListener('pointercancel', end);\n    };\n  }\n\n  override handleKeydown(handle: ResizableHandleComponent, event: KeyboardEvent): void {\n    const pair = this.resolvePair(handle);\n    if (!pair) {\n      return;\n    }\n\n    const current = pair.previous.size();\n    const bounds = this.boundsForPair(pair);\n    const horizontalStep = this.panelDirection() === 'rtl' ? -10 : 10;\n\n    switch (event.key) {\n      case 'ArrowRight':\n        if (this.orientation() !== 'horizontal') {\n          return;\n        }\n        this.applyPrimarySize(pair, current + horizontalStep);\n        break;\n      case 'ArrowLeft':\n        if (this.orientation() !== 'horizontal') {\n          return;\n        }\n        this.applyPrimarySize(pair, current - horizontalStep);\n        break;\n      case 'ArrowDown':\n        if (this.orientation() !== 'vertical') {\n          return;\n        }\n        this.applyPrimarySize(pair, current + 10);\n        break;\n      case 'ArrowUp':\n        if (this.orientation() !== 'vertical') {\n          return;\n        }\n        this.applyPrimarySize(pair, current - 10);\n        break;\n      case 'Home':\n        this.applyPrimarySize(pair, bounds.min);\n        break;\n      case 'End':\n        this.applyPrimarySize(pair, bounds.max);\n        break;\n      case 'Enter': {\n        const remembered = handle.rememberedPrimarySize();\n        if (current > bounds.min + 0.5) {\n          handle.rememberPrimarySize(current);\n          this.applyPrimarySize(pair, bounds.min);\n        } else if (remembered != null) {\n          this.applyPrimarySize(pair, remembered);\n        } else {\n          this.applyPrimarySize(pair, (bounds.min + bounds.max) / 2);\n        }\n        break;\n      }\n      default:\n        return;\n    }\n\n    event.preventDefault();\n  }\n\n  ngOnDestroy(): void {\n    this.finishPointerResize();\n  }\n\n  private finishPointerResize(): void {\n    this.pointerSession?.handle.setActive(false);\n    this.pointerSession = null;\n    this.removePointerListeners?.();\n    this.removePointerListeners = null;\n  }\n\n  private initializeLayout(panels: readonly ResizablePanelComponent[]): void {\n    const minimums = panels.map((panel) => panel.minSizePercent());\n    const maximums = panels.map((panel, index) =>\n      Math.max(minimums[index], panel.maxSizePercent()),\n    );\n    const preferred = panels.map((panel) => panel.preferredSizePercent());\n    const sizes = resolveInitialSizes(preferred, minimums, maximums);\n\n    panels.forEach((panel, index) => panel.setSize(sizes[index]));\n  }\n\n  private resolvePair(handle: ResizableHandleComponent): ResizablePair | null {\n    const panels = new Map(this.panels().map((panel) => [panel.nativeElement(), panel] as const));\n    const children = Array.from(this.host.nativeElement.children);\n    const handleIndex = children.indexOf(handle.nativeElement());\n\n    if (handleIndex === -1) {\n      return null;\n    }\n\n    let previous: ResizablePanelComponent | null = null;\n    let next: ResizablePanelComponent | null = null;\n\n    for (let index = handleIndex - 1; index >= 0; index -= 1) {\n      previous = panels.get(children[index] as HTMLElement) ?? null;\n      if (previous) {\n        break;\n      }\n    }\n\n    for (let index = handleIndex + 1; index < children.length; index += 1) {\n      next = panels.get(children[index] as HTMLElement) ?? null;\n      if (next) {\n        break;\n      }\n    }\n\n    if (!previous || !next) {\n      return null;\n    }\n\n    return { previous, next };\n  }\n\n  private boundsForPair(pair: ResizablePair): ResizableBounds {\n    const pairTotal = pair.previous.size() + pair.next.size();\n    const min = Math.max(pair.previous.minSizePercent(), pairTotal - pair.next.maxSizePercent());\n    const max = Math.min(pair.previous.maxSizePercent(), pairTotal - pair.next.minSizePercent());\n\n    if (min > max) {\n      return { min: pairTotal / 2, max: pairTotal / 2 };\n    }\n\n    return { min: roundPercentage(min), max: roundPercentage(max) };\n  }\n\n  private applyPrimarySize(pair: ResizablePair, nextPrimarySize: number): void {\n    const pairTotal = pair.previous.size() + pair.next.size();\n    const bounds = this.boundsForPair(pair);\n    const primarySize = roundPercentage(clamp(nextPrimarySize, bounds.min, bounds.max));\n    const secondarySize = roundPercentage(pairTotal - primarySize);\n\n    pair.previous.setSize(primarySize);\n    pair.next.setSize(secondarySize);\n  }\n\n  private containerSize(): number {\n    const rect = this.host.nativeElement.getBoundingClientRect();\n    return this.orientation() === 'horizontal' ? rect.width : rect.height;\n  }\n\n  private coordinateFromEvent(event: PointerEvent): number {\n    return this.orientation() === 'horizontal' ? event.clientX : event.clientY;\n  }\n}\n\nlet _id = 0;\n\nfunction clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max);\n}\n\nfunction parsePercent(value: ResizableSize): number | null {\n  if (value == null || value === '') {\n    return null;\n  }\n\n  if (typeof value === 'number') {\n    return Number.isFinite(value) ? value : null;\n  }\n\n  const parsed = Number.parseFloat(value);\n  return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction roundPercentage(value: number): number {\n  return Math.round(value * 1000) / 1000;\n}\n\nfunction sum(values: readonly number[]): number {\n  return values.reduce((total, value) => total + value, 0);\n}\n\nfunction resolveInitialSizes(\n  preferred: readonly (number | null)[],\n  minimums: readonly number[],\n  maximums: readonly number[],\n): number[] {\n  const unresolvedIndexes = preferred.flatMap((value, index) => (value == null ? [index] : []));\n  const specifiedTotal = sum(preferred.flatMap((value) => (value == null ? [] : [value])));\n\n  let sizes: number[];\n  if (preferred.every((value) => value == null)) {\n    const equalSize = 100 / preferred.length;\n    sizes = preferred.map(() => equalSize);\n  } else {\n    const share = unresolvedIndexes.length\n      ? Math.max(100 - specifiedTotal, 0) / unresolvedIndexes.length\n      : 0;\n    sizes = preferred.map((value) => value ?? share);\n  }\n\n  sizes = sizes.map((size, index) => clamp(size, minimums[index], maximums[index]));\n  sizes = rebalanceSizes(sizes, minimums, maximums);\n\n  return sizes.map((size) => roundPercentage(size));\n}\n\nfunction rebalanceSizes(\n  sizes: readonly number[],\n  minimums: readonly number[],\n  maximums: readonly number[],\n): number[] {\n  const next = [...sizes];\n\n  for (let iteration = 0; iteration < next.length * 4; iteration += 1) {\n    const difference = roundPercentage(100 - sum(next));\n    if (Math.abs(difference) <= 0.001) {\n      return next;\n    }\n\n    const adjustableIndexes = next.flatMap((size, index) => {\n      const room = difference > 0 ? maximums[index] - size : size - minimums[index];\n      return room > 0.001 ? [index] : [];\n    });\n\n    if (!adjustableIndexes.length) {\n      return next;\n    }\n\n    const perPanelDelta = difference / adjustableIndexes.length;\n    adjustableIndexes.forEach((index) => {\n      next[index] = clamp(next[index] + perPanelDelta, minimums[index], maximums[index]);\n    });\n  }\n\n  return next;\n}\n\nfunction toAriaValue(value: number | undefined): string | null {\n  return value == null ? null : String(Math.round(value));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}