{"version":3,"names":["Files","generateUuid","uuid","_","sourcemap","fillCachedFileMap","root","lively4url","filelist","fetch","method","headers","then","r","json","contents","map","ea","name","replace","url","cachedFileMap","set","exists","self","lively4cacheFiles","Map","sourceMapConsumerForURL","sourceMapConsumerCache","smc","moduleData","System","metadata","load","sourceMap","SourceMapConsumer","console","warn","parseSourceReference","ref","match","args","split","m","lineAndColumn","originalPositionFor","line","Number","column","toString","fetchChunks","fetchPromise","eachChunkCB","doneCB","response","reader","body","getReader","decoder","TextDecoder","all","read","result","text","decode","value","Uint8Array","stream","done","loadFileResponse","version","resolve","fileversion","loadFile","log","loadJSON","copyURLtoURL","fromURL","toURL","getResp","e","lively4serverurl","blob","saveFile","data","urlString","options","moveFile","newURL","fromServerURL","serverURL","toServerURL","resp","destination","lively","notify","content","putResponse","status","confirm","delResponse","getResponse","putAgainResponse","statFile","walkDir","dir","existFile","stats","type","cachedInfo","get","window","__karma__","error","isURL","isFile","isDirectory","directory","string","location","href","extension","undefined","toLowerCase","tempfile","files","stringToBlob","encoded","encodeURIComponent","readBlobAsText","fileOrBlob","Promise","FileReader","onload","event","target","readAsText","readBlobAsDataURL","readAsDataURL","versionHistoriesLoaded","_versionHistoriesLoaded","loadVersions","cached","useCached","maxCacheTime","lastLoaded","Date","now","versionscache","caches","open","showversions","put","clone","_sortIntoFileTree","path","element","next","shift","children","push","find","fileTree","tree","list","filter","absolute","modified","size","visualizeFileTreeMap","openComponentInWindow","tm","setTreeData","isVideo","isAudio","isPicture","generateMarkdownFileListing","anchors","Array","from","querySelectorAll","imgs","links","getAttribute","concat","document","createElement","source","fileNames","query","getURL","forEach","includes","item","textContent","appendChild","code","length","checkoutGithubFile","withSynctoolDo","syncTool","respository","branch","getServerURL","gitControl","gitfilepath","func","container","create","setServerURL","repository","setRepository","updateLoginStatus","getBranch","remove","unzip","JSZip","loadAsync","githubFileInfo","remoteURL","userAndRepository","user","repo","rawURL","JSON","stringify","getEnding","getKnownServers","knownServers","startsWith","repositoryName","setURLAsBackground","back","hasGitMergeConflict","extractGitMergeConflictVersions","sourceWithConflict","versions","uniq","chooseFile","ui","chooseFiles","b64EncodeUnicode","str","btoa","p1","String","fromCharCode","parseInt","b64DecodeUnicode","decodeURIComponent","atob","c","charCodeAt","slice","join"],"sources":["files.js"],"sourcesContent":["\"enable examples\"\n\"disable deepeval\"\n/*MD \n# Files API\n\nMD*/\n\n\nimport { uuid as generateUuid } from 'utils';\nimport _ from 'src/external/lodash/lodash.js'\nimport sourcemap from 'src/external/source-map.min.js';\n\nexport default class Files {\n\n  static async fillCachedFileMap() {\n    var root = lively4url +  \"/\"\n    var filelist =   await fetch(root, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json()).then(r => r.contents.map(ea => ea.name.replace(/^\\.\\//,url)))\n    var map = this.cachedFileMap()\n    for(var url of filelist) {\n      map.set(url, {exists: true})\n    }\n  }\n  \n  static cachedFileMap() {\n    \n    if (!self.lively4cacheFiles) {\n      self.lively4cacheFiles = new Map()  // indexDB or dexie are to slow (60ms for simple checking if it is there #TODO)\n    } \n    return self.lively4cacheFiles \n  }\n  \n  static sourceMapConsumerForURL(url) {\n    this.sourceMapConsumerCache = this.sourceMapConsumerCache || {}\n    \n    var smc = this.sourceMapConsumerCache[url]\n    if (!smc) {\n      var moduleData = System[\"@@registerRegistry\"][url]\n      if (moduleData) {\n        var map = moduleData.metadata.load.sourceMap\n        if (!map) {\n          smc =  new sourcemap.SourceMapConsumer(map)\n          this.sourceMapConsumerCache[url] = smc          \n        } else {\n          console.warn(\"[files.js] no source map for \" + url)\n        }\n        \n      }\n    }\n    return smc\n  }\n  \n  \n  static parseSourceReference(ref) {\n    if(ref.match(\"!\")) {\n      var url = ref.replace(/!.*/,\"\")\n      var args = ref.replace(/.*!/,\"\").split(/:/)\n    } else {\n      var m = ref.match(/(.*):([0-9]+):([0-9]+)$/)\n      args = [m[2], m[3]]\n      url = m[1]\n    }\n    \n    var lineAndColumn\n    if (args[0] == \"transpiled\") {\n      // hide transpilation in display and links\n      var smc = this.sourceMapConsumerForURL(url)\n      if (smc) {\n        lineAndColumn = smc.originalPositionFor({\n          line: Number(args[1]),\n          column: Number(args[2])\n        })\n      } else {\n        lineAndColumn = {line: args[1], column: args[2]}\n      }\n    } else {\n      lineAndColumn = {line: args[0], column: args[1]}\n    }\n    lineAndColumn.url = url\n    lineAndColumn.toString = function() {\n        return \"\" + this.url.replace(lively4url, \"\") + \":\" + this.line + \":\" + this.column\n    }\n    return lineAndColumn\n  }\n  \n  \n  static fetchChunks(fetchPromise, eachChunkCB, doneCB) {\n    fetchPromise.then(function(response) {\n        var reader = response.body.getReader();\n        var decoder = new TextDecoder();\n        var all = \"\";\n        (function read() {\n          reader.read().then(function(result) {\n            var text = decoder.decode(result.value || new Uint8Array, {\n              stream: !result.done\n            });\n            all += text\n            if (eachChunkCB) eachChunkCB(text, result)\n            if (result.done) {\n              if (doneCB) doneCB(all, result)\n            } else {\n              read() // fetch next chunk\n            }\n          })\n        })()\n      })\n  }\n\n  static async loadFileResponse(url, version) {\n    url = this.resolve(url.toString())\n    return fetch(url, {\n      headers: {\n        fileversion: version\n      }\n    })\n  }\n\n  static async loadFile(url, version) {\n    return this.loadFileResponse(url, version).then(response => {\n      console.log(\"file \" + url + \" read.\");\n      return response.text();\n    })\n  }\n\n  static async loadJSON(url) {\n    return fetch(url, {\n      method: \"GET\",\n      headers: {\n        \"content-type\": \"application/json\"\n      }\n    }).then(response => {\n      return response.json();\n    })\n  }\n\n  \n  \n  static async copyURLtoURL(fromURL, toURL) {\n    try {\n      var getResp = await fetch(fromURL, {method: 'GET'})\n    } catch(e) {\n      console.log(\"[files] copyURLtoURL... falling back to server side download for: \" + fromURL)\n      var lively4serverurl = lively4url.replace(/[^/]*$/,\"\")\n      getResp = await fetch(lively4serverurl = \"/_curl/?target=\" + fromURL)\n      // Error maybe due to CORS?\n    }\n    var blob = await getResp.blob()\n    return fetch(toURL, {method: 'PUT', body: blob})\n  }\n  \n  static async saveFile(url, data){\n    var urlString = url.toString();\n    urlString = this.resolve(urlString)\n    if (urlString.match(/\\/$/)) {\n      return fetch(urlString, {method: 'MKCOL'});\n    } else {\n      var options = {method: 'PUT', headers: {}, body: data}\n      if (url.match && url.match(/\\.svg$/)) {\n        options.headers['Content-Type'] = 'image/svg+xml'\n      }\n      return fetch(urlString, options);\n    }\n  }\n  \n  static async moveFile(url, newURL) {\n    let fromServerURL = this.serverURL(url)\n    let toServerURL = this.serverURL(url)\n    if (fromServerURL && (fromServerURL == toServerURL)) {\n      \n      // use special server MOVE/RENAME method\n      var resp = await fetch(url, {\n        method: \"MOVE\",\n        headers: {\n          destination: newURL\n        }\n      })\n      var result = await resp.text()\n      lively.notify(\"MOVE\", result)\n      return resp\n    }\n    \n    var content = await fetch(url).then(r => r.blob())\n\n    // first, save the content...\n    var putResponse = await fetch(newURL, {\n      method: 'PUT',\n      body: content\n    })\n\n    if (putResponse.status !== 200) {\n      lively.confirm(\"could not move file to \" + newURL)\n      return putResponse\n    }\n\n    // ok, lets be crazy... we first delete\n    var delResponse = await fetch(url, {method: 'DELETE'})\n    if (delResponse.status !== 200) {\n      lively.notify(\"could not properly delete \" + url, await delResponse.text())\n    }\n\n    var getResponse = await fetch(newURL)\n    if (getResponse.status !== 200) {\n      lively.notify(\"save again, because we might need to...\")\n      var putAgainResponse = await fetch(newURL, {\n        method: 'PUT',\n        body: content\n      })\n      return putAgainResponse\n    }\n    return getResponse\n  }\n  \n  static async statFile(urlString){\n    urlString = this.resolve(urlString)\n    return fetch(urlString, {method: 'OPTIONS'}).then(resp => resp.text())\n  }\n\n  /**\n   * Recursively walks a directory path given as string.\n   * @returns an array of files\n   */\n  static async walkDir(dir) {\n    \n    var url = dir.replace(/\\/?$/,\"/\")\n    \n    // iterate on the server vs client (is 400ms vs 4000ms)\n    var result = await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json()).then(r => r.contents.map(ea => ea.name.replace(/^\\.\\//,url)))\n    return result\n\n//     if(dir.endsWith('/')) { dir = dir.slice(0, -1); }\n//     const json = await lively.files.statFile(dir).then(JSON.parse);\n//     if(json.type !== 'directory') {\n//       throw new Error('Cannot walkDir. Given path is not a directory.')\n//     }\n\n//     let files = json.contents\n//       .filter(entry => entry.type === 'file')\n//       .map(entry => dir + '/' + entry.name);\n\n//     let folders = json.contents\n//       .filter(entry => entry.type === 'directory')\n//       .map(entry => dir + '/' + entry.name);\n\n//     let subfolderResults = await Promise.all(folders.map(folder => this.walkDir(folder)));\n//     subfolderResults.forEach(filesInSubfolder => files.push(...filesInSubfolder));\n\n//     return files;\n  }\n\n  // #Depricated\n  static async existFile(urlString){\n    return this.exists(urlString)\n  }\n\n  static async stats(url) {\n    return fetch(url, {method: \"OPTIONS\"}).then(r => r.json())\n  }\n\n  static async type(url) {\n    return (await this.stats(url)).type\n  }\n\n  static async exists(urlString) {\n    var cachedInfo = this.cachedFileMap().get(urlString)\n    if (cachedInfo) {\n      return cachedInfo.exists\n    }\n    \n    // karma / travis cannot handle option requests\n    if (window.__karma__) { \n      return fetch(urlString, { \n          method: 'HEAD' \n        }).then(resp => resp.status == 200); \n    }  \n  \n    try {      \n      var resp = (await fetch(urlString, {method: \"OPTIONS\"}))\n      if (resp.status != 200) return false\n      var stats = await resp.json()\n      return stats.error ? false : true\n    } catch (e) {\n      return false;\n    }\n  }\n  \n\n  static isURL(urlString) {\n    return (\"\" + urlString).match(/^([a-z]+:)?\\/\\//) ? true : false;\n  }\n  \n  static async isFile(url) {\n    return (await this.type(url)) == \"file\"\n  }\n\n  static async isDirectory(url) {\n    return (await this.type(url)) == \"directory\"\n  }\n\n  static directory(string) {\n    string = string.toString()\n    return string.replace(/([^/]+|\\/)$/,\"\")\n  }\n\n  \n  // #Depricated    \n  static resolve(string) {\n    if (!this.isURL(string)) {\n      var result = lively.location.href.replace(/[^/]*$/, string)\n    } else {\n      result = string.toString()\n    }\n    // get rid of ..\n    result = result.replace(/[^/]+\\/\\.\\.\\//g,\"\")\n    // and .\n    result = result.replace(/\\/\\.\\//g,\"/\")\n    \n    return result\n  }\n\n  /* \n   * #Meta An inline test is a line that evaluates to true?\n   * #Meta We coould parse those lines, and generate better feedback, e.g. not just that it does not evaluate to true, but what are the values that are not equal?\n   * #Meta Could we run those inline tests in #Travis, too? \n   TESTS:\n      lively.files.name(\"https://foo/bar/bla.txt\") == \"bla.txt\" \n  */\n  static name(url) {\n    return url.toString().replace(/.*\\//,\"\")\n  }\n  \n /* \n  TESTS:\n      lively.files.extension(\"https://foo/bar/bla.txt\") == \"txt\" \n      lively.files.extension(\"https://foo/bar/bla.PNG\") == \"png\"\n      lively.files.extension(\"https://foo/bar/bla\") === undefined\n   */  \n  static extension(url) {\n    var name = this.name(url)\n    if (!name.match(/\\./)) return undefined\n    return name.toLowerCase().replace(/.*\\./,\"\")    \n  }\n  \n  \n  /*# Generate tmpfile url for lively4 server\n   *\n   * lively.files.tempfile() // e.g. https://lively-kernel.org/lively4/_tmp/3b8a7fcc-11dd-463e-8d32-dcc46575a4fd\n   *\n   */\n  static tempfile() {\n    // #Dependency to #Lively4Server \n    return  lively.files.directory(lively4url) + \"_tmp/\" + generateUuid()  \n  }\n\n  /*\n    lively.files.stringToBlob(\"hello world\")\n   */\n  static stringToBlob(string) {\n    var encoded = encodeURIComponent(string)\n    return fetch(`data:text/plain;charset=utf-8,${encoded}`).then(r => r.blob())\n  }\n  \n  /* \n    lively.files.stringToBlob(\"hello world\").then(b => lively.files.readBlobAsText(b))\n   */ \n  static readBlobAsText(fileOrBlob) {\n    return new Promise(resolve => {        \n      const reader = new FileReader();\n      reader.onload = event => {\n        resolve(event.target.result)\n      }\n      reader.readAsText(fileOrBlob); \n    })\n  }\n\n  static readBlobAsDataURL(fileOrBlob) {\n    return new Promise(resolve => {        \n      const reader = new FileReader();\n      reader.onload = event => {\n        resolve(event.target.result)\n      }\n      reader.readAsDataURL(fileOrBlob); \n    })\n  }  \n  \n  static get versionHistoriesLoaded() {\n    if (!this._versionHistoriesLoaded) this._versionHistoriesLoaded = new Map();\n    return this._versionHistoriesLoaded\n  }\n  \n  static async loadVersions(url, cached) {\n    \n    var useCached  = cached || false;\n    // Fuck... some custom clever chaching logic? Should we generalize it?\n    if (cached === undefined) {\n      var maxCacheTime = 1000 * 60 * 5; // 5min in ms\n      var lastLoaded = this.versionHistoriesLoaded.get(url)\n      if (lastLoaded && ((Date.now() - lastLoaded)  < maxCacheTime)) {\n        useCached = true\n        // lively.notify(\"use cached version history\")\n      } else {\n        this.versionHistoriesLoaded.set(url, Date.now())\n        // lively.notify(\"update version history\")\n      }\n    } else if (!cached) {\n        this.versionHistoriesLoaded.set(url, Date.now())\n    }\n    \n    var versionscache = await caches.open(\"file_versions\")\n    if (cached) {\n      var resp = await versionscache.match(url)\n      if (resp) return resp      \n    }\n    resp = await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n         showversions: true   \n      }      \n    })\n    versionscache.put(url, resp.clone())\n    return resp\n  }\n  \n  \n  static async _sortIntoFileTree(root, path, element) {\n    // console.log(\"sort into \" + path + \" \" + element.name )\n    var next = path.shift()\n    if (!next) {      \n      root.children.push(element)\n      return\n    }\n    var dir = root.children.find(ea => ea.name == next)\n    if (!dir) {\n      dir = {\n        name: next,\n        children: []\n      }\n      root.children.push(dir)\n    }\n    this._sortIntoFileTree(dir, path, element)\n  }\n  \n  static async fileTree(url) {\n    var tree = {\n      name: url,\n      children: []\n    }\n    var list = (await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json())).contents\n    if (!list) return;\n    \n    for(var ea of list) {\n      if (ea.name !== \".\") {\n        var path = ea.name.replace(/^\\.\\//,\"\").replace(/[^/]*$/,\"\").split(\"/\").filter(ea => ea)\n        var absolute = ea.name.replace(/^\\.\\//, url)\n        var element = {\n            name: ea.name.replace(/.*\\//,\"\"),\n            modified: ea.modified,\n            url: absolute,\n            size: ea.size,\n            type: ea.type\n          }\n        if (element.type == \"directory\") element.children = [];\n        this._sortIntoFileTree(tree, path, element)        \n      }\n    }\n    return tree\n  }\n  \n  // Files.visualizeFileTreeMap(lively4url )\n  static async visualizeFileTreeMap(url) {\n    var tree = await lively.files.fileTree(url)\n    if (tree) {\n      lively.openComponentInWindow(\"d3-treemap\").then( async tm => {\n        tm.setTreeData(tree)\n      })\n    } else {\n      lively.notify(\"Could not create tree for \" + url)\n    }\n  }\n  \n  static isVideo(url) {\n    return url.toString().match(/((ogm)|(m4v)|(mp4)|(mov)|(avi)|(flv)|(mpe?g)|(mkv)|(ogv))$/i)\n  }\n  \n  static isAudio(url) {\n    return url.toString().match(/((mp3)|(m4a)|(ogg))$/i)\n  }\n\n  static isPicture(url) {\n    return url.toString().match(/((svg)|(png)|(jpe?g)|(gif))$/i)\n  }\n  \n  static async generateMarkdownFileListing(root) { \n    var anchors = Array.from(root.querySelectorAll(\"a\"))\n    var imgs = Array.from(root.querySelectorAll(\"[src]\"))\n    \n    var links = anchors.map(ea => ea.getAttribute(\"href\")).filter(ea => !ea.match(/search:/)).concat(\n          imgs.map(ea => ea.getAttribute(\"src\")))\n    \n    var result = document.createElement(\"div\")\n\n    var source = \"\" // the generated markdown source that should be added\n    var fileNames = [];\n\n    var list = document.createElement(\"ul\")\n    var url = (\"\" + lively.query(root, \"lively-container\").getURL()).replace(/[^/]+$/,\"\");\n    \n    var files = (await fetch(url, {\n      method: \"OPTIONS\"\n    }).then(r => r.json())).contents\n    files.forEach(ea => {\n      // var item = document.createElement(\"li\")\n      var name =  ea.type == \"directory\" ? \n        ea.name + \"/\" :\n        ea.name\n      \n      var ref = name.replace(/ /g, \"%20\")\n      if (name == \"index.md\") return // don't include yourself\n      \n      fileNames.push(ref)\n      // item.textContent = name\n      if (!links.includes(ref)) {\n        // list.appendChild(item)  \n        source += `  - [${name}](${ref})\\n`\n      }\n    })\n\n    links.filter(ea => !fileNames.includes(ea) && !ea.match(\"/\")).forEach(ea => {\n      var item = document.createElement(\"li\")\n       if (ea == \"index.md\") return // don't include yourself\n      item.textContent = \"Missing \" + ea\n      list.appendChild(item)\n    })\n    result.appendChild(list)\n\n    var code = document.createElement(\"pre\")\n    code.textContent = source.length > 0 ? \"## Please Insert Me\\n\" + source : \"\"\n    result.appendChild(code)\n\n    return result\n  }\n  \n  static async checkoutGithubFile(url) {\n    return await this.withSynctoolDo(async (syncTool, respository, branch, path ) => {\n      var serverURL = syncTool.getServerURL()    \n      if (!url.match(serverURL)) { // we are in a checked out repo....\n        return undefined // not information for files we do not manage...\n      }\n      return await syncTool.gitControl(\"checkout\", undefined, {\n        gitfilepath: path.replace(/^\\//,\"\") // no leading / expected....\n      })\n    }, url) \n  }\n\n  static async withSynctoolDo(func, url) {     \n    // #Idea, could't we ask the server for this set directly, since we ask it indirectly anyway? as special OPTIONS request #TODO\n    try {\n      var container = <div style=\"display:none\"></div> // hide the uglyness, at least in the UI\n      document.body.appendChild(container)\n      var syncTool = await lively.create(\"lively-sync\", container); // #Hack #Ugly\n      \n      var serverURL = this.serverURL(url) \n      if (!serverURL) return\n      syncTool.setServerURL(serverURL) \n\n      var m = url.replace(serverURL,\"\").replace(/^\\//,\"\").match(/([^/]*)(\\/*.*)/)\n      var repository = m[1]\n      var path = m[2]\n      console.log(\"set repository: \"  + repository)\n      syncTool.setRepository(repository)\n      await syncTool.updateLoginStatus()\n      var branch = syncTool.getBranch()\n      return await func(syncTool, repository, branch, path)\n    } finally {\n      container.remove() // we really opened a graphical object for this\n    }\n  }\n  \n  static async unzip(url) {\n    var blob = fetch(url).then(r => r.blob())\n    return  JSZip.loadAsync(blob)\n  }\n  \n  \n  static async githubFileInfo(url) {\n    return await this.withSynctoolDo(async (syncTool, respository, branch, path ) => {\n      var serverURL = syncTool.getServerURL()      \n      var remoteURL = await syncTool.gitControl(\"remoteurl\")\n      remoteURL = remoteURL.replace(/\\n/,\"\")\n      \n      var userAndRepository = remoteURL.replace(/https:\\/\\/github.com\\//,\"\").replace(/git@github.com:/,\"\").replace(/\\.git/,\"\")\n      var [user, repo] = userAndRepository.split(\"/\")\n      \n      var result =  {\n        url,\n        user,\n        repo,\n        serverURL,\n        respository,\n        path: path && path.replace(/^\\//,\"\"),\n        remoteURL,\n        branch,\n        rawURL: remoteURL + \"/raw/\" + branch + path\n      }\n      \n      if (!remoteURL || !branch || !path) {\n        console.warn(\"Github fileInfo not complete: \" + JSON.stringify(result))\n        return null\n      }\n      \n      return result  \n    }, url) \n  }\n  \n  static getEnding(path) {\n    return path.toString().replace(/[#?].*/,\"\").replace(/.*\\./,\"\");\n  }\n  \n  \n  static getKnownServers() {\n    return [\n      lively4url.replace(/\\/[^/]+$/,\"\"),\n      \"https://lively-kernel.org/voices\",\n      \"https://lively-kernel.org/research\",\n      \"https://lively-kernel.org/lively4S2\",\n      \"https://lively-kernel.org/lively4\",\n      \"http://localhost:9005\",\n      \"http://localhost:9006\",\n    ]\n  }\n  \n  static serverURL(url) {\n    // #TODO to replace this static list, we could add this info OPTION requests... \n    \n    var knownServers = this.getKnownServers()\n    \n    for(var ea of knownServers) {\n      if (url.startsWith(ea)) {\n        return ea        \n      }\n      \n    }\n    return null // don't know?\n  }\n\n  static repositoryName(url) {  \n    var serverURL = this.serverURL(url)\n    if (!serverURL) return null\n    var repo =  url.replace(serverURL +\"/\", \"\").replace(/\\/.*/,\"\");\n    return repo\n  }\n  \n  static async setURLAsBackground(url) {\n    document.querySelectorAll(\"lively-background\").forEach(ea => ea.remove())\n\n    var back = await (<lively-background class=\"lively-content\" ></lively-background>) \n    document.body.appendChild(back)\n    back.url = url\n  }\n  \n  \n  /*MD ## Git Infos MD*/\n  static hasGitMergeConflict(source) {\n    return source.match(/<<<<<<<(.|\\n)*=======(.|\\n)*>>>>>>>/m)\n  }\n  \n  static extractGitMergeConflictVersions(sourceWithConflict) {\n     var versions = _.uniq(sourceWithConflict.split(\"\\n\")\n      .filter(ea => ea.match(/^(<<<<<<<)|(>>>>>>>) /))\n      .map(ea => ea.replace(/^(<<<<<<<)|(>>>>>>>) /, \"\")))\n     return versions\n  }\n  \n  /*MD ## File Chooser MD*/\n    \n  static async chooseFile(url = lively4url + \"/\") {\n    var ui = await lively.openComponentInWindow(\"file-chooser\")\n    return ui.chooseFile(url)\n  }\n\n  static async chooseFiles(url = lively4url + \"/\") {\n    var ui = await lively.openComponentInWindow(\"file-chooser\")\n    return ui.chooseFiles(url)\n  }\n\n  static /*example:*/b64EncodeUnicode/*{\"id\":\"4b8e_01d7_bc69\",\"name\":{\"mode\":\"input\",\"value\":\"\"},\"color\":\"hsl(210, 30%, 70%)\",\"values\":{\"str\":{\"mode\":\"input\",\"value\":\"'✓ à la mode'\"}},\"instanceId\":{\"mode\":\"input\",\"value\":\"\"},\"prescript\":\"\",\"postscript\":\"\"}*/(str) {\n    /*probe:*/return/*{}*/ btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {\n        return String.fromCharCode(parseInt(p1, 16))\n    }))\n  }\n\n  // b64DecodeUnicode()\n  static /*example:*/b64DecodeUnicode/*{\"id\":\"4103_76e3_90c5\",\"name\":{\"mode\":\"input\",\"value\":\"\"},\"color\":\"hsl(70, 30%, 70%)\",\"values\":{\"str\":{\"mode\":\"input\",\"value\":\"'4pyTIMOgIGxhIG1vZGU='\"}},\"instanceId\":{\"mode\":\"input\",\"value\":\"\"},\"prescript\":\"\",\"postscript\":\"\"}*/(str) {\n    // Going backwards: from bytestream, to percent-encoding, to original string.\n    /*probe:*/return/*{}*/ decodeURIComponent(atob(str).split('').map(function(c) {\n        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n    }).join(''));\n  }\n  \n}\n\n\n\n\n/* Context: {\"context\":{\"prescript\":\"\",\"postscript\":\"\"},\"customInstances\":[]} */"],"mappings":"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"}