{"version":3,"file":"xxmachina-components-organisms-xterm.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xxmachina-components-organisms-xterm.ts"],"sourcesContent":["import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nconst URL_REGEX = /https?:\\/\\/[^\\s<>'\")\\[\\]]+/g;\nconst LOCALHOST_REGEX = /^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::\\d+)?(?:\\/|$)/;\nconst MAX_SCAN_LINES = 30;\n\n/**\n * Link provider that detects URLs spanning multiple terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinkProvider implements ILinkProvider {\n  constructor(\n    private readonly _terminal: Terminal,\n    private readonly _handler: (event: MouseEvent, uri: string) => void = (_, uri) => {\n      window.open(uri, '_blank', 'noopener');\n    },\n  ) {}\n\n  provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n    const buffer = this._terminal.buffer.active;\n\n    let startY = bufferLineNumber - 1;\n    while (startY > 0\n      && (bufferLineNumber - 1 - startY) < MAX_SCAN_LINES\n      && this._isLineContinuation(startY)\n    ) {\n      startY--;\n    }\n\n    const lineTexts: string[] = [];\n    let y = startY;\n    do {\n      const line = buffer.getLine(y);\n      if (!line) break;\n      lineTexts.push(line.translateToString(true));\n      y++;\n    } while (\n      y < buffer.length\n      && (y - startY) < MAX_SCAN_LINES\n      && this._isLineContinuation(y)\n    );\n\n    const fullText = lineTexts.join('');\n\n    URL_REGEX.lastIndex = 0;\n    let match: RegExpExecArray | null;\n    const links: ILink[] = [];\n\n    while ((match = URL_REGEX.exec(fullText)) !== null) {\n      if (LOCALHOST_REGEX.test(match[0])) continue;\n\n      const startPos = this._offsetToPos(match.index, startY, lineTexts);\n      const endPos = this._offsetToPos(match.index + match[0].length - 1, startY, lineTexts);\n      if (!startPos || !endPos) continue;\n\n      links.push({\n        text: match[0],\n        range: {\n          start: { x: startPos.x + 1, y: startPos.y + 1 },\n          end: { x: endPos.x + 1, y: endPos.y + 1 },\n        },\n        activate: (event, text) => this._handler(event, text),\n      });\n    }\n\n    callback(links.length > 0 ? links : undefined);\n  }\n\n  private _isLineContinuation(lineIdx: number): boolean {\n    const buffer = this._terminal.buffer.active;\n    const line = buffer.getLine(lineIdx);\n    if (!line) return false;\n    if (line.isWrapped) return true;\n\n    if (lineIdx === 0) return false;\n    const prevLine = buffer.getLine(lineIdx - 1);\n    if (!prevLine) return false;\n\n    const prevText = prevLine.translateToString(true);\n    const currentText = line.translateToString(true);\n    return (\n      prevText.length > 0\n      && !/\\s$/.test(prevText)\n      && currentText.length > 0\n      && !/^\\s/.test(currentText)\n    );\n  }\n\n  private _offsetToPos(\n    offset: number, startY: number, lineTexts: string[],\n  ): { x: number; y: number } | null {\n    let remaining = offset;\n    for (let i = 0; i < lineTexts.length; i++) {\n      if (remaining < lineTexts[i].length) {\n        return { x: remaining, y: startY + i };\n      }\n      remaining -= lineTexts[i].length;\n    }\n    const lastIdx = lineTexts.length - 1;\n    return { x: lineTexts[lastIdx].length, y: startY + lastIdx };\n  }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { WebLinkProvider } from './web-link.provider';\n\n/**\n * Drop-in replacement for @xterm/addon-web-links that supports\n * URLs spanning wrapped terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinksAddon implements ITerminalAddon {\n  private _linkProvider?: IDisposable;\n\n  constructor(\n    private readonly _handler?: (event: MouseEvent, uri: string) => void\n  ) {}\n\n  activate(terminal: Terminal): void {\n    this._linkProvider = terminal.registerLinkProvider(\n      new WebLinkProvider(terminal, this._handler)\n    );\n  }\n\n  dispose(): void {\n    this._linkProvider?.dispose();\n  }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface GitHubLinkActivateHandler {\n  (event: MouseEvent, issueNumber: number): void;\n}\n\nexport class GitHubLinkProvider implements ILinkProvider {\n  // #番号 形式を検出（負の先読みで数字以外が続く場合にマッチ）\n  private readonly GITHUB_ISSUE_REGEX = /(?:^|[\\s(])#(\\d+)(?!\\d)/g;\n\n  constructor(\n    private readonly _terminal: Terminal,\n    private readonly _handler: GitHubLinkActivateHandler\n  ) {}\n\n  provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n    const lineIndex = bufferLineNumber - 1;\n    const line = this._terminal.buffer.active.getLine(lineIndex);\n    if (!line) {\n      callback(undefined);\n      return;\n    }\n\n    const text = line.translateToString(true);\n    const links: ILink[] = [];\n\n    this.GITHUB_ISSUE_REGEX.lastIndex = 0;\n\n    let match: RegExpExecArray | null;\n    while ((match = this.GITHUB_ISSUE_REGEX.exec(text)) !== null) {\n      const issueNumber = parseInt(match[1], 10);\n      const fullMatch = match[0];\n      const issueRef = `#${match[1]}`;\n\n      // マッチ開始位置を計算（プレフィックス文字を除く）\n      const stringStartIndex = match.index + (fullMatch.length - issueRef.length);\n\n      const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n      const [, endX] = this._mapStrIdx(lineIndex, startX, issueRef.length);\n\n      if (startX === -1 || endX === -1) continue;\n\n      links.push({\n        text: issueRef,\n        range: {\n          start: { x: startX + 1, y: bufferLineNumber },\n          end: { x: endX, y: bufferLineNumber }\n        },\n        activate: (event) => {\n          this._handler(event, issueNumber);\n        }\n      });\n    }\n\n    callback(links.length > 0 ? links : undefined);\n  }\n\n  private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n    const buf = this._terminal.buffer.active;\n    const cell = buf.getNullCell();\n    let start = rowIndex;\n\n    while (stringIndex) {\n      const line = buf.getLine(lineIndex);\n      if (!line) return [-1, -1];\n\n      for (let i = start; i < line.length; ++i) {\n        line.getCell(i, cell);\n        const chars = cell.getChars();\n        const width = cell.getWidth();\n        if (width) {\n          stringIndex -= chars.length || 1;\n        }\n        if (stringIndex < 0) {\n          return [lineIndex, i];\n        }\n      }\n      lineIndex++;\n      start = 0;\n    }\n    return [lineIndex, start];\n  }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { GitHubLinkProvider, GitHubLinkActivateHandler } from './github-link.provider';\n\nexport class GitHubLinksAddon implements ITerminalAddon {\n  private _terminal?: Terminal;\n  private _linkProvider?: IDisposable;\n\n  constructor(\n    private readonly _handler: GitHubLinkActivateHandler\n  ) {}\n\n  activate(terminal: Terminal): void {\n    this._terminal = terminal;\n    this._linkProvider = terminal.registerLinkProvider(\n      new GitHubLinkProvider(terminal, this._handler)\n    );\n  }\n\n  dispose(): void {\n    this._linkProvider?.dispose();\n  }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface FileLinkActivateHandler {\n  (event: MouseEvent, filePath: string, line?: number, column?: number): void;\n}\n\nexport class FileLinkProvider implements ILinkProvider {\n  // ファイルパスを検出する正規表現\n  // - 絶対パス: /path/to/file.ts, /path/to/file.ts:10:5\n  // - 相対パス: ./src/file.ts, ../lib/utils.ts:20\n  // - 拡張子を持つファイル名\n  private readonly FILE_PATH_REGEX = /(?:^|[\\s'\"`(])((\\.\\.?\\/|\\/)?[\\w.@-]+(?:\\/[\\w.@-]+)*\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?)/g;\n\n  constructor(\n    private readonly _terminal: Terminal,\n    private readonly _handler: FileLinkActivateHandler\n  ) {}\n\n  provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n    // bufferLineNumber は 1-indexed、buffer.getLine() は 0-indexed を期待\n    const lineIndex = bufferLineNumber - 1;\n    const line = this._terminal.buffer.active.getLine(lineIndex);\n    if (!line) {\n      callback(undefined);\n      return;\n    }\n\n    const text = line.translateToString(true);\n    const links: ILink[] = [];\n\n    // Reset regex lastIndex\n    this.FILE_PATH_REGEX.lastIndex = 0;\n\n    let match: RegExpExecArray | null;\n    while ((match = this.FILE_PATH_REGEX.exec(text)) !== null) {\n      const filePath = match[1];\n      if (this._isLikelyFilePath(filePath) && !this._isUrl(filePath)) {\n        // 文字列インデックスから表示位置（セル位置）を計算\n        const stringStartIndex = match.index + (match[0].length - match[1].length);\n\n        // WebLinksAddon と同じ方式で位置をマッピング（0-indexed lineIndexを渡す）\n        const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n        const [, endX] = this._mapStrIdx(lineIndex, startX, filePath.length);\n\n        if (startX === -1 || endX === -1) {\n          continue;\n        }\n\n        links.push({\n          text: filePath,\n          range: {\n            // IBufferCellPosition は 1-indexed\n            start: { x: startX + 1, y: bufferLineNumber },\n            end: { x: endX, y: bufferLineNumber }\n          },\n          activate: (event, linkText) => {\n            const parsed = this._parseFilePath(linkText);\n            this._handler(event, parsed.path, parsed.line, parsed.column);\n          }\n        });\n      }\n    }\n\n    callback(links.length > 0 ? links : undefined);\n  }\n\n  /**\n   * Map a string index back to buffer positions.\n   * Returns buffer position as [lineIndex, columnIndex] 0-based,\n   * or [-1, -1] in case the lookup ran into a non-existing line.\n   * (Based on xterm.js WebLinkProvider implementation)\n   */\n  private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n    const buf = this._terminal.buffer.active;\n    const cell = buf.getNullCell();\n    let start = rowIndex;\n\n    while (stringIndex) {\n      const line = buf.getLine(lineIndex);\n      if (!line) {\n        return [-1, -1];\n      }\n      for (let i = start; i < line.length; ++i) {\n        line.getCell(i, cell);\n        const chars = cell.getChars();\n        const width = cell.getWidth();\n        if (width) {\n          stringIndex -= chars.length || 1;\n        }\n        if (stringIndex < 0) {\n          return [lineIndex, i];\n        }\n      }\n      lineIndex++;\n      start = 0;\n    }\n    return [lineIndex, start];\n  }\n\n  private _isLikelyFilePath(text: string): boolean {\n    // 拡張子を持つか確認\n    return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text);\n  }\n\n  private _isUrl(text: string): boolean {\n    // URL形式を除外\n    return /^https?:\\/\\//.test(text) || /^file:\\/\\//.test(text);\n  }\n\n  private _parseFilePath(text: string): { path: string; line?: number; column?: number } {\n    const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n    if (match) {\n      return {\n        path: match[1],\n        line: match[2] ? parseInt(match[2], 10) : undefined,\n        column: match[3] ? parseInt(match[3], 10) : undefined\n      };\n    }\n    return { path: text };\n  }\n}\n\n// Export helper functions for testing\nexport const isLikelyFilePath = (text: string): boolean => {\n  return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text) && !/^https?:\\/\\//.test(text);\n};\n\nexport const parseFilePath = (text: string): { path: string; line?: number; column?: number } => {\n  const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n  if (match) {\n    return {\n      path: match[1],\n      line: match[2] ? parseInt(match[2], 10) : undefined,\n      column: match[3] ? parseInt(match[3], 10) : undefined\n    };\n  }\n  return { path: text };\n};\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { FileLinkProvider, FileLinkActivateHandler } from './file-link.provider';\n\n/**\n * xterm.js addon for detecting and handling file path links in terminal output.\n * Similar to WebLinksAddon but for local file paths.\n *\n * Usage:\n * ```typescript\n * const fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n *   if (event.metaKey || event.ctrlKey) {\n *     // Open file in editor\n *   }\n * });\n * terminal.loadAddon(fileLinksAddon);\n * ```\n */\nexport class FileLinksAddon implements ITerminalAddon {\n  private _terminal?: Terminal;\n  private _linkProvider?: IDisposable;\n\n  constructor(\n    private readonly _handler: FileLinkActivateHandler\n  ) {}\n\n  activate(terminal: Terminal): void {\n    this._terminal = terminal;\n    this._linkProvider = terminal.registerLinkProvider(\n      new FileLinkProvider(terminal, this._handler)\n    );\n  }\n\n  dispose(): void {\n    this._linkProvider?.dispose();\n  }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\n/**\n * localhost/127.0.0.1 URLをmachina web proxy URLに変換するリンクプロバイダ。\n *\n * 変換ルール:\n *   http://localhost:4200/path → https://{serverUUID}--4200.proxy.machina.at/path\n *   http://127.0.0.1:3000/api  → https://{serverUUID}--3000.proxy.machina.at/api\n *\n * deployVersion に応じて suffix を付与:\n *   - 'pr-2464'                → https://{uuid}--{port}--pr-2464.proxy.machina.at/...\n *   - 'v19.10.0-dev.5' 等      → https://{uuid}--{port}--dev.proxy.machina.at/...\n *   - null / 'stable'          → suffix なし\n *\n * proxy iframe の SW intercept は referrer-based に変更されたため、 top window URL に\n * 余分な marker prefix を埋め込む必要はない。 iframe.src は location.pathname をそのまま継承する。\n * @see projects/@machina.at/web-proxy/src/app/services/proxy-iframe-url.ts\n */\n\nconst LOCALHOST_URL_REGEX = /https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/[^\\s<>'\")\\]]*)?/g;\n\nexport type ServerUUIDGetter = () => string | undefined;\nexport type TokenGetter = () => string | undefined;\nexport type DeployVersionGetter = () => string | null | undefined;\n\nexport interface ProxyEndpoints {\n  apiNext: string;\n  hasura: string;\n}\nexport type EndpointsGetter = () => ProxyEndpoints | undefined;\n\n/**\n * deployVersion を proxy.machina.at のサブドメイン suffix に変換。\n *\n * 変換ルール:\n * - null / 'stable'               → '' (suffix なし)\n * - 'pr-{N}'                      → '--pr-{N}'\n * - 'dev' / 'develop'             → '--dev'\n * - 'v{X.Y.Z}' / 'v{X.Y.Z-pre.N}' → '--v{X-Y-Z}[--pre-N]' (dot → dash)\n * - 'X.Y.Z' (v prefix なし)        → 同上\n * - その他                         → '' (fallback)\n */\nexport function deployVersionToHostSuffix(version: string | null | undefined): string {\n  if (!version || version === 'stable') return '';\n  if (version.startsWith('pr-')) return `--${version}`;\n  if (version === 'dev' || version === 'develop') return '--dev';\n\n  // semver format: (v)?{MAJOR}.{MINOR}.{PATCH}[-{pre}.{num}]\n  const match = version.match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([a-z]+)\\.(\\d+))?$/);\n  if (match) {\n    const [, major, minor, patch, pre, num] = match;\n    let encoded = `v${major}-${minor}-${patch}`;\n    if (pre) encoded += `-${pre}-${num}`;\n    return `--${encoded}`;\n  }\n\n  return '';\n}\n\nexport class ProxyLinkProvider implements ILinkProvider {\n  constructor(\n    private readonly _terminal: Terminal,\n    private readonly _getServerUUID: ServerUUIDGetter,\n    private readonly _getToken?: TokenGetter,\n    private readonly _handler: (event: MouseEvent, proxyUrl: string) => void = (_, url) => {\n      window.open(url, '_blank', 'noopener');\n    },\n    private readonly _getDeployVersion?: DeployVersionGetter,\n    private readonly _getEndpoints?: EndpointsGetter,\n  ) {}\n\n  provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n    const lineIndex = bufferLineNumber - 1;\n    const line = this._terminal.buffer.active.getLine(lineIndex);\n    if (!line) {\n      callback(undefined);\n      return;\n    }\n\n    const text = line.translateToString(true);\n    const links: ILink[] = [];\n\n    console.log('[proxy-link] provideLinks line', bufferLineNumber, 'text:', text.substring(0, 80));\n    LOCALHOST_URL_REGEX.lastIndex = 0;\n    let match: RegExpExecArray | null;\n\n    while ((match = LOCALHOST_URL_REGEX.exec(text)) !== null) {\n      const matchedUrl = match[0];\n      const port = match[1] || '80';\n      const path = match[2] || '/';\n\n      const startX = match.index + 1;\n      const endX = match.index + matchedUrl.length;\n\n      links.push({\n        text: matchedUrl,\n        range: {\n          start: { x: startX, y: bufferLineNumber },\n          end: { x: endX, y: bufferLineNumber },\n        },\n        // serverUUIDはクリック時にlazy評価（セッション接続後に値が入る）\n        activate: (event) => {\n          const uuid = this._getServerUUID();\n          const token = this._getToken?.();\n          const hostSuffix = deployVersionToHostSuffix(this._getDeployVersion?.());\n          // endpoints は postMessage payload (`proxy-auth-token` の `endpoints` フィールド) で送る。\n          // web-proxy 側は main.ts で bootstrapApplication 前に await し、\n          // window.__machinaProxyAuthResult に格納 → Apollo init で sync 読み出しできる。\n          const proxyUrl = uuid\n            ? `https://${uuid}--${port}${hostSuffix}.proxy.machina.at${path}`\n            : null;\n          const targetUrl = proxyUrl || matchedUrl;\n          console.log('[proxy-link] activate:', { matchedUrl, uuid, proxyUrl, targetUrl, hasToken: !!token });\n\n          if (token && proxyUrl) {\n            // postMessage方式: openerとしてwindow参照を保持\n            const proxyOrigin = new URL(proxyUrl).origin;\n            const win = window.open(targetUrl, '_blank');\n            if (win) {\n              const listener = (e: MessageEvent) => {\n                // クロスオリジン WindowProxy の === 比較は信頼できないため origin で判定\n                if (e.origin === proxyOrigin && e.data?.type === 'proxy-auth-ready') {\n                  console.log('[proxy-link] auth-ready received, sending token');\n                  const endpoints = this._getEndpoints?.();\n                  win.postMessage({ type: 'proxy-auth-token', token, endpoints }, proxyOrigin);\n                  window.removeEventListener('message', listener);\n                }\n              };\n              window.addEventListener('message', listener);\n              // 10秒後にリスナーをクリーンアップ\n              setTimeout(() => window.removeEventListener('message', listener), 10000);\n            }\n          } else {\n            this._handler(event, targetUrl);\n          }\n        },\n      });\n    }\n\n    callback(links.length > 0 ? links : undefined);\n  }\n}\n\nexport function toProxyUrl(\n  serverUUID: string,\n  localhostUrl: string,\n  deployVersion?: string | null,\n): string | null {\n  const match = localhostUrl.match(/^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/.*)?$/);\n  if (!match) return null;\n  const port = match[1] || '80';\n  const path = match[2] || '/';\n  const hostSuffix = deployVersionToHostSuffix(deployVersion);\n  return `https://${serverUUID}--${port}${hostSuffix}.proxy.machina.at${path}`;\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { ProxyLinkProvider, ServerUUIDGetter, TokenGetter, DeployVersionGetter, EndpointsGetter } from './proxy-link.provider';\n\n/**\n * xterm.js addon: localhost URLをmachina web proxyにリダイレクトするリンクを表示。\n *\n * Usage:\n * ```typescript\n * const addon = new ProxyLinksAddon(() => currentServerUUID);\n * terminal.loadAddon(addon);\n * ```\n */\nexport class ProxyLinksAddon implements ITerminalAddon {\n  private _linkProvider?: IDisposable;\n\n  constructor(\n    private readonly _getServerUUID: ServerUUIDGetter,\n    private readonly _getToken?: TokenGetter,\n    private readonly _handler?: (event: MouseEvent, proxyUrl: string) => void,\n    private readonly _getDeployVersion?: DeployVersionGetter,\n    private readonly _getEndpoints?: EndpointsGetter,\n  ) {}\n\n  activate(terminal: Terminal): void {\n    this._linkProvider = terminal.registerLinkProvider(\n      new ProxyLinkProvider(\n        terminal,\n        this._getServerUUID,\n        this._getToken,\n        this._handler,\n        this._getDeployVersion,\n        this._getEndpoints,\n      ),\n    );\n  }\n\n  dispose(): void {\n    this._linkProvider?.dispose();\n  }\n}\n","import { Directive, InjectionToken, input, inject } from '@angular/core';\nimport { _computed, InjectableComponent } from '@ng-atomic/core';\nimport { makeDI } from '@ng-atomic/common/services/ui';\n\nexport enum XtermActionId {\n  DATA_INPUT = 'xterm:data-input',\n  RESIZED = 'xterm:resized',\n  GITHUB_LINK_CLICK = 'xterm:github-link-click',\n  FILE_LINK_CLICK = 'xterm:file-link-click',\n  FOCUS_INPUT_REQUEST = 'xterm:focus-input-request',\n}\n\n/** DI token for providing serverUUID getter to ProxyLinksAddon */\nexport const XTERM_SERVER_UUID = new InjectionToken<() => string | undefined>('XTERM_SERVER_UUID');\n\n/** DI token for providing CLI token getter to ProxyLinksAddon */\nexport const XTERM_PROXY_TOKEN = new InjectionToken<() => string | undefined>('XTERM_PROXY_TOKEN');\n\n/** DI token for providing deploy version getter to ProxyLinksAddon */\nexport const XTERM_DEPLOY_VERSION = new InjectionToken<() => string | null | undefined>('XTERM_DEPLOY_VERSION');\n\n/**\n * DI token for providing API endpoints (apiNext / hasura) to ProxyLinksAddon.\n * web-proxy が opener postMessage 経由でこの値を受信して使用する (環境追従)。\n */\nexport const XTERM_PROXY_ENDPOINTS = new InjectionToken<() => { apiNext: string; hasura: string } | undefined>(\n  'XTERM_PROXY_ENDPOINTS',\n);\n\n@Directive({ standalone: true, selector: 'organisms-xterm' })\nexport class XtermOrganismStore extends InjectableComponent {\n  static readonly DI = makeDI(XtermOrganismStore, () => () => ({\n    data: '',\n    interactive: false,\n    queryResult: '',\n    useInteractiveTheme: false,\n  }), ['components', 'organisms', 'xterm']);\n\n  readonly config = XtermOrganismStore.DI.injectConfig();\n  readonly data = input<string | undefined>(undefined);\n  readonly interactive = input<boolean>(false);\n  readonly queryResult = input<string>('');\n  readonly useInteractiveTheme = input<boolean>(false);\n  readonly totalWritten = input<number>(0);\n\n  /** Injected serverUUID getter for proxy links (optional) */\n  readonly getServerUUID = inject(XTERM_SERVER_UUID, { optional: true });\n\n  /** Injected CLI token getter for proxy link auto-auth (optional) */\n  readonly getProxyToken = inject(XTERM_PROXY_TOKEN, { optional: true });\n\n  /** Injected deploy version getter for proxy URL host suffix (optional) */\n  readonly getDeployVersion = inject(XTERM_DEPLOY_VERSION, { optional: true });\n\n  /** Injected endpoints getter for opener-driven environment switching (optional) */\n  readonly getProxyEndpoints = inject(XTERM_PROXY_ENDPOINTS, { optional: true });\n\n  constructor() {\n    super();\n    XtermOrganismStore.DI.initialize(this);\n  }\n}\n","import { Component, ElementRef, AfterViewInit, OnDestroy, ChangeDetectionStrategy, viewChild, output, effect, inject, signal } from '@angular/core';\nimport { Terminal, IDisposable } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { WebLinksAddon } from './web-links.addon';\nimport { NgAtomicComponent } from '@ng-atomic/core';\nimport { GitHubLinksAddon } from './github-links.addon';\nimport { FileLinksAddon } from './file-links.addon';\nimport { ProxyLinksAddon } from './proxy-links.addon';\nimport { XtermOrganismStore, XtermActionId } from './xterm.organism.store';\n\n// ImageAddon types (loaded dynamically to avoid browser compatibility issues)\ntype ImageAddon = any;\ntype IImageAddonOptions = any;\n\n/**\n * Minimum container size required for terminal initialization.\n * Prevents issues with SR-only hidden containers (1x1 pixel) causing FitAddon problems.\n */\nconst MIN_CONTAINER_SIZE = 10;\n\n\n/** Default display-only theme (for catalog/storybook) */\nconst DISPLAY_THEME = {\n  background: '#0a0a0a',\n  foreground: '#66d9ef',\n  cursor: '#ff79c6',\n  cyan: '#8be9fd',\n  brightCyan: '#50fa7b',\n  green: '#50fa7b',\n  brightGreen: '#50fa7b',\n  magenta: '#ff79c6',\n  brightMagenta: '#ff79c6',\n  yellow: '#f1fa8c',\n  brightYellow: '#ffb86c',\n  red: '#ff5555',\n  brightRed: '#ff5555'\n};\n\n/** Interactive session theme (matches original TerminalManager) */\nconst INTERACTIVE_THEME = {\n  background: '#0a0a0a',\n  foreground: '#e0e0e0',\n  cursor: '#e0e0e0',\n  black: '#000000',\n  red: '#cd3131',\n  green: '#0dbc79',\n  yellow: '#e5e510',\n  blue: '#2472c8',\n  magenta: '#bc3fbc',\n  cyan: '#11a8cd',\n  white: '#e5e5e5',\n  brightBlack: '#666666',\n  brightRed: '#f14c4c',\n  brightGreen: '#23d18b',\n  brightYellow: '#f5f543',\n  brightBlue: '#3b8eea',\n  brightMagenta: '#d670d6',\n  brightCyan: '#29b8db',\n  brightWhite: '#e5e5e5',\n};\n\n@Component({\n  selector: 'organisms-xterm',\n  standalone: true,\n  imports: [],\n  template: `<div #container class=\"xterm-wrapper\"></div>`,\n  styleUrls: ['./xterm.organism.css', './xterm.organism.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [{\n    directive: XtermOrganismStore,\n    inputs: ['data', 'interactive', 'useInteractiveTheme', 'totalWritten'],\n  }],\n})\nexport class XtermOrganism extends NgAtomicComponent implements AfterViewInit, OnDestroy {\n  readonly container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n  protected readonly store = inject(XtermOrganismStore);\n  private readonly hostElement = inject(ElementRef<HTMLElement>);\n\n  readonly terminalReady = output<Terminal>();\n  readonly githubLinkClick = output<number>();\n\n  private terminal!: Terminal;\n  private fitAddon!: FitAddon;\n  private imageAddon!: ImageAddon;\n  private githubLinksAddon!: GitHubLinksAddon;\n  private fileLinksAddon!: FileLinksAddon;\n  private resizeObserver?: ResizeObserver;\n  private lastDataLength = 0;\n  /** Tracks how many bytes have been processed (for totalWritten-based diff detection) */\n  private lastProcessedLength = 0;\n  private readonly terminalInitialized = signal(false);\n  /** Tracks if initialization was skipped due to container being too small */\n  private initSkippedDueToSize = false;\n  /** IDisposable refs for explicit cleanup (prevents memory leaks on mobile) */\n  private readonly disposables: IDisposable[] = [];\n  /** Timer refs for cleanup in ngOnDestroy */\n  private stableTimer: ReturnType<typeof setTimeout> | null = null;\n  private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n  private fallbackTimer: ReturnType<typeof setTimeout> | null = null;\n\n  constructor() {\n    super();\n\n    // Watch for data input changes (with totalWritten support for buffer overflow handling)\n    effect(() => {\n      const isInitialized = this.terminalInitialized();\n      const rawData = this.store.data();\n      const totalWritten = this.store.totalWritten();\n      const dataIsFunction = typeof rawData === 'function';\n      const data = dataIsFunction ? (rawData as any)() : rawData;\n      if (!isInitialized) return;\n\n      // Use totalWritten-based logic when available (handles buffer overflow correctly)\n      if (totalWritten > 0) {\n        this.writeDataWithTotalWritten(data ?? '', totalWritten);\n      } else {\n        // Legacy fallback for backward compatibility\n        this.writeDataToTerminal(data);\n      }\n    });\n\n    // Watch for interactive mode changes and update host class\n    // Note: Using effect with classList because @HostBinding doesn't work with OnPush + signals\n    effect(() => {\n      const isInteractive = this.store.interactive();\n      if (isInteractive) {\n        this.hostElement.nativeElement.classList.add('interactive');\n      } else {\n        this.hostElement.nativeElement.classList.remove('interactive');\n      }\n    });\n\n    // Watch for interactive mode changes and update cursor blink\n    effect(() => {\n      const isInitialized = this.terminalInitialized();\n      const isInteractive = this.store.interactive();\n      if (!isInitialized || !this.terminal) return;\n\n      // Update cursor blink setting\n      this.terminal.options.cursorBlink = isInteractive;\n    });\n  }\n\n  private writeDataToTerminal(data: string | undefined): void {\n    // Guard against undefined/null/empty data\n    // Empty string is treated as \"no data yet\" (from startWith('') in streams)\n    // Explicit reset should use the public clear() or reset() methods\n    if (data === undefined || data === null || data === '') {\n      return;\n    }\n    // O(1) length comparison instead of O(n) startsWith\n    if (data.length >= this.lastDataLength) {\n      const newPart = data.slice(this.lastDataLength);\n      if (newPart) {\n        this.terminal.write(newPart);\n      }\n      this.lastDataLength = data.length;\n    } else {\n      // Data got shorter = reset occurred\n      this.terminal.reset();\n      this.terminal.write(data);\n      this.lastDataLength = data.length;\n    }\n  }\n\n  /**\n   * Write data using totalWritten for accurate diff detection.\n   * This method handles buffer overflow scenarios correctly.\n   * When newBytesCount >= data.length, performs a full redraw with terminal.reset()\n   * to prevent stale output from previous sessions remaining on screen.\n   * @param data The current buffer content\n   * @param totalWritten Total bytes written to the buffer (cumulative)\n   */\n  private writeDataWithTotalWritten(data: string, totalWritten: number): void {\n    if (!data) return;\n\n    const newBytesCount = totalWritten - this.lastProcessedLength;\n\n    if (newBytesCount <= 0) {\n      if (totalWritten < this.lastProcessedLength) {\n        // Reset detected (totalWritten decreased)\n        this.terminal.reset();\n        this.terminal.write(data);\n        this.lastProcessedLength = totalWritten;\n      }\n      return;\n    }\n\n    // Full redraw needed: first render, session switch, or buffer overflow\n    // (newBytesCount >= data.length means the diff covers the entire buffer or more)\n    if (newBytesCount >= data.length) {\n      this.terminal.reset();\n      this.terminal.write(data);\n    } else {\n      // Normal incremental write - extract only new content\n      const newContent = data.slice(-newBytesCount);\n      if (newContent) {\n        this.terminal.write(newContent);\n      }\n    }\n    this.lastProcessedLength = totalWritten;\n  }\n\n  ngAfterViewInit() {\n    const containerElement = this.container().nativeElement;\n\n    // Guard against initialization in very small containers (e.g., SR-only 1x1 pixel hidden elements)\n    // This prevents FitAddon issues and excessive processing in hidden query sections\n    if (containerElement.offsetWidth < MIN_CONTAINER_SIZE || containerElement.offsetHeight < MIN_CONTAINER_SIZE) {\n      this.initSkippedDueToSize = true;\n      // Retry initialization when container reaches minimum size (e.g., after CSS/layout settles)\n      this.resizeObserver = new ResizeObserver(() => {\n        if (containerElement.offsetWidth >= MIN_CONTAINER_SIZE && containerElement.offsetHeight >= MIN_CONTAINER_SIZE) {\n          this.resizeObserver?.disconnect();\n          this.resizeObserver = undefined;\n          this.initSkippedDueToSize = false;\n          this.initializeTerminal(containerElement);\n        }\n      });\n      this.resizeObserver.observe(containerElement);\n      return;\n    }\n\n    this.initializeTerminal(containerElement);\n  }\n\n  private initializeTerminal(containerElement: HTMLDivElement): void {\n    const isInteractive = this.store.interactive();\n    const useInteractiveTheme = this.store.useInteractiveTheme() || isInteractive;\n\n    this.terminal = new Terminal({\n      theme: useInteractiveTheme ? INTERACTIVE_THEME : DISPLAY_THEME,\n      scrollback: isInteractive ? 10000 : 1000,\n      fontSize: useInteractiveTheme ? 14 : 12,\n      fontFamily: '\"FiraCode Nerd Font\", \"Fira Code\", \"SF Mono\", \"Cascadia Code\", \"Consolas\", \"Courier New\", monospace',\n      lineHeight: 1.2,\n      allowTransparency: false,\n      disableStdin: !isInteractive,\n      cursorBlink: isInteractive,\n      cursorStyle: 'block',\n      convertEol: true,\n      rows: 24\n    });\n\n    this.fitAddon = new FitAddon();\n    this.terminal.loadAddon(this.fitAddon);\n    this.terminal.loadAddon(new WebLinksAddon());\n\n    // ImageAddon for displaying inline images (SIXEL and iTerm2 IIP support)\n    // Loaded dynamically to avoid browser compatibility issues\n    this.loadImageAddon();\n\n    this.githubLinksAddon = new GitHubLinksAddon((event, issueNumber) => {\n      this.dispatch({ id: XtermActionId.GITHUB_LINK_CLICK, payload: issueNumber });\n    });\n    this.terminal.loadAddon(this.githubLinksAddon);\n\n    this.fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n      if (event.metaKey || event.ctrlKey) {\n        this.dispatch({ id: XtermActionId.FILE_LINK_CLICK, payload: { filePath, line, column } });\n      }\n    });\n    this.terminal.loadAddon(this.fileLinksAddon);\n\n    // ProxyLinksAddon: localhost → proxy.machina.at redirect (always loaded)\n    this.terminal.loadAddon(new ProxyLinksAddon(\n      this.store.getServerUUID ?? (() => undefined),\n      this.store.getProxyToken ?? undefined,\n      undefined,\n      this.store.getDeployVersion ?? undefined,\n      this.store.getProxyEndpoints ?? undefined,\n    ));\n\n    this.terminal.open(containerElement);\n\n    // Setup event handlers for interactive mode\n    if (isInteractive) {\n      this.disposables.push(\n        this.terminal.onData((data) => {\n          this.dispatch({ id: XtermActionId.DATA_INPUT, payload: data });\n        }),\n        this.terminal.onResize(({ cols, rows }) => this.dispatch({ id: XtermActionId.RESIZED, payload: { cols, rows } })),\n      );\n    }\n\n    // Use ResizeObserver with debounce to wait for container size to stabilize\n    // (CSS transitions take 300-500ms, so fixed setTimeout(100ms) is too early)\n    this.resizeObserver = new ResizeObserver(() => {\n      try {\n        if (!this.terminalInitialized()) {\n          this.fitAddon.fit();\n          // Debounce: wait for container to stop changing before initializing\n          if (this.stableTimer) clearTimeout(this.stableTimer);\n          this.stableTimer = setTimeout(() => {\n            this.stableTimer = null;\n            this.fitAddon.fit();\n            this.markInitialized(isInteractive);\n          }, 150);\n        } else if (isInteractive) {\n          // Debounce resize to wait for CSS transitions to complete (300ms)\n          if (this.resizeTimer) clearTimeout(this.resizeTimer);\n          this.resizeTimer = setTimeout(() => {\n            this.resizeTimer = null;\n            this.fitAddon.fit();\n            this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n          }, 300);\n        }\n      } catch (e) {\n        console.warn('Failed to fit terminal:', e);\n      }\n    });\n    this.resizeObserver.observe(containerElement);\n\n    // Fallback: initialize after 500ms if ResizeObserver hasn't triggered stable state\n    this.fallbackTimer = setTimeout(() => {\n      this.fallbackTimer = null;\n      if (!this.terminalInitialized()) {\n        this.fitAddon.fit();\n        this.markInitialized(isInteractive);\n      }\n    }, 500);\n  }\n\n  ngOnDestroy() {\n    // Clear pending timers to prevent post-destroy callbacks\n    if (this.stableTimer) clearTimeout(this.stableTimer);\n    if (this.resizeTimer) clearTimeout(this.resizeTimer);\n    if (this.fallbackTimer) clearTimeout(this.fallbackTimer);\n\n    this.resizeObserver?.disconnect();\n\n    // Dispose xterm event handlers (onData, onResize) to prevent memory leaks\n    for (const d of this.disposables) d.dispose();\n    this.disposables.length = 0;\n\n    // Remove terminal instance from window for E2E testing cleanup\n    if (typeof window !== 'undefined' && (window as any).__XTERM_INSTANCES__) {\n      const instances = (window as any).__XTERM_INSTANCES__ as Terminal[];\n      const index = instances.indexOf(this.terminal);\n      if (index !== -1) {\n        instances.splice(index, 1);\n      }\n    }\n\n    this.terminal?.dispose();\n  }\n\n  private markInitialized(isInteractive: boolean): void {\n    if (this.terminalInitialized()) return;\n    this.terminalInitialized.set(true);\n    this.terminalReady.emit(this.terminal);\n\n    // Expose terminal instance for E2E testing (only in development/test environments)\n    if (typeof window !== 'undefined') {\n      (window as any).__XTERM_INSTANCES__ = (window as any).__XTERM_INSTANCES__ || [];\n      (window as any).__XTERM_INSTANCES__.push(this.terminal);\n    }\n\n    // Dispatch initial RESIZED for interactive mode\n    if (isInteractive) {\n      this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n    }\n  }\n\n  private async loadImageAddon(): Promise<void> {\n    try {\n      const { ImageAddon } = await import('@xterm/addon-image');\n      const imageAddonOptions = {\n        enableSizeReports: true,\n        sixelSupport: true,\n        sixelScrolling: true,\n        sixelPaletteLimit: 256,\n      };\n      this.imageAddon = new ImageAddon(imageAddonOptions);\n      this.terminal.loadAddon(this.imageAddon);\n    } catch (e) {\n      // ImageAddon not available in browser environment - this is expected\n      console.debug('ImageAddon not available:', e);\n    }\n  }\n\n  // Public API\n  public write(text: string): void {\n    this.terminal?.write(text);\n  }\n\n  public writeln(text: string): void {\n    this.terminal?.writeln(text);\n  }\n\n  public clear(): void {\n    this.terminal?.clear();\n  }\n\n  public scrollToBottom(): void {\n    this.terminal?.scrollToBottom();\n  }\n\n  public scrollToTop(): void {\n    this.terminal?.scrollToTop();\n  }\n\n  public scrollLines(lines: number): void {\n    this.terminal?.scrollLines(lines);\n  }\n\n  public fit(): void {\n    this.fitAddon?.fit();\n    // Only dispatch RESIZED after initialization to prevent sending wrong cols/rows\n    // during CSS transitions (SessionTemplateV2.ngAfterViewInit calls fit() before layout stabilizes)\n    if (this.terminalInitialized() && this.terminal) {\n      this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n    }\n  }\n\n  public get cols(): number {\n    return this.terminal?.cols ?? 80;\n  }\n\n  public get rows(): number {\n    return this.terminal?.rows ?? 24;\n  }\n\n  public getTerminal(): Terminal | undefined {\n    // Only expose terminal after fitAddon.fit() has run (terminalInitialized === true)\n    return this.terminalInitialized() ? this.terminal : undefined;\n  }\n\n  /**\n   * Display an inline image using iTerm2's Inline Image Protocol\n   * @param base64Data Base64 encoded image data (PNG, JPEG, etc.)\n   * @param options Image display options\n   */\n  public displayImage(base64Data: string, options?: {\n    width?: string | number;    // e.g., '50%', 'auto', or cell count\n    height?: string | number;   // e.g., '10', 'auto', or cell count\n    preserveAspectRatio?: boolean;\n    name?: string;\n  }): void {\n    if (!this.terminal) return;\n\n    const args: string[] = ['inline=1'];\n\n    if (options?.width) {\n      args.push(`width=${options.width}`);\n    }\n    if (options?.height) {\n      args.push(`height=${options.height}`);\n    }\n    if (options?.preserveAspectRatio !== undefined) {\n      args.push(`preserveAspectRatio=${options.preserveAspectRatio ? 1 : 0}`);\n    }\n    if (options?.name) {\n      args.push(`name=${btoa(options.name)}`);\n    }\n\n    // iTerm2 Inline Image Protocol escape sequence\n    const escapeSequence = `\\x1b]1337;File=${args.join(';')}:${base64Data}\\x07`;\n    this.terminal.write(escapeSequence);\n  }\n\n  /**\n   * Get the ImageAddon instance for advanced image operations\n   */\n  public getImageAddon(): ImageAddon | undefined {\n    return this.imageAddon;\n  }\n}\n","/**\n * Utility functions for displaying images in xterm using SIXEL format\n */\n\nexport interface SvgToSixelOptions {\n  width?: number;\n  height?: number;\n  backgroundColor?: string;\n  textColor?: string;\n}\n\n/**\n * Generate ASCII art text using figlet\n * Note: figlet is loaded dynamically as it's not available in browser environments\n */\nexport async function generateAsciiArt(text: string, font = 'ANSI Shadow'): Promise<string> {\n  try {\n    const figlet = await import('figlet');\n    return new Promise((resolve, reject) => {\n      figlet.default.text(text, { font: font as any }, (err, result) => {\n        if (err) {\n          reject(err);\n          return;\n        }\n        resolve(result || '');\n      });\n    });\n  } catch (e) {\n    // figlet not available in browser - return simple text\n    console.debug('figlet not available:', e);\n    return text;\n  }\n}\n\n/**\n * Convert ASCII art text to SVG with transparent background\n */\nexport function asciiArtToSvg(\n  asciiArt: string,\n  options: { textColor?: string; fontSize?: number } = {}\n): string {\n  const { textColor = '#00FFFF', fontSize = 14 } = options;\n\n  const lines = asciiArt.split('\\n');\n  const maxLineLength = Math.max(...lines.map(l => l.length));\n\n  // Calculate dimensions based on monospace font metrics (block chars need more width)\n  const charWidth = fontSize * 0.65;\n  const lineHeight = fontSize * 1.4;\n  const padding = 40;\n  const width = Math.ceil(maxLineLength * charWidth) + padding;\n  const height = Math.ceil(lines.length * lineHeight) + padding;\n\n  // Build SVG with text elements for each line\n  const textElements = lines.map((line, i) => {\n    // Escape special XML characters\n    const escapedLine = line\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;');\n\n    return `<text x=\"20\" y=\"${20 + (i + 1) * lineHeight}\" fill=\"${textColor}\" xml:space=\"preserve\">${escapedLine}</text>`;\n  }).join('\\n  ');\n\n  return `<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\">\n  <style>text { font-family: 'Courier New', Consolas, monospace; font-size: ${fontSize}px; white-space: pre; }</style>\n  ${textElements}\n</svg>`;\n}\n\n/**\n * Convert SVG to SIXEL format for xterm display\n */\nexport async function svgToSixel(\n  svgString: string,\n  options: SvgToSixelOptions = {}\n): Promise<string> {\n  const { width = 400, height = 200, backgroundColor } = options;\n\n  return new Promise((resolve, reject) => {\n    const canvas = document.createElement('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    const ctx = canvas.getContext('2d');\n\n    if (!ctx) {\n      reject(new Error('Failed to get canvas context'));\n      return;\n    }\n\n    // Fill background (transparent if not specified)\n    if (backgroundColor) {\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(0, 0, width, height);\n    }\n\n    const img = new Image();\n    const blob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });\n    const url = URL.createObjectURL(blob);\n\n    img.onload = () => {\n      ctx.drawImage(img, 0, 0, width, height);\n      URL.revokeObjectURL(url);\n\n      const imageData = ctx.getImageData(0, 0, width, height);\n      const sixelData = imageDataToSixel(imageData);\n      resolve(sixelData);\n    };\n\n    img.onerror = (error) => {\n      URL.revokeObjectURL(url);\n      reject(error);\n    };\n\n    img.src = url;\n  });\n}\n\n/**\n * Convert ImageData to SIXEL escape sequence\n */\nfunction imageDataToSixel(imageData: ImageData): string {\n  const { width, height, data } = imageData;\n\n  // Build color palette (quantize to 16 colors)\n  const palette = buildColorPalette(data, 16);\n  const colorMap = new Map<string, number>();\n  palette.forEach((color, index) => {\n    colorMap.set(color, index);\n  });\n\n  // SIXEL header\n  let sixel = '\\x1bPq';\n\n  // Define colors in palette\n  palette.forEach((color, index) => {\n    const [r, g, b] = hexToRgb(color);\n    const rPct = Math.round((r / 255) * 100);\n    const gPct = Math.round((g / 255) * 100);\n    const bPct = Math.round((b / 255) * 100);\n    sixel += `#${index};2;${rPct};${gPct};${bPct}`;\n  });\n\n  // Process image in bands of 6 rows\n  for (let bandY = 0; bandY < height; bandY += 6) {\n    for (let colorIdx = 0; colorIdx < palette.length; colorIdx++) {\n      const color = palette[colorIdx];\n      let rowData = '';\n      let hasPixels = false;\n\n      rowData += `#${colorIdx}`;\n\n      for (let x = 0; x < width; x++) {\n        let sixelValue = 0;\n\n        for (let dy = 0; dy < 6; dy++) {\n          const y = bandY + dy;\n          if (y >= height) continue;\n\n          const pixelIndex = (y * width + x) * 4;\n          const r = data[pixelIndex];\n          const g = data[pixelIndex + 1];\n          const b = data[pixelIndex + 2];\n          const a = data[pixelIndex + 3];\n\n          if (a < 128) continue;\n\n          const pixelColor = rgbToHex(r, g, b);\n          const nearestColor = findNearestColor(pixelColor, palette);\n\n          if (nearestColor === color) {\n            sixelValue |= (1 << dy);\n            hasPixels = true;\n          }\n        }\n\n        rowData += String.fromCharCode(63 + sixelValue);\n      }\n\n      if (hasPixels) {\n        sixel += rowData;\n        sixel += '$';\n      }\n    }\n\n    if (bandY + 6 < height) {\n      sixel += '-';\n    }\n  }\n\n  sixel += '\\x1b\\\\';\n  return sixel;\n}\n\nfunction buildColorPalette(data: Uint8ClampedArray, maxColors: number): string[] {\n  const colorCounts = new Map<string, number>();\n\n  for (let i = 0; i < data.length; i += 4) {\n    const r = data[i];\n    const g = data[i + 1];\n    const b = data[i + 2];\n    const a = data[i + 3];\n\n    if (a < 128) continue;\n\n    const qr = Math.floor(r / 16) * 16;\n    const qg = Math.floor(g / 16) * 16;\n    const qb = Math.floor(b / 16) * 16;\n    const color = rgbToHex(qr, qg, qb);\n\n    colorCounts.set(color, (colorCounts.get(color) || 0) + 1);\n  }\n\n  return Array.from(colorCounts.entries())\n    .sort((a, b) => b[1] - a[1])\n    .slice(0, maxColors)\n    .map(([color]) => color);\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n  return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nfunction hexToRgb(hex: string): [number, number, number] {\n  const match = hex.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\n  if (!match) return [0, 0, 0];\n  return [parseInt(match[1], 16), parseInt(match[2], 16), parseInt(match[3], 16)];\n}\n\nfunction findNearestColor(targetHex: string, palette: string[]): string {\n  const [tr, tg, tb] = hexToRgb(targetHex);\n  let nearest = palette[0];\n  let minDist = Infinity;\n\n  for (const color of palette) {\n    const [r, g, b] = hexToRgb(color);\n    const dist = (tr - r) ** 2 + (tg - g) ** 2 + (tb - b) ** 2;\n    if (dist < minDist) {\n      minDist = dist;\n      nearest = color;\n    }\n  }\n\n  return nearest;\n}\n\n/**\n * Generate MACHINA ASCII art banner as SIXEL\n */\nexport async function getMachinaAsciiArtSixel(\n  options: SvgToSixelOptions = {}\n): Promise<string> {\n  // Generate ASCII art for \"MACHINA\"\n  const machinaArt = await generateAsciiArt('MACHINA', 'ANSI Shadow');\n\n  // Convert to SVG with cyan color (terminal style)\n  const fontSize = 14;\n  const svg = asciiArtToSvg(machinaArt, {\n    textColor: options.textColor || '#00FFFF',\n    fontSize\n  });\n\n  // Calculate appropriate dimensions matching asciiArtToSvg calculation\n  const lines = machinaArt.split('\\n');\n  const maxLineLength = Math.max(...lines.map(l => l.length));\n  const charWidth = fontSize * 0.65;\n  const lineHeight = fontSize * 1.4;\n  const padding = 40;\n  const defaultWidth = Math.ceil(maxLineLength * charWidth) + padding;\n  const defaultHeight = Math.ceil(lines.length * lineHeight) + padding;\n\n  return svgToSixel(svg, {\n    width: options.width || defaultWidth,\n    height: options.height || defaultHeight,\n    backgroundColor: options.backgroundColor || '#0a0a0a',\n  });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}