{
  "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\nexport class Base64 implements IBase64 {\n  public encodeText(data: string): string {\n    return btoa(data);\n  }\n  public decodeText(data: string): string {\n    try {\n      return atob(data);\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,EAEaV,EAAN,KAAgC,CAC9B,WAAWI,EAAsB,CACtC,OAAO,KAAKA,CAAI,CAClB,CACO,WAAWA,EAAsB,CACtC,GAAI,CACF,OAAO,KAAKA,CAAI,CAClB,MAAQ,CAAC,CACT,MAAO,EACT,CACF",
  "names": ["ClipboardAddon", "_base64", "Base64", "_provider", "BrowserClipboardProvider", "terminal", "data", "sel", "b64", "args", "pc", "pd", "text", "result", "selection"]
}
