{"version":3,"file":"cc-terminal.mjs","sources":["../../../projects/cc-terminal/src/lib/store.ts","../../../projects/cc-terminal/src/lib/cc-terminal-command-state.ts","../../../projects/cc-terminal/src/lib/cc-terminal-command-store.ts","../../../projects/cc-terminal/src/lib/cc-terminal.service.ts","../../../projects/cc-terminal/src/lib/cc-terminal.component.ts","../../../projects/cc-terminal/src/lib/cc-terminal.component.html","../../../projects/cc-terminal/src/lib/cc-terminal.module.ts","../../../projects/cc-terminal/src/public_api.ts","../../../projects/cc-terminal/src/cc-terminal.ts"],"sourcesContent":["// https://jurebajt.com/state-management-in-angular-with-observable-store-services/\nimport { Observable, BehaviorSubject } from 'rxjs';\n\n/**\n * @description - This Class will work as a storage of any kind of data, but we will going to store the commands for now\n */\nexport class Store<T> {\n  state$: Observable<T>;\n  private _state$: BehaviorSubject<T>;\n\n  protected constructor(initialState: T) {\n    this._state$ = new BehaviorSubject(initialState);\n    this.state$ = this._state$.asObservable();\n  }\n\n  public get state(): T {\n    return this._state$.getValue();\n  }\n\n  protected setState(nextState: T): void {\n    this._state$.next(nextState);\n  }\n}\n","// https://jurebajt.com/state-management-in-angular-with-observable-store-services/\nconst COMMANDS = [\n  {\n    name: 'help',\n    details: {\n      output: true,\n      readonly: true,\n      breakLine: true,\n      result: [\n        { text: 'List of available commands' },\n        {\n          text: function (commands) {\n            return commands.join(' ');\n          }\n        }\n      ],\n    }\n  },\n  {\n    name: 'author',\n    details: {\n      output: true,\n      readonly: true,\n      breakLine: true,\n      result: [\n        { text: 'Pravin Tiwari<code-crash> [pravintiwari1992@gmail.com] github: https://github.com/code-crash' },\n      ],\n    }\n  }\n];\n\n\nexport interface CommandResultInterface {\n  text: string | Function; // Can be string or function\n  css?: object; // It always will be object of styling\n}\n\nexport interface CommandInterface {\n  name: string;\n  details: {\n    output: boolean,\n    readonly?: boolean,\n    breakLine?: boolean,\n    format?: any,\n    result: CommandResultInterface[]\n  };\n  callback?: Function,\n}\n\nexport class CommandState {\n  commands: CommandInterface[] = COMMANDS;\n}\n\n","// https://jurebajt.com/state-management-in-angular-with-observable-store-services/\nimport { Injectable } from '@angular/core';\nimport { Store } from './store';\nimport { CommandState, CommandInterface } from './cc-terminal-command-state';\n\n@Injectable()\nexport class CommandStore extends Store<CommandState> {\n  constructor() {\n    super(new CommandState());\n  }\n\n  public addKeyValue(command: { name: string, key: string, value: any }): void {\n    this.setState({\n      ...this.state,\n      commands: this.state.commands.map(c => {\n        if (c.name === command.name) {\n          if (c.details && !c.details.readonly) {\n            if (!c['details'][command.key]) { c['details'][command.key] = null; } // If key not exists, make one\n            return { ...c, details: { ...{ ...c.details, [command.key]: command.value } } };\n          } else {\n            console.error('You are trying to modify the readonly command, which is not allowed, command name: ' + command.name);\n            return { ...c }; // You are trying modify readonly command, which is not possible.\n          }\n        }\n        return c;\n      })\n    });\n  }\n\n  /**\n   * @description - This function will add the command\n   *\n   * @param command\n   */\n  public addCommand(command: CommandInterface): void {\n    let _regex = /^[a-zA-Z]+$/;\n    if (command && command.name && _regex.test(command.name)) {\n      if (command && command.details && command.details.hasOwnProperty('output')) {\n        const exists = this.state.commands.map(function (e) { return e.name; }).indexOf(command.name);\n        if (exists === -1) {\n          this.setState({\n            ...this.state,\n            commands: [...this.state.commands, command]\n          });\n        } else {\n          console.error('You are trying to add duplicate command, which is not allowed, command name: ' + command.name);\n          // alert('You are trying to add duplicate command, which is not allowed, command name: ' + command.name);\n          // throw 'You are trying to add duplicate command, which is not allowed, command name: ' + command.name;\n        }\n      } else {\n        console.error('To add a new command, we need output property, command name: ' + command.name);\n      }\n    } else {\n      console.error('Command name is not valid to add in command list, command name should be from [a-z | A-Z] without containing space, command name: ' + command.name);\n    }\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\nimport { CommandStore } from './cc-terminal-command-store';\nimport cloneDeep from 'lodash.clonedeep';\n\ninterface BroadcastEvent {\n  key: any;\n  data?: any;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CcTerminalService implements OnDestroy {\n  private ngUnsubscribe = new Subject<boolean>(); // https://stackoverflow.com/questions/38008334/angular-rxjs-when-should-i-unsubscribe-from-subscription/41177163#41177163\n  prompt: any;\n  public store: CommandStore;\n  private event: Subject<BroadcastEvent>;\n\n  constructor() {\n    this.event = new Subject<BroadcastEvent>();\n    this.readyStore();\n  }\n\n  fetch(url: string) {\n\n    return Observable.create(observer => {\n      // angular http lib does not support arrayBuffer hence XMLHTTP\n      const req = new XMLHttpRequest();\n      req.open('get', url, true);\n      req.responseType = 'arraybuffer';\n      req.onreadystatechange = function () {\n        if (req.readyState === 4 && req.status === 200) {\n          observer.next(req.response);\n          observer.complete();\n        }\n      };\n      req.send();\n    });\n  }\n\n  // calls the next event with listener id on listening component and data to send\n  broadcast(key: any, data?: any) {\n    this.event.next({ key, data });\n  }\n\n  /**\n   * @description - This function will register to execute the store whenever store is ready.\n   */\n  readyStore() {\n    this.on<any>('store-ready').subscribe(_store => {\n      this.store = _store;\n      this.store.state$.subscribe(state => {\n        console.log('StoreReady: In Service:', state);\n      });\n    });\n  }\n\n  // filters through active observers and maps data to a matching observer\n  on<T>(key: any): Observable<T> {\n    return this.event.asObservable().pipe(filter((event) => event.key === key), map(event => <T>event.data));\n  }\n\n  /**\n   * @description - Get the Current prompt\n   */\n  public getPrompt() {\n    return this.prompt;\n  }\n\n  /**\n   * @description - Get the Current store\n   */\n  public getStore() {\n    console.log('here');\n    return this.store;\n  }\n\n  public initPrompt(config: any) {\n    this.prompt = {};\n    let _user: any, _path: any, _userPathSeparator: any, _promptEnd: any;\n    config = config ? config.promptConfiguration : null;\n    const build = () => {\n      this.prompt.text = _user + _userPathSeparator + _path + _promptEnd;\n    };\n    this.prompt.reset = () => {\n      _user = config && config.user != null ? (config.user || '') : 'anon';\n      _path = config && config.path != null ? (config.path || '') : '\\\\';\n      _userPathSeparator = config && config.separator != null ? (config.separator || '') : '@';\n      _promptEnd = config && config.end != null ? (config.end || '') : ':>';\n      build();\n    };\n    this.prompt.text = '';\n    this.prompt.reset();\n    return this.prompt;\n  }\n\n\n  /**\n   * @description - This function will help you to interpret your commands.\n   * @param cmd - command\n   */\n  public interpret(cmd: any) {\n    const prompt = this.getPrompt();\n    // this.store.state$.subscribe(state => { console.log(state); });\n    const command = (cmd.command || '').split(' ');\n    let _command = null;\n    this.store.state$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(state => {\n      _command = cloneDeep(state.commands.filter( // Remove the reference of command by making copy, to avoid modifying the command state\n        (item) => {\n          return item.name === command[0];\n        })[0] || null);\n    });\n    if (_command && _command.name) {\n      if (_command.callback && typeof _command.callback === 'function') {\n        _command.callback();\n      }\n      switch (_command.name) {\n        case 'help':\n          _command.details.result = _command.details.result.map((_result) => {\n            if (_result && _result.text && typeof _result.text === 'function') {\n              let text = _result.text(this.store.state.commands.map((c) => { return c.name; }));\n              return { ..._result, text };\n            } else {\n              return _result;\n            }\n          });\n          break;\n        default:\n          _command.details.result = _command.details.result.map((_result) => {\n            if (_result && _result.text && typeof _result.text === 'function') {\n              let text = (_result.text()).toString();\n              return { ..._result, text };\n            } else {\n              return _result;\n            }\n          });\n      }\n      _command.details.result.splice(0, 0, { text: prompt.text + cmd.command });\n      console.log('Final:', _command);\n      this.broadcast('terminal-output', _command);\n    } else {\n      let result = '';\n      try {\n        result = eval(cmd.command); // eval.call(null, cmd.command);\n        if (result !== undefined) {\n          this.broadcast('terminal-output', {\n            details: {\n              output: true,\n              result: [\n                { text: prompt.text + cmd.command, },\n                { text: '' + result },\n              ],\n              breakLine: true,\n            }\n          });\n        }\n      } catch (e) {\n        this.broadcast('terminal-output', {\n          details: {\n            output: true,\n            result: [\n              { text: prompt.text + cmd.command, },\n              { text: '' + e, css: { color: 'red' } },\n            ],\n            breakLine: true,\n          }\n        });\n      }\n    }\n\n    /**\n     * @description - Regex for exact match command\n     *   note: we can add this in constants\n     *  TODO: We can design the exact match regex based command also.\n     */\n    const regex = { // We can design the exact match regex based command also.\n      alert: /^alert$/,\n    };\n\n    // Example of how to work with regex based command\n    // else if (regex.alert.test(command[0])) {\n    // this.broadcast('terminal-output', {\n    //   details: {\n    //   output: true,\n    //   result: [\n    //      { text: prompt.text + cmd.command, },\n    //      { text: '' + e, css: { color: 'red' } }],\n    //     breakLine: true,\n    //   }\n    // });\n    //   command.splice(0, 1); // Remove command from command string\n    //   alert(command.join(' '));\n    //   console.log(command);\n    // }\n  }\n\n  ngOnDestroy() {\n    // Clear Storage allocation of memory.\n    this.ngUnsubscribe.next(true);\n    this.ngUnsubscribe.complete();\n  }\n\n}\n","import {\n  Component, OnInit,\n  OnDestroy, DoCheck, ElementRef,\n  ViewChild, Input, Renderer2\n} from '@angular/core';\nimport { CcTerminalService } from './cc-terminal.service';\nimport Timer = NodeJS.Timer;\nimport { CommandStore } from './cc-terminal-command-store';\nimport { Subject } from 'rxjs';\n@Component({\n  selector: 'cc-terminal',\n  templateUrl: './cc-terminal.component.html',\n  styleUrls: ['./cc-terminal.component.css'],\n  providers: [CommandStore]\n})\nexport class CcTerminalComponent implements OnInit, OnDestroy, DoCheck {\n  title = 'cc-terminal';\n  private ngUnsubscribe = new Subject<boolean>(); // https://stackoverflow.com/questions/38008334/angular-rxjs-when-should-i-unsubscribe-from-subscription/41177163#41177163\n  _command: String = '';\n  _cursor: String = '_';\n  _prompt: any;\n  _results: any = [];\n  _showPrompt: Boolean = true;\n  _tService: CcTerminalService;\n  private _cmdHistory: any = [];\n  private _cmdIndex: number = -1;\n  private _initial: Boolean = true;\n  private _nonPrintRE: any;\n  private _config: any;\n  private _outputDelay: any;\n  private _allowTypingWriteDisplaying: Boolean;\n  private _hasFocus: Timer;\n  private _mOver: Boolean = false; // Mouse Over\n  private _aContext: AudioContext; // Audio Context\n  private _aBuffer: AudioBuffer; // Audio Buffer\n  private _prevLength: number = 0;\n  private _disposableOutputObserver: any;\n  private _disposableCommandObserver: any;\n  @ViewChild('cc_terminal') terminal: ElementRef;\n  @ViewChild('cc_terminal_viewport') terminalViewport: ElementRef;\n  @ViewChild('cc_terminal_results') terminalResults: ElementRef;\n  @ViewChild('cc_terminal_target') terminalTarget: ElementRef;\n  @Input() ccStyle: any; // Get All the external classes\n  @Input() ccPrompt: { end: string, user: string, separator: string, path: string }; // Get the prompt\n\n  /**\n   * @description - adds \\n to all strings that need formatting at index of string\n   *              - function is not able to break line twice in case the remaining string is still longer than\n   *              - screen -> but it would be best this does not happen -> maybe require min width of terminal div\n   * @param width - width\n   * @param text  - text\n   * @param chr - character\n   */\n  static _insertLineBreakToString(width: number, text: string, chr: string) {\n    const index = Math.round(width / 8);\n    if (text.length > index) {\n      // returns text with line-break chr added at element width offset ratio\n      return text.substr(0, index) + chr + text.substr(index + 1);\n    } else {\n      return text;\n    }\n  }\n\n  /**\n   * @description - This static function will clear the all output of the terminal commands\n   */\n  static _clearTerminalResultsChildElements() {\n    const elements = document.getElementById('cc_terminal_results');\n    while (elements.firstChild) {\n      elements.removeChild(elements.firstChild);\n    }\n  }\n\n  constructor(_tService: CcTerminalService, private renderer: Renderer2, private store: CommandStore) { // renderer to add the class dynamically, while creating and rendering the output element\n    this._initializeConfig();\n    this._tService = _tService;\n    this._prompt = _tService.initPrompt(this._config);\n    this._outputDelay = this._config.outputDelay;\n    this._allowTypingWriteDisplaying = this._config.allowTypingWriteDisplaying;\n    this._disposableOutputObserver = _tService.on<any>('terminal-output').subscribe(termOut => {\n      if (!termOut.added) {\n        termOut.added = true; // TODO: We are not using this, we storing this commands in history, may be we can think of something to perform\n        this._results.push(termOut);\n      }\n    });\n    this._tService.broadcast('store-ready', this.store); // BroadCast to let all component know that store is ready to use.\n    this._registerCommand(); // Register commands which will help to do the terminal operation\n    this._disposableCommandObserver = _tService.on<any>('terminal-command').subscribe(cmd => {\n      _tService.interpret(cmd);\n    });\n  }\n\n  _initializeConfig() {\n    this._command = '';\n    this._nonPrintRE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\n    this._config = {\n      outputDelay: 8, // Output display should be more than 0 to see the effect\n      allowTypingWriteDisplaying: true,\n      maxHistory: 50,\n      typeSoundUrl: './assets/type.wav',\n      startSoundUrl: './assets/start.wav',\n      promptConfiguration: { end: ':>', user: 'CodeCrash', separator: '@', path: '\\\\' }\n    };\n  }\n\n  _handlePaste(e: any) {\n    function is_type(item, type) {\n      return item.type.indexOf(type) !== -1;\n    }\n    if (e.clipboardData) {\n      const items = e.clipboardData.items;\n      if (items) {\n        for (let i = 0; i < items.length; i++) {\n          if (is_type(items[i], 'image')) {\n            this._tService.broadcast('terminal-output', {\n              details: {\n                output: true,\n                result: [{ text: this._prompt.text + this._command }, { text: 'You can\\'t paste file' }],\n                breakLine: true,\n              }\n            });\n          } else if (is_type(items[i], 'text/plain')) {\n            items[i].getAsString((string, stay) => {\n              this._command = string;\n            });\n          }\n        }\n      } else if (e.clipboardData.getData) {\n        const text = e.clipboardData.getData('text/plain');\n        this._command = text;\n      }\n      return false;\n    }\n  }\n\n  ngOnInit() {\n    this._aContext = new AudioContext();\n    this._doSound(this._config.startSoundUrl);\n    // this.store.addKeyValue({ name: 'author', key: 'output', value: true }); // Note: We can't modify read only properties\n    // if (this.ccStyle && this.ccStyle.section) {\n    //   Object.keys(this.ccStyle.section || {}).forEach((key) => {\n    //     // Only allow background and color in section css style\n    //     if (key !== 'color' && key !== 'background') {\n    //       delete this.ccStyle.section[key];\n    //     }\n    //   });\n    // }\n    // if (this.ccStyle && this.ccStyle.viewport) {\n    //   Object.keys(this.ccStyle.viewport || {}).forEach((key) => {\n    //     // Only allow background and color in viewport css style\n    //     if (key !== 'color' && key !== 'background') {\n    //       delete this.ccStyle.viewport[key];\n    //     }\n    //   });\n    // }\n    // console.log('ccStyle:', this.ccStyle);\n    // console.log('ccPrompt:', this.ccPrompt);\n    if (this.ccPrompt) {\n      this._prompt = this._tService.initPrompt({ promptConfiguration: this.ccPrompt });\n    }\n  }\n\n  ngOnDestroy() {\n    // Clear Observable allocation of memory.\n    this._disposableOutputObserver.unsubscribe();\n    this._disposableCommandObserver.unsubscribe();\n\n    // Clear Storage allocation of memory.\n    this.ngUnsubscribe.next(true);\n    this.ngUnsubscribe.complete();\n  }\n\n  ngDoCheck() {\n    // simple added to array detection\n    if (this._prevLength < this._results.length) {\n      // check if history grows too big then maxHistory\n      if (this._results.length > this._config.maxHistory) {\n        this._results.splice(0, 1);\n        this.terminalResults.nativeElement.children[0].remove();\n      }\n      this._addToTerminalResults();\n    }\n    this._prevLength = this._results.length;\n  }\n\n  /**\n   * @description - This will add the output on the terminal\n   * TODO: We need to simulate the commands which is not added on terminal output\n   *\n   * TODO: @example  -\n   *\n   *            this.store.addCommand({\n   *              name: 'example',\n   *               details: {\n   *                 breakLine: true,\n   *                 output: true, // Output false have error\n   *                 readonly: false,\n   *                 result: [{\n   *                   text: () => {\n   *                     return 10 + 10;\n   *                   }\n   *                 }],\n   *               },\n   *               callback: () => {\n   *                 this._tService.broadcast('terminal-command', { command: 'help' });\n   *                 this._tService.broadcast('terminal-output', {\n   *                   details: {\n   *                     output: true,\n   *                     breakLine: true,\n   *                     result: [\n   *                       { text: 'yum yum' }\n   *                     ]\n   *                   }\n   *                 });\n   *                 alert('done');\n   *               }\n   *            });\n   */\n  private _addToTerminalResults() {\n    const _handlePromptScroll = [() => {\n      this._showPrompt = true; // while rendering output, hide prompt\n      this.terminalViewport.nativeElement.scrollTop = this.terminalViewport.nativeElement.scrollHeight; // always put scroll to bottom\n    }];\n    this._showPrompt = false;\n    const change = this._results[this._results.length - 1].details;\n    const spanElement = this.renderer.createElement('span');\n    if (this._outputDelay) {\n      for (let i = change.result.length - 1; i >= 0; i--) { // only reverse loop will type out the lines with delay proper and in order\n        this._createTypedOutputElement(spanElement, change, i, _handlePromptScroll);\n      }\n      setTimeout(() => { // start line by line typing execution chain to handle show/hide prompt\n        _handlePromptScroll[_handlePromptScroll.length - 1]();\n      }, 200);\n    } else {\n      this._showPrompt = true;\n      for (let i = 0; i < change.result.length; i++) { // paste everything at once\n        this._createOutputElement(spanElement, change, i);\n      }\n      if (change.breakLine) {\n        const breakLine = this.renderer.createElement('br');\n        spanElement.appendChild(breakLine);\n      }\n    }\n  }\n\n  /**\n   * @description - This will will create a command typed to command prompt and do print on output\n   */\n  private _createTypedOutputElement(span: HTMLSpanElement, change: any, i: number, _handlePromptScroll: (() => any)[]) {\n    const lineBr = ' -> \\n ';\n    const { line, textLine } = this._createOutputLineElement(change, i, lineBr);\n    if (change.output) { // If output is enabled for the command, then only print it\n      line.textContent = ' ';\n      const fi = _handlePromptScroll.length - 1;\n      const wLine = line; // World Line\n      const wTextLine = textLine; // World Text Line\n      const wf = _handlePromptScroll[fi]; // to call the next _handlePromptScroll[i] recursively after previous line type has finished\n      const wBreak = i === change.result.length - 1 && change.breakLine; // World Break\n      _handlePromptScroll.push(() => {\n        span.appendChild(wLine); // initialize empty line to type out\n        this.terminalResults.nativeElement.appendChild(span);\n        this._type(wLine, wTextLine, 0, wf); // send line to type() so each character gets displayed coupled with a type sound\n        this.terminalViewport.nativeElement.scrollTop = this.terminalViewport.nativeElement.scrollHeight;\n        if (wBreak) {\n          const breakLine = this.renderer.createElement('br');\n          span.appendChild(breakLine);\n          this.terminalResults.nativeElement.appendChild(span);\n        }\n      });\n    } else {\n      // line.textContent = textLine;\n      // span.appendChild(line);\n      // this.terminalResults.nativeElement.appendChild(span);\n    }\n  }\n\n  private _createOutputElement(span: HTMLSpanElement, change: any, i: number) {\n    const lineBr = ' -> \\n';\n    const { line, textLine } = this._createOutputLineElement(change, i, lineBr);\n    line.textContent = textLine;\n    span.appendChild(line);\n    this.terminalResults.nativeElement.appendChild(span);\n  }\n\n  private _createOutputLineElement(change: any, i: number, lineBr: string) {\n    const line = this.renderer.createElement('div');\n    if (change.result[i] && change.result[i]['css']) {\n      if (Object.keys(change.result[i]['css'] || {}).length) {\n        let style = '';\n        Object.keys(change.result[i]['css'] || {}).forEach((key) => {\n          style += key + ':' + change.result[i]['css'][key] + ';';\n        });\n        line.style = style;\n      }\n    }\n    this.renderer.addClass(line, 'cc_terminal_line');\n    let textLine: string;\n    const elWidth = this.terminalViewport.nativeElement.firstElementChild.clientWidth;\n    // format -> the stream needs formatting to show with appropriate line breaks on the screen\n    if (change.format) {\n      textLine = CcTerminalComponent._insertLineBreakToString(elWidth, change.result[i].text, lineBr);\n    } else {\n      textLine = (change.result[i] && change.result[i].text) || '';\n    }\n    return { line, textLine };\n  }\n\n  _type(input, line, i, endCallback) {\n    setTimeout(() => {\n      this._doSound(this._config.typeSoundUrl);\n      input.textContent += (i < line.length ? line[i] : '');\n      if (i < line.length - 1) {\n        this._doSound(this._config.typeSoundUrl);\n        this._type(input, line, i + 1, endCallback);\n      } else if (endCallback) {\n        endCallback();\n      }\n    }, this._outputDelay);\n  }\n\n  _doSound(uri: string): void {\n    this._loadAudio(uri).then((_audioBuffer) => {\n      this._aBuffer = _audioBuffer;\n      this._playAudio();\n    }).catch(error => { throw error; });\n  }\n\n  _loadAudio(source: string): Promise<AudioBuffer> {\n    return new Promise((resolve, reject) => {\n      this._tService.fetch(source).subscribe(buffer => {\n        this._aContext.decodeAudioData(buffer, resolve, reject);\n      });\n    });\n  }\n\n  _playAudio() {\n    const bufferSource = this._aContext.createBufferSource();\n    bufferSource.buffer = this._aBuffer;\n    bufferSource.connect(this._aContext.destination);\n    bufferSource.start(0);\n  }\n\n  _mouseover() {\n    this._mOver = true;\n  }\n\n  _mouseleave() {\n    this._mOver = false;\n  }\n\n  _clickHandler() {\n    this.terminalTarget.nativeElement.focus();\n    this.terminal.nativeElement.classList.toggle('cc_terminal_focused', true);\n  }\n\n  _blur() {\n    clearInterval(this._hasFocus);\n    if (!this._mOver) {\n      this._cursor = '_';\n    }\n    this.terminal.nativeElement.classList.toggle('cc_terminal_focused', false);\n  }\n\n  /**\n   * @description - This will called when user will focus on input\n   */\n  _focus() {\n    if (this._initial) {\n      this._tService.broadcast('terminal-output', {\n        details: {\n          result: [{ text: 'How can I help you?', css: { color: 'red' } }],\n          breakLine: true,\n          output: true,\n          format: true\n        }\n      });\n    }\n    this._initial = false;\n    this._hasFocus = setInterval(() => {\n      if (this._cursor === '') {\n        this._cursor = '_';\n      } else {\n        this._cursor = '';\n      }\n    }, 500);\n  }\n\n  _key(e) {\n    if (this._showPrompt || this._allowTypingWriteDisplaying) {\n      this._keypress(e.which);\n    }\n    e.preventDefault();\n  }\n\n  _keypress(keyCode: number) {\n    if (this._command.length < 80) {\n      this._cmdIndex = -1;\n    }\n    if (keyCode !== 13) {\n      this._command += String.fromCharCode(keyCode);\n    }\n  }\n\n  _keydown(e) {\n\n    if (e.keyCode === 9) { // Tab ke\n      e.preventDefault();\n    }\n    if (e.keyCode === 8) { // Backspace key\n      if (this._showPrompt || this._allowTypingWriteDisplaying) {\n        this._backspace();\n      }\n      e.preventDefault();\n    } else if (e.keyCode === 13) { // Enter key\n      if (this._showPrompt || this._allowTypingWriteDisplaying) {\n        this._execute();\n      }\n    } else if (e.keyCode === 38) { // key-up\n      if (this._showPrompt || this._allowTypingWriteDisplaying) {\n        this._previousCommand();\n      }\n      e.preventDefault();\n    } else if (e.keyCode === 40) { // key-down key\n      if (this._showPrompt || this._allowTypingWriteDisplaying) {\n        this._nextCommand();\n      }\n      e.preventDefault();\n    }\n  }\n\n  _nextCommand() {\n    if (this._cmdIndex === -1) {\n      return;\n    }\n    if (this._cmdIndex < this._cmdHistory.length - 1) {\n      this._command = this._cmdHistory[++this._cmdIndex];\n    } else {\n      this._command = '';\n    }\n  }\n\n  _previousCommand() {\n    if (this._cmdIndex === -1) {\n      this._cmdIndex = this._cmdHistory.length;\n    }\n    if (this._cmdIndex === 0) {\n      return;\n    }\n    this._command = this._cmdHistory[--this._cmdIndex];\n  }\n\n  _cleanNonPrintableCharacters(input: String) {\n    return input.replace(this._nonPrintRE, '');\n  }\n\n  _execute() {\n    const command = this._cleanNonPrintableCharacters(this._command);\n    this._command = '';\n    if (!command) {\n      // return; // If you want to do nothing if command is only enter, un comment this.\n      this._tService.broadcast('terminal-output', {\n        details: {\n          output: true,\n          result: [\n            { text: this._prompt.text + this._command, },\n          ],\n          breakLine: true,\n        }\n      });\n    }\n    if (this._cmdHistory.length > 10) {\n      this._cmdHistory.splice(0, 1);\n    }\n    if (command !== this._cmdHistory[this._cmdHistory.length - 1]) {\n      this._cmdHistory.push(command);\n    }\n    this._tService.broadcast('terminal-command', { command: command });\n  }\n\n  _backspace() {\n    if (this._command) {\n      this._command = this._command.substring(0, this._command.length - 1);\n    }\n  }\n\n\n  /**\n   * @description - This function will help you to register the commands\n   */\n  _registerCommand = () => {\n    // Clear Command to clear the terminal\n    this.store.addCommand({\n      name: 'clear',\n      details: { result: [], readonly: true, output: false },\n      callback: () => {\n        this._results.splice(0, this._results.length);\n        CcTerminalComponent._clearTerminalResultsChildElements();\n      }\n    });\n\n    // Reset Command to reset the terminal\n    this.store.addCommand({\n      name: 'reset',\n      details: { result: [], readonly: true, output: false },\n      callback: () => {\n        this._initializeConfig();\n        this._results = [];\n        CcTerminalComponent._clearTerminalResultsChildElements();\n        this._initial = true;\n        // this.ngOnInit();\n        this.ngOnInit();\n        this._blur();\n        this._clickHandler();\n      }\n    });\n  }\n}\n","<section class='cc_terminal' on-mouseover=\"_mouseover()\" on-mouseleave=\"_mouseleave()\" #cc_terminal id=\"cc_terminal\"\n  on-paste='_handlePaste($event)' [ngStyle]=\"ccStyle?.section\">\n  <div class='cc_terminal_viewport' #cc_terminal_viewport id=\"cc_terminal_viewport\" on-click=\"_clickHandler()\"\n    [ngStyle]=\"ccStyle?.viewport\">\n    <div class='cc_terminal_results' #cc_terminal_results id=\"cc_terminal_results\"></div>\n    <span class='cc_terminal_prompt' *ngIf='_showPrompt'>\n      {{ _prompt?.text }}\n    </span>\n    <span class='cc_terminal_input' [ngStyle]=\"ccStyle?.input\" *ngIf='_showPrompt'>\n      {{ _command }}\n    </span>\n    <span class='cc_terminal_cursor' [ngStyle]=\"ccStyle?.cursor\" *ngIf='_showPrompt'>\n      {{ _cursor }}\n    </span>\n    <input type='text' class='cc_terminal_target' [(ngModel)]='_command' (blur)=\"_blur()\" (focus)=\"_focus()\" on-keydown=\"_keydown($event)\"\n      on-keypress=\"_key($event)\" #cc_terminal_target id=\"cc_terminal_target\" />\n  </div>\n</section>\n","import { NgModule } from '@angular/core';\nimport { CcTerminalComponent } from './cc-terminal.component';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\n\n@NgModule({\n  declarations: [CcTerminalComponent],\n  imports: [\n    BrowserModule,\n    FormsModule,\n  ],\n  exports: [CcTerminalComponent]\n})\nexport class CcTerminalModule { }\n","/*\n * Public API Surface of cc-terminal\n */\n\nexport * from './lib/cc-terminal.component';\nexport * from './lib/cc-terminal.service';\nexport * from './lib/cc-terminal.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.CcTerminalService","i2.CommandStore"],"mappings":"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"}