{
  "version": 3,
  "sources": ["../src/CursorTrailState.ts", "../src/CursorTrailRenderer.ts", "../../../src/common/Lifecycle.ts", "../src/CursorTrailAddon.ts"],
  "sourcesContent": ["/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICursorEdges } from './types';\n\n/**\n * CursorTrailState manages the four corner positions and opacity for the\n * cursor trail animation, implementing kitty's four-corner exponential\n * decay algorithm.\n *\n * The trail uses four corners that chase the cursor. Each corner's decay\n * speed is dynamically modulated: corners whose movement aligns with their\n * position relative to the cursor center chase faster (leading corners),\n * while corners moving against their position lag behind (trailing corners).\n * This creates an elastic \"stretch\" effect.\n */\nexport class CursorTrailState {\n  // Four corners chasing the cursor: 0=TL, 1=TR, 2=BR, 3=BL\n  private readonly _cornerX = new Float64Array(4);\n  private readonly _cornerY = new Float64Array(4);\n\n  // Current trail opacity\n  private _opacity = 0;\n\n  // Whether the trail needs to be rendered this frame (with hysteresis,\n  // keeping rendering one extra frame after corners settle to avoid flicker)\n  private _needsRender = false;\n\n  // Whether this is the first update frame\n  private _isFirstFrame = true;\n\n  // Whether the trail was active in the previous frame (non-hysteresis).\n  // Used for start threshold guard: once the trail starts, threshold no\n  // longer applies until it fully settles.\n  private _wasActive = false;\n\n  /**\n   * The current corner positions.\n   */\n  public get corners(): { x: Float64Array; y: Float64Array } {\n    return { x: this._cornerX, y: this._cornerY };\n  }\n\n  /**\n   * The current trail opacity.\n   */\n  public get opacity(): number {\n    return this._opacity;\n  }\n\n  /**\n   * Whether the trail needs rendering this frame.\n   */\n  public get needsRender(): boolean {\n    return this._needsRender;\n  }\n\n  /**\n   * Update the trail state for one animation frame.\n   *\n   * @param dt - Delta time in seconds since the last frame.\n   * @param cursorEdges - The current cursor edges in pixel coordinates.\n   * @param cellWidth - The width of a single cell in CSS pixels.\n   * @param decayFast - Fast decay time in seconds (leading corners).\n   * @param decaySlow - Slow decay time in seconds (trailing corners).\n   * @param startThreshold - Minimum cursor movement in cells to activate the trail.\n   * @param isCursorVisible - Whether the terminal cursor is currently visible.\n   * @param maxOpacity - The maximum trail opacity.\n   */\n  public update(\n    dt: number,\n    cursorEdges: ICursorEdges,\n    cellWidth: number,\n    decayFast: number,\n    decaySlow: number,\n    startThreshold: number,\n    isCursorVisible: boolean,\n    maxOpacity: number\n  ): void {\n    // Target cursor corners: [TL, TR, BR, BL]\n    const targetX = [cursorEdges.left, cursorEdges.right, cursorEdges.right, cursorEdges.left];\n    const targetY = [cursorEdges.top, cursorEdges.top, cursorEdges.bottom, cursorEdges.bottom];\n\n    // Cursor center\n    const centerX = (cursorEdges.left + cursorEdges.right) / 2;\n    const centerY = (cursorEdges.top + cursorEdges.bottom) / 2;\n\n    if (this._isFirstFrame) {\n      for (let i = 0; i < 4; i++) {\n        this._cornerX[i] = targetX[i];\n        this._cornerY[i] = targetY[i];\n      }\n      this._opacity = isCursorVisible ? maxOpacity : 0;\n      this._isFirstFrame = false;\n      this._needsRender = false;\n      this._wasActive = false;\n      return;\n    }\n\n    // Start threshold (kitty's should_skip_cursor_trail_update):\n    // Only applies when the trail hasn't started yet (!_wasActive).\n    // Checks corner[0] (TL in xterm order) distance to its target in cell units.\n    if (!this._wasActive && startThreshold > 0) {\n      const cellDx = Math.round(Math.abs(this._cornerX[0] - targetX[0]) / cellWidth);\n      const cellDy = Math.round(Math.abs(this._cornerY[0] - targetY[0]) / cellWidth);\n      if (cellDx + cellDy <= startThreshold) {\n        for (let i = 0; i < 4; i++) {\n          this._cornerX[i] = targetX[i];\n          this._cornerY[i] = targetY[i];\n        }\n        this._needsRender = false;\n        this._wasActive = false;\n        this._updateOpacity(dt, isCursorVisible, maxOpacity);\n        return;\n      }\n    }\n\n    // Cursor diagonal half, used to normalize kitty-style dot product\n    const cursorDiag2 = Math.sqrt(\n      (cursorEdges.right - cursorEdges.left) ** 2 +\n      (cursorEdges.bottom - cursorEdges.top) ** 2\n    ) / 2;\n\n    // Compute dx, dy, and kitty-style dot for each corner\n    const dx: number[] = [0, 0, 0, 0];\n    const dy: number[] = [0, 0, 0, 0];\n    const dot: number[] = [0, 0, 0, 0];\n\n    for (let i = 0; i < 4; i++) {\n      dx[i] = targetX[i] - this._cornerX[i];\n      dy[i] = targetY[i] - this._cornerY[i];\n      const dist = Math.sqrt(dx[i] * dx[i] + dy[i] * dy[i]);\n\n      if (dist < 1e-6) {\n        dx[i] = 0;\n        dy[i] = 0;\n        dot[i] = 0;\n      } else {\n        // Kitty-style dot product:\n        //   (corner\u2192target) \u00B7 (center\u2192target_corner) / cursor_diag_2 / |corner\u2192target|\n        // This measures how aligned each corner's movement is with its position\n        // relative to the cursor center. Leading corners (ahead of movement) get\n        // positive dot \u2192 fast decay. Trailing corners get negative dot \u2192 slow decay.\n        dot[i] = (\n          dx[i] * (targetX[i] - centerX) +\n          dy[i] * (targetY[i] - centerY)\n        ) / (cursorDiag2 * dist);\n      }\n    }\n\n    // Find min/max dot across all corners (kitty cross-corner normalization)\n    let minDot = Infinity;\n    let maxDot = -Infinity;\n    for (let i = 0; i < 4; i++) {\n      if (dx[i] !== 0 || dy[i] !== 0) {\n        minDot = Math.min(minDot, dot[i]);\n        maxDot = Math.max(maxDot, dot[i]);\n      }\n    }\n\n    // Apply decay per corner\n    let allClose = true;\n    const snapPx = 0.5;\n\n    for (let i = 0; i < 4; i++) {\n      if (dx[i] === 0 && dy[i] === 0) {\n        continue;\n      }\n\n      const dist = Math.sqrt(dx[i] * dx[i] + dy[i] * dy[i]);\n      if (dist < snapPx) {\n        this._cornerX[i] = targetX[i];\n        this._cornerY[i] = targetY[i];\n        continue;\n      }\n\n      allClose = false;\n\n      // Kitty-style decay: normalize dot relative to spread across all corners.\n      // corner with max_dot \u2192 fastest decay (decay_fast)\n      // corner with min_dot \u2192 slowest decay (decay_slow)\n      let decay: number;\n      if (minDot === maxDot) {\n        decay = decaySlow;\n      } else {\n        decay = decaySlow + (decayFast - decaySlow) * (dot[i] - minDot) / (maxDot - minDot);\n      }\n\n      const step = 1.0 - Math.pow(2, -10.0 * dt / decay);\n      this._cornerX[i] += dx[i] * step;\n      this._cornerY[i] += dy[i] * step;\n    }\n\n    // Kitty-style needs_render hysteresis: keep rendering for one extra frame\n    // after corners settle to prevent flickering at the threshold boundary\n    this._needsRender = !allClose || this._wasActive;\n    this._wasActive = !allClose;\n\n    this._updateOpacity(dt, isCursorVisible, maxOpacity);\n  }\n\n  private _updateOpacity(dt: number, isCursorVisible: boolean, maxOpacity: number): void {\n    const fadeSpeed = 10;\n    const factor = 1 - Math.exp(-fadeSpeed * dt);\n    const target = isCursorVisible ? maxOpacity : 0;\n    this._opacity += (target - this._opacity) * factor;\n  }\n}\n", "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal } from '@xterm/xterm';\nimport type { ICursorEdges } from './types';\n\n/**\n * CursorTrailRenderer manages the canvas overlay and draws the cursor trail.\n */\nexport class CursorTrailRenderer {\n  private _canvas: HTMLCanvasElement | undefined;\n  private _ctx: CanvasRenderingContext2D | undefined;\n  private _document: Document;\n  private _terminal: Terminal;\n\n  constructor(terminal: Terminal) {\n    this._terminal = terminal;\n    this._document = this._getDocument();\n    this._ensureCanvas();\n  }\n\n  /**\n   * Resize the canvas to match the terminal dimensions.\n   */\n  public resize(): void {\n    if (!this._terminal.dimensions) {\n      return;\n    }\n    this._ensureCanvas();\n    if (this._canvas) {\n      this._canvas.width = this._terminal.dimensions.css.canvas.width;\n      this._canvas.height = this._terminal.dimensions.css.canvas.height;\n    }\n  }\n\n  /**\n   * Draw the cursor trail for the current frame.\n   */\n  public draw(\n    corners: { x: Float64Array; y: Float64Array },\n    cursorEdges: ICursorEdges,\n    color: string,\n    opacity: number\n  ): void {\n    if (!this._ctx || opacity < 0.005) {\n      return;\n    }\n\n    const ctx = this._ctx;\n    const canvas = this._canvas;\n    if (!canvas) {\n      return;\n    }\n\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n    const rgba = this._parseColor(color);\n\n    ctx.beginPath();\n\n    // Outer trail quad (clockwise winding)\n    ctx.moveTo(corners.x[0], corners.y[0]);\n    ctx.lineTo(corners.x[1], corners.y[1]);\n    ctx.lineTo(corners.x[2], corners.y[2]);\n    ctx.lineTo(corners.x[3], corners.y[3]);\n    ctx.closePath();\n\n    // Inner cursor cutout (reverse winding for evenodd hole)\n    ctx.moveTo(cursorEdges.right, cursorEdges.top);\n    ctx.lineTo(cursorEdges.left, cursorEdges.top);\n    ctx.lineTo(cursorEdges.left, cursorEdges.bottom);\n    ctx.lineTo(cursorEdges.right, cursorEdges.bottom);\n    ctx.closePath();\n\n    ctx.fillStyle = `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${opacity})`;\n    ctx.fill('evenodd');\n  }\n\n  /**\n   * Clear the trail canvas.\n   */\n  public clear(): void {\n    if (!this._ctx || !this._canvas) {\n      return;\n    }\n    this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n  }\n\n  /**\n   * Remove the canvas and dispose resources.\n   */\n  public dispose(): void {\n    this._canvas?.remove();\n    this._canvas = undefined;\n    this._ctx = undefined;\n  }\n\n  private _ensureCanvas(): void {\n    if (this._canvas) {\n      return;\n    }\n\n    const screenElement = (this._terminal as any)._core?.screenElement;\n    if (!screenElement || !this._terminal.dimensions) {\n      return;\n    }\n\n    const canvas = this._document.createElement('canvas');\n    canvas.width = this._terminal.dimensions.css.canvas.width;\n    canvas.height = this._terminal.dimensions.css.canvas.height;\n    canvas.style.position = 'absolute';\n    canvas.style.top = '0';\n    canvas.style.left = '0';\n    canvas.style.pointerEvents = 'none';\n    canvas.style.zIndex = '0';\n\n    // Use isolation on the screen element to create a stacking context,\n    // matching the pattern used by the image addon.\n    screenElement.style.isolation = 'isolate';\n    screenElement.appendChild(canvas);\n\n    const ctx = canvas.getContext('2d', { alpha: true });\n    if (!ctx) {\n      canvas.remove();\n      return;\n    }\n\n    this._canvas = canvas;\n    this._ctx = ctx;\n  }\n\n  private _getDocument(): Document {\n    try {\n      return (this._terminal as any)._core?.document ?? document;\n    } catch {\n      return document;\n    }\n  }\n\n  private _parseColor(color: string): { r: number; g: number; b: number } {\n    if (color.startsWith('#')) {\n      const hex = color.slice(1);\n      if (hex.length === 3) {\n        return {\n          r: parseInt(hex[0] + hex[0], 16),\n          g: parseInt(hex[1] + hex[1], 16),\n          b: parseInt(hex[2] + hex[2], 16)\n        };\n      }\n      if (hex.length === 6) {\n        return {\n          r: parseInt(hex.slice(0, 2), 16),\n          g: parseInt(hex.slice(2, 4), 16),\n          b: parseInt(hex.slice(4, 6), 16)\n        };\n      }\n    }\n    // Fallback: light gray\n    return { r: 204, g: 204, b: 204 };\n  }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n  dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n  return { dispose: fn };\n}\n\nexport function dispose<T extends IDisposable>(disposable: T): T;\nexport function dispose<T extends IDisposable>(disposable: T | undefined): T | undefined;\nexport function dispose<T extends IDisposable>(disposables: T[]): T[];\nexport function dispose<T extends IDisposable>(arg: T | T[] | undefined): T | T[] | undefined {\n  if (!arg) {\n    return arg;\n  }\n  if (Array.isArray(arg)) {\n    for (const d of arg) {\n      d.dispose();\n    }\n    return [];\n  }\n  arg.dispose();\n  return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n  return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n  private readonly _disposables = new Set<IDisposable>();\n  private _isDisposed = false;\n\n  public get isDisposed(): boolean {\n    return this._isDisposed;\n  }\n\n  public add<T extends IDisposable>(o: T): T {\n    if (this._isDisposed) {\n      o.dispose();\n    } else {\n      this._disposables.add(o);\n    }\n    return o;\n  }\n\n  public dispose(): void {\n    if (this._isDisposed) {\n      return;\n    }\n    this._isDisposed = true;\n    for (const d of this._disposables) {\n      d.dispose();\n    }\n    this._disposables.clear();\n  }\n\n  public clear(): void {\n    for (const d of this._disposables) {\n      d.dispose();\n    }\n    this._disposables.clear();\n  }\n}\n\nexport abstract class Disposable implements IDisposable {\n  public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n  protected readonly _store = new DisposableStore();\n\n  public dispose(): void {\n    this._store.dispose();\n  }\n\n  protected _register<T extends IDisposable>(o: T): T {\n    return this._store.add(o);\n  }\n}\n\nexport class MutableDisposable<T extends IDisposable> implements IDisposable {\n  private _value: T | undefined;\n  private _isDisposed = false;\n\n  public get value(): T | undefined {\n    return this._isDisposed ? undefined : this._value;\n  }\n\n  public set value(value: T | undefined) {\n    if (this._isDisposed || value === this._value) {\n      return;\n    }\n    this._value?.dispose();\n    this._value = value;\n  }\n\n  public clear(): void {\n    this.value = undefined;\n  }\n\n  public dispose(): void {\n    this._isDisposed = true;\n    this._value?.dispose();\n    this._value = undefined;\n  }\n}\n", "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ICursorTrailAddonOptions, ICursorTrailAddonApi, ICursorEdges, CursorShape } from './types';\nimport { CursorTrailState } from './CursorTrailState';\nimport { CursorTrailRenderer } from './CursorTrailRenderer';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\n/**\n * CursorTrailAddon implements a kitty-style cursor trail effect for xterm.js.\n *\n * The trail uses a four-corner exponential decay animation where each corner\n * chases its corresponding cursor edge. The decay speed is dynamically modulated\n * by a dot product of the movement direction so leading corners chase faster\n * and trailing corners lag behind, creating a smooth elastic trail.\n */\nexport class CursorTrailAddon extends Disposable implements ITerminalAddon, ICursorTrailAddonApi {\n  private _terminal: Terminal | undefined;\n  private _renderer: CursorTrailRenderer | undefined;\n  private _state: CursorTrailState | undefined;\n  private _animationFrame: number | undefined;\n  private _lastTime = 0;\n  private _options: Required<ICursorTrailAddonOptions>;\n\n  constructor(options?: ICursorTrailAddonOptions) {\n    super();\n    this._options = {\n      enabled: options?.enabled ?? true,\n      trailColor: options?.trailColor ?? '#cccccc',\n      trailOpacity: options?.trailOpacity ?? 0.5,\n      decayFast: options?.decayFast ?? 0.1,\n      decaySlow: options?.decaySlow ?? 0.3,\n      startThreshold: options?.startThreshold ?? 1\n    };\n  }\n\n  public get enabled(): boolean {\n    return this._options.enabled;\n  }\n\n  public set enabled(value: boolean) {\n    this._options.enabled = value;\n    if (value) {\n      this._startAnimation();\n    } else {\n      this._cancelAnimation();\n      this._renderer?.clear();\n    }\n  }\n\n  public get trailColor(): string {\n    return this._options.trailColor;\n  }\n\n  public set trailColor(value: string) {\n    this._options.trailColor = value;\n  }\n\n  public get trailOpacity(): number {\n    return this._options.trailOpacity;\n  }\n\n  public set trailOpacity(value: number) {\n    this._options.trailOpacity = Math.max(0, Math.min(1, value));\n  }\n\n  public get decayFast(): number {\n    return this._options.decayFast;\n  }\n\n  public set decayFast(value: number) {\n    this._options.decayFast = Math.max(0.001, value);\n  }\n\n  public get decaySlow(): number {\n    return this._options.decaySlow;\n  }\n\n  public set decaySlow(value: number) {\n    this._options.decaySlow = Math.max(0.001, value);\n  }\n\n  public get startThreshold(): number {\n    return this._options.startThreshold;\n  }\n\n  public set startThreshold(value: number) {\n    this._options.startThreshold = Math.max(0, value);\n  }\n\n  public activate(terminal: Terminal): void {\n    this._terminal = terminal;\n    this._renderer = new CursorTrailRenderer(terminal);\n    this._state = new CursorTrailState();\n    this._lastTime = performance.now();\n\n    this._register(this._terminal.onResize(() => {\n      this._renderer?.resize();\n    }));\n\n    this._register(toDisposable(() => {\n      this._cancelAnimation();\n      this._renderer?.dispose();\n    }));\n\n    if (this._options.enabled) {\n      this._startAnimation();\n    }\n  }\n\n  public dispose(): void {\n    this._cancelAnimation();\n    super.dispose();\n  }\n\n  private _cancelAnimation(): void {\n    if (this._animationFrame !== undefined) {\n      cancelAnimationFrame(this._animationFrame);\n      this._animationFrame = undefined;\n    }\n  }\n\n  private _startAnimation(): void {\n    if (this._animationFrame !== undefined) {\n      return;\n    }\n\n    const loop = (time: number): void => {\n      const dt = (time - this._lastTime) / 1000;\n      this._lastTime = time;\n\n      // Skip if tab was backgrounded (dt > 1s) or dt is zero\n      if (dt > 0 && dt < 1) {\n        this._update(dt);\n      }\n\n      this._animationFrame = requestAnimationFrame(loop);\n    };\n\n    this._animationFrame = requestAnimationFrame(loop);\n  }\n\n  private _update(dt: number): void {\n    if (!this._terminal || !this._state || !this._renderer) {\n      return;\n    }\n\n    const dims = this._terminal.dimensions;\n    if (!dims || dims.css.cell.width <= 0 || dims.css.cell.height <= 0) {\n      return;\n    }\n\n    const cellW = dims.css.cell.width;\n    const cellH = dims.css.cell.height;\n\n    // Ensure canvas exists (terminal may not have been open yet)\n    this._renderer.resize();\n\n    const cursorX = this._terminal.buffer.active.cursorX;\n    const cursorY = this._terminal.buffer.active.cursorY;\n\n    const cursorStyle = this._getCursorStyle();\n    if (cursorStyle === 'none' || cursorStyle === 'outline') {\n      this._renderer.clear();\n      return;\n    }\n\n    const edges = this._computeCursorEdges(cursorX, cursorY, cursorStyle, cellW, cellH);\n    const isCursorVisible = this._getIsCursorVisible();\n\n    this._state.update(\n      dt,\n      edges,\n      cellW,\n      this._options.decayFast,\n      this._options.decaySlow,\n      this._options.startThreshold,\n      isCursorVisible,\n      this._options.trailOpacity\n    );\n\n    if (this._state.needsRender) {\n      this._renderer.draw(\n        this._state.corners,\n        edges,\n        this._options.trailColor,\n        this._state.opacity\n      );\n    } else {\n      this._renderer.clear();\n    }\n  }\n\n  private _getCursorStyle(): CursorShape {\n    // Try to get the active cursor style from the core service first.\n    // DEC private mode cursorStyle can override the options cursorStyle.\n    try {\n      const coreService = (this._terminal as any)._core?._coreService;\n      if (coreService?.decPrivateModes?.cursorStyle) {\n        return coreService.decPrivateModes.cursorStyle;\n      }\n    } catch {\n      // fall through\n    }\n    return (this._terminal!.options.cursorStyle as CursorShape) ?? 'block';\n  }\n\n  private _getIsCursorVisible(): boolean {\n    try {\n      const coreService = (this._terminal as any)._core?._coreService;\n      if (coreService?.isCursorHidden !== undefined) {\n        return !coreService.isCursorHidden;\n      }\n    } catch {\n      // fall through\n    }\n    return true;\n  }\n\n  private _computeCursorEdges(\n    cursorX: number,\n    cursorY: number,\n    style: string,\n    cellW: number,\n    cellH: number\n  ): ICursorEdges {\n    const left = cursorX * cellW;\n    const right = (cursorX + 1) * cellW;\n    const top = cursorY * cellH;\n    const bottom = (cursorY + 1) * cellH;\n\n    switch (style) {\n      case 'bar': {\n        const cursorWidth = this._terminal!.options.cursorWidth ?? 1;\n        return { left, right: left + cursorWidth, top, bottom };\n      }\n      case 'underline': {\n        // The underline cursor occupies a thin line at the bottom of the cell.\n        // We use 2px to match typical terminal underline cursor thickness.\n        const underlineHeight = 2;\n        return { left, right, top: bottom - underlineHeight, bottom };\n      }\n      default:\n        // block, outline: fill the entire cell\n        return { left, right, top, bottom };\n    }\n  }\n}\n"],
  "mappings": "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",
  "names": ["CursorTrailState", "dt", "cursorEdges", "cellWidth", "decayFast", "decaySlow", "startThreshold", "isCursorVisible", "maxOpacity", "targetX", "targetY", "centerX", "centerY", "i", "cellDx", "cellDy", "cursorDiag2", "dx", "dy", "dot", "dist", "minDot", "maxDot", "allClose", "snapPx", "decay", "step", "factor", "target", "CursorTrailRenderer", "terminal", "corners", "cursorEdges", "color", "opacity", "ctx", "canvas", "rgba", "screenElement", "hex", "toDisposable", "fn", "DisposableStore", "o", "d", "Disposable", "CursorTrailAddon", "Disposable", "options", "value", "terminal", "CursorTrailRenderer", "CursorTrailState", "toDisposable", "loop", "time", "dt", "dims", "cellW", "cellH", "cursorX", "cursorY", "cursorStyle", "edges", "isCursorVisible", "coreService", "style", "left", "right", "top", "bottom", "cursorWidth"]
}
