{
  "version": 3,
  "sources": ["../src/ClipboardAddon.ts"],
  "sourcesContent": ["/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDisposable, ITerminalAddon, Terminal } from '@xterm/xterm';\nimport { type IClipboardProvider, type IBase64 } from '@xterm/addon-clipboard';\n\nexport class ClipboardAddon implements ITerminalAddon {\n  private _terminal?: Terminal;\n  private _disposable?: IDisposable;\n\n  constructor(\n    private _base64: IBase64 = new Base64(),\n    private _provider: IClipboardProvider = new BrowserClipboardProvider()\n  ) {}\n\n  public activate(terminal: Terminal): void {\n    this._terminal = terminal;\n    this._disposable = terminal.parser.registerOscHandler(52, data => this._setOrReportClipboard(data));\n  }\n\n  public dispose(): void {\n    return this._disposable?.dispose();\n  }\n\n  private _readText(sel: string, data: string): void {\n    const b64 = this._base64.encodeText(data);\n    this._terminal?.input(`\\x1b]52;${sel};${b64}\\x07`, false);\n  }\n\n  private _setOrReportClipboard(data: string): boolean | Promise<boolean> {\n    const args = data.split(';');\n    if (args.length < 2) {\n      return true;\n    }\n\n    const pc = args[0];\n    const pd = args[1];\n    if (pd === '?') {\n      const text = this._provider.readText(pc);\n\n      // Report clipboard\n      if (text instanceof Promise) {\n        return text.then((data) => {\n          this._readText(pc, data);\n          return true;\n        });\n      }\n\n      this._readText(pc, text);\n      return true;\n    }\n\n    // Clear clipboard if text is not a base64 encoded string.\n    let text = '';\n    try {\n      text = this._base64.decodeText(pd);\n    } catch {}\n\n\n    const result = this._provider.writeText(pc, text);\n    if (result instanceof Promise) {\n      return result.then(() => true);\n    }\n\n    return true;\n  }\n}\n\nexport class BrowserClipboardProvider implements IClipboardProvider {\n  public readText(selection: string): Promise<string> {\n    return navigator.clipboard.readText();\n  }\n\n  public writeText(selection: string, text: string): Promise<void> {\n    return navigator.clipboard.writeText(text);\n  }\n}\n\n/**\n * TODO: Once the base64 handling on Uint8Arrays is more common,\n * remove the btoa/atob fallbacks below.\n */\ninterface IUint8ArrayB64 extends Uint8Array {\n  toBase64(): string;\n}\ninterface IUint8ArrayB64Ctor extends Uint8ArrayConstructor {\n  fromBase64(s: string): IUint8ArrayB64;\n}\n\nexport class Base64 implements IBase64 {\n  public encodeText(data: string): string {\n    const bytes = new TextEncoder().encode(data) as IUint8ArrayB64;\n    if (bytes.toBase64 !== undefined) {\n      return bytes.toBase64();\n    }\n    let bin = '';\n    for (let i = 0; i < bytes.length; i++) {\n      bin += String.fromCharCode(bytes[i]);\n    }\n    return btoa(bin);\n  }\n  public decodeText(data: string): string {\n    if ((Uint8Array as IUint8ArrayB64Ctor).fromBase64 !== undefined) {\n      try {\n        return new TextDecoder().decode((Uint8Array as IUint8ArrayB64Ctor).fromBase64(data));\n      } catch {}\n      return '';\n    }\n    try {\n      const bin = atob(data);\n      const bytes = new Uint8Array(bin.length);\n      for (let i = 0; i < bin.length; ++i) {\n        bytes[i] = bin.charCodeAt(i);\n      }\n      return new TextDecoder().decode(bytes);\n    } catch {}\n    return '';\n  }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;AAQO,IAAMA,EAAN,KAA+C,CAIpD,YACUC,EAAmB,IAAIC,EACvBC,EAAgC,IAAIC,EAC5C,CAFQ,aAAAH,EACA,eAAAE,CACP,CAEI,SAASE,EAA0B,CACxC,KAAK,UAAYA,EACjB,KAAK,YAAcA,EAAS,OAAO,mBAAmB,GAAIC,GAAQ,KAAK,sBAAsBA,CAAI,CAAC,CACpG,CAEO,SAAgB,CACrB,OAAO,KAAK,aAAa,QAAQ,CACnC,CAEQ,UAAUC,EAAaD,EAAoB,CACjD,IAAME,EAAM,KAAK,QAAQ,WAAWF,CAAI,EACxC,KAAK,WAAW,MAAM,WAAWC,CAAG,IAAIC,CAAG,OAAQ,EAAK,CAC1D,CAEQ,sBAAsBF,EAA0C,CACtE,IAAMG,EAAOH,EAAK,MAAM,GAAG,EAC3B,GAAIG,EAAK,OAAS,EAChB,MAAO,GAGT,IAAMC,EAAKD,EAAK,CAAC,EACXE,EAAKF,EAAK,CAAC,EACjB,GAAIE,IAAO,IAAK,CACd,IAAMC,EAAO,KAAK,UAAU,SAASF,CAAE,EAGvC,OAAIE,aAAgB,QACXA,EAAK,KAAMN,IAChB,KAAK,UAAUI,EAAIJ,CAAI,EAChB,GACR,GAGH,KAAK,UAAUI,EAAIE,CAAI,EAChB,GACT,CAGA,IAAIA,EAAO,GACX,GAAI,CACFA,EAAO,KAAK,QAAQ,WAAWD,CAAE,CACnC,MAAQ,CAAC,CAGT,IAAME,EAAS,KAAK,UAAU,UAAUH,EAAIE,CAAI,EAChD,OAAIC,aAAkB,QACbA,EAAO,KAAK,IAAM,EAAI,EAGxB,EACT,CACF,EAEaT,EAAN,KAA6D,CAC3D,SAASU,EAAoC,CAClD,OAAO,UAAU,UAAU,SAAS,CACtC,CAEO,UAAUA,EAAmBF,EAA6B,CAC/D,OAAO,UAAU,UAAU,UAAUA,CAAI,CAC3C,CACF,EAaaV,EAAN,KAAgC,CAC9B,WAAWI,EAAsB,CACtC,IAAMS,EAAQ,IAAI,YAAY,EAAE,OAAOT,CAAI,EAC3C,GAAIS,EAAM,WAAa,OACrB,OAAOA,EAAM,SAAS,EAExB,IAAIC,EAAM,GACV,QAAS,EAAI,EAAG,EAAID,EAAM,OAAQ,IAChCC,GAAO,OAAO,aAAaD,EAAM,CAAC,CAAC,EAErC,OAAO,KAAKC,CAAG,CACjB,CACO,WAAWV,EAAsB,CACtC,GAAK,WAAkC,aAAe,OAAW,CAC/D,GAAI,CACF,OAAO,IAAI,YAAY,EAAE,OAAQ,WAAkC,WAAWA,CAAI,CAAC,CACrF,MAAQ,CAAC,CACT,MAAO,EACT,CACA,GAAI,CACF,IAAMU,EAAM,KAAKV,CAAI,EACfS,EAAQ,IAAI,WAAWC,EAAI,MAAM,EACvC,QAAS,EAAI,EAAG,EAAIA,EAAI,OAAQ,EAAE,EAChCD,EAAM,CAAC,EAAIC,EAAI,WAAW,CAAC,EAE7B,OAAO,IAAI,YAAY,EAAE,OAAOD,CAAK,CACvC,MAAQ,CAAC,CACT,MAAO,EACT,CACF",
  "names": ["ClipboardAddon", "_base64", "Base64", "_provider", "BrowserClipboardProvider", "terminal", "data", "sel", "b64", "args", "pc", "pd", "text", "result", "selection", "bytes", "bin"]
}
