diff --git a/.gitignore b/.gitignore index be6071af..cdade93f 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,7 @@ res_built gulp/runnable-texturepacker.jar tmp_standalone_files tmp_standalone_files_china +tmp_standalone_files_wegame # Local config config.local.js diff --git a/Dockerfile b/Dockerfile index 61d54684..b79cac20 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,6 +26,7 @@ COPY translations ./translations COPY src/js ./src/js COPY res_raw ./res_raw COPY .git ./.git +COPY electron ./electron WORKDIR /shapez.io/gulp ENTRYPOINT ["yarn", "gulp"] diff --git a/README.md b/README.md index 85b5d26b..4a042cd9 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ This is the source code for shapez.io, an open source base building game inspired by Factorio. Your goal is to produce shapes by cutting, rotating, merging and painting parts of shapes. -- [Trello Board & Roadmap](https://trello.com/b/ISQncpJP/shapezio) -- [Free web version](https://shapez.io) -- [itch.io Page](https://tobspr.itch.io/shapezio) - [Steam Page](https://steam.shapez.io) - [Official Discord](https://discord.com/invite/HN7EVzV) <- _Highly recommended to join!_ +- [Trello Board & Roadmap](https://trello.com/b/ISQncpJP/shapezio) +- [itch.io Page](https://tobspr.itch.io/shapezio) +- [Free web version](https://shapez.io) ## Reporting issues, suggestions, feedback, bugs @@ -35,11 +35,11 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts You can use [Gitpod](https://www.gitpod.io/) (an Online Open Source VS Code-like IDE which is free for Open Source) for working on issues and making PRs to this project. With a single click it will start a workspace and automatically: -- clone the `shapez.io` repo. -- install all of the dependencies. -- start `gulp` in `gulp/` directory. +- clone the `shapez.io` repo. +- install all of the dependencies. +- start `gulp` in `gulp/` directory. -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/tobspr/shapez.io) ## Helping translate diff --git a/electron/index.js b/electron/index.js index b877900c..e7994050 100644 --- a/electron/index.js +++ b/electron/index.js @@ -74,20 +74,8 @@ function createWindow() { win.on("closed", () => { console.log("Window closed"); win = null; - app.quit(); }); - function handleWindowBeforeunload(event) { - const confirmed = dialog.showMessageBox(remote.getCurrentWindow(), options) === 1; - if (confirmed) { - remote.getCurrentWindow().close(); - } else { - event.returnValue = false; - } - } - - win.on("", handleWindowBeforeunload); - if (isDev) { menu = new Menu(); @@ -286,7 +274,10 @@ async function performFsJob(job) { } } -ipcMain.handle("fs-job", (event, arg) => performFsJob(arg)); +ipcMain.on("fs-job", async (event, arg) => { + const result = await performFsJob(arg); + event.reply("fs-response", { id: arg.id, result }); +}); steam.init(isDev); steam.listen(); diff --git a/electron/package.json b/electron/package.json index 893e3609..d21aff71 100644 --- a/electron/package.json +++ b/electron/package.json @@ -10,10 +10,10 @@ "start": "electron --disable-direct-composition --in-process-gpu ." }, "devDependencies": { - "electron": "10.4.0" + "electron": "10.4.3" }, "optionalDependencies": { - "shapez.io-private-artifacts": "github:tobspr/shapez.io-private-artifacts#abi-v85" + "shapez.io-private-artifacts": "github:tobspr/shapez.io-private-artifacts#abi-v82" }, "dependencies": { "async-lock": "^1.2.8" diff --git a/electron/steam.js b/electron/steam.js index 08d0a046..464b7924 100644 --- a/electron/steam.js +++ b/electron/steam.js @@ -1,5 +1,5 @@ -const fs = require('fs'); -const path = require('path'); +const fs = require("fs"); +const path = require("path"); const { ipcMain } = require("electron"); let greenworks = null; @@ -11,10 +11,10 @@ try { appId = parseInt(fs.readFileSync(path.join(__dirname, "steam_appid.txt"), "utf8")); } catch (err) { // greenworks is not installed - // throw err; + console.warn("Failed to load steam api:", err); } -function init (isDev) { +function init(isDev) { if (!greenworks) { return; } @@ -34,16 +34,49 @@ function init (isDev) { initialized = true; } -function listen () { +function listen() { ipcMain.handle("steam:is-initialized", isInitialized); - if (!greenworks || !initialized) { - console.log("Ignoring Steam IPC events"); + if (!initialized) { + console.warn("Steam not initialized, won't be able to listen"); return; } + if (!greenworks) { + console.warn("Greenworks not loaded, won't be able to listen"); + return; + } + + console.log("Adding listeners"); + ipcMain.handle("steam:get-achievement-names", getAchievementNames); ipcMain.handle("steam:activate-achievement", activateAchievement); + + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)) + .map(b => b.toString(16).padStart(2, "0")) + .join(""); + } + + ipcMain.handle("steam:get-ticket", (event, arg) => { + console.log("Requested steam ticket ..."); + return new Promise((resolve, reject) => { + greenworks.getAuthSessionTicket( + success => { + const ticketHex = bufferToHex(success.ticket); + resolve(ticketHex); + }, + error => { + console.error("Failed to get steam ticket:", error); + reject(error); + } + ); + }); + }); + + ipcMain.handle("steam:check-app-ownership", (event, appId) => { + return Promise.resolve(greenworks.isDLCInstalled(appId)); + }); } function isInitialized(event) { @@ -53,7 +86,7 @@ function isInitialized(event) { function getAchievementNames(event) { return new Promise((resolve, reject) => { try { - const achievements = greenworks.getAchievementNames() + const achievements = greenworks.getAchievementNames(); resolve(achievements); } catch (err) { reject(err); @@ -63,11 +96,15 @@ function getAchievementNames(event) { function activateAchievement(event, id) { return new Promise((resolve, reject) => { - greenworks.activateAchievement(id, () => resolve(), err => reject(err)) + greenworks.activateAchievement( + id, + () => resolve(), + err => reject(err) + ); }); } module.exports = { init, - listen + listen, }; diff --git a/electron/yarn.lock b/electron/yarn.lock index 8c5b1dec..db2b6278 100644 --- a/electron/yarn.lock +++ b/electron/yarn.lock @@ -146,10 +146,10 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -electron@10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/electron/-/electron-10.4.0.tgz#018385914474b56110a5a43087a53c114b67c08d" - integrity sha512-qK8OOCWuNvEFWThmjkukkqDwIpBqULlDuMXVC9MC/2P4UaWJEjIYvBmBuTyxtFcKoE3kWvcWyeRDUuvzVxxXjA== +electron@10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/electron/-/electron-10.4.3.tgz#8d1c0f5e562d1b78dcec8074c0d59e58137fd508" + integrity sha512-qL8XZBII9KQHr1+YmVMj1AqyTR2I8/lxozvKEWoKKSkF8Hl6GzzxrLXRfISP7aDAvsJEyyhc6b2/42ME8hG5JA== dependencies: "@electron/get" "^1.0.1" "@types/node" "^12.0.12" @@ -503,9 +503,9 @@ serialize-error@^7.0.1: dependencies: type-fest "^0.13.1" -"shapez.io-private-artifacts@github:tobspr/shapez.io-private-artifacts#abi-v85": +"shapez.io-private-artifacts@github:tobspr/shapez.io-private-artifacts#abi-v82": version "0.1.0" - resolved "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#63adf7e0ea4b90c2a29053ce1f0ec9d573b3ac0a" + resolved "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#8aa3bfd3b569eb5695fc8a585a3f2ee3ed2db290" sprintf-js@^1.1.2: version "1.1.2" diff --git a/electron_wegame/.gitignore b/electron_wegame/.gitignore new file mode 100644 index 00000000..475a7c75 --- /dev/null +++ b/electron_wegame/.gitignore @@ -0,0 +1 @@ +wegame_sdk diff --git a/electron_wegame/README.md b/electron_wegame/README.md new file mode 100644 index 00000000..70736caf --- /dev/null +++ b/electron_wegame/README.md @@ -0,0 +1 @@ +To build, place the lib64 folder from the wegame sdk for electron 13 in `wegame_sdk` and run the `wegame.main.standalone` gulp task. diff --git a/electron_wegame/electron_wegame.code-workspace b/electron_wegame/electron_wegame.code-workspace new file mode 100644 index 00000000..fc9ab864 --- /dev/null +++ b/electron_wegame/electron_wegame.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "files.exclude": { + "**/node_modules": true, + "**/typedefs_gen": true + } + } +} \ No newline at end of file diff --git a/electron_wegame/favicon.icns b/electron_wegame/favicon.icns new file mode 100644 index 00000000..13d21f26 Binary files /dev/null and b/electron_wegame/favicon.icns differ diff --git a/electron_wegame/favicon.ico b/electron_wegame/favicon.ico new file mode 100644 index 00000000..54721ebf Binary files /dev/null and b/electron_wegame/favicon.ico differ diff --git a/electron_wegame/favicon.png b/electron_wegame/favicon.png new file mode 100644 index 00000000..44994cc9 Binary files /dev/null and b/electron_wegame/favicon.png differ diff --git a/electron_wegame/index.js b/electron_wegame/index.js new file mode 100644 index 00000000..23c277c4 --- /dev/null +++ b/electron_wegame/index.js @@ -0,0 +1,289 @@ +/* eslint-disable quotes,no-undef */ + +const { app, BrowserWindow, Menu, MenuItem, ipcMain, shell } = require("electron"); + +app.commandLine.appendSwitch("in-process-gpu"); + +const path = require("path"); +const url = require("url"); +const fs = require("fs"); +const wegame = require("./wegame"); +const asyncLock = require("async-lock"); + +const isDev = process.argv.indexOf("--dev") >= 0; +const isLocal = process.argv.indexOf("--local") >= 0; + +const roamingFolder = + process.env.APPDATA || + (process.platform == "darwin" + ? process.env.HOME + "/Library/Preferences" + : process.env.HOME + "/.local/share"); +let storePath = path.join(roamingFolder, "shapez.io", "saves"); + +if (!fs.existsSync(storePath)) { + // No try-catch by design + fs.mkdirSync(storePath, { recursive: true }); +} + +/** @type {BrowserWindow} */ +let win = null; +let menu = null; + +function createWindow() { + let faviconExtension = ".png"; + if (process.platform === "win32") { + faviconExtension = ".ico"; + } + + win = new BrowserWindow({ + width: 1280, + height: 800, + show: false, + backgroundColor: "#222428", + useContentSize: true, + minWidth: 800, + minHeight: 600, + title: "图形工厂", + transparent: false, + icon: path.join(__dirname, "favicon" + faviconExtension), + // fullscreen: true, + autoHideMenuBar: true, + webPreferences: { + nodeIntegration: true, + webSecurity: false, + contextIsolation: false, + }, + allowRunningInsecureContent: false, + }); + + if (isLocal) { + win.loadURL("http://localhost:3005"); + } else { + win.loadURL( + url.format({ + pathname: path.join(__dirname, "index.html"), + protocol: "file:", + slashes: true, + }) + ); + } + win.webContents.session.clearCache(() => null); + win.webContents.session.clearStorageData(); + + win.webContents.on("new-window", (event, pth) => { + event.preventDefault(); + shell.openExternal(pth); + }); + + win.on("closed", () => { + console.log("Window closed"); + win = null; + }); + + if (isDev) { + menu = new Menu(); + + const mainItem = new MenuItem({ + label: "Toggle Dev Tools", + click: () => win.webContents.toggleDevTools(), + accelerator: "F12", + }); + menu.append(mainItem); + + const reloadItem = new MenuItem({ + label: "Restart", + click: () => win.reload(), + accelerator: "F5", + }); + menu.append(reloadItem); + + const fullscreenItem = new MenuItem({ + label: "Fullscreen", + click: () => win.setFullScreen(!win.isFullScreen()), + accelerator: "F11", + }); + menu.append(fullscreenItem); + + Menu.setApplicationMenu(menu); + } else { + Menu.setApplicationMenu(null); + } + + win.once("ready-to-show", () => { + win.show(); + win.focus(); + }); +} + +if (!app.requestSingleInstanceLock()) { + app.exit(0); +} else { + app.on("second-instance", (event, commandLine, workingDirectory) => { + // Someone tried to run a second instance, we should focus + if (win) { + if (win.isMinimized()) { + win.restore(); + } + win.focus(); + } + }); +} + +app.on("ready", createWindow); + +app.on("window-all-closed", () => { + console.log("All windows closed"); + app.quit(); +}); + +ipcMain.on("set-fullscreen", (event, flag) => { + win.setFullScreen(flag); +}); + +ipcMain.on("exit-app", (event, flag) => { + win.close(); + app.quit(); +}); + +let renameCounter = 1; + +const fileLock = new asyncLock({ + timeout: 30000, + maxPending: 1000, +}); + +function niceFileName(filename) { + return filename.replace(storePath, "@"); +} + +async function writeFileSafe(filename, contents) { + ++renameCounter; + const prefix = "[ " + renameCounter + ":" + niceFileName(filename) + " ] "; + const transactionId = String(new Date().getTime()) + "." + renameCounter; + + if (fileLock.isBusy()) { + console.warn(prefix, "Concurrent write process on", filename); + } + + await fileLock.acquire(filename, async () => { + console.log(prefix, "Starting write on", niceFileName(filename), "in transaction", transactionId); + + if (!fs.existsSync(filename)) { + // this one is easy + console.log(prefix, "Writing file instantly because it does not exist:", niceFileName(filename)); + fs.writeFileSync(filename, contents, { encoding: "utf8" }); + return; + } + + // first, write a temporary file (.tmp-XXX) + const tempName = filename + ".tmp-" + transactionId; + console.log(prefix, "Writing temporary file", niceFileName(tempName)); + fs.writeFileSync(tempName, contents, { encoding: "utf8" }); + + // now, rename the original file to (.backup-XXX) + const oldTemporaryName = filename + ".backup-" + transactionId; + console.log( + prefix, + "Renaming old file", + niceFileName(filename), + "to", + niceFileName(oldTemporaryName) + ); + fs.renameSync(filename, oldTemporaryName); + + // now, rename the temporary file (.tmp-XXX) to the target + console.log( + prefix, + "Renaming the temporary file", + niceFileName(tempName), + "to the original", + niceFileName(filename) + ); + fs.renameSync(tempName, filename); + + // we are done now, try to create a backup, but don't fail if the backup fails + try { + // check if there is an old backup file + const backupFileName = filename + ".backup"; + if (fs.existsSync(backupFileName)) { + console.log(prefix, "Deleting old backup file", niceFileName(backupFileName)); + // delete the old backup + fs.unlinkSync(backupFileName); + } + + // rename the old file to the new backup file + console.log(prefix, "Moving", niceFileName(oldTemporaryName), "to the backup file location"); + fs.renameSync(oldTemporaryName, backupFileName); + } catch (ex) { + console.error(prefix, "Failed to switch backup files:", ex); + } + }); +} + +async function performFsJob(job) { + const fname = path.join(storePath, job.filename); + + switch (job.type) { + case "read": { + if (!fs.existsSync(fname)) { + return { + // Special FILE_NOT_FOUND error code + error: "file_not_found", + }; + } + + try { + const data = fs.readFileSync(fname, { encoding: "utf8" }); + return { + success: true, + data, + }; + } catch (ex) { + console.error(ex); + return { + error: ex, + }; + } + } + case "write": { + try { + writeFileSafe(fname, job.contents); + return { + success: true, + data: job.contents, + }; + } catch (ex) { + console.error(ex); + return { + error: ex, + }; + } + } + + case "delete": { + try { + fs.unlinkSync(fname); + } catch (ex) { + console.error(ex); + return { + error: ex, + }; + } + + return { + success: true, + data: null, + }; + } + + default: + throw new Error("Unkown fs job: " + job.type); + } +} + +ipcMain.on("fs-job", async (event, arg) => { + const result = await performFsJob(arg); + event.sender.send("fs-response", { id: arg.id, result }); +}); +wegame.init(isDev); +wegame.listen(); diff --git a/electron_wegame/package.json b/electron_wegame/package.json new file mode 100644 index 00000000..aba5bb6a --- /dev/null +++ b/electron_wegame/package.json @@ -0,0 +1,18 @@ +{ + "name": "electron", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "private": true, + "scripts": { + "startDev": "electron --disable-direct-composition --in-process-gpu . --dev --local", + "startDevGpu": "electron --enable-gpu-rasterization --enable-accelerated-2d-canvas --num-raster-threads=8 --enable-zero-copy . --dev --local", + "start": "electron --disable-direct-composition --in-process-gpu ." + }, + "devDependencies": { + "electron": "^13.1.6" + }, + "dependencies": { + "async-lock": "^1.2.8" + } +} diff --git a/electron_wegame/wegame.js b/electron_wegame/wegame.js new file mode 100644 index 00000000..05a0e186 --- /dev/null +++ b/electron_wegame/wegame.js @@ -0,0 +1,63 @@ +const railsdk = require("./wegame_sdk/railsdk.js"); +const { dialog, app, remote, ipcMain } = require("electron"); + +function init(isDev) { + console.log("Step 1: wegame: init"); + + try { + console.log("Step 2: Calling need restart app"); + const need_restart = railsdk.RailNeedRestartAppForCheckingEnvironment( + 2001639, + [`--rail_render_pid=${process.pid}`] //,"--rail_debug_mode", + ); + console.log("Step 3: Needs restart =", need_restart); + if (need_restart) { + console.error("Step 4: Need restart"); + dialog.showErrorBox("加载RailSDK失败", "请先运行WeGame开发者版本"); + return; + } + } catch (err) { + console.error("Rail SDK error:", err); + dialog.showErrorBox("加载RailSDK失败", err); + return; + } + + console.log("Step 5: starting rail sdk"); + if (railsdk.RailInitialize() === false) { + console.error("RailInitialize() = false"); + dialog.showErrorBox("RailInitialize调用失败", "请先运行WeGame开发者版本"); + return; + } + + console.log("Initialize RailSDK success!"); + + railsdk.RailRegisterEvent(railsdk.RailEventID.kRailEventSystemStateChanged, event => { + console.log(event); + if (event.result === railsdk.RailResult.kSuccess) { + if ( + event.state === railsdk.RailSystemState.kSystemStatePlatformOffline || + event.state === railsdk.RailSystemState.kSystemStatePlatformExit || + event.state === railsdk.RailSystemState.kSystemStateGameExitByAntiAddiction + ) { + app.exit(); + } + } + }); +} + +function listen() { + console.log("wegame: listen"); + ipcMain.handle("profanity-check", async (event, data) => { + if (data.length === 0) { + return ""; + } + const result = railsdk.RailUtils.DirtyWordsFilter(data, true); + if (result.check_result.dirty_type !== 0 /** kRailDirtyWordsTypeNormalAllowWords */) { + return result.check_result.replace_string; + } + + return data; + }); +} + +module.exports = { init, listen }; diff --git a/electron_wegame/yarn.lock b/electron_wegame/yarn.lock new file mode 100644 index 00000000..69c595ea --- /dev/null +++ b/electron_wegame/yarn.lock @@ -0,0 +1,578 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@electron/get@^1.0.1": + version "1.12.4" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.4.tgz#a5971113fc1bf8fa12a8789dc20152a7359f06ab" + integrity sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^9.6.0" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^2.0.2" + global-tunnel-ng "^2.7.1" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/node@^14.6.2": + version "14.17.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.4.tgz#218712242446fc868d0e007af29a4408c7765bc0" + integrity sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A== + +async-lock@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.2.8.tgz#7b02bdfa2de603c0713acecd11184cf97bbc7c4c" + integrity sha512-G+26B2jc0Gw0EG/WN2M6IczuGepBsfR1+DtqLnyFSH4p2C668qkOCtEkGNVEaaNAVlYwEMazy1+/jnLxltBkIQ== + +boolean@^3.0.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.1.2.tgz#e30f210a26b02458482a8cc353ab06f262a780c2" + integrity sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw== + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +core-js@^3.6.5: + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.2.tgz#740660d2ff55ef34ce664d7e2455119c5bdd3d61" + integrity sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +electron@^13.1.6: + version "13.1.6" + resolved "https://registry.yarnpkg.com/electron/-/electron-13.1.6.tgz#6ecaf969255d62ce82cc0b5c948bf26e7dfb489b" + integrity sha512-XiB55/JTaQpDFQrD9pulYnOGwaWeMyRIub5ispvoE2bWBvM5zVMLptwMLb0m3KTMrfSkzhedZvOu7fwYvR7L7Q== + dependencies: + "@electron/get" "^1.0.1" + "@types/node" "^14.6.2" + extract-zip "^1.0.3" + +encodeurl@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +extract-zip@^1.0.3: + version "1.7.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" + integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== + dependencies: + concat-stream "^1.6.2" + debug "^2.6.9" + mkdirp "^0.5.4" + yauzl "^2.10.0" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +global-agent@^2.0.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.2.0.tgz#566331b0646e6bf79429a16877685c4a1fbf76dc" + integrity sha512-+20KpaW6DDLqhG7JDiJpD1JvNvb8ts+TNl7BPOYcURqCrXqnN1Vf+XVOrkKJAFPqfX+oEhsdzOj1hLWkBTdNJg== + dependencies: + boolean "^3.0.1" + core-js "^3.6.5" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +global-tunnel-ng@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" + integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== + dependencies: + encodeurl "^1.0.2" + lodash "^4.17.10" + npm-conf "^1.1.3" + tunnel "^0.0.6" + +globalthis@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" + integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== + dependencies: + define-properties "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +lodash@^4.17.10: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@^0.5.4: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +npm-conf@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" diff --git a/gulp/bundle-loader.js b/gulp/bundle-loader.js index d8bb8c24..16db26fa 100644 --- a/gulp/bundle-loader.js +++ b/gulp/bundle-loader.js @@ -54,8 +54,11 @@ document.documentElement.appendChild(element); } - window.addEventListener("error", errorHandler); - window.addEventListener("unhandledrejection", errorHandler); + + if (window.location.host.indexOf("localhost") < 0) { + window.addEventListener("error", errorHandler); + window.addEventListener("unhandledrejection", errorHandler); + } function makeJsTag(src, integrity) { var script = document.createElement("script"); diff --git a/gulp/gulpfile.js b/gulp/gulpfile.js index 06bb627b..0f4f4185 100644 --- a/gulp/gulpfile.js +++ b/gulp/gulpfile.js @@ -139,7 +139,12 @@ gulp.task("main.webserver", () => { ); }); -function serve({ standalone, chineseVersion = false }) { +/** + * + * @param {object} param0 + * @param {"web"|"standalone"|"china"|"wegame"} param0.version + */ +function serve({ version = "web" }) { browserSync.init({ server: buildFolder, port: 3005, @@ -163,7 +168,7 @@ function serve({ standalone, chineseVersion = false }) { gulp.watch(["../src/**/*.scss"], gulp.series("css.dev")); // Watch .html files, those trigger a html rebuild - gulp.watch("../src/**/*.html", gulp.series(standalone ? "html.standalone-dev" : "html.dev")); + gulp.watch("../src/**/*.html", gulp.series(version === "web" ? "html.dev" : "html.standalone-dev")); // Watch sound files // gulp.watch(["../res_raw/sounds/**/*.mp3", "../res_raw/sounds/**/*.wav"], gulp.series("sounds.dev")); @@ -199,14 +204,25 @@ function serve({ standalone, chineseVersion = false }) { return gulp.src(path).pipe(browserSync.reload({ stream: true })); }); - // Start the webpack watching server (Will never return) - if (standalone) { - gulp.series("js.standalone-dev.watch")(() => true); - } else { - if (chineseVersion) { - gulp.series("china.js.dev.watch")(() => true); - } else { + switch (version) { + case "web": { gulp.series("js.dev.watch")(() => true); + break; + } + case "standalone": { + gulp.series("js.standalone-dev.watch")(() => true); + break; + } + case "china": { + gulp.series("china.js.dev.watch")(() => true); + break; + } + case "wegame": { + gulp.series("wegame.js.dev.watch")(() => true); + break; + } + default: { + throw new Error("Unknown version " + version); } } } @@ -294,7 +310,7 @@ gulp.task( // Builds everything (standalone-prod) -for (const prefix of ["", "china."]) { +for (const prefix of ["", "china.", "wegame."]) { gulp.task( prefix + "step.standalone-prod.code", gulp.series("sounds.fullbuildHQ", "translations.fullBuild", prefix + "js.standalone-prod") @@ -327,25 +343,45 @@ gulp.task( ); gulp.task("main.deploy.prod", gulp.series("utils.requireCleanWorkingTree", "build.prod", "ftp.upload.prod")); gulp.task("main.deploy.all", gulp.series("main.deploy.staging", "main.deploy.prod")); + +// steam gulp.task("regular.main.standalone", gulp.series("build.standalone-prod", "standalone.package.prod")); + +// china gulp.task( "china.main.standalone", gulp.series("china.build.standalone-prod", "china.standalone.package.prod") ); -gulp.task("standalone.all", gulp.series("regular.main.standalone", "china.main.standalone")); + +// wegame +gulp.task( + "wegame.main.standalone", + gulp.series("wegame.build.standalone-prod", "wegame.standalone.package.prod") +); + +// all (except wegame) +gulp.task("standalone.steam", gulp.series("regular.main.standalone", "china.main.standalone")); +gulp.task( + "standalone.all", + gulp.series("regular.main.standalone", "china.main.standalone", "wegame.main.standalone") +); // Live-development gulp.task( "main.serveDev", - gulp.series("build.dev", () => serve({ standalone: false })) + gulp.series("build.dev", () => serve({ version: "web" })) ); gulp.task( "main.serveStandalone", - gulp.series("build.standalone.dev", () => serve({ standalone: true })) + gulp.series("build.standalone.dev", () => serve({ version: "standalone" })) ); gulp.task( "china.main.serveDev", - gulp.series("build.dev", () => serve({ standalone: false, chineseVersion: true })) + gulp.series("build.dev", () => serve({ version: "china" })) +); +gulp.task( + "wegame.main.serveDev", + gulp.series("build.dev", () => serve({ version: "wegame" })) ); gulp.task("default", gulp.series("main.serveDev")); diff --git a/gulp/js.js b/gulp/js.js index cfaedb8c..93dab464 100644 --- a/gulp/js.js +++ b/gulp/js.js @@ -59,6 +59,36 @@ function gulptasksJS($, gulp, buildFolder, browserSync) { .pipe(gulp.dest(buildFolder)); }); + //// DEV WEGAME + + gulp.task("wegame.js.dev.watch", () => { + return gulp + .src("../src/js/main.js") + .pipe( + $.webpackStream( + requireUncached("./webpack.config.js")({ + watch: true, + wegameVersion: true, + }) + ) + ) + .pipe(gulp.dest(buildFolder)) + .pipe(browserSync.stream()); + }); + + gulp.task("wegame.js.dev", () => { + return gulp + .src("../src/js/main.js") + .pipe( + $.webpackStream( + requireUncached("./webpack.config.js")({ + wegameVersion: true, + }) + ) + ) + .pipe(gulp.dest(buildFolder)); + }); + //// STAGING gulp.task("js.staging.transpiled", () => { @@ -208,6 +238,23 @@ function gulptasksJS($, gulp, buildFolder, browserSync) { ) .pipe(gulp.dest(buildFolder)); }); + + gulp.task("wegame.js.standalone-prod", () => { + return gulp + .src("../src/js/main.js") + .pipe( + $.webpackStream( + requireUncached("./webpack.production.config.js")({ + enableAssert: false, + environment: "prod", + es6: false, + standalone: true, + wegameVersion: true, + }) + ) + ) + .pipe(gulp.dest(buildFolder)); + }); } module.exports = { diff --git a/gulp/standalone.js b/gulp/standalone.js index ffec8539..81b41929 100644 --- a/gulp/standalone.js +++ b/gulp/standalone.js @@ -9,21 +9,31 @@ const buildutils = require("./buildutils"); const execSync = require("child_process").execSync; function gulptasksStandalone($, gulp) { - const electronBaseDir = path.join(__dirname, "..", "electron"); const targets = [ { tempDestDir: path.join(__dirname, "..", "tmp_standalone_files"), suffix: "", taskPrefix: "", + electronBaseDir: path.join(__dirname, "..", "electron"), + steam: true, }, { tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_china"), suffix: "china", taskPrefix: "china.", + electronBaseDir: path.join(__dirname, "..", "electron"), + steam: true, + }, + { + tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_wegame"), + suffix: "wegame", + taskPrefix: "wegame.", + electronBaseDir: path.join(__dirname, "..", "electron_wegame"), + steam: false, }, ]; - for (const { tempDestDir, suffix, taskPrefix } of targets) { + for (const { tempDestDir, suffix, taskPrefix, electronBaseDir, steam } of targets) { const tempDestBuildDir = path.join(tempDestDir, "built"); gulp.task(taskPrefix + "standalone.prepare.cleanup", () => { @@ -34,13 +44,17 @@ function gulptasksStandalone($, gulp) { const requiredFiles = [ path.join(electronBaseDir, "node_modules", "**", "*.*"), path.join(electronBaseDir, "node_modules", "**", ".*"), - path.join(electronBaseDir, "steam_appid.txt"), + path.join(electronBaseDir, "wegame_sdk", "**", "*.*"), + path.join(electronBaseDir, "wegame_sdk", "**", ".*"), path.join(electronBaseDir, "favicon*"), // fails on platforms which support symlinks // https://github.com/gulpjs/gulp/issues/1427 // path.join(electronBaseDir, "node_modules", "**", "*"), ]; + if (steam) { + requiredFiles.push(path.join(electronBaseDir, "steam_appid.txt")); + } return gulp.src(requiredFiles, { base: electronBaseDir }).pipe(gulp.dest(tempDestBuildDir)); }); @@ -64,6 +78,11 @@ function gulptasksStandalone($, gulp) { }); gulp.task(taskPrefix + "standalone.prepareVDF", cb => { + if (!steam) { + cb(); + return; + } + const hash = buildutils.getRevision(); const steampipeDir = path.join(__dirname, "steampipe", "scripts"); @@ -116,11 +135,10 @@ function gulptasksStandalone($, gulp) { const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml")); const privateArtifactsPath = "node_modules/shapez.io-private-artifacts"; - let asar; - if (fs.existsSync(path.join(tempDestBuildDir, privateArtifactsPath))) { + let asar = steam; + if (steam && fs.existsSync(path.join(tempDestBuildDir, privateArtifactsPath))) { + // @ts-expect-error asar = { unpackDir: privateArtifactsPath }; - } else { - asar = true; } packager({ @@ -147,24 +165,26 @@ function gulptasksStandalone($, gulp) { return; } - fs.writeFileSync( - path.join(appPath, "LICENSE"), - fs.readFileSync(path.join(__dirname, "..", "LICENSE")) - ); - - fse.copySync( - path.join(tempDestBuildDir, "steam_appid.txt"), - path.join(appPath, "steam_appid.txt") - ); - - fs.writeFileSync(path.join(appPath, ".itch.toml"), tomlFile); - - if (platform === "linux") { + if (steam) { fs.writeFileSync( - path.join(appPath, "play.sh"), - '#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n' + path.join(appPath, "LICENSE"), + fs.readFileSync(path.join(__dirname, "..", "LICENSE")) ); - fs.chmodSync(path.join(appPath, "play.sh"), 0o775); + + fse.copySync( + path.join(tempDestBuildDir, "steam_appid.txt"), + path.join(appPath, "steam_appid.txt") + ); + + fs.writeFileSync(path.join(appPath, ".itch.toml"), tomlFile); + + if (platform === "linux") { + fs.writeFileSync( + path.join(appPath, "play.sh"), + '#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n' + ); + fs.chmodSync(path.join(appPath, "play.sh"), 0o775); + } } }); diff --git a/gulp/steampipe/scripts/app.vdf.template b/gulp/steampipe/scripts/app.vdf.template index 32634060..5359acfe 100644 --- a/gulp/steampipe/scripts/app.vdf.template +++ b/gulp/steampipe/scripts/app.vdf.template @@ -2,16 +2,16 @@ { "appid" "1318690" "desc" "$DESC$" - "buildoutput" "C:\work\shapez.io\gulp\steampipe\steamtemp" + "buildoutput" "C:\work\shapez\shapez.io\gulp\steampipe\steamtemp" "contentroot" "" "setlive" "" "preview" "0" "local" "" "depots" { - "1318691" "C:\work\shapez.io\gulp\steampipe\scripts\windows.vdf" - "1318694" "C:\work\shapez.io\gulp\steampipe\scripts\china-windows.vdf" - "1318692" "C:\work\shapez.io\gulp\steampipe\scripts\linux.vdf" - "1318695" "C:\work\shapez.io\gulp\steampipe\scripts\china-linux.vdf" + "1318691" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\windows.vdf" + "1318694" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\china-windows.vdf" + "1318692" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\linux.vdf" + "1318695" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\china-linux.vdf" } } diff --git a/gulp/steampipe/scripts/china-linux.vdf b/gulp/steampipe/scripts/china-linux.vdf index 9882dc96..3906312b 100644 --- a/gulp/steampipe/scripts/china-linux.vdf +++ b/gulp/steampipe/scripts/china-linux.vdf @@ -1,7 +1,7 @@ "DepotBuildConfig" { "DepotID" "1318695" - "contentroot" "C:\work\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-linux-x64" + "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-linux-x64" "FileMapping" { "LocalPath" "*" diff --git a/gulp/steampipe/scripts/china-windows.vdf b/gulp/steampipe/scripts/china-windows.vdf index 4b024228..3a098cbc 100644 --- a/gulp/steampipe/scripts/china-windows.vdf +++ b/gulp/steampipe/scripts/china-windows.vdf @@ -1,7 +1,7 @@ "DepotBuildConfig" { "DepotID" "1318694" - "contentroot" "C:\work\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-win32-x64" + "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-win32-x64" "FileMapping" { "LocalPath" "*" diff --git a/gulp/steampipe/scripts/linux.vdf b/gulp/steampipe/scripts/linux.vdf index df1a86cc..60dfcca5 100644 --- a/gulp/steampipe/scripts/linux.vdf +++ b/gulp/steampipe/scripts/linux.vdf @@ -1,7 +1,7 @@ "DepotBuildConfig" { "DepotID" "1318692" - "contentroot" "C:\work\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64" + "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64" "FileMapping" { "LocalPath" "*" diff --git a/gulp/steampipe/scripts/windows.vdf b/gulp/steampipe/scripts/windows.vdf index bf0e8721..7d0db436 100644 --- a/gulp/steampipe/scripts/windows.vdf +++ b/gulp/steampipe/scripts/windows.vdf @@ -1,7 +1,7 @@ "DepotBuildConfig" { "DepotID" "1318691" - "contentroot" "C:\work\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64" + "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64" "FileMapping" { "LocalPath" "*" diff --git a/gulp/webpack.config.js b/gulp/webpack.config.js index 3f666e73..14987cfa 100644 --- a/gulp/webpack.config.js +++ b/gulp/webpack.config.js @@ -6,7 +6,7 @@ const { getRevision, getVersion, getAllResourceImages } = require("./buildutils" const lzString = require("lz-string"); const CircularDependencyPlugin = require("circular-dependency-plugin"); -module.exports = ({ watch = false, standalone = false, chineseVersion = false }) => { +module.exports = ({ watch = false, standalone = false, chineseVersion = false, wegameVersion = false }) => { return { mode: "development", devtool: "cheap-source-map", @@ -35,6 +35,7 @@ module.exports = ({ watch = false, standalone = false, chineseVersion = false }) lzString.compressToEncodedURIComponent("http://localhost:10005/v1") ), G_CHINA_VERSION: JSON.stringify(chineseVersion), + G_WEGAME_VERSION: JSON.stringify(wegameVersion), G_IS_DEV: "true", G_IS_RELEASE: "false", G_IS_MOBILE_APP: "false", diff --git a/gulp/webpack.production.config.js b/gulp/webpack.production.config.js index 1779a76f..fd7551e0 100644 --- a/gulp/webpack.production.config.js +++ b/gulp/webpack.production.config.js @@ -17,6 +17,7 @@ module.exports = ({ isBrowser = true, mobileApp = false, chineseVersion = false, + wegameVersion = false, }) => { const globalDefs = { assert: enableAssert ? "window.assert" : "false && window.assert", @@ -25,6 +26,7 @@ module.exports = ({ G_IS_DEV: "false", G_CHINA_VERSION: JSON.stringify(chineseVersion), + G_WEGAME_VERSION: JSON.stringify(wegameVersion), G_IS_RELEASE: environment === "prod" ? "true" : "false", G_IS_STANDALONE: standalone ? "true" : "false", G_IS_BROWSER: isBrowser ? "true" : "false", @@ -40,7 +42,7 @@ module.exports = ({ G_ALL_UI_IMAGES: JSON.stringify(getAllResourceImages()), }; - const minifyNames = environment === "prod"; + const minifyNames = false; return { mode: "production", diff --git a/res/logo_wegame.png b/res/logo_wegame.png new file mode 100644 index 00000000..ac9092b3 Binary files /dev/null and b/res/logo_wegame.png differ diff --git a/res/puzzle_dlc_logo.png b/res/puzzle_dlc_logo.png new file mode 100644 index 00000000..1c430c82 Binary files /dev/null and b/res/puzzle_dlc_logo.png differ diff --git a/res/puzzle_dlc_logo_china.png b/res/puzzle_dlc_logo_china.png new file mode 100644 index 00000000..c45b6cdc Binary files /dev/null and b/res/puzzle_dlc_logo_china.png differ diff --git a/res/ui/building_icons/block.png b/res/ui/building_icons/block.png new file mode 100644 index 00000000..a6d914f6 Binary files /dev/null and b/res/ui/building_icons/block.png differ diff --git a/res/ui/building_icons/constant_producer.png b/res/ui/building_icons/constant_producer.png new file mode 100644 index 00000000..f7ac8afa Binary files /dev/null and b/res/ui/building_icons/constant_producer.png differ diff --git a/res/ui/building_icons/goal_acceptor.png b/res/ui/building_icons/goal_acceptor.png new file mode 100644 index 00000000..9087c155 Binary files /dev/null and b/res/ui/building_icons/goal_acceptor.png differ diff --git a/res/ui/building_tutorials/block.png b/res/ui/building_tutorials/block.png new file mode 100644 index 00000000..73925265 Binary files /dev/null and b/res/ui/building_tutorials/block.png differ diff --git a/res/ui/building_tutorials/constant_producer.png b/res/ui/building_tutorials/constant_producer.png new file mode 100644 index 00000000..8af4da33 Binary files /dev/null and b/res/ui/building_tutorials/constant_producer.png differ diff --git a/res/ui/building_tutorials/goal_acceptor.png b/res/ui/building_tutorials/goal_acceptor.png new file mode 100644 index 00000000..054783b6 Binary files /dev/null and b/res/ui/building_tutorials/goal_acceptor.png differ diff --git a/res/ui/icons/puzzle_action_liked_no.png b/res/ui/icons/puzzle_action_liked_no.png new file mode 100644 index 00000000..7b30f81e Binary files /dev/null and b/res/ui/icons/puzzle_action_liked_no.png differ diff --git a/res/ui/icons/puzzle_action_liked_yes.png b/res/ui/icons/puzzle_action_liked_yes.png new file mode 100644 index 00000000..07b8bbcf Binary files /dev/null and b/res/ui/icons/puzzle_action_liked_yes.png differ diff --git a/res/ui/icons/puzzle_complete_indicator.png b/res/ui/icons/puzzle_complete_indicator.png new file mode 100644 index 00000000..e2c95b8b Binary files /dev/null and b/res/ui/icons/puzzle_complete_indicator.png differ diff --git a/res/ui/icons/puzzle_complete_indicator_inverse.png b/res/ui/icons/puzzle_complete_indicator_inverse.png new file mode 100644 index 00000000..f3946efc Binary files /dev/null and b/res/ui/icons/puzzle_complete_indicator_inverse.png differ diff --git a/res/ui/icons/puzzle_completion_rate.png b/res/ui/icons/puzzle_completion_rate.png new file mode 100644 index 00000000..2b07ce22 Binary files /dev/null and b/res/ui/icons/puzzle_completion_rate.png differ diff --git a/res/ui/icons/puzzle_plays.png b/res/ui/icons/puzzle_plays.png new file mode 100644 index 00000000..358b5362 Binary files /dev/null and b/res/ui/icons/puzzle_plays.png differ diff --git a/res/ui/icons/puzzle_upvotes.png b/res/ui/icons/puzzle_upvotes.png new file mode 100644 index 00000000..685d4bd7 Binary files /dev/null and b/res/ui/icons/puzzle_upvotes.png differ diff --git a/res/ui/icons/state_next_button.png b/res/ui/icons/state_next_button.png new file mode 100644 index 00000000..d6e09644 Binary files /dev/null and b/res/ui/icons/state_next_button.png differ diff --git a/res/ui/interactive_tutorial.cn.noinline/1_1_extractor.gif b/res/ui/interactive_tutorial.cn.noinline/1_1_extractor.gif new file mode 100644 index 00000000..c7208ac2 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/1_1_extractor.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/1_2_conveyor.gif b/res/ui/interactive_tutorial.cn.noinline/1_2_conveyor.gif new file mode 100644 index 00000000..8432b676 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/1_2_conveyor.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/1_3_expand.gif b/res/ui/interactive_tutorial.cn.noinline/1_3_expand.gif new file mode 100644 index 00000000..9c655ab1 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/1_3_expand.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/21_1_place_quad_painter.gif b/res/ui/interactive_tutorial.cn.noinline/21_1_place_quad_painter.gif new file mode 100644 index 00000000..ea854cf2 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/21_1_place_quad_painter.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/21_2_switch_to_wires.gif b/res/ui/interactive_tutorial.cn.noinline/21_2_switch_to_wires.gif new file mode 100644 index 00000000..78ab6fd2 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/21_2_switch_to_wires.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/21_3_place_button.gif b/res/ui/interactive_tutorial.cn.noinline/21_3_place_button.gif new file mode 100644 index 00000000..52ffb076 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/21_3_place_button.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/21_4_press_button.gif b/res/ui/interactive_tutorial.cn.noinline/21_4_press_button.gif new file mode 100644 index 00000000..5d79f1e3 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/21_4_press_button.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/2_1_place_cutter.gif b/res/ui/interactive_tutorial.cn.noinline/2_1_place_cutter.gif new file mode 100644 index 00000000..1678c0b2 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/2_1_place_cutter.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/2_2_place_trash.gif b/res/ui/interactive_tutorial.cn.noinline/2_2_place_trash.gif new file mode 100644 index 00000000..0d60fa9f Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/2_2_place_trash.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/2_3_more_cutters.gif b/res/ui/interactive_tutorial.cn.noinline/2_3_more_cutters.gif new file mode 100644 index 00000000..50ce88f9 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/2_3_more_cutters.gif differ diff --git a/res/ui/interactive_tutorial.cn.noinline/3_1_rectangles.gif b/res/ui/interactive_tutorial.cn.noinline/3_1_rectangles.gif new file mode 100644 index 00000000..81668af8 Binary files /dev/null and b/res/ui/interactive_tutorial.cn.noinline/3_1_rectangles.gif differ diff --git a/res/ui/languages/he.svg b/res/ui/languages/he.svg new file mode 100644 index 00000000..aaa64e98 --- /dev/null +++ b/res/ui/languages/he.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/ui/puzzle_dlc_logo.png b/res/ui/puzzle_dlc_logo.png new file mode 100644 index 00000000..1c430c82 Binary files /dev/null and b/res/ui/puzzle_dlc_logo.png differ diff --git a/res/ui/puzzle_dlc_logo_china.png b/res/ui/puzzle_dlc_logo_china.png new file mode 100644 index 00000000..c45b6cdc Binary files /dev/null and b/res/ui/puzzle_dlc_logo_china.png differ diff --git a/res/ui/puzzle_dlc_logo_inverse.png b/res/ui/puzzle_dlc_logo_inverse.png new file mode 100644 index 00000000..4709f5c4 Binary files /dev/null and b/res/ui/puzzle_dlc_logo_inverse.png differ diff --git a/res/ui/wegame_isbn_rating.jpg b/res/ui/wegame_isbn_rating.jpg new file mode 100644 index 00000000..581dd744 Binary files /dev/null and b/res/ui/wegame_isbn_rating.jpg differ diff --git a/res_raw/sounds/music/puzzle-full.mp3 b/res_raw/sounds/music/puzzle-full.mp3 new file mode 100644 index 00000000..a2c0d80a Binary files /dev/null and b/res_raw/sounds/music/puzzle-full.mp3 differ diff --git a/res_raw/sprites/blueprints/block.png b/res_raw/sprites/blueprints/block.png new file mode 100644 index 00000000..5a27786e Binary files /dev/null and b/res_raw/sprites/blueprints/block.png differ diff --git a/res_raw/sprites/blueprints/constant_producer.png b/res_raw/sprites/blueprints/constant_producer.png new file mode 100644 index 00000000..417a7886 Binary files /dev/null and b/res_raw/sprites/blueprints/constant_producer.png differ diff --git a/res_raw/sprites/blueprints/goal_acceptor.png b/res_raw/sprites/blueprints/goal_acceptor.png new file mode 100644 index 00000000..58097279 Binary files /dev/null and b/res_raw/sprites/blueprints/goal_acceptor.png differ diff --git a/res_raw/sprites/blueprints/underground_belt_exit-tier2.png b/res_raw/sprites/blueprints/underground_belt_exit-tier2.png index be78107b..15dc6b86 100644 Binary files a/res_raw/sprites/blueprints/underground_belt_exit-tier2.png and b/res_raw/sprites/blueprints/underground_belt_exit-tier2.png differ diff --git a/res_raw/sprites/buildings/block.png b/res_raw/sprites/buildings/block.png new file mode 100644 index 00000000..90855c82 Binary files /dev/null and b/res_raw/sprites/buildings/block.png differ diff --git a/res_raw/sprites/buildings/constant_producer.png b/res_raw/sprites/buildings/constant_producer.png new file mode 100644 index 00000000..9ea15eaf Binary files /dev/null and b/res_raw/sprites/buildings/constant_producer.png differ diff --git a/res_raw/sprites/buildings/goal_acceptor.png b/res_raw/sprites/buildings/goal_acceptor.png new file mode 100644 index 00000000..17fa224f Binary files /dev/null and b/res_raw/sprites/buildings/goal_acceptor.png differ diff --git a/res_raw/sprites/create_blueprint_previews.py b/res_raw/sprites/create_blueprint_previews.py index 96688fe4..714804d3 100644 --- a/res_raw/sprites/create_blueprint_previews.py +++ b/res_raw/sprites/create_blueprint_previews.py @@ -41,7 +41,7 @@ def process_image(data, outfilename, src_image): if isWire: targetR = 255 targetG = 104 - targetB = 232 + targetB = 232 for x in range(img.width): for y in range(img.height): @@ -85,6 +85,8 @@ def generate_blueprint_sprite(infilename, outfilename): buildings = listdir("buildings") for buildingId in buildings: + if not ".png" in buildingId: + continue if "hub" in buildingId: continue if "wire-" in buildingId: diff --git a/src/css/ingame_hud/beta_overlay.scss b/src/css/ingame_hud/beta_overlay.scss index caadd127..08eba960 100644 --- a/src/css/ingame_hud/beta_overlay.scss +++ b/src/css/ingame_hud/beta_overlay.scss @@ -1,6 +1,6 @@ #ingame_HUD_BetaOverlay { position: fixed; - @include S(top, 10px); + @include S(top, 70px); left: 50%; transform: translateX(-50%); color: $colorRedBright; diff --git a/src/css/ingame_hud/buildings_toolbar.scss b/src/css/ingame_hud/buildings_toolbar.scss index 54205d64..3af5edf4 100644 --- a/src/css/ingame_hud/buildings_toolbar.scss +++ b/src/css/ingame_hud/buildings_toolbar.scss @@ -37,7 +37,7 @@ .building { @include S(width, 30px); - @include S(height, 22px); + @include S(height, 30px); background-size: 45%; &:not(.unlocked) { @@ -49,65 +49,98 @@ } .building { - color: $accentColorDark; display: flex; - flex-direction: column; + @include S(width, 40px); position: relative; - align-items: center; - justify-content: center; - @include S(padding, 5px); - @include S(padding-bottom, 1px); - @include S(width, 35px); @include S(height, 40px); + .icon { + color: $accentColorDark; + display: flex; + flex-direction: column-reverse; + position: relative; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + padding: 0; + margin: 0; + @include S(border-radius, $globalBorderRadius); - background: center center / 70% no-repeat; + background: center center / 70% no-repeat; + } &:not(.unlocked) { - @include S(width, 20px); - opacity: 0.15; - background-image: none !important; - - &::before { - content: " "; - - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 4; - & { - /* @load-async */ - background: uiResource("locked_building.png") center center / #{D(20px)} #{D(20px)} - no-repeat; + @include S(width, 25px); + .icon { + opacity: 0.15; + } + &.editor { + .icon { + pointer-events: all; + cursor: pointer; + &:hover { + background-color: rgba(22, 30, 68, 0.1); + } + } + } + &:not(.editor) { + .icon { + background-image: uiResource("locked_building.png") !important; } } } - @include S(border-radius, $globalBorderRadius); - &.unlocked { - pointer-events: all; - transition: all 50ms ease-in-out; - transition-property: background-color, transform; + .icon { + pointer-events: all; + transition: all 50ms ease-in-out; + transition-property: background-color, transform; + cursor: pointer; - cursor: pointer; - &:hover { - background-color: rgba(30, 40, 90, 0.1); + &:hover { + background-color: rgba(30, 40, 90, 0.1); + } + + &.pressed { + transform: scale(0.9) !important; + } } - - &.pressed { - transform: scale(0.9) !important; - } - &.selected { // transform: scale(1.05); background-color: rgba(lighten($colorBlueBright, 9), 0.4); + @include S(border-radius, 2px); .keybinding { color: #111; } } + + .puzzle-lock { + & { + /* @load-async */ + background: uiResource("locked_building.png") center center / 90% no-repeat; + } + + display: grid; + grid-auto-flow: column; + + position: absolute; + @include S(top, -15px); + left: 50%; + transform: translateX(-50%) !important; + transition: all 0.12s ease-in-out; + transition-property: opacity, transform; + + cursor: pointer; + pointer-events: all; + + @include S(width, 12px); + @include S(height, 12px); + + &:hover { + opacity: 0.5; + } + } } } } diff --git a/src/css/ingame_hud/dialogs.scss b/src/css/ingame_hud/dialogs.scss index ad3f76d0..cc742d42 100644 --- a/src/css/ingame_hud/dialogs.scss +++ b/src/css/ingame_hud/dialogs.scss @@ -67,6 +67,14 @@ * { color: #fff; } + + display: flex; + flex-direction: column; + + .text { + text-transform: uppercase; + @include S(margin-bottom, 10px); + } } > .dialogInner { @@ -168,6 +176,11 @@ &.errored { background-color: rgb(250, 206, 206); + + &::placeholder { + color: #fff; + opacity: 0.8; + } } } diff --git a/src/css/ingame_hud/puzzle_back_to_menu.scss b/src/css/ingame_hud/puzzle_back_to_menu.scss new file mode 100644 index 00000000..564b592e --- /dev/null +++ b/src/css/ingame_hud/puzzle_back_to_menu.scss @@ -0,0 +1,41 @@ +#ingame_HUD_PuzzleBackToMenu { + position: absolute; + @include S(top, 10px); + @include S(left, 0px); + + display: flex; + flex-direction: column; + align-items: flex-start; + backdrop-filter: blur(D(1px)); + padding: D(3px); + + > .button { + @include PlainText; + pointer-events: all; + cursor: pointer; + position: relative; + color: #333438; + transition: all 0.12s ease-in-out; + transition-property: opacity, transform; + text-transform: uppercase; + @include PlainText; + @include S(width, 30px); + @include S(height, 30px); + + @include DarkThemeInvert; + + opacity: 1; + &:hover { + opacity: 0.9 !important; + } + + &.pressed { + transform: scale(0.95) !important; + } + + & { + /* @load-async */ + background: uiResource("icons/state_back_button.png") center center / D(15px) no-repeat; + } + } +} diff --git a/src/css/ingame_hud/puzzle_complete_notification.scss b/src/css/ingame_hud/puzzle_complete_notification.scss new file mode 100644 index 00000000..a35da83d --- /dev/null +++ b/src/css/ingame_hud/puzzle_complete_notification.scss @@ -0,0 +1,175 @@ +#ingame_HUD_PuzzleCompleteNotification { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: auto; + pointer-events: all; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + + & { + /* @load-async */ + background: rgba(#333538, 0.95) uiResource("dialog_bg_pattern.png") top left / #{D(10px)} repeat; + } + + @include InlineAnimation(0.1s ease-in-out) { + 0% { + opacity: 0; + } + } + + > .dialog { + // background: rgba(#222428, 0.5); + @include S(border-radius, $globalBorderRadius); + @include S(padding, 30px); + + @include InlineAnimation(0.5s ease-in-out) { + 0% { + opacity: 0; + } + } + + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + color: #fff; + text-align: center; + + > .title { + @include SuperHeading; + text-transform: uppercase; + @include S(font-size, 30px); + @include S(margin-bottom, 40px); + color: $colorGreenBright !important; + + @include InlineAnimation(0.5s ease-in-out) { + 0% { + transform: translateY(-50vh); + } + 50% { + transform: translateY(5vh); + } + 75% { + transform: translateY(-2vh); + } + } + } + + > .contents { + @include InlineAnimation(0.5s ease-in-out) { + 0% { + transform: translateX(-100vw); + } + 50% { + transform: translateX(5vw); + } + + 75% { + transform: translateX(-2vw); + } + } + + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + + > .stepLike { + display: flex; + flex-direction: column; + @include S(margin-bottom, 10px); + @include SuperSmallText; + + > .buttons { + display: flex; + align-items: center; + justify-content: center; + @include S(margin, 10px, 0); + + > button { + @include S(width, 60px); + @include S(height, 60px); + @include S(margin, 0, 10px); + box-sizing: border-box; + border-radius: 50%; + transition: opacity 0.12s ease-in-out, background-color 0.12s ease-in-out; + @include IncreasedClickArea(0px); + + &.liked-yes { + /* @load-async */ + background: uiResource("icons/puzzle_action_liked_yes.png") center 55% / 60% + no-repeat; + } + + &:hover:not(.active) { + opacity: 0.5 !important; + } + + &.active { + background-color: $colorRedBright !important; + @include InlineAnimation(0.3s ease-in-out) { + 0% { + transform: scale(0); + } + 50% { + transform: scale(1.2); + } + 100% { + transform: scale(1); + } + } + } + &:not(.active) { + opacity: 0.4; + } + } + } + } + + > .buttonBar { + display: flex; + @include S(margin-top, 20px); + + button.continue { + background: #555; + } + + button.menu { + background: #555; + } + + button.nextPuzzle { + background-color: $colorGreenBright; + } + + > button { + @include S(min-width, 100px); + @include S(padding, 8px, 16px); + @include S(margin, 0, 6px); + @include IncreasedClickArea(0px); + } + } + + > .actions { + position: absolute; + @include S(bottom, 40px); + + display: grid; + @include S(grid-gap, 15px); + grid-auto-flow: column; + + button { + @include SuperSmallText; + } + .report { + background-color: $accentColorDark; + } + } + } + } +} diff --git a/src/css/ingame_hud/puzzle_dlc_logo.scss b/src/css/ingame_hud/puzzle_dlc_logo.scss new file mode 100644 index 00000000..c2a64607 --- /dev/null +++ b/src/css/ingame_hud/puzzle_dlc_logo.scss @@ -0,0 +1,24 @@ +#ingame_HUD_PuzzleDLCLogo { + position: absolute; + @include S(width, 120px); + @include S(height, 40px); + @include S(left, 40px); + @include S(top, 7px); + + & { + /* @load-async */ + background: uiResource("puzzle_dlc_logo.png") center center / contain no-repeat; + } + + @include DarkThemeOverride { + & { + /* @load-async */ + background: uiResource("puzzle_dlc_logo_inverse.png") center center / contain no-repeat; + } + } + + &.china { + /* @load-async */ + background: uiResource("puzzle_dlc_logo_china.png") center center / contain no-repeat !important; + } +} diff --git a/src/css/ingame_hud/puzzle_editor_controls.scss b/src/css/ingame_hud/puzzle_editor_controls.scss new file mode 100644 index 00000000..7ce76b41 --- /dev/null +++ b/src/css/ingame_hud/puzzle_editor_controls.scss @@ -0,0 +1,36 @@ +#ingame_HUD_PuzzleEditorControls { + position: absolute; + + @include S(top, 70px); + @include S(left, 10px); + + display: flex; + flex-direction: column; + @include SuperDuperSmallText; + @include S(width, 200px); + + > span { + @include S(margin-bottom, 10px); + + strong { + font-weight: bold; + } + } + + @include DarkThemeInvert; +} + +#ingame_HUD_PuzzleEditorTitle { + position: absolute; + + @include S(top, 18px); + left: 50%; + transform: translateX(-50%); + text-transform: uppercase; + @include Heading; + text-align: center; + + @include DarkThemeOverride { + color: #eee; + } +} diff --git a/src/css/ingame_hud/puzzle_editor_review.scss b/src/css/ingame_hud/puzzle_editor_review.scss new file mode 100644 index 00000000..523d8025 --- /dev/null +++ b/src/css/ingame_hud/puzzle_editor_review.scss @@ -0,0 +1,50 @@ +#ingame_HUD_PuzzleEditorReview { + position: absolute; + @include S(top, 17px); + @include S(right, 10px); + + display: flex; + flex-direction: column; + align-items: flex-end; + backdrop-filter: blur(D(1px)); + padding: D(3px); + + > .button { + @include ButtonText; + @include IncreasedClickArea(0px); + pointer-events: all; + cursor: pointer; + position: relative; + color: #333438; + transition: all 0.12s ease-in-out; + text-transform: uppercase; + transition-property: opacity, transform; + @include PlainText; + @include S(padding-right, 25px); + opacity: 1; + + @include DarkThemeInvert; + + &:hover { + opacity: 0.9 !important; + } + + &.pressed { + transform: scale(0.95) !important; + } + + & { + /* @load-async */ + background: uiResource("icons/state_next_button.png") right center / D(15px) no-repeat; + } + } + + > .content { + @include SuperDuperSmallText; + @include S(width, 180px); + @include S(padding-right, 25px); + text-align: right; + text-transform: uppercase; + color: $accentColorDark; + } +} diff --git a/src/css/ingame_hud/puzzle_editor_settings.scss b/src/css/ingame_hud/puzzle_editor_settings.scss new file mode 100644 index 00000000..9d093c42 --- /dev/null +++ b/src/css/ingame_hud/puzzle_editor_settings.scss @@ -0,0 +1,71 @@ +#ingame_HUD_PuzzleEditorSettings { + position: absolute; + background: $ingameHudBg; + @include S(padding, 10px); + @include S(bottom, 60px); + @include S(left, 10px); + + @include SuperSmallText; + color: #eee; + display: flex; + flex-direction: column; + @include S(border-radius, $globalBorderRadius); + + > .section { + > label { + text-transform: uppercase; + } + + .plusMinus { + @include S(margin-top, 5px); + display: grid; + grid-template-columns: 1fr auto auto auto; + align-items: center; + @include S(grid-gap, 5px); + + label { + @include S(margin-right, 10px); + } + + button { + @include PlainText; + @include S(padding, 0); + display: flex; + align-items: center; + justify-content: center; + @include S(width, 15px); + @include S(height, 15px); + @include IncreasedClickArea(0px); + } + + .value { + text-align: center; + @include S(min-width, 15px); + } + } + + > .buttons { + > .buttonBar { + display: flex; + align-items: center; + @include S(margin-top, 10px); + > button { + @include S(margin-right, 4px); + @include SuperSmallText; + &:last-child { + margin-right: 0; + } + } + } + + > .buildingsButton { + display: grid; + align-items: center; + @include S(margin-top, 4px); + > button { + @include SuperSmallText; + } + } + } + } +} diff --git a/src/css/ingame_hud/puzzle_next.scss b/src/css/ingame_hud/puzzle_next.scss new file mode 100644 index 00000000..ee0f664f --- /dev/null +++ b/src/css/ingame_hud/puzzle_next.scss @@ -0,0 +1,41 @@ +#ingame_HUD_PuzzleNextPuzzle { + position: absolute; + @include S(top, 17px); + @include S(right, 10px); + + display: flex; + flex-direction: column; + align-items: flex-end; + backdrop-filter: blur(D(1px)); + padding: D(3px); + + > .button { + @include ButtonText; + @include IncreasedClickArea(0px); + pointer-events: all; + cursor: pointer; + position: relative; + color: #333438; + transition: all 0.12s ease-in-out; + text-transform: uppercase; + transition-property: opacity, transform; + @include PlainText; + @include S(padding-right, 25px); + opacity: 1; + + @include DarkThemeInvert; + + &:hover { + opacity: 0.9 !important; + } + + &.pressed { + transform: scale(0.95) !important; + } + + & { + /* @load-async */ + background: uiResource("icons/state_next_button.png") right center / D(15px) no-repeat; + } + } +} diff --git a/src/css/ingame_hud/puzzle_play_metadata.scss b/src/css/ingame_hud/puzzle_play_metadata.scss new file mode 100644 index 00000000..d0675b13 --- /dev/null +++ b/src/css/ingame_hud/puzzle_play_metadata.scss @@ -0,0 +1,129 @@ +#ingame_HUD_PuzzlePlayMetadata { + position: absolute; + + @include S(top, 70px); + @include S(left, 10px); + + display: flex; + flex-direction: column; + @include S(width, 200px); + + > .info { + display: flex; + flex-direction: column; + @include SuperSmallText; + @include S(margin-bottom, 5px); + + > label { + text-transform: uppercase; + @include SuperDuperSmallText; + color: $accentColorDark; + } + > span { + display: flex; + color: darken($accentColorDark, 25); + @include SuperSmallText; + @include DarkThemeOverride { + color: lighten($accentColorDark, 15); + } + } + } + + > .plays { + display: flex; + align-items: center; + justify-self: end; + align-self: end; + flex-direction: row; + @include S(margin-bottom, 10px); + opacity: 0.8; + @include DarkThemeInvert; + @include DarkThemeOverride { + opacity: 0.8; + } + + > .downloads { + @include SuperSmallText; + color: #000; + align-self: start; + justify-self: start; + font-weight: bold; + @include S(margin-right, 10px); + @include S(padding-left, 14px); + opacity: 0.7; + display: inline-flex; + align-items: center; + justify-content: center; + + & { + /* @load-async */ + background: uiResource("icons/puzzle_plays.png") #{D(2px)} center / #{D(8px)} #{D(8px)} no-repeat; + } + } + + > .likes { + @include SuperSmallText; + align-items: center; + justify-content: center; + color: #000; + align-self: start; + justify-self: start; + font-weight: bold; + @include S(padding-left, 14px); + opacity: 0.7; + & { + /* @load-async */ + background: uiResource("icons/puzzle_upvotes.png") #{D(2px)} center / #{D(8px)} #{D(8px)} no-repeat; + } + } + } + + > .key { + button { + @include S(margin-top, 2px); + } + } + + button { + @include SuperSmallText; + align-self: start; + @include S(min-width, 50px); + + &.report { + background-color: $accentColorDark; + @include SuperDuperSmallText; + } + } + + > .buttons { + display: flex; + flex-direction: column; + + > button { + @include S(margin-bottom, 4px); + } + } +} + +#ingame_HUD_PuzzlePlayTitle { + position: absolute; + + @include S(top, 18px); + left: 50%; + transform: translateX(-50%); + text-transform: uppercase; + @include Heading; + text-align: center; + + display: flex; + flex-direction: column; + + > .name { + @include PlainText; + opacity: 0.5; + } + + @include DarkThemeOverride { + color: #eee; + } +} diff --git a/src/css/ingame_hud/puzzle_play_settings.scss b/src/css/ingame_hud/puzzle_play_settings.scss new file mode 100644 index 00000000..b53d0829 --- /dev/null +++ b/src/css/ingame_hud/puzzle_play_settings.scss @@ -0,0 +1,23 @@ +#ingame_HUD_PuzzlePlaySettings { + position: absolute; + background: $ingameHudBg; + @include S(padding, 10px); + @include S(bottom, 60px); + @include S(left, 10px); + + @include SuperSmallText; + color: #eee; + display: flex; + flex-direction: column; + @include S(border-radius, $globalBorderRadius); + + > .section { + display: grid; + @include S(grid-gap, 5px); + grid-auto-flow: row; + + > button { + @include SuperSmallText; + } + } +} diff --git a/src/css/main.scss b/src/css/main.scss index 35d54e23..1ac4f537 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -21,6 +21,7 @@ @import "adinplay"; @import "changelog_skins"; +@import "states/wegame_splash"; @import "states/preload"; @import "states/main_menu"; @import "states/ingame"; @@ -29,6 +30,7 @@ @import "states/about"; @import "states/mobile_warning"; @import "states/changelog"; +@import "states/puzzle_menu"; @import "ingame_hud/buildings_toolbar"; @import "ingame_hud/building_placer"; @@ -55,12 +57,22 @@ @import "ingame_hud/sandbox_controller"; @import "ingame_hud/standalone_advantages"; @import "ingame_hud/cat_memes"; +@import "ingame_hud/puzzle_back_to_menu"; +@import "ingame_hud/puzzle_editor_review"; +@import "ingame_hud/puzzle_dlc_logo"; +@import "ingame_hud/puzzle_editor_controls"; +@import "ingame_hud/puzzle_editor_settings"; +@import "ingame_hud/puzzle_play_settings"; +@import "ingame_hud/puzzle_play_metadata"; +@import "ingame_hud/puzzle_complete_notification"; +@import "ingame_hud/puzzle_next"; // prettier-ignore $elements: // Base ingame_Canvas, ingame_VignetteOverlay, +ingame_HUD_PuzzleDLCLogo, // Ingame overlays ingame_HUD_Waypoints, @@ -71,6 +83,15 @@ ingame_HUD_PlacerVariants, ingame_HUD_PinnedShapes, ingame_HUD_GameMenu, ingame_HUD_KeybindingOverlay, +ingame_HUD_PuzzleBackToMenu, +ingame_HUD_PuzzleNextPuzzle, +ingame_HUD_PuzzleEditorReview, +ingame_HUD_PuzzleEditorControls, +ingame_HUD_PuzzleEditorTitle, +ingame_HUD_PuzzleEditorSettings, +ingame_HUD_PuzzlePlaySettings, +ingame_HUD_PuzzlePlayMetadata, +ingame_HUD_PuzzlePlayTitle, ingame_HUD_Notifications, ingame_HUD_DebugInfo, ingame_HUD_EntityDebugger, @@ -94,6 +115,7 @@ ingame_HUD_Statistics, ingame_HUD_ShapeViewer, ingame_HUD_StandaloneAdvantages, ingame_HUD_UnlockNotification, +ingame_HUD_PuzzleCompleteNotification, ingame_HUD_SettingsMenu, ingame_HUD_ModalDialogs, ingame_HUD_CatMemes; @@ -113,6 +135,9 @@ body.uiHidden { #ingame_HUD_PlacementHints, #ingame_HUD_GameMenu, #ingame_HUD_PinnedShapes, + #ingame_HUD_PuzzleBackToMenu, + #ingame_HUD_PuzzleNextPuzzle, + #ingame_HUD_PuzzleEditorReview, #ingame_HUD_Notifications, #ingame_HUD_TutorialHints, #ingame_HUD_Waypoints, diff --git a/src/css/mixins.scss b/src/css/mixins.scss index 43f7a259..888d84d6 100644 --- a/src/css/mixins.scss +++ b/src/css/mixins.scss @@ -15,15 +15,15 @@ $hardwareAcc: null; // ---------------------------------------- /** Increased click area for this element, helpful on mobile */ @mixin IncreasedClickArea($size) { - &::after { - content: ""; - position: absolute; - top: #{D(-$size)}; - bottom: #{D(-$size)}; - left: #{D(-$size)}; - right: #{D(-$size)}; - // background: rgba(255, 0, 0, 0.3); - } + // &::after { + // content: ""; + // position: absolute; + // top: #{D(-$size)}; + // bottom: #{D(-$size)}; + // left: #{D(-$size)}; + // right: #{D(-$size)}; + // // background: rgba(255, 0, 0, 0.3); + // } } button, .increasedClickArea { diff --git a/src/css/resources.scss b/src/css/resources.scss index 5bb3ea99..3a581c30 100644 --- a/src/css/resources.scss +++ b/src/css/resources.scss @@ -1,11 +1,13 @@ $buildings: belt, cutter, miner, mixer, painter, rotater, balancer, stacker, trash, underground_belt, wire, constant_signal, logic_gate, lever, filter, wire_tunnel, display, virtual_processor, reader, storage, - transistor, analyzer, comparator, item_producer; + transistor, analyzer, comparator, item_producer, constant_producer, goal_acceptor, block; @each $building in $buildings { [data-icon="building_icons/#{$building}.png"] { /* @load-async */ - background-image: uiResource("res/ui/building_icons/#{$building}.png") !important; + .icon { + background-image: uiResource("res/ui/building_icons/#{$building}.png") !important; + } } } @@ -13,7 +15,8 @@ $buildingsAndVariants: belt, balancer, underground_belt, underground_belt-tier2, cutter, cutter-quad, rotater, rotater-ccw, stacker, mixer, painter-double, painter-quad, trash, storage, reader, rotater-rotate180, display, constant_signal, wire, wire_tunnel, logic_gate-or, logic_gate-not, logic_gate-xor, analyzer, virtual_processor-rotater, virtual_processor-unstacker, item_producer, - virtual_processor-stacker, virtual_processor-painter, wire-second, painter, painter-mirrored, comparator; + constant_producer, virtual_processor-stacker, virtual_processor-painter, wire-second, painter, + painter-mirrored, comparator, goal_acceptor, block; @each $building in $buildingsAndVariants { [data-icon="building_tutorials/#{$building}.png"] { /* @load-async */ @@ -67,7 +70,7 @@ $icons: notification_saved, notification_success, notification_upgrade; } $languages: en, de, cs, da, et, es-419, fr, it, pt-BR, sv, tr, el, ru, uk, zh-TW, zh-CN, nb, mt-MT, ar, nl, vi, - th, hu, pl, ja, kor, no, pt-PT, fi, ro; + th, hu, pl, ja, kor, no, pt-PT, fi, ro, he; @each $language in $languages { [data-languageicon="#{$language}"] { diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index b21d465f..15cdbe1c 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -88,9 +88,11 @@ @include S(grid-column-gap, 10px); display: grid; - grid-template-columns: 1fr; - &.demo { + &[data-columns="1"] { + grid-template-columns: 1fr; + } + &[data-columns="2"] { grid-template-columns: 1fr 1fr; } @@ -183,7 +185,7 @@ .updateLabel { position: absolute; transform: translateX(50%) rotate(-5deg); - color: #3291e9; + color: #ff590b; @include Heading; font-weight: bold; @include S(right, 40px); @@ -223,9 +225,75 @@ } } + .puzzleContainer { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + background: $colorBlueBright; + grid-row: 1 / 2; + grid-column: 2 / 3; + position: relative; + @include S(padding, 20px); + @include S(border-radius, $globalBorderRadius); + + > .badge { + color: #fff; + text-transform: uppercase; + font-weight: bold; + position: absolute; + @include S(top, 10px); + @include S(right, 10px); + + transform: translateX(50%) rotate(10deg); + @include Heading; + font-weight: bold; + + @include InlineAnimation(1.3s ease-in-out infinite) { + 50% { + transform: translateX(50%) rotate(12deg) scale(1.1); + } + } + } + + > .hint { + @include SuperDuperSmallText; + @include S(margin-top, 10px); + @include S(width, 200px); + } + + > .dlcLogo { + @include S(width, 190px); + } + + > button { + @include S(margin-top, 20px); + @include Heading; + @include S(padding, 10px, 30px); + background-color: #333; + color: #fff; + } + + &.notOwned { + p { + @include PlainText; + color: #333; + @include S(margin-top, 10px); + @include S(width, 190px); + } + > button { + box-sizing: border-box; + @include S(margin-top, 10px); + @include S(width, 190px); + @include S(padding, 10px, 20px); + } + } + } + .mainContainer { display: flex; align-items: center; + grid-row: 1 / 2; justify-content: center; flex-direction: column; background: #fafafa; @@ -242,6 +310,16 @@ align-items: center; } + .modeButtons { + display: grid; + grid-template-columns: repeat(2, 1fr); + @include S(grid-column-gap, 10px); + align-items: start; + height: 100%; + width: 100%; + box-sizing: border-box; + } + .browserWarning { @include S(margin-bottom, 10px); background-color: $colorRedBright; @@ -285,6 +363,18 @@ @include S(margin-left, 15px); } + .playModeButton { + @include IncreasedClickArea(0px); + @include S(margin-top, 15px); + @include S(margin-left, 15px); + } + + .editModeButton { + @include IncreasedClickArea(0px); + @include S(margin-top, 15px); + @include S(margin-left, 15px); + } + .savegames { @include S(max-height, 105px); overflow-y: auto; @@ -439,6 +529,37 @@ } } + .bottomContainer { + display: flex; + align-items: center; + justify-content: center; + flex-direction: row; + @include S(padding-top, 10px); + height: 100%; + width: 100%; + box-sizing: border-box; + + .buttons { + display: grid; + grid-template-columns: repeat(2, 1fr); + @include S(grid-column-gap, 10px); + align-items: start; + height: 100%; + width: 100%; + box-sizing: border-box; + } + } + + #crosspromo { + position: absolute; + @include S(bottom, 50px); + @include S(right, 20px); + @include S(width, 190px); + @include S(height, 100px); + pointer-events: all; + border: 0; + } + .footer { display: grid; flex-grow: 1; @@ -450,10 +571,45 @@ box-sizing: border-box; @include S(grid-gap, 4px); - &.china { + &.noLinks { grid-template-columns: auto 1fr; } + &.wegameDisclaimer { + @include SuperSmallText; + display: grid; + justify-content: center; + grid-template-columns: 1fr auto 1fr; + text-align: center; + + > .disclaimer { + grid-column: 2 / 3; + + @include DarkThemeOverride { + color: #fff; + } + } + + > .rating { + grid-column: 3 / 4; + justify-self: end; + align-self: end; + + @include S(width, 32px); + @include S(height, 40px); + background: green; + cursor: pointer !important; + pointer-events: all; + @include S(border-radius, 4px); + overflow: hidden; + + & { + /* @load-async */ + background: #fff uiResource("wegame_isbn_rating.jpg") center center / contain no-repeat; + } + } + } + .author { flex-grow: 1; text-align: right; diff --git a/src/css/states/preload.scss b/src/css/states/preload.scss index 514c60d2..2e14abd6 100644 --- a/src/css/states/preload.scss +++ b/src/css/states/preload.scss @@ -17,7 +17,7 @@ @include S(border-radius, 3px); @include DarkThemeOverride { - background: #424242; + background: #33343c; } .version { diff --git a/src/css/states/puzzle_menu.scss b/src/css/states/puzzle_menu.scss new file mode 100644 index 00000000..44f5d7ce --- /dev/null +++ b/src/css/states/puzzle_menu.scss @@ -0,0 +1,382 @@ +#state_PuzzleMenuState { + > .headerBar { + display: grid; + grid-template-columns: 1fr auto; + align-items: center; + + > h1 { + justify-self: start; + } + + .createPuzzle { + background-color: $colorGreenBright; + @include S(margin-left, 5px); + } + } + + > .container { + .searchForm { + display: flex; + align-items: center; + justify-content: center; + + color: #333; + background: $accentColorBright; + @include S(padding, 5px); + @include S(border-radius, $globalBorderRadius); + flex-wrap: wrap; + + @include DarkThemeOverride { + background: $accentColorDark; + } + + input.search { + color: #333; + margin: 0; + display: inline-block; + flex-grow: 1; + @include S(padding, 5px, 10px); + @include S(min-width, 50px); + + &::placeholder { + color: #aaa; + } + } + + select { + color: #333; + border: 0; + @include S(padding, 5px); + @include S(border-radius, $globalBorderRadius); + @include S(padding, 7px, 10px); + @include S(margin-left, 5px); + @include PlainText; + } + + .filterCompleted { + @include S(margin-left, 20px); + pointer-events: all; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + text-transform: uppercase; + @include PlainText; + @include S(margin-right, 10px); + + @include DarkThemeOverride { + color: #bbbbc4; + } + + input { + @include S(width, 15px); + @include S(height, 15px); + @include S(margin-right, 5px); + @include S(border-radius, $globalBorderRadius); + border: 0; + } + } + + button[type="submit"] { + @include S(padding, 7px, 10px, 5px); + @include S(margin-left, 20px); + @include S(margin-top, 4px); + @include S(margin-bottom, 4px); + margin-left: auto; + } + } + + > .mainContent { + overflow: hidden; + display: flex; + flex-direction: column; + + > .categoryChooser { + > .categories { + display: grid; + grid-auto-columns: 1fr; + grid-auto-flow: column; + @include S(grid-gap, 2px); + @include S(padding-right, 10px); + @include S(margin-bottom, 5px); + + .category { + background: $accentColorBright; + border-radius: 0; + color: $accentColorDark; + transition: all 0.12s ease-in-out; + transition-property: opacity, background-color, color; + + &:first-child { + @include S(border-top-left-radius, $globalBorderRadius); + @include S(border-bottom-left-radius, $globalBorderRadius); + } + &:last-child { + border-top-right-radius: $globalBorderRadius; + border-bottom-right-radius: $globalBorderRadius; + } + + &.active { + background: $colorBlueBright; + opacity: 1 !important; + color: #fff; + cursor: default; + } + + @include DarkThemeOverride { + background: $accentColorDark; + color: #bbbbc4; + + &.active { + background: $colorBlueBright; + color: #fff; + } + } + + &.root { + @include S(padding-top, 10px); + @include S(padding-bottom, 10px); + @include Text; + } + &.child { + @include PlainText; + } + } + } + } + + > .puzzles { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(D(240px), 1fr)); + @include S(grid-auto-rows, 65px); + @include S(grid-gap, 7px); + @include S(margin-top, 10px); + @include S(padding-right, 4px); + overflow-y: scroll; + flex-grow: 1; + pointer-events: all; + position: relative; + + > .puzzle { + width: 100%; + @include S(height, 65px); + background: #f3f3f8; + @include S(border-radius, $globalBorderRadius); + + display: grid; + grid-template-columns: auto 1fr; + grid-template-rows: D(15px) D(15px) 1fr; + @include S(padding, 5px); + @include S(grid-column-gap, 5px); + box-sizing: border-box; + pointer-events: all; + cursor: pointer; + position: relative; + @include S(padding-left, 10px); + + @include DarkThemeOverride { + background: rgba(0, 0, 10, 0.2); + } + + @include InlineAnimation(0.12s ease-in-out) { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + + &:hover { + background: #f0f0f8; + } + + > .title { + grid-column: 2 / 3; + grid-row: 1 / 2; + @include PlainText; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + align-self: center; + justify-self: start; + width: 100%; + box-sizing: border-box; + @include S(padding, 2px, 5px); + @include S(height, 17px); + } + + > .author { + grid-column: 2 / 2; + grid-row: 2 / 3; + @include SuperSmallText; + color: $accentColorDark; + align-self: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + @include S(padding, 2px, 5px); + } + + > .icon { + grid-column: 1 / 2; + grid-row: 1 / 4; + align-self: center; + justify-self: center; + @include S(width, 45px); + @include S(height, 45px); + + canvas { + width: 100%; + height: 100%; + } + } + + > button.delete { + position: absolute; + @include S(top, 5px); + @include S(right, 5px); + background-repeat: no-repeat; + background-position: center center; + background-size: 70%; + background-color: transparent !important; + @include S(width, 20px); + @include S(height, 20px); + padding: 0; + opacity: 0.7; + @include DarkThemeInvert; + + & { + /* @load-async */ + background-image: uiResource("icons/delete.png") !important; + } + } + + > .stats { + grid-column: 2 / 3; + grid-row: 3 / 4; + display: flex; + align-items: center; + justify-self: end; + justify-content: center; + align-self: end; + @include S(height, 14px); + + > .downloads { + @include SuperSmallText; + color: #000; + font-weight: bold; + @include S(margin-right, 5px); + @include S(padding-left, 12px); + opacity: 0.7; + display: inline-flex; + align-items: center; + justify-content: center; + @include DarkThemeInvert; + + & { + /* @load-async */ + background: uiResource("icons/puzzle_plays.png") #{D(2px)} #{D(2.5px)} / #{D( + 8px + )} #{D(8px)} no-repeat; + } + } + + > .likes { + @include SuperSmallText; + align-items: center; + justify-content: center; + color: #000; + font-weight: bold; + @include S(padding-left, 14px); + opacity: 0.7; + @include DarkThemeInvert; + + & { + /* @load-async */ + background: uiResource("icons/puzzle_upvotes.png") #{D(2px)} #{D(2.4px)} / #{D( + 9px + )} #{D(9px)} no-repeat; + } + } + + > .difficulty { + @include SuperSmallText; + align-items: center; + justify-content: center; + color: #000; + font-weight: bold; + @include S(margin-right, 3px); + opacity: 0.7; + text-transform: uppercase; + + &.stage--easy { + color: $colorGreenBright; + } + &.stage--medium { + color: $colorOrangeBright; + } + &.stage--hard { + color: $colorRedBright; + } + &.stage--unknown { + color: #888; + } + } + } + + &.completed { + > .icon, + > .stats, + > .author, + > .title { + opacity: 0.3; + } + + background: #fafafa; + + @include DarkThemeOverride { + background: rgba(0, 0, 0, 0.05); + } + + &::after { + content: ""; + position: absolute; + @include S(top, 10px); + @include S(right, 10px); + @include S(width, 30px); + @include S(height, 30px); + opacity: 0.1; + + & { + /* @load-async */ + background: uiResource("icons/puzzle_complete_indicator.png") center center / + contain no-repeat; + } + } + @include DarkThemeOverride { + &::after { + /* @load-async */ + background: uiResource("icons/puzzle_complete_indicator_inverse.png") center + center / contain no-repeat; + } + } + } + } + + > .loader, + > .empty { + display: flex; + align-items: center; + color: $accentColorDark; + justify-content: center; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + } + } + } + } +} diff --git a/src/css/states/settings.scss b/src/css/states/settings.scss index 50afcaa3..5b36c677 100644 --- a/src/css/states/settings.scss +++ b/src/css/states/settings.scss @@ -50,7 +50,8 @@ } button.categoryButton, - button.about { + button.about, + button.privacy { background-color: $colorCategoryButton; color: #777a7f; @@ -68,6 +69,10 @@ } } + button.privacy { + @include S(margin-top, 4px); + } + .versionbar { @include S(margin-top, 10px); @@ -180,7 +185,8 @@ .container .content { .sidebar { button.categoryButton, - button.about { + button.about, + button.privacy { color: #ccc; background-color: darken($darkModeControlsBackground, 5); diff --git a/src/css/states/wegame_splash.scss b/src/css/states/wegame_splash.scss new file mode 100644 index 00000000..961cfa67 --- /dev/null +++ b/src/css/states/wegame_splash.scss @@ -0,0 +1,38 @@ +#state_WegameSplashState { + background: #000 !important; + display: flex; + align-items: center; + justify-content: center; + + .wrapper { + opacity: 0; + @include InlineAnimation(5.9s ease-in-out) { + 0% { + opacity: 0; + } + 20% { + opacity: 1; + } + 90% { + opacity: 1; + } + 100% { + opacity: 0; + } + } + + text-align: center; + color: #fff; + @include Heading; + + strong { + display: block; + @include SuperHeading; + @include S(margin-bottom, 20px); + } + + div { + @include S(margin-bottom, 10px); + } + } +} diff --git a/src/css/variables.scss b/src/css/variables.scss index d2798f41..c7b7c17c 100644 --- a/src/css/variables.scss +++ b/src/css/variables.scss @@ -18,8 +18,10 @@ $textLineHeight: 21px; $plainTextFontSize: 13px; $plainTextLineHeight: 17px; -$supersmallTextFontSize: 10px; -$supersmallTextLineHeight: 13px; +$superDuperSmallTextFontSize: 8px; +$superDuperSmallTextLineHeight: 9px; +$superSmallTextFontSize: 10px; +$superSmallTextLineHeight: 13px; $buttonFontSize: 14px; $buttonLineHeight: 18px; @@ -33,6 +35,7 @@ $accentColorDark: #7d808a; $colorGreenBright: #66bb6a; $colorBlueBright: rgb(74, 151, 223); $colorRedBright: #ef5072; +$colorOrangeBright: #ef9d50; $themeColor: #393747; $ingameHudBg: rgba(#333438, 0.9); @@ -76,8 +79,16 @@ $mainFontScale: 1; // } } +@mixin SuperDuperSmallText { + @include ScaleFont($superDuperSmallTextFontSize, $superDuperSmallTextLineHeight); + font-weight: $mainFontWeight; + font-family: $mainFont; + letter-spacing: $mainFontSpacing; + @include DebugText(green); +} + @mixin SuperSmallText { - @include ScaleFont($supersmallTextFontSize, $supersmallTextLineHeight); + @include ScaleFont($superSmallTextFontSize, $superSmallTextLineHeight); font-weight: $mainFontWeight; font-family: $mainFont; letter-spacing: $mainFontSpacing; diff --git a/src/js/application.js b/src/js/application.js index 2c632ef9..c49b7027 100644 --- a/src/js/application.js +++ b/src/js/application.js @@ -31,6 +31,10 @@ import { PreloadState } from "./states/preload"; import { SettingsState } from "./states/settings"; import { ShapezGameAnalytics } from "./platform/browser/game_analytics"; import { RestrictionManager } from "./core/restriction_manager"; +import { PuzzleMenuState } from "./states/puzzle_menu"; +import { ClientAPI } from "./platform/api"; +import { LoginState } from "./states/login"; +import { WegameSplashState } from "./states/wegame_splash"; /** * @typedef {import("./platform/achievement_provider").AchievementProviderInterface} AchievementProviderInterface @@ -72,6 +76,7 @@ export class Application { this.savegameMgr = new SavegameManager(this); this.inputMgr = new InputDistributor(this); this.backgroundResourceLoader = new BackgroundResourcesLoader(this); + this.clientApi = new ClientAPI(this); // Restrictions (Like demo etc) this.restrictionMgr = new RestrictionManager(this); @@ -151,6 +156,7 @@ export class Application { registerStates() { /** @type {Array} */ const states = [ + WegameSplashState, PreloadState, MobileWarningState, MainMenuState, @@ -159,6 +165,8 @@ export class Application { KeybindingsState, AboutState, ChangelogState, + PuzzleMenuState, + LoginState, ]; for (let i = 0; i < states.length; ++i) { @@ -324,8 +332,12 @@ export class Application { Loader.linkAppAfterBoot(this); + if (G_WEGAME_VERSION) { + this.stateMgr.moveToState("WegameSplashState"); + } + // Check for mobile - if (IS_MOBILE) { + else if (IS_MOBILE) { this.stateMgr.moveToState("MobileWarningState"); } else { this.stateMgr.moveToState("PreloadState"); diff --git a/src/js/changelog.js b/src/js/changelog.js index 61c1c79a..ec9a317c 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,12 +1,75 @@ export const CHANGELOG = [ { - version: "1.3.1", - date: "beta", + version: "1.4.4", + date: "29.08.2021", entries: [ - "Fixed savegames getting corrupt in rare conditions", - "Fixed game crashing sometimes since the achievements update", + "Hotfix: Fixed the balancer not distributing items evenly, caused by the 1.4.3 update. Sorry for any inconveniences!", ], }, + { + version: "1.4.3", + date: "28.08.2021", + entries: [ + "You can now hold 'ALT' while hovering a building to see its output! (Thanks to Sense101) (PS: There is now a setting to have it always on!)", + "The map overview should now be much more performant! As a consequence, you can now zoom out farther! (Thanks to PFedak)", + "Puzzle DLC: There is now a 'next puzzle' button!", + "Puzzle DLC: There is now a search function!", + "Edit signal dialog now has the previous signal filled (Thanks to EmeraldBlock)", + "Further performance improvements (Thanks to PFedak)", + "Improved puzzle validation (Thanks to Sense101)", + "Input fields in dialogs should now automatically focus", + "Fix selected building being deselected at level up (Thanks to EmeraldBlock)", + "Updated translations", + ], + }, + { + version: "1.4.2", + date: "24.06.2021", + entries: [ + "Puzzle DLC: Goal acceptors now reset after getting no items for a while (This should prevent being able to 'cheat' puzzles) (by Sense101)", + "Puzzle DLC: Added button to clear all buildings / reset the puzzle (by Sense101)", + "Puzzle DLC: Allow copy-paste in puzzle mode (by Sense101)", + "Fixed level achievements being given on the wrong level (by DJ1TJOO)", + "Fixed blueprint not properly clearing on right click", + "Updated translations", + ], + }, + { + version: "1.4.1", + date: "22.06.2021", + entries: [ + "The Puzzle DLC is now available on Steam!", + "The Soundtrack is now also available to wishlist and will be released within the next days, including the new music from the Puzzle DLC!", + ], + }, + { + version: "1.4.0", + date: "04.06.2021", + entries: [ + "Belts in blueprints should now always paste correctly", + "You can now clear belts by selecting them and then pressing 'B'", + "Preparations for the Puzzle DLC, coming June 22nd!", + ], + }, + { + version: "1.3.1", + date: "16.04.2021", + entries: G_CHINA_VERSION + ? [ + "第13关的交付目标更改为:中国古代指南针。(感谢玩家:凯风入心 创作并提供", + "第17关的交付目标更改为:永乐通宝。(感谢玩家:金天赐 创作并提供", + "第22关的交付目标更改为:凤凰。(感谢玩家:我没得眼镜 创作并提供", + "第23关的交付目标更改为:古代车轮。(感谢玩家:我没得眼镜 创作并提供", + "第24关的交付目标更改为:大熊猫。(感谢玩家:窝囸倪现任 创作并提供", + + "修复了一些特定情况下偶尔会发生的存档损坏问题", + "修复了成就更新后有时候游戏崩溃的问题", + ] + : [ + "Fixed savegames getting corrupt in rare conditions", + "Fixed game crashing sometimes since the achievements update", + ], + }, { version: "1.3.0", date: "12.03.2020", diff --git a/src/js/core/animation_frame.js b/src/js/core/animation_frame.js index eeefb4b0..6aa629a5 100644 --- a/src/js/core/animation_frame.js +++ b/src/js/core/animation_frame.js @@ -51,9 +51,12 @@ export class AnimationFrame { dt = resetDtMs; } - this.frameEmitted.dispatch(dt); + try { + this.frameEmitted.dispatch(dt); + } catch (ex) { + console.error(ex); + } this.lastTime = time; - window.requestAnimationFrame(this.boundMethod); } } diff --git a/src/js/core/background_resources_loader.js b/src/js/core/background_resources_loader.js index 46ec20e6..316619c4 100644 --- a/src/js/core/background_resources_loader.js +++ b/src/js/core/background_resources_loader.js @@ -12,8 +12,13 @@ import { cachebust } from "./cachebust"; const logger = createLogger("background_loader"); +export function getLogoSprite() { + // @todo: ugh, in a hurry + return G_WEGAME_VERSION ? "logo_wegame.png" : G_CHINA_VERSION ? "logo_cn.png" : "logo.png"; +} + const essentialMainMenuSprites = [ - G_CHINA_VERSION ? "logo_cn.png" : "logo.png", + getLogoSprite(), ...G_ALL_UI_IMAGES.filter(src => src.startsWith("ui/") && src.indexOf(".gif") < 0), ]; const essentialMainMenuSounds = [ diff --git a/src/js/core/buffer_maintainer.js b/src/js/core/buffer_maintainer.js index 1d506803..3eaf1f8a 100644 --- a/src/js/core/buffer_maintainer.js +++ b/src/js/core/buffer_maintainer.js @@ -167,4 +167,25 @@ export class BufferMaintainer { }); return canvas; } + + /** + * @param {object} param0 + * @param {string} param0.key + * @param {string} param0.subKey + * @returns {HTMLCanvasElement?} + * + */ + getForKeyOrNullNoUpdate({ key, subKey }) { + let parent = this.cache.get(key); + if (!parent) { + return null; + } + + // Now search for sub key + const cacheHit = parent.get(subKey); + if (cacheHit) { + return cacheHit.canvas; + } + return null; + } } diff --git a/src/js/core/config.js b/src/js/core/config.js index d5dc7089..bc2e2460 100644 --- a/src/js/core/config.js +++ b/src/js/core/config.js @@ -7,7 +7,7 @@ export const IS_DEBUG = export const SUPPORT_TOUCH = false; -export const IS_MAC = navigator.platform.toLowerCase().indexOf("mac") >= 0; +export const IS_MAC = navigator.platform.toLowerCase().indexOf("mac") >= 0 && !G_IS_DEV; const smoothCanvas = true; @@ -17,7 +17,11 @@ export const THIRDPARTY_URLS = { reddit: "https://www.reddit.com/r/shapezio", shapeViewer: "https://viewer.shapez.io", + privacyPolicy: "https://tobspr.io/privacy.html", + standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/", + stanaloneCampaignLink: "https://get.shapez.io", + puzzleDlcStorePage: "https://store.steampowered.com/app/1625400/shapezio__Puzzle_DLC", levelTutorialVideos: { 21: "https://www.youtube.com/watch?v=0nUfRLMCcgo&", @@ -53,6 +57,7 @@ export const globalConfig = { // Map mapChunkSize: 16, + chunkAggregateSize: 4, mapChunkOverviewMinZoom: 0.9, mapChunkWorldSize: null, // COMPUTED @@ -71,6 +76,13 @@ export const globalConfig = { readerAnalyzeIntervalSeconds: 10, + goalAcceptorItemsRequired: 12, + goalAcceptorsPerProducer: 5, + puzzleModeSpeed: 3, + puzzleMinBoundsSize: 2, + puzzleMaxBoundsSize: 20, + puzzleValidationDurationSeconds: 30, + buildingSpeeds: { cutter: 1 / 4, cutterQuad: 1 / 4, @@ -93,7 +105,7 @@ export const globalConfig = { gameSpeed: 1, warmupTimeSecondsFast: 0.5, - warmupTimeSecondsRegular: 3, + warmupTimeSecondsRegular: 1.5, smoothing: { smoothMainCanvas: smoothCanvas && true, diff --git a/src/js/core/config.local.template.js b/src/js/core/config.local.template.js index 0430753e..799b5fc8 100644 --- a/src/js/core/config.local.template.js +++ b/src/js/core/config.local.template.js @@ -53,7 +53,7 @@ export default { // Replace all translations with emojis to see which texts are translateable // testTranslations: true, // ----------------------------------------------------------------------------------- - // Enables an inspector which shows information about the entity below the curosr + // Enables an inspector which shows information about the entity below the cursor // enableEntityInspector: true, // ----------------------------------------------------------------------------------- // Enables ads in the local build (normally they are deactivated there) @@ -62,6 +62,9 @@ export default { // Allows unlocked achievements to be logged to console in the local build // testAchievements: true, // ----------------------------------------------------------------------------------- + // Enables use of (some) existing flags within the puzzle mode context + // testPuzzleMode: true, + // ----------------------------------------------------------------------------------- // Disables the automatic switch to an overview when zooming out // disableMapOverview: true, // ----------------------------------------------------------------------------------- diff --git a/src/js/core/game_state.js b/src/js/core/game_state.js index cee962f5..b08bef77 100644 --- a/src/js/core/game_state.js +++ b/src/js/core/game_state.js @@ -91,26 +91,6 @@ export class GameState { } } - /** - * - * @param {string} nextStateId - * @param {object=} nextStatePayload - */ - watchAdAndMoveToState(nextStateId, nextStatePayload = {}) { - if (this.app.adProvider.getCanShowVideoAd() && this.app.isRenderable()) { - this.moveToState( - "WatchAdState", - { - nextStateId, - nextStatePayload, - }, - true - ); - } else { - this.moveToState(nextStateId, nextStatePayload); - } - } - /** * Tracks clicks on a given element and calls the given callback *on this state*. * If you want to call another function wrap it inside a lambda. diff --git a/src/js/core/global_registries.js b/src/js/core/global_registries.js index ad45850c..723bf567 100644 --- a/src/js/core/global_registries.js +++ b/src/js/core/global_registries.js @@ -5,6 +5,7 @@ import { Factory } from "./factory"; * @typedef {import("../game/time/base_game_speed").BaseGameSpeed} BaseGameSpeed * @typedef {import("../game/component").Component} Component * @typedef {import("../game/base_item").BaseItem} BaseItem + * @typedef {import("../game/game_mode").GameMode} GameMode * @typedef {import("../game/meta_building").MetaBuilding} MetaBuilding @@ -19,6 +20,9 @@ export let gBuildingsByCategory = null; /** @type {FactoryTemplate} */ export let gComponentRegistry = new Factory("component"); +/** @type {FactoryTemplate} */ +export let gGameModeRegistry = new Factory("gameMode"); + /** @type {FactoryTemplate} */ export let gGameSpeedRegistry = new Factory("gamespeed"); diff --git a/src/js/core/modal_dialog_elements.js b/src/js/core/modal_dialog_elements.js index 5f0ed59f..893cd223 100644 --- a/src/js/core/modal_dialog_elements.js +++ b/src/js/core/modal_dialog_elements.js @@ -267,7 +267,7 @@ export class Dialog { * Dialog which simply shows a loading spinner */ export class DialogLoading extends Dialog { - constructor(app) { + constructor(app, text = "") { super({ app, title: "", @@ -279,6 +279,8 @@ export class DialogLoading extends Dialog { // Loading dialog can not get closed with back button this.inputReciever.backButton.removeAll(); this.inputReciever.context = "dialog-loading"; + + this.text = text; } createElement() { @@ -287,6 +289,13 @@ export class DialogLoading extends Dialog { elem.classList.add("loadingDialog"); this.element = elem; + if (this.text) { + const text = document.createElement("div"); + text.classList.add("text"); + text.innerText = this.text; + elem.appendChild(text); + } + const loader = document.createElement("div"); loader.classList.add("prefab_LoadingTextWithAnim"); loader.classList.add("loadingIndicator"); @@ -444,7 +453,7 @@ export class DialogWithForm extends Dialog { for (let i = 0; i < this.formElements.length; ++i) { const elem = this.formElements[i]; elem.bindEvents(div, this.clickDetectors); - elem.valueChosen.add(this.closeRequested.dispatch, this.closeRequested); + // elem.valueChosen.add(this.closeRequested.dispatch, this.closeRequested); elem.valueChosen.add(this.valueChosen.dispatch, this.valueChosen); } diff --git a/src/js/core/modal_dialog_forms.js b/src/js/core/modal_dialog_forms.js index 1c5b1986..ccf9bfb2 100644 --- a/src/js/core/modal_dialog_forms.js +++ b/src/js/core/modal_dialog_forms.js @@ -1,6 +1,7 @@ import { BaseItem } from "../game/base_item"; import { ClickDetector } from "./click_detector"; import { Signal } from "./signal"; +import { getIPCRenderer } from "./utils"; /* * *************************************************** @@ -107,6 +108,19 @@ export class FormElementInput extends FormElement { updateErrorState() { this.element.classList.toggle("errored", !this.isValid()); + + // profanity filter + if (G_WEGAME_VERSION) { + const value = String(this.element.value); + + getIPCRenderer() + .invoke("profanity-check", value) + .then(newValue => { + if (value !== newValue && this.element) { + this.element.value = newValue; + } + }); + } } isValid() { @@ -117,8 +131,14 @@ export class FormElementInput extends FormElement { return this.element.value; } + setValue(value) { + this.element.value = value; + this.updateErrorState(); + } + focus() { this.element.focus(); + this.element.select(); } } diff --git a/src/js/core/rectangle.js b/src/js/core/rectangle.js index f17825ca..bd3421d9 100644 --- a/src/js/core/rectangle.js +++ b/src/js/core/rectangle.js @@ -44,6 +44,15 @@ export class Rectangle { return new Rectangle(left, top, right - left, bottom - top); } + /** + * + * @param {number} width + * @param {number} height + */ + static centered(width, height) { + return new Rectangle(-Math.ceil(width / 2), -Math.ceil(height / 2), width, height); + } + /** * Returns if a intersects b * @param {Rectangle} a @@ -72,7 +81,7 @@ export class Rectangle { /** * Returns if this rectangle is equal to the other while taking an epsilon into account * @param {Rectangle} other - * @param {number} epsilon + * @param {number} [epsilon] */ equalsEpsilon(other, epsilon) { return ( @@ -287,6 +296,15 @@ export class Rectangle { return Rectangle.fromTRBL(top, right, bottom, left); } + /** + * Returns whether the rectangle fully intersects the given rectangle + * @param {Rectangle} rect + */ + intersectsFully(rect) { + const intersection = this.getIntersection(rect); + return intersection && Math.abs(intersection.w * intersection.h - rect.w * rect.h) < 0.001; + } + /** * Returns the union of this rectangle with another * @param {Rectangle} rect diff --git a/src/js/core/restriction_manager.js b/src/js/core/restriction_manager.js index 2912d30f..c899b494 100644 --- a/src/js/core/restriction_manager.js +++ b/src/js/core/restriction_manager.js @@ -89,6 +89,11 @@ export class RestrictionManager extends ReadWriteProxy { return false; } + if (queryParamOptions.embedProvider === "gamedistribution") { + // also full version on gamedistribution + return false; + } + if (G_IS_DEV) { return typeof window !== "undefined" && window.location.search.indexOf("demo") >= 0; } diff --git a/src/js/core/signal.js b/src/js/core/signal.js index 7daae4ea..2dbc9f93 100644 --- a/src/js/core/signal.js +++ b/src/js/core/signal.js @@ -17,6 +17,17 @@ export class Signal { ++this.modifyCount; } + /** + * Adds a new signal listener + * @param {function} receiver + * @param {object} scope + */ + addToTop(receiver, scope = null) { + assert(receiver, "receiver is null"); + this.receivers.unshift({ receiver, scope }); + ++this.modifyCount; + } + /** * Dispatches the signal * @param {...any} payload diff --git a/src/js/core/state_manager.js b/src/js/core/state_manager.js index 3c49ada9..2e55f5d4 100644 --- a/src/js/core/state_manager.js +++ b/src/js/core/state_manager.js @@ -89,10 +89,15 @@ export class StateManager { const dialogParent = document.createElement("div"); dialogParent.classList.add("modalDialogParent"); document.body.appendChild(dialogParent); + try { + this.currentState.internalEnterCallback(payload); + } catch (ex) { + console.error(ex); + throw ex; + } this.app.sound.playThemeMusic(this.currentState.getThemeMusic()); - this.currentState.internalEnterCallback(payload); this.currentState.onResized(this.app.screenWidth, this.app.screenHeight); this.app.analytics.trackStateEnter(key); diff --git a/src/js/core/utils.js b/src/js/core/utils.js index 6eed9c34..1d1b0b02 100644 --- a/src/js/core/utils.js +++ b/src/js/core/utils.js @@ -573,12 +573,14 @@ export function round1DigitLocalized(speed, separator = T.global.decimalSeparato * @param {string=} separator The decimal separator for numbers like 50.1 (separator='.') */ export function formatItemsPerSecond(speed, double = false, separator = T.global.decimalSeparator) { - return speed === 1.0 - ? T.ingame.buildingPlacement.infoTexts.oneItemPerSecond - : T.ingame.buildingPlacement.infoTexts.itemsPerSecond.replace( - "", - round2Digits(speed).toString().replace(".", separator) - ) + (double ? " " + T.ingame.buildingPlacement.infoTexts.itemsPerSecondDouble : ""); + return ( + (speed === 1.0 + ? T.ingame.buildingPlacement.infoTexts.oneItemPerSecond + : T.ingame.buildingPlacement.infoTexts.itemsPerSecond.replace( + "", + round2Digits(speed).toString().replace(".", separator) + )) + (double ? " " + T.ingame.buildingPlacement.infoTexts.itemsPerSecondDouble : "") + ); } /** @@ -732,6 +734,10 @@ const romanLiteralsCache = ["0"]; * @returns {string} */ export function getRomanNumber(number) { + if (G_WEGAME_VERSION) { + return String(number); + } + number = Math.max(0, Math.round(number)); if (romanLiteralsCache[number]) { return romanLiteralsCache[number]; diff --git a/src/js/game/achievement_proxy.js b/src/js/game/achievement_proxy.js index ed05b700..9077b283 100644 --- a/src/js/game/achievement_proxy.js +++ b/src/js/game/achievement_proxy.js @@ -32,6 +32,12 @@ export class AchievementProxy { } onLoad() { + if (!this.root.gameMode.hasAchievements()) { + logger.log("Disabling achievements because game mode does not have achievements"); + this.disabled = true; + return; + } + this.provider .onLoad(this.root) .then(() => { diff --git a/src/js/game/base_item.js b/src/js/game/base_item.js index 0075e6c1..d74ff834 100644 --- a/src/js/game/base_item.js +++ b/src/js/game/base_item.js @@ -11,6 +11,7 @@ export const itemTypes = ["shape", "color", "boolean"]; export class BaseItem extends BasicSerializableObject { constructor() { super(); + this._type = this.getItemType(); } static getId() { diff --git a/src/js/game/belt_path.js b/src/js/game/belt_path.js index dde81549..8ad4f7e3 100644 --- a/src/js/game/belt_path.js +++ b/src/js/game/belt_path.js @@ -13,8 +13,6 @@ import { GameRoot } from "./root"; const logger = createLogger("belt_path"); // Helpers for more semantic access into interleaved arrays -const _nextDistance = 0; -const _item = 1; const DEBUG = G_IS_DEV && false; @@ -110,6 +108,15 @@ export class BeltPath extends BasicSerializableObject { } } + /** + * Clears all items + */ + clearAllItems() { + this.items = []; + this.spacingToFirstItem = this.totalLength; + this.numCompressedItemsAfterFirstItem = 0; + } + /** * Returns whether this path can accept a new item * @returns {boolean} @@ -174,7 +181,7 @@ export class BeltPath extends BasicSerializableObject { * Recomputes cache variables once the path was changed */ onPathChanged() { - this.acceptorTarget = this.computeAcceptingEntityAndSlot(); + this.boundAcceptor = this.computeAcceptingEntityAndSlot(); /** * How many items past the first item are compressed @@ -192,7 +199,7 @@ export class BeltPath extends BasicSerializableObject { /** * Finds the entity which accepts our items * @param {boolean=} debug_Silent Whether debug output should be silent - * @return {{ entity: Entity, slot: number, direction?: enumDirection }} + * @return { (BaseItem, number?) => boolean } */ computeAcceptingEntityAndSlot(debug_Silent = false) { DEBUG && !debug_Silent && logger.log("Recomputing acceptor target"); @@ -214,55 +221,142 @@ export class BeltPath extends BasicSerializableObject { "regular" ); - if (targetEntity) { - DEBUG && !debug_Silent && logger.log(" Found target entity", targetEntity.uid); - const targetStaticComp = targetEntity.components.StaticMapEntity; - const targetBeltComp = targetEntity.components.Belt; + if (!targetEntity) { + return; + } - // Check for belts (special case) - if (targetBeltComp) { - const beltAcceptingDirection = targetStaticComp.localDirectionToWorld(enumDirection.top); - DEBUG && - !debug_Silent && - logger.log( - " Entity is accepting items from", - ejectSlotWsDirection, - "vs", - beltAcceptingDirection, - "Rotation:", - targetStaticComp.rotation + const noSimplifiedBelts = !this.root.app.settings.getAllSettings().simplifiedBelts; + + DEBUG && !debug_Silent && logger.log(" Found target entity", targetEntity.uid); + const targetStaticComp = targetEntity.components.StaticMapEntity; + const targetBeltComp = targetEntity.components.Belt; + + // Check for belts (special case) + if (targetBeltComp) { + const beltAcceptingDirection = targetStaticComp.localDirectionToWorld(enumDirection.top); + DEBUG && + !debug_Silent && + logger.log( + " Entity is accepting items from", + ejectSlotWsDirection, + "vs", + beltAcceptingDirection, + "Rotation:", + targetStaticComp.rotation + ); + if (ejectSlotWsDirection === beltAcceptingDirection) { + return item => { + const path = targetBeltComp.assignedPath; + assert(path, "belt has no path"); + return path.tryAcceptItem(item); + }; + } + } + + // Check for item acceptors + const targetAcceptorComp = targetEntity.components.ItemAcceptor; + if (!targetAcceptorComp) { + // Entity doesn't accept items + return; + } + + const ejectingDirection = targetStaticComp.worldDirectionToLocal(ejectSlotWsDirection); + const matchingSlot = targetAcceptorComp.findMatchingSlot( + targetStaticComp.worldToLocalTile(ejectSlotTargetWsTile), + ejectingDirection + ); + + if (!matchingSlot) { + // No matching slot found + return; + } + + const matchingSlotIndex = matchingSlot.index; + const passOver = this.computePassOverFunctionWithoutBelts(targetEntity, matchingSlotIndex); + if (!passOver) { + return; + } + + const matchingDirection = enumInvertedDirections[ejectingDirection]; + const filter = matchingSlot.slot.filter; + + return function (item, remainingProgress = 0.0) { + // Check if the acceptor has a filter + if (filter && item._type !== filter) { + return false; + } + + // Try to pass over + if (passOver(item, matchingSlotIndex)) { + // Trigger animation on the acceptor comp + if (noSimplifiedBelts) { + targetAcceptorComp.onItemAccepted( + matchingSlotIndex, + matchingDirection, + item, + remainingProgress ); - if (ejectSlotWsDirection === beltAcceptingDirection) { - return { - entity: targetEntity, - direction: null, - slot: 0, - }; } + return true; } + return false; + }; + } - // Check for item acceptors - const targetAcceptorComp = targetEntity.components.ItemAcceptor; - if (!targetAcceptorComp) { - // Entity doesn't accept items - return; - } + /** + * Computes a method to pass over the item to the entity + * @param {Entity} entity + * @param {number} matchingSlotIndex + * @returns {(item: BaseItem, slotIndex: number) => boolean | void} + */ + computePassOverFunctionWithoutBelts(entity, matchingSlotIndex) { + const systems = this.root.systemMgr.systems; + const hubGoals = this.root.hubGoals; - const ejectingDirection = targetStaticComp.worldDirectionToLocal(ejectSlotWsDirection); - const matchingSlot = targetAcceptorComp.findMatchingSlot( - targetStaticComp.worldToLocalTile(ejectSlotTargetWsTile), - ejectingDirection - ); + // NOTICE: THIS IS COPIED FROM THE ITEM EJECTOR SYSTEM FOR PEROFMANCE REASONS - if (!matchingSlot) { - // No matching slot found - return; - } + const itemProcessorComp = entity.components.ItemProcessor; + if (itemProcessorComp) { + // Its an item processor .. + return function (item) { + // Check for potential filters + if (!systems.itemProcessor.checkRequirements(entity, item, matchingSlotIndex)) { + return; + } + return itemProcessorComp.tryTakeItem(item, matchingSlotIndex); + }; + } - return { - entity: targetEntity, - slot: matchingSlot.index, - direction: enumInvertedDirections[ejectingDirection], + const undergroundBeltComp = entity.components.UndergroundBelt; + if (undergroundBeltComp) { + // Its an underground belt. yay. + return function (item) { + return undergroundBeltComp.tryAcceptExternalItem( + item, + hubGoals.getUndergroundBeltBaseSpeed() + ); + }; + } + + const storageComp = entity.components.Storage; + if (storageComp) { + // It's a storage + return function (item) { + if (storageComp.canAcceptItem(item)) { + storageComp.takeItem(item); + return true; + } + }; + } + + const filterComp = entity.components.Filter; + if (filterComp) { + // It's a filter! Unfortunately the filter has to know a lot about it's + // surrounding state and components, so it can't be within the component itself. + return function (item) { + if (systems.filter.tryAcceptItem(entity, matchingSlotIndex, item)) { + return true; + } }; } } @@ -365,17 +459,17 @@ export class BeltPath extends BasicSerializableObject { for (let i = 0; i < this.items.length; ++i) { const item = this.items[i]; - if (item[_nextDistance] < 0 || item[_nextDistance] > this.totalLength + 0.02) { + if (item[0 /* nextDistance */] < 0 || item[0 /* nextDistance */] > this.totalLength + 0.02) { return fail( "Item has invalid offset to next item: ", - item[_nextDistance], + item[0 /* nextDistance */], "(total length:", this.totalLength, ")" ); } - currentPos += item[_nextDistance]; + currentPos += item[0 /* nextDistance */]; } // Check the total sum matches @@ -387,7 +481,7 @@ export class BeltPath extends BasicSerializableObject { this.spacingToFirstItem, ") and items does not match total length (", this.totalLength, - ") -> items: " + this.items.map(i => i[_nextDistance]).join("|") + ") -> items: " + this.items.map(i => i[0 /* nextDistance */]).join("|") ); } @@ -399,43 +493,14 @@ export class BeltPath extends BasicSerializableObject { // Check acceptor const acceptor = this.computeAcceptingEntityAndSlot(true); - if (!!acceptor !== !!this.acceptorTarget) { - return fail("Acceptor target mismatch, acceptor", !!acceptor, "vs stored", !!this.acceptorTarget); - } - - if (acceptor) { - if (this.acceptorTarget.entity !== acceptor.entity) { - return fail( - "Mismatching entity on acceptor target:", - acceptor.entity.uid, - "vs", - this.acceptorTarget.entity.uid - ); - } - - if (this.acceptorTarget.slot !== acceptor.slot) { - return fail( - "Mismatching entity on acceptor target:", - acceptor.slot, - "vs stored", - this.acceptorTarget.slot - ); - } - - if (this.acceptorTarget.direction !== acceptor.direction) { - return fail( - "Mismatching direction on acceptor target:", - acceptor.direction, - "vs stored", - this.acceptorTarget.direction - ); - } + if (!!acceptor !== !!this.boundAcceptor) { + return fail("Acceptor target mismatch, acceptor", !!acceptor, "vs stored", !!this.boundAcceptor); } // Check first nonzero offset let firstNonzero = 0; for (let i = this.items.length - 2; i >= 0; --i) { - if (this.items[i][_nextDistance] < globalConfig.itemSpacingOnBelts + 1e-5) { + if (this.items[i][0 /* nextDistance */] < globalConfig.itemSpacingOnBelts + 1e-5) { ++firstNonzero; } else { break; @@ -483,11 +548,11 @@ export class BeltPath extends BasicSerializableObject { DEBUG && logger.log( " Extended spacing of last item from", - lastItem[_nextDistance], + lastItem[0 /* nextDistance */], "to", - lastItem[_nextDistance] + additionalLength + lastItem[0 /* nextDistance */] + additionalLength ); - lastItem[_nextDistance] += additionalLength; + lastItem[0 /* nextDistance */] += additionalLength; } // Assign reference @@ -618,7 +683,7 @@ export class BeltPath extends BasicSerializableObject { DEBUG && logger.log( "Old items are", - this.items.map(i => i[_nextDistance]) + this.items.map(i => i[0 /* nextDistance */]) ); // Create second path @@ -628,7 +693,7 @@ export class BeltPath extends BasicSerializableObject { let itemPos = this.spacingToFirstItem; for (let i = 0; i < this.items.length; ++i) { const item = this.items[i]; - const distanceToNext = item[_nextDistance]; + const distanceToNext = item[0 /* nextDistance */]; DEBUG && logger.log(" Checking item at", itemPos, "with distance of", distanceToNext, "to next"); @@ -643,7 +708,7 @@ export class BeltPath extends BasicSerializableObject { // Check if its on the second path (otherwise its on the removed belt and simply lost) if (itemPos >= secondPathStart) { // Put item on second path - secondPath.items.push([distanceToNext, item[_item]]); + secondPath.items.push([distanceToNext, item[1 /* item */]]); DEBUG && logger.log( " Put item to second path @", @@ -672,7 +737,7 @@ export class BeltPath extends BasicSerializableObject { "to", clampedDistanceToNext ); - item[_nextDistance] = clampedDistanceToNext; + item[0 /* nextDistance */] = clampedDistanceToNext; } } @@ -683,13 +748,13 @@ export class BeltPath extends BasicSerializableObject { DEBUG && logger.log( "New items are", - this.items.map(i => i[_nextDistance]) + this.items.map(i => i[0 /* nextDistance */]) ); DEBUG && logger.log( "And second path items are", - secondPath.items.map(i => i[_nextDistance]) + secondPath.items.map(i => i[0 /* nextDistance */]) ); // Adjust our total length @@ -776,9 +841,17 @@ export class BeltPath extends BasicSerializableObject { continue; } - DEBUG && logger.log("Item", i, "is at", itemOffset, "with next offset", item[_nextDistance]); + DEBUG && + logger.log( + "Item", + i, + "is at", + itemOffset, + "with next offset", + item[0 /* nextDistance */] + ); lastItemOffset = itemOffset; - itemOffset += item[_nextDistance]; + itemOffset += item[0 /* nextDistance */]; } // If we still have an item, make sure the last item matches @@ -805,7 +878,7 @@ export class BeltPath extends BasicSerializableObject { this.totalLength, ")" ); - this.items[this.items.length - 1][_nextDistance] = lastDistance; + this.items[this.items.length - 1][0 /* nextDistance */] = lastDistance; } else { DEBUG && logger.log(" Removed all items so we'll update spacing to total length"); @@ -893,7 +966,7 @@ export class BeltPath extends BasicSerializableObject { DEBUG && logger.log( " Items:", - this.items.map(i => i[_nextDistance]) + this.items.map(i => i[0 /* nextDistance */]) ); // Find offset to first item @@ -912,7 +985,7 @@ export class BeltPath extends BasicSerializableObject { // This item must be dropped this.items.splice(i, 1); i -= 1; - itemOffset += item[_nextDistance]; + itemOffset += item[0 /* nextDistance */]; continue; } else { // This item can be kept, thus its the first we know @@ -990,9 +1063,13 @@ export class BeltPath extends BasicSerializableObject { // Now, update the distance of our last item if (this.items.length !== 0) { const lastItem = this.items[this.items.length - 1]; - lastItem[_nextDistance] += otherPath.spacingToFirstItem; + lastItem[0 /* nextDistance */] += otherPath.spacingToFirstItem; DEBUG && - logger.log(" Add distance to last item, effectively being", lastItem[_nextDistance], "now"); + logger.log( + " Add distance to last item, effectively being", + lastItem[0 /* nextDistance */], + "now" + ); } else { // Seems we have no items, update our first item distance this.spacingToFirstItem = oldLength + otherPath.spacingToFirstItem; @@ -1012,7 +1089,7 @@ export class BeltPath extends BasicSerializableObject { // Aaand push the other paths items for (let i = 0; i < otherPath.items.length; ++i) { const item = otherPath.items[i]; - this.items.push([item[_nextDistance], item[_item]]); + this.items.push([item[0 /* nextDistance */], item[1 /* item */]]); } // Update bounds @@ -1046,6 +1123,11 @@ export class BeltPath extends BasicSerializableObject { this.debug_checkIntegrity("pre-update"); } + // Skip empty belts + if (this.items.length === 0) { + return; + } + // Divide by item spacing on belts since we use throughput and not speed let beltSpeed = this.root.hubGoals.getBeltBaseSpeed() * @@ -1074,30 +1156,40 @@ export class BeltPath extends BasicSerializableObject { lastItemProcessed === this.items.length - 1 ? 0 : globalConfig.itemSpacingOnBelts; // Compute how much we can advance - const clampedProgress = Math.max( - 0, - Math.min(remainingVelocity, nextDistanceAndItem[_nextDistance] - minimumSpacing) - ); + let clampedProgress = nextDistanceAndItem[0 /* nextDistance */] - minimumSpacing; + + // Make sure we don't advance more than the remaining velocity has stored + if (remainingVelocity < clampedProgress) { + clampedProgress = remainingVelocity; + } + + // Make sure we don't advance back + if (clampedProgress < 0) { + clampedProgress = 0; + } // Reduce our velocity by the amount we consumed remainingVelocity -= clampedProgress; // Reduce the spacing - nextDistanceAndItem[_nextDistance] -= clampedProgress; + nextDistanceAndItem[0 /* nextDistance */] -= clampedProgress; // Advance all items behind by the progress we made this.spacingToFirstItem += clampedProgress; // If the last item can be ejected, eject it and reduce the spacing, because otherwise // we lose velocity - if (isFirstItemProcessed && nextDistanceAndItem[_nextDistance] < 1e-7) { + if (isFirstItemProcessed && nextDistanceAndItem[0 /* nextDistance */] < 1e-7) { // Store how much velocity we "lost" because we bumped the item to the end of the // belt but couldn't move it any farther. We need this to tell the item acceptor // animation to start a tad later, so everything matches up. Yes I'm a perfectionist. const excessVelocity = beltSpeed - clampedProgress; // Try to directly get rid of the item - if (this.tryHandOverItem(nextDistanceAndItem[_item], excessVelocity)) { + if ( + this.boundAcceptor && + this.boundAcceptor(nextDistanceAndItem[1 /* item */], excessVelocity) + ) { this.items.pop(); const itemBehind = this.items[lastItemProcessed - 1]; @@ -1108,11 +1200,11 @@ export class BeltPath extends BasicSerializableObject { // Also see #999 const fixupProgress = Math.max( 0, - Math.min(remainingVelocity, itemBehind[_nextDistance]) + Math.min(remainingVelocity, itemBehind[0 /* nextDistance */]) ); // See above - itemBehind[_nextDistance] -= fixupProgress; + itemBehind[0 /* nextDistance */] -= fixupProgress; remainingVelocity -= fixupProgress; this.spacingToFirstItem += fixupProgress; } @@ -1145,8 +1237,8 @@ export class BeltPath extends BasicSerializableObject { // Check if we have an item which is ready to be emitted const lastItem = this.items[this.items.length - 1]; - if (lastItem && lastItem[_nextDistance] === 0 && this.acceptorTarget) { - if (this.tryHandOverItem(lastItem[_item])) { + if (lastItem && lastItem[0 /* nextDistance */] === 0) { + if (this.boundAcceptor && this.boundAcceptor(lastItem[1 /* item */])) { this.items.pop(); this.numCompressedItemsAfterFirstItem = Math.max( 0, @@ -1160,50 +1252,6 @@ export class BeltPath extends BasicSerializableObject { } } - /** - * Tries to hand over the item to the end entity - * @param {BaseItem} item - */ - tryHandOverItem(item, remainingProgress = 0.0) { - if (!this.acceptorTarget) { - return; - } - - const targetAcceptorComp = this.acceptorTarget.entity.components.ItemAcceptor; - - // Check if the acceptor has a filter for example - if (targetAcceptorComp && !targetAcceptorComp.canAcceptItem(this.acceptorTarget.slot, item)) { - // Well, this item is not accepted - return false; - } - - // Try to pass over - if ( - this.root.systemMgr.systems.itemEjector.tryPassOverItem( - item, - this.acceptorTarget.entity, - this.acceptorTarget.slot - ) - ) { - // Trigger animation on the acceptor comp - const targetAcceptorComp = this.acceptorTarget.entity.components.ItemAcceptor; - if (targetAcceptorComp) { - if (!this.root.app.settings.getAllSettings().simplifiedBelts) { - targetAcceptorComp.onItemAccepted( - this.acceptorTarget.slot, - this.acceptorTarget.direction, - item, - remainingProgress - ); - } - } - - return true; - } - - return false; - } - /** * Computes a world space position from the given progress * @param {number} progress @@ -1270,11 +1318,11 @@ export class BeltPath extends BasicSerializableObject { parameters.context.font = "6px GameFont"; parameters.context.fillStyle = "#111"; parameters.context.fillText( - "" + round4Digits(nextDistanceAndItem[_nextDistance]), + "" + round4Digits(nextDistanceAndItem[0 /* nextDistance */]), worldPos.x + 5, worldPos.y + 2 ); - progress += nextDistanceAndItem[_nextDistance]; + progress += nextDistanceAndItem[0 /* nextDistance */]; if (this.items.length - 1 - this.numCompressedItemsAfterFirstItem === i) { parameters.context.fillStyle = "red"; @@ -1370,7 +1418,7 @@ export class BeltPath extends BasicSerializableObject { const centerPos = staticComp.localTileToWorld(centerPosLocal).toWorldSpaceCenterOfTile(); parameters.context.globalAlpha = 0.5; - firstItem[_item].drawItemCenteredClipped(centerPos.x, centerPos.y, parameters); + firstItem[1 /* item */].drawItemCenteredClipped(centerPos.x, centerPos.y, parameters); parameters.context.globalAlpha = 1; } @@ -1402,7 +1450,7 @@ export class BeltPath extends BasicSerializableObject { const distanceAndItem = this.items[currentItemIndex]; - distanceAndItem[_item].drawItemCenteredClipped( + distanceAndItem[1 /* item */].drawItemCenteredClipped( worldPos.x, worldPos.y, parameters, @@ -1410,7 +1458,7 @@ export class BeltPath extends BasicSerializableObject { ); // Check for the next item - currentItemPos += distanceAndItem[_nextDistance]; + currentItemPos += distanceAndItem[0 /* nextDistance */]; ++currentItemIndex; if (currentItemIndex >= this.items.length) { diff --git a/src/js/game/blueprint.js b/src/js/game/blueprint.js index fe14175f..a928ee0e 100644 --- a/src/js/game/blueprint.js +++ b/src/js/game/blueprint.js @@ -159,8 +159,12 @@ export class Blueprint { const entity = this.entities[i]; const staticComp = entity.components.StaticMapEntity; + // Actually keeping this in as an easter egg to rotate the trash can + // if (staticComp.getMetaBuilding().getIsRotateable()) { staticComp.rotation = (staticComp.rotation + 90) % 360; staticComp.originalRotation = (staticComp.originalRotation + 90) % 360; + // } + staticComp.origin = staticComp.origin.rotateFastMultipleOf90(90); } } @@ -197,6 +201,9 @@ export class Blueprint { * @param {GameRoot} root */ canAfford(root) { + if (root.gameMode.getHasFreeCopyPaste()) { + return true; + } return root.hubGoals.getShapesStoredByKey(root.gameMode.getBlueprintShapeKey()) >= this.getCost(); } @@ -207,29 +214,31 @@ export class Blueprint { */ tryPlace(root, tile) { return root.logic.performBulkOperation(() => { - let count = 0; - for (let i = 0; i < this.entities.length; ++i) { - const entity = this.entities[i]; - if (!root.logic.checkCanPlaceEntity(entity, tile)) { - continue; + return root.logic.performImmutableOperation(() => { + let count = 0; + for (let i = 0; i < this.entities.length; ++i) { + const entity = this.entities[i]; + if (!root.logic.checkCanPlaceEntity(entity, tile)) { + continue; + } + + const clone = entity.clone(); + clone.components.StaticMapEntity.origin.addInplace(tile); + root.logic.freeEntityAreaBeforeBuild(clone); + root.map.placeStaticEntity(clone); + root.entityMgr.registerEntity(clone); + count++; } - const clone = entity.clone(); - clone.components.StaticMapEntity.origin.addInplace(tile); - root.logic.freeEntityAreaBeforeBuild(clone); - root.map.placeStaticEntity(clone); - root.entityMgr.registerEntity(clone); - count++; - } + root.signals.bulkAchievementCheck.dispatch( + ACHIEVEMENTS.placeBlueprint, + count, + ACHIEVEMENTS.placeBp1000, + count + ); - root.signals.bulkAchievementCheck.dispatch( - ACHIEVEMENTS.placeBlueprint, - count, - ACHIEVEMENTS.placeBp1000, - count - ); - - return count !== 0; + return count !== 0; + }); }); } } diff --git a/src/js/game/buildings/balancer.js b/src/js/game/buildings/balancer.js index 2f14e36c..38a568e1 100644 --- a/src/js/game/buildings/balancer.js +++ b/src/js/game/buildings/balancer.js @@ -66,6 +66,10 @@ export class MetaBalancerBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } + let speedMultiplier = 2; switch (variant) { case enumBalancerVariants.merger: @@ -88,9 +92,11 @@ export class MetaBalancerBuilding extends MetaBuilding { * @param {GameRoot} root */ getAvailableVariants(root) { - let available = [defaultBuildingVariant]; + const deterministic = root.gameMode.getIsDeterministic(); - if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_merger)) { + let available = deterministic ? [] : [defaultBuildingVariant]; + + if (!deterministic && root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_merger)) { available.push(enumBalancerVariants.merger, enumBalancerVariants.mergerInverse); } diff --git a/src/js/game/buildings/belt.js b/src/js/game/buildings/belt.js index 84646b19..f4e31ba9 100644 --- a/src/js/game/buildings/belt.js +++ b/src/js/game/buildings/belt.js @@ -55,6 +55,9 @@ export class MetaBeltBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } const beltSpeed = root.hubGoals.getBeltBaseSpeed(); return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(beltSpeed)]]; } diff --git a/src/js/game/buildings/block.js b/src/js/game/buildings/block.js new file mode 100644 index 00000000..d6499648 --- /dev/null +++ b/src/js/game/buildings/block.js @@ -0,0 +1,30 @@ +/* typehints:start */ +import { Entity } from "../entity"; +/* typehints:end */ + +import { MetaBuilding } from "../meta_building"; + +export class MetaBlockBuilding extends MetaBuilding { + constructor() { + super("block"); + } + + getSilhouetteColor() { + return "#333"; + } + + /** + * + * @param {import("../../savegame/savegame_serializer").GameRoot} root + * @returns + */ + getIsRemovable(root) { + return root.gameMode.getIsEditor(); + } + + /** + * Creates the entity at the given location + * @param {Entity} entity + */ + setupEntityComponents(entity) {} +} diff --git a/src/js/game/buildings/constant_producer.js b/src/js/game/buildings/constant_producer.js new file mode 100644 index 00000000..c1c502d0 --- /dev/null +++ b/src/js/game/buildings/constant_producer.js @@ -0,0 +1,42 @@ +/* typehints:start */ +import { Entity } from "../entity"; +/* typehints:end */ + +import { enumDirection, Vector } from "../../core/vector"; +import { ConstantSignalComponent } from "../components/constant_signal"; +import { ItemEjectorComponent } from "../components/item_ejector"; +import { ItemProducerComponent } from "../components/item_producer"; +import { MetaBuilding } from "../meta_building"; + +export class MetaConstantProducerBuilding extends MetaBuilding { + constructor() { + super("constant_producer"); + } + + getSilhouetteColor() { + return "#bfd630"; + } + + /** + * + * @param {import("../../savegame/savegame_serializer").GameRoot} root + * @returns + */ + getIsRemovable(root) { + return root.gameMode.getIsEditor(); + } + + /** + * Creates the entity at the given location + * @param {Entity} entity + */ + setupEntityComponents(entity) { + entity.addComponent( + new ItemEjectorComponent({ + slots: [{ pos: new Vector(0, 0), direction: enumDirection.top }], + }) + ); + entity.addComponent(new ItemProducerComponent({})); + entity.addComponent(new ConstantSignalComponent({})); + } +} diff --git a/src/js/game/buildings/cutter.js b/src/js/game/buildings/cutter.js index 7dee4449..37264c9d 100644 --- a/src/js/game/buildings/cutter.js +++ b/src/js/game/buildings/cutter.js @@ -38,6 +38,9 @@ export class MetaCutterBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } const speed = root.hubGoals.getProcessorBaseSpeed( variant === enumCutterVariants.quad ? enumItemProcessorTypes.cutterQuad diff --git a/src/js/game/buildings/filter.js b/src/js/game/buildings/filter.js index 2d81ce83..08296853 100644 --- a/src/js/game/buildings/filter.js +++ b/src/js/game/buildings/filter.js @@ -40,6 +40,9 @@ export class MetaFilterBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } const beltSpeed = root.hubGoals.getBeltBaseSpeed(); return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(beltSpeed)]]; } diff --git a/src/js/game/buildings/goal_acceptor.js b/src/js/game/buildings/goal_acceptor.js new file mode 100644 index 00000000..dde720e3 --- /dev/null +++ b/src/js/game/buildings/goal_acceptor.js @@ -0,0 +1,54 @@ +/* typehints:start */ +import { Entity } from "../entity"; +/* typehints:end */ + +import { enumDirection, Vector } from "../../core/vector"; +import { GoalAcceptorComponent } from "../components/goal_acceptor"; +import { ItemAcceptorComponent } from "../components/item_acceptor"; +import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor"; +import { MetaBuilding } from "../meta_building"; + +export class MetaGoalAcceptorBuilding extends MetaBuilding { + constructor() { + super("goal_acceptor"); + } + + getSilhouetteColor() { + return "#ce418a"; + } + + /** + * + * @param {import("../../savegame/savegame_serializer").GameRoot} root + * @returns + */ + getIsRemovable(root) { + return root.gameMode.getIsEditor(); + } + + /** + * Creates the entity at the given location + * @param {Entity} entity + */ + setupEntityComponents(entity) { + entity.addComponent( + new ItemAcceptorComponent({ + slots: [ + { + pos: new Vector(0, 0), + directions: [enumDirection.bottom], + filter: "shape", + }, + ], + }) + ); + + entity.addComponent( + new ItemProcessorComponent({ + processorType: enumItemProcessorTypes.goal, + }) + ); + + entity.addComponent(new GoalAcceptorComponent({})); + } +} diff --git a/src/js/game/buildings/item_producer.js b/src/js/game/buildings/item_producer.js index 477ed603..1140c8f1 100644 --- a/src/js/game/buildings/item_producer.js +++ b/src/js/game/buildings/item_producer.js @@ -39,6 +39,6 @@ export class MetaItemProducerBuilding extends MetaBuilding { ], }) ); - entity.addComponent(new ItemProducerComponent()); + entity.addComponent(new ItemProducerComponent({})); } } diff --git a/src/js/game/buildings/miner.js b/src/js/game/buildings/miner.js index f0b837a1..473aa262 100644 --- a/src/js/game/buildings/miner.js +++ b/src/js/game/buildings/miner.js @@ -31,6 +31,9 @@ export class MetaMinerBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } const speed = root.hubGoals.getMinerBaseSpeed(); return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(speed)]]; } diff --git a/src/js/game/buildings/mixer.js b/src/js/game/buildings/mixer.js index cbde309e..e572bbba 100644 --- a/src/js/game/buildings/mixer.js +++ b/src/js/game/buildings/mixer.js @@ -35,6 +35,9 @@ export class MetaMixerBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } const speed = root.hubGoals.getProcessorBaseSpeed(enumItemProcessorTypes.mixer); return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(speed)]]; } diff --git a/src/js/game/buildings/painter.js b/src/js/game/buildings/painter.js index 6e941403..e7a0b72d 100644 --- a/src/js/game/buildings/painter.js +++ b/src/js/game/buildings/painter.js @@ -46,6 +46,9 @@ export class MetaPainterBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } switch (variant) { case defaultBuildingVariant: case enumPainterVariants.mirrored: { @@ -71,7 +74,10 @@ export class MetaPainterBuilding extends MetaBuilding { if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_painter_double)) { variants.push(enumPainterVariants.double); } - if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers)) { + if ( + root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers) && + root.gameMode.getSupportsWires() + ) { variants.push(enumPainterVariants.quad); } return variants; diff --git a/src/js/game/buildings/rotater.js b/src/js/game/buildings/rotater.js index 7df94d16..f24fee14 100644 --- a/src/js/game/buildings/rotater.js +++ b/src/js/game/buildings/rotater.js @@ -48,6 +48,9 @@ export class MetaRotaterBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } switch (variant) { case defaultBuildingVariant: { const speed = root.hubGoals.getProcessorBaseSpeed(enumItemProcessorTypes.rotater); diff --git a/src/js/game/buildings/stacker.js b/src/js/game/buildings/stacker.js index 40a9c5ae..6b70365d 100644 --- a/src/js/game/buildings/stacker.js +++ b/src/js/game/buildings/stacker.js @@ -28,6 +28,9 @@ export class MetaStackerBuilding extends MetaBuilding { * @returns {Array<[string, string]>} */ getAdditionalStatistics(root, variant) { + if (root.gameMode.throughputDoesNotMatter()) { + return []; + } const speed = root.hubGoals.getProcessorBaseSpeed(enumItemProcessorTypes.stacker); return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(speed)]]; } diff --git a/src/js/game/buildings/underground_belt.js b/src/js/game/buildings/underground_belt.js index 2761443d..12e887c9 100644 --- a/src/js/game/buildings/underground_belt.js +++ b/src/js/game/buildings/underground_belt.js @@ -72,13 +72,21 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding { globalConfig.undergroundBeltMaxTilesByTier[enumUndergroundBeltVariantToTier[variant]]; const beltSpeed = root.hubGoals.getUndergroundBeltBaseSpeed(); - return [ + + /** @type {Array<[string, string]>} */ + const stats = [ [ T.ingame.buildingPlacement.infoTexts.range, T.ingame.buildingPlacement.infoTexts.tiles.replace("", "" + rangeTiles), ], - [T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(beltSpeed)], ]; + + if (root.gameMode.throughputDoesNotMatter()) { + return stats; + } + stats.push([T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(beltSpeed)]); + + return stats; } /** diff --git a/src/js/game/camera.js b/src/js/game/camera.js index 107d1fb4..fc90f4de 100644 --- a/src/js/game/camera.js +++ b/src/js/game/camera.js @@ -392,13 +392,20 @@ export class Camera extends BasicSerializableObject { return rect.containsPoint(point.x, point.y); } + getMaximumZoom() { + return this.root.gameMode.getMaximumZoom(); + } + + getMinimumZoom() { + return this.root.gameMode.getMinimumZoom(); + } + /** * Returns if we can further zoom in * @returns {boolean} */ canZoomIn() { - const maxLevel = this.root.app.platformWrapper.getMaximumZoom(); - return this.zoomLevel <= maxLevel - 0.01; + return this.zoomLevel <= this.getMaximumZoom() - 0.01; } /** @@ -406,8 +413,7 @@ export class Camera extends BasicSerializableObject { * @returns {boolean} */ canZoomOut() { - const minLevel = this.root.app.platformWrapper.getMinimumZoom(); - return this.zoomLevel >= minLevel + 0.01; + return this.zoomLevel >= this.getMinimumZoom() + 0.01; } // EVENTS @@ -468,6 +474,7 @@ export class Camera extends BasicSerializableObject { // Clamp everything afterwards this.clampZoomLevel(); + this.clampToBounds(); return false; } @@ -743,17 +750,29 @@ export class Camera extends BasicSerializableObject { if (G_IS_DEV && globalConfig.debug.disableZoomLimits) { return; } - const wrapper = this.root.app.platformWrapper; - assert(Number.isFinite(this.zoomLevel), "Invalid zoom level *before* clamp: " + this.zoomLevel); - this.zoomLevel = clamp(this.zoomLevel, wrapper.getMinimumZoom(), wrapper.getMaximumZoom()); + this.zoomLevel = clamp(this.zoomLevel, this.getMinimumZoom(), this.getMaximumZoom()); assert(Number.isFinite(this.zoomLevel), "Invalid zoom level *after* clamp: " + this.zoomLevel); if (this.desiredZoom) { - this.desiredZoom = clamp(this.desiredZoom, wrapper.getMinimumZoom(), wrapper.getMaximumZoom()); + this.desiredZoom = clamp(this.desiredZoom, this.getMinimumZoom(), this.getMaximumZoom()); } } + /** + * Clamps the center within set boundaries + */ + clampToBounds() { + const bounds = this.root.gameMode.getCameraBounds(); + if (!bounds) { + return; + } + + const tileScaleBounds = this.root.gameMode.getCameraBounds().allScaled(globalConfig.tileSize); + this.center.x = clamp(this.center.x, tileScaleBounds.x, tileScaleBounds.x + tileScaleBounds.w); + this.center.y = clamp(this.center.y, tileScaleBounds.y, tileScaleBounds.y + tileScaleBounds.h); + } + /** * Updates the camera * @param {number} dt Delta time in milliseconds @@ -857,6 +876,7 @@ export class Camera extends BasicSerializableObject { // Panning this.currentPan = mixVector(this.currentPan, this.desiredPan, 0.06); this.center = this.center.add(this.currentPan.multiplyScalar((0.5 * dt) / this.zoomLevel)); + this.clampToBounds(); } } @@ -921,6 +941,8 @@ export class Camera extends BasicSerializableObject { ((0.5 * dt) / this.zoomLevel) * this.root.app.settings.getMovementSpeed() ) ); + + this.clampToBounds(); } /** @@ -1006,6 +1028,8 @@ export class Camera extends BasicSerializableObject { this.center.x += moveAmount * forceX * movementSpeed; this.center.y += moveAmount * forceY * movementSpeed; + + this.clampToBounds(); } } } diff --git a/src/js/game/component.js b/src/js/game/component.js index 46b1b545..cff14d62 100644 --- a/src/js/game/component.js +++ b/src/js/game/component.js @@ -23,6 +23,11 @@ export class Component extends BasicSerializableObject { */ copyAdditionalStateTo(otherComponent) {} + /** + * Clears all items and state + */ + clear() {} + /* dev:start */ /** diff --git a/src/js/game/component_registry.js b/src/js/game/component_registry.js index f094e60d..9c9247e6 100644 --- a/src/js/game/component_registry.js +++ b/src/js/game/component_registry.js @@ -19,6 +19,7 @@ import { DisplayComponent } from "./components/display"; import { BeltReaderComponent } from "./components/belt_reader"; import { FilterComponent } from "./components/filter"; import { ItemProducerComponent } from "./components/item_producer"; +import { GoalAcceptorComponent } from "./components/goal_acceptor"; export function initComponentRegistry() { gComponentRegistry.register(StaticMapEntityComponent); @@ -41,6 +42,7 @@ export function initComponentRegistry() { gComponentRegistry.register(BeltReaderComponent); gComponentRegistry.register(FilterComponent); gComponentRegistry.register(ItemProducerComponent); + gComponentRegistry.register(GoalAcceptorComponent); // IMPORTANT ^^^^^ UPDATE ENTITY COMPONENT STORAGE AFTERWARDS diff --git a/src/js/game/components/belt.js b/src/js/game/components/belt.js index 138c4775..3144ad96 100644 --- a/src/js/game/components/belt.js +++ b/src/js/game/components/belt.js @@ -57,6 +57,12 @@ export class BeltComponent extends Component { this.assignedPath = null; } + clear() { + if (this.assignedPath) { + this.assignedPath.clearAllItems(); + } + } + /** * Returns the effective length of this belt in tile space * @returns {number} diff --git a/src/js/game/components/belt_reader.js b/src/js/game/components/belt_reader.js index d451bab5..187e53cd 100644 --- a/src/js/game/components/belt_reader.js +++ b/src/js/game/components/belt_reader.js @@ -3,6 +3,12 @@ import { BaseItem } from "../base_item"; import { typeItemSingleton } from "../item_resolver"; import { types } from "../../savegame/serialization"; +/** @enum {string} */ +export const enumBeltReaderType = { + wired: "wired", + wireless: "wireless", +}; + export class BeltReaderComponent extends Component { static getId() { return "BeltReader"; @@ -16,7 +22,10 @@ export class BeltReaderComponent extends Component { constructor() { super(); + this.clear(); + } + clear() { /** * Which items went through the reader, we only store the time * @type {Array} diff --git a/src/js/game/components/constant_signal.js b/src/js/game/components/constant_signal.js index 286108be..3f00ccba 100644 --- a/src/js/game/components/constant_signal.js +++ b/src/js/game/components/constant_signal.js @@ -1,7 +1,6 @@ -import { gItemRegistry } from "../../core/global_registries"; import { types } from "../../savegame/serialization"; -import { Component } from "../component"; import { BaseItem } from "../base_item"; +import { Component } from "../component"; import { typeItemSingleton } from "../item_resolver"; export class ConstantSignalComponent extends Component { diff --git a/src/js/game/components/filter.js b/src/js/game/components/filter.js index cffee969..8a22a076 100644 --- a/src/js/game/components/filter.js +++ b/src/js/game/components/filter.js @@ -40,6 +40,10 @@ export class FilterComponent extends Component { constructor() { super(); + this.clear(); + } + + clear() { /** * Items in queue to leave through * @type {Array} diff --git a/src/js/game/components/goal_acceptor.js b/src/js/game/components/goal_acceptor.js new file mode 100644 index 00000000..fa5f5908 --- /dev/null +++ b/src/js/game/components/goal_acceptor.js @@ -0,0 +1,67 @@ +import { globalConfig } from "../../core/config"; +import { BaseItem } from "../base_item"; +import { Component } from "../component"; +import { typeItemSingleton } from "../item_resolver"; + +export class GoalAcceptorComponent extends Component { + static getId() { + return "GoalAcceptor"; + } + + static getSchema() { + return { + item: typeItemSingleton, + }; + } + + /** + * @param {object} param0 + * @param {BaseItem=} param0.item + * @param {number=} param0.rate + */ + constructor({ item = null, rate = null }) { + super(); + + // ths item to produce + /** @type {BaseItem | undefined} */ + this.item = item; + + this.clear(); + } + + clear() { + /** + * The last item we delivered + * @type {{ item: BaseItem; time: number; } | null} */ + this.lastDelivery = null; + + // The amount of items we delivered so far + this.currentDeliveredItems = 0; + + // Used for animations + this.displayPercentage = 0; + } + + /** + * Clears items but doesn't instantly reset the progress bar + */ + clearItems() { + this.lastDelivery = null; + this.currentDeliveredItems = 0; + } + + getRequiredSecondsPerItem() { + return ( + globalConfig.goalAcceptorsPerProducer / + (globalConfig.puzzleModeSpeed * globalConfig.beltSpeedItemsPerSecond) + ); + } + + /** + * Copy the current state to another component + * @param {GoalAcceptorComponent} otherComponent + */ + copyAdditionalStateTo(otherComponent) { + otherComponent.item = this.item; + } +} diff --git a/src/js/game/components/item_acceptor.js b/src/js/game/components/item_acceptor.js index 7dbd9677..354f9024 100644 --- a/src/js/game/components/item_acceptor.js +++ b/src/js/game/components/item_acceptor.js @@ -36,6 +36,11 @@ export class ItemAcceptorComponent extends Component { constructor({ slots = [] }) { super(); + this.setSlots(slots); + this.clear(); + } + + clear() { /** * Fixes belt animations * @type {Array<{ @@ -46,8 +51,6 @@ export class ItemAcceptorComponent extends Component { * }>} */ this.itemConsumptionAnimations = []; - - this.setSlots(slots); } /** @@ -71,6 +74,8 @@ export class ItemAcceptorComponent extends Component { /** * Returns if this acceptor can accept a new item at slot N + * + * NOTICE: The belt path ignores this for performance reasons and does his own check * @param {number} slotIndex * @param {BaseItem=} item */ diff --git a/src/js/game/components/item_ejector.js b/src/js/game/components/item_ejector.js index 47253b4b..bfc54cd8 100644 --- a/src/js/game/components/item_ejector.js +++ b/src/js/game/components/item_ejector.js @@ -11,6 +11,7 @@ import { typeItemSingleton } from "../item_resolver"; * pos: Vector, * direction: enumDirection, * item: BaseItem, + * lastItem: BaseItem, * progress: number?, * cachedDestSlot?: import("./item_acceptor").ItemAcceptorLocatedSlot, * cachedBeltPath?: BeltPath, @@ -48,6 +49,14 @@ export class ItemEjectorComponent extends Component { this.renderFloatingItems = renderFloatingItems; } + clear() { + for (const slot of this.slots) { + slot.item = null; + slot.lastItem = null; + slot.progress = 0; + } + } + /** * @param {Array<{pos: Vector, direction: enumDirection }>} slots The slots to eject on */ @@ -60,6 +69,7 @@ export class ItemEjectorComponent extends Component { pos: slot.pos, direction: slot.direction, item: null, + lastItem: null, progress: 0, cachedDestSlot: null, cachedTargetEntity: null, @@ -124,6 +134,7 @@ export class ItemEjectorComponent extends Component { return false; } this.slots[slotIndex].item = item; + this.slots[slotIndex].lastItem = item; this.slots[slotIndex].progress = 0; return true; } diff --git a/src/js/game/components/item_processor.js b/src/js/game/components/item_processor.js index fd466662..f7dddec1 100644 --- a/src/js/game/components/item_processor.js +++ b/src/js/game/components/item_processor.js @@ -19,6 +19,7 @@ export const enumItemProcessorTypes = { hub: "hub", filter: "filter", reader: "reader", + goal: "goal", }; /** @enum {string} */ @@ -63,10 +64,8 @@ export class ItemProcessorComponent extends Component { }) { super(); - // Which slot to emit next, this is only a preference and if it can't emit - // it will take the other one. Some machines ignore this (e.g. the balancer) to make - // sure the outputs always match - this.nextOutputSlot = 0; + // How many inputs we need for one charge + this.inputsPerCharge = inputsPerCharge; // Type of the processor this.type = processorType; @@ -74,14 +73,28 @@ export class ItemProcessorComponent extends Component { // Type of processing requirement this.processingRequirement = processingRequirement; - // How many inputs we need for one charge - this.inputsPerCharge = inputsPerCharge; - /** * Our current inputs - * @type {Array<{ item: BaseItem, sourceSlot: number }>} + * @type {Map} */ - this.inputSlots = []; + this.inputSlots = new Map(); + + this.clear(); + } + + clear() { + // Which slot to emit next, this is only a preference and if it can't emit + // it will take the other one. Some machines ignore this (e.g. the balancer) to make + // sure the outputs always match + this.nextOutputSlot = 0; + + this.inputSlots.clear(); + + /** + * Current input count + * @type {number} + */ + this.inputCount = 0; /** * What we are currently processing, empty if we don't produce anything rn @@ -104,21 +117,23 @@ export class ItemProcessorComponent extends Component { * @param {number} sourceSlot */ tryTakeItem(item, sourceSlot) { - if (this.type === enumItemProcessorTypes.hub || this.type === enumItemProcessorTypes.trash) { + if ( + this.type === enumItemProcessorTypes.hub || + this.type === enumItemProcessorTypes.trash || + this.type === enumItemProcessorTypes.goal + ) { // Hub has special logic .. not really nice but efficient. - this.inputSlots.push({ item, sourceSlot }); + this.inputSlots.set(this.inputCount, item); + this.inputCount++; return true; } // Check that we only take one item per slot - for (let i = 0; i < this.inputSlots.length; ++i) { - const slot = this.inputSlots[i]; - if (slot.sourceSlot === sourceSlot) { - return false; - } + if (this.inputSlots.has(sourceSlot)) { + return false; } - - this.inputSlots.push({ item, sourceSlot }); + this.inputSlots.set(sourceSlot, item); + this.inputCount++; return true; } } diff --git a/src/js/game/components/miner.js b/src/js/game/components/miner.js index ab87760f..5321ae11 100644 --- a/src/js/game/components/miner.js +++ b/src/js/game/components/miner.js @@ -24,13 +24,6 @@ export class MinerComponent extends Component { this.lastMiningTime = 0; this.chainable = chainable; - /** - * Stores items from other miners which were chained to this - * miner. - * @type {Array} - */ - this.itemChainBuffer = []; - /** * @type {BaseItem} */ @@ -42,6 +35,17 @@ export class MinerComponent extends Component { * @type {Entity|null|false} */ this.cachedChainedMiner = null; + + this.clear(); + } + + clear() { + /** + * Stores items from other miners which were chained to this + * miner. + * @type {Array} + */ + this.itemChainBuffer = []; } /** diff --git a/src/js/game/components/static_map_entity.js b/src/js/game/components/static_map_entity.js index 7e2f5314..c76a298e 100644 --- a/src/js/game/components/static_map_entity.js +++ b/src/js/game/components/static_map_entity.js @@ -71,6 +71,14 @@ export class StaticMapEntityComponent extends Component { return getBuildingDataFromCode(this.code).variant; } + /** + * Returns the buildings rotation variant + * @returns {number} + */ + getRotationVariant() { + return getBuildingDataFromCode(this.code).rotationVariant; + } + /** * Copy the current state to another component * @param {Component} otherComponent diff --git a/src/js/game/components/underground_belt.js b/src/js/game/components/underground_belt.js index a3e883ec..2b744edd 100644 --- a/src/js/game/components/underground_belt.js +++ b/src/js/game/components/underground_belt.js @@ -41,6 +41,17 @@ export class UndergroundBeltComponent extends Component { this.mode = mode; this.tier = tier; + /** + * The linked entity, used to speed up performance. This contains either + * the entrance or exit depending on the tunnel type + * @type {LinkedUndergroundBelt} + */ + this.cachedLinkedEntity = null; + + this.clear(); + } + + clear() { /** @type {Array<{ item: BaseItem, progress: number }>} */ this.consumptionAnimations = []; @@ -51,13 +62,6 @@ export class UndergroundBeltComponent extends Component { * @type {Array<[BaseItem, number]>} Format is [Item, ingame time to eject the item] */ this.pendingItems = []; - - /** - * The linked entity, used to speed up performance. This contains either - * the entrance or exit depending on the tunnel type - * @type {LinkedUndergroundBelt} - */ - this.cachedLinkedEntity = null; } /** diff --git a/src/js/game/core.js b/src/js/game/core.js index f4b3e9ee..a0ee3713 100644 --- a/src/js/game/core.js +++ b/src/js/game/core.js @@ -31,7 +31,7 @@ import { KeyActionMapper } from "./key_action_mapper"; import { GameLogic } from "./logic"; import { MapView } from "./map_view"; import { defaultBuildingVariant } from "./meta_building"; -import { RegularGameMode } from "./modes/regular"; +import { GameMode } from "./game_mode"; import { ProductionAnalytics } from "./production_analytics"; import { GameRoot } from "./root"; import { ShapeDefinitionManager } from "./shape_definition_manager"; @@ -82,7 +82,9 @@ export class GameCore { * @param {import("../states/ingame").InGameState} parentState * @param {Savegame} savegame */ - initializeRoot(parentState, savegame) { + initializeRoot(parentState, savegame, gameModeId) { + logger.log("initializing root"); + // Construct the root element, this is the data representation of the game this.root = new GameRoot(this.app); this.root.gameState = parentState; @@ -100,12 +102,12 @@ export class GameCore { // This isn't nice, but we need it right here root.keyMapper = new KeyActionMapper(root, this.root.gameState.inputReciever); + // Init game mode + root.gameMode = GameMode.create(root, gameModeId, parentState.creationPayload.gameModeParameters); + // Needs to come first root.dynamicTickrate = new DynamicTickrate(root); - // Init game mode - root.gameMode = new RegularGameMode(root); - // Init classes root.camera = new Camera(root); root.map = new MapView(root); @@ -157,6 +159,8 @@ export class GameCore { } }); } + + logger.log("root initialized"); } /** @@ -168,6 +172,10 @@ export class GameCore { this.root.gameIsFresh = true; this.root.map.seed = randomInt(0, 100000); + if (!this.root.gameMode.hasHub()) { + return; + } + // Place the hub const hub = gMetaBuildingRegistry.findByClass(MetaHubBuilding).createEntity({ root: this.root, @@ -447,7 +455,9 @@ export class GameCore { systems.hub.draw(params); // Green wires overlay - root.hud.parts.wiresOverlay.draw(params); + if (root.hud.parts.wiresOverlay) { + root.hud.parts.wiresOverlay.draw(params); + } if (this.root.currentLayer === "wires") { // Static map entities diff --git a/src/js/game/dynamic_tickrate.js b/src/js/game/dynamic_tickrate.js index 3e29aba3..c76fa2e1 100644 --- a/src/js/game/dynamic_tickrate.js +++ b/src/js/game/dynamic_tickrate.js @@ -23,10 +23,16 @@ export class DynamicTickrate { this.averageFps = 60; - this.setTickRate(this.root.app.settings.getDesiredFps()); + const fixedRate = this.root.gameMode.getFixedTickrate(); + if (fixedRate) { + logger.log("Setting fixed tickrate of", fixedRate); + this.setTickRate(fixedRate); + } else { + this.setTickRate(this.root.app.settings.getDesiredFps()); - if (G_IS_DEV && globalConfig.debug.renderForTrailer) { - this.setTickRate(300); + if (G_IS_DEV && globalConfig.debug.renderForTrailer) { + this.setTickRate(300); + } } } @@ -99,9 +105,7 @@ export class DynamicTickrate { this.averageTickDuration = average; - const desiredFps = this.root.app.settings.getDesiredFps(); - - // Disabled for now: Dynamicall adjusting tick rate + // Disabled for now: Dynamically adjusting tick rate // if (this.averageFps > desiredFps * 0.9) { // // if (average < maxTickDuration) { // this.increaseTickRate(); diff --git a/src/js/game/entity_components.js b/src/js/game/entity_components.js index 7dee590a..163be9f9 100644 --- a/src/js/game/entity_components.js +++ b/src/js/game/entity_components.js @@ -19,6 +19,7 @@ import { DisplayComponent } from "./components/display"; import { BeltReaderComponent } from "./components/belt_reader"; import { FilterComponent } from "./components/filter"; import { ItemProducerComponent } from "./components/item_producer"; +import { GoalAcceptorComponent } from "./components/goal_acceptor"; /* typehints:end */ /** @@ -89,6 +90,9 @@ export class EntityComponentStorage { /** @type {ItemProducerComponent} */ this.ItemProducer; + /** @type {GoalAcceptorComponent} */ + this.GoalAcceptor; + /* typehints:end */ } } diff --git a/src/js/game/game_mode.js b/src/js/game/game_mode.js index 15403eb5..5414306c 100644 --- a/src/js/game/game_mode.js +++ b/src/js/game/game_mode.js @@ -1,71 +1,197 @@ /* typehints:start */ -import { enumHubGoalRewards } from "./tutorial_goals"; +import { GameRoot } from "./root"; /* typehints:end */ -import { GameRoot } from "./root"; +import { Rectangle } from "../core/rectangle"; +import { gGameModeRegistry } from "../core/global_registries"; +import { types, BasicSerializableObject } from "../savegame/serialization"; +import { MetaBuilding } from "./meta_building"; +import { MetaItemProducerBuilding } from "./buildings/item_producer"; +import { BaseHUDPart } from "./hud/base_hud_part"; -/** @typedef {{ - * shape: string, - * amount: number - * }} UpgradeRequirement */ +/** @enum {string} */ +export const enumGameModeIds = { + puzzleEdit: "puzzleEditMode", + puzzlePlay: "puzzlePlayMode", + regular: "regularMode", +}; -/** @typedef {{ - * required: Array - * improvement?: number, - * excludePrevious?: boolean - * }} TierRequirement */ +/** @enum {string} */ +export const enumGameModeTypes = { + default: "defaultModeType", + puzzle: "puzzleModeType", +}; -/** @typedef {Array} UpgradeTiers */ +export class GameMode extends BasicSerializableObject { + /** @returns {string} */ + static getId() { + abstract; + return "unknownMode"; + } + + /** @returns {string} */ + static getType() { + abstract; + return "unknownType"; + } + /** + * @param {GameRoot} root + * @param {string} [id=Regular] + * @param {object|undefined} payload + */ + static create(root, id = enumGameModeIds.regular, payload = undefined) { + return new (gGameModeRegistry.findById(id))(root, payload); + } -/** @typedef {{ - * shape: string, - * required: number, - * reward: enumHubGoalRewards, - * throughputOnly?: boolean - * }} LevelDefinition */ - -export class GameMode { /** - * * @param {GameRoot} root */ constructor(root) { + super(); this.root = root; + + /** + * @type {Record} + */ + this.additionalHudParts = {}; + + /** @type {typeof MetaBuilding[]} */ + this.hiddenBuildings = [MetaItemProducerBuilding]; + } + + /** @returns {object} */ + serialize() { + return { + $: this.getId(), + data: super.serialize(), + }; + } + + /** @param {object} savedata */ + deserialize({ data }) { + super.deserialize(data, this.root); + } + + /** @returns {string} */ + getId() { + // @ts-ignore + return this.constructor.getId(); + } + + /** @returns {string} */ + getType() { + // @ts-ignore + return this.constructor.getType(); } /** - * Should return all available upgrades - * @returns {Object} - */ - getUpgrades() { - abstract; - return null; - } - - /** - * Returns the blueprint shape key - * @returns {string} - */ - getBlueprintShapeKey() { - abstract; - return null; - } - - /** - * Returns the goals for all levels including their reward - * @returns {Array} - */ - getLevelDefinitions() { - abstract; - return null; - } - - /** - * Should return whether free play is available or if the game stops - * after the predefined levels + * @param {typeof MetaBuilding} building - Class name of building * @returns {boolean} */ - getIsFreeplayAvailable() { + isBuildingExcluded(building) { + return this.hiddenBuildings.indexOf(building) >= 0; + } + + /** @returns {undefined|Rectangle[]} */ + getBuildableZones() { + return; + } + + /** @returns {Rectangle|undefined} */ + getCameraBounds() { + return; + } + + /** @returns {boolean} */ + hasHub() { return true; } + + /** @returns {boolean} */ + hasResources() { + return true; + } + + /** @returns {boolean} */ + hasAchievements() { + return false; + } + + /** @returns {number} */ + getMinimumZoom() { + return 0.06; + } + + /** @returns {number} */ + getMaximumZoom() { + return 3.5; + } + + /** @returns {Object} */ + getUpgrades() { + return { + belt: [], + miner: [], + processors: [], + painting: [], + }; + } + + throughputDoesNotMatter() { + return false; + } + + /** + * @param {number} w + * @param {number} h + */ + adjustZone(w = 0, h = 0) { + abstract; + return; + } + + /** @returns {array} */ + getLevelDefinitions() { + return []; + } + + /** @returns {boolean} */ + getIsFreeplayAvailable() { + return false; + } + + /** @returns {boolean} */ + getIsSaveable() { + return true; + } + + /** @returns {boolean} */ + getHasFreeCopyPaste() { + return false; + } + + /** @returns {boolean} */ + getSupportsWires() { + return true; + } + + /** @returns {boolean} */ + getIsEditor() { + return false; + } + + /** @returns {boolean} */ + getIsDeterministic() { + return false; + } + + /** @returns {number | undefined} */ + getFixedTickrate() { + return; + } + + /** @returns {string} */ + getBlueprintShapeKey() { + return "CbCbCbRb:CwCwCwCw"; + } } diff --git a/src/js/game/game_mode_registry.js b/src/js/game/game_mode_registry.js new file mode 100644 index 00000000..03daceb0 --- /dev/null +++ b/src/js/game/game_mode_registry.js @@ -0,0 +1,10 @@ +import { gGameModeRegistry } from "../core/global_registries"; +import { PuzzleEditGameMode } from "./modes/puzzle_edit"; +import { PuzzlePlayGameMode } from "./modes/puzzle_play"; +import { RegularGameMode } from "./modes/regular"; + +export function initGameModeRegistry() { + gGameModeRegistry.register(PuzzleEditGameMode); + gGameModeRegistry.register(PuzzlePlayGameMode); + gGameModeRegistry.register(RegularGameMode); +} diff --git a/src/js/game/game_system_manager.js b/src/js/game/game_system_manager.js index 74ba798f..08609f89 100644 --- a/src/js/game/game_system_manager.js +++ b/src/js/game/game_system_manager.js @@ -24,6 +24,9 @@ import { ItemProcessorOverlaysSystem } from "./systems/item_processor_overlays"; import { BeltReaderSystem } from "./systems/belt_reader"; import { FilterSystem } from "./systems/filter"; import { ItemProducerSystem } from "./systems/item_producer"; +import { ConstantProducerSystem } from "./systems/constant_producer"; +import { GoalAcceptorSystem } from "./systems/goal_acceptor"; +import { ZoneSystem } from "./systems/zone"; const logger = createLogger("game_system_manager"); @@ -100,6 +103,15 @@ export class GameSystemManager { /** @type {ItemProducerSystem} */ itemProducer: null, + /** @type {ConstantProducerSystem} */ + ConstantProducer: null, + + /** @type {GoalAcceptorSystem} */ + GoalAcceptor: null, + + /** @type {ZoneSystem} */ + zone: null, + /* typehints:end */ }; this.systemUpdateOrder = []; @@ -138,7 +150,9 @@ export class GameSystemManager { add("itemEjector", ItemEjectorSystem); - add("mapResources", MapResourcesSystem); + if (this.root.gameMode.hasResources()) { + add("mapResources", MapResourcesSystem); + } add("hub", HubSystem); @@ -165,6 +179,14 @@ export class GameSystemManager { add("itemProcessorOverlays", ItemProcessorOverlaysSystem); + add("constantProducer", ConstantProducerSystem); + + add("goalAcceptor", GoalAcceptorSystem); + + if (this.root.gameMode.getBuildableZones()) { + add("zone", ZoneSystem); + } + logger.log("📦 There are", this.systemUpdateOrder.length, "game systems"); } diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index 327b6da7..8351775e 100644 --- a/src/js/game/hub_goals.js +++ b/src/js/game/hub_goals.js @@ -110,7 +110,7 @@ export class HubGoals extends BasicSerializableObject { // Allow quickly switching goals in dev mode if (G_IS_DEV) { window.addEventListener("keydown", ev => { - if (ev.key === "b") { + if (ev.key === "p") { // root is not guaranteed to exist within ~0.5s after loading in if (this.root && this.root.app && this.root.app.gameAnalytics) { if (!this.isEndOfDemoReached()) { @@ -195,6 +195,10 @@ export class HubGoals extends BasicSerializableObject { if (G_IS_DEV && globalConfig.debug.allBuildingsUnlocked) { return true; } + if (this.root.gameMode.getLevelDefinitions().length < 1) { + // no story, so always unlocked + return true; + } return !!this.gainedRewards[reward]; } @@ -472,6 +476,9 @@ export class HubGoals extends BasicSerializableObject { * @returns {number} items / sec */ getBeltBaseSpeed() { + if (this.root.gameMode.throughputDoesNotMatter()) { + return globalConfig.beltSpeedItemsPerSecond * globalConfig.puzzleModeSpeed; + } return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt; } @@ -480,6 +487,9 @@ export class HubGoals extends BasicSerializableObject { * @returns {number} items / sec */ getUndergroundBeltBaseSpeed() { + if (this.root.gameMode.throughputDoesNotMatter()) { + return globalConfig.beltSpeedItemsPerSecond * globalConfig.puzzleModeSpeed; + } return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt; } @@ -488,6 +498,9 @@ export class HubGoals extends BasicSerializableObject { * @returns {number} items / sec */ getMinerBaseSpeed() { + if (this.root.gameMode.throughputDoesNotMatter()) { + return globalConfig.minerSpeedItemsPerSecond * globalConfig.puzzleModeSpeed; + } return globalConfig.minerSpeedItemsPerSecond * this.upgradeImprovements.miner; } @@ -497,9 +510,14 @@ export class HubGoals extends BasicSerializableObject { * @returns {number} items / sec */ getProcessorBaseSpeed(processorType) { + if (this.root.gameMode.throughputDoesNotMatter()) { + return globalConfig.beltSpeedItemsPerSecond * globalConfig.puzzleModeSpeed * 10; + } + switch (processorType) { case enumItemProcessorTypes.trash: case enumItemProcessorTypes.hub: + case enumItemProcessorTypes.goal: return 1e30; case enumItemProcessorTypes.balancer: return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt * 2; diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index d64f96a8..3d22787c 100644 --- a/src/js/game/hud/hud.js +++ b/src/js/game/hud/hud.js @@ -1,54 +1,24 @@ -/* typehints:start */ -import { GameRoot } from "../root"; -/* typehints:end */ - -/* dev:start */ -import { TrailerMaker } from "./trailer_maker"; -/* dev:end */ - -import { Signal } from "../../core/signal"; +import { globalConfig } from "../../core/config"; import { DrawParameters } from "../../core/draw_parameters"; +import { Signal } from "../../core/signal"; +import { KEYMAPPINGS } from "../key_action_mapper"; +import { MetaBuilding } from "../meta_building"; +import { GameRoot } from "../root"; +import { ShapeDefinition } from "../shape_definition"; +import { HUDBetaOverlay } from "./parts/beta_overlay"; +import { HUDBlueprintPlacer } from "./parts/blueprint_placer"; import { HUDBuildingsToolbar } from "./parts/buildings_toolbar"; import { HUDBuildingPlacer } from "./parts/building_placer"; -import { HUDBlueprintPlacer } from "./parts/blueprint_placer"; -import { HUDKeybindingOverlay } from "./parts/keybinding_overlay"; -import { HUDUnlockNotification } from "./parts/unlock_notification"; -import { HUDGameMenu } from "./parts/game_menu"; -import { HUDShop } from "./parts/shop"; -import { IS_MOBILE, globalConfig } from "../../core/config"; -import { HUDMassSelector } from "./parts/mass_selector"; -import { HUDVignetteOverlay } from "./parts/vignette_overlay"; -import { HUDStatistics } from "./parts/statistics"; -import { MetaBuilding } from "../meta_building"; -import { HUDPinnedShapes } from "./parts/pinned_shapes"; -import { ShapeDefinition } from "../shape_definition"; -import { HUDNotifications, enumNotificationType } from "./parts/notifications"; -import { HUDSettingsMenu } from "./parts/settings_menu"; +import { HUDColorBlindHelper } from "./parts/color_blind_helper"; +import { HUDChangesDebugger } from "./parts/debug_changes"; import { HUDDebugInfo } from "./parts/debug_info"; import { HUDEntityDebugger } from "./parts/entity_debugger"; -import { KEYMAPPINGS } from "../key_action_mapper"; -import { HUDWatermark } from "./parts/watermark"; import { HUDModalDialogs } from "./parts/modal_dialogs"; -import { HUDPartTutorialHints } from "./parts/tutorial_hints"; -import { HUDWaypoints } from "./parts/waypoints"; -import { HUDInteractiveTutorial } from "./parts/interactive_tutorial"; -import { HUDScreenshotExporter } from "./parts/screenshot_exporter"; -import { HUDColorBlindHelper } from "./parts/color_blind_helper"; -import { HUDShapeViewer } from "./parts/shape_viewer"; -import { HUDWiresOverlay } from "./parts/wires_overlay"; -import { HUDChangesDebugger } from "./parts/debug_changes"; -import { queryParamOptions } from "../../core/query_parameters"; -import { HUDSandboxController } from "./parts/sandbox_controller"; -import { HUDWiresToolbar } from "./parts/wires_toolbar"; -import { HUDWireInfo } from "./parts/wire_info"; -import { HUDLeverToggle } from "./parts/lever_toggle"; -import { HUDLayerPreview } from "./parts/layer_preview"; -import { HUDMinerHighlight } from "./parts/miner_highlight"; -import { HUDBetaOverlay } from "./parts/beta_overlay"; -import { HUDStandaloneAdvantages } from "./parts/standalone_advantages"; -import { HUDCatMemes } from "./parts/cat_memes"; -import { HUDTutorialVideoOffer } from "./parts/tutorial_video_offer"; -import { HUDConstantSignalEdit } from "./parts/constant_signal_edit"; +import { enumNotificationType } from "./parts/notifications"; +import { HUDSettingsMenu } from "./parts/settings_menu"; +import { HUDShapeTooltip } from "./parts/shape_tooltip"; +import { HUDVignetteOverlay } from "./parts/vignette_overlay"; +import { TrailerMaker } from "./trailer_maker"; export class GameHUD { /** @@ -76,33 +46,16 @@ export class GameHUD { this.parts = { buildingsToolbar: new HUDBuildingsToolbar(this.root), - wiresToolbar: new HUDWiresToolbar(this.root), + blueprintPlacer: new HUDBlueprintPlacer(this.root), buildingPlacer: new HUDBuildingPlacer(this.root), - unlockNotification: new HUDUnlockNotification(this.root), - gameMenu: new HUDGameMenu(this.root), - massSelector: new HUDMassSelector(this.root), - shop: new HUDShop(this.root), - statistics: new HUDStatistics(this.root), - waypoints: new HUDWaypoints(this.root), - wireInfo: new HUDWireInfo(this.root), - leverToggle: new HUDLeverToggle(this.root), - constantSignalEdit: new HUDConstantSignalEdit(this.root), + + shapeTooltip: new HUDShapeTooltip(this.root), // Must always exist - pinnedShapes: new HUDPinnedShapes(this.root), - notifications: new HUDNotifications(this.root), settingsMenu: new HUDSettingsMenu(this.root), debugInfo: new HUDDebugInfo(this.root), dialogs: new HUDModalDialogs(this.root), - screenshotExporter: new HUDScreenshotExporter(this.root), - shapeViewer: new HUDShapeViewer(this.root), - - wiresOverlay: new HUDWiresOverlay(this.root), - layerPreview: new HUDLayerPreview(this.root), - - minerHighlight: new HUDMinerHighlight(this.root), - tutorialVideoOffer: new HUDTutorialVideoOffer(this.root), // Typing hints /* typehints:start */ @@ -111,29 +64,14 @@ export class GameHUD { /* typehints:end */ }; - if (!IS_MOBILE) { - this.parts.keybindingOverlay = new HUDKeybindingOverlay(this.root); - } - if (G_IS_DEV && globalConfig.debug.enableEntityInspector) { this.parts.entityDebugger = new HUDEntityDebugger(this.root); } - if (this.root.app.restrictionMgr.getIsStandaloneMarketingActive()) { - this.parts.watermark = new HUDWatermark(this.root); - this.parts.standaloneAdvantages = new HUDStandaloneAdvantages(this.root); - this.parts.catMemes = new HUDCatMemes(this.root); - } - if (G_IS_DEV && globalConfig.debug.renderChanges) { this.parts.changesDebugger = new HUDChangesDebugger(this.root); } - if (this.root.app.settings.getAllSettings().offerHints) { - this.parts.tutorialHints = new HUDPartTutorialHints(this.root); - this.parts.interactiveTutorial = new HUDInteractiveTutorial(this.root); - } - if (this.root.app.settings.getAllSettings().vignette) { this.parts.vignetteOverlay = new HUDVignetteOverlay(this.root); } @@ -142,14 +80,15 @@ export class GameHUD { this.parts.colorBlindHelper = new HUDColorBlindHelper(this.root); } - if (queryParamOptions.sandboxMode || G_IS_DEV) { - this.parts.sandboxController = new HUDSandboxController(this.root); - } - if (!G_IS_RELEASE && !G_IS_DEV) { this.parts.betaOverlay = new HUDBetaOverlay(this.root); } + const additionalParts = this.root.gameMode.additionalHudParts; + for (const [partId, part] of Object.entries(additionalParts)) { + this.parts[partId] = new part(this.root); + } + const frag = document.createDocumentFragment(); for (const key in this.parts) { this.parts[key].createElements(frag); @@ -253,6 +192,7 @@ export class GameHUD { "colorBlindHelper", "changesDebugger", "minerHighlight", + "shapeTooltip", ]; for (let i = 0; i < partsOrder.length; ++i) { diff --git a/src/js/game/hud/parts/HUDPuzzleNextPuzzle.js b/src/js/game/hud/parts/HUDPuzzleNextPuzzle.js new file mode 100644 index 00000000..472a3491 --- /dev/null +++ b/src/js/game/hud/parts/HUDPuzzleNextPuzzle.js @@ -0,0 +1,29 @@ +/* typehints:start */ +import { PuzzlePlayGameMode } from "../../modes/puzzle_play"; +/* typehints:end */ + +import { makeDiv } from "../../../core/utils"; +import { T } from "../../../translations"; + +import { BaseHUDPart } from "../base_hud_part"; + +export class HUDPuzzleNextPuzzle extends BaseHUDPart { + createElements(parent) { + this.element = makeDiv(parent, "ingame_HUD_PuzzleNextPuzzle"); + this.button = document.createElement("button"); + this.button.classList.add("button"); + this.button.innerText = T.ingame.puzzleCompletion.nextPuzzle; + this.element.appendChild(this.button); + + this.trackClicks(this.button, this.nextPuzzle); + } + + initialize() {} + + nextPuzzle() { + const gameMode = /** @type {PuzzlePlayGameMode} */ (this.root.gameMode); + this.root.gameState.moveToState("PuzzleMenuState", { + continueQueue: gameMode.nextPuzzles, + }); + } +} diff --git a/src/js/game/hud/parts/base_toolbar.js b/src/js/game/hud/parts/base_toolbar.js index b3f5abfc..15faad66 100644 --- a/src/js/game/hud/parts/base_toolbar.js +++ b/src/js/game/hud/parts/base_toolbar.js @@ -1,6 +1,10 @@ import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { STOP_PROPAGATION } from "../../../core/signal"; import { makeDiv, safeModulo } from "../../../core/utils"; +import { MetaBlockBuilding } from "../../buildings/block"; +import { MetaConstantProducerBuilding } from "../../buildings/constant_producer"; +import { MetaGoalAcceptorBuilding } from "../../buildings/goal_acceptor"; +import { StaticMapEntityComponent } from "../../components/static_map_entity"; import { KEYMAPPINGS } from "../../key_action_mapper"; import { MetaBuilding } from "../../meta_building"; import { GameRoot } from "../../root"; @@ -23,8 +27,8 @@ export class HUDBaseToolbar extends BaseHUDPart { ) { super(root); - this.primaryBuildings = primaryBuildings; - this.secondaryBuildings = secondaryBuildings; + this.primaryBuildings = this.filterBuildings(primaryBuildings); + this.secondaryBuildings = this.filterBuildings(secondaryBuildings); this.visibilityCondition = visibilityCondition; this.htmlElementId = htmlElementId; this.layer = layer; @@ -35,6 +39,7 @@ export class HUDBaseToolbar extends BaseHUDPart { * selected: boolean, * element: HTMLElement, * index: number + * puzzleLocked: boolean; * }>} */ this.buildingHandles = {}; } @@ -47,6 +52,24 @@ export class HUDBaseToolbar extends BaseHUDPart { this.element = makeDiv(parent, this.htmlElementId, ["ingame_buildingsToolbar"], ""); } + /** + * @param {Array} buildings + * @returns {Array} + */ + filterBuildings(buildings) { + const filtered = []; + + for (let i = 0; i < buildings.length; i++) { + if (this.root.gameMode.isBuildingExcluded(buildings[i])) { + continue; + } + + filtered.push(buildings[i]); + } + + return filtered; + } + /** * Returns all buildings * @returns {Array} @@ -87,19 +110,31 @@ export class HUDBaseToolbar extends BaseHUDPart { ); itemContainer.setAttribute("data-icon", "building_icons/" + metaBuilding.getId() + ".png"); itemContainer.setAttribute("data-id", metaBuilding.getId()); - binding.add(() => this.selectBuildingForPlacement(metaBuilding)); - this.trackClicks(itemContainer, () => this.selectBuildingForPlacement(metaBuilding), { + const icon = makeDiv(itemContainer, null, ["icon"]); + + this.trackClicks(icon, () => this.selectBuildingForPlacement(metaBuilding), { clickSound: null, }); + //lock icon for puzzle editor + if (this.root.gameMode.getIsEditor() && !this.inRequiredBuildings(metaBuilding)) { + const puzzleLock = makeDiv(itemContainer, null, ["puzzle-lock"]); + + itemContainer.classList.toggle("editor", true); + this.trackClicks(puzzleLock, () => this.toggleBuildingLock(metaBuilding), { + clickSound: null, + }); + } + this.buildingHandles[metaBuilding.id] = { - metaBuilding, + metaBuilding: metaBuilding, element: itemContainer, unlocked: false, selected: false, index: i, + puzzleLocked: false, }; } @@ -127,7 +162,7 @@ export class HUDBaseToolbar extends BaseHUDPart { let recomputeSecondaryToolbarVisibility = false; for (const buildingId in this.buildingHandles) { const handle = this.buildingHandles[buildingId]; - const newStatus = handle.metaBuilding.getIsUnlocked(this.root); + const newStatus = !handle.puzzleLocked && handle.metaBuilding.getIsUnlocked(this.root); if (handle.unlocked !== newStatus) { handle.unlocked = newStatus; handle.element.classList.toggle("unlocked", newStatus); @@ -216,6 +251,14 @@ export class HUDBaseToolbar extends BaseHUDPart { return STOP_PROPAGATION; } + const handle = this.buildingHandles[metaBuilding.getId()]; + if (handle.puzzleLocked) { + handle.puzzleLocked = false; + handle.element.classList.toggle("unlocked", false); + this.root.soundProxy.playUiClick(); + return; + } + // Allow clicking an item again to deselect it for (const buildingId in this.buildingHandles) { const handle = this.buildingHandles[buildingId]; @@ -229,4 +272,51 @@ export class HUDBaseToolbar extends BaseHUDPart { this.root.hud.signals.buildingSelectedForPlacement.dispatch(metaBuilding); this.onSelectedPlacementBuildingChanged(metaBuilding); } + + /** + * @param {MetaBuilding} metaBuilding + */ + toggleBuildingLock(metaBuilding) { + if (!this.visibilityCondition()) { + // Not active + return; + } + + if (this.inRequiredBuildings(metaBuilding) || !metaBuilding.getIsUnlocked(this.root)) { + this.root.soundProxy.playUiError(); + return STOP_PROPAGATION; + } + + const handle = this.buildingHandles[metaBuilding.getId()]; + handle.puzzleLocked = !handle.puzzleLocked; + handle.element.classList.toggle("unlocked", !handle.puzzleLocked); + this.root.soundProxy.playUiClick(); + + const entityManager = this.root.entityMgr; + for (const entity of entityManager.getAllWithComponent(StaticMapEntityComponent)) { + const staticComp = entity.components.StaticMapEntity; + if (staticComp.getMetaBuilding().id === metaBuilding.id) { + this.root.map.removeStaticEntity(entity); + entityManager.destroyEntity(entity); + } + } + entityManager.processDestroyList(); + + const currentMetaBuilding = this.root.hud.parts.buildingPlacer.currentMetaBuilding; + if (currentMetaBuilding.get() == metaBuilding) { + currentMetaBuilding.set(null); + } + } + + /** + * @param {MetaBuilding} metaBuilding + */ + inRequiredBuildings(metaBuilding) { + const requiredBuildings = [ + gMetaBuildingRegistry.findByClass(MetaConstantProducerBuilding), + gMetaBuildingRegistry.findByClass(MetaGoalAcceptorBuilding), + gMetaBuildingRegistry.findByClass(MetaBlockBuilding), + ]; + return requiredBuildings.includes(metaBuilding); + } } diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 67f1b02f..26818961 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -58,6 +58,10 @@ export class HUDBlueprintPlacer extends BaseHUDPart { this.trackedCanAfford = new TrackedState(this.onCanAffordChanged, this); } + getHasFreeCopyPaste() { + return this.root.gameMode.getHasFreeCopyPaste(); + } + abortPlacement() { if (this.currentBlueprint.get()) { this.currentBlueprint.set(null); @@ -90,7 +94,9 @@ export class HUDBlueprintPlacer extends BaseHUDPart { update() { const currentBlueprint = this.currentBlueprint.get(); - this.domAttach.update(currentBlueprint && currentBlueprint.getCost() > 0); + this.domAttach.update( + !this.getHasFreeCopyPaste() && currentBlueprint && currentBlueprint.getCost() > 0 + ); this.trackedCanAfford.set(currentBlueprint && currentBlueprint.canAfford(this.root)); } @@ -122,7 +128,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { return; } - if (!blueprint.canAfford(this.root)) { + if (!this.getHasFreeCopyPaste() && !blueprint.canAfford(this.root)) { this.root.soundProxy.playUiError(); return; } @@ -130,8 +136,10 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const worldPos = this.root.camera.screenToWorld(pos); const tile = worldPos.toTileSpace(); if (blueprint.tryPlace(this.root, tile)) { - const cost = blueprint.getCost(); - this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost); + if (!this.getHasFreeCopyPaste()) { + const cost = blueprint.getCost(); + this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost); + } this.root.soundProxy.playUi(SOUNDS.placeBuilding); } return STOP_PROPAGATION; @@ -139,7 +147,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { } /** - * Mose move handler + * Mouse move handler */ onMouseMove() { // Prevent movement while blueprint is selected diff --git a/src/js/game/hud/parts/building_placer.js b/src/js/game/hud/parts/building_placer.js index 7d618b6b..33e6ebc2 100644 --- a/src/js/game/hud/parts/building_placer.js +++ b/src/js/game/hud/parts/building_placer.js @@ -234,7 +234,7 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { * @param {DrawParameters} parameters */ draw(parameters) { - if (this.root.camera.zoomLevel < globalConfig.mapChunkOverviewMinZoom) { + if (this.root.camera.getIsMapOverlayActive()) { // Dont allow placing in overview mode this.domAttach.update(false); this.variantsAttach.update(false); @@ -275,11 +275,13 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { const worldPosition = this.root.camera.screenToWorld(mousePosition); // Draw peeker - this.root.hud.parts.layerPreview.renderPreview( - parameters, - worldPosition, - 1 / this.root.camera.zoomLevel - ); + if (this.root.hud.parts.layerPreview) { + this.root.hud.parts.layerPreview.renderPreview( + parameters, + worldPosition, + 1 / this.root.camera.zoomLevel + ); + } } /** diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 1e88abc7..7ed412f6 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -128,7 +128,6 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { this.root.hud.signals.buildingsSelectedForCopy.add(this.abortPlacement, this); this.root.hud.signals.pasteBlueprintRequested.add(this.abortPlacement, this); this.root.signals.storyGoalCompleted.add(() => this.signals.variantChanged.dispatch()); - this.root.signals.storyGoalCompleted.add(() => this.currentMetaBuilding.set(null)); this.root.signals.upgradePurchased.add(() => this.signals.variantChanged.dispatch()); this.root.signals.editModeChanged.add(this.onEditModeChanged, this); @@ -366,7 +365,8 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { if ( tileBelow && this.root.app.settings.getAllSettings().pickMinerOnPatch && - this.root.currentLayer === "regular" + this.root.currentLayer === "regular" && + this.root.gameMode.hasResources() ) { this.currentMetaBuilding.set(gMetaBuildingRegistry.findByClass(MetaMinerBuilding)); @@ -390,6 +390,12 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { return; } + // Disallow picking excluded buildings + if (this.root.gameMode.isBuildingExcluded(extracted.metaClass)) { + this.currentMetaBuilding.set(null); + return; + } + // If the building we are picking is the same as the one we have, clear the cursor. if ( this.currentMetaBuilding.get() && @@ -430,7 +436,7 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { * @param {Vector} tile */ tryPlaceCurrentBuildingAt(tile) { - if (this.root.camera.zoomLevel < globalConfig.mapChunkOverviewMinZoom) { + if (this.root.camera.getIsMapOverlayActive()) { // Dont allow placing in overview mode return; } diff --git a/src/js/game/hud/parts/buildings_toolbar.js b/src/js/game/hud/parts/buildings_toolbar.js index 05ffc795..994a70ed 100644 --- a/src/js/game/hud/parts/buildings_toolbar.js +++ b/src/js/game/hud/parts/buildings_toolbar.js @@ -15,23 +15,28 @@ import { MetaUndergroundBeltBuilding } from "../../buildings/underground_belt"; import { HUDBaseToolbar } from "./base_toolbar"; import { MetaStorageBuilding } from "../../buildings/storage"; import { MetaItemProducerBuilding } from "../../buildings/item_producer"; -import { queryParamOptions } from "../../../core/query_parameters"; +import { MetaConstantProducerBuilding } from "../../buildings/constant_producer"; +import { MetaGoalAcceptorBuilding } from "../../buildings/goal_acceptor"; +import { MetaBlockBuilding } from "../../buildings/block"; export class HUDBuildingsToolbar extends HUDBaseToolbar { constructor(root) { super(root, { primaryBuildings: [ + MetaConstantProducerBuilding, + MetaGoalAcceptorBuilding, MetaBeltBuilding, MetaBalancerBuilding, MetaUndergroundBeltBuilding, MetaMinerBuilding, + MetaBlockBuilding, MetaCutterBuilding, MetaRotaterBuilding, MetaStackerBuilding, MetaMixerBuilding, MetaPainterBuilding, MetaTrashBuilding, - ...(queryParamOptions.sandboxMode || G_IS_DEV ? [MetaItemProducerBuilding] : []), + MetaItemProducerBuilding, ], secondaryBuildings: [ MetaStorageBuilding, diff --git a/src/js/game/hud/parts/interactive_tutorial.js b/src/js/game/hud/parts/interactive_tutorial.js index e48a77fb..00c02b06 100644 --- a/src/js/game/hud/parts/interactive_tutorial.js +++ b/src/js/game/hud/parts/interactive_tutorial.js @@ -158,8 +158,13 @@ export class HUDInteractiveTutorial extends BaseHUDPart { onHintChanged(hintId) { this.elementDescription.innerHTML = T.ingame.interactiveTutorial.hints[hintId]; + + const folder = G_WEGAME_VERSION + ? "interactive_tutorial.cn.noinline" + : "interactive_tutorial.noinline"; + this.elementGif.style.backgroundImage = - "url('" + cachebust("res/ui/interactive_tutorial.noinline/" + hintId + ".gif") + "')"; + "url('" + cachebust("res/ui/" + folder + "/" + hintId + ".gif") + "')"; this.element.classList.toggle("animEven"); this.element.classList.toggle("animOdd"); } diff --git a/src/js/game/hud/parts/keybinding_overlay.js b/src/js/game/hud/parts/keybinding_overlay.js index 65919d3c..2384ab84 100644 --- a/src/js/game/hud/parts/keybinding_overlay.js +++ b/src/js/game/hud/parts/keybinding_overlay.js @@ -254,6 +254,13 @@ export class HUDKeybindingOverlay extends BaseHUDPart { condition: () => this.anythingSelectedOnMap, }, + { + // [SELECTION] Clear + label: T.ingame.keybindingsOverlay.clearBelts, + keys: [k.massSelect.massSelectClear], + condition: () => this.anythingSelectedOnMap, + }, + { // Switch layers label: T.ingame.keybindingsOverlay.switchLayers, diff --git a/src/js/game/hud/parts/mass_selector.js b/src/js/game/hud/parts/mass_selector.js index d73e3be3..b8283d55 100644 --- a/src/js/game/hud/parts/mass_selector.js +++ b/src/js/game/hud/parts/mass_selector.js @@ -1,20 +1,22 @@ -import { BaseHUDPart } from "../base_hud_part"; -import { Vector } from "../../../core/vector"; -import { STOP_PROPAGATION } from "../../../core/signal"; -import { DrawParameters } from "../../../core/draw_parameters"; -import { Entity } from "../../entity"; -import { Loader } from "../../../core/loader"; import { globalConfig } from "../../../core/config"; -import { makeDiv, formatBigNumber, formatBigNumberFull } from "../../../core/utils"; -import { DynamicDomAttach } from "../dynamic_dom_attach"; +import { DrawParameters } from "../../../core/draw_parameters"; +import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { createLogger } from "../../../core/logging"; +import { STOP_PROPAGATION } from "../../../core/signal"; +import { formatBigNumberFull } from "../../../core/utils"; +import { Vector } from "../../../core/vector"; import { ACHIEVEMENTS } from "../../../platform/achievement_provider"; -import { enumMouseButton } from "../../camera"; import { T } from "../../../translations"; +import { Blueprint } from "../../blueprint"; +import { MetaBlockBuilding } from "../../buildings/block"; +import { MetaConstantProducerBuilding } from "../../buildings/constant_producer"; +import { enumMouseButton } from "../../camera"; +import { Component } from "../../component"; +import { Entity } from "../../entity"; import { KEYMAPPINGS } from "../../key_action_mapper"; import { THEME } from "../../theme"; import { enumHubGoalRewards } from "../../tutorial_goals"; -import { Blueprint } from "../../blueprint"; +import { BaseHUDPart } from "../base_hud_part"; const logger = createLogger("hud/mass_selector"); @@ -33,12 +35,13 @@ export class HUDMassSelector extends BaseHUDPart { this.root.camera.movePreHandler.add(this.onMouseMove, this); this.root.camera.upPostHandler.add(this.onMouseUp, this); - this.root.keyMapper.getBinding(KEYMAPPINGS.general.back).add(this.onBack, this); + this.root.keyMapper.getBinding(KEYMAPPINGS.general.back).addToTop(this.onBack, this); this.root.keyMapper .getBinding(KEYMAPPINGS.massSelect.confirmMassDelete) .add(this.confirmDelete, this); this.root.keyMapper.getBinding(KEYMAPPINGS.massSelect.massSelectCut).add(this.confirmCut, this); this.root.keyMapper.getBinding(KEYMAPPINGS.massSelect.massSelectCopy).add(this.startCopy, this); + this.root.keyMapper.getBinding(KEYMAPPINGS.massSelect.massSelectClear).add(this.clearBelts, this); this.root.hud.signals.selectedPlacementBuildingChanged.add(this.clearSelection, this); this.root.signals.editModeChanged.add(this.clearSelection, this); @@ -142,6 +145,16 @@ export class HUDMassSelector extends BaseHUDPart { } } + clearBelts() { + for (const uid of this.selectedUids) { + const entity = this.root.entityMgr.findByUid(uid); + for (const component of Object.values(entity.components)) { + /** @type {Component} */ (component).clear(); + } + } + this.selectedUids = new Set(); + } + confirmCut() { if (!this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_blueprints)) { this.root.hud.parts.dialogs.showInfo( @@ -250,7 +263,14 @@ export class HUDMassSelector extends BaseHUDPart { for (let x = realTileStart.x; x <= realTileEnd.x; ++x) { for (let y = realTileStart.y; y <= realTileEnd.y; ++y) { const contents = this.root.map.getLayerContentXY(x, y, this.root.currentLayer); + if (contents && this.root.logic.canDeleteBuilding(contents)) { + const staticComp = contents.components.StaticMapEntity; + + if (!staticComp.getMetaBuilding().getIsRemovable(this.root)) { + continue; + } + this.selectedUids.add(contents.uid); } } @@ -310,6 +330,11 @@ export class HUDMassSelector extends BaseHUDPart { renderedUids.add(uid); const staticComp = contents.components.StaticMapEntity; + + if (!staticComp.getMetaBuilding().getIsRemovable(this.root)) { + continue; + } + const bounds = staticComp.getTileSpaceBounds(); parameters.context.beginRoundedRect( bounds.x * globalConfig.tileSize + boundsBorder, diff --git a/src/js/game/hud/parts/modal_dialogs.js b/src/js/game/hud/parts/modal_dialogs.js index 263b23dd..33211cf6 100644 --- a/src/js/game/hud/parts/modal_dialogs.js +++ b/src/js/game/hud/parts/modal_dialogs.js @@ -29,11 +29,14 @@ export class HUDModalDialogs extends BaseHUDPart { } shouldPauseRendering() { - return this.dialogStack.length > 0; + // return this.dialogStack.length > 0; + // @todo: Check if change this affects anything + return false; } shouldPauseGame() { - return this.shouldPauseRendering(); + // @todo: Check if this change affects anything + return false; } createElements(parent) { @@ -122,7 +125,7 @@ export class HUDModalDialogs extends BaseHUDPart { dialog.buttonSignals.getStandalone.add(() => { this.app.analytics.trackUiClick("demo_dialog_click"); - window.open(THIRDPARTY_URLS.standaloneStorePage + "?ref=ddc"); + window.open(THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_demo_dialog"); }); return dialog.buttonSignals; @@ -139,8 +142,8 @@ export class HUDModalDialogs extends BaseHUDPart { } // Returns method to be called when laoding finishd - showLoadingDialog() { - const dialog = new DialogLoading(this.app); + showLoadingDialog(text = "") { + const dialog = new DialogLoading(this.app, text); this.internalShowDialog(dialog); return this.closeDialog.bind(this, dialog); } diff --git a/src/js/game/hud/parts/pinned_shapes.js b/src/js/game/hud/parts/pinned_shapes.js index 4a9fce0d..c5bb9a82 100644 --- a/src/js/game/hud/parts/pinned_shapes.js +++ b/src/js/game/hud/parts/pinned_shapes.js @@ -55,7 +55,7 @@ export class HUDPinnedShapes extends BaseHUDPart { */ deserialize(data) { if (!data || !data.shapes || !Array.isArray(data.shapes)) { - return "Invalid pinned shapes data"; + return "Invalid pinned shapes data: " + JSON.stringify(data); } this.pinnedShapes = data.shapes; } @@ -232,15 +232,20 @@ export class HUDPinnedShapes extends BaseHUDPart { } // Show small info icon - const infoButton = document.createElement("button"); - infoButton.classList.add("infoButton"); - element.appendChild(infoButton); - const infoDetector = new ClickDetector(infoButton, { - consumeEvents: true, - preventDefault: true, - targetOnly: true, - }); - infoDetector.click.add(() => this.root.hud.signals.viewShapeDetailsRequested.dispatch(definition)); + let infoDetector; + if (!G_WEGAME_VERSION) { + const infoButton = document.createElement("button"); + infoButton.classList.add("infoButton"); + element.appendChild(infoButton); + infoDetector = new ClickDetector(infoButton, { + consumeEvents: true, + preventDefault: true, + targetOnly: true, + }); + infoDetector.click.add(() => + this.root.hud.signals.viewShapeDetailsRequested.dispatch(definition) + ); + } const amountLabel = makeDiv(element, null, ["amountLabel"], ""); diff --git a/src/js/game/hud/parts/puzzle_back_to_menu.js b/src/js/game/hud/parts/puzzle_back_to_menu.js new file mode 100644 index 00000000..bde5b66d --- /dev/null +++ b/src/js/game/hud/parts/puzzle_back_to_menu.js @@ -0,0 +1,21 @@ +import { makeDiv } from "../../../core/utils"; +import { BaseHUDPart } from "../base_hud_part"; + +export class HUDPuzzleBackToMenu extends BaseHUDPart { + createElements(parent) { + const key = this.root.gameMode.getId(); + + this.element = makeDiv(parent, "ingame_HUD_PuzzleBackToMenu"); + this.button = document.createElement("button"); + this.button.classList.add("button"); + this.element.appendChild(this.button); + + this.trackClicks(this.button, this.back); + } + + initialize() {} + + back() { + this.root.gameState.goBackToMenu(); + } +} diff --git a/src/js/game/hud/parts/puzzle_complete_notification.js b/src/js/game/hud/parts/puzzle_complete_notification.js new file mode 100644 index 00000000..d83e33f1 --- /dev/null +++ b/src/js/game/hud/parts/puzzle_complete_notification.js @@ -0,0 +1,127 @@ +/* typehints:start */ +import { PuzzlePlayGameMode } from "../../modes/puzzle_play"; +/* typehints:end */ + +import { InputReceiver } from "../../../core/input_receiver"; +import { makeDiv } from "../../../core/utils"; +import { SOUNDS } from "../../../platform/sound"; +import { T } from "../../../translations"; +import { BaseHUDPart } from "../base_hud_part"; +import { DynamicDomAttach } from "../dynamic_dom_attach"; + +export class HUDPuzzleCompleteNotification extends BaseHUDPart { + initialize() { + this.visible = false; + + this.domAttach = new DynamicDomAttach(this.root, this.element, { + timeToKeepSeconds: 0, + }); + + this.root.signals.puzzleComplete.add(this.show, this); + + this.userDidLikePuzzle = false; + this.timeOfCompletion = 0; + } + + createElements(parent) { + this.inputReciever = new InputReceiver("puzzle-complete"); + + this.element = makeDiv(parent, "ingame_HUD_PuzzleCompleteNotification", ["noBlur"]); + + const dialog = makeDiv(this.element, null, ["dialog"]); + + this.elemTitle = makeDiv(dialog, null, ["title"], T.ingame.puzzleCompletion.title); + this.elemContents = makeDiv(dialog, null, ["contents"]); + this.elemActions = makeDiv(dialog, null, ["actions"]); + + const stepLike = makeDiv(this.elemContents, null, ["step", "stepLike"]); + makeDiv(stepLike, null, ["title"], T.ingame.puzzleCompletion.titleLike); + + const likeButtons = makeDiv(stepLike, null, ["buttons"]); + + this.buttonLikeYes = document.createElement("button"); + this.buttonLikeYes.classList.add("liked-yes"); + likeButtons.appendChild(this.buttonLikeYes); + this.trackClicks(this.buttonLikeYes, () => { + this.userDidLikePuzzle = !this.userDidLikePuzzle; + this.updateState(); + }); + + const buttonBar = document.createElement("div"); + buttonBar.classList.add("buttonBar"); + this.elemContents.appendChild(buttonBar); + + this.continueBtn = document.createElement("button"); + this.continueBtn.classList.add("continue", "styledButton"); + this.continueBtn.innerText = T.ingame.puzzleCompletion.continueBtn; + buttonBar.appendChild(this.continueBtn); + this.trackClicks(this.continueBtn, () => { + this.close(false); + }); + + this.menuBtn = document.createElement("button"); + this.menuBtn.classList.add("menu", "styledButton"); + this.menuBtn.innerText = T.ingame.puzzleCompletion.menuBtn; + buttonBar.appendChild(this.menuBtn); + this.trackClicks(this.menuBtn, () => { + this.close(true); + }); + + const gameMode = /** @type {PuzzlePlayGameMode} */ (this.root.gameMode); + if (gameMode.nextPuzzles.length > 0) { + this.nextPuzzleBtn = document.createElement("button"); + this.nextPuzzleBtn.classList.add("nextPuzzle", "styledButton"); + this.nextPuzzleBtn.innerText = T.ingame.puzzleCompletion.nextPuzzle; + buttonBar.appendChild(this.nextPuzzleBtn); + + this.trackClicks(this.nextPuzzleBtn, () => { + this.nextPuzzle(); + }); + } + } + + updateState() { + this.buttonLikeYes.classList.toggle("active", this.userDidLikePuzzle === true); + } + + show() { + this.root.soundProxy.playUi(SOUNDS.levelComplete); + this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); + this.visible = true; + this.timeOfCompletion = this.root.time.now(); + } + + cleanup() { + this.root.app.inputMgr.makeSureDetached(this.inputReciever); + } + + isBlockingOverlay() { + return this.visible; + } + + nextPuzzle() { + const gameMode = /** @type {PuzzlePlayGameMode} */ (this.root.gameMode); + gameMode.trackCompleted(this.userDidLikePuzzle, Math.round(this.timeOfCompletion)).then(() => { + this.root.gameState.moveToState("PuzzleMenuState", { + continueQueue: gameMode.nextPuzzles, + }); + }); + } + + close(toMenu) { + /** @type {PuzzlePlayGameMode} */ (this.root.gameMode) + .trackCompleted(this.userDidLikePuzzle, Math.round(this.timeOfCompletion)) + .then(() => { + if (toMenu) { + this.root.gameState.moveToState("PuzzleMenuState"); + } else { + this.visible = false; + this.cleanup(); + } + }); + } + + update() { + this.domAttach.update(this.visible); + } +} diff --git a/src/js/game/hud/parts/puzzle_dlc_logo.js b/src/js/game/hud/parts/puzzle_dlc_logo.js new file mode 100644 index 00000000..69519c0d --- /dev/null +++ b/src/js/game/hud/parts/puzzle_dlc_logo.js @@ -0,0 +1,14 @@ +import { makeDiv } from "../../../core/utils"; +import { BaseHUDPart } from "../base_hud_part"; + +export class HUDPuzzleDLCLogo extends BaseHUDPart { + createElements(parent) { + this.element = makeDiv(parent, "ingame_HUD_PuzzleDLCLogo"); + this.element.classList.toggle("china", G_CHINA_VERSION || G_WEGAME_VERSION); + parent.appendChild(this.element); + } + + initialize() {} + + next() {} +} diff --git a/src/js/game/hud/parts/puzzle_editor_controls.js b/src/js/game/hud/parts/puzzle_editor_controls.js new file mode 100644 index 00000000..d8055f11 --- /dev/null +++ b/src/js/game/hud/parts/puzzle_editor_controls.js @@ -0,0 +1,18 @@ +import { makeDiv } from "../../../core/utils"; +import { T } from "../../../translations"; +import { BaseHUDPart } from "../base_hud_part"; + +export class HUDPuzzleEditorControls extends BaseHUDPart { + createElements(parent) { + this.element = makeDiv(parent, "ingame_HUD_PuzzleEditorControls"); + + this.element.innerHTML = T.ingame.puzzleEditorControls.instructions + .map(text => `${text}`) + .join(""); + + this.titleElement = makeDiv(parent, "ingame_HUD_PuzzleEditorTitle"); + this.titleElement.innerText = T.ingame.puzzleEditorControls.title; + } + + initialize() {} +} diff --git a/src/js/game/hud/parts/puzzle_editor_review.js b/src/js/game/hud/parts/puzzle_editor_review.js new file mode 100644 index 00000000..4a044ba5 --- /dev/null +++ b/src/js/game/hud/parts/puzzle_editor_review.js @@ -0,0 +1,233 @@ +import { globalConfig, THIRDPARTY_URLS } from "../../../core/config"; +import { createLogger } from "../../../core/logging"; +import { DialogWithForm } from "../../../core/modal_dialog_elements"; +import { FormElementInput, FormElementItemChooser } from "../../../core/modal_dialog_forms"; +import { STOP_PROPAGATION } from "../../../core/signal"; +import { fillInLinkIntoTranslation, makeDiv } from "../../../core/utils"; +import { PuzzleSerializer } from "../../../savegame/puzzle_serializer"; +import { T } from "../../../translations"; +import { ConstantSignalComponent } from "../../components/constant_signal"; +import { GoalAcceptorComponent } from "../../components/goal_acceptor"; +import { StaticMapEntityComponent } from "../../components/static_map_entity"; +import { ShapeItem } from "../../items/shape_item"; +import { ShapeDefinition } from "../../shape_definition"; +import { BaseHUDPart } from "../base_hud_part"; + +const trim = require("trim"); +const logger = createLogger("puzzle-review"); + +export class HUDPuzzleEditorReview extends BaseHUDPart { + constructor(root) { + super(root); + } + + createElements(parent) { + const key = this.root.gameMode.getId(); + + this.element = makeDiv(parent, "ingame_HUD_PuzzleEditorReview"); + this.button = document.createElement("button"); + this.button.classList.add("button"); + this.button.textContent = T.puzzleMenu.reviewPuzzle; + this.element.appendChild(this.button); + + this.trackClicks(this.button, this.startReview); + } + + initialize() {} + + startReview() { + const validationError = this.validatePuzzle(); + if (validationError) { + this.root.hud.parts.dialogs.showWarning(T.puzzleMenu.validation.title, validationError); + return; + } + + const closeLoading = this.root.hud.parts.dialogs.showLoadingDialog(T.puzzleMenu.validatingPuzzle); + + // Wait a bit, so the user sees the puzzle actually got validated + setTimeout(() => { + // Manually simulate ticks + this.root.logic.clearAllBeltsAndItems(); + + const maxTicks = + this.root.gameMode.getFixedTickrate() * globalConfig.puzzleValidationDurationSeconds; + const deltaMs = this.root.dynamicTickrate.deltaMs; + logger.log("Simulating up to", maxTicks, "ticks, start=", this.root.time.now().toFixed(1)); + const now = performance.now(); + + let simulatedTicks = 0; + for (let i = 0; i < maxTicks; ++i) { + // Perform logic tick + this.root.time.performTicks(deltaMs, this.root.gameState.core.boundInternalTick); + simulatedTicks++; + + if (simulatedTicks % 100 == 0 && !this.validatePuzzle()) { + break; + } + } + + const duration = performance.now() - now; + logger.log( + "Simulated", + simulatedTicks, + "ticks, end=", + this.root.time.now().toFixed(1), + "duration=", + duration.toFixed(2), + "ms" + ); + + console.log("duration: " + duration); + closeLoading(); + + //if it took so little ticks that it must have autocompeted + if (simulatedTicks <= 500) { + this.root.hud.parts.dialogs.showWarning( + T.puzzleMenu.validation.title, + T.puzzleMenu.validation.autoComplete + ); + return; + } + + //if we reached maximum ticks and the puzzle still isn't completed + const validationError = this.validatePuzzle(); + if (simulatedTicks == maxTicks && validationError) { + this.root.hud.parts.dialogs.showWarning(T.puzzleMenu.validation.title, validationError); + return; + } + this.startSubmit(); + }, 750); + } + + startSubmit(title = "", shortKey = "") { + const regex = /^[a-zA-Z0-9_\- ]{4,20}$/; + const nameInput = new FormElementInput({ + id: "nameInput", + label: T.dialogs.submitPuzzle.descName, + placeholder: T.dialogs.submitPuzzle.placeholderName, + defaultValue: title, + validator: val => trim(val).match(regex) && trim(val).length > 0, + }); + + let items = new Set(); + const acceptors = this.root.entityMgr.getAllWithComponent(GoalAcceptorComponent); + for (const acceptor of acceptors) { + const item = acceptor.components.GoalAcceptor.item; + if (item.getItemType() === "shape") { + items.add(item); + } + } + + while (items.size < 8) { + // add some randoms + const item = this.root.hubGoals.computeFreeplayShape(Math.round(10 + Math.random() * 10000)); + items.add(new ShapeItem(item)); + } + + const itemInput = new FormElementItemChooser({ + id: "signalItem", + label: fillInLinkIntoTranslation(T.dialogs.submitPuzzle.descIcon, THIRDPARTY_URLS.shapeViewer), + items: Array.from(items), + }); + + const shapeKeyInput = new FormElementInput({ + id: "shapeKeyInput", + label: null, + placeholder: "CuCuCuCu", + defaultValue: shortKey, + validator: val => ShapeDefinition.isValidShortKey(trim(val)), + }); + + const dialog = new DialogWithForm({ + app: this.root.app, + title: T.dialogs.submitPuzzle.title, + desc: "", + formElements: [nameInput, itemInput, shapeKeyInput], + buttons: ["ok:good:enter"], + }); + + itemInput.valueChosen.add(value => { + shapeKeyInput.setValue(value.definition.getHash()); + }); + + this.root.hud.parts.dialogs.internalShowDialog(dialog); + + dialog.buttonSignals.ok.add(() => { + const title = trim(nameInput.getValue()); + const shortKey = trim(shapeKeyInput.getValue()); + this.doSubmitPuzzle(title, shortKey); + }); + } + + doSubmitPuzzle(title, shortKey) { + const serialized = new PuzzleSerializer().generateDumpFromGameRoot(this.root); + + logger.log("Submitting puzzle, title=", title, "shortKey=", shortKey); + if (G_IS_DEV) { + logger.log("Serialized data:", serialized); + } + + const closeLoading = this.root.hud.parts.dialogs.showLoadingDialog(T.puzzleMenu.submittingPuzzle); + + this.root.app.clientApi + .apiSubmitPuzzle({ + title, + shortKey, + data: serialized, + }) + .then( + () => { + closeLoading(); + const { ok } = this.root.hud.parts.dialogs.showInfo( + T.dialogs.puzzleSubmitOk.title, + T.dialogs.puzzleSubmitOk.desc + ); + ok.add(() => this.root.gameState.moveToState("PuzzleMenuState")); + }, + err => { + closeLoading(); + logger.warn("Failed to submit puzzle:", err); + const signals = this.root.hud.parts.dialogs.showWarning( + T.dialogs.puzzleSubmitError.title, + T.dialogs.puzzleSubmitError.desc + " " + err, + ["cancel", "retry:good"] + ); + signals.retry.add(() => this.startSubmit(title, shortKey)); + } + ); + } + + validatePuzzle() { + // Check there is at least one constant producer and goal acceptor + const producers = this.root.entityMgr.getAllWithComponent(ConstantSignalComponent); + const acceptors = this.root.entityMgr.getAllWithComponent(GoalAcceptorComponent); + + if (producers.length === 0) { + return T.puzzleMenu.validation.noProducers; + } + + if (acceptors.length === 0) { + return T.puzzleMenu.validation.noGoalAcceptors; + } + + // Check if all acceptors satisfy the constraints + for (const acceptor of acceptors) { + const goalComp = acceptor.components.GoalAcceptor; + if (!goalComp.item) { + return T.puzzleMenu.validation.goalAcceptorNoItem; + } + const required = globalConfig.goalAcceptorItemsRequired; + if (goalComp.currentDeliveredItems < required) { + return T.puzzleMenu.validation.goalAcceptorRateNotMet; + } + } + + // Check if all buildings are within the area + const entities = this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent); + for (const entity of entities) { + if (this.root.systemMgr.systems.zone.prePlacementCheck(entity) === STOP_PROPAGATION) { + return T.puzzleMenu.validation.buildingOutOfBounds; + } + } + } +} diff --git a/src/js/game/hud/parts/puzzle_editor_settings.js b/src/js/game/hud/parts/puzzle_editor_settings.js new file mode 100644 index 00000000..bd738198 --- /dev/null +++ b/src/js/game/hud/parts/puzzle_editor_settings.js @@ -0,0 +1,231 @@ +import { globalConfig } from "../../../core/config"; +import { gMetaBuildingRegistry } from "../../../core/global_registries"; +import { createLogger } from "../../../core/logging"; +import { Rectangle } from "../../../core/rectangle"; +import { makeDiv } from "../../../core/utils"; +import { T } from "../../../translations"; +import { MetaBlockBuilding } from "../../buildings/block"; +import { MetaConstantProducerBuilding } from "../../buildings/constant_producer"; +import { MetaGoalAcceptorBuilding } from "../../buildings/goal_acceptor"; +import { StaticMapEntityComponent } from "../../components/static_map_entity"; +import { PuzzleGameMode } from "../../modes/puzzle"; +import { BaseHUDPart } from "../base_hud_part"; + +const logger = createLogger("puzzle-editor"); + +export class HUDPuzzleEditorSettings extends BaseHUDPart { + createElements(parent) { + this.element = makeDiv(parent, "ingame_HUD_PuzzleEditorSettings"); + + if (this.root.gameMode.getBuildableZones()) { + const bind = (selector, handler) => + this.trackClicks(this.element.querySelector(selector), handler); + this.zone = makeDiv( + this.element, + null, + ["section", "zone"], + ` + + +
+
+ + + + +
+ +
+ + + + +
+ +
+ + +
+ +
+ +
+ +
` + ); + + bind(".zoneWidth .minus", () => this.modifyZone(-1, 0)); + bind(".zoneWidth .plus", () => this.modifyZone(1, 0)); + bind(".zoneHeight .minus", () => this.modifyZone(0, -1)); + bind(".zoneHeight .plus", () => this.modifyZone(0, 1)); + bind("button.trim", this.trim); + bind("button.clearItems", this.clearItems); + bind("button.resetPuzzle", this.resetPuzzle); + } + } + + clearItems() { + this.root.logic.clearAllBeltsAndItems(); + } + + resetPuzzle() { + for (const entity of this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent)) { + const staticComp = entity.components.StaticMapEntity; + const goalComp = entity.components.GoalAcceptor; + + if (goalComp) { + goalComp.clear(); + } + + if ( + [MetaGoalAcceptorBuilding, MetaConstantProducerBuilding, MetaBlockBuilding] + .map(metaClass => gMetaBuildingRegistry.findByClass(metaClass).id) + .includes(staticComp.getMetaBuilding().id) + ) { + continue; + } + + this.root.map.removeStaticEntity(entity); + this.root.entityMgr.destroyEntity(entity); + } + this.root.entityMgr.processDestroyList(); + } + + trim() { + // Now, find the center + const buildings = this.root.entityMgr.entities.slice(); + + if (buildings.length === 0) { + // nothing to do + return; + } + + let minRect = null; + + for (const building of buildings) { + const staticComp = building.components.StaticMapEntity; + const bounds = staticComp.getTileSpaceBounds(); + + if (!minRect) { + minRect = bounds; + } else { + minRect = minRect.getUnion(bounds); + } + } + + const mode = /** @type {PuzzleGameMode} */ (this.root.gameMode); + const moveByInverse = minRect.getCenter().round(); + + // move buildings + if (moveByInverse.length() > 0) { + // increase area size + mode.zoneWidth = globalConfig.puzzleMaxBoundsSize; + mode.zoneHeight = globalConfig.puzzleMaxBoundsSize; + + // First, remove any items etc + this.root.logic.clearAllBeltsAndItems(); + + this.root.logic.performImmutableOperation(() => { + // 1. remove all buildings + for (const building of buildings) { + if (!this.root.logic.tryDeleteBuilding(building)) { + assertAlways(false, "Failed to remove building in trim"); + } + } + + // 2. place them again, but centered + for (const building of buildings) { + const staticComp = building.components.StaticMapEntity; + const result = this.root.logic.tryPlaceBuilding({ + origin: staticComp.origin.sub(moveByInverse), + building: staticComp.getMetaBuilding(), + originalRotation: staticComp.originalRotation, + rotation: staticComp.rotation, + rotationVariant: staticComp.getRotationVariant(), + variant: staticComp.getVariant(), + }); + if (!result) { + this.root.bulkOperationRunning = false; + assertAlways(false, "Failed to re-place building in trim"); + } + + for (const key in building.components) { + /** @type {import("../../../core/global_registries").Component} */ (building + .components[key]).copyAdditionalStateTo(result.components[key]); + } + } + }); + } + + // 3. Actually trim + let w = mode.zoneWidth; + let h = mode.zoneHeight; + + while (!this.anyBuildingOutsideZone(w - 1, h)) { + --w; + } + + while (!this.anyBuildingOutsideZone(w, h - 1)) { + --h; + } + + mode.zoneWidth = w; + mode.zoneHeight = h; + this.updateZoneValues(); + } + + initialize() { + this.visible = true; + this.updateZoneValues(); + } + + anyBuildingOutsideZone(width, height) { + if (Math.min(width, height) < globalConfig.puzzleMinBoundsSize) { + return true; + } + const newZone = Rectangle.centered(width, height); + const entities = this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent); + + for (const entity of entities) { + const staticComp = entity.components.StaticMapEntity; + const bounds = staticComp.getTileSpaceBounds(); + if (!newZone.intersectsFully(bounds)) { + return true; + } + } + } + + modifyZone(deltaW, deltaH) { + const mode = /** @type {PuzzleGameMode} */ (this.root.gameMode); + + const newWidth = mode.zoneWidth + deltaW; + const newHeight = mode.zoneHeight + deltaH; + + if (Math.min(newWidth, newHeight) < globalConfig.puzzleMinBoundsSize) { + return; + } + + if (Math.max(newWidth, newHeight) > globalConfig.puzzleMaxBoundsSize) { + return; + } + + if (this.anyBuildingOutsideZone(newWidth, newHeight)) { + this.root.hud.parts.dialogs.showWarning( + T.dialogs.puzzleResizeBadBuildings.title, + T.dialogs.puzzleResizeBadBuildings.desc + ); + return; + } + + mode.zoneWidth = newWidth; + mode.zoneHeight = newHeight; + this.updateZoneValues(); + } + + updateZoneValues() { + const mode = /** @type {PuzzleGameMode} */ (this.root.gameMode); + + this.element.querySelector(".zoneWidth > .value").textContent = String(mode.zoneWidth); + this.element.querySelector(".zoneHeight > .value").textContent = String(mode.zoneHeight); + } +} diff --git a/src/js/game/hud/parts/puzzle_play_metadata.js b/src/js/game/hud/parts/puzzle_play_metadata.js new file mode 100644 index 00000000..3550a1e6 --- /dev/null +++ b/src/js/game/hud/parts/puzzle_play_metadata.js @@ -0,0 +1,72 @@ +/* typehints:start */ +import { PuzzlePlayGameMode } from "../../modes/puzzle_play"; +/* typehints:end */ + +import { formatBigNumberFull, formatSeconds, makeDiv } from "../../../core/utils"; +import { T } from "../../../translations"; +import { BaseHUDPart } from "../base_hud_part"; + +const copy = require("clipboard-copy"); + +export class HUDPuzzlePlayMetadata extends BaseHUDPart { + createElements(parent) { + this.titleElement = makeDiv(parent, "ingame_HUD_PuzzlePlayTitle"); + this.titleElement.innerText = "PUZZLE"; + + const mode = /** @type {PuzzlePlayGameMode} */ (this.root.gameMode); + const puzzle = mode.puzzle; + + this.puzzleNameElement = makeDiv(this.titleElement, null, ["name"]); + this.puzzleNameElement.innerText = puzzle.meta.title; + + this.element = makeDiv(parent, "ingame_HUD_PuzzlePlayMetadata"); + this.element.innerHTML = ` + +
+ ${formatBigNumberFull(puzzle.meta.downloads)} + +
+ + +
+
+ ${puzzle.meta.shortKey} +
+
+ + ${puzzle.meta.averageTime ? formatSeconds(puzzle.meta.averageTime) : "-"} +
+
+ + ${ + puzzle.meta.downloads > 0 + ? ((puzzle.meta.completions / puzzle.meta.downloads) * 100.0).toFixed(1) + "%" + : "-" + } +
+ +
+ + +
+ `; + + this.trackClicks(this.element.querySelector("button.share"), this.share); + this.trackClicks(this.element.querySelector("button.report"), this.report); + + /** @type {HTMLElement} */ (this.element.querySelector(".author span")).innerText = + puzzle.meta.author; + } + + initialize() {} + + share() { + const mode = /** @type {PuzzlePlayGameMode} */ (this.root.gameMode); + mode.sharePuzzle(); + } + + report() { + const mode = /** @type {PuzzlePlayGameMode} */ (this.root.gameMode); + mode.reportPuzzle(); + } +} diff --git a/src/js/game/hud/parts/puzzle_play_settings.js b/src/js/game/hud/parts/puzzle_play_settings.js new file mode 100644 index 00000000..db03838b --- /dev/null +++ b/src/js/game/hud/parts/puzzle_play_settings.js @@ -0,0 +1,56 @@ +import { createLogger } from "../../../core/logging"; +import { makeDiv } from "../../../core/utils"; +import { T } from "../../../translations"; +import { StaticMapEntityComponent } from "../../components/static_map_entity"; +import { BaseHUDPart } from "../base_hud_part"; + +const logger = createLogger("puzzle-play"); + +export class HUDPuzzlePlaySettings extends BaseHUDPart { + createElements(parent) { + this.element = makeDiv(parent, "ingame_HUD_PuzzlePlaySettings"); + + if (this.root.gameMode.getBuildableZones()) { + const bind = (selector, handler) => + this.trackClicks(this.element.querySelector(selector), handler); + makeDiv( + this.element, + null, + ["section"], + ` + + + + ` + ); + + bind("button.clearItems", this.clearItems); + bind("button.resetPuzzle", this.resetPuzzle); + } + } + + clearItems() { + this.root.logic.clearAllBeltsAndItems(); + } + + resetPuzzle() { + for (const entity of this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent)) { + const staticComp = entity.components.StaticMapEntity; + const goalComp = entity.components.GoalAcceptor; + + if (goalComp) { + goalComp.clear(); + } + + if (staticComp.getMetaBuilding().getIsRemovable(this.root)) { + this.root.map.removeStaticEntity(entity); + this.root.entityMgr.destroyEntity(entity); + } + } + this.root.entityMgr.processDestroyList(); + } + + initialize() { + this.visible = true; + } +} diff --git a/src/js/game/hud/parts/sandbox_controller.js b/src/js/game/hud/parts/sandbox_controller.js index 592487ee..3689fa36 100644 --- a/src/js/game/hud/parts/sandbox_controller.js +++ b/src/js/game/hud/parts/sandbox_controller.js @@ -1,3 +1,4 @@ +import { queryParamOptions } from "../../../core/query_parameters"; import { makeDiv } from "../../../core/utils"; import { BaseHUDPart } from "../base_hud_part"; import { DynamicDomAttach } from "../dynamic_dom_attach"; @@ -19,25 +20,25 @@ export class HUDSandboxController extends BaseHUDPart { - +
- +
- +
- +
@@ -117,7 +118,9 @@ export class HUDSandboxController extends BaseHUDPart { // Clear all shapes of this level hubGoals.storedShapes[hubGoals.currentGoal.definition.getHash()] = 0; - this.root.hud.parts.pinnedShapes.rerenderFull(); + if (this.root.hud.parts.pinnedShapes) { + this.root.hud.parts.pinnedShapes.rerenderFull(); + } // Compute gained rewards hubGoals.gainedRewards = {}; @@ -144,7 +147,7 @@ export class HUDSandboxController extends BaseHUDPart { } }); - this.visible = !G_IS_DEV; + this.visible = false; this.domAttach = new DynamicDomAttach(this.root, this.element); } diff --git a/src/js/game/hud/parts/settings_menu.js b/src/js/game/hud/parts/settings_menu.js index eb902934..16da0440 100644 --- a/src/js/game/hud/parts/settings_menu.js +++ b/src/js/game/hud/parts/settings_menu.js @@ -13,17 +13,19 @@ export class HUDSettingsMenu extends BaseHUDPart { this.menuElement = makeDiv(this.background, null, ["menuElement"]); - this.statsElement = makeDiv( - this.background, - null, - ["statsElement"], - ` + if (this.root.gameMode.hasHub()) { + this.statsElement = makeDiv( + this.background, + null, + ["statsElement"], + ` ${T.ingame.settingsMenu.beltsPlaced} ${T.ingame.settingsMenu.buildingsPlaced} ${T.ingame.settingsMenu.playtime} ` - ); + ); + } this.buttonContainer = makeDiv(this.menuElement, null, ["buttons"]); @@ -94,23 +96,25 @@ export class HUDSettingsMenu extends BaseHUDPart { const totalMinutesPlayed = Math.ceil(this.root.time.now() / 60); - /** @type {HTMLElement} */ - const playtimeElement = this.statsElement.querySelector(".playtime"); - /** @type {HTMLElement} */ - const buildingsPlacedElement = this.statsElement.querySelector(".buildingsPlaced"); - /** @type {HTMLElement} */ - const beltsPlacedElement = this.statsElement.querySelector(".beltsPlaced"); + if (this.root.gameMode.hasHub()) { + /** @type {HTMLElement} */ + const playtimeElement = this.statsElement.querySelector(".playtime"); + /** @type {HTMLElement} */ + const buildingsPlacedElement = this.statsElement.querySelector(".buildingsPlaced"); + /** @type {HTMLElement} */ + const beltsPlacedElement = this.statsElement.querySelector(".beltsPlaced"); - playtimeElement.innerText = T.global.time.xMinutes.replace("", `${totalMinutesPlayed}`); + playtimeElement.innerText = T.global.time.xMinutes.replace("", `${totalMinutesPlayed}`); - buildingsPlacedElement.innerText = formatBigNumberFull( - this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent).length - + buildingsPlacedElement.innerText = formatBigNumberFull( + this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent).length - + this.root.entityMgr.getAllWithComponent(BeltComponent).length + ); + + beltsPlacedElement.innerText = formatBigNumberFull( this.root.entityMgr.getAllWithComponent(BeltComponent).length - ); - - beltsPlacedElement.innerText = formatBigNumberFull( - this.root.entityMgr.getAllWithComponent(BeltComponent).length - ); + ); + } } close() { diff --git a/src/js/game/hud/parts/shape_tooltip.js b/src/js/game/hud/parts/shape_tooltip.js new file mode 100644 index 00000000..aabe7fa1 --- /dev/null +++ b/src/js/game/hud/parts/shape_tooltip.js @@ -0,0 +1,100 @@ +import { DrawParameters } from "../../../core/draw_parameters"; +import { enumDirectionToVector, Vector } from "../../../core/vector"; +import { Entity } from "../../entity"; +import { KEYMAPPINGS } from "../../key_action_mapper"; +import { THEME } from "../../theme"; +import { BaseHUDPart } from "../base_hud_part"; + +export class HUDShapeTooltip extends BaseHUDPart { + createElements(parent) {} + + initialize() { + /** @type {Vector} */ + this.currentTile = new Vector(0, 0); + + /** @type {Entity} */ + this.currentEntity = null; + + this.isPlacingBuilding = false; + + this.root.signals.entityQueuedForDestroy.add(() => { + this.currentEntity = null; + }, this); + + this.root.hud.signals.selectedPlacementBuildingChanged.add(metaBuilding => { + this.isPlacingBuilding = metaBuilding; + }, this); + } + + isActive() { + const hudParts = this.root.hud.parts; + + const active = + this.root.app.settings.getSetting("shapeTooltipAlwaysOn") || + this.root.keyMapper.getBinding(KEYMAPPINGS.ingame.showShapeTooltip).pressed; + + // return false if any other placer is active + return ( + active && + !this.isPlacingBuilding && + !hudParts.massSelector.currentSelectionStartWorld && + hudParts.massSelector.selectedUids.size < 1 && + !hudParts.blueprintPlacer.currentBlueprint.get() + ); + } + + /** + * + * @param {DrawParameters} parameters + */ + draw(parameters) { + if (this.isActive()) { + const mousePos = this.root.app.mousePosition; + + if (mousePos) { + const tile = this.root.camera.screenToWorld(mousePos.copy()).toTileSpace(); + if (!tile.equals(this.currentTile)) { + this.currentTile = tile; + + const entity = this.root.map.getLayerContentXY(tile.x, tile.y, this.root.currentLayer); + + if (entity && entity.components.ItemProcessor && entity.components.ItemEjector) { + this.currentEntity = entity; + } else { + this.currentEntity = null; + } + } + } + + if (!this.currentEntity) { + return; + } + + const ejectorComp = this.currentEntity.components.ItemEjector; + const staticComp = this.currentEntity.components.StaticMapEntity; + + const bounds = staticComp.getTileSize(); + const totalArea = bounds.x * bounds.y; + const maxSlots = totalArea < 2 ? 1 : 1e10; + + let slotsDrawn = 0; + + for (let i = 0; i < ejectorComp.slots.length; ++i) { + const slot = ejectorComp.slots[i]; + + if (!slot.lastItem) { + continue; + } + + if (++slotsDrawn > maxSlots) { + continue; + } + + /** @type {Vector} */ + const drawPos = staticComp.localTileToWorld(slot.pos).toWorldSpaceCenterOfTile(); + + slot.lastItem.drawItemCenteredClipped(drawPos.x, drawPos.y, parameters, 25); + } + } + } +} diff --git a/src/js/game/hud/parts/shop.js b/src/js/game/hud/parts/shop.js index 96521898..4b353bd3 100644 --- a/src/js/game/hud/parts/shop.js +++ b/src/js/game/hud/parts/shop.js @@ -77,7 +77,9 @@ export class HUDShop extends BaseHUDPart { const requiredHandle = handle.requireIndexToElement[i]; requiredHandle.container.remove(); requiredHandle.pinDetector.cleanup(); - requiredHandle.infoDetector.cleanup(); + if (requiredHandle.infoDetector) { + requiredHandle.infoDetector.cleanup(); + } } // Cleanup @@ -119,9 +121,19 @@ export class HUDShop extends BaseHUDPart { pinButton.classList.add("pin"); container.appendChild(pinButton); - const viewInfoButton = document.createElement("button"); - viewInfoButton.classList.add("showInfo"); - container.appendChild(viewInfoButton); + let infoDetector; + if (!G_WEGAME_VERSION) { + const viewInfoButton = document.createElement("button"); + viewInfoButton.classList.add("showInfo"); + container.appendChild(viewInfoButton); + infoDetector = new ClickDetector(viewInfoButton, { + consumeEvents: true, + preventDefault: true, + }); + infoDetector.click.add(() => + this.root.hud.signals.viewShapeDetailsRequested.dispatch(shapeDef) + ); + } const currentGoalShape = this.root.hubGoals.currentGoal.definition.getHash(); if (shape === currentGoalShape) { @@ -146,14 +158,6 @@ export class HUDShop extends BaseHUDPart { } }); - const infoDetector = new ClickDetector(viewInfoButton, { - consumeEvents: true, - preventDefault: true, - }); - infoDetector.click.add(() => - this.root.hud.signals.viewShapeDetailsRequested.dispatch(shapeDef) - ); - handle.requireIndexToElement.push({ container, progressLabel, @@ -211,7 +215,9 @@ export class HUDShop extends BaseHUDPart { const requiredHandle = handle.requireIndexToElement[i]; requiredHandle.container.remove(); requiredHandle.pinDetector.cleanup(); - requiredHandle.infoDetector.cleanup(); + if (requiredHandle.infoDetector) { + requiredHandle.infoDetector.cleanup(); + } } handle.requireIndexToElement = []; } diff --git a/src/js/game/hud/parts/standalone_advantages.js b/src/js/game/hud/parts/standalone_advantages.js index 96b073c7..b01461af 100644 --- a/src/js/game/hud/parts/standalone_advantages.js +++ b/src/js/game/hud/parts/standalone_advantages.js @@ -42,7 +42,7 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { this.trackClicks(this.contentDiv.querySelector("button.steamLinkButton"), () => { this.root.app.analytics.trackUiClick("standalone_advantage_visit_steam"); this.root.app.platformWrapper.openExternalLink( - THIRDPARTY_URLS.standaloneStorePage + "?ref=savs&prc=" + A_B_TESTING_LINK_TYPE + THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_std_advg" ); this.close(); }); diff --git a/src/js/game/hud/parts/watermark.js b/src/js/game/hud/parts/watermark.js index 4a75ea76..837eaa9c 100644 --- a/src/js/game/hud/parts/watermark.js +++ b/src/js/game/hud/parts/watermark.js @@ -27,7 +27,9 @@ export class HUDWatermark extends BaseHUDPart { ); this.trackClicks(this.linkElement, () => { this.root.app.analytics.trackUiClick("watermark_click_2_direct"); - this.root.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage + "?ref=wtmd"); + this.root.app.platformWrapper.openExternalLink( + THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_watermark" + ); }); } diff --git a/src/js/game/hud/parts/waypoints.js b/src/js/game/hud/parts/waypoints.js index 1a0e3739..f973a925 100644 --- a/src/js/game/hud/parts/waypoints.js +++ b/src/js/game/hud/parts/waypoints.js @@ -45,7 +45,7 @@ export class HUDWaypoints extends BaseHUDPart { */ createElements(parent) { // Create the helper box on the lower right when zooming out - if (this.root.app.settings.getAllSettings().offerHints) { + if (this.root.app.settings.getAllSettings().offerHints && !G_WEGAME_VERSION) { this.hintElement = makeDiv( parent, "ingame_HUD_Waypoints_Hint", @@ -100,16 +100,14 @@ export class HUDWaypoints extends BaseHUDPart { this.directionIndicatorSprite = Loader.getSprite("sprites/misc/hub_direction_indicator.png"); - /** @type {Array} - */ - this.waypoints = [ - { - label: null, - center: { x: 0, y: 0 }, - zoomLevel: 3, - layer: gMetaBuildingRegistry.findByClass(MetaHubBuilding).getLayer(), - }, - ]; + /** @type {Array} */ + this.waypoints = []; + this.waypoints.push({ + label: null, + center: { x: 0, y: 0 }, + zoomLevel: 3, + layer: gMetaBuildingRegistry.findByClass(MetaHubBuilding).getLayer(), + }); // Create a buffer we can use to measure text this.dummyBuffer = makeOffscreenBuffer(1, 1, { @@ -123,10 +121,12 @@ export class HUDWaypoints extends BaseHUDPart { } // Catch mouse and key events - this.root.camera.downPreHandler.add(this.onMouseDown, this); - this.root.keyMapper - .getBinding(KEYMAPPINGS.navigation.createMarker) - .add(() => this.requestSaveMarker({})); + if (!G_WEGAME_VERSION) { + this.root.camera.downPreHandler.add(this.onMouseDown, this); + this.root.keyMapper + .getBinding(KEYMAPPINGS.navigation.createMarker) + .add(() => this.requestSaveMarker({})); + } /** * Stores at how much opacity the markers should be rendered on the map. diff --git a/src/js/game/hud/parts/wires_overlay.js b/src/js/game/hud/parts/wires_overlay.js index 2fd3092c..328d6689 100644 --- a/src/js/game/hud/parts/wires_overlay.js +++ b/src/js/game/hud/parts/wires_overlay.js @@ -28,6 +28,9 @@ export class HUDWiresOverlay extends BaseHUDPart { * Switches between layers */ switchLayers() { + if (!this.root.gameMode.getSupportsWires()) { + return; + } if (this.root.currentLayer === "regular") { if ( this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers) || diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js index 13f33d66..090b8b83 100644 --- a/src/js/game/key_action_mapper.js +++ b/src/js/game/key_action_mapper.js @@ -32,6 +32,8 @@ export const KEYMAPPINGS = { toggleFPSInfo: { keyCode: 115 }, // F4 switchLayers: { keyCode: key("E") }, + + showShapeTooltip: { keyCode: 18 }, // ALT }, navigation: { @@ -49,6 +51,11 @@ export const KEYMAPPINGS = { }, buildings: { + // Puzzle buildings + constant_producer: { keyCode: key("H") }, + goal_acceptor: { keyCode: key("N") }, + block: { keyCode: key("4") }, + // Primary Toolbar belt: { keyCode: key("1") }, balancer: { keyCode: key("2") }, @@ -102,6 +109,7 @@ export const KEYMAPPINGS = { massSelectSelectMultiple: { keyCode: 16 }, // SHIFT massSelectCopy: { keyCode: key("C") }, massSelectCut: { keyCode: key("X") }, + massSelectClear: { keyCode: key("B") }, confirmMassDelete: { keyCode: 46 }, // DEL pasteLastBlueprint: { keyCode: key("V") }, }, @@ -262,6 +270,8 @@ export function getStringForKeyCode(code) { return "."; case 191: return "/"; + case 192: + return "`"; case 219: return "["; case 220: @@ -322,6 +332,15 @@ export class Keybinding { this.signal.add(receiver, scope); } + /** + * Adds an event listener + * @param {function() : void} receiver + * @param {object=} scope + */ + addToTop(receiver, scope = null) { + this.signal.addToTop(receiver, scope); + } + /** * @param {Element} elem * @returns {HTMLElement} the created element, or null if the keybindings are not shown diff --git a/src/js/game/logic.js b/src/js/game/logic.js index 7ec7b8ab..79104958 100644 --- a/src/js/game/logic.js +++ b/src/js/game/logic.js @@ -4,6 +4,7 @@ import { STOP_PROPAGATION } from "../core/signal"; import { round2Digits } from "../core/utils"; import { enumDirection, enumDirectionToVector, enumInvertedDirections, Vector } from "../core/vector"; import { getBuildingDataFromCode } from "./building_codes"; +import { Component } from "./component"; import { enumWireVariant } from "./components/wire"; import { Entity } from "./entity"; import { CHUNK_OVERLAY_RES } from "./map_chunk_view"; @@ -79,6 +80,15 @@ export class GameLogic { } // Perform additional placement checks + if (this.root.gameMode.getIsEditor()) { + const toolbar = this.root.hud.parts.buildingsToolbar; + const id = entity.components.StaticMapEntity.getMetaBuilding().getId(); + + if (toolbar.buildingHandles[id].puzzleLocked) { + return false; + } + } + if (this.root.signals.prePlacementCheck.dispatch(entity, offset) === STOP_PROPAGATION) { return false; } @@ -161,13 +171,34 @@ export class GameLogic { return returnValue; } + /** + * Performs a immutable operation, causing no recalculations + * @param {function} operation + */ + performImmutableOperation(operation) { + logger.warn("Running immutable operation ..."); + assert(!this.root.immutableOperationRunning, "Can not run two immutalbe operations twice"); + this.root.immutableOperationRunning = true; + const now = performance.now(); + const returnValue = operation(); + const duration = performance.now() - now; + logger.log("Done in", round2Digits(duration), "ms"); + assert( + this.root.immutableOperationRunning, + "Immutable operation = false while immutable operation was running" + ); + this.root.immutableOperationRunning = false; + this.root.signals.immutableOperationFinished.dispatch(); + return returnValue; + } + /** * Returns whether the given building can get removed * @param {Entity} building */ canDeleteBuilding(building) { const staticComp = building.components.StaticMapEntity; - return staticComp.getMetaBuilding().getIsRemovable(); + return staticComp.getMetaBuilding().getIsRemovable(this.root); } /** @@ -342,8 +373,6 @@ export class GameLogic { return !!overlayMatrix[localPosition.x + localPosition.y * 3]; } - g(tile, edge) {} - /** * Returns the acceptors and ejectors which affect the current tile * @param {Vector} tile @@ -425,4 +454,15 @@ export class GameLogic { } return { ejectors, acceptors }; } + + /** + * Clears all belts and items + */ + clearAllBeltsAndItems() { + for (const entity of this.root.entityMgr.entities) { + for (const component of Object.values(entity.components)) { + /** @type {Component} */ (component).clear(); + } + } + } } diff --git a/src/js/game/map.js b/src/js/game/map.js index a5ec8f21..67df7db3 100644 --- a/src/js/game/map.js +++ b/src/js/game/map.js @@ -3,6 +3,7 @@ import { Vector } from "../core/vector"; import { BasicSerializableObject, types } from "../savegame/serialization"; import { BaseItem } from "./base_item"; import { Entity } from "./entity"; +import { MapChunkAggregate } from "./map_chunk_aggregate"; import { MapChunkView } from "./map_chunk_view"; import { GameRoot } from "./root"; @@ -31,6 +32,11 @@ export class BaseMap extends BasicSerializableObject { * Mapping of 'X|Y' to chunk * @type {Map} */ this.chunksById = new Map(); + + /** + * Mapping of 'X|Y' to chunk aggregate + * @type {Map} */ + this.aggregatesById = new Map(); } /** @@ -55,6 +61,39 @@ export class BaseMap extends BasicSerializableObject { return null; } + /** + * Returns the chunk aggregate containing a given chunk + * @param {number} chunkX + * @param {number} chunkY + */ + getAggregateForChunk(chunkX, chunkY, createIfNotExistent = false) { + const aggX = Math.floor(chunkX / globalConfig.chunkAggregateSize); + const aggY = Math.floor(chunkY / globalConfig.chunkAggregateSize); + return this.getAggregate(aggX, aggY, createIfNotExistent); + } + + /** + * Returns the given chunk aggregate by index + * @param {number} aggX + * @param {number} aggY + */ + getAggregate(aggX, aggY, createIfNotExistent = false) { + const aggIdentifier = aggX + "|" + aggY; + let storedAggregate; + + if ((storedAggregate = this.aggregatesById.get(aggIdentifier))) { + return storedAggregate; + } + + if (createIfNotExistent) { + const instance = new MapChunkAggregate(this.root, aggX, aggY); + this.aggregatesById.set(aggIdentifier, instance); + return instance; + } + + return null; + } + /** * Gets or creates a new chunk if not existent for the given tile * @param {number} tileX diff --git a/src/js/game/map_chunk_aggregate.js b/src/js/game/map_chunk_aggregate.js new file mode 100644 index 00000000..de15362d --- /dev/null +++ b/src/js/game/map_chunk_aggregate.js @@ -0,0 +1,154 @@ +import { globalConfig } from "../core/config"; +import { DrawParameters } from "../core/draw_parameters"; +import { drawSpriteClipped } from "../core/draw_utils"; +import { safeModulo } from "../core/utils"; +import { GameRoot } from "./root"; + +export const CHUNK_OVERLAY_RES = 3; + +export class MapChunkAggregate { + /** + * + * @param {GameRoot} root + * @param {number} x + * @param {number} y + */ + constructor(root, x, y) { + this.root = root; + this.x = x; + this.y = y; + + /** + * Whenever something changes, we increase this number - so we know we need to redraw + */ + this.renderIteration = 0; + this.dirty = false; + /** @type {Array} */ + this.dirtyList = new Array(globalConfig.chunkAggregateSize ** 2).fill(true); + this.markDirty(0, 0); + } + + /** + * Marks this chunk as dirty, rerendering all caches + * @param {number} chunkX + * @param {number} chunkY + */ + markDirty(chunkX, chunkY) { + const relX = safeModulo(chunkX, globalConfig.chunkAggregateSize); + const relY = safeModulo(chunkY, globalConfig.chunkAggregateSize); + this.dirtyList[relY * globalConfig.chunkAggregateSize + relX] = true; + if (this.dirty) { + return; + } + this.dirty = true; + ++this.renderIteration; + this.renderKey = this.x + "/" + this.y + "@" + this.renderIteration; + } + + /** + * + * @param {HTMLCanvasElement} canvas + * @param {CanvasRenderingContext2D} context + * @param {number} w + * @param {number} h + * @param {number} dpi + */ + generateOverlayBuffer(canvas, context, w, h, dpi) { + const prevKey = this.x + "/" + this.y + "@" + (this.renderIteration - 1); + const prevBuffer = this.root.buffers.getForKeyOrNullNoUpdate({ + key: "agg@" + this.root.currentLayer, + subKey: prevKey, + }); + + const overlaySize = globalConfig.mapChunkSize * CHUNK_OVERLAY_RES; + let onlyDirty = false; + if (prevBuffer) { + context.drawImage(prevBuffer, 0, 0); + onlyDirty = true; + } + + for (let x = 0; x < globalConfig.chunkAggregateSize; x++) { + for (let y = 0; y < globalConfig.chunkAggregateSize; y++) { + if (onlyDirty && !this.dirtyList[globalConfig.chunkAggregateSize * y + x]) continue; + this.root.map + .getChunk( + this.x * globalConfig.chunkAggregateSize + x, + this.y * globalConfig.chunkAggregateSize + y, + true + ) + .generateOverlayBuffer( + context, + overlaySize, + overlaySize, + x * overlaySize, + y * overlaySize + ); + } + } + + this.dirty = false; + this.dirtyList.fill(false); + } + + /** + * Overlay + * @param {DrawParameters} parameters + */ + drawOverlay(parameters) { + const aggregateOverlaySize = + globalConfig.mapChunkSize * globalConfig.chunkAggregateSize * CHUNK_OVERLAY_RES; + const sprite = this.root.buffers.getForKey({ + key: "agg@" + this.root.currentLayer, + subKey: this.renderKey, + w: aggregateOverlaySize, + h: aggregateOverlaySize, + dpi: 1, + redrawMethod: this.generateOverlayBuffer.bind(this), + }); + + const dims = globalConfig.mapChunkWorldSize * globalConfig.chunkAggregateSize; + const extrude = 0.05; + + // Draw chunk "pixel" art + parameters.context.imageSmoothingEnabled = false; + drawSpriteClipped({ + parameters, + sprite, + x: this.x * dims - extrude, + y: this.y * dims - extrude, + w: dims + 2 * extrude, + h: dims + 2 * extrude, + originalW: aggregateOverlaySize, + originalH: aggregateOverlaySize, + }); + + parameters.context.imageSmoothingEnabled = true; + const resourcesScale = this.root.app.settings.getAllSettings().mapResourcesScale; + + // Draw patch items + if ( + this.root.currentLayer === "regular" && + resourcesScale > 0.05 && + this.root.camera.zoomLevel > 0.1 + ) { + const diameter = (70 / Math.pow(parameters.zoomLevel, 0.35)) * (0.2 + 2 * resourcesScale); + + for (let x = 0; x < globalConfig.chunkAggregateSize; x++) { + for (let y = 0; y < globalConfig.chunkAggregateSize; y++) { + this.root.map + .getChunk( + this.x * globalConfig.chunkAggregateSize + x, + this.y * globalConfig.chunkAggregateSize + y, + true + ) + .drawOverlayPatches( + parameters, + this.x * dims + x * globalConfig.mapChunkWorldSize, + this.y * dims + y * globalConfig.mapChunkWorldSize, + diameter + ); + } + } + } + } +} diff --git a/src/js/game/map_chunk_view.js b/src/js/game/map_chunk_view.js index 848afbab..947b7a9f 100644 --- a/src/js/game/map_chunk_view.js +++ b/src/js/game/map_chunk_view.js @@ -33,6 +33,7 @@ export class MapChunkView extends MapChunk { markDirty() { ++this.renderIteration; this.renderKey = this.x + "/" + this.y + "@" + this.renderIteration; + this.root.map.getAggregateForChunk(this.x, this.y, true).markDirty(this.x, this.y); } /** @@ -41,7 +42,14 @@ export class MapChunkView extends MapChunk { */ drawBackgroundLayer(parameters) { const systems = this.root.systemMgr.systems; - systems.mapResources.drawChunk(parameters, this); + if (systems.zone) { + systems.zone.drawChunk(parameters, this); + } + + if (this.root.gameMode.hasResources()) { + systems.mapResources.drawChunk(parameters, this); + } + systems.beltUnderlays.drawChunk(parameters, this); systems.belt.drawChunk(parameters, this); } @@ -69,77 +77,47 @@ export class MapChunkView extends MapChunk { systems.lever.drawChunk(parameters, this); systems.display.drawChunk(parameters, this); systems.storage.drawChunk(parameters, this); + systems.constantProducer.drawChunk(parameters, this); + systems.goalAcceptor.drawChunk(parameters, this); systems.itemProcessorOverlays.drawChunk(parameters, this); } /** - * Overlay * @param {DrawParameters} parameters + * @param {number} xoffs + * @param {number} yoffs + * @param {number} diameter */ - drawOverlay(parameters) { - const overlaySize = globalConfig.mapChunkSize * CHUNK_OVERLAY_RES; - const sprite = this.root.buffers.getForKey({ - key: "chunk@" + this.root.currentLayer, - subKey: this.renderKey, - w: overlaySize, - h: overlaySize, - dpi: 1, - redrawMethod: this.generateOverlayBuffer.bind(this), - }); - - const dims = globalConfig.mapChunkWorldSize; - const extrude = 0.05; - - // Draw chunk "pixel" art - parameters.context.imageSmoothingEnabled = false; - drawSpriteClipped({ - parameters, - sprite, - x: this.x * dims - extrude, - y: this.y * dims - extrude, - w: dims + 2 * extrude, - h: dims + 2 * extrude, - originalW: overlaySize, - originalH: overlaySize, - }); - - parameters.context.imageSmoothingEnabled = true; - const resourcesScale = this.root.app.settings.getAllSettings().mapResourcesScale; - - // Draw patch items - if (this.root.currentLayer === "regular" && resourcesScale > 0.05) { - const diameter = (70 / Math.pow(parameters.zoomLevel, 0.35)) * (0.2 + 2 * resourcesScale); - - for (let i = 0; i < this.patches.length; ++i) { - const patch = this.patches[i]; - if (patch.item.getItemType() === "shape") { - const destX = this.x * dims + patch.pos.x * globalConfig.tileSize; - const destY = this.y * dims + patch.pos.y * globalConfig.tileSize; - patch.item.drawItemCenteredClipped(destX, destY, parameters, diameter); - } + drawOverlayPatches(parameters, xoffs, yoffs, diameter) { + for (let i = 0; i < this.patches.length; ++i) { + const patch = this.patches[i]; + if (patch.item.getItemType() === "shape") { + const destX = xoffs + patch.pos.x * globalConfig.tileSize; + const destY = yoffs + patch.pos.y * globalConfig.tileSize; + patch.item.drawItemCenteredClipped(destX, destY, parameters, diameter); } } } /** * - * @param {HTMLCanvasElement} canvas * @param {CanvasRenderingContext2D} context * @param {number} w * @param {number} h - * @param {number} dpi + * @param {number=} xoffs + * @param {number=} yoffs */ - generateOverlayBuffer(canvas, context, w, h, dpi) { + generateOverlayBuffer(context, w, h, xoffs, yoffs) { context.fillStyle = this.containedEntities.length > 0 ? THEME.map.chunkOverview.filled : THEME.map.chunkOverview.empty; - context.fillRect(0, 0, w, h); + context.fillRect(xoffs, yoffs, w, h); if (this.root.app.settings.getAllSettings().displayChunkBorders) { context.fillStyle = THEME.map.chunkBorders; - context.fillRect(0, 0, w, 1); - context.fillRect(0, 1, 1, h); + context.fillRect(xoffs, yoffs, w, 1); + context.fillRect(xoffs, yoffs + 1, 1, h); } for (let x = 0; x < globalConfig.mapChunkSize; ++x) { @@ -165,8 +143,8 @@ export class MapChunkView extends MapChunk { if (lowerContent) { context.fillStyle = lowerContent.getBackgroundColorAsResource(); context.fillRect( - x * CHUNK_OVERLAY_RES, - y * CHUNK_OVERLAY_RES, + xoffs + x * CHUNK_OVERLAY_RES, + yoffs + y * CHUNK_OVERLAY_RES, CHUNK_OVERLAY_RES, CHUNK_OVERLAY_RES ); @@ -181,8 +159,8 @@ export class MapChunkView extends MapChunk { const isFilled = overlayMatrix[dx + dy * 3]; if (isFilled) { context.fillRect( - x * CHUNK_OVERLAY_RES + dx, - y * CHUNK_OVERLAY_RES + dy, + xoffs + x * CHUNK_OVERLAY_RES + dx, + yoffs + y * CHUNK_OVERLAY_RES + dy, 1, 1 ); @@ -197,8 +175,8 @@ export class MapChunkView extends MapChunk { data.rotationVariant ); context.fillRect( - x * CHUNK_OVERLAY_RES, - y * CHUNK_OVERLAY_RES, + xoffs + x * CHUNK_OVERLAY_RES, + yoffs + y * CHUNK_OVERLAY_RES, CHUNK_OVERLAY_RES, CHUNK_OVERLAY_RES ); @@ -211,8 +189,8 @@ export class MapChunkView extends MapChunk { if (lowerContent) { context.fillStyle = lowerContent.getBackgroundColorAsResource(); context.fillRect( - x * CHUNK_OVERLAY_RES, - y * CHUNK_OVERLAY_RES, + xoffs + x * CHUNK_OVERLAY_RES, + yoffs + y * CHUNK_OVERLAY_RES, CHUNK_OVERLAY_RES, CHUNK_OVERLAY_RES ); @@ -224,7 +202,7 @@ export class MapChunkView extends MapChunk { // Draw wires overlay context.fillStyle = THEME.map.wires.overlayColor; - context.fillRect(0, 0, w, h); + context.fillRect(xoffs, yoffs, w, h); for (let x = 0; x < globalConfig.mapChunkSize; ++x) { const wiresArray = this.wireContents[x]; @@ -235,8 +213,8 @@ export class MapChunkView extends MapChunk { } MapChunkView.drawSingleWiresOverviewTile({ context, - x: x * CHUNK_OVERLAY_RES, - y: y * CHUNK_OVERLAY_RES, + x: xoffs + x * CHUNK_OVERLAY_RES, + y: yoffs + y * CHUNK_OVERLAY_RES, entity: content, tileSizePixels: CHUNK_OVERLAY_RES, }); diff --git a/src/js/game/map_view.js b/src/js/game/map_view.js index 296291e9..c6078ea9 100644 --- a/src/js/game/map_view.js +++ b/src/js/game/map_view.js @@ -5,6 +5,7 @@ import { freeCanvas, makeOffscreenBuffer } from "../core/buffer_utils"; import { Entity } from "./entity"; import { THEME } from "./theme"; import { MapChunkView } from "./map_chunk_view"; +import { MapChunkAggregate } from "./map_chunk_aggregate"; /** * This is the view of the map, it extends the map which is the raw model and allows @@ -164,6 +165,40 @@ export class MapView extends BaseMap { } } + /** + * Calls a given method on all given chunks + * @param {DrawParameters} parameters + * @param {function} method + */ + drawVisibleAggregates(parameters, method) { + const cullRange = parameters.visibleRect.allScaled(1 / globalConfig.tileSize); + const top = cullRange.top(); + const right = cullRange.right(); + const bottom = cullRange.bottom(); + const left = cullRange.left(); + + const border = 0; + const minY = top - border; + const maxY = bottom + border; + const minX = left - border; + const maxX = right + border; + + const aggregateTiles = globalConfig.chunkAggregateSize * globalConfig.mapChunkSize; + const aggStartX = Math.floor(minX / aggregateTiles); + const aggStartY = Math.floor(minY / aggregateTiles); + + const aggEndX = Math.floor(maxX / aggregateTiles); + const aggEndY = Math.floor(maxY / aggregateTiles); + + // Render y from top down for proper blending + for (let aggX = aggStartX; aggX <= aggEndX; ++aggX) { + for (let aggY = aggStartY; aggY <= aggEndY; ++aggY) { + const aggregate = this.root.map.getAggregate(aggX, aggY, true); + method.call(aggregate, parameters); + } + } + } + /** * Draws the wires foreground * @param {DrawParameters} parameters @@ -177,7 +212,7 @@ export class MapView extends BaseMap { * @param {DrawParameters} parameters */ drawOverlay(parameters) { - this.drawVisibleChunks(parameters, MapChunkView.prototype.drawOverlay); + this.drawVisibleAggregates(parameters, MapChunkAggregate.prototype.drawOverlay); } /** @@ -186,7 +221,7 @@ export class MapView extends BaseMap { */ drawBackground(parameters) { // Render tile grid - if (!this.root.app.settings.getAllSettings().disableTileGrid) { + if (!this.root.app.settings.getAllSettings().disableTileGrid || !this.root.gameMode.hasResources()) { const dpi = this.backgroundCacheDPI; parameters.context.scale(1 / dpi, 1 / dpi); diff --git a/src/js/game/meta_building.js b/src/js/game/meta_building.js index 9deee272..7bfbce25 100644 --- a/src/js/game/meta_building.js +++ b/src/js/game/meta_building.js @@ -108,9 +108,10 @@ export class MetaBuilding { /** * Returns whether this building is removable + * @param {GameRoot} root * @returns {boolean} */ - getIsRemovable() { + getIsRemovable(root) { return true; } @@ -157,10 +158,9 @@ export class MetaBuilding { /** * Returns whether this building is rotateable - * @param {string} variant * @returns {boolean} */ - getIsRotateable(variant) { + getIsRotateable() { return true; } @@ -242,7 +242,7 @@ export class MetaBuilding { * @return {{ rotation: number, rotationVariant: number, connectedEntities?: Array }} */ computeOptimalDirectionAndRotationVariantAtTile({ root, tile, rotation, variant, layer }) { - if (!this.getIsRotateable(variant)) { + if (!this.getIsRotateable()) { return { rotation: 0, rotationVariant: 0, diff --git a/src/js/game/meta_building_registry.js b/src/js/game/meta_building_registry.js index 0613103e..0c93153d 100644 --- a/src/js/game/meta_building_registry.js +++ b/src/js/game/meta_building_registry.js @@ -4,11 +4,14 @@ import { T } from "../translations"; import { MetaAnalyzerBuilding } from "./buildings/analyzer"; import { enumBalancerVariants, MetaBalancerBuilding } from "./buildings/balancer"; import { MetaBeltBuilding } from "./buildings/belt"; +import { MetaBlockBuilding } from "./buildings/block"; import { MetaComparatorBuilding } from "./buildings/comparator"; +import { MetaConstantProducerBuilding } from "./buildings/constant_producer"; import { MetaConstantSignalBuilding } from "./buildings/constant_signal"; import { enumCutterVariants, MetaCutterBuilding } from "./buildings/cutter"; import { MetaDisplayBuilding } from "./buildings/display"; import { MetaFilterBuilding } from "./buildings/filter"; +import { MetaGoalAcceptorBuilding } from "./buildings/goal_acceptor"; import { MetaHubBuilding } from "./buildings/hub"; import { MetaItemProducerBuilding } from "./buildings/item_producer"; import { MetaLeverBuilding } from "./buildings/lever"; @@ -45,6 +48,7 @@ export function initMetaBuildingRegistry() { gMetaBuildingRegistry.register(MetaStorageBuilding); gMetaBuildingRegistry.register(MetaBeltBuilding); gMetaBuildingRegistry.register(MetaUndergroundBeltBuilding); + gMetaBuildingRegistry.register(MetaGoalAcceptorBuilding); gMetaBuildingRegistry.register(MetaHubBuilding); gMetaBuildingRegistry.register(MetaWireBuilding); gMetaBuildingRegistry.register(MetaConstantSignalBuilding); @@ -59,6 +63,8 @@ export function initMetaBuildingRegistry() { gMetaBuildingRegistry.register(MetaAnalyzerBuilding); gMetaBuildingRegistry.register(MetaComparatorBuilding); gMetaBuildingRegistry.register(MetaItemProducerBuilding); + gMetaBuildingRegistry.register(MetaConstantProducerBuilding); + gMetaBuildingRegistry.register(MetaBlockBuilding); // Belt registerBuildingVariant(1, MetaBeltBuilding, defaultBuildingVariant, 0); @@ -165,6 +171,15 @@ export function initMetaBuildingRegistry() { // Item producer registerBuildingVariant(61, MetaItemProducerBuilding); + // Constant producer + registerBuildingVariant(62, MetaConstantProducerBuilding); + + // Goal acceptor + registerBuildingVariant(63, MetaGoalAcceptorBuilding); + + // Block + registerBuildingVariant(64, MetaBlockBuilding); + // Propagate instances for (const key in gBuildingVariants) { gBuildingVariants[key].metaInstance = gMetaBuildingRegistry.findByClass( diff --git a/src/js/game/modes/puzzle.js b/src/js/game/modes/puzzle.js new file mode 100644 index 00000000..c953b0a6 --- /dev/null +++ b/src/js/game/modes/puzzle.js @@ -0,0 +1,108 @@ +/* typehints:start */ +import { GameRoot } from "../root"; +/* typehints:end */ + +import { Rectangle } from "../../core/rectangle"; +import { types } from "../../savegame/serialization"; +import { enumGameModeTypes, GameMode } from "../game_mode"; +import { HUDPuzzleBackToMenu } from "../hud/parts/puzzle_back_to_menu"; +import { HUDPuzzleDLCLogo } from "../hud/parts/puzzle_dlc_logo"; +import { HUDMassSelector } from "../hud/parts/mass_selector"; + +export class PuzzleGameMode extends GameMode { + static getType() { + return enumGameModeTypes.puzzle; + } + + /** @returns {object} */ + static getSchema() { + return { + zoneHeight: types.uint, + zoneWidth: types.uint, + }; + } + + /** @param {GameRoot} root */ + constructor(root) { + super(root); + + const data = this.getSaveData(); + + this.additionalHudParts = { + puzzleBackToMenu: HUDPuzzleBackToMenu, + puzzleDlcLogo: HUDPuzzleDLCLogo, + massSelector: HUDMassSelector, + }; + + this.zoneWidth = data.zoneWidth || 8; + this.zoneHeight = data.zoneHeight || 6; + } + + /** + * @param {typeof import("../meta_building").MetaBuilding} building + */ + isBuildingExcluded(building) { + return this.hiddenBuildings.indexOf(building) >= 0; + } + + getSaveData() { + const save = this.root.savegame.getCurrentDump(); + if (!save) { + return {}; + } + return save.gameMode.data; + } + + getCameraBounds() { + return Rectangle.centered(this.zoneWidth + 20, this.zoneHeight + 20); + } + + getBuildableZones() { + return [Rectangle.centered(this.zoneWidth, this.zoneHeight)]; + } + + hasHub() { + return false; + } + + hasResources() { + return false; + } + + getMinimumZoom() { + return 1; + } + + getMaximumZoom() { + return 4; + } + + getIsSaveable() { + return false; + } + + getHasFreeCopyPaste() { + return true; + } + + throughputDoesNotMatter() { + return true; + } + + getSupportsWires() { + return false; + } + + getFixedTickrate() { + return 300; + } + + getIsDeterministic() { + return true; + } + + /** @returns {boolean} */ + getIsFreeplayAvailable() { + return true; + } +} diff --git a/src/js/game/modes/puzzle_edit.js b/src/js/game/modes/puzzle_edit.js new file mode 100644 index 00000000..e3d2e40d --- /dev/null +++ b/src/js/game/modes/puzzle_edit.js @@ -0,0 +1,66 @@ +/* typehints:start */ +import { GameRoot } from "../root"; +/* typehints:end */ + +import { enumGameModeIds } from "../game_mode"; +import { PuzzleGameMode } from "./puzzle"; +import { MetaStorageBuilding } from "../buildings/storage"; +import { MetaReaderBuilding } from "../buildings/reader"; +import { MetaFilterBuilding } from "../buildings/filter"; +import { MetaDisplayBuilding } from "../buildings/display"; +import { MetaLeverBuilding } from "../buildings/lever"; +import { MetaItemProducerBuilding } from "../buildings/item_producer"; +import { MetaMinerBuilding } from "../buildings/miner"; +import { MetaWireBuilding } from "../buildings/wire"; +import { MetaWireTunnelBuilding } from "../buildings/wire_tunnel"; +import { MetaConstantSignalBuilding } from "../buildings/constant_signal"; +import { MetaLogicGateBuilding } from "../buildings/logic_gate"; +import { MetaVirtualProcessorBuilding } from "../buildings/virtual_processor"; +import { MetaAnalyzerBuilding } from "../buildings/analyzer"; +import { MetaComparatorBuilding } from "../buildings/comparator"; +import { MetaTransistorBuilding } from "../buildings/transistor"; +import { HUDPuzzleEditorControls } from "../hud/parts/puzzle_editor_controls"; +import { HUDPuzzleEditorReview } from "../hud/parts/puzzle_editor_review"; +import { HUDPuzzleEditorSettings } from "../hud/parts/puzzle_editor_settings"; + +export class PuzzleEditGameMode extends PuzzleGameMode { + static getId() { + return enumGameModeIds.puzzleEdit; + } + + static getSchema() { + return {}; + } + + /** @param {GameRoot} root */ + constructor(root) { + super(root); + + this.hiddenBuildings = [ + MetaStorageBuilding, + MetaReaderBuilding, + MetaFilterBuilding, + MetaDisplayBuilding, + MetaLeverBuilding, + MetaItemProducerBuilding, + MetaMinerBuilding, + + MetaWireBuilding, + MetaWireTunnelBuilding, + MetaConstantSignalBuilding, + MetaLogicGateBuilding, + MetaVirtualProcessorBuilding, + MetaAnalyzerBuilding, + MetaComparatorBuilding, + MetaTransistorBuilding, + ]; + + this.additionalHudParts.puzzleEditorControls = HUDPuzzleEditorControls; + this.additionalHudParts.puzzleEditorReview = HUDPuzzleEditorReview; + this.additionalHudParts.puzzleEditorSettings = HUDPuzzleEditorSettings; + } + + getIsEditor() { + return true; + } +} diff --git a/src/js/game/modes/puzzle_play.js b/src/js/game/modes/puzzle_play.js new file mode 100644 index 00000000..fc9a8f11 --- /dev/null +++ b/src/js/game/modes/puzzle_play.js @@ -0,0 +1,204 @@ +/* typehints:start */ +import { GameRoot } from "../root"; +/* typehints:end */ + +import { enumGameModeIds } from "../game_mode"; +import { PuzzleGameMode } from "./puzzle"; +import { MetaStorageBuilding } from "../buildings/storage"; +import { MetaReaderBuilding } from "../buildings/reader"; +import { MetaFilterBuilding } from "../buildings/filter"; +import { MetaDisplayBuilding } from "../buildings/display"; +import { MetaLeverBuilding } from "../buildings/lever"; +import { MetaItemProducerBuilding } from "../buildings/item_producer"; +import { MetaMinerBuilding } from "../buildings/miner"; +import { MetaWireBuilding } from "../buildings/wire"; +import { MetaWireTunnelBuilding } from "../buildings/wire_tunnel"; +import { MetaConstantSignalBuilding } from "../buildings/constant_signal"; +import { MetaLogicGateBuilding } from "../buildings/logic_gate"; +import { MetaVirtualProcessorBuilding } from "../buildings/virtual_processor"; +import { MetaAnalyzerBuilding } from "../buildings/analyzer"; +import { MetaComparatorBuilding } from "../buildings/comparator"; +import { MetaTransistorBuilding } from "../buildings/transistor"; +import { MetaConstantProducerBuilding } from "../buildings/constant_producer"; +import { MetaGoalAcceptorBuilding } from "../buildings/goal_acceptor"; +import { PuzzleSerializer } from "../../savegame/puzzle_serializer"; +import { T } from "../../translations"; +import { HUDPuzzlePlayMetadata } from "../hud/parts/puzzle_play_metadata"; +import { createLogger } from "../../core/logging"; +import { HUDPuzzleCompleteNotification } from "../hud/parts/puzzle_complete_notification"; +import { HUDPuzzlePlaySettings } from "../hud/parts/puzzle_play_settings"; +import { MetaBlockBuilding } from "../buildings/block"; +import { MetaBuilding } from "../meta_building"; +import { gMetaBuildingRegistry } from "../../core/global_registries"; +import { HUDPuzzleNextPuzzle } from "../hud/parts/HUDPuzzleNextPuzzle"; + +const logger = createLogger("puzzle-play"); +const copy = require("clipboard-copy"); + +export class PuzzlePlayGameMode extends PuzzleGameMode { + static getId() { + return enumGameModeIds.puzzlePlay; + } + + /** + * @param {GameRoot} root + * @param {object} payload + * @param {import("../../savegame/savegame_typedefs").PuzzleFullData} payload.puzzle + * @param {Array | undefined} payload.nextPuzzles + */ + constructor(root, { puzzle, nextPuzzles }) { + super(root); + + /** @type {Array} */ + let excludedBuildings = [ + MetaConstantProducerBuilding, + MetaGoalAcceptorBuilding, + MetaBlockBuilding, + + MetaStorageBuilding, + MetaReaderBuilding, + MetaFilterBuilding, + MetaDisplayBuilding, + MetaLeverBuilding, + MetaItemProducerBuilding, + MetaMinerBuilding, + + MetaWireBuilding, + MetaWireTunnelBuilding, + MetaConstantSignalBuilding, + MetaLogicGateBuilding, + MetaVirtualProcessorBuilding, + MetaAnalyzerBuilding, + MetaComparatorBuilding, + MetaTransistorBuilding, + ]; + + if (puzzle.game.excludedBuildings) { + /** + * @type {any} + */ + const puzzleHidden = puzzle.game.excludedBuildings + .map(id => { + if (!gMetaBuildingRegistry.hasId(id)) { + return; + } + return gMetaBuildingRegistry.findById(id).constructor; + }) + .filter(x => !!x); + excludedBuildings = excludedBuildings.concat(puzzleHidden); + } + + this.hiddenBuildings = excludedBuildings; + + this.additionalHudParts.puzzlePlayMetadata = HUDPuzzlePlayMetadata; + this.additionalHudParts.puzzlePlaySettings = HUDPuzzlePlaySettings; + this.additionalHudParts.puzzleCompleteNotification = HUDPuzzleCompleteNotification; + + root.signals.postLoadHook.add(this.loadPuzzle, this); + + this.puzzle = puzzle; + + /** + * @type {Array} + */ + this.nextPuzzles = nextPuzzles || []; + + if (this.nextPuzzles.length > 0) { + this.additionalHudParts.puzzleNext = HUDPuzzleNextPuzzle; + } + } + + loadPuzzle() { + let errorText; + logger.log("Loading puzzle", this.puzzle); + + try { + this.zoneWidth = this.puzzle.game.bounds.w; + this.zoneHeight = this.puzzle.game.bounds.h; + errorText = new PuzzleSerializer().deserializePuzzle(this.root, this.puzzle.game); + } catch (ex) { + errorText = ex.message || ex; + } + + if (errorText) { + this.root.gameState.moveToState("PuzzleMenuState", { + error: { + title: T.dialogs.puzzleLoadError.title, + desc: T.dialogs.puzzleLoadError.desc + " " + errorText, + }, + }); + // const signals = this.root.hud.parts.dialogs.showWarning( + // T.dialogs.puzzleLoadError.title, + // T.dialogs.puzzleLoadError.desc + " " + errorText + // ); + // signals.ok.add(() => this.root.gameState.moveToState("PuzzleMenuState")); + } + } + + /** + * + * @param {boolean} liked + * @param {number} time + */ + trackCompleted(liked, time) { + const closeLoading = this.root.hud.parts.dialogs.showLoadingDialog(); + + return this.root.app.clientApi + .apiCompletePuzzle(this.puzzle.meta.id, { + time, + liked, + }) + .catch(err => { + logger.warn("Failed to complete puzzle:", err); + }) + .then(() => { + closeLoading(); + }); + } + + sharePuzzle() { + copy(this.puzzle.meta.shortKey); + + this.root.hud.parts.dialogs.showInfo( + T.dialogs.puzzleShare.title, + T.dialogs.puzzleShare.desc.replace("", this.puzzle.meta.shortKey) + ); + } + + reportPuzzle() { + const { optionSelected } = this.root.hud.parts.dialogs.showOptionChooser( + T.dialogs.puzzleReport.title, + { + options: [ + { value: "profane", text: T.dialogs.puzzleReport.options.profane }, + { value: "unsolvable", text: T.dialogs.puzzleReport.options.unsolvable }, + { value: "trolling", text: T.dialogs.puzzleReport.options.trolling }, + ], + } + ); + + return new Promise(resolve => { + optionSelected.add(option => { + const closeLoading = this.root.hud.parts.dialogs.showLoadingDialog(); + + this.root.app.clientApi.apiReportPuzzle(this.puzzle.meta.id, option).then( + () => { + closeLoading(); + const { ok } = this.root.hud.parts.dialogs.showInfo( + T.dialogs.puzzleReportComplete.title, + T.dialogs.puzzleReportComplete.desc + ); + ok.add(resolve); + }, + err => { + closeLoading(); + const { ok } = this.root.hud.parts.dialogs.showInfo( + T.dialogs.puzzleReportError.title, + T.dialogs.puzzleReportError.desc + " " + err + ); + } + ); + }); + }); + } +} diff --git a/src/js/game/modes/regular.js b/src/js/game/modes/regular.js index e99f4a7c..429c1515 100644 --- a/src/js/game/modes/regular.js +++ b/src/js/game/modes/regular.js @@ -1,19 +1,76 @@ +/* typehints:start */ +import { GameRoot } from "../root"; +import { MetaBuilding } from "../meta_building"; +/* typehints:end */ + import { findNiceIntegerValue } from "../../core/utils"; -import { GameMode } from "../game_mode"; +import { MetaConstantProducerBuilding } from "../buildings/constant_producer"; +import { MetaGoalAcceptorBuilding } from "../buildings/goal_acceptor"; +import { enumGameModeIds, enumGameModeTypes, GameMode } from "../game_mode"; import { ShapeDefinition } from "../shape_definition"; import { enumHubGoalRewards } from "../tutorial_goals"; +import { HUDWiresToolbar } from "../hud/parts/wires_toolbar"; +import { HUDUnlockNotification } from "../hud/parts/unlock_notification"; +import { HUDMassSelector } from "../hud/parts/mass_selector"; +import { HUDShop } from "../hud/parts/shop"; +import { HUDWaypoints } from "../hud/parts/waypoints"; +import { HUDStatistics } from "../hud/parts/statistics"; +import { HUDWireInfo } from "../hud/parts/wire_info"; +import { HUDLeverToggle } from "../hud/parts/lever_toggle"; +import { HUDPinnedShapes } from "../hud/parts/pinned_shapes"; +import { HUDNotifications } from "../hud/parts/notifications"; +import { HUDScreenshotExporter } from "../hud/parts/screenshot_exporter"; +import { HUDWiresOverlay } from "../hud/parts/wires_overlay"; +import { HUDShapeViewer } from "../hud/parts/shape_viewer"; +import { HUDLayerPreview } from "../hud/parts/layer_preview"; +import { HUDTutorialVideoOffer } from "../hud/parts/tutorial_video_offer"; +import { HUDMinerHighlight } from "../hud/parts/miner_highlight"; +import { HUDGameMenu } from "../hud/parts/game_menu"; +import { HUDConstantSignalEdit } from "../hud/parts/constant_signal_edit"; +import { IS_MOBILE } from "../../core/config"; +import { HUDKeybindingOverlay } from "../hud/parts/keybinding_overlay"; +import { HUDWatermark } from "../hud/parts/watermark"; +import { HUDStandaloneAdvantages } from "../hud/parts/standalone_advantages"; +import { HUDCatMemes } from "../hud/parts/cat_memes"; +import { HUDPartTutorialHints } from "../hud/parts/tutorial_hints"; +import { HUDInteractiveTutorial } from "../hud/parts/interactive_tutorial"; +import { HUDSandboxController } from "../hud/parts/sandbox_controller"; +import { queryParamOptions } from "../../core/query_parameters"; +import { MetaBlockBuilding } from "../buildings/block"; +import { MetaItemProducerBuilding } from "../buildings/item_producer"; -const rocketShape = "CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw"; -const finalGameShape = "RuCw--Cw:----Ru--"; +/** @typedef {{ + * shape: string, + * amount: number + * }} UpgradeRequirement */ + +/** @typedef {{ + * required: Array + * improvement?: number, + * excludePrevious?: boolean + * }} TierRequirement */ + +/** @typedef {Array} UpgradeTiers */ + +/** @typedef {{ + * shape: string, + * required: number, + * reward: enumHubGoalRewards, + * throughputOnly?: boolean + * }} LevelDefinition */ + +export const rocketShape = "CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw"; +export const finalGameShape = "RuCw--Cw:----Ru--"; const preparementShape = "CpRpCp--:SwSwSwSw"; -const blueprintShape = "CbCbCbRb:CwCwCwCw"; // Tiers need % of the previous tier as requirement too const tierGrowth = 2.5; +const chinaShapes = G_WEGAME_VERSION || G_CHINA_VERSION; + /** * Generates all upgrades - * @returns {Object} */ + * @returns {Object} */ function generateUpgrades(limitedVersion = false) { const fixedImprovements = [0.5, 0.5, 1, 1, 2, 1, 1]; const numEndgameUpgrades = limitedVersion ? 0 : 1000 - fixedImprovements.length - 1; @@ -87,7 +144,14 @@ function generateUpgrades(limitedVersion = false) { required: [{ shape: "CwCwCwCw:WbWbWbWb", amount: 23000 }], }, { - required: [{ shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", amount: 50000 }], + required: [ + { + shape: chinaShapes + ? "CyCyCyCy:CyCyCyCy:RyRyRyRy:RuRuRuRu" + : "CbRbRbCb:CwCwCwCw:WbWbWbWb", + amount: 50000, + }, + ], }, { required: [{ shape: preparementShape, amount: 25000 }], @@ -141,7 +205,12 @@ function generateUpgrades(limitedVersion = false) { required: [{ shape: "WrWrWrWr", amount: 3800 }], }, { - required: [{ shape: "RpRpRpRp:CwCwCwCw", amount: 6500 }], + required: [ + { + shape: chinaShapes ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw", + amount: 6500, + }, + ], }, { required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp", amount: 25000 }], @@ -273,63 +342,63 @@ export function generateLevelDefinitions(limitedVersion = false) { reward: enumHubGoalRewards.reward_rotater_ccw, }, - // 8 - { - shape: "RbRb----", // painter t2 - required: 480, - reward: enumHubGoalRewards.reward_mixer, - }, - - // 9 - // Mixing (purple) - { - shape: "CpCpCpCp", // belts t3 - required: 600, - reward: enumHubGoalRewards.reward_merger, - }, - - // 10 - // STACKER: Star shape + cyan - { - shape: "ScScScSc", // miners t3 - required: 800, - reward: enumHubGoalRewards.reward_stacker, - }, - - // 11 - // Chainable miner - { - shape: "CgScScCg", // processors t3 - required: 1000, - reward: enumHubGoalRewards.reward_miner_chainable, - }, - - // 12 - // Blueprints - { - shape: "CbCbCbRb:CwCwCwCw", - required: 1000, - reward: enumHubGoalRewards.reward_blueprints, - }, - - // 13 - // Tunnel Tier 2 - { - shape: "RpRpRpRp:CwCwCwCw", // painting t3 - required: 3800, - reward: enumHubGoalRewards.reward_underground_belt_tier_2, - }, - // DEMO STOPS HERE ...(limitedVersion ? [ { - shape: "RpRpRpRp:CwCwCwCw", + shape: "CrCrCrCr", required: 0, reward: enumHubGoalRewards.reward_demo_end, }, ] : [ + // 8 + { + shape: "RbRb----", // painter t2 + required: 480, + reward: enumHubGoalRewards.reward_mixer, + }, + + // 9 + // Mixing (purple) + { + shape: "CpCpCpCp", // belts t3 + required: 600, + reward: enumHubGoalRewards.reward_merger, + }, + + // 10 + // STACKER: Star shape + cyan + { + shape: "ScScScSc", // miners t3 + required: 800, + reward: enumHubGoalRewards.reward_stacker, + }, + + // 11 + // Chainable miner + { + shape: "CgScScCg", // processors t3 + required: 1000, + reward: enumHubGoalRewards.reward_miner_chainable, + }, + + // 12 + // Blueprints + { + shape: "CbCbCbRb:CwCwCwCw", + required: 1000, + reward: enumHubGoalRewards.reward_blueprints, + }, + + // 13 + // Tunnel Tier 2 + { + shape: chinaShapes ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw", // painting t3 + required: 3800, + reward: enumHubGoalRewards.reward_underground_belt_tier_2, + }, + // 14 // Belt reader { @@ -358,7 +427,9 @@ export function generateLevelDefinitions(limitedVersion = false) { // 17 // Double painter { - shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) + shape: chinaShapes + ? "CyCyCyCy:CyCyCyCy:RyRyRyRy:RuRuRuRu" + : "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) required: 20000, reward: enumHubGoalRewards.reward_painter_double, }, @@ -398,7 +469,9 @@ export function generateLevelDefinitions(limitedVersion = false) { // 22 // Constant signal { - shape: "Cg----Cr:Cw----Cw:Sy------:Cy----Cy", + shape: chinaShapes + ? "RrSySrSy:RyCrCwCr:CyCyRyCy" + : "Cg----Cr:Cw----Cw:Sy------:Cy----Cy", required: 25000, reward: enumHubGoalRewards.reward_constant_signal, }, @@ -406,14 +479,18 @@ export function generateLevelDefinitions(limitedVersion = false) { // 23 // Display { - shape: "CcSyCcSy:SyCcSyCc:CcSyCcSy", + shape: chinaShapes + ? "CrCrCrCr:CwCwCwCw:WwWwWwWw:CrCrCrCr" + : "CcSyCcSy:SyCcSyCc:CcSyCcSy", required: 25000, reward: enumHubGoalRewards.reward_display, }, // 24 Logic gates { - shape: "CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy", + shape: chinaShapes + ? "Su----Su:RwRwRwRw:Cu----Cu:CwCwCwCw" + : "CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy", required: 25000, reward: enumHubGoalRewards.reward_logic_gates, }, @@ -454,27 +531,101 @@ const fullVersionLevels = generateLevelDefinitions(false); const demoVersionLevels = generateLevelDefinitions(true); export class RegularGameMode extends GameMode { - constructor(root) { - super(root); + static getId() { + return enumGameModeIds.regular; } + static getType() { + return enumGameModeTypes.default; + } + + /** @param {GameRoot} root */ + constructor(root) { + super(root); + + this.additionalHudParts = { + wiresToolbar: HUDWiresToolbar, + unlockNotification: HUDUnlockNotification, + massSelector: HUDMassSelector, + shop: HUDShop, + statistics: HUDStatistics, + waypoints: HUDWaypoints, + wireInfo: HUDWireInfo, + leverToggle: HUDLeverToggle, + pinnedShapes: HUDPinnedShapes, + notifications: HUDNotifications, + screenshotExporter: HUDScreenshotExporter, + wiresOverlay: HUDWiresOverlay, + shapeViewer: HUDShapeViewer, + layerPreview: HUDLayerPreview, + minerHighlight: HUDMinerHighlight, + tutorialVideoOffer: HUDTutorialVideoOffer, + gameMenu: HUDGameMenu, + constantSignalEdit: HUDConstantSignalEdit, + }; + + if (!IS_MOBILE) { + this.additionalHudParts.keybindingOverlay = HUDKeybindingOverlay; + } + + if (this.root.app.restrictionMgr.getIsStandaloneMarketingActive()) { + this.additionalHudParts.watermark = HUDWatermark; + this.additionalHudParts.standaloneAdvantages = HUDStandaloneAdvantages; + this.additionalHudParts.catMemes = HUDCatMemes; + } + + if (this.root.app.settings.getAllSettings().offerHints) { + if (!G_WEGAME_VERSION) { + this.additionalHudParts.tutorialHints = HUDPartTutorialHints; + } + this.additionalHudParts.interactiveTutorial = HUDInteractiveTutorial; + } + + // @ts-ignore + if (queryParamOptions.sandboxMode || window.sandboxMode || G_IS_DEV) { + this.additionalHudParts.sandboxController = HUDSandboxController; + } + + /** @type {(typeof MetaBuilding)[]} */ + this.hiddenBuildings = [MetaConstantProducerBuilding, MetaGoalAcceptorBuilding, MetaBlockBuilding]; + + // @ts-expect-error + if (!(G_IS_DEV || window.sandboxMode || queryParamOptions.sandboxMode)) { + this.hiddenBuildings.push(MetaItemProducerBuilding); + } + } + + /** + * Should return all available upgrades + * @returns {Object} + */ getUpgrades() { return this.root.app.restrictionMgr.getHasExtendedUpgrades() ? fullVersionUpgrades : demoVersionUpgrades; } - getIsFreeplayAvailable() { - return this.root.app.restrictionMgr.getHasExtendedLevelsAndFreeplay(); - } - - getBlueprintShapeKey() { - return blueprintShape; - } - + /** + * Returns the goals for all levels including their reward + * @returns {Array} + */ getLevelDefinitions() { return this.root.app.restrictionMgr.getHasExtendedLevelsAndFreeplay() ? fullVersionLevels : demoVersionLevels; } + + /** + * Should return whether free play is available or if the game stops + * after the predefined levels + * @returns {boolean} + */ + getIsFreeplayAvailable() { + return this.root.app.restrictionMgr.getHasExtendedLevelsAndFreeplay(); + } + + /** @returns {boolean} */ + hasAchievements() { + return true; + } } diff --git a/src/js/game/root.js b/src/js/game/root.js index 82d1e49f..64004e9d 100644 --- a/src/js/game/root.js +++ b/src/js/game/root.js @@ -79,6 +79,11 @@ export class GameRoot { */ this.bulkOperationRunning = false; + /** + * Whether a immutable operation is running + */ + this.immutableOperationRunning = false; + //////// Other properties /////// /** @type {Camera} */ @@ -169,6 +174,7 @@ export class GameRoot { itemProduced: /** @type {TypedSignal<[BaseItem]>} */ (new Signal()), bulkOperationFinished: /** @type {TypedSignal<[]>} */ (new Signal()), + immutableOperationFinished: /** @type {TypedSignal<[]>} */ (new Signal()), editModeChanged: /** @type {TypedSignal<[Layer]>} */ (new Signal()), @@ -183,6 +189,9 @@ export class GameRoot { // Called with an achievement key and necessary args to validate it can be unlocked. achievementCheck: /** @type {TypedSignal<[string, any]>} */ (new Signal()), bulkAchievementCheck: /** @type {TypedSignal<(string|any)[]>} */ (new Signal()), + + // Puzzle mode + puzzleComplete: /** @type {TypedSignal<[]>} */ (new Signal()), }; // RNG's diff --git a/src/js/game/systems/belt.js b/src/js/game/systems/belt.js index 10543e6c..00491eff 100644 --- a/src/js/game/systems/belt.js +++ b/src/js/game/systems/belt.js @@ -164,7 +164,10 @@ export class BeltSystem extends GameSystemWithFilter { // Compute delta to see if anything changed const newDirection = arrayBeltVariantToRotation[rotationVariant]; - if (targetStaticComp.rotation !== rotation || newDirection !== targetBeltComp.direction) { + if ( + !this.root.immutableOperationRunning && + (targetStaticComp.rotation !== rotation || newDirection !== targetBeltComp.direction) + ) { const originalPath = targetBeltComp.assignedPath; // Ok, first remove it from its current path diff --git a/src/js/game/systems/belt_reader.js b/src/js/game/systems/belt_reader.js index fbd00b6c..41211c05 100644 --- a/src/js/game/systems/belt_reader.js +++ b/src/js/game/systems/belt_reader.js @@ -14,7 +14,6 @@ export class BeltReaderSystem extends GameSystemWithFilter { const minimumTimeForThroughput = now - 1; for (let i = 0; i < this.allEntities.length; ++i) { const entity = this.allEntities[i]; - const readerComp = entity.components.BeltReader; const pinsComp = entity.components.WiredPins; @@ -23,12 +22,14 @@ export class BeltReaderSystem extends GameSystemWithFilter { readerComp.lastItemTimes.shift(); } - pinsComp.slots[1].value = readerComp.lastItem; - pinsComp.slots[0].value = - (readerComp.lastItemTimes[readerComp.lastItemTimes.length - 1] || 0) > - minimumTimeForThroughput - ? BOOL_TRUE_SINGLETON - : BOOL_FALSE_SINGLETON; + if (pinsComp) { + pinsComp.slots[1].value = readerComp.lastItem; + pinsComp.slots[0].value = + (readerComp.lastItemTimes[readerComp.lastItemTimes.length - 1] || 0) > + minimumTimeForThroughput + ? BOOL_TRUE_SINGLETON + : BOOL_FALSE_SINGLETON; + } if (now - readerComp.lastThroughputComputation > 0.5) { // Compute throughput diff --git a/src/js/game/systems/constant_producer.js b/src/js/game/systems/constant_producer.js new file mode 100644 index 00000000..5c10b409 --- /dev/null +++ b/src/js/game/systems/constant_producer.js @@ -0,0 +1,62 @@ +import { globalConfig } from "../../core/config"; +import { DrawParameters } from "../../core/draw_parameters"; +import { Vector } from "../../core/vector"; +import { ConstantSignalComponent } from "../components/constant_signal"; +import { ItemProducerComponent } from "../components/item_producer"; +import { GameSystemWithFilter } from "../game_system_with_filter"; +import { MapChunk } from "../map_chunk"; +import { GameRoot } from "../root"; + +export class ConstantProducerSystem extends GameSystemWithFilter { + /** @param {GameRoot} root */ + constructor(root) { + super(root, [ConstantSignalComponent, ItemProducerComponent]); + } + + update() { + for (let i = 0; i < this.allEntities.length; ++i) { + const entity = this.allEntities[i]; + const signalComp = entity.components.ConstantSignal; + const ejectorComp = entity.components.ItemEjector; + if (!ejectorComp) { + continue; + } + ejectorComp.tryEject(0, signalComp.signal); + } + } + + /** + * + * @param {DrawParameters} parameters + * @param {MapChunk} chunk + * @returns + */ + drawChunk(parameters, chunk) { + const contents = chunk.containedEntitiesByLayer.regular; + for (let i = 0; i < contents.length; ++i) { + const producerComp = contents[i].components.ItemProducer; + const signalComp = contents[i].components.ConstantSignal; + + if (!producerComp || !signalComp) { + continue; + } + + const staticComp = contents[i].components.StaticMapEntity; + const item = signalComp.signal; + + if (!item) { + continue; + } + + const center = staticComp.getTileSpaceBounds().getCenter().toWorldSpace(); + + const localOffset = new Vector(0, 1).rotateFastMultipleOf90(staticComp.rotation); + item.drawItemCenteredClipped( + center.x + localOffset.x, + center.y + localOffset.y, + parameters, + globalConfig.tileSize * 0.65 + ); + } + } +} diff --git a/src/js/game/systems/constant_signal.js b/src/js/game/systems/constant_signal.js index d698c1d5..29079825 100644 --- a/src/js/game/systems/constant_signal.js +++ b/src/js/game/systems/constant_signal.js @@ -26,9 +26,12 @@ export class ConstantSignalSystem extends GameSystemWithFilter { // Set signals for (let i = 0; i < this.allEntities.length; ++i) { const entity = this.allEntities[i]; - const pinsComp = entity.components.WiredPins; const signalComp = entity.components.ConstantSignal; - pinsComp.slots[0].value = signalComp.signal; + const pinsComp = entity.components.WiredPins; + + if (pinsComp) { + pinsComp.slots[0].value = signalComp.signal; + } } } @@ -46,36 +49,57 @@ export class ConstantSignalSystem extends GameSystemWithFilter { // Ok, query, but also save the uid because it could get stale const uid = entity.uid; + const signal = entity.components.ConstantSignal.signal; const signalValueInput = new FormElementInput({ id: "signalValue", label: fillInLinkIntoTranslation(T.dialogs.editSignal.descShortKey, THIRDPARTY_URLS.shapeViewer), placeholder: "", - defaultValue: "", - validator: val => this.parseSignalCode(val), + defaultValue: signal ? signal.getAsCopyableKey() : "", + validator: val => this.parseSignalCode(entity, val), }); + const items = [...Object.values(COLOR_ITEM_SINGLETONS)]; + + if (entity.components.WiredPins) { + items.unshift(BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON); + items.push( + this.root.shapeDefinitionMgr.getShapeItemFromShortKey( + this.root.gameMode.getBlueprintShapeKey() + ) + ); + } else { + // producer which can produce virtually anything + const shapes = ["CuCuCuCu", "RuRuRuRu", "WuWuWuWu", "SuSuSuSu"]; + items.unshift( + ...shapes.reverse().map(key => this.root.shapeDefinitionMgr.getShapeItemFromShortKey(key)) + ); + } + + if (this.root.gameMode.hasHub()) { + items.push( + this.root.shapeDefinitionMgr.getShapeItemFromDefinition( + this.root.hubGoals.currentGoal.definition + ) + ); + } + + if (this.root.hud.parts.pinnedShapes) { + items.push( + ...this.root.hud.parts.pinnedShapes.pinnedShapes.map(key => + this.root.shapeDefinitionMgr.getShapeItemFromShortKey(key) + ) + ); + } + const itemInput = new FormElementItemChooser({ id: "signalItem", label: null, - items: [ - BOOL_FALSE_SINGLETON, - BOOL_TRUE_SINGLETON, - ...Object.values(COLOR_ITEM_SINGLETONS), - this.root.shapeDefinitionMgr.getShapeItemFromDefinition( - this.root.hubGoals.currentGoal.definition - ), - this.root.shapeDefinitionMgr.getShapeItemFromShortKey( - this.root.gameMode.getBlueprintShapeKey() - ), - ...this.root.hud.parts.pinnedShapes.pinnedShapes.map(key => - this.root.shapeDefinitionMgr.getShapeItemFromShortKey(key) - ), - ], + items, }); const dialog = new DialogWithForm({ app: this.root.app, - title: T.dialogs.editSignal.title, + title: T.dialogs.editConstantProducer.title, desc: T.dialogs.editSignal.descItems, formElements: [itemInput, signalValueInput], buttons: ["cancel:bad:escape", "ok:good:enter"], @@ -103,15 +127,19 @@ export class ConstantSignalSystem extends GameSystemWithFilter { } if (itemInput.chosenItem) { - console.log(itemInput.chosenItem); constantComp.signal = itemInput.chosenItem; } else { - constantComp.signal = this.parseSignalCode(signalValueInput.getValue()); + constantComp.signal = this.parseSignalCode(entity, signalValueInput.getValue()); } }; - dialog.buttonSignals.ok.add(closeHandler); - dialog.valueChosen.add(closeHandler); + dialog.buttonSignals.ok.add(() => { + closeHandler(); + }); + dialog.valueChosen.add(() => { + dialog.closeRequested.dispatch(); + closeHandler(); + }); // When cancelled, destroy the entity again if (deleteOnCancel) { @@ -140,10 +168,11 @@ export class ConstantSignalSystem extends GameSystemWithFilter { /** * Tries to parse a signal code + * @param {Entity} entity * @param {string} code * @returns {BaseItem} */ - parseSignalCode(code) { + parseSignalCode(entity, code) { if (!this.root || !this.root.shapeDefinitionMgr) { // Stale reference return null; @@ -155,12 +184,15 @@ export class ConstantSignalSystem extends GameSystemWithFilter { if (enumColors[codeLower]) { return COLOR_ITEM_SINGLETONS[codeLower]; } - if (code === "1" || codeLower === "true") { - return BOOL_TRUE_SINGLETON; - } - if (code === "0" || codeLower === "false") { - return BOOL_FALSE_SINGLETON; + if (entity.components.WiredPins) { + if (code === "1" || codeLower === "true") { + return BOOL_TRUE_SINGLETON; + } + + if (code === "0" || codeLower === "false") { + return BOOL_FALSE_SINGLETON; + } } if (ShapeDefinition.isValidShortKey(code)) { diff --git a/src/js/game/systems/goal_acceptor.js b/src/js/game/systems/goal_acceptor.js new file mode 100644 index 00000000..60d4a984 --- /dev/null +++ b/src/js/game/systems/goal_acceptor.js @@ -0,0 +1,136 @@ +import { globalConfig } from "../../core/config"; +import { DrawParameters } from "../../core/draw_parameters"; +import { clamp, lerp } from "../../core/utils"; +import { Vector } from "../../core/vector"; +import { GoalAcceptorComponent } from "../components/goal_acceptor"; +import { GameSystemWithFilter } from "../game_system_with_filter"; +import { MapChunk } from "../map_chunk"; +import { GameRoot } from "../root"; + +export class GoalAcceptorSystem extends GameSystemWithFilter { + /** @param {GameRoot} root */ + constructor(root) { + super(root, [GoalAcceptorComponent]); + + this.puzzleCompleted = false; + } + + update() { + const now = this.root.time.now(); + + let allAccepted = true; + + for (let i = 0; i < this.allEntities.length; ++i) { + const entity = this.allEntities[i]; + const goalComp = entity.components.GoalAcceptor; + + if (!goalComp.lastDelivery) { + allAccepted = false; + continue; + } + + if (now - goalComp.lastDelivery.time > goalComp.getRequiredSecondsPerItem()) { + goalComp.clearItems(); + } + + if (goalComp.currentDeliveredItems < globalConfig.goalAcceptorItemsRequired) { + allAccepted = false; + } + } + + if ( + !this.puzzleCompleted && + this.root.gameInitialized && + allAccepted && + !this.root.gameMode.getIsEditor() + ) { + this.root.signals.puzzleComplete.dispatch(); + this.puzzleCompleted = true; + } + } + + /** + * + * @param {DrawParameters} parameters + * @param {MapChunk} chunk + * @returns + */ + drawChunk(parameters, chunk) { + const contents = chunk.containedEntitiesByLayer.regular; + for (let i = 0; i < contents.length; ++i) { + const goalComp = contents[i].components.GoalAcceptor; + + if (!goalComp) { + continue; + } + + const staticComp = contents[i].components.StaticMapEntity; + const item = goalComp.item; + + const requiredItems = globalConfig.goalAcceptorItemsRequired; + + const fillPercentage = clamp(goalComp.currentDeliveredItems / requiredItems, 0, 1); + + const center = staticComp.getTileSpaceBounds().getCenter().toWorldSpace(); + if (item) { + const localOffset = new Vector(0, -1.8).rotateFastMultipleOf90(staticComp.rotation); + item.drawItemCenteredClipped( + center.x + localOffset.x, + center.y + localOffset.y, + parameters, + globalConfig.tileSize * 0.65 + ); + } + + const isValid = item && goalComp.currentDeliveredItems >= requiredItems; + + parameters.context.translate(center.x, center.y); + parameters.context.rotate((staticComp.rotation / 180) * Math.PI); + + parameters.context.lineWidth = 1; + parameters.context.fillStyle = "#8de255"; + parameters.context.strokeStyle = "#64666e"; + parameters.context.lineCap = "round"; + + // progress arc + + goalComp.displayPercentage = lerp(goalComp.displayPercentage, fillPercentage, 0.2); + + const startAngle = Math.PI * 0.595; + const maxAngle = Math.PI * 1.82; + parameters.context.beginPath(); + parameters.context.arc( + 0.25, + -1.5, + 11.6, + startAngle, + startAngle + goalComp.displayPercentage * maxAngle, + false + ); + parameters.context.arc( + 0.25, + -1.5, + 15.5, + startAngle + goalComp.displayPercentage * maxAngle, + startAngle, + true + ); + parameters.context.closePath(); + parameters.context.fill(); + parameters.context.stroke(); + parameters.context.lineCap = "butt"; + + // LED indicator + + parameters.context.lineWidth = 1.2; + parameters.context.strokeStyle = "#64666e"; + parameters.context.fillStyle = isValid ? "#8de255" : "#ff666a"; + parameters.context.beginCircle(10, 11.8, 5); + parameters.context.fill(); + parameters.context.stroke(); + + parameters.context.rotate((-staticComp.rotation / 180) * Math.PI); + parameters.context.translate(-center.x, -center.y); + } + } +} diff --git a/src/js/game/systems/item_ejector.js b/src/js/game/systems/item_ejector.js index 1daaad6b..db37455a 100644 --- a/src/js/game/systems/item_ejector.js +++ b/src/js/game/systems/item_ejector.js @@ -239,6 +239,14 @@ export class ItemEjectorSystem extends GameSystemWithFilter { return false; } + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + // + // NOTICE ! THIS CODE IS DUPLICATED IN THE BELT PATH FOR PERFORMANCE REASONS + // + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + const itemProcessorComp = receiver.components.ItemProcessor; if (itemProcessorComp) { // Check for potential filters diff --git a/src/js/game/systems/item_processor.js b/src/js/game/systems/item_processor.js index 9775afde..525c242c 100644 --- a/src/js/game/systems/item_processor.js +++ b/src/js/game/systems/item_processor.js @@ -1,3 +1,4 @@ +import { globalConfig } from "../../core/config"; import { BaseItem } from "../base_item"; import { enumColorMixingResults, enumColors } from "../colors"; import { @@ -31,8 +32,8 @@ const MAX_QUEUED_CHARGES = 2; * Type of a processor implementation * @typedef {{ * entity: Entity, - * items: Array<{ item: BaseItem, sourceSlot: number }>, - * itemsBySlot: Object, + * items: Map, + * inputCount: number, * outItems: Array * }} ProcessorImplementationPayload */ @@ -59,6 +60,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter { [enumItemProcessorTypes.painterQuad]: this.process_PAINTER_QUAD, [enumItemProcessorTypes.hub]: this.process_HUB, [enumItemProcessorTypes.reader]: this.process_READER, + [enumItemProcessorTypes.goal]: this.process_GOAL, }; // Bind all handlers @@ -187,7 +189,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter { // DEFAULT // By default, we can start processing once all inputs are there case null: { - return processorComp.inputSlots.length >= processorComp.inputsPerCharge; + return processorComp.inputCount >= processorComp.inputsPerCharge; } // QUAD PAINTER @@ -195,18 +197,12 @@ export class ItemProcessorSystem extends GameSystemWithFilter { case enumItemProcessorRequirements.painterQuad: { const pinsComp = entity.components.WiredPins; - /** @type {Object.} */ - const itemsBySlot = {}; - for (let i = 0; i < processorComp.inputSlots.length; ++i) { - itemsBySlot[processorComp.inputSlots[i].sourceSlot] = processorComp.inputSlots[i]; - } - // First slot is the shape, so if it's not there we can't do anything - if (!itemsBySlot[0]) { + const shapeItem = /** @type {ShapeItem} */ (processorComp.inputSlots.get(0)); + if (!shapeItem) { return false; } - const shapeItem = /** @type {ShapeItem} */ (itemsBySlot[0].item); const slotStatus = []; // Check which slots are enabled @@ -231,7 +227,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter { // Check if all colors of the enabled slots are there for (let i = 0; i < slotStatus.length; ++i) { - if (slotStatus[i] && !itemsBySlot[1 + i]) { + if (slotStatus[i] && !processorComp.inputSlots.get(1 + i)) { // A slot which is enabled wasn't enabled. Make sure if there is anything on the quadrant, // it is not possible to paint, but if there is nothing we can ignore it for (let j = 0; j < 4; ++j) { @@ -260,13 +256,6 @@ export class ItemProcessorSystem extends GameSystemWithFilter { // First, take items const items = processorComp.inputSlots; - processorComp.inputSlots = []; - - /** @type {Object} */ - const itemsBySlot = {}; - for (let i = 0; i < items.length; ++i) { - itemsBySlot[items[i].sourceSlot] = items[i].item; - } /** @type {Array} */ const outItems = []; @@ -279,8 +268,8 @@ export class ItemProcessorSystem extends GameSystemWithFilter { handler({ entity, items, - itemsBySlot, outItems, + inputCount: processorComp.inputCount, }); // Track produced items @@ -302,6 +291,9 @@ export class ItemProcessorSystem extends GameSystemWithFilter { items: outItems, remainingTime: timeToProcess, }); + + processorComp.inputSlots.clear(); + processorComp.inputCount = 0; } /** @@ -315,12 +307,14 @@ export class ItemProcessorSystem extends GameSystemWithFilter { const availableSlots = payload.entity.components.ItemEjector.slots.length; const processorComp = payload.entity.components.ItemProcessor; - const nextSlot = processorComp.nextOutputSlot++ % availableSlots; - - for (let i = 0; i < payload.items.length; ++i) { + for (let i = 0; i < 2; ++i) { + const item = payload.items.get(i); + if (!item) { + continue; + } payload.outItems.push({ - item: payload.items[i].item, - preferredSlot: (nextSlot + i) % availableSlots, + item, + preferredSlot: processorComp.nextOutputSlot++ % availableSlots, doNotTrack: true, }); } @@ -331,20 +325,25 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_CUTTER(payload) { - const inputItem = /** @type {ShapeItem} */ (payload.items[0].item); + const inputItem = /** @type {ShapeItem} */ (payload.items.get(0)); assert(inputItem instanceof ShapeItem, "Input for cut is not a shape"); const inputDefinition = inputItem.definition; const cutDefinitions = this.root.shapeDefinitionMgr.shapeActionCutHalf(inputDefinition); + const ejectorComp = payload.entity.components.ItemEjector; for (let i = 0; i < cutDefinitions.length; ++i) { const definition = cutDefinitions[i]; - if (!definition.isEntirelyEmpty()) { - payload.outItems.push({ - item: this.root.shapeDefinitionMgr.getShapeItemFromDefinition(definition), - requiredSlot: i, - }); + + if (definition.isEntirelyEmpty()) { + ejectorComp.slots[i].lastItem = null; + continue; } + + payload.outItems.push({ + item: this.root.shapeDefinitionMgr.getShapeItemFromDefinition(definition), + requiredSlot: i, + }); } } @@ -352,20 +351,25 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_CUTTER_QUAD(payload) { - const inputItem = /** @type {ShapeItem} */ (payload.items[0].item); + const inputItem = /** @type {ShapeItem} */ (payload.items.get(0)); assert(inputItem instanceof ShapeItem, "Input for cut is not a shape"); const inputDefinition = inputItem.definition; const cutDefinitions = this.root.shapeDefinitionMgr.shapeActionCutQuad(inputDefinition); + const ejectorComp = payload.entity.components.ItemEjector; for (let i = 0; i < cutDefinitions.length; ++i) { const definition = cutDefinitions[i]; - if (!definition.isEntirelyEmpty()) { - payload.outItems.push({ - item: this.root.shapeDefinitionMgr.getShapeItemFromDefinition(definition), - requiredSlot: i, - }); + + if (definition.isEntirelyEmpty()) { + ejectorComp.slots[i].lastItem = null; + continue; } + + payload.outItems.push({ + item: this.root.shapeDefinitionMgr.getShapeItemFromDefinition(definition), + requiredSlot: i, + }); } } @@ -373,7 +377,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_ROTATER(payload) { - const inputItem = /** @type {ShapeItem} */ (payload.items[0].item); + const inputItem = /** @type {ShapeItem} */ (payload.items.get(0)); assert(inputItem instanceof ShapeItem, "Input for rotation is not a shape"); const inputDefinition = inputItem.definition; @@ -387,7 +391,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_ROTATER_CCW(payload) { - const inputItem = /** @type {ShapeItem} */ (payload.items[0].item); + const inputItem = /** @type {ShapeItem} */ (payload.items.get(0)); assert(inputItem instanceof ShapeItem, "Input for rotation is not a shape"); const inputDefinition = inputItem.definition; @@ -401,7 +405,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_ROTATER_180(payload) { - const inputItem = /** @type {ShapeItem} */ (payload.items[0].item); + const inputItem = /** @type {ShapeItem} */ (payload.items.get(0)); assert(inputItem instanceof ShapeItem, "Input for rotation is not a shape"); const inputDefinition = inputItem.definition; @@ -415,8 +419,8 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_STACKER(payload) { - const lowerItem = /** @type {ShapeItem} */ (payload.itemsBySlot[0]); - const upperItem = /** @type {ShapeItem} */ (payload.itemsBySlot[1]); + const lowerItem = /** @type {ShapeItem} */ (payload.items.get(0)); + const upperItem = /** @type {ShapeItem} */ (payload.items.get(1)); assert(lowerItem instanceof ShapeItem, "Input for lower stack is not a shape"); assert(upperItem instanceof ShapeItem, "Input for upper stack is not a shape"); @@ -442,8 +446,8 @@ export class ItemProcessorSystem extends GameSystemWithFilter { */ process_MIXER(payload) { // Find both colors and combine them - const item1 = /** @type {ColorItem} */ (payload.items[0].item); - const item2 = /** @type {ColorItem} */ (payload.items[1].item); + const item1 = /** @type {ColorItem} */ (payload.items.get(0)); + const item2 = /** @type {ColorItem} */ (payload.items.get(1)); assert(item1 instanceof ColorItem, "Input for color mixer is not a color"); assert(item2 instanceof ColorItem, "Input for color mixer is not a color"); @@ -465,8 +469,8 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_PAINTER(payload) { - const shapeItem = /** @type {ShapeItem} */ (payload.itemsBySlot[0]); - const colorItem = /** @type {ColorItem} */ (payload.itemsBySlot[1]); + const shapeItem = /** @type {ShapeItem} */ (payload.items.get(0)); + const colorItem = /** @type {ColorItem} */ (payload.items.get(1)); const colorizedDefinition = this.root.shapeDefinitionMgr.shapeActionPaintWith( shapeItem.definition, @@ -482,9 +486,9 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_PAINTER_DOUBLE(payload) { - const shapeItem1 = /** @type {ShapeItem} */ (payload.itemsBySlot[0]); - const shapeItem2 = /** @type {ShapeItem} */ (payload.itemsBySlot[1]); - const colorItem = /** @type {ColorItem} */ (payload.itemsBySlot[2]); + const shapeItem1 = /** @type {ShapeItem} */ (payload.items.get(0)); + const shapeItem2 = /** @type {ShapeItem} */ (payload.items.get(1)); + const colorItem = /** @type {ColorItem} */ (payload.items.get(2)); assert(shapeItem1 instanceof ShapeItem, "Input for painter is not a shape"); assert(shapeItem2 instanceof ShapeItem, "Input for painter is not a shape"); @@ -512,14 +516,15 @@ export class ItemProcessorSystem extends GameSystemWithFilter { * @param {ProcessorImplementationPayload} payload */ process_PAINTER_QUAD(payload) { - const shapeItem = /** @type {ShapeItem} */ (payload.itemsBySlot[0]); + const shapeItem = /** @type {ShapeItem} */ (payload.items.get(0)); assert(shapeItem instanceof ShapeItem, "Input for painter is not a shape"); /** @type {Array} */ const colors = [null, null, null, null]; for (let i = 0; i < 4; ++i) { - if (payload.itemsBySlot[i + 1]) { - colors[i] = /** @type {ColorItem} */ (payload.itemsBySlot[i + 1]).color; + const colorItem = /** @type {ColorItem} */ (payload.items.get(i + 1)); + if (colorItem) { + colors[i] = colorItem.color; } } @@ -538,7 +543,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter { */ process_READER(payload) { // Pass through the item - const item = payload.itemsBySlot[0]; + const item = payload.items.get(0); payload.outItems.push({ item, doNotTrack: true, @@ -557,9 +562,41 @@ export class ItemProcessorSystem extends GameSystemWithFilter { const hubComponent = payload.entity.components.Hub; assert(hubComponent, "Hub item processor has no hub component"); - for (let i = 0; i < payload.items.length; ++i) { - const item = /** @type {ShapeItem} */ (payload.items[i].item); + // Hardcoded + for (let i = 0; i < payload.inputCount; ++i) { + const item = /** @type {ShapeItem} */ (payload.items.get(i)); + if (!item) { + continue; + } this.root.hubGoals.handleDefinitionDelivered(item.definition); } } + + /** + * @param {ProcessorImplementationPayload} payload + */ + process_GOAL(payload) { + const goalComp = payload.entity.components.GoalAcceptor; + const item = payload.items.get(0); + const now = this.root.time.now(); + + if (goalComp.item && !item.equals(goalComp.item)) { + goalComp.clearItems(); + } else { + goalComp.currentDeliveredItems = Math.min( + goalComp.currentDeliveredItems + 1, + globalConfig.goalAcceptorItemsRequired + ); + } + + if (this.root.gameMode.getIsEditor()) { + // while playing in editor, assign the item + goalComp.item = item; + } + + goalComp.lastDelivery = { + item, + time: now, + }; + } } diff --git a/src/js/game/systems/item_producer.js b/src/js/game/systems/item_producer.js index 52edf5d1..0a385907 100644 --- a/src/js/game/systems/item_producer.js +++ b/src/js/game/systems/item_producer.js @@ -1,15 +1,26 @@ +/* typehints:start */ +import { GameRoot } from "../root"; +/* typehints:end */ + import { ItemProducerComponent } from "../components/item_producer"; import { GameSystemWithFilter } from "../game_system_with_filter"; export class ItemProducerSystem extends GameSystemWithFilter { + /** @param {GameRoot} root */ constructor(root) { super(root, [ItemProducerComponent]); + this.item = null; } update() { for (let i = 0; i < this.allEntities.length; ++i) { const entity = this.allEntities[i]; + const ejectorComp = entity.components.ItemEjector; const pinsComp = entity.components.WiredPins; + if (!pinsComp) { + continue; + } + const pin = pinsComp.slots[0]; const network = pin.linkedNetwork; @@ -17,8 +28,8 @@ export class ItemProducerSystem extends GameSystemWithFilter { continue; } - const ejectorComp = entity.components.ItemEjector; - ejectorComp.tryEject(0, network.currentValue); + this.item = network.currentValue; + ejectorComp.tryEject(0, this.item); } } } diff --git a/src/js/game/systems/underground_belt.js b/src/js/game/systems/underground_belt.js index 7a7609f8..9b31eec1 100644 --- a/src/js/game/systems/underground_belt.js +++ b/src/js/game/systems/underground_belt.js @@ -224,13 +224,16 @@ export class UndergroundBeltSystem extends GameSystemWithFilter { update() { this.staleAreaWatcher.update(); + const sender = enumUndergroundBeltMode.sender; + const now = this.root.time.now(); + for (let i = 0; i < this.allEntities.length; ++i) { const entity = this.allEntities[i]; const undergroundComp = entity.components.UndergroundBelt; - if (undergroundComp.mode === enumUndergroundBeltMode.sender) { + if (undergroundComp.mode === sender) { this.handleSender(entity); } else { - this.handleReceiver(entity); + this.handleReceiver(entity, now); } } } @@ -327,14 +330,15 @@ export class UndergroundBeltSystem extends GameSystemWithFilter { /** * * @param {Entity} entity + * @param {number} now */ - handleReceiver(entity) { + handleReceiver(entity, now) { const undergroundComp = entity.components.UndergroundBelt; // Try to eject items, we only check the first one because it is sorted by remaining time const nextItemAndDuration = undergroundComp.pendingItems[0]; if (nextItemAndDuration) { - if (this.root.time.now() > nextItemAndDuration[1]) { + if (now > nextItemAndDuration[1]) { const ejectorComp = entity.components.ItemEjector; const nextSlotIndex = ejectorComp.getFirstFreeSlot(); diff --git a/src/js/game/systems/zone.js b/src/js/game/systems/zone.js new file mode 100644 index 00000000..109f5166 --- /dev/null +++ b/src/js/game/systems/zone.js @@ -0,0 +1,105 @@ +/* typehints:start */ +import { DrawParameters } from "../../core/draw_parameters"; +import { MapChunkView } from "../map_chunk_view"; +import { GameRoot } from "../root"; +/* typehints:end */ + +import { globalConfig } from "../../core/config"; +import { STOP_PROPAGATION } from "../../core/signal"; +import { GameSystem } from "../game_system"; +import { THEME } from "../theme"; +import { Entity } from "../entity"; +import { Vector } from "../../core/vector"; + +export class ZoneSystem extends GameSystem { + /** @param {GameRoot} root */ + constructor(root) { + super(root); + this.drawn = false; + this.root.signals.prePlacementCheck.add(this.prePlacementCheck, this); + + this.root.signals.gameFrameStarted.add(() => { + this.drawn = false; + }); + } + + /** + * + * @param {Entity} entity + * @param {Vector | undefined} tile + * @returns + */ + prePlacementCheck(entity, tile = null) { + const staticComp = entity.components.StaticMapEntity; + + if (!staticComp) { + return; + } + + const mode = this.root.gameMode; + + const zones = mode.getBuildableZones(); + if (!zones) { + return; + } + + const transformed = staticComp.getTileSpaceBounds(); + if (tile) { + transformed.x += tile.x; + transformed.y += tile.y; + } + + if (!zones.some(zone => zone.intersectsFully(transformed))) { + return STOP_PROPAGATION; + } + } + + /** + * Draws the zone + * @param {DrawParameters} parameters + * @param {MapChunkView} chunk + */ + drawChunk(parameters, chunk) { + if (this.drawn) { + // oof + return; + } + this.drawn = true; + + const mode = this.root.gameMode; + + const zones = mode.getBuildableZones(); + if (!zones) { + return; + } + + const zone = zones[0].allScaled(globalConfig.tileSize); + const context = parameters.context; + + context.lineWidth = 2; + context.strokeStyle = THEME.map.zone.borderSolid; + context.beginPath(); + context.rect(zone.x - 1, zone.y - 1, zone.w + 2, zone.h + 2); + context.stroke(); + + const outer = zone; + const padding = 40 * globalConfig.tileSize; + context.fillStyle = THEME.map.zone.outerColor; + context.fillRect(outer.x + outer.w, outer.y, padding, outer.h); + context.fillRect(outer.x - padding, outer.y, padding, outer.h); + context.fillRect( + outer.x - padding - globalConfig.tileSize, + outer.y - padding, + 2 * padding + zone.w + 2 * globalConfig.tileSize, + padding + ); + context.fillRect( + outer.x - padding - globalConfig.tileSize, + outer.y + outer.h, + 2 * padding + zone.w + 2 * globalConfig.tileSize, + padding + ); + + context.globalAlpha = 1; + } +} diff --git a/src/js/game/themes/dark.json b/src/js/game/themes/dark.json index 733b7682..fec42e28 100644 --- a/src/js/game/themes/dark.json +++ b/src/js/game/themes/dark.json @@ -47,6 +47,11 @@ "textColor": "#fff", "textColorCapped": "#ef5072", "background": "rgba(40, 50, 60, 0.8)" + }, + + "zone": { + "borderSolid": "rgba(23, 192, 255, 1)", + "outerColor": "rgba(20 , 20, 25, 0.5)" } }, @@ -54,5 +59,10 @@ "outline": "#111418", "outlineWidth": 0.75, "circleBackground": "rgba(20, 30, 40, 0.3)" + }, + + "shapeTooltip": { + "background": "rgba(242, 245, 254, 0.9)", + "outline": "#44464e" } } diff --git a/src/js/game/themes/light.json b/src/js/game/themes/light.json index 0c793c26..d44a15ab 100644 --- a/src/js/game/themes/light.json +++ b/src/js/game/themes/light.json @@ -48,6 +48,11 @@ "textColor": "#fff", "textColorCapped": "#ef5072", "background": "rgba(40, 50, 60, 0.8)" + }, + + "zone": { + "borderSolid": "rgba(23, 192, 255, 1)", + "outerColor": "rgba(240, 240, 255, 0.5)" } }, @@ -55,5 +60,10 @@ "outline": "#55575a", "outlineWidth": 0.75, "circleBackground": "rgba(40, 50, 65, 0.1)" + }, + + "shapeTooltip": { + "background": "#dee1ea", + "outline": "#54565e" } } diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts index d1fb5305..bf870fab 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -20,6 +20,7 @@ declare const G_ALL_UI_IMAGES: Array; declare const G_IS_RELEASE: boolean; declare const G_CHINA_VERSION: boolean; +declare const G_WEGAME_VERSION: boolean; // Polyfills declare interface String { @@ -185,6 +186,7 @@ declare const STOP_PROPAGATION = "stop_propagation"; declare interface TypedSignal> { add(receiver: (...args: T) => /* STOP_PROPAGATION */ string | void, scope?: object); + addToTop(receiver: (...args: T) => /* STOP_PROPAGATION */ string | void, scope?: object); remove(receiver: (...args: T) => /* STOP_PROPAGATION */ string | void); dispatch(...args: T): /* STOP_PROPAGATION */ string | void; diff --git a/src/js/languages.js b/src/js/languages.js index 6899ef09..b36b172f 100644 --- a/src/js/languages.js +++ b/src/js/languages.js @@ -12,7 +12,9 @@ export const LANGUAGES = { "zh-CN": { // simplified chinese name: "简体中文", - data: require("./built-temp/base-zh-CN.json"), + data: G_WEGAME_VERSION + ? require("./built-temp/base-zh-CN-ISBN.json") + : require("./built-temp/base-zh-CN.json"), code: "zh", region: "CN", }, @@ -184,4 +186,12 @@ export const LANGUAGES = { code: "uk", region: "", }, + + "he": { + // hebrew + name: "עברית", + data: require("./built-temp/base-he.json"), + code: "he", + region: "", + }, }; diff --git a/src/js/main.js b/src/js/main.js index 5b9df699..94f3d37a 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -9,6 +9,7 @@ import { initComponentRegistry } from "./game/component_registry"; import { initDrawUtils } from "./core/draw_utils"; import { initItemRegistry } from "./game/item_registry"; import { initMetaBuildingRegistry } from "./game/meta_building_registry"; +import { initGameModeRegistry } from "./game/game_mode_registry"; import { initGameSpeedRegistry } from "./game/game_speed_registry"; const logger = createLogger("main"); @@ -81,6 +82,7 @@ initDrawUtils(); initComponentRegistry(); initItemRegistry(); initMetaBuildingRegistry(); +initGameModeRegistry(); initGameSpeedRegistry(); let app = null; diff --git a/src/js/platform/achievement_provider.js b/src/js/platform/achievement_provider.js index e9d7ca7a..583dbfb2 100644 --- a/src/js/platform/achievement_provider.js +++ b/src/js/platform/achievement_provider.js @@ -427,7 +427,7 @@ export class AchievementCollection { createLevelOptions(level) { return { init: ({ key }) => this.unlock(key, this.root.hubGoals.level), - isValid: currentLevel => currentLevel >= level, + isValid: currentLevel => currentLevel > level, signal: "storyGoalCompleted", }; } diff --git a/src/js/platform/ad_providers/gamedistribution.js b/src/js/platform/ad_providers/gamedistribution.js index 6ff031f0..5a91646f 100644 --- a/src/js/platform/ad_providers/gamedistribution.js +++ b/src/js/platform/ad_providers/gamedistribution.js @@ -95,6 +95,10 @@ export class GamedistributionAdProvider extends AdProviderInterface { document.body.classList.add("externalAdOpen"); + logger.log("Set sound volume to 0"); + this.app.sound.setMusicVolume(0); + this.app.sound.setSoundVolume(0); + return new Promise(resolve => { // So, wait for the remove call but also remove after N seconds this.videoAdResolveFunction = () => { @@ -119,6 +123,11 @@ export class GamedistributionAdProvider extends AdProviderInterface { }) .then(() => { document.body.classList.remove("externalAdOpen"); + + logger.log("Restored sound volume"); + + this.app.sound.setMusicVolume(this.app.settings.getSetting("musicVolume")); + this.app.sound.setSoundVolume(this.app.settings.getSetting("soundVolume")); }); } } diff --git a/src/js/platform/api.js b/src/js/platform/api.js new file mode 100644 index 00000000..d518c98a --- /dev/null +++ b/src/js/platform/api.js @@ -0,0 +1,246 @@ +/* typehints:start */ +import { Application } from "../application"; +/* typehints:end */ +import { createLogger } from "../core/logging"; +import { compressX64 } from "../core/lzstring"; +import { getIPCRenderer } from "../core/utils"; +import { T } from "../translations"; + +const logger = createLogger("puzzle-api"); + +export class ClientAPI { + /** + * + * @param {Application} app + */ + constructor(app) { + this.app = app; + + /** + * The current users session token + * @type {string|null} + */ + this.token = null; + } + + getEndpoint() { + if (G_IS_DEV) { + return "http://localhost:15001"; + } + if (window.location.host === "beta.shapez.io") { + return "https://api-staging.shapez.io"; + } + return "https://api.shapez.io"; + } + + isLoggedIn() { + return Boolean(this.token); + } + + /** + * + * @param {string} endpoint + * @param {object} options + * @param {"GET"|"POST"=} options.method + * @param {any=} options.body + */ + _request(endpoint, options) { + const headers = { + "x-api-key": "d5c54aaa491f200709afff082c153ef2", + "Content-Type": "application/json", + }; + + if (this.token) { + headers["x-token"] = this.token; + } + + return Promise.race([ + fetch(this.getEndpoint() + endpoint, { + cache: "no-cache", + mode: "cors", + headers, + method: options.method || "GET", + body: options.body ? JSON.stringify(options.body) : undefined, + }) + .then(res => { + if (res.status !== 200) { + throw "bad-status: " + res.status + " / " + res.statusText; + } + return res; + }) + .then(res => res.json()), + new Promise((resolve, reject) => setTimeout(() => reject("timeout"), 15000)), + ]) + .then(data => { + if (data && data.error) { + logger.warn("Got error from api:", data); + throw T.backendErrors[data.error] || data.error; + } + return data; + }) + .catch(err => { + logger.warn("Failure:", endpoint, ":", err); + throw err; + }); + } + + tryLogin() { + return this.apiTryLogin() + .then(({ token }) => { + this.token = token; + return true; + }) + .catch(err => { + logger.warn("Failed to login:", err); + return false; + }); + } + + /** + * @returns {Promise<{token: string}>} + */ + apiTryLogin() { + if (!G_IS_STANDALONE) { + let token = window.localStorage.getItem("dev_api_auth_token"); + if (!token) { + token = window.prompt( + "Please enter the auth token for the puzzle DLC (If you have none, you can't login):" + ); + } + if (token) { + window.localStorage.setItem("dev_api_auth_token", token); + } + return Promise.resolve({ token }); + } + + const renderer = getIPCRenderer(); + + return renderer.invoke("steam:get-ticket").then( + ticket => { + logger.log("Got auth ticket:", ticket); + return this._request("/v1/public/login", { + method: "POST", + body: { + token: ticket, + }, + }); + }, + err => { + logger.error("Failed to get auth ticket from steam: ", err); + throw err; + } + ); + } + + /** + * @param {"new"|"top-rated"|"mine"} category + * @returns {Promise} + */ + apiListPuzzles(category) { + if (!this.isLoggedIn()) { + return Promise.reject("not-logged-in"); + } + return this._request("/v1/puzzles/list/" + category, {}); + } + + /** + * @param {{ searchTerm: string; difficulty: string; duration: string }} searchOptions + * @returns {Promise} + */ + apiSearchPuzzles(searchOptions) { + if (!this.isLoggedIn()) { + return Promise.reject("not-logged-in"); + } + return this._request("/v1/puzzles/search", { + method: "POST", + body: searchOptions, + }); + } + + /** + * @param {number} puzzleId + * @returns {Promise} + */ + apiDownloadPuzzle(puzzleId) { + if (!this.isLoggedIn()) { + return Promise.reject("not-logged-in"); + } + return this._request("/v1/puzzles/download/" + puzzleId, {}); + } + + /** + * @param {number} puzzleId + * @returns {Promise} + */ + apiDeletePuzzle(puzzleId) { + if (!this.isLoggedIn()) { + return Promise.reject("not-logged-in"); + } + return this._request("/v1/puzzles/delete/" + puzzleId, { + method: "POST", + body: {}, + }); + } + + /** + * @param {string} shortKey + * @returns {Promise} + */ + apiDownloadPuzzleByKey(shortKey) { + if (!this.isLoggedIn()) { + return Promise.reject("not-logged-in"); + } + return this._request("/v1/puzzles/download/" + shortKey, {}); + } + + /** + * @param {number} puzzleId + * @returns {Promise} + */ + apiReportPuzzle(puzzleId, reason) { + if (!this.isLoggedIn()) { + return Promise.reject("not-logged-in"); + } + return this._request("/v1/puzzles/report/" + puzzleId, { + method: "POST", + body: { reason }, + }); + } + + /** + * @param {number} puzzleId + * @param {object} payload + * @param {number} payload.time + * @param {boolean} payload.liked + * @returns {Promise<{ success: true }>} + */ + apiCompletePuzzle(puzzleId, payload) { + if (!this.isLoggedIn()) { + return Promise.reject("not-logged-in"); + } + return this._request("/v1/puzzles/complete/" + puzzleId, { + method: "POST", + body: payload, + }); + } + + /** + * @param {object} payload + * @param {string} payload.title + * @param {string} payload.shortKey + * @param {import("../savegame/savegame_typedefs").PuzzleGameData} payload.data + * @returns {Promise<{ success: true }>} + */ + apiSubmitPuzzle(payload) { + if (!this.isLoggedIn()) { + return Promise.reject("not-logged-in"); + } + return this._request("/v1/puzzles/submit", { + method: "POST", + body: { + ...payload, + data: compressX64(JSON.stringify(payload.data)), + }, + }); + } +} diff --git a/src/js/platform/browser/game_analytics.js b/src/js/platform/browser/game_analytics.js index a3947be6..9411b258 100644 --- a/src/js/platform/browser/game_analytics.js +++ b/src/js/platform/browser/game_analytics.js @@ -3,6 +3,7 @@ import { createLogger } from "../../core/logging"; import { queryParamOptions } from "../../core/query_parameters"; import { BeltComponent } from "../../game/components/belt"; import { StaticMapEntityComponent } from "../../game/components/static_map_entity"; +import { RegularGameMode } from "../../game/modes/regular"; import { GameRoot } from "../../game/root"; import { InGameState } from "../../states/ingame"; import { GameAnalyticsInterface } from "../game_analytics"; @@ -52,6 +53,10 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { initialize() { this.syncKey = null; + if (G_WEGAME_VERSION) { + return; + } + setInterval(() => this.sendTimePoints(), 60 * 1000); // Retrieve sync key from player @@ -90,6 +95,15 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { ); } + /** + * Makes sure a DLC is activated on steam + * @param {string} dlc + */ + activateDlc(dlc) { + logger.log("Activating dlc:", dlc); + return this.sendToApi("/v1/activate-dlc/" + dlc, {}); + } + /** * Sends a request to the api * @param {string} endpoint Endpoint without base url @@ -97,6 +111,10 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { * @returns {Promise} */ sendToApi(endpoint, data) { + if (G_WEGAME_VERSION) { + return Promise.resolve(); + } + return new Promise((resolve, reject) => { const timeout = setTimeout(() => reject("Request to " + endpoint + " timed out"), 20000); @@ -135,6 +153,10 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { * @param {string} value */ sendGameEvent(category, value) { + if (G_WEGAME_VERSION) { + return; + } + if (!this.syncKey) { logger.warn("Can not send event due to missing sync key"); return; @@ -163,6 +185,10 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { return; } + if (!(root.gameMode instanceof RegularGameMode)) { + return; + } + logger.log("Sending event", category, value); this.sendToApi("/v1/game-event", { diff --git a/src/js/platform/browser/wrapper.js b/src/js/platform/browser/wrapper.js index 3f4930d6..3610b533 100644 --- a/src/js/platform/browser/wrapper.js +++ b/src/js/platform/browser/wrapper.js @@ -135,15 +135,7 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface { openExternalLink(url, force = false) { logger.log("Opening external:", url); - if (force || this.embedProvider.externalLinks) { - window.open(url); - } else { - // Do nothing - alert( - "This platform does not allow opening external links. You can play on https://shapez.io directly to open them.\n\nClicked Link: " + - url - ); - } + window.open(url); } performRestart() { diff --git a/src/js/platform/electron/steam_achievement_provider.js b/src/js/platform/electron/steam_achievement_provider.js index f99205e6..c0ef552c 100644 --- a/src/js/platform/electron/steam_achievement_provider.js +++ b/src/js/platform/electron/steam_achievement_provider.js @@ -105,6 +105,10 @@ export class SteamAchievementProvider extends AchievementProviderInterface { return Promise.resolve(); } + if (G_WEGAME_VERSION) { + return Promise.resolve(); + } + this.ipc = getIPCRenderer(); return this.ipc.invoke("steam:is-initialized").then(initialized => { @@ -125,6 +129,10 @@ export class SteamAchievementProvider extends AchievementProviderInterface { activate(key) { let promise; + if (G_WEGAME_VERSION) { + return Promise.resolve(); + } + if (!this.initialized) { promise = Promise.resolve(); } else { diff --git a/src/js/platform/electron/storage.js b/src/js/platform/electron/storage.js index bf4ed9ac..41ed1746 100644 --- a/src/js/platform/electron/storage.js +++ b/src/js/platform/electron/storage.js @@ -7,6 +7,24 @@ const logger = createLogger("electron-storage"); export class StorageImplElectron extends StorageInterface { constructor(app) { super(app); + + /** @type {Object.} */ + this.jobs = {}; + this.jobId = 0; + + getIPCRenderer().on("fs-response", (event, arg) => { + const id = arg.id; + if (!this.jobs[id]) { + logger.warn("Got unhandled FS response, job not known:", id); + return; + } + const { resolve, reject } = this.jobs[id]; + if (arg.result.success) { + resolve(arg.result.data); + } else { + reject(arg.result.error); + } + }); } initialize() { @@ -15,53 +33,43 @@ export class StorageImplElectron extends StorageInterface { writeFileAsync(filename, contents) { return new Promise((resolve, reject) => { - getIPCRenderer() - .invoke("fs-job", { - type: "write", - filename, - contents, - }) - .then(result => { - if (result.success) { - resolve(result.data); - } else { - reject(result.error); - } - }); + // ipcMain + const jobId = ++this.jobId; + this.jobs[jobId] = { resolve, reject }; + + getIPCRenderer().send("fs-job", { + type: "write", + filename, + contents, + id: jobId, + }); }); } readFileAsync(filename) { return new Promise((resolve, reject) => { - getIPCRenderer() - .invoke("fs-job", { - type: "read", - filename, - }) - .then(result => { - if (result.success) { - resolve(result.data); - } else { - reject(result.error); - } - }); + // ipcMain + const jobId = ++this.jobId; + this.jobs[jobId] = { resolve, reject }; + + getIPCRenderer().send("fs-job", { + type: "read", + filename, + id: jobId, + }); }); } deleteFileAsync(filename) { return new Promise((resolve, reject) => { - getIPCRenderer() - .invoke("fs-job", { - type: "delete", - filename, - }) - .then(result => { - if (result.success) { - resolve(result.data); - } else { - reject(result.error); - } - }); + // ipcMain + const jobId = ++this.jobId; + this.jobs[jobId] = { resolve, reject }; + getIPCRenderer().send("fs-job", { + type: "delete", + filename, + id: jobId, + }); }); } } diff --git a/src/js/platform/electron/wrapper.js b/src/js/platform/electron/wrapper.js index 501b7258..c1764f68 100644 --- a/src/js/platform/electron/wrapper.js +++ b/src/js/platform/electron/wrapper.js @@ -10,6 +10,10 @@ const logger = createLogger("electron-wrapper"); export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { initialize() { + this.dlcs = { + puzzle: false, + }; + this.steamOverlayCanvasFix = document.createElement("canvas"); this.steamOverlayCanvasFix.width = 1; this.steamOverlayCanvasFix.height = 1; @@ -23,9 +27,9 @@ export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { this.app.storage = new StorageImplElectron(this); this.app.achievementProvider = new SteamAchievementProvider(this.app); - return this.initializeAchievementProvider().then(() => - PlatformWrapperInterface.prototype.initialize.call(this) - ); + return this.initializeAchievementProvider() + .then(() => this.initializeDlcStatus()) + .then(() => PlatformWrapperInterface.prototype.initialize.call(this)); } steamOverlayFixRedrawCanvas() { @@ -66,6 +70,37 @@ export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { }); } + initializeDlcStatus() { + const renderer = getIPCRenderer(); + + if (G_WEGAME_VERSION) { + return Promise.resolve(); + } + + logger.log("Checking DLC ownership ..."); + // @todo: Don't hardcode the app id + return renderer.invoke("steam:check-app-ownership", 1625400).then( + res => { + logger.log("Got DLC ownership:", res); + this.dlcs.puzzle = Boolean(res); + + if (this.dlcs.puzzle && !G_IS_DEV) { + this.app.gameAnalytics.activateDlc("puzzle").then( + () => { + logger.log("Puzzle DLC successfully activated"); + }, + error => { + logger.error("Failed to activate puzzle DLC:", error); + } + ); + } + }, + err => { + logger.error("Failed to get DLC ownership:", err); + } + ); + } + getSupportsFullscreen() { return true; } diff --git a/src/js/platform/game_analytics.js b/src/js/platform/game_analytics.js index 765b2d67..00286fc2 100644 --- a/src/js/platform/game_analytics.js +++ b/src/js/platform/game_analytics.js @@ -39,4 +39,13 @@ export class GameAnalyticsInterface { * @param {number} level */ handleUpgradeUnlocked(id, level) {} + + /** + * Activates a DLC + * @param {string} dlc + */ + activateDlc(dlc) { + abstract; + return Promise.resolve(); + } } diff --git a/src/js/platform/sound.js b/src/js/platform/sound.js index 9d5a8461..d43c76c2 100644 --- a/src/js/platform/sound.js +++ b/src/js/platform/sound.js @@ -35,6 +35,10 @@ export const MUSIC = { menu: "menu", }; +if (G_IS_STANDALONE || G_IS_DEV) { + MUSIC.puzzle = "puzzle-full"; +} + export class SoundInstanceInterface { constructor(key, url) { this.key = key; diff --git a/src/js/profile/application_settings.js b/src/js/profile/application_settings.js index 68abf5bb..22074eae 100644 --- a/src/js/profile/application_settings.js +++ b/src/js/profile/application_settings.js @@ -257,6 +257,7 @@ export const allApplicationSettings = [ }), new BoolSetting("enableMousePan", enumCategories.advanced, (app, value) => {}), + new BoolSetting("shapeTooltipAlwaysOn", enumCategories.advanced, (app, value) => {}), new BoolSetting("alwaysMultiplace", enumCategories.advanced, (app, value) => {}), new BoolSetting("zoomToCursor", enumCategories.advanced, (app, value) => {}), new BoolSetting("clearCursorOnDeleteWhilePlacing", enumCategories.advanced, (app, value) => {}), @@ -272,7 +273,7 @@ export const allApplicationSettings = [ new EnumSetting("refreshRate", { options: refreshRateOptions, valueGetter: rate => rate, - textGetter: rate => rate + " Hz", + textGetter: rate => T.settings.tickrateHz.replace("", rate), category: enumCategories.performance, restartRequired: false, changeCb: (app, id) => {}, @@ -307,6 +308,7 @@ class SettingsStorage { this.autosaveInterval = "two_minutes"; this.alwaysMultiplace = false; + this.shapeTooltipAlwaysOn = false; this.offerHints = true; this.enableTunnelSmartplace = true; this.vignette = true; @@ -536,7 +538,7 @@ export class ApplicationSettings extends ReadWriteProxy { } getCurrentVersion() { - return 30; + return 31; } /** @param {{settings: SettingsStorage, version: number}} data */ @@ -683,6 +685,11 @@ export class ApplicationSettings extends ReadWriteProxy { data.version = 30; } + if (data.version < 31) { + data.settings.shapeTooltipAlwaysOn = false; + data.version = 31; + } + return ExplainedResult.good(); } } diff --git a/src/js/savegame/puzzle_serializer.js b/src/js/savegame/puzzle_serializer.js new file mode 100644 index 00000000..c502142b --- /dev/null +++ b/src/js/savegame/puzzle_serializer.js @@ -0,0 +1,209 @@ +/* typehints:start */ +import { GameRoot } from "../game/root"; +import { PuzzleGameMode } from "../game/modes/puzzle"; +/* typehints:end */ +import { StaticMapEntityComponent } from "../game/components/static_map_entity"; +import { ShapeItem } from "../game/items/shape_item"; +import { Vector } from "../core/vector"; +import { MetaConstantProducerBuilding } from "../game/buildings/constant_producer"; +import { defaultBuildingVariant, MetaBuilding } from "../game/meta_building"; +import { gMetaBuildingRegistry } from "../core/global_registries"; +import { MetaGoalAcceptorBuilding } from "../game/buildings/goal_acceptor"; +import { createLogger } from "../core/logging"; +import { BaseItem } from "../game/base_item"; +import trim from "trim"; +import { enumColors } from "../game/colors"; +import { COLOR_ITEM_SINGLETONS } from "../game/items/color_item"; +import { ShapeDefinition } from "../game/shape_definition"; +import { MetaBlockBuilding } from "../game/buildings/block"; + +const logger = createLogger("puzzle-serializer"); + +export class PuzzleSerializer { + /** + * Serializes the game root into a dump + * @param {GameRoot} root + * @returns {import("./savegame_typedefs").PuzzleGameData} + */ + generateDumpFromGameRoot(root) { + console.log("serializing", root); + + /** + * @type {import("./savegame_typedefs").PuzzleGameData["buildings"]} + */ + let buildings = []; + for (const entity of root.entityMgr.getAllWithComponent(StaticMapEntityComponent)) { + const staticComp = entity.components.StaticMapEntity; + const signalComp = entity.components.ConstantSignal; + + if (signalComp) { + assert(["shape", "color"].includes(signalComp.signal.getItemType()), "not a shape signal"); + buildings.push({ + type: "emitter", + item: signalComp.signal.getAsCopyableKey(), + pos: { + x: staticComp.origin.x, + y: staticComp.origin.y, + r: staticComp.rotation, + }, + }); + continue; + } + + const goalComp = entity.components.GoalAcceptor; + if (goalComp) { + assert(goalComp.item, "goals is missing item"); + assert(goalComp.item.getItemType() === "shape", "goal is not an item"); + buildings.push({ + type: "goal", + item: goalComp.item.getAsCopyableKey(), + pos: { + x: staticComp.origin.x, + y: staticComp.origin.y, + r: staticComp.rotation, + }, + }); + continue; + } + + if (staticComp.getMetaBuilding().id === gMetaBuildingRegistry.findByClass(MetaBlockBuilding).id) { + buildings.push({ + type: "block", + pos: { + x: staticComp.origin.x, + y: staticComp.origin.y, + r: staticComp.rotation, + }, + }); + } + } + + const mode = /** @type {PuzzleGameMode} */ (root.gameMode); + + const handles = root.hud.parts.buildingsToolbar.buildingHandles; + const ids = gMetaBuildingRegistry.getAllIds(); + + /** @type {Array} */ + let excludedBuildings = []; + for (let i = 0; i < ids.length; ++i) { + const handle = handles[ids[i]]; + if (handle && handle.puzzleLocked) { + // @ts-ignore + excludedBuildings.push(handle.metaBuilding.getId()); + } + } + + return { + version: 1, + buildings, + bounds: { + w: mode.zoneWidth, + h: mode.zoneHeight, + }, + //read from the toolbar when making a puzzle + excludedBuildings, + }; + } + + /** + * Tries to parse a signal code + * @param {GameRoot} root + * @param {string} code + * @returns {BaseItem} + */ + parseItemCode(root, code) { + if (!root || !root.shapeDefinitionMgr) { + // Stale reference + return null; + } + + code = trim(code); + const codeLower = code.toLowerCase(); + + if (enumColors[codeLower]) { + return COLOR_ITEM_SINGLETONS[codeLower]; + } + + if (ShapeDefinition.isValidShortKey(code)) { + return root.shapeDefinitionMgr.getShapeItemFromShortKey(code); + } + + return null; + } + /** + * @param {GameRoot} root + * @param {import("./savegame_typedefs").PuzzleGameData} puzzle + */ + deserializePuzzle(root, puzzle) { + if (puzzle.version !== 1) { + return "invalid-version"; + } + + for (const building of puzzle.buildings) { + switch (building.type) { + case "emitter": { + const item = this.parseItemCode(root, building.item); + if (!item) { + return "bad-item:" + building.item; + } + + const entity = root.logic.tryPlaceBuilding({ + origin: new Vector(building.pos.x, building.pos.y), + building: gMetaBuildingRegistry.findByClass(MetaConstantProducerBuilding), + originalRotation: building.pos.r, + rotation: building.pos.r, + rotationVariant: 0, + variant: defaultBuildingVariant, + }); + if (!entity) { + logger.warn("Failed to place emitter:", building); + return "failed-to-place-emitter"; + } + + entity.components.ConstantSignal.signal = item; + break; + } + case "goal": { + const item = this.parseItemCode(root, building.item); + if (!item) { + return "bad-item:" + building.item; + } + const entity = root.logic.tryPlaceBuilding({ + origin: new Vector(building.pos.x, building.pos.y), + building: gMetaBuildingRegistry.findByClass(MetaGoalAcceptorBuilding), + originalRotation: building.pos.r, + rotation: building.pos.r, + rotationVariant: 0, + variant: defaultBuildingVariant, + }); + if (!entity) { + logger.warn("Failed to place goal:", building); + return "failed-to-place-goal"; + } + + entity.components.GoalAcceptor.item = item; + break; + } + case "block": { + const entity = root.logic.tryPlaceBuilding({ + origin: new Vector(building.pos.x, building.pos.y), + building: gMetaBuildingRegistry.findByClass(MetaBlockBuilding), + originalRotation: building.pos.r, + rotation: building.pos.r, + rotationVariant: 0, + variant: defaultBuildingVariant, + }); + if (!entity) { + logger.warn("Failed to place block:", building); + return "failed-to-place-block"; + } + break; + } + default: { + // @ts-ignore + return "invalid-building-type: " + building.type; + } + } + } + } +} diff --git a/src/js/savegame/savegame.js b/src/js/savegame/savegame.js index e56ae1dc..36ed884f 100644 --- a/src/js/savegame/savegame.js +++ b/src/js/savegame/savegame.js @@ -13,6 +13,7 @@ import { SavegameInterface_V1005 } from "./schemas/1005"; import { SavegameInterface_V1006 } from "./schemas/1006"; import { SavegameInterface_V1007 } from "./schemas/1007"; import { SavegameInterface_V1008 } from "./schemas/1008"; +import { SavegameInterface_V1009 } from "./schemas/1009"; const logger = createLogger("savegame"); @@ -53,7 +54,7 @@ export class Savegame extends ReadWriteProxy { * @returns {number} */ static getCurrentVersion() { - return 1008; + return 1009; } /** @@ -63,6 +64,24 @@ export class Savegame extends ReadWriteProxy { return savegameInterfaces[Savegame.getCurrentVersion()]; } + /** + * + * @param {Application} app + * @returns + */ + static createPuzzleSavegame(app) { + return new Savegame(app, { + internalId: "puzzle", + metaDataRef: { + internalId: "puzzle", + lastUpdate: 0, + version: 0, + level: 0, + name: "puzzle", + }, + }); + } + /** * @returns {number} */ @@ -136,6 +155,11 @@ export class Savegame extends ReadWriteProxy { data.version = 1008; } + if (data.version === 1008) { + SavegameInterface_V1009.migrate1008to1009(data); + data.version = 1009; + } + return ExplainedResult.good(); } diff --git a/src/js/savegame/savegame_compressor.js b/src/js/savegame/savegame_compressor.js index b0b92aa8..d8797bad 100644 --- a/src/js/savegame/savegame_compressor.js +++ b/src/js/savegame/savegame_compressor.js @@ -13,15 +13,20 @@ function compressInt(i) { // Zero value breaks i += 1; - if (compressionCache[i]) { - return compressionCache[i]; + // save `i` as the cache key + // to avoid it being modified by the + // rest of the function. + const cache_key = i; + + if (compressionCache[cache_key]) { + return compressionCache[cache_key]; } let result = ""; do { result += charmap[i % charmap.length]; i = Math.floor(i / charmap.length); } while (i > 0); - return (compressionCache[i] = result); + return (compressionCache[cache_key] = result); } /** diff --git a/src/js/savegame/savegame_interface_registry.js b/src/js/savegame/savegame_interface_registry.js index 395040b3..b4dc4233 100644 --- a/src/js/savegame/savegame_interface_registry.js +++ b/src/js/savegame/savegame_interface_registry.js @@ -9,6 +9,7 @@ import { SavegameInterface_V1005 } from "./schemas/1005"; import { SavegameInterface_V1006 } from "./schemas/1006"; import { SavegameInterface_V1007 } from "./schemas/1007"; import { SavegameInterface_V1008 } from "./schemas/1008"; +import { SavegameInterface_V1009 } from "./schemas/1009"; /** @type {Object.} */ export const savegameInterfaces = { @@ -21,6 +22,7 @@ export const savegameInterfaces = { 1006: SavegameInterface_V1006, 1007: SavegameInterface_V1007, 1008: SavegameInterface_V1008, + 1009: SavegameInterface_V1009, }; const logger = createLogger("savegame_interface_registry"); diff --git a/src/js/savegame/savegame_serializer.js b/src/js/savegame/savegame_serializer.js index c1247225..3230cdd5 100644 --- a/src/js/savegame/savegame_serializer.js +++ b/src/js/savegame/savegame_serializer.js @@ -2,6 +2,8 @@ import { ExplainedResult } from "../core/explained_result"; import { createLogger } from "../core/logging"; import { gComponentRegistry } from "../core/global_registries"; import { SerializerInternal } from "./serializer_internal"; +import { HUDPinnedShapes } from "../game/hud/parts/pinned_shapes"; +import { HUDWaypoints } from "../game/hud/parts/waypoints"; /** * @typedef {import("../game/component").Component} Component @@ -33,12 +35,13 @@ export class SavegameSerializer { camera: root.camera.serialize(), time: root.time.serialize(), map: root.map.serialize(), + gameMode: root.gameMode.serialize(), entityMgr: root.entityMgr.serialize(), hubGoals: root.hubGoals.serialize(), - pinnedShapes: root.hud.parts.pinnedShapes.serialize(), - waypoints: root.hud.parts.waypoints.serialize(), entities: this.internal.serializeEntityArray(root.entityMgr.entities), beltPaths: root.systemMgr.systems.belt.serializePaths(), + pinnedShapes: root.hud.parts.pinnedShapes ? root.hud.parts.pinnedShapes.serialize() : null, + waypoints: root.hud.parts.waypoints ? root.hud.parts.waypoints.serialize() : null, }; if (G_IS_DEV) { @@ -130,12 +133,19 @@ export class SavegameSerializer { errorReason = errorReason || root.time.deserialize(savegame.time); errorReason = errorReason || root.camera.deserialize(savegame.camera); errorReason = errorReason || root.map.deserialize(savegame.map); + errorReason = errorReason || root.gameMode.deserialize(savegame.gameMode); errorReason = errorReason || root.hubGoals.deserialize(savegame.hubGoals, root); - errorReason = errorReason || root.hud.parts.pinnedShapes.deserialize(savegame.pinnedShapes); - errorReason = errorReason || root.hud.parts.waypoints.deserialize(savegame.waypoints); errorReason = errorReason || this.internal.deserializeEntityArray(root, savegame.entities); errorReason = errorReason || root.systemMgr.systems.belt.deserializePaths(savegame.beltPaths); + if (root.hud.parts.pinnedShapes) { + errorReason = errorReason || root.hud.parts.pinnedShapes.deserialize(savegame.pinnedShapes); + } + + if (root.hud.parts.waypoints) { + errorReason = errorReason || root.hud.parts.waypoints.deserialize(savegame.waypoints); + } + // Check for errors if (errorReason) { return ExplainedResult.bad(errorReason); diff --git a/src/js/savegame/savegame_typedefs.js b/src/js/savegame/savegame_typedefs.js index fb872113..c5e0e5c5 100644 --- a/src/js/savegame/savegame_typedefs.js +++ b/src/js/savegame/savegame_typedefs.js @@ -12,6 +12,7 @@ * time: any, * entityMgr: any, * map: any, + * gameMode: object, * hubGoals: any, * pinnedShapes: any, * waypoints: any, @@ -40,4 +41,61 @@ * }} SavegamesData */ +import { MetaBuilding } from "../game/meta_building"; + +// Notice: Update backend too +/** + * @typedef {{ + * id: number; + * shortKey: string; + * likes: number; + * downloads: number; + * completions: number; + * difficulty: number | null; + * averageTime: number | null; + * title: string; + * author: string; + * completed: boolean; + * }} PuzzleMetadata + */ + +/** + * @typedef {{ + * type: "emitter"; + * item: string; + * pos: { x: number; y: number; r: number } + * }} PuzzleGameBuildingConstantProducer + */ + +/** + * @typedef {{ + * type: "goal"; + * item: string; + * pos: { x: number; y: number; r: number } + * }} PuzzleGameBuildingGoal + */ + +/** + * @typedef {{ + * type: "block"; + * pos: { x: number; y: number; r: number } + * }} PuzzleGameBuildingBlock + */ + +/** + * @typedef {{ + * version: number; + * bounds: { w: number; h: number; }, + * buildings: (PuzzleGameBuildingGoal | PuzzleGameBuildingConstantProducer | PuzzleGameBuildingBlock)[], + * excludedBuildings: Array, + * }} PuzzleGameData + */ + +/** + * @typedef {{ + * meta: PuzzleMetadata, + * game: PuzzleGameData + * }} PuzzleFullData + */ + export default {}; diff --git a/src/js/savegame/schemas/1009.js b/src/js/savegame/schemas/1009.js new file mode 100644 index 00000000..e6e1abc6 --- /dev/null +++ b/src/js/savegame/schemas/1009.js @@ -0,0 +1,34 @@ +import { createLogger } from "../../core/logging.js"; +import { RegularGameMode } from "../../game/modes/regular.js"; +import { SavegameInterface_V1008 } from "./1008.js"; + +const schema = require("./1009.json"); +const logger = createLogger("savegame_interface/1009"); + +export class SavegameInterface_V1009 extends SavegameInterface_V1008 { + getVersion() { + return 1009; + } + + getSchemaUncached() { + return schema; + } + + /** + * @param {import("../savegame_typedefs.js").SavegameData} data + */ + static migrate1008to1009(data) { + logger.log("Migrating 1008 to 1009"); + const dump = data.dump; + if (!dump) { + return true; + } + + dump.gameMode = { + mode: { + id: RegularGameMode.getId(), + data: {}, + }, + }; + } +} diff --git a/src/js/savegame/schemas/1009.json b/src/js/savegame/schemas/1009.json new file mode 100644 index 00000000..6682f615 --- /dev/null +++ b/src/js/savegame/schemas/1009.json @@ -0,0 +1,5 @@ +{ + "type": "object", + "required": [], + "additionalProperties": true +} diff --git a/src/js/savegame/serialization.js b/src/js/savegame/serialization.js index 801b26ab..78642ceb 100644 --- a/src/js/savegame/serialization.js +++ b/src/js/savegame/serialization.js @@ -275,7 +275,7 @@ export function deserializeSchema(obj, schema, data, baseclassErrorResult = null return baseclassErrorResult; } - if (!data) { + if (data === null || typeof data === "undefined") { logger.error("Got 'NULL' data for", obj, "and schema", schema, "!"); return "Got null data"; } diff --git a/src/js/states/about.js b/src/js/states/about.js index b8f465b7..4380b02c 100644 --- a/src/js/states/about.js +++ b/src/js/states/about.js @@ -2,6 +2,7 @@ import { TextualGameState } from "../core/textual_game_state"; import { T } from "../translations"; import { THIRDPARTY_URLS } from "../core/config"; import { cachebust } from "../core/cachebust"; +import { getLogoSprite } from "../core/background_resources_loader"; export class AboutState extends TextualGameState { constructor() { @@ -15,9 +16,7 @@ export class AboutState extends TextualGameState { getMainContentHTML() { return `
- shapez.io Logo + shapez.io Logo
${T.about.body diff --git a/src/js/states/ingame.js b/src/js/states/ingame.js index 316c536c..0dd6c72a 100644 --- a/src/js/states/ingame.js +++ b/src/js/states/ingame.js @@ -8,6 +8,7 @@ import { KeyActionMapper } from "../game/key_action_mapper"; import { Savegame } from "../savegame/savegame"; import { GameCore } from "../game/core"; import { MUSIC } from "../platform/sound"; +import { enumGameModeIds } from "../game/game_mode"; const logger = createLogger("state/ingame"); @@ -39,8 +40,14 @@ export class GameCreationPayload { /** @type {boolean|undefined} */ this.fastEnter; + /** @type {string} */ + this.gameModeId; + /** @type {Savegame} */ this.savegame; + + /** @type {object|undefined} */ + this.gameModeParameters; } } @@ -97,6 +104,9 @@ export class InGameState extends GameState { } getThemeMusic() { + if (this.creationPayload.gameModeId && this.creationPayload.gameModeId.includes("puzzle")) { + return MUSIC.puzzle; + } return MUSIC.theme; } @@ -147,7 +157,11 @@ export class InGameState extends GameState { * Goes back to the menu state */ goBackToMenu() { - this.saveThenGoToState("MainMenuState"); + if ([enumGameModeIds.puzzleEdit, enumGameModeIds.puzzlePlay].includes(this.gameModeId)) { + this.saveThenGoToState("PuzzleMenuState"); + } else { + this.saveThenGoToState("MainMenuState"); + } } /** @@ -220,7 +234,7 @@ export class InGameState extends GameState { logger.log("Creating new game core"); this.core = new GameCore(this.app); - this.core.initializeRoot(this, this.savegame); + this.core.initializeRoot(this, this.savegame, this.gameModeId); if (this.savegame.hasGameDump()) { this.stage4bResumeGame(); @@ -354,6 +368,7 @@ export class InGameState extends GameState { this.creationPayload = payload; this.savegame = payload.savegame; + this.gameModeId = payload.gameModeId; this.loadingOverlay = new GameLoadingOverlay(this.app, this.getDivElement()); this.loadingOverlay.showBasic(); @@ -361,7 +376,13 @@ export class InGameState extends GameState { // Remove unneded default element document.body.querySelector(".modalDialogParent").remove(); - this.asyncChannel.watch(waitNextFrame()).then(() => this.stage3CreateCore()); + this.asyncChannel + .watch(waitNextFrame()) + .then(() => this.stage3CreateCore()) + .catch(ex => { + logger.error(ex); + throw ex; + }); } /** @@ -433,6 +454,11 @@ export class InGameState extends GameState { logger.warn("Skipping double save and returning same promise"); return this.currentSavePromise; } + + if (!this.core.root.gameMode.getIsSaveable()) { + return Promise.resolve(); + } + logger.log("Starting to save game ..."); this.savegame.updateData(this.core.root); diff --git a/src/js/states/login.js b/src/js/states/login.js new file mode 100644 index 00000000..64f599e4 --- /dev/null +++ b/src/js/states/login.js @@ -0,0 +1,102 @@ +import { GameState } from "../core/game_state"; +import { getRandomHint } from "../game/hints"; +import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs"; +import { T } from "../translations"; + +export class LoginState extends GameState { + constructor() { + super("LoginState"); + } + + getInnerHTML() { + return ` +
+
+ ${T.global.loggingIn} +
+
+ + `; + } + + /** + * + * @param {object} payload + * @param {string} payload.nextStateId + */ + onEnter(payload) { + this.payload = payload; + if (!this.payload.nextStateId) { + throw new Error("No next state id"); + } + + if (this.app.clientApi.isLoggedIn()) { + this.finishLoading(); + return; + } + + this.dialogs = new HUDModalDialogs(null, this.app); + const dialogsElement = document.body.querySelector(".modalDialogParent"); + this.dialogs.initializeToElement(dialogsElement); + + this.htmlElement.classList.add("prefab_LoadingState"); + + /** @type {HTMLElement} */ + this.hintsText = this.htmlElement.querySelector(".prefab_GameHint"); + this.lastHintShown = -1000; + this.nextHintDuration = 0; + + this.tryLogin(); + } + + tryLogin() { + this.app.clientApi.tryLogin().then(success => { + console.log("Logged in:", success); + + if (!success) { + const signals = this.dialogs.showWarning( + T.dialogs.offlineMode.title, + T.dialogs.offlineMode.desc, + ["retry", "playOffline:bad"] + ); + signals.retry.add(() => setTimeout(() => this.tryLogin(), 2000), this); + signals.playOffline.add(this.finishLoading, this); + } else { + this.finishLoading(); + } + }); + } + + finishLoading() { + this.moveToState(this.payload.nextStateId); + } + + getDefaultPreviousState() { + return "MainMenuState"; + } + + update() { + const now = performance.now(); + if (now - this.lastHintShown > this.nextHintDuration) { + this.lastHintShown = now; + const hintText = getRandomHint(); + + this.hintsText.innerHTML = hintText; + + /** + * Compute how long the user will need to read the hint. + * We calculate with 130 words per minute, with an average of 5 chars + * that is 650 characters / minute + */ + this.nextHintDuration = Math.max(2500, (hintText.length / 650) * 60 * 1000); + } + } + + onRender() { + this.update(); + } + + onBackgroundTick() { + this.update(); + } +} diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index 3afad9bf..60495a9c 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -1,3 +1,4 @@ +import { getLogoSprite } from "../core/background_resources_loader"; import { cachebust } from "../core/cachebust"; import { A_B_TESTING_LINK_TYPE, globalConfig, THIRDPARTY_URLS } from "../core/config"; import { GameState } from "../core/game_state"; @@ -16,6 +17,8 @@ import { waitNextFrame, } from "../core/utils"; import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs"; +import { PlatformWrapperImplBrowser } from "../platform/browser/wrapper"; +import { PlatformWrapperImplElectron } from "../platform/electron/wrapper"; import { getApplicationSettingById } from "../profile/application_settings"; import { T } from "../translations"; @@ -32,30 +35,57 @@ export class MainMenuState extends GameState { } getInnerHTML() { + const showLanguageIcon = !G_CHINA_VERSION && !G_WEGAME_VERSION; + const showExitAppButton = G_IS_STANDALONE; + const showUpdateLabel = !G_WEGAME_VERSION; + const showBrowserWarning = !G_IS_STANDALONE && !isSupportedBrowser(); + const showPuzzleDLC = !G_WEGAME_VERSION && (G_IS_STANDALONE || G_IS_DEV); + const showWegameFooter = G_WEGAME_VERSION; + + let showExternalLinks = true; + + if (G_IS_STANDALONE) { + if (G_WEGAME_VERSION || G_CHINA_VERSION) { + showExternalLinks = false; + } + } else { + const wrapper = /** @type {PlatformWrapperImplBrowser} */ (this.app.platformWrapper); + if (!wrapper.embedProvider.externalLinks) { + showExternalLinks = false; + } + } + + let showDiscordLink = showExternalLinks; + if (G_CHINA_VERSION) { + showDiscordLink = true; + } + + const showCrosspromo = !G_IS_STANDALONE && showExternalLinks; + const showDemoAdvertisement = + showExternalLinks && this.app.restrictionMgr.getIsStandaloneMarketingActive(); + + const ownsPuzzleDLC = + G_IS_DEV || + (G_IS_STANDALONE && + /** @type { PlatformWrapperImplElectron}*/ (this.app.platformWrapper).dlcs.puzzle); + const bannerHtml = `

${T.demoBanners.title}

${T.demoBanners.intro}

- Get the shapez.io standalone! - `; - const showDemoBadges = this.app.restrictionMgr.getIsStandaloneMarketingActive(); + Get the shapez.io standalone! + `; return `
${ - G_CHINA_VERSION - ? "" - : `` + showLanguageIcon + ? `` + : "" } - ${ - G_IS_STANDALONE || G_IS_DEV - ? ` - - ` - : "" - } + ${showExitAppButton ? `` : ""}
-
+
- ${showDemoBadges ? `
${bannerHtml}
` : ""} + ${showDemoAdvertisement ? `
${bannerHtml}
` : ""}
${ - isSupportedBrowser() - ? "" - : `
${T.mainMenu.browserWarning}
` + showBrowserWarning + ? `
${T.mainMenu.browserWarning}
` + : "" }
-
- - - + ${ + showCrosspromo + ? `` + : "" + } + ` + } `; } @@ -201,7 +292,10 @@ export class MainMenuState extends GameState { ); } - const qs = this.htmlElement.querySelector.bind(this.htmlElement); + if (G_IS_DEV && globalConfig.debug.testPuzzleMode) { + this.onPuzzleModeButtonClicked(true); + return; + } if (G_IS_DEV && globalConfig.debug.fastGameEnter) { const games = this.app.savegameMgr.getSavegamesMetaData(); @@ -221,53 +315,38 @@ export class MainMenuState extends GameState { } }); - this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked); + const clickHandling = { + ".settingsButton": this.onSettingsButtonClicked, + ".languageChoose": this.onLanguageChooseClicked, + ".redditLink": this.onRedditClicked, + ".changelog": this.onChangelogClicked, + ".helpTranslate": this.onTranslationHelpLinkClicked, + ".exitAppButton": this.onExitAppButtonClicked, + ".steamLink": this.onSteamLinkClicked, + ".discordLink": () => { + this.app.analytics.trackUiClick("main_menu_link_discord"); + this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.discord); + }, + ".githubLink": () => { + this.app.analytics.trackUiClick("main_menu_link_github"); + this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.github); + }, + ".producerLink": () => this.app.platformWrapper.openExternalLink("https://tobspr.io"), + ".puzzleDlcPlayButton": this.onPuzzleModeButtonClicked, + ".puzzleDlcGetButton": this.onPuzzleWishlistButtonClicked, + ".wegameDisclaimer > .rating": this.onWegameRatingClicked, + }; - if (!G_CHINA_VERSION) { - this.trackClicks(qs(".languageChoose"), this.onLanguageChooseClicked); - this.trackClicks(qs(".redditLink"), this.onRedditClicked); - this.trackClicks(qs(".changelog"), this.onChangelogClicked); - this.trackClicks(qs(".helpTranslate"), this.onTranslationHelpLinkClicked); - } - - if (G_IS_STANDALONE) { - this.trackClicks(qs(".exitAppButton"), this.onExitAppButtonClicked); + for (const key in clickHandling) { + const handler = clickHandling[key]; + const element = this.htmlElement.querySelector(key); + if (element) { + this.trackClicks(element, handler, { preventClick: true }); + } } this.renderMainMenu(); this.renderSavegames(); - - const steamLink = this.htmlElement.querySelector(".steamLink"); - if (steamLink) { - this.trackClicks(steamLink, () => this.onSteamLinkClicked(), { preventClick: true }); - } - - const discordLink = this.htmlElement.querySelector(".discordLink"); - this.trackClicks( - discordLink, - () => { - this.app.analytics.trackUiClick("main_menu_link_discord"); - this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.discord); - }, - { preventClick: true } - ); - - const githubLink = this.htmlElement.querySelector(".githubLink"); - if (githubLink) { - this.trackClicks( - githubLink, - () => { - this.app.analytics.trackUiClick("main_menu_link_github"); - this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.github); - }, - { preventClick: true } - ); - } - - const producerLink = this.htmlElement.querySelector(".producerLink"); - this.trackClicks(producerLink, () => this.app.platformWrapper.openExternalLink("https://tobspr.io"), { - preventClick: true, - }); } renderMainMenu() { @@ -306,11 +385,36 @@ export class MainMenuState extends GameState { } } + onPuzzleModeButtonClicked(force = false) { + const hasUnlockedBlueprints = this.app.savegameMgr.getSavegamesMetaData().some(s => s.level >= 12); + console.log(hasUnlockedBlueprints); + if (!force && !hasUnlockedBlueprints) { + const { ok } = this.dialogs.showWarning( + T.dialogs.puzzlePlayRegularRecommendation.title, + T.dialogs.puzzlePlayRegularRecommendation.desc, + ["cancel:good", "ok:bad:timeout"] + ); + ok.add(() => this.onPuzzleModeButtonClicked(true)); + return; + } + + this.moveToState("LoginState", { + nextStateId: "PuzzleMenuState", + }); + } + + onPuzzleWishlistButtonClicked() { + this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.puzzleDlcStorePage + "?utm_medium=mmsl2"); + } + + onBackButtonClicked() { + this.renderMainMenu(); + this.renderSavegames(); + } + onSteamLinkClicked() { this.app.analytics.trackUiClick("main_menu_steam_link_" + A_B_TESTING_LINK_TYPE); - this.app.platformWrapper.openExternalLink( - THIRDPARTY_URLS.standaloneStorePage + "?ref=mmsl2&prc=" + A_B_TESTING_LINK_TYPE - ); + this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_mainmenu"); return false; } @@ -413,9 +517,12 @@ export class MainMenuState extends GameState { downloadButton.classList.add("styledButton", "downloadGame"); elem.appendChild(downloadButton); - const renameButton = document.createElement("button"); - renameButton.classList.add("styledButton", "renameGame"); - name.appendChild(renameButton); + if (!G_WEGAME_VERSION) { + const renameButton = document.createElement("button"); + renameButton.classList.add("styledButton", "renameGame"); + name.appendChild(renameButton); + this.trackClicks(renameButton, () => this.requestRenameSavegame(games[i])); + } const resumeButton = document.createElement("button"); resumeButton.classList.add("styledButton", "resumeGame"); @@ -424,7 +531,6 @@ export class MainMenuState extends GameState { this.trackClicks(deleteButton, () => this.deleteGame(games[i])); this.trackClicks(downloadButton, () => this.downloadGame(games[i])); this.trackClicks(resumeButton, () => this.resumeGame(games[i])); - this.trackClicks(renameButton, () => this.requestRenameSavegame(games[i])); } } } @@ -539,7 +645,9 @@ export class MainMenuState extends GameState { ); getStandalone.add(() => { this.app.analytics.trackUiClick("visit_steampage_from_slot_limit"); - this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage + "?reF=ssll"); + this.app.platformWrapper.openExternalLink( + THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_slotlimit" + ); }); } @@ -575,6 +683,18 @@ export class MainMenuState extends GameState { }); } + onWegameRatingClicked() { + this.dialogs.showInfo( + "提示说明:", + ` + 1)本游戏是一款休闲建造类单机游戏,画面简洁而乐趣充足。适用于年满8周岁及以上的用户,建议未成年人在家长监护下使用游戏产品。
+ 2)本游戏模拟简单的生产流水线,剧情简单且积极向上,没有基于真实历史和现实事件的改编内容。游戏玩法为摆放简单的部件,完成生产目标。游戏为单机作品,没有基于文字和语音的陌生人社交系统。
+ 3)本游戏中有用户实名认证系统,认证为未成年人的用户将接受以下管理:未满8周岁的用户不能付费;8周岁以上未满16周岁的未成年人用户,单次充值金额不得超过50元人民币,每月充值金额累计不得超过200元人民币;16周岁以上的未成年人用户,单次充值金额不得超过100元人民币,每月充值金额累计不得超过400元人民币。未成年玩家,仅可在周五、周六、周日和法定节假日每日20时至21时进行游戏。
+ 4)游戏功能说明:一款关于传送带自动化生产特定形状产品的工厂流水线模拟游戏,画面简洁而乐趣充足,可以让玩家在轻松愉快的氛围下获得各种游戏乐趣,体验完成目标的成就感。游戏没有失败功能,自动存档,不存在较强的挫折体验。 + ` + ); + } + onContinueButtonClicked() { let latestLastUpdate = 0; let latestInternalId; @@ -586,11 +706,14 @@ export class MainMenuState extends GameState { }); const savegame = this.app.savegameMgr.getSavegameById(latestInternalId); - savegame.readAsync().then(() => { - this.moveToState("InGameState", { - savegame, + savegame + .readAsync() + .then(() => this.app.adProvider.showVideoAd()) + .then(() => { + this.moveToState("InGameState", { + savegame, + }); }); - }); } onLeave() { diff --git a/src/js/states/mobile_warning.js b/src/js/states/mobile_warning.js index ce29b68b..df867926 100644 --- a/src/js/states/mobile_warning.js +++ b/src/js/states/mobile_warning.js @@ -1,6 +1,7 @@ import { GameState } from "../core/game_state"; import { cachebust } from "../core/cachebust"; import { THIRDPARTY_URLS } from "../core/config"; +import { getLogoSprite } from "../core/background_resources_loader"; export class MobileWarningState extends GameState { constructor() { @@ -10,9 +11,7 @@ export class MobileWarningState extends GameState { getInnerHTML() { return ` - +

I'm sorry, but shapez.io is not available on mobile devices yet! @@ -23,7 +22,7 @@ export class MobileWarningState extends GameState { Get the shapez.io standalone! `; } diff --git a/src/js/states/preload.js b/src/js/states/preload.js index 9d843ea3..dd44970a 100644 --- a/src/js/states/preload.js +++ b/src/js/states/preload.js @@ -1,4 +1,5 @@ import { CHANGELOG } from "../changelog"; +import { getLogoSprite } from "../core/background_resources_loader"; import { cachebust } from "../core/cachebust"; import { globalConfig } from "../core/config"; import { GameState } from "../core/game_state"; @@ -19,7 +20,7 @@ export class PreloadState extends GameState { return `

- ${G_CHINA_VERSION ? "加载中" : "Booting"} + ${G_CHINA_VERSION || G_WEGAME_VERSION ? "加载中" : "Booting"}
@@ -57,8 +58,6 @@ export class PreloadState extends GameState { this.lastHintShown = -1000; this.nextHintDuration = 0; - this.currentStatus = "booting"; - this.startLoading(); } @@ -82,9 +81,11 @@ export class PreloadState extends GameState { } catch (ex) { logger.error("Failed to read/write local storage:", ex); return new Promise(() => { - alert(`Your brower does not support thirdparty cookies or you have disabled it in your security settings.\n\n - In Chrome this setting is called "Block third-party cookies and site data".\n\n - Please allow third party cookies and then reload the page.`); + alert( + "Your brower does not support thirdparty cookies or you have disabled it in your security settings.\n\n" + + "In Chrome this setting is called 'Block third-party cookies and site data'.\n\n" + + "Please allow third party cookies and then reload the page." + ); // Never return }); } @@ -114,7 +115,7 @@ export class PreloadState extends GameState { .then(() => this.setStatus("Initializing language")) .then(() => { - if (G_CHINA_VERSION) { + if (G_CHINA_VERSION || G_WEGAME_VERSION) { return this.app.settings.updateLanguage("zh-CN"); } @@ -166,7 +167,7 @@ export class PreloadState extends GameState { return; } - if (G_CHINA_VERSION) { + if (G_CHINA_VERSION || G_WEGAME_VERSION) { return; } @@ -229,7 +230,7 @@ export class PreloadState extends GameState { } update() { - if (G_CHINA_VERSION) { + if (G_CHINA_VERSION || G_WEGAME_VERSION) { return; } const now = performance.now(); @@ -262,7 +263,7 @@ export class PreloadState extends GameState { */ setStatus(text) { logger.log("✅ " + text); - if (G_CHINA_VERSION) { + if (G_CHINA_VERSION || G_WEGAME_VERSION) { return Promise.resolve(); } this.currentStatus = text; @@ -280,9 +281,7 @@ export class PreloadState extends GameState { subElement.innerHTML = `
diff --git a/src/js/states/puzzle_menu.js b/src/js/states/puzzle_menu.js new file mode 100644 index 00000000..4677f6c5 --- /dev/null +++ b/src/js/states/puzzle_menu.js @@ -0,0 +1,615 @@ +import { createLogger } from "../core/logging"; +import { DialogWithForm } from "../core/modal_dialog_elements"; +import { FormElementInput } from "../core/modal_dialog_forms"; +import { TextualGameState } from "../core/textual_game_state"; +import { formatBigNumberFull } from "../core/utils"; +import { enumGameModeIds } from "../game/game_mode"; +import { ShapeDefinition } from "../game/shape_definition"; +import { MUSIC } from "../platform/sound"; +import { Savegame } from "../savegame/savegame"; +import { T } from "../translations"; + +const navigation = { + categories: ["official", "top-rated", "trending", "trending-weekly", "new"], + difficulties: ["easy", "medium", "hard"], + account: ["mine", "completed"], + search: ["search"], +}; + +const logger = createLogger("puzzle-menu"); + +let lastCategory = "official"; + +let lastSearchOptions = { + searchTerm: "", + difficulty: "any", + duration: "any", + includeCompleted: false, +}; + +export class PuzzleMenuState extends TextualGameState { + constructor() { + super("PuzzleMenuState"); + this.loading = false; + this.activeCategory = ""; + + /** + * @type {Array} + */ + this.puzzles = []; + } + + getThemeMusic() { + return MUSIC.puzzle; + } + + getStateHeaderTitle() { + return T.puzzleMenu.title; + } + /** + * Overrides the GameState implementation to provide our own html + */ + internalGetFullHtml() { + let headerHtml = ` +
+

${this.getStateHeaderTitle()}

+ +
+ + +
+ +
`; + + return ` + ${headerHtml} +
+ ${this.getInnerHTML()} +
+ `; + } + + getMainContentHTML() { + let html = ` +
+ +
+ ${Object.keys(navigation) + .map( + rootCategory => + `` + ) + .join("")} +
+ +
+
+ +
+ + +
+ `; + + return html; + } + + selectCategory(category) { + lastCategory = category; + if (category === this.activeCategory) { + return; + } + + if (this.loading) { + return; + } + + this.loading = true; + this.activeCategory = category; + + const activeCategory = this.htmlElement.querySelector(".active[data-category]"); + if (activeCategory) { + activeCategory.classList.remove("active"); + } + + const categoryElement = this.htmlElement.querySelector(`[data-category="${category}"]`); + if (categoryElement) { + categoryElement.classList.add("active"); + } + + const container = this.htmlElement.querySelector("#mainContainer"); + while (container.firstChild) { + container.removeChild(container.firstChild); + } + + if (category === "search") { + this.loading = false; + + this.startSearch(); + return; + } + + const loadingElement = document.createElement("div"); + loadingElement.classList.add("loader"); + loadingElement.innerText = T.global.loading + "..."; + container.appendChild(loadingElement); + + this.asyncChannel + .watch(this.getPuzzlesForCategory(category)) + .then( + puzzles => this.renderPuzzles(puzzles), + error => { + this.dialogs.showWarning( + T.dialogs.puzzleLoadFailed.title, + T.dialogs.puzzleLoadFailed.desc + " " + error + ); + this.renderPuzzles([]); + } + ) + .then(() => (this.loading = false)); + } + + /** + * Selects a root category + * @param {string} rootCategory + * @param {string=} category + */ + selectRootCategory(rootCategory, category) { + const subCategory = category || navigation[rootCategory][0]; + console.warn("Select root category", rootCategory, category, "->", subCategory); + + if (this.loading) { + return; + } + if (this.activeCategory === subCategory) { + return; + } + + const activeCategory = this.htmlElement.querySelector(".active[data-root-category]"); + if (activeCategory) { + activeCategory.classList.remove("active"); + } + + const newActiveCategory = this.htmlElement.querySelector(`[data-root-category="${rootCategory}"]`); + if (newActiveCategory) { + newActiveCategory.classList.add("active"); + } + + // Rerender buttons + + const subContainer = this.htmlElement.querySelector(".subCategories"); + while (subContainer.firstChild) { + subContainer.removeChild(subContainer.firstChild); + } + + const children = navigation[rootCategory]; + if (children.length > 1) { + for (const category of children) { + const button = document.createElement("button"); + button.setAttribute("data-category", category); + button.classList.add("styledButton", "category", "child"); + button.innerText = T.puzzleMenu.categories[category]; + this.trackClicks(button, () => this.selectCategory(category)); + subContainer.appendChild(button); + } + } + + if (rootCategory === "search") { + this.renderSearchForm(subContainer); + } + + this.selectCategory(subCategory); + } + + renderSearchForm(parent) { + const container = document.createElement("form"); + container.classList.add("searchForm"); + + // Search + const searchField = document.createElement("input"); + searchField.value = lastSearchOptions.searchTerm; + searchField.classList.add("search"); + searchField.setAttribute("type", "text"); + searchField.setAttribute("placeholder", T.puzzleMenu.search.placeholder); + searchField.addEventListener("input", () => { + lastSearchOptions.searchTerm = searchField.value.trim(); + }); + container.appendChild(searchField); + + // Difficulty + const difficultyFilter = document.createElement("select"); + for (const difficulty of ["any", "easy", "medium", "hard"]) { + const option = document.createElement("option"); + option.value = difficulty; + option.innerText = T.puzzleMenu.search.difficulties[difficulty]; + if (option.value === lastSearchOptions.difficulty) { + option.setAttribute("selected", "selected"); + } + difficultyFilter.appendChild(option); + } + difficultyFilter.addEventListener("change", () => { + const option = difficultyFilter.value; + lastSearchOptions.difficulty = option; + }); + container.appendChild(difficultyFilter); + + // Duration + const durationFilter = document.createElement("select"); + for (const duration of ["any", "short", "medium", "long"]) { + const option = document.createElement("option"); + option.value = duration; + option.innerText = T.puzzleMenu.search.durations[duration]; + if (option.value === lastSearchOptions.duration) { + option.setAttribute("selected", "selected"); + } + durationFilter.appendChild(option); + } + durationFilter.addEventListener("change", () => { + const option = durationFilter.value; + lastSearchOptions.duration = option; + }); + container.appendChild(durationFilter); + + // Include completed + const labelCompleted = document.createElement("label"); + labelCompleted.classList.add("filterCompleted"); + + const inputCompleted = document.createElement("input"); + inputCompleted.setAttribute("type", "checkbox"); + if (lastSearchOptions.includeCompleted) { + inputCompleted.setAttribute("checked", "checked"); + } + inputCompleted.addEventListener("change", () => { + lastSearchOptions.includeCompleted = inputCompleted.checked; + }); + + labelCompleted.appendChild(inputCompleted); + + const text = document.createTextNode(T.puzzleMenu.search.includeCompleted); + labelCompleted.appendChild(text); + + container.appendChild(labelCompleted); + + // Submit + const submitButton = document.createElement("button"); + submitButton.classList.add("styledButton"); + submitButton.setAttribute("type", "submit"); + submitButton.innerText = T.puzzleMenu.search.action; + container.appendChild(submitButton); + + container.addEventListener("submit", event => { + event.preventDefault(); + console.log("Search:", searchField.value.trim()); + this.startSearch(); + }); + + parent.appendChild(container); + } + + startSearch() { + if (this.loading) { + return; + } + + this.loading = true; + + const container = this.htmlElement.querySelector("#mainContainer"); + while (container.firstChild) { + container.removeChild(container.firstChild); + } + + const loadingElement = document.createElement("div"); + loadingElement.classList.add("loader"); + loadingElement.innerText = T.global.loading + "..."; + container.appendChild(loadingElement); + + this.asyncChannel + .watch(this.app.clientApi.apiSearchPuzzles(lastSearchOptions)) + .then( + puzzles => this.renderPuzzles(puzzles), + error => { + this.dialogs.showWarning( + T.dialogs.puzzleLoadFailed.title, + T.dialogs.puzzleLoadFailed.desc + " " + error + ); + this.renderPuzzles([]); + } + ) + .then(() => (this.loading = false)); + } + + /** + * + * @param {import("../savegame/savegame_typedefs").PuzzleMetadata[]} puzzles + */ + renderPuzzles(puzzles) { + this.puzzles = puzzles; + + const container = this.htmlElement.querySelector("#mainContainer"); + while (container.firstChild) { + container.removeChild(container.firstChild); + } + + for (const puzzle of puzzles) { + const elem = document.createElement("div"); + elem.classList.add("puzzle"); + elem.setAttribute("data-puzzle-id", String(puzzle.id)); + + if (this.activeCategory !== "mine") { + elem.classList.toggle("completed", puzzle.completed); + } + + if (puzzle.title) { + const title = document.createElement("div"); + title.classList.add("title"); + title.innerText = puzzle.title; + elem.appendChild(title); + } + + if (puzzle.author && !["official", "mine"].includes(this.activeCategory)) { + const author = document.createElement("div"); + author.classList.add("author"); + author.innerText = "by " + puzzle.author; + elem.appendChild(author); + } + + const stats = document.createElement("div"); + stats.classList.add("stats"); + elem.appendChild(stats); + + if (!["official", "easy", "medium", "hard"].includes(this.activeCategory)) { + const difficulty = document.createElement("div"); + difficulty.classList.add("difficulty"); + + const completionPercentage = Math.max( + 0, + Math.min(100, Math.round((puzzle.completions / puzzle.downloads) * 100.0)) + ); + difficulty.innerText = completionPercentage + "%"; + stats.appendChild(difficulty); + + if (puzzle.difficulty === null) { + difficulty.classList.add("stage--unknown"); + difficulty.innerText = T.puzzleMenu.difficulties.unknown; + } else if (puzzle.difficulty < 0.2) { + difficulty.classList.add("stage--easy"); + difficulty.innerText = T.puzzleMenu.difficulties.easy; + } else if (puzzle.difficulty > 0.6) { + difficulty.classList.add("stage--hard"); + difficulty.innerText = T.puzzleMenu.difficulties.hard; + } else { + difficulty.classList.add("stage--medium"); + difficulty.innerText = T.puzzleMenu.difficulties.medium; + } + } + + if (this.activeCategory === "mine") { + const downloads = document.createElement("div"); + downloads.classList.add("downloads"); + downloads.innerText = String(puzzle.downloads); + stats.appendChild(downloads); + stats.classList.add("withDownloads"); + } + + const likes = document.createElement("div"); + likes.classList.add("likes"); + likes.innerText = formatBigNumberFull(puzzle.likes); + stats.appendChild(likes); + + const definition = ShapeDefinition.fromShortKey(puzzle.shortKey); + const canvas = definition.generateAsCanvas(100 * this.app.getEffectiveUiScale()); + + const icon = document.createElement("div"); + icon.classList.add("icon"); + icon.appendChild(canvas); + elem.appendChild(icon); + + if (this.activeCategory === "mine") { + const deleteButton = document.createElement("button"); + deleteButton.classList.add("styledButton", "delete"); + this.trackClicks( + deleteButton, + () => { + this.tryDeletePuzzle(puzzle); + }, + { + consumeEvents: true, + preventClick: true, + preventDefault: true, + } + ); + elem.appendChild(deleteButton); + } + + container.appendChild(elem); + + this.trackClicks(elem, () => this.playPuzzle(puzzle.id)); + } + + if (puzzles.length === 0) { + const elem = document.createElement("div"); + elem.classList.add("empty"); + elem.innerText = T.puzzleMenu.noPuzzles; + container.appendChild(elem); + } + } + + /** + * @param {import("../savegame/savegame_typedefs").PuzzleMetadata} puzzle + */ + tryDeletePuzzle(puzzle) { + const signals = this.dialogs.showWarning( + T.dialogs.puzzleDelete.title, + T.dialogs.puzzleDelete.desc.replace("", puzzle.title), + ["delete:bad", "cancel:good"] + ); + signals.delete.add(() => { + const closeLoading = this.dialogs.showLoadingDialog(); + + this.asyncChannel + .watch(this.app.clientApi.apiDeletePuzzle(puzzle.id)) + .then(() => { + const element = this.htmlElement.querySelector("[data-puzzle-id='" + puzzle.id + "']"); + if (element) { + element.remove(); + } + }) + .catch(err => { + this.dialogs.showWarning(T.global.error, String(err)); + }) + .then(closeLoading); + }); + } + + /** + * + * @param {*} category + * @returns {Promise<import("../savegame/savegame_typedefs").PuzzleMetadata[]>} + */ + getPuzzlesForCategory(category) { + const result = this.app.clientApi.apiListPuzzles(category); + return result.catch(err => { + logger.error("Failed to get", category, ":", err); + throw err; + }); + } + + /** + * + * @param {number} puzzleId + * @param {Array<number>=} nextPuzzles + */ + playPuzzle(puzzleId, nextPuzzles) { + const closeLoading = this.dialogs.showLoadingDialog(); + + this.asyncChannel.watch(this.app.clientApi.apiDownloadPuzzle(puzzleId)).then( + puzzleData => { + closeLoading(); + + nextPuzzles = + nextPuzzles || this.puzzles.filter(puzzle => !puzzle.completed).map(puzzle => puzzle.id); + nextPuzzles = nextPuzzles.filter(id => id !== puzzleId); + + logger.log("Got puzzle:", puzzleData, "next puzzles:", nextPuzzles); + this.startLoadedPuzzle(puzzleData, nextPuzzles); + }, + err => { + closeLoading(); + logger.error("Failed to download puzzle", puzzleId, ":", err); + this.dialogs.showWarning( + T.dialogs.puzzleDownloadError.title, + T.dialogs.puzzleDownloadError.desc + " " + err + ); + } + ); + } + + /** + * + * @param {import("../savegame/savegame_typedefs").PuzzleFullData} puzzle + * @param {Array<number>=} nextPuzzles + */ + startLoadedPuzzle(puzzle, nextPuzzles) { + const savegame = Savegame.createPuzzleSavegame(this.app); + this.moveToState("InGameState", { + gameModeId: enumGameModeIds.puzzlePlay, + gameModeParameters: { + puzzle, + nextPuzzles, + }, + savegame, + }); + } + + onEnter(payload) { + if (payload.continueQueue) { + logger.log("Continuing puzzle queue:", payload); + this.playPuzzle(payload.continueQueue[0], payload.continueQueue.slice(1)); + } + + // Find old category + let rootCategory = "categories"; + for (const [id, children] of Object.entries(navigation)) { + if (children.includes(lastCategory)) { + rootCategory = id; + break; + } + } + + this.selectRootCategory(rootCategory, lastCategory); + + if (payload && payload.error) { + this.dialogs.showWarning(payload.error.title, payload.error.desc); + } + + for (const rootCategory of Object.keys(navigation)) { + const button = this.htmlElement.querySelector(`[data-root-category="${rootCategory}"]`); + this.trackClicks(button, () => this.selectRootCategory(rootCategory)); + } + + this.trackClicks(this.htmlElement.querySelector("button.createPuzzle"), () => this.createNewPuzzle()); + this.trackClicks(this.htmlElement.querySelector("button.loadPuzzle"), () => this.loadPuzzle()); + } + + loadPuzzle() { + const shortKeyInput = new FormElementInput({ + id: "shortKey", + label: null, + placeholder: "", + defaultValue: "", + validator: val => ShapeDefinition.isValidShortKey(val) || val.startsWith("/"), + }); + + const dialog = new DialogWithForm({ + app: this.app, + title: T.dialogs.puzzleLoadShortKey.title, + desc: T.dialogs.puzzleLoadShortKey.desc, + formElements: [shortKeyInput], + buttons: ["ok:good:enter"], + }); + this.dialogs.internalShowDialog(dialog); + + dialog.buttonSignals.ok.add(() => { + const searchTerm = shortKeyInput.getValue(); + + if (searchTerm === "/apikey") { + alert("Your api key is: " + this.app.clientApi.token); + return; + } + + const closeLoading = this.dialogs.showLoadingDialog(); + + this.app.clientApi.apiDownloadPuzzleByKey(searchTerm).then( + puzzle => { + closeLoading(); + this.startLoadedPuzzle(puzzle); + }, + err => { + closeLoading(); + this.dialogs.showWarning( + T.dialogs.puzzleDownloadError.title, + T.dialogs.puzzleDownloadError.desc + " " + err + ); + } + ); + }); + } + + createNewPuzzle(force = false) { + if (!force && !this.app.clientApi.isLoggedIn()) { + const signals = this.dialogs.showWarning( + T.dialogs.puzzleCreateOffline.title, + T.dialogs.puzzleCreateOffline.desc, + ["cancel:good", "continue:bad"] + ); + signals.continue.add(() => this.createNewPuzzle(true)); + return; + } + + const savegame = Savegame.createPuzzleSavegame(this.app); + this.moveToState("InGameState", { + gameModeId: enumGameModeIds.puzzleEdit, + savegame, + }); + } +} diff --git a/src/js/states/settings.js b/src/js/states/settings.js index a817de47..352e0153 100644 --- a/src/js/states/settings.js +++ b/src/js/states/settings.js @@ -1,3 +1,4 @@ +import { THIRDPARTY_URLS } from "../core/config"; import { TextualGameState } from "../core/textual_game_state"; import { formatSecondsToTimeAgo } from "../core/utils"; import { allApplicationSettings, enumCategories } from "../profile/application_settings"; @@ -30,14 +31,16 @@ export class SettingsState extends TextualGameState { <div class="other"> ${ - G_CHINA_VERSION + G_CHINA_VERSION || G_WEGAME_VERSION ? "" : ` <button class="styledButton about">${T.about.title}</button> + <button class="styledButton privacy">Privacy Policy</button> + ` } <div class="versionbar"> - <div class="buildVersion">${T.global.loading} ...</div> + ${G_WEGAME_VERSION ? "" : `<div class="buildVersion">${T.global.loading} ...</div>`} </div> </div> </div> @@ -74,7 +77,7 @@ export class SettingsState extends TextualGameState { for (let i = 0; i < allApplicationSettings.length; ++i) { const setting = allApplicationSettings[i]; - if (G_CHINA_VERSION && setting.id === "language") { + if ((G_CHINA_VERSION || G_WEGAME_VERSION) && setting.id === "language") { continue; } @@ -88,6 +91,9 @@ export class SettingsState extends TextualGameState { renderBuildText() { const labelVersion = this.htmlElement.querySelector(".buildVersion"); + if (!labelVersion) { + return; + } const lastBuildMs = new Date().getTime() - G_BUILD_TIME; const lastBuildText = formatSecondsToTimeAgo(lastBuildMs / 1000.0); @@ -105,10 +111,13 @@ export class SettingsState extends TextualGameState { onEnter(payload) { this.renderBuildText(); - if (!G_CHINA_VERSION) { + if (!G_CHINA_VERSION && !G_WEGAME_VERSION) { this.trackClicks(this.htmlElement.querySelector(".about"), this.onAboutClicked, { preventDefault: false, }); + this.trackClicks(this.htmlElement.querySelector(".privacy"), this.onPrivacyClicked, { + preventDefault: false, + }); } const keybindingsButton = this.htmlElement.querySelector(".editKeybindings"); @@ -144,7 +153,7 @@ export class SettingsState extends TextualGameState { initSettings() { allApplicationSettings.forEach(setting => { - if (G_CHINA_VERSION && setting.id === "language") { + if ((G_CHINA_VERSION || G_WEGAME_VERSION) && setting.id === "language") { return; } @@ -180,6 +189,10 @@ export class SettingsState extends TextualGameState { this.moveToStateAddGoBack("AboutState"); } + onPrivacyClicked() { + this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.privacyPolicy); + } + onKeybindingsClicked() { this.moveToStateAddGoBack("KeybindingsState"); } diff --git a/src/js/states/wegame_splash.js b/src/js/states/wegame_splash.js new file mode 100644 index 00000000..a5483112 --- /dev/null +++ b/src/js/states/wegame_splash.js @@ -0,0 +1,27 @@ +import { GameState } from "../core/game_state"; + +export class WegameSplashState extends GameState { + constructor() { + super("WegameSplashState"); + } + + getInnerHTML() { + return ` + <div class="wrapper"> + <strong>健康游戏忠告</strong> + <div>抵制不良游戏,拒绝盗版游戏。</div> + <div>注意自我保护,谨防受骗上当。</div> + <div>适度游戏益脑,沉迷游戏伤身。</div> + <div>合理安排时间,享受健康生活。</div> + </div> +`; + } + onEnter() { + setTimeout( + () => { + this.app.stateMgr.moveToState("PreloadState"); + }, + G_IS_DEV ? 1 : 6000 + ); + } +} diff --git a/translations/base-ar.yaml b/translations/base-ar.yaml index 2ac7d78f..19a179d2 100644 --- a/translations/base-ar.yaml +++ b/translations/base-ar.yaml @@ -50,6 +50,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: Demo Version intro: Get the standalone to unlock all features! @@ -69,6 +70,12 @@ mainMenu: savegameLevel: Level <x> savegameLevelUnknown: Unknown Level savegameUnnamed: Unnamed + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -82,6 +89,9 @@ dialogs: viewUpdate: View Update showUpgrades: Show Upgrades showKeybindings: Show Keybindings + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Import Error text: "Failed to import your savegame:" @@ -179,6 +189,70 @@ dialogs: title: Tutorial Available desc: There is a tutorial video available for this level, but it is only available in English. Would you like to watch it? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Move @@ -200,6 +274,7 @@ ingame: clearSelection: Clear selection pipette: Pipette switchLayers: Switch layers + clearBelts: Clear belts colors: red: Red green: Green @@ -347,6 +422,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Belts, Distributor & Tunnels @@ -553,6 +669,18 @@ buildings: name: Item Producer description: Available in sandbox mode only, outputs the given signal from the wires layer on the regular layer. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Cutting Shapes @@ -876,7 +1004,12 @@ settings: title: Map Resources Size description: Controls the size of the shapes on the map overview (when zooming out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Keybindings hint: "Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different @@ -954,6 +1087,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: About this Game body: >- @@ -1039,3 +1177,88 @@ tips: - Press F4 to show your FPS and Tick Rate. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-cat.yaml b/translations/base-cat.yaml index 385aac27..324f85ce 100644 --- a/translations/base-cat.yaml +++ b/translations/base-cat.yaml @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: ESPAI + loggingIn: Logging in demoBanners: title: Demo - Versió de prova intro: Aconsegueix el joc complet per obtenir totes les característiques! @@ -73,6 +74,12 @@ mainMenu: savegameLevel: Nivell <x> savegameLevelUnknown: Nivell desconegut savegameUnnamed: Unnamed + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -86,6 +93,9 @@ dialogs: viewUpdate: Veure actualitzacions showUpgrades: Mostrar millores showKeybindings: Mostrar dreceres de teclat + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Error en importar text: "Ha ocurrit un error intentant importar la teva partida:" @@ -187,6 +197,70 @@ dialogs: title: Tutorial Available desc: There is a tutorial video available for this level, but it is only available in English. Would you like to watch it? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Moure @@ -208,6 +282,7 @@ ingame: clearSelection: Buidar selecció pipette: Pipeta switchLayers: Intercanviar capes + clearBelts: Clear belts colors: red: Roig green: Verd @@ -357,6 +432,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Cintes transportadores, Distribuidors i Túnels @@ -569,6 +685,18 @@ buildings: name: Productor d'ítems description: Només avaliable en mode "sandbox", emet la senyal de la capa de cablejat a la capa normal. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Tallar figures @@ -903,7 +1031,12 @@ settings: title: Map Resources Size description: Controls the size of the shapes on the map overview (when zooming out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Combinacions de tecles hint: "Tip: Assegura't d'emprar CTRL, SHIFT i ALT! Et permeten col·locar @@ -981,6 +1114,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: Sobre aquest Joc body: >- @@ -1081,3 +1219,88 @@ tips: - Premeu F4 per mostrar la vostra tarifa FPS i Tick. - Premeu F4 dues vegades per mostrar el mosaic del ratolí i la càmera. - Podeu fer clic a una forma fixada al costat esquerre per desenganxar-la. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml index 15e704c1..245473d4 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -10,14 +10,14 @@ steamPage: A jako by to nestačilo, musíte také produkovat exponenciálně více, abyste uspokojili požadavky - jediná věc, která pomáhá, je škálování! Zatímco na začátku tvary pouze zpracováváte, později je musíte obarvit - těžbou a mícháním barev! Koupením hry na platformě Steam získáte přístup k plné verzi hry, ale také můžete nejdříve hrát demo verzi na shapez.io a až potom se rozhodnout! - what_others_say: What people say about shapez.io - nothernlion_comment: This game is great - I'm having a wonderful time playing, - and time has flown by. - notch_comment: Oh crap. I really should sleep, but I think I just figured out - how to make a computer in shapez.io - steam_review_comment: This game has stolen my life and I don't want it back. - Very chill factory game that won't let me stop making my lines more - efficient. + what_others_say: Co o shapez.io říkají lidé + nothernlion_comment: Tato hra je úžasná - Užívám si čas strávený hraním této + hry, jen strašně rychle utekl. + notch_comment: Sakra. Opravdu bych měl jít spát, ale myslím si, že jsem zrovna + přišel na to, jak v shapez.io vytvořit počítač. + steam_review_comment: Tato hra mi ukradla život a já ho nechci zpět. Odpočinková + factory hra, která mi nedovolí přestat dělat mé výrobní linky více + efektivní. global: loading: Načítání error: Chyba @@ -49,6 +49,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Přihlašuji demoBanners: title: Demo verze intro: Získejte plnou verzi pro odemknutí všech funkcí a obsahu! @@ -69,6 +70,12 @@ mainMenu: savegameLevel: Úroveň <x> savegameLevelUnknown: Neznámá úroveň savegameUnnamed: Nepojmenovaný + puzzleMode: Puzzle mód + back: Zpět + puzzleDlcText: Baví vás zmenšování a optimalizace továren? Pořiďte si nyní + Puzzle DLC na Steamu pro ještě více zábavy! + puzzleDlcWishlist: Přidejte si nyní na seznam přání! + puzzleDlcViewNow: Zobrazit DLC dialogs: buttons: ok: OK @@ -82,6 +89,9 @@ dialogs: viewUpdate: Zobrazit aktualizaci showUpgrades: Zobrazit vylepšení showKeybindings: Zobrazit klávesové zkratky + retry: Opakovat + continue: Pokračovat + playOffline: Hrát offline importSavegameError: title: Chyba Importu text: "Nepovedlo se importovat vaši uloženou hru:" @@ -178,6 +188,70 @@ dialogs: title: Dostupný tutoriál desc: Pro tuto úroveň je k dispozici tutoriál, ale je dostupný pouze v angličtině. Chtěli byste se na něj podívat? + editConstantProducer: + title: Nastavte tvar + puzzleLoadFailed: + title: Načítání puzzle selhalo + desc: "Bohužel nebylo možné puzzle načíst:" + submitPuzzle: + title: Odeslat puzzle + descName: "Pojmenujte svůj puzzle:" + descIcon: "Prosím zadejte unikátní krátký klíč, který bude zobrazen jako ikona + vašeho puzzle (Ten můžete vygenerovat <link>zde</link>, nebo vyberte + jeden z níže náhodně vybraných tvarů):" + placeholderName: Název puzzlu + puzzleResizeBadBuildings: + title: Změna velikosti není možná + desc: Zónu není možné více zmenšit, protože by některé budovy byly mimo zónu. + puzzleLoadError: + title: Špatný puzzle + desc: "Načítání puzzlu selhalo:" + offlineMode: + title: Offline mód + desc: Nebylo možné kontaktovat herní servery, proto musí hra běžet v offline + módu. Ujistěte se, že máte aktivní připojení k internetu. + puzzleDownloadError: + title: Chyba stahování + desc: "Stažení puzzlu selhalo:" + puzzleSubmitError: + title: Chyba odeslání + desc: "Odeslání puzzlu selhalo:" + puzzleSubmitOk: + title: Puzzle publikováno + desc: Gratuluji! Vaše puzzle bylo publikováno a je dostupné pro ostatní hráče. + Můžete ho najít v sekci "Moje puzzly". + puzzleCreateOffline: + title: Offline mód + desc: Jelikož jste offline, nebudete moci ukládat a/nebo publikovat vaše puzzle. + Chcete přesto pokračovat? + puzzlePlayRegularRecommendation: + title: Doporučení + desc: <strong>Důrazně</strong> doporučujeme průchod základní hrou nejméně do + úrovně 12 před vstupem do puzzle DLC, jinak můžete narazit na + mechaniku hry, se kterou jste se ještě nesetkali. Chcete přesto + pokračovat? + puzzleShare: + title: Krátký klíč zkopírován + desc: Krátký klíč tohoto puzzlu (<key>) byl zkopírován do vaší schránky! Může + být vložen v puzzle menu pro přístup k danému puzzlu. + puzzleReport: + title: Nahlásit puzzle + options: + profane: Rouhavý + unsolvable: Nelze vyřešit + trolling: Trolling + puzzleReportComplete: + title: Děkujeme za vaši zpětnou vazbu! + desc: Toto puzzle bylo označeno. + puzzleReportError: + title: Nahlášení selhalo + desc: "Vaše nahlášení nemohlo být zpracováno:" + puzzleLoadShortKey: + title: Vložte krátký klíč + desc: Vložte krátký klíč pro načtení příslušného puzzlu. + puzzleDelete: + title: Smazat puzzle? + desc: Jste si jisti, že chcete smazat '<title>'? Tato akce je nevratná! ingame: keybindingsOverlay: moveMap: Posun mapy @@ -199,6 +273,7 @@ ingame: clearSelection: Zrušit výběr pipette: Kapátko switchLayers: Změnit vrstvy + clearBelts: Clear belts buildingPlacement: cycleBuildingVariants: Zmáčkněte <key> pro přepínání mezi variantami. hotkeyLabel: "Klávesová zkratka: <key>" @@ -347,7 +422,48 @@ ingame: desc: Vyvíjím to ve svém volném čase! achievements: title: Achievements - desc: Hunt them all! + desc: Získejte je všechny! + puzzleEditorSettings: + zoneTitle: Zóna + zoneWidth: Šířka + zoneHeight: Výška + trimZone: Upravit zónu + clearItems: Vymazat tvary + share: Sdílet + report: Nahlásit + clearBuildings: Vymazat budovy + resetPuzzle: Resetovat puzzle + puzzleEditorControls: + title: Puzzle editor + instructions: + - 1. Umístěte <strong>výrobníky</strong>, které poskytnou hráči + tvary a barvy. + - 2. Sestavte jeden či více tvarů, které chcete, aby hráč vytvořil a + doručte to do jednoho či více <strong>příjemců cílů</strong>. + - 3. Jakmile příjemce cílů dostane určitý tvar za určitý časový + úsek, <strong>uloží se jako cíl</strong>, který hráč musí později + vyprodukovat (Označeno <strong>zeleným odznakem</strong>). + - 4. Kliknutím na <strong>tlačítko zámku</strong> na určité budově + dojde k její deaktivaci. + - 5. Jakmile kliknete na ověření, vaše puzzle bude ověřeno a můžete + ho publikovat. + - 6. Během publikace budou kromě výrobníků a příjemců cílů + <strong>všechny budovy odstraněny</strong> - To je ta část, na + kterou má koneckonců každý hráč přijít sám. :) + puzzleCompletion: + title: Puzzle dokončeno! + titleLike: "Klikněte na srdíčko, pokud se vám puzzle líbilo:" + titleRating: Jak obtížný ti tento puzzle přišel? + titleRatingDesc: Vaše hodnocení nám pomůže podat vám v budoucnu lepší návrhy + continueBtn: Hrát dál + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Autor + shortKey: Krátký klíč + rating: Úrověn obtížnosti + averageDuration: Prům. doba trvání + completionRate: Míra dokončení shopUpgrades: belt: name: Pásy, distribuce a tunely @@ -403,7 +519,7 @@ buildings: name: Rotor description: Otáčí tvary o 90 stupňů po směru hodinových ručiček. ccw: - name: Rotor (opačný) + name: Rotor (Opačný) description: Otáčí tvary o 90 stupňů proti směru hodinových ručiček. rotate180: name: Rotor (180°) @@ -546,6 +662,18 @@ buildings: name: Výrobník předmětů description: Dostupný pouze v sandboxovém módu, vydává daný signál z vrstvy kabelů na běžnou vrstvu. + constant_producer: + default: + name: Výrobník + description: Neustále vydává zadaný tvar či barvu. + goal_acceptor: + default: + name: Příjemce cílů + description: Doručte tvary příjemci cílů, abyste je nastavili jako cíl. + block: + default: + name: Blok + description: Umožňuje zablokovat políčko. storyRewards: reward_cutter_and_trash: title: Řezání tvarů @@ -867,7 +995,12 @@ settings: mapResourcesScale: title: Velikost zdrojů na mapě description: Určuje velikost ikon tvarů na náhledu mapy (při oddálení). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Klávesové zkratky hint: "Tip: Nezapomeňte používat CTRL, SHIFT a ALT! Díky nim můžete měnit způsob @@ -941,10 +1074,15 @@ keybindings: comparator: Porovnávač item_producer: Výrobník předmětů (Sandbox) copyWireValue: "Kabely: Zkopírovat hodnotu pod kurzorem" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: "Otočit: Nahoru" + rotateToDown: "Otočit: Dolů" + rotateToRight: "Otočit: Doprava" + rotateToLeft: "Otočit: Doleva" + constant_producer: Výrobník + goal_acceptor: Přijemce cílů + block: Blok + massSelectClear: Vymazat pásy + showShapeTooltip: Show shape output tooltip about: title: O hře body: >- @@ -1039,3 +1177,90 @@ tips: - Stisknutím F4 zobrazíte FPS a rychlost ticků. - Stisknutím F4 dvakrát zobrazíte souřadnici myši a kamery. - Můžete kliknout na připínáček vlevo vedle připnutého tvaru k jeho odepnutí. +puzzleMenu: + play: Hrát + edit: Upravit + title: Puzzle mód + createPuzzle: Vytvořit puzzle + loadPuzzle: Načíst + reviewPuzzle: Ověření a publikace + validatingPuzzle: Ověřování puzzlu + submittingPuzzle: Odesílání puzzlu + noPuzzles: V této sekci momentálně nejsou žádné puzzly. + categories: + levels: Úrovně + new: Nové + top-rated: Nejlépe hodnocené + mine: Moje puzzly + easy: Lehké + hard: Těžké + completed: Dokončeno + medium: Střední + official: Oficiální + trending: Populární denně + trending-weekly: Populární týdně + categories: Kategorie + difficulties: Dle obtížnosti + account: Moje puzzly + search: Vyhledávání + validation: + title: Neplatný puzzle + noProducers: Prosím umístěte výrobník! + noGoalAcceptors: Prosím umístěte příjemce cílů! + goalAcceptorNoItem: Jeden nebo více příjemců cílů ještě nemají nastavený tvar. + Doručte jim tvar, abyste jej nastavili jako cíl. + goalAcceptorRateNotMet: Jeden nebo více příjemců cílů nedostávají dostatečný + počet tvarů. Ujistěte se, že indikátory jsou zelené pro všechny + příjemce. + buildingOutOfBounds: Jedna nebo více budov je mimo zastavitelnou oblast. Buď + zvětšete plochu, nebo je odstraňte. + autoComplete: Váš puzzle automaticky dokončuje sám sebe! Ujistěte se, že + vyrobníky nedodávají své tvary přímo do přijemců cílů. + difficulties: + easy: Lehká + medium: Střední + hard: Těžká + unknown: Unrated + dlcHint: Již jste toto DLC zakoupili? Ujistěte se, že je aktivováno kliknutím + pravého tlačítka na shapez.io ve své knihovně, vybráním Vlastnosti > + DLC. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Provádíte své akce příliš často. Počkejte prosím. + invalid-api-key: Komunikace s back-endem se nezdařila, prosím zkuste + aktualizovat/restartovat hru (Neplatný API klíč). + unauthorized: Komunikace s back-endem se nezdařila, prosím zkuste + aktualizovat/restartovat hru (Bez autorizace). + bad-token: Komunikace s back-endem se nezdařila, prosím zkuste + aktualizovat/restartovat hru (Špatný token). + bad-id: Neplatný identifikátor puzzlu. + not-found: Daný puzzle nebyl nalezen. + bad-category: Daná kategorie nebyla nalezena. + bad-short-key: Krátký klíč je neplatný. + profane-title: Název vašeho puzzlu obsahuje rouhavá slova. + bad-title-too-many-spaces: Název vašeho puzzlu je příliš krátký. + bad-shape-key-in-emitter: Výrobník má nastaven neplatný tvar. + bad-shape-key-in-goal: Příjemce cílů má nastaven neplatný tvar. + no-emitters: Váš puzzle neobsahuje žádné výrobníky. + no-goals: Váš puzzle neobsahuje žádné příjemce cílů. + short-key-already-taken: Tento krátký klíč je již používán, zadejte prosím jiný. + can-not-report-your-own-puzzle: Nemůžete nahlásit vlastní puzzle. + bad-payload: Žádost obsahuje neplatná data. + bad-building-placement: Váš puzzle obsahuje neplatně umístěné budovy. + timeout: Žádost vypršela. + too-many-likes-already: Tento puzzle již získal příliš mnoho lajků. Pokud jej + přesto chcete odstranit, kontaktujte nás prosím na support@shapez.io! + no-permission: K provedení této akce nemáte oprávnění. diff --git a/translations/base-da.yaml b/translations/base-da.yaml index a276b19a..c1c33623 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -7,14 +7,12 @@ steamPage: Shapez.io er et afslappet spil hvor du skal bygge fabrikker for at automatisere productionen af geometriske figurer. - Jo længer du når, jo mere kompliseret bliver figurene, og du bliver nød til at spræde dig ud på den grænseløse spilleflade. + Jo længere du når, jo mere kompliceret bliver figurerne, og du bliver nød til at sprede dig ud på den grænseløse spilleflade. - og hvis det ikke var nok, så skal du også producere eksponentielt flere figurer for at møde behovene spillet giver dig - det eneste der virker er skalering! + Og, hvis det ikke var nok, så skal du også producere eksponentielt flere figurer for at møde behovene spillet giver dig - det eneste der virker er skalering! Mens du i starten kun laver former, skal du senere farvelægge dem - for at gøre dette skal du udvinde og blande farver! - Mens du i starten kun laver former, skal du senere farvelægge dem - for at gøre dette skal du udvinde og blande farver! - - At købe spllet på Steam, giver dig adgang til det fulde spil, men du kan også spille en demo version på shapez.io og vælge senere! - what_others_say: What people say about shapez.io + Køb spillet på Steam, det giver dig adgang til det fulde spil, men du kan også spille en demo version på shapez.io og vælge senere! + what_others_say: Hvad andre siger om shapez.io nothernlion_comment: This game is great - I'm having a wonderful time playing, and time has flown by. notch_comment: Oh crap. I really should sleep, but I think I just figured out @@ -53,6 +51,7 @@ global: escape: ESC shift: SKIFT/SHIFT space: MELLEMRUM + loggingIn: Logging in demoBanners: title: Demo Version intro: Køb spillet for at få den fulde oplevelse! @@ -60,7 +59,7 @@ mainMenu: play: Spil continue: Fortsæt newGame: Nyt Spil - changelog: Changelog + changelog: Ændringsliste subreddit: Reddit importSavegame: Importér openSourceHint: Dette spil er open source! @@ -71,7 +70,13 @@ mainMenu: browser! Køb spillet eller download chrome for den fulde oplevelse. savegameLevel: Niveau <x> savegameLevelUnknown: Ukendt Niveau - savegameUnnamed: Unnamed + savegameUnnamed: Uden Navn + puzzleMode: Puzzle Tilstand + back: Tilbage + puzzleDlcText: Synes du det er det sjovt at gøre maskinerne mindre og mere + optimal? Få fat i DLC på Steam nu for mere sjov! + puzzleDlcWishlist: Wishlist den nu! + puzzleDlcViewNow: Se DLC dialogs: buttons: ok: OK @@ -84,7 +89,10 @@ dialogs: deleteGame: Jeg ved hvad jeg laver viewUpdate: Se Opdatering showUpgrades: Vis Opgraderinger - showKeybindings: Vis Keybindings + showKeybindings: Vis tastefunktioner + retry: Genprøv + continue: Fortsæt + playOffline: Spil Offline importSavegameError: title: Import Fejl text: "Importering af gemt spil fejlede:" @@ -96,9 +104,8 @@ dialogs: text: "Det lykkedes ikke at åbne dit gemte spil:" confirmSavegameDelete: title: Bekræft sletning - text: Are you sure you want to delete the following game?<br><br> - '<savegameName>' at level <savegameLevel><br><br> This can not be - undone! + text: Er du sikker på du vil slette dette spil?<br><br> '<savegameName>' på + niveau <savegameLevel><br><br> Dette kan ikke fortrydes! savegameDeletionError: title: Sletning fejlede text: "Det lykkedes ikke at slette dit gemte spil:" @@ -109,12 +116,12 @@ dialogs: title: Ændr Keybinding desc: Tryk på knappen du vil bruge, eller escape for at fortryde. resetKeybindingsConfirmation: - title: Nulstil keybindings - desc: Dette vil nulstille alle keybindings til deres standarder. Bekræft + title: Nulstil tastefunktioner + desc: Dette vil nulstille alle tastefunktioner til deres standarder. Bekræft venligst. keybindingsResetOk: - title: Keybindings nulstillet - desc: Keybindings er nulstillet til deres standarder! + title: Tastefunktioner nulstillet + desc: Tastefunktioner er nulstillet til deres standarder! featureRestriction: title: Demoversion desc: Du prøvede at bruge en funktion (<feature>) der ikke er tilgængelig i @@ -127,11 +134,10 @@ dialogs: title: Ny opdatering! desc: "Dette har ændret sig siden sidst du spillede:" upgradesIntroduction: - title: Få Opgraderinger - desc: Alle figurer du producerer kan blive brugt til at få opgraderinger - + title: Få Forbedringer + desc: Alle figurer du producerer kan blive brugt til at få forbedringer - <strong>Ødelæg ikke dine gamle fabrikker!</strong> - Opgraderingeringsvinduet kan findes i det øverste højre hjørne af - skærmen. + Forbedringsvinduet kan findes i det øverste højre hjørne af skærmen. massDeleteConfirm: title: Bekræft sletning desc: Du er ved at slette mange bygninger (<count> helt præcist)! Er du sikker @@ -142,7 +148,7 @@ dialogs: på at det er det du vil gøre? blueprintsNotUnlocked: title: Ikke tilgængeligt endnu - desc: Gennemfør Niveau 12 for at bruge arbejdstegninger! + desc: Gennemfør Niveau 12 for at bruge skabeloner! keybindingsIntroduction: title: Brugbare keybindings desc: "Dette spil har mange keybindings, som gør det lettere at bygge store @@ -154,11 +160,12 @@ dialogs: transportbånd.<br>" createMarker: title: Ny Markør - desc: Give it a meaningful name, you can also include a <strong>short - key</strong> of a shape (Which you can generate <link>here</link>) titleEdit: Rediger Markør + desc: Giv det et meningsfyldt navn. Du kan også inkludere en <strong> kort + nøgle</strong> af en figur (som du kan lave <link>her</link>) markerDemoLimit: - desc: Du kan kun lave to markører i demoen. Køb spillet for uendelige markører! + desc: Du kan kun lave to markører i demoen. Køb spillet for uendeligt mange + markører! exportScreenshotWarning: title: Eksporter skærmbillede desc: Du bad om at eksportere din fabrik som et skærmbillede. Bemærk at dette @@ -170,26 +177,89 @@ dialogs: vil klippe det? editSignal: title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the <strong>short key</strong> of a shape (Which you - can generate <link>here</link>) + descItems: "Vælg en standard figur:" + descShortKey: ... eller indtast <strong>kort nøgle</strong> af en figur (som du + kan lave <link>her</link>) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Omdøb gemt spil + desc: Du kan omdøbe dine gemte spil her. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Vejledning tilgængelig + desc: Der findes en vejldning som video for dette niveau, vil du se den? tutorialVideoAvailableForeignLanguage: title: Tutorial Available desc: There is a tutorial video available for this level, but it is only available in English. Would you like to watch it? + editConstantProducer: + title: Set Figur + puzzleLoadFailed: + title: Puslerne kunne ikke indlæses + desc: "Desværre kunne puslerne ikke indlæses:" + submitPuzzle: + title: Indsend pusle + descName: Giv dit pusle et navn + descIcon: "Venligst angiv en kort nøgle, som bliver vist som ikon af dit pusle + (Du kan lave nøgler <link>her</link>, eller vælge en af de + tilfældige forneden):" + placeholderName: Pusle Overskift + puzzleResizeBadBuildings: + title: Kan ikke ændre størrelse + desc: Du kan ikke lave området mindre fordi så vil nogle bygninger falde udenfor + området. + puzzleLoadError: + title: Dårlig Pusle + desc: "Puslet kunne ikke indlæses:" + offlineMode: + title: Offline tilstand + desc: Vi kan ikke forbinde til serverne og spillet kører i offline tilstand. + Venligst kontroler at du har en fungerende internet forbindelse. + puzzleDownloadError: + title: Download Fejl + desc: "Kunne ikke hente puslet:" + puzzleSubmitError: + title: Indsendelse fejl + desc: "Kunne ikke indsende dit pusle:" + puzzleSubmitOk: + title: Pusle offentliggjort + desc: Tilykke! Dit Pusle er nu offentliggjort and kan spilles af andre. Du kan + nu finde det under 'Mine Pusler'. + puzzleCreateOffline: + title: Offline tilstand + desc: Da du er offline kan du ikke gemme eller offentliggøre dit pusle. Vil du + fortsætte alligevel? + puzzlePlayRegularRecommendation: + title: Anbefaling + desc: Det <strong>anbefales stærkt</strong> at spille mindst til niveau 12 før + du forsøger Pusle DLC'en da du vil møde spil mekanik som du ikke er + introduceret til endnu. Vil du alligevel fortsætte? + puzzleShare: + title: Kort Nøgle Kopieret + desc: Den korte nøgle af Pusle (<key>)er kopieret til din udklipsholder! Den kan + sættes ind i Pusle menuen som adgangspunkt + puzzleReport: + title: Anmeld Pusle + options: + profane: Ukvemsord + unsolvable: Kan ikke løses + trolling: Trolling + puzzleReportComplete: + title: Tak for din tilbagemeldning! + desc: Puslet er øremærket. + puzzleReportError: + title: Tilbagemeldning fejlede + desc: "Din tilbagemeldning kunne ikke behandles:" + puzzleLoadShortKey: + title: Indtast kort nøgle + desc: Indtast den korte nøgle af puslet for at indlæse det. + puzzleDelete: + title: Slet Pusle? + desc: Er du helt sikker på du vil slette '<title>'? Dette kan ikke fortrydes! ingame: keybindingsOverlay: moveMap: Bevæg dig selectBuildings: Marker område stopPlacement: Stop placering - rotateBuilding: Roter bygning + rotateBuilding: Drej bygning placeMultiple: Placer flere reverseOrientation: Omvend retning disableAutoOrientation: Slå automatisk retning fra @@ -197,14 +267,15 @@ ingame: placeBuilding: Placer bygning createMarker: Lav Markør delete: Slet - pasteLastBlueprint: Sæt sidste arbejdstegning ind - lockBeltDirection: Aktiver bælteplanlægger + pasteLastBlueprint: Sæt sidste skabelon ind + lockBeltDirection: Aktiver båndplanlægger plannerSwitchSide: Vend planlægsningsside cutSelection: Klip copySelection: Kopier clearSelection: Ryd Selektion pipette: Pipette switchLayers: Skift Lag + clearBelts: Ryd bånd colors: red: Rød green: Grøn @@ -213,7 +284,7 @@ ingame: purple: Lilla cyan: Cyan white: Hvid - uncolored: Ingen farve + uncolored: Farveløs black: Sort buildingPlacement: cycleBuildingVariants: Tryk <key> for at vælge type. @@ -222,37 +293,37 @@ ingame: speed: Fart range: Rækkevidde storage: Opbevaring - oneItemPerSecond: 1 genstand / sekund - itemsPerSecond: <x> genstande / s + oneItemPerSecond: 1 figur / sekund + itemsPerSecond: <x> figurer / s itemsPerSecondDouble: (x2) - tiles: <x> flader + tiles: <x> fliser levelCompleteNotification: levelTitle: Niveau <level> completed: Klaret unlockText: <reward> er nu tilgængelig! buttonNextLevel: Næste Niveau notifications: - newUpgrade: En ny opgradering er tilgængelig! + newUpgrade: En ny forbedring er tilgængelig! gameSaved: Dit spil er gemt. - freeplayLevelComplete: Level <level> er blevet fuldført! + freeplayLevelComplete: Niveau <level> er blevet fuldført! shop: title: Opgraderinger - buttonUnlock: Opgrader + buttonUnlock: Forbedre tier: Trin <x> - maximumLevel: HØJESTE NIVEAU (Speed x<currentMult>) + maximumLevel: HØJESTE NIVEAU (Fart x<currentMult>) statistics: title: Statistikker dataSources: stored: title: Opbevaret - description: Viser mængden af opbevarede figurer i din centrale bygning. + description: Viser mængden af opbevarede figurer i dit centrale NAV. produced: title: Produceret description: Viser alle de figurer hele din fabrik producerer, inklusiv produkter brugt til videre produktion. delivered: title: Afleveret - description: Viser figurer som er afleveret til din centrale bygning. + description: Viser figurer som bliver afleveret til din centrale NAV. noShapesProduced: Ingen figurer er blevet produceret indtil videre. shapesDisplayUnits: second: <shapes> / s @@ -261,7 +332,7 @@ ingame: settingsMenu: playtime: Spilletid buildingsPlaced: Bygninger - beltsPlaced: Bælter + beltsPlaced: Bånd tutorialHints: title: Har du brug for hjælp? showHint: Vis hint @@ -270,12 +341,12 @@ ingame: cost: Pris waypoints: waypoints: Markører - hub: HUB - description: Venstreklik en markør for at hoppe til den, højreklik for at slette - den.<br><br>Tryk <keybinding> for at lave en markør på det nuværende - sted, eller <strong>højreklik</strong> for at lave en markør på det - valgte sted. - creationSuccessNotification: Markør er sat. + hub: NAV + description: Venstreklik på Markøren for at hoppe til det, højreklik for at + slette den.<br><br>Tryk <keybinding> for at lave en Markør på det + nuværende sted, eller <strong>højreklik</strong> for at lave en + Markør på det valgte sted. + creationSuccessNotification: Markøren er sat. shapeViewer: title: Lag empty: Tom @@ -283,29 +354,30 @@ ingame: interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Sæt en <strong>udvinder</strong> på toppen af - en<strong>cirkelfigur</strong> for at begynde produktion af den! - 1_2_conveyor: "Forbind udvinderen til din hub med et - <strong>transportbælte</strong>!<br><br>Tip: <strong>Tryk og - træk</strong> bæltet med din mus!" - 1_3_expand: "Dette er <strong>IKKE</strong> et idle game! Byg flere udvindere og - bælter for at færdiggøre målet hurtigere.<br><br>Tip: Hold - <strong>SKIFT</strong> for at sætte flere udvindere, og tryk - <strong>R</strong> for at rotere dem." - 2_1_place_cutter: "Now place a <strong>Cutter</strong> to cut the circles in two - halves!<br><br> PS: The cutter always cuts from <strong>top to - bottom</strong> regardless of its orientation." - 2_2_place_trash: The cutter can <strong>clog and stall</strong>!<br><br> Use a - <strong>trash</strong> to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place <strong>2 more cutters</strong> to speed - up this slow process!<br><br> PS: Use the <strong>0-9 - hotkeys</strong> to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! <strong>Build 4 - extractors</strong> and connect them to the hub.<br><br> PS: - Hold <strong>SHIFT</strong> while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the <strong>quad painter</strong> and get some + 1_1_extractor: Sæt en <strong>udvinder</strong> på toppen af en + <strong>cirkelfigur</strong> for at begynde produktion af den! + 1_2_conveyor: "Forbind udvinderen til dit NAV med et + <strong>transportbånd</strong>!<br><br>Tip: <strong>Tryk og + træk</strong> båndet med din mus!" + 1_3_expand: "Dette er <strong>IKKE</strong> et tomgangs spil! Byg flere + udvindere og transportbånd for at færdiggøre målet + hurtigere.<br><br>Tip: Hold <strong>SKIFT</strong> for at sætte + flere udvindere, og tryk <strong>R</strong> for at rotere dem." + 2_1_place_cutter: "Placer en <strong>klipper</strong> for at klippe cirklen i to + halvdele!<br><br> Bemærk: Klippet er altid lodret fra + <strong>top til bund</strong> uanset klipperens placering." + 2_2_place_trash: Klipperen kan <strong>stoppe til</strong>!<br><br> Brug + <strong>skraldespanden</strong> for at smide de (for tiden) + uønskede rester væk. + 2_3_more_cutters: "Godt gjort! Sæt yderelige <strong>2 klippere</strong> for at + sætte fart på den langsome process!<br><br> Bemærk: Brug + <strong>0-9 tasterne</strong> for hurtigere indvælge + bygningerne!" + 3_1_rectangles: "Nu skal vi have fat i firkanter! <strong>Byg 4 + udvindere</strong> og forbind dem til dit NAV.<br><br> Bemærk: + Hold <strong>SKIFT</strong> mens du trækker bånd - det aktiverer + båndplanlæggeren!" + 21_1_place_quad_painter: Placer <strong>quad painter</strong> and get some <strong>circles</strong>, <strong>white</strong> and <strong>red</strong> color! 21_2_switch_to_wires: Switch to the wires layer by pressing @@ -352,9 +424,50 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Pusle løst! + titleLike: "Klik på hjertet hvis du kunne lide puslet:" + titleRating: Hvor svært var pusket for dig? + titleRatingDesc: Din vurdering vil hjælpe mig i bedre anbefalinger i fremtiden + continueBtn: Fortsæt spillet + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Forfatter + shortKey: Kort nøgle + rating: Sværhedsgrad + averageDuration: Gnms. varighed + completionRate: Løsnings grad shopUpgrades: belt: - name: Bælter, Fordelere & Tuneller + name: Bånd, Fordelere & Tuneller description: Fart x<currentMult> → x<newMult> miner: name: Udvinding @@ -369,12 +482,12 @@ buildings: hub: deliver: Aflever toUnlock: for at få adgang til - levelShortcut: NIV - endOfDemo: End of Demo + levelShortcut: niveau + endOfDemo: Demo er slut belt: default: - name: Transportbælte - description: Transporterer figurer, hold og træk for at sætte flere. + name: Transportbånd + description: Transporterer figurer. Hold og træk for at placere flere. miner: default: name: Udvinder @@ -385,10 +498,10 @@ buildings: underground_belt: default: name: Tunnel - description: Laver tunneller under bygninger og bælter. + description: Laver tunneller under bygninger og bånd. tier2: name: Tunnel Trin II - description: Laver tunneller under bygninger og bælter. + description: Laver tunneller under bygninger og bånd. cutter: default: name: Klipper @@ -413,7 +526,7 @@ buildings: stacker: default: name: Stabler - description: Stabler begge figurer. Hvis de ikke kan sammensmeltes, så sættes + description: Samler begge figurer. Hvis de ikke kan sammensmeltes, så stables den højre figur oven på den venstre. mixer: default: @@ -430,23 +543,25 @@ buildings: name: Maler (Dobbelt) description: Farver figurerne fra venstre side med farven fra toppen. quad: - name: Maler (Quad) - description: Allows you to color each quadrant of the shape individually. Only - slots with a <strong>truthy signal</strong> on the wires layer - will be painted! + name: Maler (Firdobblet) + description: Farver særskilt hver firkant af figuren. Kun indgange med et + <strong>Sandt signal</strong> på signal laget bliver farvelagt! trash: default: name: Skraldespand description: Tillader input fra alle sider og ødelægger dem. For evigt. wire: default: - name: Energiledning - description: Lader dig transportere energi. + name: Ledning + description: Overfører signaler, som kan være figurer, farver eller Sand/Falsk + (1/0). Forskelligt farvede ledinger kan ikke forbindes. second: name: Ledning - description: Overfør signaler, som kan være elementer, farver eller boolsk - variabler (1 / 0). Forskellig farvet ledninger kan ikke - forbindes. + description: wire_description_missing + wire_tunnel: + default: + name: Lednings overgang + description: Muliggør to ledninger krydser uden at forbinde til hinanden. balancer: default: name: Balancer @@ -465,23 +580,19 @@ buildings: description: Splitter et transportbånd til to. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. - wire_tunnel: - default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Opbevaringsbuffer + description: Opbevarer overskudende figurer, op til dens kapacitet. Den venstre + udgang bruges fortinsvis. Kan bruges til overskuds regulering. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Konstant Signal + description: Sender et konstant signal, som kan være en figure, farve eller + Sand/Falsk (1/0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Kontakt + description: Sender et Sand/Falsk signal (1 / 0) i ledningslaget, som kan bruges + til at kontrolere en bygning, f.eks. en Maler. logic_gate: default: name: AND Gate @@ -489,16 +600,16 @@ buildings: color or boolean "1") not: name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + description: Sender "1", hvis indgangen er Falsk. ("Falsk" her er "0", ingen + Figur eller Farve) xor: name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + description: Sender "1", hvis en, men ikke begge, indgange er Sand. ("Sand" her + er "1", en Figur eller Farve) or: name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + description: Sender "1", hvis mindst en indgang er Sand. ("Sand" her er "1", en + Figur eller Farve) transistor: default: name: Transistor @@ -506,14 +617,13 @@ buildings: color or "1"). mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Fremsender den nedre indgang, hvis side indgangen er Sand. ("Sand" + her er "1", en Figur eller Farve). filter: default: name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + description: Forbind med et Signal for at matchende elementer føres til toppen + og resten til højre Signalet kan også være Sand/Falsk. display: default: name: Display @@ -557,30 +667,42 @@ buildings: name: Item Producer description: Available in sandbox mode only, outputs the given signal from the wires layer on the regular layer. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Klippe Figurer - desc: You just unlocked the <strong>cutter</strong>, which cuts shapes in half - from top to bottom <strong>regardless of its - orientation</strong>!<br><br>Be sure to get rid of the waste, or - otherwise <strong>it will clog and stall</strong> - For this purpose - I have given you the <strong>trash</strong>, which destroys - everything you put into it! + desc: Du har lige fået tilgang til <strong>Klipper</strong>, som skærer figurene + over i midten, fra top til bund, <strong>uanset hvordan klipperen + ligger</strong>! <br><br>Husk at fjerne uønskede rester fra den + anden side, ellers vil den <strong>tilstoppe og gå i stå</strong> - + Derfor har du nu også fået <strong>skraldespanden</strong>, som + fjerner alt der kommer i den. reward_rotater: - title: Rotation + title: Drejning desc: <strong>Drejeren</strong> er nu tilgængelig! Den drejer figurer 90 grader med uret. reward_painter: title: Maling - desc: "<strong>Maleren</strong> er nu tilgængelig - Få noget farve med - udvinderen (som du også gør med figurer) og kombiner det med en - farve i maleren for at farve dem!<br><br>PS: Hvis du er farveblind, - så er der en <strong>farveblindstilstand</strong> i + desc: "<strong>Maleren</strong> er nu tilgængelig - Få noget Farve med + udvinderen (lige som du gør med figurer) og kombiner det med en + farve i maleren for at farvelægge dem!<br><br>Bemærk: Hvis du er + farveblind, så er der en <strong>farveblindstilstand</strong> i indstillingerne!" reward_mixer: title: Farveblanding - desc: The <strong>mixer</strong> has been unlocked - It mixes two colors using - <strong>additive blending</strong>! + desc: <strong>Farveblanderen</strong> er nu tilgængeg - Den blander to Farver på + en <strong>additiv</strong> måde! reward_stacker: title: Stabler desc: Du kan du stable figurer med <strong>stableren</strong>! Begge inputs @@ -595,7 +717,7 @@ storyRewards: reward_tunnel: title: Tunnel desc: <strong>Tunnellen</strong> er nu tilgængelig - Du kan nu lave tuneller - under bælter og bygninger! + under bånd og bygninger! reward_rotater_ccw: title: Rotation mod uret desc: Du har fået adgang til en variant af <strong>drejeren</strong> - Den lader @@ -603,10 +725,10 @@ storyRewards: <strong>trykke 'T'</strong>! reward_miner_chainable: title: Kædeudvinder - desc: "You have unlocked the <strong>chained extractor</strong>! It can - <strong>forward its resources</strong> to other extractors so you - can more efficiently extract resources!<br><br> PS: The old - extractor has been replaced in your toolbar now!" + desc: "Du har nu adgang til <strong>kædeudvinderen</strong>! Den + <strong>videregiver sin produktion</strong> til tilstødende + udvindere så du nemmere kan udvinde alt!<br><br> Bemærk: Den gamle + udvinder er blevet erstattet af den i din værktøjsbjælke!" reward_underground_belt_tier_2: title: Tunnel Trin II desc: Du har fået adgang til en variant af <strong>tunnellen</strong> - Den har @@ -624,53 +746,53 @@ storyRewards: og bruger kun en farve i stedet for to. reward_storage: title: Opbevaringsbuffer - desc: You have unlocked the <strong>storage</strong> building - It allows you to - store items up to a given capacity!<br><br> It priorities the left - output, so you can also use it as an <strong>overflow gate</strong>! + desc: <strong>Opbevaringsbuffer</strong> er nu tilgænglig - Den kan opbevare + figurer op til dens kapacitet!<br><br> Den venstre udgang bruges + fortinsvis. Kan bruges til <strong>overskuds regulering</strong>.! reward_freeplay: title: Frit spil - desc: You did it! You unlocked the <strong>free-play mode</strong>! This means - that shapes are now <strong>randomly</strong> generated!<br><br> - Since the hub will require a <strong>throughput</strong> from now - on, I highly recommend to build a machine which automatically - delivers the requested shape!<br><br> The HUB outputs the requested - shape on the wires layer, so all you have to do is to analyze it and - automatically configure your factory based on that. + desc: Du gjorde det! Du har nu mulighed for <strong>Frit Spil Tilstand</strong>! + Det betyder at figuren er lavet <strong>tilfældigt</strong>!<br><br> + Da Navet kræver en stor <strong>gennemstrømning</strong> fra nu ad, + anbefaler jeg at du bygger en maskine som automatisk laver den + krævede figur!<br><br> Navet sender den ønskede figur på + Ledningslaget, så du skal "bare" analysere den og dermed styre din + maskine at levere det følgende reward_blueprints: - title: Arbejdstegninger + title: Skabeloner desc: Du kan nu <strong>kopiere og indsætte</strong> dele af din fabrik! Vælg et område (Hold CTRL, og træk med musen), og tryk 'C' for at kopiere det.<br><br>At sætte det ind er <strong>ikke gratis</strong>. Du - skal producere <strong>arbejdstegning figurer</strong> for at have - råd til det! (Dem du lige har leveret). + skal producere <strong>skabelon-figurer</strong> for at have råd til + det! (Dem du lige har leveret). no_reward: title: Næste niveau desc: "Dette niveau gav dig ingen belønninger, men det vil det næste! <br><br> - PS: Du må hellere lade være med at ødelægge din fabrik - Du får brug - for <strong>alle</strong> de figurer senere igen for at <strong>få - opgraderinger</strong>!" + Bemærk: Du må hellere lade være med at ødelægge din fabrik - Du får + brug for <strong>alle</strong> de figurer senere igen for at + <strong>få opgraderinger</strong>!" no_reward_freeplay: title: Næste niveau - desc: Tillykke! Forresten er mere indhold planlagt for den betalte version! + desc: Tillykke! reward_balancer: title: Balancer - desc: The multifunctional <strong>balancer</strong> has been unlocked - It can - be used to build bigger factories by <strong>splitting and merging - items</strong> onto multiple belts! + desc: Denne multifunktionelle <strong>Balancer</strong> er nu tilgænglig - Du + kan bygge større fabrikker fordi den kan både <strong> fordele og + samle</strong> figurer mellem flere transportbånd! reward_merger: - title: Compact Merger - desc: You have unlocked a <strong>merger</strong> variant of the - <strong>balancer</strong> - It accepts two inputs and merges them - into one belt! + title: Samler(kompakt) + desc: Du har nu fået tilgang til <strong>kompakt samler</strong> variationen af + <strong>Balancer</strong>. Den tager figurene fra to bånd og samler + på et! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the <strong>belt reader</strong>! It allows you to - measure the throughput of a belt.<br><br>And wait until you unlock - wires - then it gets really useful! + title: Båndlæser + desc: Du har nu åbnet op for <strong>Båndlæseren</strong>. Den måler + gennemstrømning på et bånd. <br><br>Bare vent til du har Ledninger - + så bliver den meget nyttig! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degrees <strong>rotater</strong>! - It allows - you to rotate a shape by 180 degrees (Surprise! :D) + desc: Du har nu åbnet op for <strong>Drejeren med 180°</strong>! - Nu kan du + dreje dine figurer med 180 grader (Overraskelse! :D) reward_display: title: Display desc: "You have unlocked the <strong>Display</strong> - Connect a signal on the @@ -702,13 +824,13 @@ storyRewards: regulary.<br><br> Whatever you choose, remember to have fun! reward_wires_painter_and_levers: title: Wires & Quad Painter - desc: "You just unlocked the <strong>Wires Layer</strong>: It is a separate + desc: 'You just unlocked the <strong>Wires Layer</strong>: It is a separate layer on top of the regular layer and introduces a lot of new mechanics!<br><br> For the beginning I unlocked you the <strong>Quad Painter</strong> - Connect the slots you would like to paint with on the wires layer!<br><br> To switch to the wires layer, press <strong>E</strong>. <br><br> PS: <strong>Enable hints</strong> in - the settings to activate the wires tutorial!" + the settings to activate the wires tutorial!"' reward_filter: title: Item Filter desc: You unlocked the <strong>Item Filter</strong>! It will route items either @@ -717,7 +839,7 @@ storyRewards: boolean signal (1 / 0) to entirely activate or disable it. reward_demo_end: title: End of Demo - desc: You have reached the end of the demo version! + desc: Det her er slutningen af Demo versionen! settings: title: Indstillinger categories: @@ -816,7 +938,7 @@ settings: enableTunnelSmartplace: title: Smarte Tunneller description: Aktiver for at placering af tunneller automatisk fjerner unødige - bælter. Dette gør igså at du kan trække tunneller så + båndfliser. Dette gør også at du kan trække tunneller så overskydende tunneller fjernes. vignette: title: Vignette @@ -830,67 +952,70 @@ settings: compactBuildingInfo: title: Kompakt Bygningsinfo description: Forkorter infobokse til bygninger ved kun at vise deres forhold. - Ellers er en beskrivelse og et billede også vist. + Ellers vises også en beskrivelse og et billede. disableCutDeleteWarnings: title: Slå klip/slet advarsler fra description: Slå advarselsboksene, der dukker op når mere end 100 ting slettes, fra. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Lydstyrke + description: Lydstyrken af lydeffekter musicVolume: - title: Music Volume - description: Set the volume for music + title: Musikstyrke + description: Lydstyrken af musiken. lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Lav kvalitets kort ressource + description: Forenkler fremtoningen af figurer på kortet når zommet tæt for at + øge spillets ydelse. Det ser også renere ud, så prøv det! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Slå net fra + description: Slå flise stregerne fra kan øge spillets ydelse. Det gør + fremtoningen renere! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Ryd Cursor med højre klik + description: Normalt slået til. Rydder cursorens indhold hvis du har en bygning + parat til placering. Hvis slået fra, så sletter den bygning med + højreclick også hvis noget er i cursoren. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Lav kvalitets texturer (Gremt) + description: Bruger lav kvalitet for at forbedre spillets ydelse. Det får + spillet at se gremt ud! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Vis klynge grænser + description: Spillet er inddelt i klynger á 16x16 fliser. Dette viser grænsen af + hver klynge. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Væg Udvinder på resursefelt + description: Normalt slået til. Hvis du bruger pipette mens du er på en + resurseområde, vælges en Udvinder. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Forenklede bånd (Gremt) + description: Skjuler enheder på bånd, med mindre du holder musen over dem, for + at øge spillets ydelse. Jeg anbefaler at ikke bruge dette, med + mindre din maskines ydelse kræver det. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Tilvælg mus panorering + description: Muliggør at flytte kortet ved føre musen til skærmens kanter. + Hastigheden afhænger af anden indstilling. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Zoom mod cursor + description: Hvis slået til så vil en zoom være mod musens placering, ellers er + det mod skærmens midt. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Kort ressourcer størrelse + description: Styrer størrelsen af figurer på oversigtskortet (når man zoomer + ud). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: - title: Keybindings + title: Tastaturfunktioner hint: "Tip: Husk at bruge CTRL, SKIFT og ALT! De byder på forskellige placeringsmuligheder." - resetKeybindings: Nulstil Keybindings + resetKeybindings: Nulstil tastaturfunktioner categoryLabels: general: Applikation ingame: Spil @@ -917,7 +1042,7 @@ keybindings: toggleFPSInfo: Slå FPS og Debug Info til/fra switchLayers: Skift lag exportScreenshot: Eksporter hele basen som et billede - belt: Transportbælte + belt: Transportbånd underground_belt: Tunnel miner: Udvinder cutter: Klipper @@ -931,9 +1056,9 @@ keybindings: rotateInverseModifier: "Modifier: Roter mod uret i stedet" cycleBuildingVariants: Gennemgå Varianter confirmMassDelete: Slet område - pasteLastBlueprint: Sæt sidste arbejdstegning ind + pasteLastBlueprint: Sæt sidste skabelon ind cycleBuildings: Gennemgå bygninger - lockBeltDirection: Slå bælteplanlægger til + lockBeltDirection: Slå båndplanlægger til switchDirectionLockSide: "Planner: Skift side" massSelectStart: Hold og træk for at starte massSelectSelectMultiple: Vælg flere områder @@ -941,11 +1066,11 @@ keybindings: massSelectCut: Klip område placementDisableAutoOrientation: Slå automatisk rotation fra placeMultiple: Bliv i placeringstilstand - placeInverse: Spejlvend automatisk bælteorientering + placeInverse: Spejlvend automatisk båndorientering menuClose: Luk Menu wire: Energiledning balancer: Balancer - storage: Storage + storage: Opbevaring constant_signal: Constant Signal logic_gate: Logic Gate lever: Switch (regular) @@ -959,10 +1084,15 @@ keybindings: comparator: Compare item_producer: Item Producer (Sandbox) copyWireValue: "Wires: Copy value below cursor" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: "Drejning: Peg Op" + rotateToDown: "Drejning: Peg Ned" + rotateToRight: "Drejning: Peg Højre" + rotateToLeft: "Drejning: Peg Venster" + constant_producer: Konstant udgiver + goal_acceptor: Mål kontrollant + block: Blok + massSelectClear: Ryd bånd + showShapeTooltip: Show shape output tooltip about: title: Om dette spil body: >- @@ -970,7 +1100,7 @@ about: href="https://github.com/tobspr" target="_blank">Tobias Springer</a> (det er mig).<br><br> - Hvis du vil kontribuere, tjek <a href="<githublink>" target="_blank">shapez.io på github</a>.<br><br> + Hvis du vil bidrage, tjek <a href="<githublink>" target="_blank">shapez.io på github</a>.<br><br> Dette spil ville ikke have været muligt uden det fremragende Discord-fælleskab omkring mine spil - Du burde virkelig deltage på <a href="<discordlink>" target="_blank">Discordserveren</a>!<br><br> @@ -981,58 +1111,59 @@ changelog: title: Changelog demo: features: - restoringGames: Genopretter gem - importingGames: Importerer gem + restoringGames: Genopretter gemte spil + importingGames: Importerer gemte spil oneGameLimit: Afgrænset til et gem - customizeKeybindings: Tilpasser Keybindings + customizeKeybindings: Tilpasse Tastaturfunktioner exportingBase: Eksportere hele basen som et billede settingNotAvailable: Ikke tilgængelig i demoen. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing <b>R</b>. - - Holding <b>CTRL</b> allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use <b>T</b> to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with <b>T</b> - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding <b>SHIFT</b> will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding <b>CTRL</b> allows to place multiple buildings. - - You can hold <b>ALT</b> to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. + - Det central NAV modtager alle figurer, ikke kun den aktuelle figur! + - Anstreng dig at fabrikker er modulære - det betaler sig! + - Undgå at bygge for tæt på navet - det bliver hurtigt rodet! + - Hvis stablingen ikke virker, så prøv at bytte de to indgange. + - Du kan vende båndplanlæggerens retning ved at trykke <b>R</b>. + - At holde <b>CTRL</b> muliggør trækning af bånd uden auto retningsændring. + - Forhold forbiver uændred hvis alle foredringer er nået samme niveau. + - Serial udførelse er mere effektive end parallel. + - Der vil låses op for endnu flere varianter af bygninger senere i spillet! + - Du kan bruge <b>T</b> for at skifte mellem varianter af en bygning. + - Symmetri er nøglen! + - Du kan væve mellem de forskellige tuneller. + - Prøv at lave dine fabrikker kompakte - det lønner sig i længden! + - Male værktøjet har en spejlversion - skift mellem dem med <b>T</b> + - Maksimum affektivitet opnås produktions forhold er afstemt. + - Ved højeste niveau vil 5 udvindere lige fylde et transportbånd. + - Glem ikke tuneller! + - Der er ikke behov for en lige fordeling for maksimum effektivitet. + - Hvis <b>SHIFT</b> holdes nede, aktiveres båndplanlæggeren, som gør det + meget nemmere at placere lange bånd. + - Klipperen skærer altid lodret, uanset placering. + - For at lave hvis skal alle tre farver blandes sammen. + - Opbevaringsbufferen fortrækker venstre udgang. + - Invester lidt tid i genbrugbare designs - det lønner sig! + - Ved at holde <b>CTRL</b> kan du placere placere flere bygninger. + - Med <b>ALT</b> holdt nede, vendes retning af båndet ved placering. + - Effektivitet er nøglen! + - Figure-felterne bliver mere komplex længere væk fra Centralen. + - Maskinerne har begrænset fart - del arbejdet op for effektivitet. + - Brug Fordeleren for at øge effektiviteten. + - Organisation er vigtig. Undgå for mange bånd der krydser hinanden. + - Plan i forvejen, eller det bliver en gang rod! + - undlad at slette dine gamle maskiner! Du behover dem for figurer til + Forbedringer. + - Prøv at komme til niveau 20 inden du søger om hjælp! + - Undgå at gøre det kompliceret - enkelhed kan komme langt. + - Det kan være at at du skal genbruge en maskine senere. Lav maskinerne så + de er nemme at genbruge. + - Nogle gange kan du finde en ønsket figur på kortet, uden at behove lave + den med stackere. + - En fuld vindmølle-figur findes ikke på kortet. + - Fervelæg figurere inden du skærer dem op for bedre effektivitet. - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use <b>CTRL</b> + Click to select an area. + - Lav en seperat maskine for skabelon-figuren. De er vigtige for moduler. + - Kig tæt på Farveblander ikonet. Det svarer på farve spørgsmål. + - Husk <b>CTRL</b> + museklick for at indvælge et område. - Building too close to the hub can get in the way of later projects. - The pin icon next to each shape in the upgrade list pins it to the screen. - Mix all primary colors together to make white! @@ -1048,3 +1179,88 @@ tips: - Press F4 to show your FPS and Tick Rate. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-de.yaml b/translations/base-de.yaml index f3478dae..04b15137 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -5,11 +5,15 @@ steamPage: intro: >- Du magst Automatisierungsspiele? Dann bist du hier genau richtig! - shapez.io ist ein entspanntes Spiel, in dem du Fabriken zur automatisierten Produktion von geometrischen Formen bauen musst. + Shapez.io ist ein entspanntes Spiel, in dem du Fabriken zur automatisierten Produktion von geometrischen Formen bauen musst. - Mit steigendem Level werden die Formen immer komplexer, und du musst dich auf der unendlich großen Karte ausbreiten. Das ist noch nicht alles, denn du musst exponentiell mehr produzieren, um die Anforderungen zu erfüllen - Da hilft nur skalieren! + Mit steigendem Level werden die Formen immer komplexer und du musst dich auf der unendlich großen Karte ausbreiten. - Während du am Anfang nur Formen verarbeitest, musst du diese später auch einfärben - Dafür musst du Farben extrahieren und mischen! Der Kauf des Spiels auf Steam gibt dir Zugriff auf die Vollversion, aber du kannst auch zuerst die Demo auf shapez.io spielen und dich später entscheiden! + Das ist noch nicht alles, denn du musst exponentiell mehr produzieren, um die Anforderungen zu erfüllen - Da hilft nur skalieren! + + Während du am Anfang nur Formen verarbeitest, müssen diese später auch eingefärbt werden. Dafür musst du Farben extrahieren und mischen! + + Der Kauf des Spiels auf Steam gibt dir Zugriff auf die Vollversion, aber du kannst auch zuerst die Demo auf shapez.io spielen und dich später entscheiden! what_others_say: Was andere über shapez.io sagen nothernlion_comment: This game is great - I'm having a wonderful time playing, and time has flown by. @@ -21,6 +25,7 @@ steamPage: global: loading: Laden error: Fehler + loggingIn: Einloggen thousandsDivider: . decimalSeparator: "," suffix: @@ -50,7 +55,7 @@ global: shift: UMSCH space: LEER demoBanners: - title: Demo-Version + title: Demoversion intro: Kauf die Vollversion für alle Features! mainMenu: play: Spielen @@ -65,10 +70,78 @@ mainMenu: madeBy: Ein Spiel von <author-link> browserWarning: Sorry, aber das Spiel wird in deinem Browser langsamer laufen! Kaufe die Vollversion oder verwende Google Chrome für die beste - Erfahrung! + Erfahrung. savegameLevel: Level <x> savegameLevelUnknown: Unbekanntes Level savegameUnnamed: Unbenannt + puzzleMode: Puzzlemodus + back: Zurück + puzzleDlcText: Du hast Spaß daran, deine Fabriken zu optimieren und effizienter + zu machen? Hol dir das Puzzle-DLC auf Steam für noch mehr Spaß! + puzzleDlcWishlist: Jetzt zur Wunschliste hinzufügen! + puzzleDlcViewNow: DLC anzeigen +puzzleMenu: + play: Spielen + edit: Bearbeiten + title: Puzzlemodus + createPuzzle: Puzzle erstellen + loadPuzzle: Laden + reviewPuzzle: Überprüfen & Veröffentlichen + validatingPuzzle: Puzzle wird überprüft + submittingPuzzle: Puzzle wird veröffentlicht + noPuzzles: Hier gibt es bisher noch keine Puzzles. + dlcHint: > + DLC schon gekauft? Stelle sicher, dass es aktiviert ist, indem du in der + Steam-Bibliothek shapez.io rechtsklickst und es unter Eigenschaften > + Zusatzinhalte (DLC) aktivierst. + categories: + levels: Levels + new: Neu + top-rated: Am besten bewertet + mine: Meine Puzzles + easy: Einfach + medium: Mittel + hard: Schwierig + completed: Abgeschlossen + official: Vorgestellt + trending: Heute beliebt + trending-weekly: Diese Woche beliebt + categories: Kategorien + difficulties: Nach Schwierigkeit + account: Meine Puzzles + search: Suche + difficulties: + easy: Einfach + medium: Mittel + hard: Schwer + unknown: Unbewertet + validation: + title: Ungültiges Puzzle + noProducers: Bitte platziere einen Itemproduzent! + noGoalAcceptors: Bitte platziere einen Zielakzeptor! + goalAcceptorNoItem: Ein oder mehrere Zielakzeptoren haben noch kein zugewiesenes + Item. Beliefere sie mit einer Form, um ein Ziel zu setzen. + goalAcceptorRateNotMet: Ein oder mehrere Zielakzeptoren bekommen nicht genügend + Items. Stelle sicher, dass alle ihre Indikatoren grün leuchten. + buildingOutOfBounds: Ein oder mehrere Gebäude befinden sich außerhalb des + bebaubaren Bereichs. Vergrößere den Bereich oder entferne die + Gebäude. + autoComplete: Dein Puzzle schließt sich selbst ab! Bitte stelle sicher, dass + deine Itemproduzenten nicht direkt an deine Zielakzeptoren liefern. + search: + action: Suchen + placeholder: Gib einen Puzzle- oder Autorennamen ein + includeCompleted: Gelöst einbeziehen + difficulties: + any: Beliebige Schwierigkeit + easy: Einfach + medium: Mittel + hard: Schwierig + durations: + any: Beliebige Dauer + short: Kurz (< 2 Min) + medium: Normal + long: Lang (> 10 Min) dialogs: buttons: ok: OK @@ -81,7 +154,10 @@ dialogs: deleteGame: Ich weiß, was ich tue viewUpdate: Update anzeigen showUpgrades: Upgrades anzeigen - showKeybindings: Kürzel anzeigen + showKeybindings: Hotkeys anzeigen + retry: Erneut versuchen + continue: Fortsetzen + playOffline: Offline spielen importSavegameError: title: Importfehler text: "Fehler beim Importieren deines Speicherstands:" @@ -113,9 +189,9 @@ dialogs: title: Tastenbelegung zurückgesetzt desc: Die Tastenbelegung wurde auf den Standard zurückgesetzt! featureRestriction: - title: Demo-Version + title: Demoversion desc: Du hast ein Feature benutzt (<feature>), welches nicht in der Demo - enthalten ist. Erwerbe die Vollversion für das volle Erlebnis! + enthalten ist. Erwerbe die Vollversion für das ganze Erlebnis! oneSavegameLimit: title: Begrenzte Speicherstände desc: Du kannst in der Demo nur einen Speicherstand haben. Bitte lösche den @@ -125,9 +201,10 @@ dialogs: desc: "Hier sind die Änderungen, seitdem du das letzte Mal gespielt hast:" upgradesIntroduction: title: Upgrades freischalten - desc: Viele deiner Formen können noch benutzt werden, um Upgrades freizuschalten - - <strong>Zerstöre deine alten Fabriken nicht!</strong> Den - Upgrade-Tab findest du oben rechts im Bildschirm. + desc: Viele deiner Formen können noch benutzt werden, um Upgrades + freizuschalten, also <strong>zerstöre deine alten Fabriken + nicht!</strong> Den Upgrade-Tab findest du oben rechts im + Bildschirm. massDeleteConfirm: title: Löschen bestätigen desc: Du löscht viele Gebäude (<count> um genau zu sein)! Bist du dir sicher? @@ -147,25 +224,27 @@ dialogs: desc: >- Dieses Spiel hat viele Hotkeys, die den Bau von Fabriken vereinfachen und beschleunigen. Hier sind ein paar Beispiele, aber - prüfe am besten die - <strong>Tastenbelegung-Einstellungen</strong>!<br><br> + prüfe am besten die <strong>Tastenbelegung</strong> in den + Einstellungen!<br><br> <code class='keybinding'>STRG</code> + Ziehen: Wähle Bereich aus.<br> <code class='keybinding'>UMSCH</code>: Halten, um mehrere Gebäude zu platzieren.<br> <code class='keybinding'>ALT</code>: Invertiere die Platzierungsrichtung der Fließbänder.<br> createMarker: - title: Neuer Marker - titleEdit: Marker bearbeiten + title: Neue Markierung + titleEdit: Markierung bearbeiten desc: Gib ihm einen griffigen Namen. Du kannst auch den - <strong>Kurz-Code</strong> einer Form eingeben (Welchen du - <link>hier</link> generieren kannst). + <strong>Kurzschlüssel</strong> einer Form eingeben + (<link>Hier</link> geht es zum Generator). editSignal: title: Signal setzen descItems: "Wähle ein vordefiniertes Item:" - descShortKey: ... oder gib den <strong>Kurz-Code</strong> einer Form an (Welchen - du <link>hier</link> generieren kannst). + descShortKey: ... oder gib den <strong>Kurzschlüssel</strong> einer Form an + (<link>Hier</link> geht es zum Generator). + editConstantProducer: + title: Item wählen markerDemoLimit: - desc: Du kannst nur 2 Marker in der Demo benutzen. Hole dir die Vollversion, um - unendlich viele Marker zu erstellen! + desc: Du kannst nur 2 Markierungen in der Demo benutzen. Hole dir die + Vollversion, um unbegrenzt viele Markierungen zu setzen! exportScreenshotWarning: title: Bildschirmfoto exportieren desc: Hier kannst du ein Bildschirmfoto von deiner ganzen Fabrik erstellen. Für @@ -176,15 +255,81 @@ dialogs: desc: Hier kannst du deinen Speicherstand umbenennen. tutorialVideoAvailable: title: Tutorial verfügbar - desc: Für dieses Level ist ein Tutorial-Video verfügbar. Willst du es anschauen? + desc: Für dieses Level ist ein Anleitungsvideo verfügbar. Willst du es + anschauen? tutorialVideoAvailableForeignLanguage: title: Tutorial verfügbar - desc: Für dieses Level ist ein Tutorial-Video verfügbar, allerdings nur auf + desc: Für dieses Level ist ein Anleitungsvideo verfügbar, allerdings nur auf Englisch. Willst du es trotzdem anschauen? + puzzleLoadFailed: + title: Puzzles konnten nicht geladen werden + desc: "Leider konnten die Puzzles nicht geladen werden:" + submitPuzzle: + title: Puzzle veröffentlichen + descName: "Gib deinem Puzzle einen Namen:" + descIcon: "Bitte gib einen eindeutigen Kurzschlüssel ein, der als Symbol für + dein Puzzle genutzt wird (<link>Hier</link> geht es zum Generator + oder wähle unten einen der zufälligen Vorschläge):" + placeholderName: Puzzlename + puzzleResizeBadBuildings: + title: Größenänderung nicht möglich + desc: Du kannst die Zone nicht weiter verkleinern, da ansonsten einige Gebäude + außerhalb der erlaubten Zone liegen würden. + puzzleLoadError: + title: Fehlerhaftes Puzzle + desc: "Das Puzzle konnte nicht geladen werden:" + offlineMode: + title: Offlinemodus + desc: Die Server konnten nicht erreicht werden, daher läuft das Spiel im + Offlinemodus. Bitte stelle sicher, dass du eine aktive + Internetverbindung hast. + puzzleDownloadError: + title: Downloadfehler + desc: "Der Download des Puzzles ist fehlgeschlagen:" + puzzleSubmitError: + title: Übermittlungsfehler + desc: "Das Puzzle konnte nicht eingereicht werden:" + puzzleSubmitOk: + title: Puzzle veröffentlicht + desc: Herzlichen Glückwunsch! Dein Puzzle wurde veröffentlicht und kann nun von + anderen gespielt werden. Du kannst es jetzt im Bereich "Meine + Puzzles" finden. + puzzleCreateOffline: + title: Offlinemodus + desc: Da du offline bist, kannst du dein Puzzle nicht speichern und/oder + veröffentlichen. Möchtest du trotzdem fortfahren? + puzzlePlayRegularRecommendation: + title: Empfehlung + desc: Ich empfehle dir <strong>sehr</strong>, bis Level 12 zu spielen, bevor du + dich an das Puzzle-DLC wagst. Du stößt sonst möglicherweise auf dir + noch nicht bekannte Mechaniken. Möchtest du trotzdem fortfahren? + puzzleShare: + title: Kurzschlüssel kopiert + desc: Der Kurzschlüssel des Puzzles (<key>) wurde in die Zwischenablage kopiert! + Dieser kann im Puzzlemenü genutzt werden, um das Puzzle zu laden. + puzzleReport: + title: Puzzle melden + options: + profane: Missbrauch + unsolvable: Nicht lösbar + trolling: Trolling + puzzleReportComplete: + title: Danke für dein Feedback! + desc: Das Puzzle wurde vermerkt. + puzzleReportError: + title: Melden fehlgeschlagen + desc: "Deine Meldung konnte nicht verarbeitet werden:" + puzzleLoadShortKey: + title: Kurzschlüssel eingeben + desc: Trage einen Kurzschlüssel ein, um das Puzzle zu laden. + puzzleDelete: + title: Puzzle löschen? + desc: Bist du sicher, dass du '<title>' löschen möchtest? Dies kann nicht + rückgängig gemacht werden! ingame: keybindingsOverlay: moveMap: Bewegen - selectBuildings: Areal markieren + selectBuildings: Bereich markieren stopPlacement: Platzierung stoppen rotateBuilding: Gebäude rotieren placeMultiple: Mehrere platzieren @@ -192,13 +337,14 @@ ingame: disableAutoOrientation: Auto-Orientierung deaktivieren toggleHud: HUD-Sichtbarkeit an/aus placeBuilding: Gebäude platzieren - createMarker: Marker erstellen + createMarker: Markierung erstellen delete: Löschen pasteLastBlueprint: Letzte Blaupause einfügen lockBeltDirection: Bandplaner aktivieren plannerSwitchSide: "Planer: Seite wechseln" cutSelection: Ausschneiden copySelection: Kopieren + clearBelts: Fließbänder räumen clearSelection: Auswahl aufheben pipette: Pipette switchLayers: Ebenen wechseln @@ -213,8 +359,8 @@ ingame: black: Schwarz uncolored: Grau buildingPlacement: - cycleBuildingVariants: Drücke <key> zum Wechseln - hotkeyLabel: "Taste: <key>" + cycleBuildingVariants: Drücke <key> zum Wechseln. + hotkeyLabel: "Hotkey: <key>" infoTexts: speed: Geschw. range: Reichweite @@ -222,7 +368,7 @@ ingame: oneItemPerSecond: 1 Item / s itemsPerSecond: <x> Items / s itemsPerSecondDouble: (x2) - tiles: <x> Felder + tiles: <x> Kacheln levelCompleteNotification: levelTitle: Level <level> completed: Abgeschlossen @@ -265,13 +411,13 @@ ingame: blueprintPlacer: cost: Kosten waypoints: - waypoints: Marker + waypoints: Markierungen hub: Hub - description: Linksklick auf einen Marker, um dort hinzugelangen. Rechtsklick, um - ihn zu löschen.<br><br>Drücke <keybinding>, um einen Marker aus - deinem Blickwinkel, oder <strong>rechtsklicke</strong>, um einen - Marker auf der ausgewählten Position zu erschaffen. - creationSuccessNotification: Marker wurde erstellt. + description: Linksklick auf eine Markierung, um dort hinzugelangen. Rechtsklick, + um sie zu löschen.<br><br>Drücke <keybinding>, um eine Markierung + aus deinem Blickwinkel, oder <strong>rechtsklicke</strong>, um eine + Markierung auf der ausgewählten Position zu erschaffen. + creationSuccessNotification: Markierung wurde erstellt. shapeViewer: title: Ebenen empty: Leer @@ -279,47 +425,48 @@ ingame: interactiveTutorial: title: Einführung hints: - 1_1_extractor: Platziere einen <strong>Extrahierer</strong> auf der + 1_1_extractor: Platziere einen <strong>Extraktor</strong> auf der <strong>Kreisform</strong>, um sie zu extrahieren! - 1_2_conveyor: "Verbinde den Extrahierer mit einem <strong>Fließband</strong> und + 1_2_conveyor: "Verbinde den Extraktor mit einem <strong>Fließband</strong> und schließe ihn am Hub an!<br><br>Tipp: <strong>Drücke und ziehe</strong> das Fließband mit der Maus!" - 1_3_expand: "Dies ist <strong>KEIN</strong> Idle-Game! Baue mehr Extrahierer und + 1_3_expand: "Dies ist <strong>KEIN</strong> Idle-Game! Baue mehr Extraktoren und Fließbänder, um das Ziel schneller zu erreichen.<br><br>Tipp: Halte <strong>UMSCH</strong>, um mehrere Gebäude zu platzieren und nutze <strong>R</strong>, um sie zu rotieren." - 2_1_place_cutter: "Platziere nun einen <strong>Schneider</strong> um die Kreise - in zwei Hälften zu zerteilen.<br><br> Übrigens: Der Schneider - schneidet immer von <strong>oben nach unten</strong>, unabhängig - seiner Orientierung!" + 2_1_place_cutter: "Platziere nun einen <strong>Schneider</strong>, um die Kreise + zu halbieren.<br><br> Übrigens: Der Schneider teilt Items immer + von <strong>oben nach unten</strong>, unabhängig von seiner + Orientierung!" 2_2_place_trash: Der Schneider kann <strong>verstopfen</strong>!<br><br>Benutze einen <strong>Mülleimer</strong> um den aktuell (!) nicht benötigten Rest loszuwerden. - 2_3_more_cutters: "Gut gemacht! Platziere noch <strong>2 mehr Schneider</strong> - um das ganze zu beschleunigen.<br><br> Übrigens: Benutze die - <strong>Tasten 0-9</strong> um Gebäude schneller auszuwählen!" - 3_1_rectangles: "Lass uns ein paar Quadrate extrahieren! <strong>Baue 4 - Extrahierer</strong> und verbinde sie mit deinem HUB.<br><br> - PS: Halte <strong>SHIFT</strong> während du ein Fließband + 2_3_more_cutters: "Gut gemacht! Platziere noch <strong>zwei andere + Schneider</strong> um das Ganze zu beschleunigen.<br><br> + Übrigens: Benutze die <strong>Hotkeys 0-9</strong> um Gebäude + schneller auszuwählen!" + 3_1_rectangles: "Lass uns ein paar Quadrate extrahieren! <strong>Baue vier + Extraktoren</strong> und verbinde sie mit deinem Hub.<br><br> + PS: Halte <strong>SHIFT</strong>, während du ein Fließband ziehst, um den Fließbandplaner zu aktivieren!" - 21_1_place_quad_painter: Platzier den <strong>Vierfach-Färber</strong> und - organisier ein paar <strong>Kreise</strong>, + 21_1_place_quad_painter: Platziere den <strong>vierfachen Färber</strong> und + organisiere ein paar <strong>Kreise</strong>, sowie <strong>weiße</strong> und <strong>rote</strong> Farbe! - 21_2_switch_to_wires: Wechsle in die Wires-Ebene indem du <strong>E</strong> + 21_2_switch_to_wires: Wechsle in die Wires-Ebene, indem du <strong>E</strong> drückst!<br><br> Verbinde danach <strong>alle vier Eingänge</strong> mit Signalkabeln! 21_3_place_button: Perfekt! Platziere jetzt einen <strong>Schalter</strong> und verbinde ihn mit Signalkabeln. - 21_4_press_button: "Drücke den Schalter damit er ein <strong>wahres - Signal</strong> ausgibt, und damit den Färber aktiviert.<br><br> - PS: Du musst nicht alle Eingänge verbinden! Probiere mal nur 2 - aus." + 21_4_press_button: "Drücke den Schalter, damit er ein <strong>wahres + Signal</strong> ausgibt und den Färber aktiviert.<br><br> PS: Du + musst nicht alle Eingänge verbinden! Probiere es auch mal mit + zwei." connectedMiners: - one_miner: Ein Extrahierer - n_miners: <amount> Extrahierer + one_miner: Ein Extraktor + n_miners: <amount> Extraktoren limited_items: Begrenzt auf <max_throughput> watermark: - title: Demo-Version + title: Demoversion desc: Klicke hier, um die Vorteile der Vollversion zu sehen! get_on_steam: Zur Vollversion standaloneAdvantages: @@ -332,30 +479,72 @@ ingame: buildings: title: 18 Neue Gebäude desc: Automatisiere deine Fabrik! + achievements: + title: Errungenschaften + desc: Hol sie dir alle! upgrades: title: ∞ Upgrade-Stufen desc: Diese Demo hat nur 5! markers: - title: ∞ Marker + title: ∞ Markierungen desc: Verliere nie den Überblick! wires: title: Wires-Ebene desc: Eine ganz neue Dimension! darkmode: title: Dark-Mode - desc: Werde nicht mehr geblendet! + desc: Gönn deinen Augen eine Auszeit! support: title: Unterstütze Mich - desc: Ich entwickle in meiner Freizeit! - achievements: - title: Errungenschaften - desc: Hol sie dir alle! + desc: Ich entwickle das Spiel in meiner Freizeit! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Breite + zoneHeight: Höhe + trimZone: Zuschneiden + clearItems: Items löschen + clearBuildings: Gebäude löschen + resetPuzzle: Puzzle zurücksetzen + share: Teilen + report: Melden + puzzleEditorControls: + title: Puzzle-Editor + instructions: + - 1. Platziere einen <strong>Itemproduzenten</strong> um Formen und + Farben für den Spieler bereitzustellen + - 2. Produziere eine oder mehrere Formen, die der Spieler herstellen + soll und liefere diese zu einem oder mehreren + <strong>Zielakzeptoren</strong> + - 3. Sobald ein Zielakzeptor eine Form für eine gewisse Zeit erhält, + <strong>speichert dieser sie als Ziel</strong> (Angezeigt durch + den <strong>grünen Punkt</strong>). + - 4. Klicke auf das <strong>Schloss</strong>, um ein Gebäude für den + Spieler zu sperren. + - 5. Sobald du auf Überprüfen gedrückt hast, wird dein Puzzle + `validiert und du kannst es veröffentlichen. + - 6. Bei der Freigabe werden <strong>alle Gebäude entfernt</strong>. + Ausgenommen sind die Produzenten und Akzeptoren. Den Rest soll der + Spieler schließlich selbst herausfinden :) + puzzleCompletion: + title: Puzzle geschafft! + titleLike: "Klicke auf das Herz, wenn dir das Puzzle gefallen hat:" + titleRating: Wie schwierig fandest du das Puzzle? + titleRatingDesc: Deine Bewertung hilft mir, in Zukunft bessere Vorschläge zu machen + continueBtn: Weiterspielen + menuBtn: Menü + nextPuzzle: Nächstes Puzzle + puzzleMetadata: + author: Ersteller + shortKey: Kurzschlüssel + rating: Schwierigkeitsgrad + averageDuration: Durchschnittliche Dauer + completionRate: Abschlussrate shopUpgrades: belt: name: Fließbänder, Verteiler & Tunnel description: Geschw. x<currentMult> → x<newMult> miner: - name: Extrahierer + name: Extraktor description: Geschw. x<currentMult> → x<newMult> processors: name: Schneider, Rotierer & Stapler @@ -375,10 +564,10 @@ buildings: description: Transportiert Items. Halte und ziehe, um mehrere zu platzieren. miner: default: - name: Extrahierer + name: Extraktor description: Platziere ihn auf einer Form oder Farbe, um sie zu extrahieren. chainable: - name: Extrahierer (Kette) + name: Extraktor (Kette) description: Platziere ihn auf einer Form oder Farbe, um sie zu extrahieren. Kann verkettet werden. underground_belt: @@ -530,9 +719,9 @@ buildings: reader: default: name: Fließbandkontrolle - description: Misst den gemittelten Durchsatz des Fließbandes. Gibt zuätzlich den - zuletzt passierten Gegenstand auf der Wires-Ebene aus (sobald - freigeschaltet). + description: Misst den gemittelten Durchsatz des Fließbandes. Gibt zusätzlich + den zuletzt passierten Gegenstand auf der Wires-Ebene aus + (sobald freigeschaltet). analyzer: default: name: Formanalyse @@ -563,18 +752,30 @@ buildings: rechten Eingang. item_producer: default: - name: Item-Produzent + name: Itemproduzent description: Nur im Sandkastenmodus verfügbar. Gibt das Signal aus der Wires-Ebene als Item aus. + constant_producer: + default: + name: Itemproduzent + description: Gibt dauerhaft ein Form oder eine Farbe aus. + goal_acceptor: + default: + name: Zielakzeptor + description: Liefere gleichartige Formen, um diese als Ziel festzulegen. + block: + default: + name: Sperrblock + description: Ermöglicht das Blockieren einer Kachel. storyRewards: reward_cutter_and_trash: title: Formen zerschneiden desc: Du hast gerade den <strong>Schneider</strong> freigeschaltet, der Formen - in zwei Hälften schneidet, von oben nach unten, <b>unabhängig der - Orientierung</b>!<br><br>Achte darauf, den Abfall loszuwerden, oder - <b>er wird verstopfen und blockieren</b> - Zu diesem Zweck habe ich - dir den <strong>Mülleimer</strong> gegeben, der alles entsorgt, was - du hineintust! + vertikal halbiert, <b>unabhängig von seiner + Orientierung</b>!<br><br> Achte darauf, die Überreste loszuwerden, + sonst <b>verstopft und blockiert er</b> - Zu diesem Zweck habe ich + dir den <strong>Mülleimer</strong> gegeben. Er entsorgt alles, was + du ihm fütterst! reward_rotater: title: Rotieren desc: Der <strong>Rotierer</strong> wurde freigeschaltet! Er rotiert Formen im @@ -598,25 +799,25 @@ storyRewards: <strong>gestapelt</strong>. reward_balancer: title: Verteiler - desc: Der multifunktionale <strong>Verteiler</strong> wurde freigeschaltet! Er - kann benutzt werden, um größere Fabriken zu bauen, indem Fließbänder - <strong>aufgeteilt oder zusammengelegt</strong> werden! + desc: Der multifunktionale <strong>Verteiler</strong> wurde freigeschaltet! + Damit kannst du nun endlich größere Fabriken bauen. Er kann + Fließbänder <strong>aufteilen oder zusammenlegen</strong>! reward_tunnel: title: Tunnel desc: Der <strong>Tunnel</strong> wurde freigeschaltet! Du kannst Items nun unter Gebäuden oder Fließbändern hindurchleiten. reward_rotater_ccw: - title: Gegen UZS Rotieren + title: Gegen den UZS rotieren desc: Du hast eine zweite Variante des <strong>Rotierers</strong> freigeschaltet! Damit können Items gegen den Uhrzeigensinn gedreht werden. Wähle den Rotierer aus und <strong>drücke 'T', um auf verschiedene Varianten zuzugreifen</strong>. reward_miner_chainable: - title: Extrahierer (Kette) - desc: "Du hast den <strong>Kettenextrahierer</strong> freigeschaltet! Er kann - seine Ressourcen an andere Extrahierer - <strong>weiterleiten</strong>. <br><br> PS: Der alte Extrahierer - wurde jetzt in deiner Symbolleiste ersetzt!" + title: Extraktor (Kette) + desc: "Du hast den <strong>Kettenextraktor</strong> freigeschaltet! Er kann + seine Ressourcen an andere Extraktoren <strong>weitergeben</strong>. + <br><br> PS: Der alte Extraktor wurde jetzt in deiner Symbolleiste + ersetzt!" reward_underground_belt_tier_2: title: Tunnel Stufe II desc: Du hast eine neue Variante des <strong>Tunnels</strong> freigeschaltet! @@ -675,8 +876,8 @@ storyRewards: <strong>vierfachen Färber</strong>. Schließe die Eingänge, mit denen du die Quadranten färben möchtest, an ein Signalkabel auf der Wires-Ebene an!<br><br> Mit <strong>E</strong> wechselst du zwischen - den Ebenen. <br><br>PS: <strong>Aktiviere Hinweise</strong> in den - Einstellungen um das Tutorial anzuzeigen!" + den Ebenen. <br><br>PS: <strong>Aktiviere die Hinweise</strong> in + den Einstellungen, um das Tutorial anzuzeigen!" reward_filter: title: Itemfilter desc: Du hast den <strong>Itemfilter</strong> freigeschaltet! Items, die dem @@ -705,7 +906,7 @@ storyRewards: ODER-, XODER- und NICHT-Operationen ausführen.<br><br> Als Sahnehäubchen obendrauf stelle ich dir noch einen <strong>Transistor</strong> zur Verfügung. Houston, wir sind - Turing-vollständig! + turingmächtig! reward_virtual_processing: title: Virtuelle Verarbeitung desc: "Du hast gerade eine Menge neue Gebäude freigeschaltet! Mit ihnen kannst @@ -717,8 +918,8 @@ storyRewards: beliebige Form am Hub abgreift und herstellt. (Probiere es wenigstens!)<br><br> - Werde kreativ und lasse dir etwas Cooles einfallen, das du auf der Wires-Ebene umsetzen kannst. (Und teile es - auf dem Discord!)<br><br> - Spiele dich weiter durch die Level. Auf - deine Art!<br><br> Das Wichstigste an deiner Entscheidung ist: + auf dem Discord!)<br><br> - Spiele dich weiter durch die Levels. Auf + deine Art!<br><br> Das Wichtigste an deiner Entscheidung ist: Vergiss nicht, dabei Spaß zu haben!" no_reward: title: Nächstes Level @@ -731,14 +932,14 @@ storyRewards: desc: Du hast das nächste Level freigeschaltet! reward_freeplay: title: Freies Spiel - desc: Du hast es geschafft! Du bist im <strong>Freispiel-Modus</strong> + desc: Du hast es geschafft! Du bist im <strong>Freispielmodus</strong> angekommen! Das bedeutet, dass die abzuliefernden Formen jetzt <strong>zufällig</strong> erzeugt werden!<br><br> Da der Hub ab jetzt einen bestimmten <strong>Durchsatz</strong> benötigt, empfehle ich dringend, eine Maschine zu bauen, die automatisch die gewünschte Form liefert!<br><br> Der Hub gibt die gewünschte Form auf der - Wires-Ebene aus. Also musst du sie nur analysieren und basierend - darauf automatisch deine Fabrik konfigurieren. + Wires-Ebene aus, also musst du sie nur analysieren und deine Fabrik + dementsprechend konfigurieren (lassen). reward_demo_end: title: Ende der Demo desc: Du bist am Ende der Demo angekommen! @@ -758,7 +959,7 @@ settings: labels: uiScale: title: HUD Größe - description: Ändert die Größe der Benutzeroberfläche, basierend auf der + description: Ändert die Größe der Benutzeroberfläche basierend auf der Bildschirmauflösung. scales: super_small: Sehr klein @@ -779,7 +980,7 @@ settings: disabled: Deaktiviert scrollWheelSensitivity: title: Zoomempfindlichkeit - description: Ändert die Empfindlichkeit des Zooms (Sowohl Mausrad, als auch + description: Ändert die Empfindlichkeit des Zooms (Sowohl Mausrad als auch Trackpad). sensitivity: super_slow: Sehr langsam @@ -809,7 +1010,7 @@ settings: fullscreen: title: Vollbild description: Für das beste Erlebnis im Spiel wird der Vollbildmodus empfohlen - (Nur in der Standalone-Version verfügbar). + (Nur in der Vollversion verfügbar). soundsMuted: title: Geräusche stummschalten description: Bei Aktivierung werden alle Geräusche stummgeschaltet. @@ -842,18 +1043,20 @@ settings: halten. offerHints: title: Hinweise & Tutorials - description: Schaltet Hinweise und das Tutorial beim Spielen an und aus. + description: Schaltet Hinweise und das Tutorial beim Spielen an oder aus. Außerdem werden zu den Levels bestimmte Textfelder versteckt, - die den Einstieg erleichtern sollen. + die dir den Einstieg erleichtern sollen. enableTunnelSmartplace: title: Intelligente Tunnel description: Aktiviert das automatische Entfernen von überflüssigen Fließbändern bei der Platzierung von Tunneln. Außerdem funktioniert das - Ziehen von Tunneln und überschüssige werden ebenfalls entfernt. + Ziehen von Tunneln und überschüssige Tunnel werden ebenfalls + entfernt. vignette: title: Vignette description: Aktiviert den Vignetteneffekt, der den Rand des Bildschirms - zunehmend verdunkelt und das Lesen der Textfelder vereinfacht. + zunehmend verdunkelt und damit das Lesen der Textfelder + vereinfacht. rotationByBuilding: title: Rotation pro Gebäudetyp description: Jeder Gebäudetyp merkt sich eigenständig, in welche Richtung er @@ -865,12 +1068,12 @@ settings: Arbeitsgeschwindigkeit. Anderenfalls wird ein Bild mit Beschreibung angezeigt. disableCutDeleteWarnings: - title: Deaktiviere Warnungsdialog beim Löschen + title: Deaktiviere Warndialog beim Löschen description: Deaktiviert die Warnung, welche beim Löschen und Ausschneiden von - mehr als 100 Feldern angezeigt wird. + mehr als 100 Kacheln angezeigt wird. lowQualityMapResources: title: Minimalistische Ressourcen - description: Vereinfacht die Darstellung der Ressourcen auf der hereingezoomten + description: Vereinfacht die Darstellung der Ressourcen auf der hineingezoomten Karte zur Verbesserung der Leistung. Die Darstellung ist übersichtlicher, also probiere es ruhig aus! disableTileGrid: @@ -879,23 +1082,24 @@ settings: Außerdem vereinfacht es die Darstellung! clearCursorOnDeleteWhilePlacing: title: Abwählen mit Rechtsklick - description: Standardmäßig eingeschaltet, wählt es das aktuelle, zur Platzierung - ausgewählte Gebäude ab, wenn du die rechte Masutaste drückst. - Wenn du es abschaltest, kannst du mit der rechten Maustaste - Gebäude löschen, während du im Platzierungsmodus bist. + description: Ist standardmäßig eingeschaltet und wählt das aktuell ausgewählte + Gebäude ab, wenn du die rechte Maustaste drückst. Wenn du es + abschaltest, kannst du mit der rechten Maustaste Gebäude + löschen, während du im Platzierungsmodus bist. lowQualityTextures: title: Niedrige Texturqualität (Unschön) description: Das Spiel verwendet eine niedrigere Auflösung bei den Texturen. Allerdings leidet die Grafik des Spiels sehr darunter! displayChunkBorders: title: Chunk-Ränder anzeigen - description: Das Spiel ist in Blöcke (Chunks) aus je 16x16 Feldern aufgeteilt. + description: Das Spiel ist in Blöcke (Chunks) aus je 16x16 Kacheln aufgeteilt. Diese Einstellung lässt dich die Grenzen zwischen den Chunks anzeigen. pickMinerOnPatch: - title: Automatisch Extrahierer auswählen - description: Standardmäßig eingeschaltet, wählst du automatisch den Extrahierer, - wenn du mit der Pipette auf einen Ressourcenfleck zeigst + title: Automatisch Extraktor auswählen + description: Ist standardmäßig eingeschaltet und du wählst automatisch den + Extraktor, wenn du mit der Pipette auf einen Ressourcenfleck + zeigst. simplifiedBelts: title: Minimalistische Fließbänder (Unschön) description: Zur Verbesserung der Leistung werden die Items auf Fließbändern nur @@ -906,14 +1110,20 @@ settings: title: Scrollen am Bildschirmrand description: Damit kannst du dich über die Karte bewegen, indem du deinen Mauszeiger am Bildschirmrand platzierst. Die Geschwindigkeit - stimmt dabei mit den Tasten überein. + stimmt dabei mit den Pfeiltasten überein. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: In Richtung des Cursors zoomen + description: Wenn aktiviert, erfolgt der Zoom in Richtung deiner Mausposition, + statt in die Mitte des Bildschirms. mapResourcesScale: title: Größe der Ressourcen auf der Karte - description: Legt die Größe der Ressourcen auf der Karte (beim Herauszoomen) fest. + description: Legt die Größe der Ressourcen auf der Karte (beim Herauszoomen) + fest. + shapeTooltipAlwaysOn: + title: Shape Tooltip - Immer anzeigen + description: Zeigt den Shape Tooltip immer an, wenn sich der Mauszeiger über + einem Gebäude befindet, anstatt 'ALT' drücken zu müssen. + tickrateHz: <amount> Hz keybindings: title: Tastenbelegung hint: "Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene @@ -938,7 +1148,7 @@ keybindings: centerMap: Karte zentrieren mapZoomIn: Reinzoomen mapZoomOut: Rauszoomen - createMarker: Marker erstellen + createMarker: Markierung erstellen menuOpenShop: Upgrades menuOpenStats: Statistiken menuClose: Menü schließen @@ -949,7 +1159,7 @@ keybindings: belt: Fließband balancer: Verteiler underground_belt: Tunnel - miner: Extrahierer + miner: Extraktor cutter: Schneider rotater: Rotierer (90°) stacker: Stapler @@ -969,10 +1179,17 @@ keybindings: transistor: Transistor analyzer: Formanalyse comparator: Vergleich - item_producer: Item-Produzent (Sandkastenmodus) + item_producer: Itemproduzent (Sandkastenmodus) + constant_producer: Itemproduzent + goal_acceptor: Zielakzeptor + block: Sperrblock pipette: Pipette rotateWhilePlacing: Rotieren rotateInverseModifier: "Modifikator: stattdessen gegen den UZS rotieren" + rotateToUp: "Rotieren: Nach oben zeigend" + rotateToDown: "Rotieren: Nach unten zeigend" + rotateToRight: "Rotieren: Nach rechts zeigend" + rotateToLeft: "Rotieren: Nach links zeigend" cycleBuildingVariants: Nächste Variante auswählen confirmMassDelete: Löschen bestätigen pasteLastBlueprint: Letzte Blaupause einfügen @@ -981,16 +1198,14 @@ keybindings: switchDirectionLockSide: "Bandplaner: Seite wechseln" copyWireValue: "Kabel: Wert unter Mauszeiger kopieren" massSelectStart: Halten und ziehen zum Beginnen - massSelectSelectMultiple: Mehrere Areale markieren - massSelectCopy: Areal kopieren - massSelectCut: Areal ausschneiden + massSelectSelectMultiple: Mehrere Bereiche markieren + massSelectCopy: Bereich kopieren + massSelectCut: Bereich ausschneiden + massSelectClear: Fließbänder räumen placementDisableAutoOrientation: Automatische Orientierung deaktivieren - placeMultiple: Im Platziermodus bleiben + placeMultiple: Im Platzierungsmodus bleiben placeInverse: Automatische Fließbandorientierung invertieren - rotateToUp: "Rotieren: Nach oben zeigend" - rotateToDown: "Rotieren: Nach unten zeigend" - rotateToRight: "Rotieren: Nach rechts zeigend" - rotateToLeft: "Rotieren: Nach links zeigend" + showShapeTooltip: Zeige Shape Ausgabe Tooltip about: title: Über dieses Spiel body: Dieses Spiel ist quelloffen (Open Source) und wurde von <a @@ -1007,15 +1222,41 @@ about: target="_blank">Niklas</a> danken! Ohne unsere etlichen gemeinsamen Stunden in Factorio wäre dieses Projekt nie zustande gekommen. changelog: - title: Änderungen + title: Änderungsprotokoll demo: features: - restoringGames: Spiele wiederherstellen - importingGames: Spiele importieren + restoringGames: Spielstände wiederherstellen + importingGames: Spielstände importieren oneGameLimit: Beschränkt auf einen Spielstand customizeKeybindings: Tastenbelegung anpassen exportingBase: Ganze Fabrik als Foto exportieren settingNotAvailable: Nicht verfügbar in der Demo. +backendErrors: + ratelimit: Du führst deine Aktionen zu schnell aus. Bitte warte kurz. + invalid-api-key: Kommunikation mit dem Back-End fehlgeschlagen. Versuche das + Spiel neu zu starten oder zu updaten (Ungültiger Api-Schlüssel). + unauthorized: Kommunikation mit dem Back-End fehlgeschlagen. Versuche das Spiel + neu zu starten oder zu updaten (Nicht autorisiert). + bad-token: Kommunikation mit dem Back-End fehlgeschlagen. Versuche das Spiel neu + zu starten oder zu updaten (Ungültiger Token). + bad-id: Ungültige Puzzle-ID. + not-found: Das Puzzle konnte nicht gefunden werden. + bad-category: Die Kategorie konnte nicht gefunden werden. + bad-short-key: Dieser Kurzschlüssel ist ungültig. + profane-title: Dein Puzzletitel enthält gesperrte Wörter. + bad-title-too-many-spaces: Dein Puzzletitel ist zu kurz. + bad-shape-key-in-emitter: Einem Itemproduzent wurde ein ungültiges Item zugewiesen. + bad-shape-key-in-goal: Einem Zielakzeptor wurde ein ungültiges Item zugewiesen. + no-emitters: Dein Puzzle enthält keine Itemproduzenten. + no-goals: Dein Puzzle enthält keine Zielakzeptoren. + short-key-already-taken: Dieser Kurzschlüssel ist bereits vergeben, bitte wähle einen anderen. + can-not-report-your-own-puzzle: Du kannst dein eigenes Puzzle nicht melden. + bad-payload: Die Anfrage beinhaltet ungültige Daten. + bad-building-placement: Dein Puzzle beinhaltet ungültig platzierte Gebäude. + timeout: Es kam zu einer Zeitüberschreitung bei der Anfrage. + too-many-likes-already: Dieses Puzzle ist in der Community sehr beliebt. Wenn du + es trotzdem löschen möchtest, wende dich bitte an support@shapez.io! + no-permission: Dir fehlt die Berechtigung, um diese Aktion auszuführen. tips: - Der Hub akzeptiert alle Formen, nicht nur die aktuell geforderten! - Stelle sicher, dass deine Fabriken modular sind. Es zahlt sich irgendwann @@ -1038,14 +1279,14 @@ tips: - Der Färber hat eine spiegelverkehrte Variante, die du mit <b>T</b> auswählen kannst. - Das richtige Verhältnis der Gebäude maximiert die Effizienz. - - Auf der gleichen Upgrade-Stufe genügen 5 Extrahierer für ein ganzes + - Auf der gleichen Upgrade-Stufe genügen 5 Extraktoren für ein ganzes Fließband. - Vergiss die Tunnel nicht! - Für maximale Effizienz musst du die Items nicht gleichmässig aufteilen. - Das Halten von <b>UMSCH</b> aktiviert den Bandplaner, der lange Fließbänder ganz einfach platziert. - Schneider teilen die Form immer vertikal, unabhängig von der Orientierung. - - Weiß erhälst du aus der Kombination aller 3 Grundfarben. + - Weiß erhältst du aus der Kombination aller 3 Grundfarben. - Das Lager gibt Items immer zuerst am linken Ausgang ab. - Es lohnt sich, Zeit in den Bau von wiederverwendbaren Designs zu stecken! - Das Halten von <b>STRG</b> ermöglicht dir, mehrere Gebäude zu platzieren. @@ -1079,9 +1320,10 @@ tips: - Die Reißzwecke neben Formen in der Upgrade-Liste lässt sie dich am Bildschirm anheften. - Mische alle drei Grundfarben, um Weiß zu erhalten! - - Du hast eine unendlich grosse Karte, nutze den Platz und expandiere! + - Du hast eine unendlich große Karte, nutze den Platz und expandiere! - Probier auch mal Factorio! Es ist mein Lieblingsspiel. - - Der Vierfachschneider schneidet im Uhrzeigersinn von oben rechts beginnend! + - Der vierfache Schneider schneidet im Uhrzeigersinn von oben rechts + beginnend! - Du kannst deine Speicherstände im Hauptmenü herunterladen! - Diese Spiel hat viele nützliche Tastenbelegungen! Schau sie dir in den Einstellungen an. diff --git a/translations/base-el.yaml b/translations/base-el.yaml index 1a6a9581..7e221795 100644 --- a/translations/base-el.yaml +++ b/translations/base-el.yaml @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: Demo Version intro: Get the standalone to unlock all features! @@ -70,9 +71,15 @@ mainMenu: savegameLevelUnknown: Άγνωστο Επίπεδο continue: Συνέχεια newGame: Καινούριο παιχνίδι - madeBy: Made by <author-link> + madeBy: Κατασκευασμένο απο <author-link> subreddit: Reddit savegameUnnamed: Unnamed + puzzleMode: Λειτουργία παζλ + back: Πίσω + puzzleDlcText: Σε αρέσει να συμπάγης και να βελτιστοποίεις εργοστάσια; Πάρε την + λειτουργεία παζλ στο Steam για ακόμη περισσότερη πλάκα! + puzzleDlcWishlist: Βαλτε το στην λίστα επιθυμιών τώρα! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -86,6 +93,9 @@ dialogs: viewUpdate: Προβολή ενημέρωσης showUpgrades: Εμφάνιση αναβαθμίσεων showKeybindings: Συνδυασμοί πλήκτρων + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Σφάλμα εισαγωγής text: "Αποτυχία εισαγωγής του αποθηκευμένου παιχνιδιού:" @@ -177,13 +187,13 @@ dialogs: desc: Δεν έχεις τους πόρους να επικολλήσεις αυτήν την περιοχή! Είσαι βέβαιος/η ότι θέλεις να την αποκόψεις; editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the <strong>short key</strong> of a shape (Which you - can generate <link>here</link>) + title: Βάλε σήμα + descItems: "Διάλεξε ενα προκαθορισμένο αντικείμενο:" + descShortKey: ... ή εισάγετε ενα <strong>ενα μικρό κλειδι</strong> απο ένα σχήμα + (Που μπορείς να παράγεις <link>εδώ</link>) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Μετανόμασε το αποθηκευμένου παιχνιδι. + desc: Μπορείς να μετανομάσεις το αποθηκευμένο σου παιχνίδι εδω. tutorialVideoAvailable: title: Tutorial Available desc: There is a tutorial video available for this level! Would you like to @@ -192,6 +202,70 @@ dialogs: title: Tutorial Available desc: There is a tutorial video available for this level, but it is only available in English. Would you like to watch it? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Απέτυχε να φορτώσει το παζλ. + desc: "Δυστυχώς το παζλ δεν μπορούσε να φορτωθεί:" + submitPuzzle: + title: Υπόβαλε παζλ + descName: "Δώσε όνομα στο παζλ:" + descIcon: "Παρακαλούμε εισάγετε ενα μικρό κλειδι, που θα προβληθεί εως το + εικονίδιο για το παζλ (Μπορείς να το παράγεις <link>εδώ</link>, ή + διάλεξε ενα ενα από τα παρακάτω τυχαία προτεινόμενα σχήματα):" + placeholderName: Τίτλος παζλ + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Κακό παζλ + desc: "Το πάζλ απέτυχε να φορτώθει:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Σφάλμα λήψης + desc: "Απέτυχε να κατεβαθεί το πάζλ:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Δημοσίευτηκε το παζλ + desc: Συγχαρητήρια! Το παζλ σας έχει δημοσιευτεί και μπορείτε τώρα να το παίξουν + οι υπολοιποι. Τώρα μπορείτε να το βρείτε στην ενότητα "Τα παζλ μου". + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Μικρό κλειδι αντιγράφηκε + desc: Το μικρο κλειδή απο το παζλ (<key>) αντιγράφηκε στο πρόχειρο! Το μπορεί να + εισαχθεί στο μενού παζλ για πρόσβαση στο παζλ. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Κίνηση @@ -213,6 +287,7 @@ ingame: clearSelection: Εκκαθαρισμός επιλογής pipette: Σταγονόμετρο switchLayers: Εναλλαγή στρώματος + clearBelts: Clear belts buildingPlacement: cycleBuildingVariants: Πάτησε <key> για εναλλαγή μεταξύ παραλλαγών. hotkeyLabel: "Hotkey: <key>" @@ -363,6 +438,50 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Κατασκευαστείς παζλ. + instructions: + - 1. Τοποθετήστε τους <strong> σταθερούς παραγωγούς </strong> για να + δώσετε σχήματα και χρώματα στον + - 2. Δημιουργήστε ένα ή περισσότερα σχήματα που θέλετε να + δημιουργήσει ο παίκτης αργότερα και παραδώστε το σε έναν ή + περισσότερους <strong> Αποδέκτες στόχων </strong> + - 3. Μόλις ένας Αποδέκτης Στόχου λάβει ένα σχήμα για ένα ορισμένο + ποσό χρόνο, <strong> το αποθηκεύει ως στόχο </strong> που πρέπει + να κάνει ο παίκτης παράγει αργότερα (Υποδεικνύεται από το <strong> + πράσινο σήμα </strong>). + - 4. Κάντε κλικ στο <strong> κουμπί κλειδώματος </strong> σε ένα + κτίριο για να το απενεργοποίησετε. + - 5. Μόλις κάνετε κλικ στην κριτική, το παζλ σας θα επικυρωθεί και + εσείς μπορεί να το δημοσιεύσει. + - 6. Μετά την κυκλοφόρηση του παζλ, <strong> όλα τα κτίρια θα + αφαιρεθούν </strong> εκτός από τους παραγωγούς και τους αποδέκτες + στόχων - Αυτό είναι το μέρος που ο παίκτης υποτίθεται ότι θα + καταλάβει μόνοι του :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Ιμάντες, Διανομείς & Σήραγγες @@ -573,6 +692,18 @@ buildings: name: Item Producer description: Available in sandbox mode only, outputs the given signal from the wires layer on the regular layer. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Κοπή σχημάτων @@ -908,7 +1039,12 @@ settings: title: Map Resources Size description: Controls the size of the shapes on the map overview (when zooming out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Συνδιασμοί πλήκτρων hint: "Συμβουλή: Φρόντισε να χρησιμοποιήσεις τα πλήκτρα CTRL, SHIFT και ALT! @@ -986,6 +1122,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: Σχετικά με αυτό το παιχνίδι body: >- @@ -1078,3 +1219,88 @@ tips: - Press F4 to show your FPS and Tick Rate. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-en.yaml b/translations/base-en.yaml index a409f18e..3f3b1412 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -48,6 +48,7 @@ steamPage: global: loading: Loading error: Error + loggingIn: Logging in # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," @@ -116,6 +117,79 @@ mainMenu: savegameLevel: Level <x> savegameLevelUnknown: Unknown Level savegameUnnamed: Unnamed + puzzleMode: Puzzle Mode + back: Back + + puzzleDlcText: >- + Do you enjoy compacting and optimizing factories? + Get the Puzzle DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc + +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking shapez.io in your library, selecting Properties > DLCs. + + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: Created + easy: Easy + medium: Medium + hard: Hard + completed: Completed + official: Tutorial + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) + + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: >- + One or more Goal Acceptors have not yet assigned an item. Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: >- + One or more Goal Acceptors are not getting enough items. Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: >- + One or more buildings are outside of the buildable area. Either increase the area or remove them. + autoComplete: >- + Your puzzle autocompletes itself! Please make sure your constant producers are not directly delivering to your goal acceptors. dialogs: buttons: @@ -130,6 +204,9 @@ dialogs: viewUpdate: View Update showUpgrades: Show Upgrades showKeybindings: Show Keybindings + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Import Error @@ -234,6 +311,9 @@ dialogs: Choose a pre-defined item: descShortKey: ... or enter the <strong>short key</strong> of a shape (Which you can generate <link>here</link>) + editConstantProducer: + title: Set Item + markerDemoLimit: desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers! @@ -253,6 +333,91 @@ dialogs: title: Tutorial Available desc: There is a tutorial video available for this level, but it is only available in English. Would you like to watch it? + puzzleLoadFailed: + title: Puzzles failed to load + desc: >- + Unfortunately the puzzles could not be loaded: + + submitPuzzle: + title: Submit Puzzle + descName: >- + Give your puzzle a name: + descIcon: >- + Please enter a unique short key, which will be shown as the icon of your puzzle (You can generate them <link>here</link>, or choose one of the randomly suggested shapes below): + + placeholderName: Puzzle Title + + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be outside the zone. + + puzzleLoadError: + title: Bad Puzzle + desc: >- + The puzzle failed to load: + + offlineMode: + title: Offline Mode + desc: >- + We couldn't reach the servers, so the game has to run in offline mode. Please make sure you have an active internet connection. + + puzzleDownloadError: + title: Download Error + desc: >- + Failed to download the puzzle: + + puzzleSubmitError: + title: Submission Error + desc: >- + Failed to submit your puzzle: + + puzzleSubmitOk: + title: Puzzle Published + desc: >- + Congratulations! Your puzzle has been published and can now be played by others. You can now find it in the "My puzzles" section. + + puzzleCreateOffline: + title: Offline Mode + desc: >- + Since you are offline, you will not be able to save and/or publish your puzzle. Would you still like to continue? + + puzzlePlayRegularRecommendation: + title: Recommendation + desc: >- + I <strong>strongly</strong> recommend playing the normal game to level 12 before attempting the puzzle DLC, otherwise you may encounter mechanics not yet introduced. Do you still want to continue? + + puzzleShare: + title: Short Key Copied + desc: >- + The short key of the puzzle (<key>) has been copied to your clipboard! It can be entered in the puzzle menu to access the puzzle. + + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + + puzzleReportComplete: + title: Thank you for your feedback! + desc: >- + The puzzle has been flagged. + + puzzleReportError: + title: Failed to report + desc: >- + Your report could not get processed: + + puzzleLoadShortKey: + title: Enter short key + desc: >- + Enter the short key of the puzzle to load it. + + puzzleDelete: + title: Delete Puzzle? + desc: >- + Are you sure you want to delete '<title>'? This can not be undone! + ingame: # This is shown in the top left corner and displays useful keybindings in # every situation @@ -273,6 +438,7 @@ ingame: plannerSwitchSide: Flip planner side cutSelection: Cut copySelection: Copy + clearBelts: Clear belts clearSelection: Clear selection pipette: Pipette switchLayers: Switch layers @@ -477,6 +643,47 @@ ingame: title: Support me desc: I develop the game in my spare time! + # puzzle mode + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + share: Share + report: Report + + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and colors to the player + - 2. Build one or more shapes you want the player to build later and deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of time, it <strong>saves it as a goal</strong> that the player must produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable it. + - 5. Once you click review, your puzzle will be validated and you can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> except for the Producers and Goal Acceptors - That's the part that the player is supposed to figure out for themselves, after all :) + + puzzleCompletion: + title: Puzzle Completed! + + titleLike: >- + Click the heart if you liked the puzzle: + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate + # All shop upgrades shopUpgrades: belt: @@ -701,6 +908,21 @@ buildings: name: Item Producer description: Available in sandbox mode only, outputs the given signal from the wires layer on the regular layer. + constant_producer: + default: + name: &constant_producer Constant Producer + description: Constantly outputs a specified shape or color. + + goal_acceptor: + default: + name: &goal_acceptor Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + + block: + default: + name: &block Block + description: Allows you to block a tile. + storyRewards: # Those are the rewards gained from completing the store reward_cutter_and_trash: @@ -782,7 +1004,7 @@ storyRewards: title: Storage desc: >- You have unlocked the <strong>storage</strong> building - It allows you to store items up to a given capacity!<br><br> - It priorities the left output, so you can also use it as an <strong>overflow gate</strong>! + It prioritizes the left output, so you can also use it as an <strong>overflow gate</strong>! reward_blueprints: title: Blueprints @@ -877,7 +1099,7 @@ settings: staging: Staging prod: Production buildDate: Built <at-date> - + tickrateHz: <amount> Hz rangeSliderPercentage: <amount> % labels: @@ -1064,6 +1286,11 @@ settings: description: >- Controls the size of the shapes on the map overview (when zooming out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: >- + Whether to always show the shape tooltip when hovering buildings, instead of having to hold 'ALT'. + keybindings: title: Keybindings hint: >- @@ -1128,6 +1355,9 @@ keybindings: analyzer: *analyzer comparator: *comparator item_producer: Item Producer (Sandbox) + constant_producer: *constant_producer + goal_acceptor: *goal_acceptor + block: *block # --- pipette: Pipette @@ -1151,11 +1381,14 @@ keybindings: massSelectSelectMultiple: Select multiple areas massSelectCopy: Copy area massSelectCut: Cut area + massSelectClear: Clear belts placementDisableAutoOrientation: Disable automatic orientation placeMultiple: Stay in placement mode placeInverse: Invert automatic belt orientation + showShapeTooltip: Show shape output tooltip + about: title: About this Game body: >- @@ -1182,6 +1415,29 @@ demo: settingNotAvailable: Not available in the demo. +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle already got too many likes. If you still want to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. + tips: - The hub will accept any input, not just the current shape! - Make sure your factories are modular - it will pay out! diff --git a/translations/base-es.yaml b/translations/base-es.yaml index c90e1c0e..6606df52 100644 --- a/translations/base-es.yaml +++ b/translations/base-es.yaml @@ -14,14 +14,14 @@ steamPage: Mientras que sólo procesas formas al principio, tienes que colorearlas después - ¡para ello tienes que extraer y mezclar colores! Comprando el juego en Steam tienes acceso a la versión completa, ¡pero también puedes jugar una demo en shapez.io primero y decidir después! - what_others_say: What people say about shapez.io - nothernlion_comment: This game is great - I'm having a wonderful time playing, - and time has flown by. - notch_comment: Oh crap. I really should sleep, but I think I just figured out - how to make a computer in shapez.io - steam_review_comment: This game has stolen my life and I don't want it back. - Very chill factory game that won't let me stop making my lines more - efficient. + what_others_say: Lo que otras personas dicen sobre shapez.io + nothernlion_comment: Este juego es estupendo - Estoy teniendo un tiempo + maravolloso jugano, y el tiempo ha pasado volando. + notch_comment: Miércoles. Verdaderamente debería dormir, pero creo que acabo de + descubrir como hacer un ordenador en shapez.io + steam_review_comment: Este juego ha robado mi vida y no la quiero de vuelta. Muy + relajante juego de fábrica que no me dejará hacer mis lineas más + eficientes. global: loading: Cargando error: Error @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: ESPACIO + loggingIn: Iniciando sesión demoBanners: title: Versión de prueba intro: ¡Obtén el juego completo para desbloquear todas las características! @@ -72,6 +73,12 @@ mainMenu: savegameLevel: Nivel <x> savegameLevelUnknown: Nivel desconocido savegameUnnamed: Sin nombre + puzzleMode: Modo Puzle + back: Atrás + puzzleDlcText: ¿Disfrutas compactando y optimizando fábricas? ¡Consigue ahora el + DLC de Puzles en Steam para aún más diversión! + puzzleDlcWishlist: ¡Añádelo ahora a tu lista de deseos! + puzzleDlcViewNow: Ver Dlc dialogs: buttons: ok: OK @@ -85,6 +92,9 @@ dialogs: viewUpdate: Ver actualización showUpgrades: Ver mejoras showKeybindings: Ver atajos de teclado + retry: Reintentar + continue: Continuar + playOffline: Jugar Offline importSavegameError: title: Error de importación text: "Fallo al importar tu partida guardada:" @@ -96,7 +106,7 @@ dialogs: text: "No se ha podido cargar la partida guardada:" confirmSavegameDelete: title: Confirmar borrado - text: ¿Estás seguro de querér borrar el siguiente guardado?<br><br> + text: ¿Estás seguro de que quieres borrar el siguiente guardado?<br><br> '<savegameName>' que está en el nivel <savegameLevel><br><br> ¡Esto no se puede deshacer! savegameDeletionError: @@ -174,7 +184,7 @@ dialogs: crashear tu juego! editSignal: title: Establecer señal - descItems: "Elige un item pre-definido:" + descItems: "Elige un item predefinido:" descShortKey: ... o escribe la <strong>clave</strong> de una forma (La cual puedes generar <link>aquí</link>) renameSavegame: @@ -187,6 +197,72 @@ dialogs: title: Tutorial Disponible desc: Hay un video tutorial disponible para este nivel, pero solo está disponible en inglés ¿Te gustaría verlo? + editConstantProducer: + title: Elegir item + puzzleLoadFailed: + title: Fallo al cargar los Puzles + desc: Desafortunadamente, no se pudieron cargar los puzles. + submitPuzzle: + title: Enviar Puzzle + descName: "Nombra tu puzle:" + descIcon: "Por favor ingresa una clave única, que será el icono de tu puzle + (Puedes generarlas <link>aquí</link>, o escoger una de las formas + sugeridas de forma aleatoria, aquí abajo):" + placeholderName: Título del Puzle + puzzleResizeBadBuildings: + title: No es posible cambiar el tamaño + desc: No puedes hacer el área más pequeña, puesto que algunos edificios estarían + fuera de esta. + puzzleLoadError: + title: Fallo al cargar el puzle + desc: "No se pudo cargar el puzle:" + offlineMode: + title: Modo sin conexión + desc: No pudimos conectar con los servidores, y por ello el juego debe funcionar + en el modo sin conexión. Por favor asegúrate de que tu conexión a + internet funciona correctamente. + puzzleDownloadError: + title: Fallo al descargar + desc: "Fallo al descargar el puzle:" + puzzleSubmitError: + title: Error al enviar + desc: "No pudimos enviar tu puzle:" + puzzleSubmitOk: + title: Puzle Publicado + desc: ¡Enhorabuena! Tu puzle ha sido publicado y ahora pueden jugarlo otros. + Puedes encontrarlo en la sección "Mis puzles". + puzzleCreateOffline: + title: Modo sin conexión + desc: Puesto que estás sin conexión, no podrás guardar y/o publicar tu puzle. + ¿Quieres continuar igualmente? + puzzlePlayRegularRecommendation: + title: Recomendación + desc: Te recomiendo <strong>fuertemente</strong> jugar el juego normal hasta el + nivel 12 antes de intentar el DLC de puzles, de otra manera puede + que te encuentres con mecánicas que aún no hemos introducido. + ¿Quieres continuar igualmente? + puzzleShare: + title: Clave Copiada + desc: Hemos copiado la clave de tu puzle (<key>) a tu portapapeles! Puedes + ponerlo en el menú de puzles para acceder al puzle. + puzzleReport: + title: Reportar Puzle + options: + profane: Profanidades + unsolvable: Imposible de resolver + trolling: Troll + puzzleReportComplete: + title: ¡Gracias por tu aporte! + desc: El puzle ha sido reportado exitosamente. + puzzleReportError: + title: No se pudo reportar + desc: "No pudimos procesar tu informe:" + puzzleLoadShortKey: + title: Introducir clave + desc: Introduce la clave del puzle para cargarlo. + puzzleDelete: + title: ¿Eliminar Puzle? + desc: ¿Estas seguro de querer eliminar '<title>'? ¡Esto no se puede deshacer! ingame: keybindingsOverlay: moveMap: Mover @@ -196,7 +272,7 @@ ingame: placeMultiple: Colocar varios reverseOrientation: Invertir la orientación disableAutoOrientation: Desactivar la autoorientación - toggleHud: Habilitar el HUD + toggleHud: Habilitar la interfaz placeBuilding: Colocar edificio createMarker: Crear marcador delete: Destruir @@ -208,6 +284,7 @@ ingame: clearSelection: Limpiar selección pipette: Cuentagotas switchLayers: Cambiar capas + clearBelts: Borrar cintas colors: red: Rojo green: Verde @@ -217,7 +294,7 @@ ingame: cyan: Cian white: Blanco black: Negro - uncolored: Gris + uncolored: Incoloro buildingPlacement: cycleBuildingVariants: Pulsa <key> para rotar por las distintas variantes. hotkeyLabel: "Tecla: <key>" @@ -248,18 +325,18 @@ ingame: dataSources: stored: title: Almacenado - description: Muestra la cantidad de figuras guardadas en tu HUB. + description: Muestra la cantidad de figuras guardadas en tu Centro. produced: title: Producido description: Muestra todas las figuras que tu fábrica al completo produce, incluyendo productos intermedios. delivered: title: Entregados - description: Muestra las figuras que son entregadas a tu HUB. + description: Muestra las figuras que son entregadas a tu Centro. noShapesProduced: Todavía no se han producido figuras. shapesDisplayUnits: second: <shapes> / s - minute: <shapes> / m + minute: <shapes> / min hour: <shapes> / h settingsMenu: playtime: Tiempo de juego @@ -273,7 +350,7 @@ ingame: cost: Coste waypoints: waypoints: Marcadores - hub: HUB + hub: Centro description: Click izquierdo sobre un marcador para ir ahí, click derecho para borrarlo. <br><br> Pulsa <keybinding> para crear un marcador de la vista actual o <strong>click derecho</strong> para crear un marcador @@ -289,8 +366,9 @@ ingame: 1_1_extractor: ¡Coloca un <strong>extractor</strong> encima de un <strong>círculo</strong> para extraerlo! 1_2_conveyor: "¡Conecta el extractor con una <strong>cinta - transportadora</strong> a tu HUB!<br><br> Pista: ¡<strong>Pulsa - y arrastra</strong> la cinta transportadora con el ratón!" + transportadora</strong> a tu Centro!<br><br> Pista: + ¡<strong>Pulsa y arrastra</strong> la cinta transportadora con + el ratón!" 1_3_expand: '¡Esto <strong>NO</strong> es un "juego de esperar"! Construye más extractores y cintas transportadoras para completar el objetivo más rápido.<br><br> Pista: Mantén pulsado <strong>SHIFT</strong> @@ -307,8 +385,8 @@ ingame: para acelerar este lento proceso!<br><br> PD: Usa las teclas <strong>0-9 </strong> para acceder a los edificios más rápido!" 3_1_rectangles: "¡Ahora consigamos unos rectangulos! <strong>construye 4 - extractores</strong> y conectalos a el HUB.<br><br> PD: Manten - apretado <strong>SHIFT</strong> mientrás pones cintas + extractores</strong> y conectalos a el Centro.<br><br> PD: + Manten apretado <strong>SHIFT</strong> mientrás pones cintas transportadoras para activar el planeador de cintas!" 21_1_place_quad_painter: ¡Pon el <strong>pintador cuádruple</strong> y consigue unos <strong>círculos</strong>, el color <strong>blanco</strong> @@ -319,9 +397,9 @@ ingame: 21_3_place_button: ¡Genial! ¡Ahora pon un <strong>Interruptor</strong> y conéctalo con cables! 21_4_press_button: "Presiona el interruptor para hacer que <strong>emita una - señal verdadera</strong> lo cual activa el pintador.<br><br> - PD: ¡No necesitas conectar todas las entradas! Intenta - conectando sólo dos." + señal</strong> lo cual activa el pintador.<br><br> PD: ¡No + necesitas conectar todas las entradas! Intenta conectando sólo + dos." connectedMiners: one_miner: 1 Minero n_miners: <amount> Mineros @@ -356,8 +434,52 @@ ingame: title: Apoyame desc: ¡Desarrollo este juego en mi tiempo libre! achievements: - title: Achievements - desc: Hunt them all! + title: Logros + desc: Atrapalos a todos! + puzzleEditorSettings: + zoneTitle: Área + zoneWidth: Anchura + zoneHeight: Altura + trimZone: Área de recorte + clearItems: Eliminar todos los elementos + share: Compartir + report: Reportar + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Editor de Puzles + instructions: + - 1. Pon <strong>Productores Constantes</strong> para proveer al + jugador de formas y colores. + - 2. Construye una o más formas que quieres que el jugador construya + más tarde y llévalo hacia uno o más <strong>Aceptadores de + Objetivos</strong>. + - 3. Cuando un Aceptador de Objetivos recibe una forma por cierto + tiempo, <strong>la guarda como un objetivo</strong> que el jugador + debe producir más tarde (Lo sabrás por el <strong>indicador + verde</strong>). + - 4. Haz clic en el <strong>candado</strong> de un edificio para + desactivarlo. + - 5. Una vez hagas clic en "revisar", tu puzle será validado y + podrás publicarlo. + - 6. Una vez publicado, <strong>todos los edificios serán + eliminados</strong> excepto los Productores and Aceptadores de + Objetivo - Esa es la parte que el jugador debe averiguar por sí + mismo, después de todo :) + puzzleCompletion: + title: Puzle Completado! + titleLike: "Haz click en el corazón si te gustó el puzle:" + titleRating: ¿Cuánta dificultad tuviste al resolver el puzle? + titleRatingDesc: Tu puntuación me ayudará a hacerte mejores sugerencias en el futuro + continueBtn: Continuar Jugando + menuBtn: Menú + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Autor + shortKey: Clave + rating: Puntuación de dificultad + averageDuration: Duración media + completionRate: Índice de finalización shopUpgrades: belt: name: Cintas transportadoras, Distribuidores y Túneles @@ -375,8 +497,8 @@ buildings: hub: deliver: Entregar toUnlock: para desbloquear - levelShortcut: LVL - endOfDemo: End of Demo + levelShortcut: Nivel + endOfDemo: Fin de la demo belt: default: name: Cinta Transportadora @@ -425,7 +547,7 @@ buildings: name: Rotador (Inverso) description: Rota las figuras en sentido antihorario 90 grados. rotate180: - name: Rotador (180) + name: Rotador (180º) description: Rota formas en 180 grados. stacker: default: @@ -460,7 +582,7 @@ buildings: description: Acepta formas desde todos los lados y las destruye. Para siempre. balancer: default: - name: Balanceador + name: Equlibrador description: Multifuncional - Distribuye igualmente todas las entradas en las salidas. merger: @@ -483,11 +605,11 @@ buildings: desbordamiento. wire_tunnel: default: - name: Cruze de cables + name: Cruce de cables description: Permite que dos cables se cruzen sin conectarse. constant_signal: default: - name: Señal costante + name: Señal constante description: Emite una señal constante, que puede ser una forma, color o valor booleano (1 / 0). lever: @@ -500,29 +622,29 @@ buildings: default: name: Puerta AND description: Emite el valor booleano "1" si ambas entradas son verdaderas. - (Verdadeas significa una forma, color o valor booleano "1") + (Verdaderas significa una forma, color o valor booleano "1") not: name: Puerta NOT description: Emite el valor booleano "1" si ambas entradas no son verdaderas. - (Verdadeas significa una forma, color o valor booleano "1") + (Verdaderas significa una forma, color o valor booleano "1") xor: name: Puerta XOR description: Emite el valor booleano "1" si una de las entradas es verdadera, - pero no si ambas lo son. (Verdadeas significa una forma, color o - valor booleano "1") + pero no si ambas lo son. (Verdaderas significa una forma, color + o valor booleano "1") or: name: Puerta OR description: Emite el valor booleano "1" Si una de las entradas es verdadera. - (Verdadeas significa una forma, color o valor booleano "1") + (Verdaderas significa una forma, color o valor booleano "1") transistor: default: name: Transistor description: Envia la señal de abajo si la señal del costado es verdadera - (Verdadeas significa una forma, color o valor booleano "1"). + (Verdaderas significa una forma, color o valor booleano "1"). mirrored: name: Transistor description: Envia la señal de abajo si la señal del costado es verdadera - (Verdadeas significa una forma, color o valor booleano "1"). + (Verdaderas significa una forma, color o valor booleano "1"). filter: default: name: Filtro @@ -543,7 +665,7 @@ buildings: analyzer: default: name: Analizador de formas - description: analiza el cuadrante de arriba a la derecha de la capa más baja de + description: Analiza el cuadrante de arriba a la derecha de la capa más baja de la forma y devuelve su figura y color. comparator: default: @@ -572,8 +694,21 @@ buildings: item_producer: default: name: Productor de items - description: Solo disponible en modo libre, envía la señal recivida de la capa + description: Solo disponible en modo libre, envía la señal recibida de la capa de cables en la capa regular. + constant_producer: + default: + name: Productor de una sola pieza + description: Da constantemente la figura o el color especificados. + goal_acceptor: + default: + name: Aceptador de objetivos + description: Tranporta figuras al aceptador de objetivos para ponerlas como + objetivo. + block: + default: + name: Bloque + description: Permite bloquear una celda. storyRewards: reward_cutter_and_trash: title: Cortador de figuras @@ -646,15 +781,15 @@ storyRewards: como una <strong>puerta de desbordamiento</strong>! reward_freeplay: title: Juego libre - desc: ¡Lo hiciste! Haz desbloqueado el <strong>modo de juego libre</strong>! + desc: ¡Lo hiciste! Has desbloqueado el <strong>modo de juego libre</strong>! ¡Esto significa que las formas ahora son - <strong>aleatoriamente</strong> generadas!<br><br> Debído a que - desde ahora de adelante el HUB pedrirá una cantidad especifica de - formas <strong>por segundo</strong> ¡Te recomiendo encarecidamente - que construyas una maquina que automáticamente envíe la forma - pedida!<br><br> El HUB emite la forma pedida en la capa de cables, - así que todo lo que tienes que hacer es analizarla y automaticamente - configurar tu fabrica basada en ello. + <strong>aleatoriamente</strong> generadas!<br><br> Debido a que + desde ahora de adelante el Centro pedirá una cantidad específica de + formas <strong>por segundo</strong>, ¡Te recomiendo encarecidamente + que construyas una máquina que automáticamente envíe la forma + pedida!<br><br> El Centro emite la forma pedida en la capa de + cables, así que todo lo que tienes que hacer es analizarla y + automáticamente configurar tu fábrica basada en ello. reward_blueprints: title: Planos desc: ¡Ahora puedes <strong>copiar y pegar</strong> partes de tu fábrica! @@ -719,9 +854,9 @@ storyRewards: ¡Ahora puedes simular un cortador, rotador, apilador y más dentro de la capa de cables! Con esto ahora tienes tres opciones para continuar el juego:<br><br> - Construir una <strong>maquina - automatizada</strong> para crear cualquier forma que te pida el HUB - (¡Te recomiendo que lo intentes!).<br><br> - Construir algo genial - con los cables.<br><br> - Continuar jugando de la manera + automatizada</strong> para crear cualquier forma que te pida el + Centro (¡Te recomiendo que lo intentes!).<br><br> - Construir algo + genial con los cables.<br><br> - Continuar jugando de la manera regular.<br><br> ¡Cualquiera que eligas, recuerda divertirte! reward_wires_painter_and_levers: title: Cables y pintor cuádruple @@ -736,9 +871,9 @@ storyRewards: reward_filter: title: Filtro de items desc: Has desbloqueado el <strong>Filtro de Items</strong>! Este enviará los - items tanto arriaba como a la derecha dependiendo en si coinciden - con la señal de la capa de cables o no.<br><br> Tambien puedes - enviar una señal booleana (1 / 0) para activarlo o desactivarlo + items tanto arriba como a la derecha dependiendo en si coinciden con + la señal de la capa de cables o no.<br><br> También puedes enviar + una señal booleana (1 / 0) para activarlo o desactivarlo completamente. reward_demo_end: title: Fin de la demo @@ -876,8 +1011,8 @@ settings: description: Deshabilitar la grilla puede ayudar con el rendimiento. ¡También hace que el juego se vea más limpio! clearCursorOnDeleteWhilePlacing: - title: Limpiar el cursos al apretar click derecho - description: Activado por defecto, Limpia el cursor al hacer click derecho + title: Limpiar el cursor al apretar click derecho + description: Activado por defecto, limpia el cursor al hacer click derecho mientras tengas un un edificio seleccionado. Si se deshabilita, puedes eliminar edificios al hacer click derecho mientras pones un edificio. @@ -890,14 +1025,14 @@ settings: description: Este juego está dividido en chunks de 16x16 cuadrados, si esta opción es habilitada los bordes de cada chunk serán mostrados. pickMinerOnPatch: - title: Elegír el minero en la veta de recursos - description: Activado pir defecto, selecciona el minero si usas el cuentagotas + title: Elegir el minero en la veta de recursos + description: Activado por defecto, selecciona el minero si usas el cuentagotas sobre una veta de recursos. simplifiedBelts: title: Cintas trasportadoras simplificadas (Feo) description: No rederiza los items en las cintas trasportadoras exceptuando al pasar el cursor sobre la cinta para mejorar el rendimiento. No - recomiendo jugar con esta opcion activada a menos que necesites + recomiendo jugar con esta opción activada a menos que necesites fuertemente mejorar el rendimiento. enableMousePan: title: Habilitar movimiento con mouse @@ -910,9 +1045,14 @@ settings: diferencia de hacer zoom en el centro de la pantalla. mapResourcesScale: title: Tamaño de recursos en el mapa - description: Controla el tamaño de los recursos en la vista de aerea del mapa - (Al hacer zoom minimo). + description: Controla el tamaño de los recursos en la vista de aérea del mapa + (Al hacer zoom mínimo). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Atajos de teclado hint: "Pista: ¡Asegúrate de usar CTRL, SHIFT y ALT! Habilitan distintas opciones @@ -941,7 +1081,7 @@ keybindings: menuOpenShop: Mejoras menuOpenStats: Estadísticas menuClose: Cerrar menú - toggleHud: Activar HUD + toggleHud: Activar Interfaz toggleFPSInfo: Activar FPS e información de depurado switchLayers: Cambiar capas exportScreenshot: Exportar la base completa como imagen @@ -963,7 +1103,7 @@ keybindings: pasteLastBlueprint: Pegar último plano cycleBuildings: Ciclar edificios lockBeltDirection: Activar planificador de cintas transportadoras - switchDirectionLockSide: "Planner: Cambiar sentido" + switchDirectionLockSide: "Planificador: Cambiar sentido" massSelectStart: Mantén pulsado y arrastra para empezar massSelectSelectMultiple: Seleccionar múltiples áreas massSelectCopy: Copiar área @@ -986,10 +1126,15 @@ keybindings: comparator: Comparador item_producer: Productor de items (Sandbox) copyWireValue: "Cables: Copiar valor bajo el cursos" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: "Rotar: Apuntar hacia arriba" + rotateToDown: "Rotar: Apuntar hacia abajo" + rotateToRight: "Rotar: Apuntar hacia la derecha" + rotateToLeft: "Rotar: Apuntar hacia la izquierda" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: Sobre el juego body: >- @@ -1015,9 +1160,9 @@ demo: exportingBase: Exportando la base completa como imagen settingNotAvailable: No disponible en la versión de prueba. tips: - - El HUB acepta entradas de cualquier tipo ¡No solo la forma actual! + - El Centro acepta entradas de cualquier tipo ¡No solo la forma actual! - Trata de que tus fábricas sean modulares - ¡Te servirá en el futuro! - - No construyas muy cerca del HUB ¡O se volverá todo un caos! + - No construyas muy cerca del Centro ¡O se volverá todo un caos! - Si apilar las formas no funciona, intenta intercambiar las entradas. - Puedes activar la dirección del planeador de cintas apretando <b>R</b>. - Mantener apretado <b>CTRL</b> te permite poner cintas sin auto-orientación. @@ -1047,7 +1192,7 @@ tips: - Puedes apretar <b>ALT</b> para invertir la dirección a la que van las cintas. - ¡La eficiencia es la clave! - - Mientras más lejos del HUB estés más complejas serán las formas que te + - Mientras más lejos del Centro estés más complejas serán las formas que te encuentres. - Las máquinas tienen una velocidad limitada, divídelas para una máxima eficiencia. @@ -1071,7 +1216,7 @@ tips: - Echa un vistazo más de cerca al mezclador de colores, y tus preguntas serán respondidas. - Usa <b>CTRL</b> + Click izquierdo para seleccionar un área. - - Construir demasiado cerca del HUB puede interponerse en el camino de + - Construir demasiado cerca del Centro puede interponerse en el camino de proyectos a futuro. - El icono del alfiler junto a cada forma de la lista de mejoras lo fija a la pantalla. @@ -1084,10 +1229,100 @@ tips: - ¡Este juego tiene un montón de atajos útiles! Asegúrate de revisar la página de ajustes. - Este juego tiene muchos ajustes, ¡asegúrate de revisarlos! - - ¡El marcador de tu HUB tiene una pequeña brújula para indicar su dirección! + - ¡El marcador de tu Centro tiene una pequeña brújula para indicar su + dirección! - Para despejar las cintas transportadoras, corta el área y luego pégala en el mismo lugar. - Presiona F4 para mostrar tu FPS y Tick Rate. - Presiona F4 dos veces para mostrar las coordenadas de tu ratón y de la cámara. - Puedes hacer clic en una forma fijada en el lado izquierdo para desfijarla. +puzzleMenu: + play: Jugar + edit: Editar + title: Puzles + createPuzzle: Crear Puzle + loadPuzzle: Cargar + reviewPuzzle: Revisar y Publicar + validatingPuzzle: Validando Puzle + submittingPuzzle: Enviando Puzzle + noPuzzles: Ahora mismo no hay puzles en esta sección. + categories: + levels: Niveles + new: Nuevos + top-rated: Los mejor valorados + mine: Mios + easy: Fáciles + hard: Difíciles + completed: Completados + medium: Medios + official: Oficiales + trending: Tendencias de hoy + trending-weekly: Tendencias de la semana + categories: Categorías + difficulties: Por dificultad + account: Mis puzles + search: Buscar + validation: + title: Puzle no válido + noProducers: Por favor, ¡Pon un Productor de una sola pieza! + noGoalAcceptors: Por favor, ¡Pon un Aceptador de objetivos! + goalAcceptorNoItem: Uno o más aceptadores de objetivos no tienen asignado un + elemento. Transporta una forma hacia ellos para poner un objetivo. + goalAcceptorRateNotMet: Uno o más aceptadores de objetivos no están recibiendo + suficientes elementos. Asegúrate de que los indicadores están verdes + para todos los aceptadores. + buildingOutOfBounds: Uno o más edificios están fuera del área en la que puedes + construir. Aumenta el área o quítalos. + autoComplete: ¡Tu puzle se completa solo! Asegúrate de que tus productores de un + solo elemento no están conectados directamente a tus aceptadores de + objetivos. + difficulties: + easy: Fácil + medium: Medio + hard: Dificil + unknown: Unrated + dlcHint: ¿Ya compraste el DLC? Asegurate de tenerlo activado haciendo click + derecho a shapez.io en tu biblioteca, selecionando propiedades > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Estás haciendo tus acciones con demasiada frecuencia. Por favor, + espera un poco. + invalid-api-key: No pudimos conectar con el servidor, por favor intenta + actualizar/reiniciar el juego (Key de API Inválida). + unauthorized: No pudimos conectar con el servidor, por favor intenta + actualizar/reiniciar el juego (Sin Autorización). + bad-token: No pudimos conectar con el servidor, por favor intenta + actualizar/reiniciar el juego (Mal Token). + bad-id: El identificador del puzle no es válido. + not-found: No pudimos encontrar ese puzle. + bad-category: No pudimos encontar esa categoría. + bad-short-key: La clave que nos diste no es válida. + profane-title: El título de tu puzle contiene lenguaje profano. + bad-title-too-many-spaces: El título de tu puzle es demasiado breve. + bad-shape-key-in-emitter: Un productor de un solo elemento tiene un elemento no válido. + bad-shape-key-in-goal: Un aceptador de objetivos tiene un elemento no válido. + no-emitters: Tu puzle no contiene ningún productor de un solo item. + no-goals: Tu puzle no contiene ningún aceptador de objetivos. + short-key-already-taken: Esta clave ya está siendo usada, por favor usa otra. + can-not-report-your-own-puzzle: No pudes reportar tu propio puzle. + bad-payload: La petición contiene datos no válidos. + bad-building-placement: Tu puzle contiene edificios en posiciones no válidas. + timeout: El tiempo para la solicitud ha expirado. + too-many-likes-already: El puzle ha recibido demasiados me gusta ¡Si todavía + quieres eliminarlo, por favor contacta a support@shapez.io! (Solo + inglés) + no-permission: No tienes los permisos necesarios para llevar a cabo esta acción. diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml index 737b0fd6..59d4ad38 100644 --- a/translations/base-fi.yaml +++ b/translations/base-fi.yaml @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: VÄLILYÖNTI + loggingIn: Logging in demoBanners: title: Demoversio intro: Hanki pelin täysversio avataksesi kaikki ominaisuudet! @@ -72,6 +73,12 @@ mainMenu: savegameLevel: Taso <x> savegameLevelUnknown: Tuntematon taso savegameUnnamed: Nimetön + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -85,6 +92,9 @@ dialogs: viewUpdate: Näytä päivitys showUpgrades: Näytä päivitykset showKeybindings: Näytä pikanäppäimet + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Tuontivirhe text: "Tallennuksen tuonti epäonnistui:" @@ -180,6 +190,70 @@ dialogs: tutorialVideoAvailableForeignLanguage: title: Ohjevideo saatavilla desc: Tästä tasosta on saatavilla ohjevideo! Haluaisitko katsoa sen? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Liiku @@ -201,6 +275,7 @@ ingame: clearSelection: Tyhjennä valinta pipette: Pipetti switchLayers: Vaihda tasoa + clearBelts: Clear belts colors: red: Punainen green: Vihreä @@ -349,6 +424,47 @@ ingame: achievements: title: Saavutukset desc: Metsästä kaikki! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Kuljettimet, jakelijat & tunnelit @@ -559,15 +675,26 @@ buildings: name: Signaaligeneraattori description: Saatavilla vain hiekkalaatikkotilassa. Lähettää johtotasolla annetun signaalin normaaliin tasoon. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Muotojen Leikkaus - desc: Avasit <strong>Leikkurin</strong>, joka leikkaa muotoja - ylhäältä alas <strong>muodon suunnasta - riippumatta</strong>!<br><br>muista hankkiutua eroon jätteestä, tai - muuten <strong>se tukkii ja pysäyttää leikkurin</strong> - Siksi - olen antanut sinulle <strong>roskiksen</strong>, joka tuhoaa - kaiken sinne laitetun! + desc: Avasit <strong>Leikkurin</strong>, joka leikkaa muotoja ylhäältä alas + <strong>muodon suunnasta riippumatta</strong>!<br><br>muista + hankkiutua eroon jätteestä, tai muuten <strong>se tukkii ja + pysäyttää leikkurin</strong> - Siksi olen antanut sinulle + <strong>roskiksen</strong>, joka tuhoaa kaiken sinne laitetun! reward_rotater: title: Kääntö desc: Avasit <strong>Kääntäjän</strong>! Se kääntää muotoja myötäpäivään 90 @@ -629,11 +756,11 @@ storyRewards: reward_freeplay: title: Vapaapeli desc: Onnistuit! Avasit juuri <strong>vapaapelimuodon</strong>! Muodot luodaan - nyt <strong>satunnaisesti</strong><br><br> Koska keskusrakennus vaatii - tietyn <strong>kuljetuskapasiteetin</strong> tästä eteenpäin, suosittelen - lämpimästi rakentamaan koneen, joka tuottaa vaaditun muodon - automaattisesti!<br><br> Keskusrakennus lähettää pyydetyn muodon - johtotasolle, joten sinun ei tarvitse kuin analysoida se ja + nyt <strong>satunnaisesti</strong><br><br> Koska keskusrakennus + vaatii tietyn <strong>kuljetuskapasiteetin</strong> tästä eteenpäin, + suosittelen lämpimästi rakentamaan koneen, joka tuottaa vaaditun + muodon automaattisesti!<br><br> Keskusrakennus lähettää pyydetyn + muodon johtotasolle, joten sinun ei tarvitse kuin analysoida se ja konfiguroida tehtaasi sen perusteella. reward_blueprints: title: Piirustukset @@ -878,7 +1005,12 @@ settings: mapResourcesScale: title: Kartan resurssien koko description: Määrittää muotojen koon kartalla (loitonnettaessa). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Pikanäppäimet hint: "Vinkki: Muista käyttää CTRL, SHIFT ja ALT! Ne ottavat käyttöön erilaisia @@ -956,12 +1088,16 @@ keybindings: rotateToDown: "Käännä: osoittaa alas" rotateToRight: "Käännä: osoittaa oikealle" rotateToLeft: "Käännä: osoittaa vasemmalle" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: Tietoja tästä pelistä body: >- - Tämä peli on avointa lähdekoodia ja <a - href="https://github.com/tobspr" target="_blank">Tobias Springer</a>in - (siis minun) kehittämäni.<br><br> + Tämä peli on avointa lähdekoodia ja <a href="https://github.com/tobspr" + target="_blank">Tobias Springer</a>in (siis minun) kehittämäni.<br><br> Jos haluat avustaa, käy katsomassa <a href="<githublink>" target="_blank">shapez.io GitHubissa</a>.<br><br> @@ -1043,3 +1179,88 @@ tips: - Paina F4 nähdäksesi FPS laskurin ja virkistystaajuuden. - Press F4 kahdesti nähdäksesi hiiren ja kameran ruudun. - Klikkaa kiinnitetyn muodon vasemmalta puolelta irrottaaksesi sen. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index 34749836..5377c45b 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -11,14 +11,14 @@ steamPage: Et en plus, vous devrez aussi produire de plus en plus pour satisfaire la demande. La seule solution est de construire en plus grand ! Au début vous ne ferez que découper les formes, mais plus tard vous devrez les peindre — et pour ça vous devrez extraire et mélanger des couleurs ! En achetant le jeu sur Steam, vous aurez accès à la version complète, mais vous pouvez aussi jouer à une démo sur shapez.io et vous décider ensuite ! - what_others_say: What people say about shapez.io - nothernlion_comment: This game is great - I'm having a wonderful time playing, - and time has flown by. - notch_comment: Oh crap. I really should sleep, but I think I just figured out - how to make a computer in shapez.io - steam_review_comment: This game has stolen my life and I don't want it back. - Very chill factory game that won't let me stop making my lines more - efficient. + what_others_say: Ce que les gens pensent de Shapez.io + nothernlion_comment: Ce jeu est génial - Je passe un merveilleux moment à jouer, + et le temps s'est envolé. + notch_comment: Mince ! Je devrais vraiment me coucher, mais je crois que j'ai + trouvé comment faire un ordinateur dans Shapez.io + steam_review_comment: Ce jeu a volé ma vie et je ne veux pas la récupérer. Jeu + d'usine très cool qui ne me laissera pas arrêter de rendre mes lignes + plus efficaces. global: loading: Chargement error: Erreur @@ -50,6 +50,7 @@ global: escape: ESC shift: MAJ space: ESPACE + loggingIn: Logging in demoBanners: title: Version de démo intro: Achetez la version complète pour débloquer toutes les fonctionnalités ! @@ -70,6 +71,12 @@ mainMenu: savegameLevel: Niveau <x> savegameLevelUnknown: Niveau inconnu savegameUnnamed: Sans titre + puzzleMode: Mode Puzzle + back: Retour + puzzleDlcText: Vous aimez compacter et optimiser vos usines ? Achetez le DLC sur + Steam dès maintenant pour encore plus d'amusement! + puzzleDlcWishlist: Ajoute à ta liste de souhaits maintenant ! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -83,6 +90,9 @@ dialogs: viewUpdate: Voir les mises à jour showUpgrades: Montrer les améliorations showKeybindings: Montrer les raccourcis + retry: Réessayer + continue: Continuer + playOffline: Jouer Hors-ligne importSavegameError: title: Erreur d’importation text: "Impossible d’importer votre sauvegarde :" @@ -183,6 +193,73 @@ dialogs: title: Tutoriel disponible desc: Il y a un tutoriel vidéo pour ce niveau, mais il n’est disponible qu’en anglais. Voulez-vous le regarder ? + editConstantProducer: + title: Définir l'objet + puzzleLoadFailed: + title: Le chargement du Puzzle à échoué + desc: "Malheuresement, le puzzle n'a pas pu être chargé :" + submitPuzzle: + title: Envoyer le Puzzle + descName: "Donnez un nom à votre puzzle:" + descIcon: "Veuillez entrer un raccourci de forme unique, qui sera affichée comme + icône de votre puzzle (Vous pouvez générer le raccourci d'une forme + <link>ici</link>, ou en choisir une parmi les formes suggérées + alétoirement ci-dessous):" + placeholderName: Titre du Puzzle + puzzleResizeBadBuildings: + title: Impossible de redimensionner + desc: Vous ne pouvez pas rétrécir la zone, car certains bâtiments seraient en + dehors de la zone + puzzleLoadError: + title: Mauvais Puzzle + desc: "Le chargement du puzzle a échoué:" + offlineMode: + title: Mode hors-ligne + desc: Nous n'avons pas pu atteindre les serveurs, donc le jeu doit être mis en + mode hors ligne. Veuillez vous assurez que vous disposez d'une + connexion Internet active. + puzzleDownloadError: + title: Erreur de téléchargment + desc: "Le téléchargement a échoué:" + puzzleSubmitError: + title: Erreur d'envoi + desc: "L'envoi a échoué:" + puzzleSubmitOk: + title: Puzzle envoyé + desc: Félicitations ! Votre puzzle a été envoyé et peut maintenant être joué. + Vous pouvez maintenant le retrouver dans la section "Mes Puzzles". + puzzleCreateOffline: + title: Mode Hors-ligne + desc: Puisque vous êtes hors ligne, vous ne pourrez pas enregistrer et/ou + publier votre puzzle. Souhaitez-vous toujours continuer ? + puzzlePlayRegularRecommendation: + title: Recommandation + desc: Je recommande <strong>fortement</strong> de jouer au jeu normal jusqu'au + niveau 12 avant d'essayer le Puzzle DLC, sinon vous risqez de + rencontrer des méchanismes pas encore introduits. Voulez-vous + toujours continuer ? + puzzleShare: + title: Code copié + desc: Le code du puzzle (<key>) a été copié dans ton presse-papiers ! Il peut + être entré dans le menu des puzzles pour accéder au puzzle. + puzzleReport: + title: Signaler le Puzzle + options: + profane: Profane + unsolvable: Irrésolvable + trolling: Troll + puzzleReportComplete: + title: Merci pour votre retour! + desc: Le puzzle a été marqué. + puzzleReportError: + title: Échec du signalement + desc: "Votre signalement n'a pas pu être effectué:" + puzzleLoadShortKey: + title: Entrer un code + desc: Entrer le code du puzzle pour le charger. + puzzleDelete: + title: Supprimer le puzzle ? + desc: Êtes-vous sûr de vouloir supprimer '<title>' ? Cela sera irréversible ! ingame: keybindingsOverlay: moveMap: Déplacer @@ -204,6 +281,7 @@ ingame: clearSelection: Effacer la sélection pipette: Pipette switchLayers: Changer de calque + clearBelts: Supprimer les rails colors: red: Rouge green: Vert @@ -355,8 +433,51 @@ ingame: title: Me soutenir desc: Je le développe pendant mon temps libre ! achievements: - title: Achievements - desc: Hunt them all! + title: Succès + desc: Débloquez-les tous ! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Largeur + zoneHeight: Hauteur + trimZone: Optimiser la taille + clearItems: Supprimer les objets + share: Partager + report: Signaler + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Créateur de Puzzles + instructions: + - 1. Placez des <strong>Producteurs Constants</strong> pour fournir + des formes et des couleurs au joueur + - 2. Fabriquez une ou plusieurs formes que vous voulez que le joueur + fabrique plus tard et délivrez-la/les à un ou plusieurs + <strong>Récepteurs d'Objectif</strong> + - 3. Une fois qu'un Récépteur d'Objectif a reçu une forme pendant un + certain temps, il <strong>l'enregistre zn tant + qu'objectif</strong> que le joueur devra produire plus tard + (Indiqué par le <strong>badge vert</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Résolu ! + titleLike: "Cliquez sur le cœur si vous avez aimé le Puzzle:" + titleRating: À quel point avez-vous trouvé le puzzle diffcile ? + titleRatingDesc: Votre note m'aidera à vous faire de meilleures suggestions à l'avenir + continueBtn: Continuer à jouer + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Auteur + shortKey: Short Key + rating: Niveau de difficulté + averageDuration: Durée moyenne + completionRate: Taux de réussite shopUpgrades: belt: name: Convoyeurs, distributeurs et tunnels @@ -574,15 +695,28 @@ buildings: name: Générateur d’objet description: Seulement disponible en mode bac à sable. Renvoie le signal du calque de câblage sur le calque normal. + constant_producer: + default: + name: Producteur Constabnt + description: Sort constamment une forme ou une couleur spécifiée. + goal_acceptor: + default: + name: Récepteur d'Objetcif + description: Délivrez des formes au récepteur d'objectif pour les définir comme + objectif. + block: + default: + name: Bloc + description: Permet de bloquer une case. storyRewards: reward_cutter_and_trash: title: Découpage de formes - desc: You just unlocked the <strong>cutter</strong>, which cuts shapes in half - from top to bottom <strong>regardless of its - orientation</strong>!<br><br>Be sure to get rid of the waste, or - otherwise <strong>it will clog and stall</strong> - For this purpose - I have given you the <strong>trash</strong>, which destroys - everything you put into it! + desc: Vous venez de déverrouiller le <strong>découpeur</strong>, qui coupe les + formes en deux de haut en bas <strong>indépendamment de son + orientation</strong>!<br><br>Assurez-vous de vous débarrasser des + déchets, ou sinon <strong>il se bouchera et se bloquera</strong> - À + cet effet, Je vous ai donné la <strong>poubelle</strong>, qui + détruit tout ce que vous mettez dedans ! reward_rotater: title: Rotation desc: Le <strong>pivoteur</strong> a été débloqué ! Il pivote les formes de 90 @@ -608,9 +742,10 @@ storyRewards: <strong>placée au-dessus</strong> de la forme de gauche. reward_balancer: title: Répartiteur - desc: The multifunctional <strong>balancer</strong> has been unlocked - It can - be used to build bigger factories by <strong>splitting and merging - items</strong> onto multiple belts! + desc: Le <strong>répartiteur</strong> multifonctionnel a été débloqué - Il peut + être utilisé pour construire de plus grandes usines en + <strong>divisant et en rassemblant des objets</strong> sur plusieurs + convoyeurs ! reward_tunnel: title: Tunnel desc: Le <strong>tunnel</strong> a été débloqué. Vous pouvez maintenant faire @@ -716,14 +851,17 @@ storyRewards: gâteau : je vous donne aussi le <strong>transistor</strong> !" reward_virtual_processing: title: Traitement virtuel - desc: I just gave a whole bunch of new buildings which allow you to - <strong>simulate the processing of shapes</strong>!<br><br> You can - now simulate a cutter, rotator, stacker and more on the wires layer! - With this you now have three options to continue the game:<br><br> - - Build an <strong>automated machine</strong> to create any possible - shape requested by the HUB (I recommend to try it!).<br><br> - Build - something cool with wires.<br><br> - Continue to play - normally.<br><br> Whatever you choose, remember to have fun! + desc: Je viens de vous donner tout un tas de nouveaux bâtiments qui vous + permettent de <strong>simuler le traitement des + formes</strong>!<br><br> Vous pouvez maintenant simuler un + découpeur, un pivoteur, un assembleur et plus encore sur la couche + des fils ! Avec cela vous avez maintenant trois options pour + continuer le jeu:<br><br> - Construire une <strong>machine + automatique</strong> pour créer toute forme possible demandée par le + HUB (Je recommande d'essayer de le faire !).<br><br> - Construire + quelque chose de cool avec les fils.<br><br> - Continuer à jouer + normalement.<br><br> Quoi que vous choisissiez, n'oubliez pas de + vous amuser ! no_reward: title: Niveau suivant desc: "Ce niveau n’a pas de récompense mais le prochain, si !<br><br> PS : Ne @@ -922,6 +1060,11 @@ settings: title: Taille des ressources sur la carte description: Contrôle la taille des formes sur la vue d’ensemble de la carte visible en dézoomant. + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. + tickrateHz: <amount> Hz keybindings: title: Contrôles hint: "Astuce : N’oubliez pas d’utiliser CTRL, MAJ et ALT ! Ces touches activent @@ -1000,6 +1143,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Producteur Constant + goal_acceptor: Récepteur d'Objectif + block: Bloc + massSelectClear: Vider les convoyeurs + showShapeTooltip: Show shape output tooltip about: title: À propos de ce jeu body: >- @@ -1025,7 +1173,7 @@ demo: exportingBase: Exporter une image de toute la base settingNotAvailable: Indisponible dans la démo. tips: - - Le centre n’importe quelle forme, pas seulement la forme actuelle ! + - Le centre accepte n’importe quelle forme, pas seulement la forme actuelle ! - Assurez-vous que vos usines soient modulaires, cela paiera ! - Ne construisez pas trop près du centre, ou ce sera un énorme chaos ! - Si l’empilement ne fonctionne pas, essayez d’échanger les entrées. @@ -1101,3 +1249,91 @@ tips: - Appuyez sur F4 pour voir vos IPS et votre fréquence de rafraîchissement. - Appuyez deux fois sur F4 pour voir les coordonnées. - Cliquez sur une forme épinglée à gauche pour l’enlever. +puzzleMenu: + play: Jouer + edit: Éditer + title: Mode Puzzle + createPuzzle: Créer un Puzzle + loadPuzzle: Charger + reviewPuzzle: Revoir & Publier + validatingPuzzle: Validation du Puzzle + submittingPuzzle: Publication du Puzzle + noPuzzles: Il n'y a actuellement aucun puzzle dans cette section. + categories: + levels: Niveaux + new: Nouveau + top-rated: Les mieux notés + mine: Mes puzzles + easy: Facile + hard: Difficile + completed: Complété + medium: Medium + official: Officiel + trending: Trending today + trending-weekly: Trending weekly + categories: Catégories + difficulties: Par Difficulté + account: Mes Puzzles + search: Rechercher + validation: + title: Puzzle invalide + noProducers: Veuillez placer un producteur constant ! + noGoalAcceptors: Veuillez placer un accepteur d'objectif ! + goalAcceptorNoItem: Un ou plusieurs accepteurs d'objectif n'ont pas encore + attribué d'élément. Donnez-leur une forme pour fixer un objectif. + goalAcceptorRateNotMet: Un ou plusieurs accepteurs d'objectifs n'obtiennent pas + assez d'articles. Assurez-vous que les indicateurs sont verts pour + tous les accepteurs. + buildingOutOfBounds: Un ou plusieurs bâtiments se trouvent en dehors de la zone + constructible. Augmentez la surface ou supprimez-les. + autoComplete: Votre puzzle se complète automatiquement ! Veuillez vous assurer + que vos producteurs constants ne livrent pas directement à vos + accepteurs d'objectifs. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Vous effectuez vos actions trop fréquemment. Veuillez attendre un peu + s'il vous plait. + invalid-api-key: Échec de la communication avec le backend, veuillez essayer de + mettre à jour/redémarrer le jeu (clé Api invalide). + unauthorized: Échec de la communication avec le backend, veuillez essayer de + mettre à jour/redémarrer le jeu (non autorisé). + bad-token: Échec de la communication avec le backend, veuillez essayer de mettre + à jour/redémarrer le jeu (Mauvais jeton). + bad-id: Identifiant de puzzle non valide. + not-found: Le puzzle donné n'a pas pu être trouvé. + bad-category: La catégorie donnée n'a pas pu être trouvée. + bad-short-key: La clé courte donnée n'est pas valide. + profane-title: Le titre de votre puzzle contient des mots interdits. + bad-title-too-many-spaces: Le titre de votre puzzle est trop court. + bad-shape-key-in-emitter: Un producteur constant a un élément invalide. + bad-shape-key-in-goal: Un accepteur de but a un élément invalide. + no-emitters: Votre puzzle ne contient aucun producteur constant. + no-goals: Votre puzzle ne contient aucun accepteur de but. + short-key-already-taken: Cette clé courte est déjà prise, veuillez en utiliser une autre. + can-not-report-your-own-puzzle: Vous ne pouvez pas signaler votre propre puzzle. + bad-payload: La demande contient des données invalides. + bad-building-placement: Votre puzzle contient des bâtiments placés non valides. + timeout: La demande a expiré. + too-many-likes-already: The puzzle already got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-he.yaml b/translations/base-he.yaml new file mode 100644 index 00000000..426740e0 --- /dev/null +++ b/translations/base-he.yaml @@ -0,0 +1,1209 @@ +steamPage: + shortText: shapez.io הוא משחק בנוגע לבניית מפעלים אוטמטים ליצירה של צורת מסובכות + יותר ויותר במפה אין סופית. + discordLinkShort: דיסקורד רשמי + intro: >- + אתה אוהב משחקי אוטומציה? אתה במקום הנכון! + + shapez.io הוא משחק שלווה שבו אתה בונה מפעל בשביל ליצור צורות גאומטריות אוטומטית. ככל שמתקדמים השלבים, הצורות נהיות יותר ויותר מסובכות, ואתה צריך להפתח על המפה האין סופית. + + ואם זה לא היה מספיק, אתה צריך ליצור יותר ויותר צורות בשביל לספק את הדרישה - הדבר היחיד שיכול לעזור זה להגדיל את המפעל! בזמן שבהתחלה אתה רק צריך לערוך צורות, בהמשך אתה צריך לצבוע אותם בעזרת צבעים שאתה מערבב. + + קניית המשחק בsteam תתן לך גישה למשחק המלא, אבל אתה יכול לשחק משחק דמו בhttps://shapez.io/ ולהחליט אחר כך. + what_others_say: What people say about shapez.io + nothernlion_comment: This game is great - I'm having a wonderful time playing, + and time has flown by. + notch_comment: Oh crap. I really should sleep, but I think I just figured out + how to make a computer in shapez.io + steam_review_comment: This game has stolen my life and I don't want it back. + Very chill factory game that won't let me stop making my lines more + efficient. +global: + loading: טוען + error: שגיאה + thousandsDivider: "," + decimalSeparator: . + suffix: + thousands: k + millions: M + billions: B + trillions: T + infinite: ∞ + time: + oneSecondAgo: לפני שנייה אחת + xSecondsAgo: לפני <x> שניות + oneMinuteAgo: לפני דקה אחת + xMinutesAgo: לפני <x> דקות + oneHourAgo: לפני שעה אחת + xHoursAgo: לפני <x> שעות + oneDayAgo: לפני יום אחד + xDaysAgo: לפני <x> ימים + secondsShort: <seconds>s + minutesAndSecondsShort: <minutes>m <seconds>s + hoursAndMinutesShort: <hours>h <minutes>m + xMinutes: <x> דקות + keys: + tab: TAB + control: CTRL + alt: ALT + escape: ESC + shift: SHIFT + space: SPACE + loggingIn: Logging in +demoBanners: + title: גרסאת דמו + intro: תשיג את המשחק המלא כדי לפתוח את כל הפיצ'רים +mainMenu: + play: שחק + continue: המשך + newGame: משחק חדש + changelog: עדכונים + subreddit: רדיט + importSavegame: יבוא + openSourceHint: המשחק הזה הוא עם קוד פתוח! + discordLink: שרת הדסקורד הרשמי + helpTranslate: תעזור לתרגם! + madeBy: <author-link> :יוצר המשחק + browserWarning: מצטערים, אבל המשחק רק באיטיות על הדפדפן שלך! תשיג את הגרסא + להורדה או שתוריד גוגל לחוויה המלאה. + savegameLevel: שלב <x> + savegameLevelUnknown: שלב לא ידוע + savegameUnnamed: ללא שם + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc +dialogs: + buttons: + ok: אישור + delete: מחיקה + cancel: ביטול + later: מאוחר יותר + restart: פתיחה מחדש + reset: אפס + getStandalone: השג את הגרסא להורדה + deleteGame: אני יודע מה אני עושה + viewUpdate: צפה בעדכון + showUpgrades: הצג שדרוגים + showKeybindings: הצג מקשים + retry: Retry + continue: Continue + playOffline: Play Offline + importSavegameError: + title: שגיאה ביבוא + text: "לא הצליח ליבא את השמירה שלך:" + importSavegameSuccess: + title: המשחק יובא + text: ייבא את המשחק שלך בהצלחה. + gameLoadFailure: + title: השמיררה שבורה + text: לא הצליח לטעון את השמירה. + confirmSavegameDelete: + title: אימות המחיקה + text: אתה בטוח שאתה רוצה למחוק את השמירה הבאה?<br><br> '<savegameName>' בשלב + <savegameLevel><br><br> פעולה זו אינה הפיכה! + savegameDeletionError: + title: נכשל למחוק + text: "נכשל למחוק רת השמיקה:" + restartRequired: + title: איתחול נדרש + text: אתה צריך לסגור ולפתוח את המשחק כדי לישם הגדרה זו. + editKeybinding: + title: שינוי מקשים + desc: תלחץ על מקש או על כפתור בעכבר שאתה רוצה להשתמש, או escape בשביל לבטל. + resetKeybindingsConfirmation: + title: אפס את המקשים + desc: זה יחזיר את כל המקשים להגדרה המקורית. בבקשה תאמת. + keybindingsResetOk: + title: אפס את המקשים + desc: זה יחזיר את כל המקשים להגדרה המקורית! + featureRestriction: + title: גראת דמו + desc: ניסית להשתמש בפיצ'ר (<feature>) שהוא לא זמין בדמו. תשיג את הגרסה להורדה + בשביל החוויה המלאה! + oneSavegameLimit: + title: הגבלת שמירה + desc: אתה יכול לשמור רק שמירה אחת בכל זמן נתון בגרסת הדמו. אתה יכול למחוק את + האחד הנוכחי או להשיג את הגרסה להורדה! + updateSummary: + title: עדכון חדש! + desc: "כאן כל השינויים מאז ששיחקת לאחרונה:" + upgradesIntroduction: + title: נפתח השדרוגים + desc: כל הצורות שייצרת יכולים עכשיו לשמש אותך בשביל לפתוח שדרוגים - <strong>אל + תהרוס את המפעלים הישנים שלך!</strong> אתה יכול לגשת לשדרוגים בפינה + העליונה ימנית של המסך. + massDeleteConfirm: + title: אישור מחיקה + desc: אתה מוחק הרבה מבנים (<count> בשביל להיות מדוייק)! אתה בטוח שאתה רוצה לעשות + את זה? + massCutConfirm: + title: אישור הזזה + desc: אתה מזיז הרבה מבנים (<count> בשביל להיות מדוייק)! אתה בטוח שאתה רוצה לעשות + את זה? + massCutInsufficientConfirm: + title: איזור הזזה + desc: אתה לא תוכל להדביק את האיזור הזה, אתה בטוח שאתה רוצה לחתוך אותו? + blueprintsNotUnlocked: + title: עדיין לא נפתח + desc: תסיים את שלב 12 בשביל לפתוח תבניות + keybindingsIntroduction: + title: מקשים שימושיים + desc: "במשחק הזה ישנם המון מקשים בשביל להקל כל בניית מפעלים גדולים. הנה כמה מהם, + אבל כדאי לך <strong>להסתכל על הגדרות המקשים</strong>!<br><br> <code + class='keybinding'>CTRL</code> + לגרור את העכבר: לבחוק שטח.<br> + <code class='keybinding'>SHIFT</code>: החזק בשביל לבנות כמה מאותו + מבנה.<br> <code class='keybinding'>ALT</code>: הפוך כיוון של + המסוע.<br>" + createMarker: + title: סימון חדש + titleEdit: עריכת סימון + desc: תן לזה שם, אתה יכול גם לרשום <strong>קוד קצר</strong> של צורה (שאתה יכול + לייצר <link>כאן</link>) + editSignal: + title: קבע ערך + descItems: "תבחר מההבאים:" + descShortKey: ... או שתשתמש ב <strong>קוד קצר</strong> של צורה (שאתה יכול לייצר + <link>כאן</link>) + markerDemoLimit: + desc: אתה יכול ליצור רק שני סימונים בגרסאת הדמו. תשיג את הגרסה להורדה בשביל כמול + לא מוגבלת של סימונים! + exportScreenshotWarning: + title: יצוא צילום מסך + desc: אתה ביקשת לייצא את המפעל שלך כצילום מסך. בבקשה תהיה מודע שזה יכול להיות די + איטי למפעלים גדולים ויכול להיות שזה יקריס לך את המשחק! + renameSavegame: + title: שנה שם לשמירה + desc: אתה יכול לשנות את שם השמירה כאן. + tutorialVideoAvailable: + title: הדרכה זמינה + desc: יש סרטון הדרכה זמין לשלב הזה! תרצה לצפות בזה? + tutorialVideoAvailableForeignLanguage: + title: הדרכה זמינה + desc: יש סרטון הדרכה לשלב הזה אבל הוא באנגלית. תרצה לצפות בו? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! +ingame: + keybindingsOverlay: + moveMap: הזזה + selectBuildings: בחירת שטח + stopPlacement: הפסק השמה + rotateBuilding: סיבוב מבנה + placeMultiple: מקם כמה + reverseOrientation: כיוון הפוך + disableAutoOrientation: ביטול כיוון אוטומטי + toggleHud: הסתר/הצג תפריטים + placeBuilding: שים מבנה + createMarker: שים סימון + delete: מחיקה + pasteLastBlueprint: הדבקת התבנית האחרונה + lockBeltDirection: הנחת מסוע מהיר + plannerSwitchSide: הפוך צד המסוע + cutSelection: חיתוח + copySelection: העתקה + clearSelection: ביטול הבחירה + pipette: דגימה + switchLayers: החלפת שכבה + clearBelts: Clear belts + colors: + red: אדום + green: ירוק + blue: כחול + yellow: צהוב + purple: ורוד + cyan: תכלת + white: לבן + black: שחור + uncolored: אפור + buildingPlacement: + cycleBuildingVariants: לחץ <key> בשביל להחליף סוג. + hotkeyLabel: "מקש: <key>" + infoTexts: + speed: מהירות + range: אורך + storage: אחסון + oneItemPerSecond: חפץ 1 / second + itemsPerSecond: <x> חפצים / s + itemsPerSecondDouble: (x2) + tiles: <x> משבצות + levelCompleteNotification: + levelTitle: שלב <level> + completed: הסתיים + unlockText: נפתח <reward>! + buttonNextLevel: שלב הבא + notifications: + newUpgrade: עדכון חדש זמין! + gameSaved: המשחק שלך נשמר. + freeplayLevelComplete: שלב <level> הסתיים! + shop: + title: שדרוגים + buttonUnlock: שדרג + tier: רמה <x> + maximumLevel: רמה מקסימלית (מהירות x<currentMult>) + statistics: + title: סטטיסטיקה + dataSources: + stored: + title: מאוכסן + description: .כל הצורות שמאוכסנות בהאב + produced: + title: מיוצר + description: .כל הצורות שנוצרות בתוך המפעל שלך, כולל צורות בשביל צורות אחרות + delivered: + title: מגיע + description: .צורות שמגיעות להאב ברגע זה + noShapesProduced: .עדיין לא נוצרו צורות + shapesDisplayUnits: + second: <shapes> / s + minute: <shapes> / m + hour: <shapes> / h + settingsMenu: + playtime: זמן משחק + buildingsPlaced: מבנים + beltsPlaced: מסועים + tutorialHints: + title: צריך עזרה? + showHint: הצג רמז + hideHint: סגור + blueprintPlacer: + cost: מחיר + waypoints: + waypoints: סימונים + hub: האב + description: מקש שמאלי על סימון בשביל להגיע אליו, מקש ימני בשביל למחוק + אותו.<br><br>לחץ <keybinding> בשביל ליצור סימון במרכז המסך, או + <strong>מקש-ימני</strong> בשביל ליצור סימון במקום של העכבר. + creationSuccessNotification: הסימון נוצר. + shapeViewer: + title: שכבות + empty: ריק + copyKey: העתק קוד + interactiveTutorial: + title: מדריך + hints: + 1_1_extractor: שים <strong>חוצב</strong> מעל <strong>צורת עיגול</strong> בשביל + להשיג אותה! + 1_2_conveyor: "חבר את החוצב עם <strong>מסועים</strong> להאב שלך!<br><br>טיפ: + <strong>לחץ וגרור</strong> את המסוע עם העכבר שלך!" + 1_3_expand: "זה <strong>לא</strong> משחק שמחכים בו הרבה! בנה עוד חוצבים ומסועים + בשביל לסיים את המשימה מהר יותר.<br><br>טיפ: החזק + <strong>SHIFT</strong> בשביל לשים כמה חוצבים, והשתמש + ב<strong>R</strong> בשביל לסובב אותם." + 2_1_place_cutter: "עכשיו שים <strong>חותך</strong> בשביל לחתוך את העיגולים לשני + חצאים!<br><br> נ.ב: החותך תמיד חותך <strong>אנכית</strong> לא + משנה הכיוון שלו." + 2_2_place_trash: החותך יכול <strong>להסתם ולהתקע</strong>!<br><br> השתמש + ב<strong>פח</strong> בשביל להפתר מהשארית הלא שימושית (בינתיים). + 2_3_more_cutters: "עבודה טובה! עכשיו שים <strong>עוד 2 חותכים</strong> בשביל + להאיץ את התהליך!<br><br> נ.ב: השתמש <strong>במקשים 0-9</strong> + בשביל לבחור מבנים מהר יותר!" + 3_1_rectangles: "עכשיו בוא נחצוב כמה מלבנים! <strong>בנה 4 חוצבים</strong> וחבר + אותם עם מסועים להאב.<br><br> נ.ב: החזק <strong>SHIFT</strong> + בזמן שאתה גורר מסוע בשביל לבנות מסועים מהר יותר!" + 21_1_place_quad_painter: שים את ה<strong>צובע המרובע</strong> והשיג כמה + <strong>עיגולים</strong>, צבע <strong>לבן</strong> וצבע + <strong>אדום</strong>! + 21_2_switch_to_wires: החלף לשכבת הכבלים ע"י לחיצה על <strong>E</strong>!<br><br> + לאחר מכן <strong>חבר את כל ארבעת הכניסות</strong> של הצובע + לכבלים! + 21_3_place_button: נהדר! עכשיו שים <strong>מפסק</strong> ותחבק אותו לכבלים! + 21_4_press_button: "חלץ על המפסק כדי שהוא<strong>יפיק אות חיובי</strong> וזה + יפעיל את הצובע המרובע.<br><br> נ.ב: אתה לא צריך לחבר את כל + הכניסות! נסה לחבר רק 2." + connectedMiners: + one_miner: חוצב 1 + n_miners: <amount> חוצבים + limited_items: מוגבל ל<max_throughput> + watermark: + title: גרסת דמו + desc: לחץ פה בשביל לראות את היתרונות של הגרסה להורדה! + get_on_steam: Steamהשג ב + standaloneAdvantages: + title: "!השג את הגרסה המלאה" + no_thanks: "!לא, תודה" + points: + levels: + title: 12 שלבים חדשים + desc: '!סה"כ 26 שלבים' + buildings: + title: 18 מבנים חדשים + desc: "!אפשרות להפוך את המפעל לאוטומטי לגמרי" + achievements: + title: הישגים + desc: "!השג את כולם" + upgrades: + title: רמות לשדרוגים ∞ + desc: "!לגרסת הדמו הזאת יש רק 5" + markers: + title: סימונים ∞ + desc: "!אף פעם לא תלך לאיבוד במפעל שלך" + wires: + title: כבלים + desc: "!מימד חדש לגמרי" + darkmode: + title: תצוגה כהה + desc: "!תפסיק להכאיב לעיניים שלך" + support: + title: תמוך בי + desc: "!אני יצרתי רת המשחק הזה בזמני החופשי" + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate +shopUpgrades: + belt: + name: מסועים, מסדרים & מנהרות + description: מהירות x<currentMult> → x<newMult> + miner: + name: חציבה + description: מהירות x<currentMult> → x<newMult> + processors: + name: חיתוך, סיבוב & חיבור + description: מהירות x<currentMult> → x<newMult> + painting: + name: ערבוב & צביעה + description: מהירות x<currentMult> → x<newMult> +buildings: + hub: + deliver: ספק + toUnlock: בשביל + levelShortcut: שלב + endOfDemo: סוף הדמו + belt: + default: + name: מסוע + description: מעביר חפצים, לחץ וגרור בשביל לשים כמה. + miner: + default: + name: חוצב + description: שים מעל צורה או צבע בשביל להשיג אותם. + chainable: + name: חוצב (מתחבר) + description: שים מעל צורה או צבע בשביל להשיג אותם. יכול להתחבר. + underground_belt: + default: + name: מנהרה + description: מאפשר לך להעביר חפצים מתחת למבנים ומסועים. + tier2: + name: מנהרה רמה II + description: מאפשר לך להעביר חפצים מתחת למבנים ומסועים. + balancer: + default: + name: מאזן + description: רב שימישי- מחלק את כל הדברים שנכנסים באופן שווה לכל היציאות. + merger: + name: ממזג (קומפקטי) + description: מחבר שני מסועים לאחד. + merger-inverse: + name: ממזג (קומפקטי) + description: מחבר שני מסועים לאחד. + splitter: + name: מפצל (קומפקטי) + description: מפצל מסוע אחד לשניים. + splitter-inverse: + name: מפצל (קומפקטי) + description: מפצל מסוע אחד לשניים. + cutter: + default: + name: חותך + description: חותך את הצורות אנכית ומוציא את שני החלקים. <strong>אם אתה משתמש רק + בחלק אחד, תוודא שאתה הורס את החלק השני או שיווצר סתימה!</strong> + quad: + name: חותך (מרובע) + description: חותך את הצורות לארבעה חלקים. <strong>אם אתה משתמש רק בחלק אחד, + תוודא שאתה הורס את השאר החלקים או שיווצר סתימה!</strong> + rotater: + default: + name: מסובב + description: מסובב חלקים עם כיוון השעון ב90 מעלות. + ccw: + name: מסובב (נגד כיוון השעון) + description: מסובב חלקים נגד כיוון השעון ב90 מעלות. + rotate180: + name: מסובב (180°) + description: מסובב חלקים ב180 מעלות. + stacker: + default: + name: מחבר + description: מחבר את מה שנכנס, באותה שכבה אם אפשרי, אחרת הימני מוערם מעל השמאלי. + mixer: + default: + name: מערבב + description: מערבב את שני הצבעים לפי צבעי האור. + painter: + default: + name: צובע + description: צובע את הצורות מנכנסות הצד השמאלי בצבע שנכנס מלמעלה. + mirrored: + name: צובע + description: צובע את הצורות מנכנסות הצד השמאלי בצבע שנכנס מלמטה. + double: + name: צובע (כפול) + description: צובע את הצורות מנכנסות הצד השמאלי בצבע שנכנס מלמעלה. + quad: + name: צובע (מרובע) + description: מאפשר לצבוע כל רבע בצורה בנפרד. רק מקומות עם <strong>ערך + חיובי</strong> בשכבת הכבלים יצבעו! + trash: + default: + name: פח + description: הורס כל מה שנכנס אליו לנצח. + storage: + default: + name: אחסון + description: מאחסן חפצים שנשארו עד גבול מסויים. הוא מוציא בעדיפות לצד השמאלי, אז + אתה יכול להשתמש בצד הימני כשער הצפה. + wire: + default: + name: כבל + description: מעביר מידע, שהוא יכול להיות צורה, צבע, או בולאיני (0 או 1). כבלים + בצבים שונים לא יתחברו אחד לשני. + second: + name: כבל + description: מעביר מידע, שהוא יכול להיות צורה, צבע, או בולאיני (0 או 1). כבלים + בצבים שונים לא יתחברו אחד לשני. + wire_tunnel: + default: + name: הצלבת כבלים + description: מאפשר שני כבלים לחצות אחד את השני בלי להתחבר. + constant_signal: + default: + name: אות קבוע + description: מיצר אות קבוע, שהוא יכול להיות צורה, צבע, או בולאיני (0 או 1). + lever: + default: + name: מפסק + description: ניתן להפעיל או להפסיק אותו בשביל ליצור אות בולאיני (0 או 1) בשכבת + הכבלים, וכך יכול לשלוט על פעולה של מבנים כמו לדוגמה מסנן. + logic_gate: + default: + name: שער לוגי גם + description: פולט את הבוליאני "1" אם שני הכניסות הם ערך חיובי (ערך חיובי הוא כל + צורה, צבע או הבוליאני "1"). + not: + name: שער לוגי לא + description: פולט את הבוליאני "1" אם הכניסה הוא אינו ערך חיובי (ערך חיובי הוא כל + צורה, צבע או הבוליאני "1"). + xor: + name: שער לוגי קסור + description: Emits a boolean "1" if one of the inputs is truthy, but not both. + (Truthy means shape, color or boolean "1") + or: + name: שער לוגי או + description: פולט את הבוליאני "1" אם אחד מהכניסות הוא ערך חיובי (ערך חיובי הוא + כל צורה, צבע או הבוליאני "1"). + transistor: + default: + name: טרנזיסטור + description: מעביר את האינפורמציה מלמטה ללמעלה אם הכניסה מהצד היא ערך + חיובי (ערך חיובי הוא כל צורה, צבע או הבוליאני "1"). + mirrored: + name: טרנזיסטור + description: מעביר את האינפורמציה מלמטה ללמעלה אם הכניסה מהצד היא ערך + חיובי (ערך חיובי הוא כל צורה, צבע או הבוליאני "1"). + filter: + default: + name: מסנן + description: חבר לאות בשביל לסנן שרק משהו אחד יצא מלמעלה והשאר מהצד. יכול גם + לקבל ערכים בוליאנים (0 או 1). + display: + default: + name: מסך + description: חבר אות בשביל להציג אותו על המסך, האות יכול להיות צורה, צבע או + בוליאני. + reader: + default: + name: מסוע מדידה + description: מאפשר מדידה של הממוצע של כמה חפצים עוברים במסוע, מפיץ אות של החפץ + האחרון שעבר לשכבת הכבלים (מתי שנפתח). + analyzer: + default: + name: מנתח צורות + description: מנתח את הרבע העליון שמאלי של השכבה התחתונה של הצורה ומחזיר את הצורה + והצבע שלה. + comparator: + default: + name: משווה + description: מחזיר את הבולאיני "1" אם שני האותות הם שווים בדיוק. יכול להשוות + צורות צבעים ובוליאנים. + virtual_processor: + default: + name: חותך וירטואלי + description: חותך באופן וירטואלי את הצורה לשני חצאים. + rotater: + name: מסובב וירטואלי + description: מסובב באופן וירטואלי את הצורה עם כיוון השעון. + unstacker: + name: פורש וירטואלי + description: מוציא באופן וירטואלי את השכבה העליונה לצד ימין ואת השאר לצד שמאל. + stacker: + name: מחבר וירטואלי + description: מחבר באופן וירטואלי את הצורה בצד ימין על הצורה בצד שמאל. + painter: + name: צובע וירטואלי + description: צובע באופן וירטואלי את הצורה מלמטה בצבע מימין. + item_producer: + default: + name: מייצר חפצים + description: זמין רק במצב ארגז חול, מוצא את האות מהכבלים לשכבה הרגילה. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. +storyRewards: + reward_cutter_and_trash: + title: חיתוך צורות + desc: אתה בדיוק קיבלת גישה ל<strong>חותך</strong>, שחותך צורות לחצי אנכית + <strong>לא משנה איזה כיוון הוא</strong>!<br><br>וודא שאתה נפתר + מהשאריות, אחרת <strong>הוא יסתם ויתקע</strong> - בשביל המטרה הזאת + אני הבאתי לך את ה<strong>פח</strong>, שהורס כל מה שאתה מכניס אליו! + reward_rotater: + title: סיבוב + desc: קיבלת גישה ל<strong>מסובב</strong> ! הוא מסובב צורות עם כיוון השעון ב90 + מעלות. + reward_painter: + title: צביעה + desc: "קיבלת גישה ל<strong>צובע</strong> - תשיג צבעים (בדיוק כמו שאתה משיג + צורות) ותחבר אותם עם הצורות בעזרת הצובע בשביל לצבוע + אותם!<br><br>נ.ב: אם אתה עיוור צבעים, יש <strong>מצב עיוור + צבעים</strong> בהגדרות!" + reward_mixer: + title: ערבוב צבעים + desc: קיבלת גישה ל<strong>מערבב</strong> - הוא מערבב שני צבעים לפי <strong>צבעי + האור</strong>! + reward_stacker: + title: חיבור + desc: עכשיו אתה יכול לחבר צורות עם ה<strong>מחבר</strong>! שני הצורות שנכנסות + מתחברות. אם הם יכולים להיות אחד ליד השני הם <strong>יודבקו</strong>, + אחרת, הימני <strong>יודבק מעל</strong> השמאלי! + reward_balancer: + title: מאזן + desc: קיבלת גישה ל<strong>מאזן</strong> הרב שימושי - הוא יכול לשמש בשביל לבנות + מפעלים גדולים יותר ע"י <strong>פיצול וחיבור חפצים</strong> על מספר + מסועים! + reward_tunnel: + title: מנהרה + desc: קיבלת גישה ל<strong>מנהרה</strong> - אתה יכול עכשיו להעביר חפצים מתחת + למסועים ומבנים עם זה! + reward_rotater_ccw: + title: סיבוב נגד כיוון השעון + desc: קיבלת גישה לצורה נוספת של <strong>מסובב</strong> - זה מאפשר לך לסובב צורות + נגד כיוון השעון! בשביל לבנות את זה, תבחר מסובב, ו<strong>תלחץ 'T' + בשיל לחליף בין הסוגים שלו</strong>! + reward_miner_chainable: + title: חוצב מתחבר + desc: "קיבלת גישה ל <strong>חוצב מתחבר</strong>! הוא יכול <strong>להעביר את + החומרים קדימה</strong> לחוצבים האחרים, אז אתה יכול לחצוב חומרים יותר + ביעילות!<br><br> נ.ב: החוצבים הישנים הוחלפו עכשיו ברצועת הכלים שלך!" + reward_underground_belt_tier_2: + title: מהנרות רמה II + desc: קיבלת גישה לצורה נוספת של <strong>מנהרות</strong> - יש לו <strong>יותר + אורך</strong>, ואתה יכול גם לערבב ולהתאים את המנהרות האלו עכשיו! + reward_merger: + title: ממזג קומפקטי + desc: קיבלת גישה ל<strong>ממזג</strong>, צורה של <strong>מאזן</strong> - הוא + יכול למזג שני מסועים למסוע אחד! + reward_splitter: + title: מפצל קומפקטי + desc: קיבלת גישה ל<strong>מפצל</strong>, צורה של <strong>מאזן</strong> - הוא + יכול לפצל מסוע אחד לשני מסועים! + reward_belt_reader: + title: Belt reader + desc: קיבלת גישה ל<strong>מסוע מדידה</strong>! זה מאפשר לך למדוד כמה חפצים + עוברים במסוע.<br><br>וחכה עד שתפתח את הכבלים - אז זה יהיה ממש + שימושי! + reward_cutter_quad: + title: חותך מרובע + desc: קיבלת גישה לצורה נוספת של <strong>חותך</strong> - זה מאפשר לך לחתוך צורה + לארבעה ל<strong>ארבעה חלקים</strong> במקום רק שניים! + reward_painter_double: + title: צובע כפול + desc: קיבלת גישה לצורה נוספת של <strong>צובע</strong> - זה עובד דומה לצובע רגיל, + אבל מאפשר לך לצבוע <strong>שני צורות בבת אחת</strong>, משתמש בצבע + אחד במקום שניים! + reward_storage: + title: אחסון + desc: קיבלת גישה ל<strong>אחסון</strong> - זה מאפשר לך לאחסן חפצים עד כמות + מסויימת!<br><br> הוא מוציא בעדיפות לצד השמאלי, אז אתה יכול להשתמש + בצד הימני כ<strong>שער הצפה</strong>! + reward_blueprints: + title: תבניות + desc: אתה יכול עכשיו <strong>להעתיק ולהדביק</strong> חלקים מהמפעל שלך! תבחר שטח + (החזק CTRL, וגרור עם העכבר), ואז לחץ 'C' בשביל להעתיק את + זה.<br><br>הדבקה זה <strong>לא חינם</strong>, אתה צריך ליצר + <strong>צורת תבנית</strong> בשביל לקנות את זה! (אלו שבדיוק יצרת). + reward_rotater_180: + title: מסובב (180°) + desc: קיבלת גישה <strong>מסובב</strong> 180 מעלות! - זה מאפשר לך לסובב צורה ב + 180 מעולות (הפתעה! :D) + reward_wires_painter_and_levers: + title: כבלים & צובע מרובע + desc: "קיבלת גישה ל<strong>שכבת הכבלים</strong>: זה שכבה נפרדת מעל השכבה הרגילה + שמאפשרת לך הרבה מכניקות חדשות!<br><br> בשביל להתחיל, אני נתתי לך + גישה ל<strong>צובע המרובע</strong> - חבר את הכבלים למקומות שאתה רוצה + לצבוע בשכבת הכבלים!<br><br> בשביל להחליף לשכבת הכבלים, לחץ + <strong>E</strong>. <br><br> נ.ב: <strong>תפעיל רמזים</strong> + בהגדרות כדי להפעיל את המדריך של הכבלים!" + reward_filter: + title: מסנן + desc: קיבלת גישה ל<strong>מסנן</strong>! זה יאפשר לך לסנן חפצים לפי האותות משכבת + הכבלים.<br><br> אתה יכול גם לתת לו אות בולאיני (1 או 0) בשביל להפעיל + או לכבות אותו לגמרי. + reward_display: + title: מסך + desc: "קיבלת גישה ל<strong>מסך</strong> - חבר אות בשכבת הכבלים בשביל להציג + אותו!<br><br> נ.ב: שמת לב שמסועים ואחסון מוציאים את החפץ האחרון שהיה + בהם? נסה להציג את זה על מסך!" + reward_constant_signal: + title: אות קבוע + desc: קיבלת גישה ל<strong>אות קבוע</strong> לשכבת הכבלים! זה שימושי בשביל לחבר + אותו ל<strong>מסננים</strong> לדוגמה.<br><br> האות הקבוע יכול ליצור + <strong>צורה</strong>, <strong>צבע</strong> או + <strong>בוליאני</strong> (1 או 0). + reward_logic_gates: + title: שערים לוגים + desc: "קיבלת גישה ל<strong>שערים לוגים</strong>! אתה לא צריך להתרגש מזה, אבל זה + די מגניב!<br><br> עם שערים לוגים אתה יכול לחשב את הפעולות: וגם, או, + קסור ולא.<br><br> כבונוס אני גם הבאתי לך גם את + ה<strong>טרנזיסטור</strong>!" + reward_virtual_processing: + title: עיבוד וירטואלי + desc: אני הבאתי לך המון מבנים שמאפשרים לך <strong>לדמות עיבוד שלך + צורות</strong>!<br><br> אתה יכול לדמות בשכבת הכבלים חיתוך, סיבוב, + חיבור ועוד! עם זה יש לך עכשיו שלושה אפשרויות להמשיך את + המשחק:<br><br> - לבנות <strong>מכונה אוטומטית</strong> שתייצר כל + צורה אפשרית שההאב מבקש (אני ממליץ לנסות את זה!).<br><br> - לבנות + משהו מגניב עם הכבלים.<br><br> - להמשיך לשחק רגיל.<br><br> עם כל מה + שתבחר, תזכור להנות! + no_reward: + title: שלב הבא + desc: "השלב הזה לא הביא לך פרסים, אבל ההבא יביא! <br><br> נ.ב: עדיף לא להרוס את + המפעלים הקיימים שלך - אתה תצטרך את <strong>כל</strong> הצורות האלו + מאוחר יותר בשביל <strong>לפתוח שדרוגים</strong>!" + no_reward_freeplay: + title: שלב הבא + desc: כל הכבוד! + reward_freeplay: + title: משחק חופשי + desc: You did it! You unlocked the <strong>free-play mode</strong>! This means + that shapes are now <strong>randomly</strong> generated!<br><br> + Since the hub will require a <strong>throughput</strong> from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!<br><br> The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. + reward_demo_end: + title: סוף הדמו + desc: הגעת לסוף גרסת הדמו +settings: + title: הגדרות + categories: + general: כללי + userInterface: תפריטים + advanced: מתקדם + performance: ביצועים + versionBadges: + dev: Development + staging: Staging + prod: Production + buildDate: Built <at-date> + rangeSliderPercentage: <amount> % + labels: + uiScale: + title: גודל תפריטים + description: שנה את הגודל של התפריטים + scales: + super_small: זעיר + small: קטן + regular: רגיל + large: גדול + huge: עצום + autosaveInterval: + title: זמן בין שמירות אוטומטיות + description: .משפיע על תדירות השמירה האוטומטית. אתה יכול גם לבטל את זה לגמרי + intervals: + one_minute: דקה + two_minutes: שתי דקות + five_minutes: חמש דקות + ten_minutes: עשר דקות + twenty_minutes: עשרים דקות + disabled: אף פעם + scrollWheelSensitivity: + title: רגישות זום + description: משפיע על כמה רגיש הזום (גם הגלגלת וגם משטח הנגיעה) + sensitivity: + super_slow: ממש לאט + slow: לאט + regular: רגיל + fast: מהר + super_fast: ממש מהר + movementSpeed: + title: מהירות תנועה + description: משנה כמה מהר התצוגה זזה כשמשתמשים במקלדת או שמים את העכבר בגבולות + המסך. + speeds: + super_slow: ממש לאט + slow: לאט + regular: רגיל + fast: מהר + super_fast: קצת מהר + extremely_fast: ממש מהר + language: + title: שפה + description: '!שנה את השפה. כל השפות נוצרו ע"י משתמשים ולכן אולי לא יהיו מלאים' + enableColorBlindHelper: + title: מצב עיוורי צבעים + description: .הפעלת כלים שונים שמאפשרים לך לשחק אם אתה עיוור צבעים + fullscreen: + title: מסך מלא + description: .זה מומלץ לשחק את המשחק במסך מלא השהיל החוויה המיטבית. זמין רק + בגרסה להורדה + soundsMuted: + title: השתקת צלילים + description: .אם מופעל, משתיק את כל הצלילים + musicMuted: + title: השתקת מוזיקה + description: .אם מופעל, משתיק את המוזיקה + soundVolume: + title: ווליום + description: .משפיע על הווליום של הצלילים + musicVolume: + title: מוזיקה + description: .משפיע על הווליום של המוזיקה + theme: + title: תצוגה + description: .שנה תצוגה לכהה או בהירה + themes: + dark: כהה + light: בהיר + refreshRate: + title: Tick Rate + description: .ים יהיו בכל שנייהtick זה משפיע כמה + alwaysMultiplace: + title: השמה מרובה + description: .באופן קבוע SHIFT אם מופעל, כל המבנים ישארו נבחרים גם אחרי ששמים + אותם עד שאתה מבטל את זה. זה זהה ללחיצת + offerHints: + title: רמזים ומדריכים + description: .האם להציג רמזים ומדריכים. בנוסף מסתיר חלק מהתפריטים עד לשלב מסויים + בשביל להקל על הכניסה למשחק + enableTunnelSmartplace: + title: מנהרות חכמות + description: .מתי שמופעל, מקום מנהרות ימחק באופן אוטומטי מסועים לא שימושיים. זה + גם ימחק מנהרות מיותרות + vignette: + title: הצללה + description: .מפעיל הצללה, שמכהה את הקצבות של המסך ועושה שיהיה יותר קל לקרוא את + הטקסט + rotationByBuilding: + title: סיבוב ע"י סוג מבנה + description: .כל מבנה זוכר את הכיוון ששמת אותו פעם אחרונה. זה יכול להיות נוח אם + אתה מחליף בין מבנים שונים הרבה פעמים + compactBuildingInfo: + title: אינפורמצית מבנים קומפקטית + description: .מקצר את קופסת האינפורמציה של המבנים שיציג רק את המהירות שלו. אחרת + הסבר ותמונה יופיעו + disableCutDeleteWarnings: + title: ביטול אזהרה בעת חיתוך ומחיקה + description: .ביטול ההזהרה שמופיעה מתי שחותכים/מוחקים יותר מ1000 מבנים + lowQualityMapResources: + title: איכות ירודה של מאגרים + description: .מפשט את הרנדור של המשאבים על המפה מתי שמסתכלים מקרוב בשביל לשפר את + הביצועים !זה אפילו נראה נקי יותר, אז תנסה את זה + disableTileGrid: + title: הסתר את רשת + description: "!הסתרת הרשת יכולה לשפר את הביצועים. זה גם יכול לגרום למשחק להראות + נקי יותר" + clearCursorOnDeleteWhilePlacing: + title: נקה את הסמן בלחיצה על מקש ימני + description: .מופעל בברירת המחדל, מנקה את הסמן מתי שאתה לוחץ מקש ימני. אם זה + כבוי אתה יכול למחוק מבנים עם מקש ימני מתי שאתה מחזיק מבנה + lowQualityTextures: + title: טקסטורה באכות ירודה (מכוער) + description: "!משתמש בטקסטורה באיכות ירודה בשביל לשפר את הביצועים. זה גורם למשחק + להראות ממש מכוער" + displayChunkBorders: + title: מציג גבולות צ'נקים + description: .המשחק מחולק לצ'נקים של 16 על 16 משבצות, אם ההגדרה הזאת מופעלת, + הגבולות של הצ'נקים יופיעו + pickMinerOnPatch: + title: בחר חוצב על מאגר + description: .מופעל בברירת המחדל, בוחר את החוצב אם אתה דוגם כשהעכבר מעל מאגר + simplifiedBelts: + title: מסועים פשוטים (מכוער) + description: .לא מציג חומרים על מסועים חוץ ממתי שמעבירים את הסמן מעליהם בשביל + לשפר ביצועים. אני לא ממליץ לשחק עם ההגדרה הזאת ממש צריך את + הביצועים האלו + enableMousePan: + title: תנועה בנגיעה בקצה המסך + description: .מאפשר לזוז ע"י הצמדת העכבר לקצה המסך. המהירות נקבעת ע"י המהירות של + התנועה עם המקשים + zoomToCursor: + title: הגדלה לכיוון הסמן + description: .אם מופעל, הזום יהיה לכיוון הסמן של העכבר, אחרת למרכז המסך + mapResourcesScale: + title: גודל המשאבים במפה + description: .שולט על הגודל של הצורות על המפה (בתצוגה המוקטנת) + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. + tickrateHz: <amount> Hz +keybindings: + title: מקשים + hint: ".הם מאפשרים הרבה אפשרויות השמה !ALTו SHIFT ,CTRLטיפ: השתמש ב" + resetKeybindings: אפס + categoryLabels: + general: תוכנה + ingame: משחק + navigation: תנועה + placement: השמה + massSelect: בחירה + buildings: קיצורים למבנים + placementModifiers: תוספי השמה + mappings: + confirm: אישור + back: חזרה + mapMoveUp: לזוז למעלה + mapMoveRight: לזוז ימינה + mapMoveDown: לזוז למטה + mapMoveLeft: לזוז שמאלה + mapMoveFaster: לזוז מהר + centerMap: לזוז למרכז + mapZoomIn: הגדלת תצוגה + mapZoomOut: הקטנת תצוגה + createMarker: צור סימון + menuOpenShop: שדרוגים + menuOpenStats: סטטיסטיקה + menuClose: סגירת תפריט + toggleHud: הצג/הסתר תפריטים + toggleFPSInfo: ואיפורמציה לפתרון באגים FPS הצג/הסתר + switchLayers: החלף שכבות + exportScreenshot: צור צילום מסך של כל המפעל + belt: מסוע + balancer: מאזן + underground_belt: מנהרה + miner: חוצב + cutter: חותך + rotater: מסובב + stacker: מחבר + mixer: מערבב + painter: צובע + trash: פח + storage: אחסון + wire: כבל + constant_signal: אות קבוע + logic_gate: שער לוגי + lever: מפסק + filter: ממיין + wire_tunnel: הצלבת כבלים + display: מסך + reader: מסוע מדידה + virtual_processor: מעבד וירטואלי + transistor: טרנזיסטור + analyzer: מנתח צורות + comparator: משווה + item_producer: מייצר חפצים (ארגז חול) + pipette: דגימה + rotateWhilePlacing: סיבוב + rotateInverseModifier: "Modifier: סיבוב נגד כיוון השעון במקום" + rotateToUp: "לסובב: למעלה" + rotateToDown: "לסובב: למטה" + rotateToRight: "לסובב: ימינה" + rotateToLeft: "לסובב: שמאלה" + cycleBuildingVariants: החלפת סוגים של מבנה + confirmMassDelete: מחיקת שטח + pasteLastBlueprint: הדבקת התבנית האחרונה + cycleBuildings: החלפת מבנה + lockBeltDirection: הפעלת בנייה מהירה של מסועים + switchDirectionLockSide: "בנייה מהירה של מסועים: החלפת צד" + copyWireValue: "כבלים: העתקת ערך מתחת לעכבר" + massSelectStart: החזק וגרור כדי להתחיל + massSelectSelectMultiple: בחר כמה איזורים + massSelectCopy: העתקת איזור + massSelectCut: חיתוך איזור + placementDisableAutoOrientation: ביטול כיוון אוטומטי + placeMultiple: השאר במצב השמה + placeInverse: הפוך כיוון מסוע + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip +about: + title: בנוגע למשחק הזה + body: >- + .(זה אני) <a href="https://github.com/tobspr" target="_blank">Tobias + Springer</a> המשחק הזה הוא עם קוד פתוח ויוצר ע"י <br><br> + + .<a href="<githublink>" target="_blank">shapez.io on GitHub</a>-אם אתה רוצה לתרום, כנס ל<br><br> + + המשחק הזה לא היה אפשרי בלי קהילת הדיסקורד המופלאה מסביב למשחקים שלי - באמת כדאי לך להצטרף ל<a href="<discordlink>" target="_blank">שרת הדיסקורד</a>!<br><br> + + .הוא מדהים - <a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a> הסאונד נוצר ע"י<br><br> + + .המשחק הזה לא היה קיים Factorio אם לא היינו משחקים - <a href="https://github.com/niklas-dahl" target="_blank">Niklas</a> לבסוף, תודה ענקית לחבר הכי טוב שלי +changelog: + title: עדכונים +demo: + features: + restoringGames: שחזור משחקים שמורים + importingGames: יבוא משחקים שמורים + oneGameLimit: מוגבל לשמירה אחת + customizeKeybindings: מקשים בהתאמה אישית + exportingBase: יצוא כל המפעל כתמונה + settingNotAvailable: .הגדרה לא זמינה בדמו +tips: + - "!ההאב יקבל כל צורה, לא רק את הצורה הנדרשת עכשיו" + - "!וודא שהמפעלים שלך מחולקים - זה יהיה לך יותר קל" + - "!אל תבנה יותר מדיי קרוב להאב, זה יהפוך לבלגן" + - .אם החיבור לא עובד, תנסה להחליף את מה נכנס לאיזה צד + - .<b>R</b> אתה יכול לשנות את הכיוון של בניית המסועים המהירה ע"י ללחוץ על + - .תאפשר לבנות הרבה מסילות באותו כיוון <b>CTRL</b> החזקת + - .היחס של המהירויות של המבנים ישאר זהה אם השדרוגים הם באותו רמה + - .לשים חפצים במסוע אחת מאשר כמה יהיה יותר יעיל במקום + - "!אתה תשיג עוד צורות של מבנים בהמשך המשחק" + - .בשביל להחליף בין צורות שונות של מבנים <b>T</b>אתה יכול להשתמש ב + - "!סימטריה זה המפתח" + - .אתה יכול לשים סוגים שונים של מנהרות על אותו קו לסרוגין + - "!נסה לבנות מפעלים קומפקטים, זה ישתלם" + - <b>T</b> לצובע יש סוג הפוך שאתה יכול לבחור ע"י + - .אם יש לך את היחס הנכון בין כמות המבנים, יהיה לך את האיכות המיטבית + - .ברמה המקסימלית, 5 חוצבים ימלאו מסוע אחד + - "!אל תשכח בקשר למנהרות" + - .אתה לא צריך לחלק חפצים באופן שווה בשביל יעילות המיטבית + - .תפעיל את מצב בנייה מהירה של מסועים, שתתן לך לשים מסועים ארוכים בקלות + <b>SHIFT</b> החזקת + - .חותכים תמיד חותכים לגובה, לא משנה מה הכיוון שלהם + - .ערבב את כל שלושת הצבעים הבסיסיים בשביל להשיג את הצבע לבן + - .לאכסון יש העדפה להוציא רק מהצד השמאלי + - "!הכן לך עיצוב של מבנה שתוכל להשתמש בו כשתצטרך - זה שווה את זה" + - .תתן לך לבנות כמה מבנים באותו זמן <b>SHIFT</b> החזקת + - .בשביל להפוך את הכיוון של המסועים שאתה שם <b>ALT</b> אתה יכול להחזיק + - "!יעילות זה המפתח" + - .מאגרי צורות שיותר רחוקות מההאב הן יותר מסובכות + - .למכונות יש מהירות מוגבלת, חלק את החומרים בשביל היעילות המיטבית + - .התשמש במאזנים בשביל למקסם את היעילות + - .כיוון זה לא חשוב. נסה לא לחצות מסועים יותא מידי + - "!תכנן מראש, אחרת יהיה לך בלאגן" + - .אל תמחק את המפעלים הישנים שלך! אתה תצתרך אותם בשביל לפתוח שדרוגים + - "!נסה לפתור את השלבים 20 ו26 בעצמך לפני שאתה מחפש פתרונות" + - .אל תסבך דברים, נסה להשאר פשוט ותגיע רחוק + - .אתה כנראה תצטרך להשתמש במפעלים שלך שוב בהמשך המשחק. תבנה את המפעלים שלך + בצורה שתוכל להשתמש בהם שוב בהמשך + - .לפעמים אתה יכול למצוא צורה שאתה צריך במפה בלי להתחיל לבנות אותה עם חותכים + ומחברים + - .צורת תחנת רוח שלמה לעולם לא תופיע בטבעיות במפה + - .צבע את הצורות לפני שאתה חותך אותם בשביל האיכות המיטבית + - .אם תפצל את המפעל שלך, לא יהיה לך חסר מקום + - .הכן תבניות נפרדות למפעל שלך. הם יהיו חשובים בשביל החלקים של המפעל שלך + - .הסתכל על המערבב צבעים מקרוב יותר והשאלות שלך יפתרו + - .גרירה בשביל לבחור שטח + <b>CTRL</b>השתמש ב + - .בנייה קרובה מידי להאב יכולה להפריע בדרך של פרוייקטים מאוחרים יותר + - .סימן הסיכה ליד כל צורה בשדרוגים תצמיד אותה לצד שמאל של המסך + - .ערבב את כל שלושת הצבעים הבסיסיים בשביל להשיג את הצבע לבן + - "!יש לך מפה אין סופית. אל תשים את המפעל שלך רק צמוד להאב, תרחיב אותו" + - .זה המשחק האהוב עליי !Factorio נסה גם את את + - .החותך המרובע חותך עם כיוון השעון, מתחיל מלמעלה ימין. + - "!אתה יכול להוריד את השמירות שלך בתפריט הראשי!" + - .למשחק הזה יש הרבה מקשים שימושיים! חפש אותם בהגדרות. + - "!למשחק הזה יש הרבה הגדרות, חפש אותם" + - "!לסימון של ההאב שלך יש חץ שמסמן באיזה כיוון הוא" + - .בשביל לנקות מסוע, חתוך את האיזור ואז תדביק באותו מקום + - .לחץ F4 בשביל להציג את הFPS ואת הTickRate + - .לחץ F4 פעמיים בשביל להציג את המשבצת שהעכבר והמצלמה בהם + - .אתה יכול ללחוץ על צורה מוצמדת בצד שמאל בשביל לבטל את ההצמדה +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-hr.yaml b/translations/base-hr.yaml index 38cdd6ee..e2d85f7c 100644 --- a/translations/base-hr.yaml +++ b/translations/base-hr.yaml @@ -52,6 +52,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: Demo Verzija intro: Nabavi samostalnu igru kako bi otključao sve značajke! @@ -71,6 +72,12 @@ mainMenu: savegameLevel: Nivo <x> savegameLevelUnknown: Nepoznati Nivo savegameUnnamed: Unnamed + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -84,6 +91,9 @@ dialogs: viewUpdate: Pogledaj ažuriranje showUpgrades: Pokaži Nadogradnje showKeybindings: Pokaži tipke + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Greška prilikom uvoza text: "Neuspješan uvoz spremljene igre:" @@ -181,6 +191,70 @@ dialogs: title: Tutorial Available desc: There is a tutorial video available for this level, but it is only available in English. Would you like to watch it? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Kretanje @@ -202,6 +276,7 @@ ingame: clearSelection: Očisti odabir pipette: Pipeta switchLayers: Promijeni sloj + clearBelts: Clear belts colors: red: Crvena green: Zelena @@ -349,6 +424,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Trake, Distributer i Tuneli @@ -553,6 +669,18 @@ buildings: name: Item Producer description: Available in sandbox mode only, outputs the given signal from the wires layer on the regular layer. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Rezanje Oblika @@ -871,7 +999,12 @@ settings: title: Map Resources Size description: Controls the size of the shapes on the map overview (when zooming out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Tipka hint: "Savjet: Be sure to make use of CTRL, SHIFT and ALT! They enable different @@ -949,6 +1082,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: O Igri body: >- @@ -1034,3 +1172,88 @@ tips: - Press F4 to show your FPS and Tick Rate. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-hu.yaml b/translations/base-hu.yaml index b4081104..dbf105e4 100644 --- a/translations/base-hu.yaml +++ b/translations/base-hu.yaml @@ -11,14 +11,14 @@ steamPage: És ha ez nem lenne elég, exponenciálisan többet kell termelned az igények kielégítése érdekében - az egyetlen dolog, ami segít, az a termelés mennyisége! Az alakzatokat a játék elején csak feldolgoznod kell, később azonban színezned is kell őket - ehhez bányászni és keverni kell a színeket! A játék Steamen történő megvásárlása hozzáférést biztosít a teljes verzióhoz, de kipróbálhatod a játékot a shapez.io oldalon, és később dönthetsz! - what_others_say: What people say about shapez.io - nothernlion_comment: This game is great - I'm having a wonderful time playing, - and time has flown by. - notch_comment: Oh crap. I really should sleep, but I think I just figured out - how to make a computer in shapez.io - steam_review_comment: This game has stolen my life and I don't want it back. - Very chill factory game that won't let me stop making my lines more - efficient. + what_others_say: Mit mondanak mások a shapez.io-ról + nothernlion_comment: Ez a játék nagyszerű - Csodás élmény vele játszani, az idő + meg csak repül. + notch_comment: Basszus... aludnom kéne, de épp most jöttem rá, hogyan tudok + számítógépet építeni a shapez.io-ban! + steam_review_comment: Ez a játék ellopta az életemet, de nem kérem vissza! + Nagyon nyugis gyárépítős játék, amiben nem győzöm a futószalagjaimat + optimalizálni. global: loading: Betöltés error: Hiba @@ -50,6 +50,7 @@ global: escape: ESC shift: SHIFT space: SZÓKÖZ + loggingIn: Bejelentkezés demoBanners: title: Demó verzió intro: Vásárold meg az Önálló Verziót a teljes játékélményért! @@ -69,6 +70,12 @@ mainMenu: savegameLevel: <x>. szint savegameLevelUnknown: Ismeretlen szint savegameUnnamed: Névtelen + puzzleMode: Fejtörő Mód + back: Vissza + puzzleDlcText: Szereted optimalizálni a gyáraid méretét és hatákonyságát? + Szerezd meg a Puzzle DLC-t a Steamen most! + puzzleDlcWishlist: Kívánságlistára vele! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -82,6 +89,9 @@ dialogs: viewUpdate: Frissítés Megtekintése showUpgrades: Fejlesztések showKeybindings: Irányítás + retry: Újra + continue: Folytatás + playOffline: Offline Játék importSavegameError: title: Importálás Hiba text: "Nem sikerült importálni a mentésedet:" @@ -182,6 +192,71 @@ dialogs: title: Oktatás Elérhető desc: Elérhető egy oktatóvideó ehhez a szinthez, de csak angol nyelven. Szeretnéd megnézni? + editConstantProducer: + title: Elem beállítása + puzzleLoadFailed: + title: Fejtörő betöltése sikertelen + desc: "Sajnos a fejtörőt nem sikerült betölteni:" + submitPuzzle: + title: Fejtörő Beküldése + descName: "Adj nevet a fejtörődnek:" + descIcon: "Írj be egy egyedi gyorskódot, ami a fejtörőd ikonja lesz + (<link>itt</link> tudod legenerálni, vagy válassz egyet az alábbi + random generált alakzatok közül):" + placeholderName: Fejtörő Neve + puzzleResizeBadBuildings: + title: Átméretezés nem lehetséges + desc: Nem tudod tovább csökkenteni a zóna méretét, mert bizonyos épületek + kilógnának a zónából. + puzzleLoadError: + title: Hibás Fejtörő + desc: "A fejtörőt nem sikerült betölteni:" + offlineMode: + title: Offline Mód + desc: Nem tudjuk elérni a szervereket, így a játék Offline módban fut. Kérlek + győződj meg róla, hogy megfelelő az internetkapcsolatod. + puzzleDownloadError: + title: Letöltési Hiba + desc: "Nem sikerült letölteni a fejtörőt:" + puzzleSubmitError: + title: Beküldési Hiba + desc: "Nem sikerült beküldeni a fejtörőt:" + puzzleSubmitOk: + title: Fejtörő Közzétéve + desc: Gratulálunk! A fejtörődet közzétettük, így mások által is játszhatóvá + vált. A fejtörőidet a "Fejtörőim" ablakban találod. + puzzleCreateOffline: + title: Offline Mód + desc: Offline módban nem lehet elmenteni és közzétenni a fejtörődet. Szeretnéd + így is folytatni? + puzzlePlayRegularRecommendation: + title: Javaslat + desc: A Puzzle DLC előtt <strong>erősen</strong> ajánlott az alapjátékot + legalább a 12-dik Szintig kijátszani. Ellenekző esetben olyan + mechanikákkal találkozhatsz, amelyeket még nem ismersz. Szeretnéd + így is folytatni? + puzzleShare: + title: Gyorskód Másolva a Vágólapra + desc: A fejtörő gyorskódját (<key>) kimásoltad a vágólapra! A Fejtörők menüben + beillesztve betöltheted vele a fejtörőt. + puzzleReport: + title: Fejtörő Jelentése + options: + profane: Durva + unsolvable: Nem megoldható + trolling: Trollkodás + puzzleReportComplete: + title: Köszönjük a visszajelzésedet! + desc: A fejtörőt sikeresen jelentetted. + puzzleReportError: + title: Nem sikerült jelenteni + desc: "A jelentésedet nem tudtuk feldolgozni:" + puzzleLoadShortKey: + title: Gyorskód Beillesztése + desc: Illeszd be a gyorskódot, hogy betöltsd a Fejtörőt. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Mozgatás @@ -203,6 +278,7 @@ ingame: clearSelection: Kijelölés megszüntetése pipette: Pipetta switchLayers: Réteg váltás + clearBelts: Futószalagok Kiürítése colors: red: Piros green: Zöld @@ -350,8 +426,51 @@ ingame: title: Támogass desc: A játékot továbbfejlesztem szabadidőmben achievements: - title: Achievements - desc: Hunt them all! + title: Steam Achievementek + desc: Szerezd meg mindet! + puzzleEditorSettings: + zoneTitle: Zóna + zoneWidth: Szélesség + zoneHeight: Magasság + trimZone: Üres szegélyek levásága + clearItems: Elemek eltávolítása + share: Megosztás + report: Jelentés + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Fejtörő Készítő + instructions: + - 1. Helyezz le <strong>Termelőket</strong>, amelyek alakzatokat és + színeket generálnak a játékosoknak. + - 2. Készíts el egy vagy több alakzatot, amit szeretnél, hogy a + játékos később legyártson, és szállítsd el egy vagy több + <strong>Elfogadóba</strong>. + - 3. Amint az Elfogadóba folyamatosan érkeznek az alakzatok, + <strong>elmenti, mint célt</strong>, amit a játékosnak később + teljesítenie kell (Ezt a <strong>zöld jelölő</strong> mutatja). + - 4. Kattints a <strong>Lezárás gombra</strong> egy épületen, hogy + felfüggeszd azt. + - 5. A fejtörőd beküldésekor átnézzük azt, majd lehetőséged lesz + közzétenni. + - 6. A fejtörő kiadásakor, <strong>minden épület törlődik</strong>, + kivéve a Termelők és az Elfogadók - a többit ugyebár a játékosnak + kell majd kitalálnia :) + puzzleCompletion: + title: Fejtörő Teljesítve! + titleLike: "Kattins a ♥ gombra, ha tetszett a fejtörő:" + titleRating: Mennyire találtad nehéznek a fejtörőt? + titleRatingDesc: Az értékelésed lehetővé teszi, hogy okosabb javaslatokat kapj a + jövőben + continueBtn: Játék Folytatása + menuBtn: Menü + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Szerző + shortKey: Gyorskód + rating: Nehézség + averageDuration: Átlagos Időtartam + completionRate: Teljesítési Arány shopUpgrades: belt: name: Futószalagok, Elosztók & Alagutak @@ -561,6 +680,19 @@ buildings: name: Létrehozó description: Csak Homokozó módban elérhető. Létrehozza a Vezeték rétegen beállított jelet a normál rétegen. + constant_producer: + default: + name: Termelő + description: Folyamatosan termeli a beállított alakzatot vagy színt. + goal_acceptor: + default: + name: Elfogadó + description: Szállíts alakzatoakt az Elfogadóba, hogy beállítsd egy Fejtörő + céljaként. + block: + default: + name: Blokkolás + description: Lehetővé teszi, hogy leblokkolj egy csempét. storyRewards: reward_cutter_and_trash: title: Alakzatok Vágása @@ -894,7 +1026,12 @@ settings: title: Erőforrások Mérete a Térképen description: Kizoomolt állapotban a térképen megjelenő erőforrások (alakzatok és színek) méretét állítja. + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Gyorsbillentyűk hint: "Tipp: Használd ki a CTRL, SHIFT és ALT billentyűket, amelyek különféle @@ -968,10 +1105,15 @@ keybindings: placementDisableAutoOrientation: Automatikus irány kikapcsolása placeMultiple: Több lehelyezése placeInverse: Futószalag irányának megfordítása - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: "Forgatás: Felfelé" + rotateToDown: "Forgatás: Lefelé" + rotateToRight: "Forgatás: Jobbra" + rotateToLeft: "Forgatás: Balra" + constant_producer: Termelő + goal_acceptor: Elfogadó + block: Blokkolás + massSelectClear: Futószalagok Kiürítése + showShapeTooltip: Show shape output tooltip about: title: A Játékról body: >- @@ -1007,7 +1149,7 @@ tips: - Serial execution is more efficient than parallel. - A szimmetria kulcsfontosságú! - You can use <b>T</b> to switch between different variants. - - Symmetry is key! + - A szimmetria kulcsfontosságú! - Az épületek megfelelő arányban való építésével maximalizálható a hatékonyság. - A legmagasabb szinten 5 Bánya teljesen megtölt egy Futószalagot. @@ -1043,7 +1185,7 @@ tips: - A Fejlesztések lapon a gombostű ikon megnyomásával kitűzheted a képernyőre az aktuális alakzatot. - Keverd össze mind a három alapszínt, hogy Fehéret csinálj! - - A pálya végtelen méretű; ne nyomorgasd sösze a gyáraidat, terjeszkedj! + - A pálya végtelen méretű; ne nyomorgasd össze a gyáraidat, terjeszkedj! - Próbáld ki a Factorio-t is! Az a kedvenc játékom. - A Negyedelő az alakzat jobb felső negyedétől kezd vágni, az óramutató járásával megegyező irányban! @@ -1062,6 +1204,91 @@ tips: - This game has a lot of settings, be sure to check them out! - Your hub marker has a small compass that shows which direction it is in! - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. + - You can click a pinned shape on the left side to unpin it. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Játék + edit: Szerkesztés + title: Fejtörő Mód + createPuzzle: Új Fejtörő + loadPuzzle: Betöltés + reviewPuzzle: Beküldés & Publikálás + validatingPuzzle: Fejtörő Validálása + submittingPuzzle: Fejtörő Beküldése + noPuzzles: Jelenleg nincs fejtörő ebben a szekcióban. + categories: + levels: Szintek + new: Új + top-rated: Legjobbra Értékelt + mine: Az Én Fejtörőim + easy: Könnyű + hard: Nehéz + completed: Teljesítve + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Hibás Fejtörő + noProducers: Helyezz le egy Termelőt! + noGoalAcceptors: Helyezz le egy Elfogadót! + goalAcceptorNoItem: Egy vagy több Elfogadónál nincs beállítva célként alakzat. + Szállíts le egy alazkatot a cél beállításához. + goalAcceptorRateNotMet: Egy vagy több Elfogadó nem kap elegendő alakzatot. + Győződj meg róla, hogy a jelölő minden Elfogadónál zölden világít. + buildingOutOfBounds: Egy vagy több épület kívül esik a beépíthető területen. + Növeld meg a terület méretét, vagy távolíts el épületeket. + autoComplete: A fejtörő automatikusan megoldja magát! Győződj meg róla, hogy a + Termelők nem közvetlenül az Elfogadóba termelnek. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Túl gyorsan csinálsz dolgokat. Kérlek, várj egy kicsit. + invalid-api-key: Valami nem oké a játékkal. Próbáld meg frissíteni vagy + újraindítani. (HIBA - Invalid Api Key). + unauthorized: Valami nem oké a játékkal. Próbáld meg frissíteni vagy + újraindítani. (HIBA - Unauthorized). + bad-token: Valami nem oké a játékkal. Próbáld meg frissíteni vagy újraindítani. + (HIBA - Bad Token). + bad-id: Helytelen Fejtörő azonosító. + not-found: A megadott fejtörőt nem találjuk. + bad-category: A megadott kategóriát nem találjuk. + bad-short-key: A megadott gyorskód helytelen. + profane-title: A fejtörő címe csúnya szavakat tartalmaz. + bad-title-too-many-spaces: A fejtörő címe túl rövid. + bad-shape-key-in-emitter: Egy Termelőnek helytelen alakzat van beállítva. + bad-shape-key-in-goal: Egy Elfogadónak helytelen alakzat van beállítva. + no-emitters: A fejtörődben nem szerepel Termelő. + no-goals: A fejtörődben nem szerepel Elfogadó. + short-key-already-taken: Ez a gyorskód már foglalt, kérlek válassz másikat. + can-not-report-your-own-puzzle: Nem jelentheted a saját fejtörődet. + bad-payload: A kérés helytelen adatot tartalmaz. + bad-building-placement: A fejtörőd helytelenül lehelyezett épületeket tartalmaz. + timeout: A kérés időtúllépésbe került. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index 761caf46..591c39e7 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -17,8 +17,8 @@ steamPage: notch_comment: Oh sial. Saya benar-benar harus tidur, namun sepertinya saya baru menemukan bagaimana cara membuat komputer di shapez.io steam_review_comment: Game ini telah mencuri hidup saya dan saya tidak - menginginkannya kembali. Game pembuatan pabrik yang sangat santai yang tidak - akan membiarkan saya berhenti membuat pabrik saya lebih efisien. + menginginkannya kembali. Game pembuatan pabrik yang sangat santai yang + tidak akan membiarkan saya berhenti membuat pabrik saya lebih efisien. global: loading: Memuat error: Terjadi kesalahan @@ -50,6 +50,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: Versi Demo intro: Dapatkan versi lengkap untuk membuka semua fitur! @@ -69,6 +70,12 @@ mainMenu: savegameLevel: Level <x> savegameLevelUnknown: Level tidak diketahui savegameUnnamed: Tidak Dinamai + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -82,6 +89,9 @@ dialogs: viewUpdate: Tampilkan Update showUpgrades: Tunjukkan Tingkatan showKeybindings: Tunjukkan Tombol Pintas + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Kesalahan pada Impor text: "Gagal memasukkan data simpanan kamu:" @@ -185,6 +195,70 @@ dialogs: title: Tutorial Tersedia desc: Ada video tutorial yang tersedia untuk level ini, tetapi hanya dalam Bahasa Inggris. Apakah kamu ingin menontonnya? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Geser @@ -206,6 +280,7 @@ ingame: clearSelection: Hapus pilihan pipette: Pipet switchLayers: Ganti lapisan + clearBelts: Clear belts colors: red: Merah green: Hijau @@ -358,6 +433,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Sabuk konveyor, Pembagi Arus & Terowongan @@ -577,6 +693,18 @@ buildings: name: Pembuat Bentuk description: Hanya tersedia di dalam mode sandbox, mengeluarkan sinyal yang diberikan dari lapisan kabel ke lapisan biasa. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Memotong Bentuk @@ -930,7 +1058,12 @@ settings: title: Ukuran Sumber Daya Peta description: Mengontrol ukuran bentuk-bentuk pada gambaran peta (ketika zoom out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Tombol Pintas hint: "Petunjuk: Pastikan kamu menggunakan CTRL, SHIFT and ALT! Mereka @@ -1008,6 +1141,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: Tentang permainan ini body: >- @@ -1115,3 +1253,88 @@ tips: - Tekan F4 dua kali untuk menunjukkan ubin mouse dan kameramu. - Kamu bisa mengklik bentuk yang di-pin di sebelah kiri untuk tidak mem-pinnya lagi. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-it.yaml b/translations/base-it.yaml index fd6928b9..ecb8dafc 100644 --- a/translations/base-it.yaml +++ b/translations/base-it.yaml @@ -14,7 +14,7 @@ steamPage: All'inizio lavorerai solo con le forme, ma in seguito dovrai colorarle; a questo scopo dovrai estrarre e mescolare i colori! Comprare il gioco su Steam ti garantirà l'accesso alla versone completa, ma puoi anche giocare una demo su shapez.io e decidere in seguito! - what_others_say: What people say about shapez.io + what_others_say: "Hanno detto di shapez.io:" nothernlion_comment: This game is great - I'm having a wonderful time playing, and time has flown by. notch_comment: Oh crap. I really should sleep, but I think I just figured out @@ -53,6 +53,7 @@ global: escape: ESC shift: MAIUSC space: SPAZIO + loggingIn: Logging in demoBanners: title: Versione Demo intro: Ottieni la versione completa per sbloccare tutte le funzioni! @@ -72,6 +73,12 @@ mainMenu: madeBy: Creato da <author-link> subreddit: Reddit savegameUnnamed: Senza nome + puzzleMode: Modalità puzzle + back: Back + puzzleDlcText: Ti piace miniaturizzare e ottimizzare le tue fabbriche? Ottini il + Puzzle DLC ora su steam per un divertimento ancora maggiore! + puzzleDlcWishlist: Aggiungi alla lista dei desideri ora! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -85,6 +92,9 @@ dialogs: viewUpdate: Mostra aggiornamento showUpgrades: Mostra miglioramenti showKeybindings: Mostra scorciatoie + retry: Riprova + continue: Continua + playOffline: Gioca offline importSavegameError: title: Errore di importazione text: "Impossibile caricare il salvataggio:" @@ -189,6 +199,73 @@ dialogs: title: Tutorial Disponibile desc: C'è un video tutorial per questo livello, ma è disponibile solo in Inglese. Vorresti dargli un'occhiata? + editConstantProducer: + title: Imposta oggetto + puzzleLoadFailed: + title: Impossibile caricare i puzzle + desc: "Sfortunatamente non è stato possibile caricare i puzzle:" + submitPuzzle: + title: Pubblica il puzzle + descName: "Dai un nome al tuo puzzle:" + descIcon: "Per favore inserisci un codice per la forma identificativa, che sarà + mostrata come icona del tuo puzzle (Pui generarla <link>qui</link>, + oppure sceglierne una tra quelle casuali qui sotto):" + placeholderName: Nome puzzle + puzzleResizeBadBuildings: + title: Impossibile ridimensionare + desc: Non è possibile ridurre la zona ulteriormente, dato che alcuni edifici + sarebbero fuori dalla zona. + puzzleLoadError: + title: Caricamento fallito + desc: "Impossibile caricare il puzzle:" + offlineMode: + title: Modalità offline + desc: Non siamo risciti a contattare i server, quindi il gioco è in modalità + offline. Per favore assicurati di avere una connessione internet + attiva. + puzzleDownloadError: + title: Errore di download + desc: "Il download del puzzle è fallito:" + puzzleSubmitError: + title: Errore di pubblicazione + desc: "La pubblicazione del puzzle è fallita:" + puzzleSubmitOk: + title: Puzzle pubblicato + desc: Congratulazioni! Il tuo puzzle è stato pubblicato e ora può essere giocato + da altri. Puoi trovarlo nella sezione "I miei puzzle". + puzzleCreateOffline: + title: Modalità offline + desc: Dato che sei offline, non potrai salvare e/o pubblicare il tuo puzzle. Sei + sicuro di voler contnuare? + puzzlePlayRegularRecommendation: + title: Raccomandazione + desc: Ti raccomando <strong>fortemente</strong> di giocare nella modalità + normale fino al livello 12 prima di cimentarti nel puzzle DLC, + altrimenti potresti incontrare meccaniche non ancora introdotte. Sei + sicuro di voler continuare? + puzzleShare: + title: Codice copiato + desc: Il codice del puzzle (<key>) è stato copiato negli appunti! Può essere + inserito nel menù dei puzzle per accedere al puzzle. + puzzleReport: + title: Segnala puzzle + options: + profane: Volgare + unsolvable: Senza soluzione + trolling: Troll + puzzleReportComplete: + title: Grazie per il tuo feedback! + desc: Il puzzle è stato segnalato. + puzzleReportError: + title: Segnalazione fallita + desc: "Non è stato possibile elaborare la tua segnalazione:" + puzzleLoadShortKey: + title: Inserisci codice + desc: Inserisci il codice del puzzle per caricarlo. + puzzleDelete: + title: Cancellare il puzzle? + desc: Sei sicuro di voler cancellare '<title>'? Questa azione non può essere + annullata! ingame: keybindingsOverlay: moveMap: Sposta @@ -210,6 +287,7 @@ ingame: clearSelection: Annulla selezione pipette: Contagocce switchLayers: Cambia livello + clearBelts: Clear belts buildingPlacement: cycleBuildingVariants: Premi <key> per cambiare variante. hotkeyLabel: "Hotkey: <key>" @@ -359,8 +437,53 @@ ingame: title: Sostienimi desc: Lo sviluppo nel tempo libero! achievements: - title: Achievements - desc: Hunt them all! + title: Achievement + desc: Collezionali tutti! + puzzleEditorSettings: + zoneTitle: Zona + zoneWidth: Larghezza + zoneHeight: Altezza + trimZone: Riduci + clearItems: Elimina oggetti + share: Condividi + report: Segnala + clearBuildings: Cancella edifici + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Creazione puzzle + instructions: + - 1. Posiziona dei <strong>produttori costanti</strong> per fornire + forme e colori al giocatore + - 2. Costruisci una o più forme che vuoi che il giocatore costruisca + e consegni a uno o più degli <strong>Accettori di + obiettivi</strong> + - 3. Una volta che un accettore di obiettivi riceve una forma per un + certo lasso di tempo, lo <strong>salva come obiettivo</strong> che + il giocatore dovrà poi produrre (Indicato dal <strong>simbolo + verde</strong>). + - 4. Clicca il <strong>bottone di blocco</strong> su un edificio per + disabilitarlo. + - 5. Una volta che cliccherai verifica, il tuo puzzle sarà + convalidato e potrai pubblicarlo. + - 6. Una volta rilasciato, <strong>tutti gli edifici saranno + rimossi</strong> ad eccezione di produttori e accettori di + obiettivi. Quella è la parte che il giocatore deve capire da solo, + dopo tutto :) + puzzleCompletion: + title: Puzzle completato! + titleLike: "Clicca il cuore se ti è piaciuto:" + titleRating: Quanto è stato difficile il puzzle? + titleRatingDesc: La tua valutazione mi aiuterà a darti raccomandazioni migliori + in futuro + continueBtn: Continua a giocare + menuBtn: Menù + nextPuzzle: Puzzle successivo + puzzleMetadata: + author: Autore + shortKey: Codice + rating: Punteggio difficoltà + averageDuration: Durata media + completionRate: Tasso di completamento shopUpgrades: belt: name: Nastri, distribuzione e tunnel @@ -574,15 +697,28 @@ buildings: name: Generatore di oggetti description: Disponibile solo nella modalità sandbox, emette il segnale dal livello elettrico come oggetti sul livello normale. + constant_producer: + default: + name: Produttore costante + description: Produce costantemente una forma o un colore specificati. + goal_acceptor: + default: + name: Accettore di obiettivi. + description: Consegna forme all'accettore di obiettivi per impostarli come + obiettivo. + block: + default: + name: Blocco + description: Blocca una casella. storyRewards: reward_cutter_and_trash: title: Taglio forme - desc: Il <strong>taglierino</strong> è stato bloccato! Taglia le forme a metà da - sopra a sotto <strong>indipendentemente dal suo + desc: Il <strong>taglierino</strong> è stato sbloccato! Taglia le forme a metà + da sopra a sotto <strong>indipendentemente dal suo orientamento</strong>!<br><br> Assicurati di buttare via lo scarto, - sennò <strong>si intaserà e andrà in stallo </strong> - Per questo - ti ho dato il <strong>certino</strong>, che distrugge tutto quello - che riceve! + altrimenti <strong>si intaserà e andrà in stallo </strong> - Per + questo ti ho dato il <strong>cestino</strong>, che distrugge tutto + quello che riceve! reward_rotater: title: Rotazione desc: Il <strong>ruotatore</strong> è stato sbloccato! Ruota le forme di 90 @@ -610,7 +746,7 @@ storyRewards: reward_rotater_ccw: title: Rotazione antioraria desc: Hai sbloccato una variante del <strong>ruotatore</strong>! Consente di - ruotare in senso antiorario! Per costruirla, seleziona la ruotatrice + ruotare in senso antiorario! Per costruirla, seleziona il ruotatore e <strong>premi 'T' per cambiare variante</strong>! reward_miner_chainable: title: Estrattore a catena @@ -688,7 +824,7 @@ storyRewards: la portata di un nastro.<br><br>E aspetta di sbloccare i cavi, allora sì che sarà molto utile! reward_rotater_180: - title: Ruotatrice (180 gradi) + title: Ruotatore (180 gradi) desc: Hai appena sbloccato il <strong>ruotatore</strong> a 180 gradi! Consente di ruotare una forma di 180 gradi (Sorpresa! :D) reward_display: @@ -698,8 +834,8 @@ storyRewards: lettore di nastri e il magazzino mostrano l'ultimo oggetto da loro letto? Prova a mostrarlo su di un display!" reward_constant_signal: - title: Sengale costante - desc: Hai sblocatto l'edificio <strong>segnale costante</strong> sul livello + title: Segnale costante + desc: Hai sbloccato l'edificio <strong>segnale costante</strong> sul livello elettrico! È utile collegarlo ai <strong>filtri di oggetti</strong> per esempio.<br><br> Il segnale costante può emettere una <strong>forma</strong>, un <strong>colore</strong> o un @@ -724,7 +860,7 @@ storyRewards: normalmente. <br><br> Qualsiasi cosa tu scelga, ricordati di divertirti! reward_wires_painter_and_levers: - title: Cavi e Verniciatrice quadrupla + title: Cavi e Verniciatore quadruplo desc: "Hai appena sbloccato il <strong>Livello Elettrico</strong>: è un livello separato dal livelo normale e introduce molte altre meccaniche di gioco!<br><br> Per il momento ti ho sbloccato il @@ -913,7 +1049,13 @@ settings: title: Grandezza delle Risorse sulla Mappa description: Controlla la grandezza delle forme visualizzate sulla mappa (quando si fa lo zoom indietro). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Determina se mostrare sempre la forma in uscita da un edificio + quando si passa sopra di esso col cursore, invece di dover + premere 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Comandi hint: "Suggerimento: Usa spesso CTRL, MAIUSC e ALT! Abilitano opzioni di @@ -930,7 +1072,7 @@ keybindings: mappings: confirm: Conferma back: Indietro - mapMoveUp: Spostati sù + mapMoveUp: Spostati su mapMoveRight: Spostati a destra mapMoveDown: Spostati giù mapMoveLeft: Spostati a sinistra @@ -987,10 +1129,15 @@ keybindings: comparator: Comparatore item_producer: Generatore di oggetti (Sandbox) copyWireValue: "Cavi: Copia valore sotto il cursore" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: "Ruota: punta in alto" + rotateToDown: "Ruota: punta in basso" + rotateToRight: "Ruota: punta a destra" + rotateToLeft: "Ruota: punta a sinistra" + constant_producer: Produttore costante + goal_acceptor: Accettore di obiettivi + block: Blocco + massSelectClear: Sgombra nastri + showShapeTooltip: Mostra forma di uscita di un edificio about: title: Riguardo questo gioco body: >- @@ -1089,3 +1236,90 @@ tips: - Premi F4 due volte per mostrare la casella del cursore e della telecamera. - Puoi cliccare a sinistra di una forma fermata a schermo per rimuoverla dalla lista. +puzzleMenu: + play: Gioca + edit: Modifica + title: Modalità puzzle + createPuzzle: Crea puzzle + loadPuzzle: Carica + reviewPuzzle: Verifica e pubblica + validatingPuzzle: Convalidazione puzzle + submittingPuzzle: Pubblicazione puzzle + noPuzzles: Al momento non ci sono puzzle in questa sezione. + categories: + levels: Livelli + new: Nuovo + top-rated: Più votati + mine: I miei puzzle + easy: Facili + hard: Difficili + completed: Completati + medium: Medi + official: Ufficiali + trending: Più popolari di oggi + trending-weekly: Più popolari della settimana + categories: Categorie + difficulties: Per difficoltà + account: I miei puzzle + search: Cerca + validation: + title: Puzzle non valido + noProducers: Per favore posiziona un Produttore costante! + noGoalAcceptors: Per favore posiziona un accettore di obiettivi! + goalAcceptorNoItem: Uno o più degli accettori di obiettivi non hanno un oggetto + assegnato. Consgnagli una forma per impostare l'obiettivo. + goalAcceptorRateNotMet: Uno o più degli accettori di obiettivi non ricevono + abbastanza oggetti. Assicurati che gli indicatori siano verdi per + tutti gli accettori. + buildingOutOfBounds: Uno o più edifici sono fuori dalla zona di costruzione. + Ingrandisci l'area o rimuovili. + autoComplete: Il tuo puzzle si autocompleta! Per favore assicurati che i tuoi + produttori costanti non consegnino direttamente agli accettori di + obiettivi. + difficulties: + easy: Facile + medium: Medio + hard: Difficile + unknown: Non classificato + dlcHint: Hai già acquistato il DLC? Assicurati che sia attivo facendo clic + destro su shapez.io nella tua libreria e selezionando Proprietà > DLC. + search: + action: Cerca + placeholder: Inserisci il nome di un puzzle o di un autore + includeCompleted: Include Completed + difficulties: + any: Qualsiasi difficoltà + easy: Facile + medium: Medio + hard: Difficile + durations: + any: Qualsiasi durata + short: Breve (< 2 minuti) + medium: Normale + long: Lunga (> 10 minuti) +backendErrors: + ratelimit: Stai facendo troppe azioni velocemente. Per favore attendi un attimo. + invalid-api-key: Comunicazione con il backend fallita, per favore prova ad + aggiornare o riavviare il gioco (Invalid Api Key). + unauthorized: Comunicazione con il backend fallita, per favore prova ad + aggiornare o riavviare il gioco (Unauthorized). + bad-token: Comunicazione con il backend fallita, per favore prova ad aggiornare + o riavviare il gioco (Bad Token). + bad-id: Identificativo puzzle non valido. + not-found: Non è stato possibile trovare il puzzle. + bad-category: Non è stato possibile trovare la categoria. + bad-short-key: Il codice non è valido. + profane-title: Il titolo del tuo puzzle contiene volgarità. + bad-title-too-many-spaces: Il titolo del tuo puzzle è troppo breve. + bad-shape-key-in-emitter: Un produttore costante ha un oggetto non valido. + bad-shape-key-in-goal: Un accettore di obiettivi ha un oggetto non valido. + no-emitters: Il tuo puzzle non contiente alcun produttore costante. + no-goals: Il tuo puzzle non contiene alcun accettore di obiettivi. + short-key-already-taken: Queesto codice forma è già in uso, per favore scegline un altro. + can-not-report-your-own-puzzle: Non puoi segnlare il tuo puzzle. + bad-payload: La richiesta contiene dati non validi. + bad-building-placement: Il tuo puzzle contiene edifici non validi. + timeout: La richiesta è scaduta. + too-many-likes-already: Questo puzzle ha già ricevuto troppi "mi piace". Se vuoi + ancora rimuoverlo, per favore contatta support@shapez.io! + no-permission: Non hai i permessi per eseguire questa azione. diff --git a/translations/base-ja.yaml b/translations/base-ja.yaml index 2632a4c8..2d871326 100644 --- a/translations/base-ja.yaml +++ b/translations/base-ja.yaml @@ -45,6 +45,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: デモ版 intro: スタンドアローン版を手に入れ、すべての機能をアンロックしましょう! @@ -63,6 +64,12 @@ mainMenu: savegameLevel: レベル <x> savegameLevelUnknown: 不明なレベル savegameUnnamed: 無名のデータ + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -76,6 +83,9 @@ dialogs: viewUpdate: アップデートを見る showUpgrades: アップグレード表示 showKeybindings: キー設定表示 + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: インポートエラー text: "セーブデータのインポートに失敗しました:" @@ -157,6 +167,70 @@ dialogs: tutorialVideoAvailableForeignLanguage: title: チュートリアル視聴可能 desc: このレベルで利用できるチュートリアル動画がありますが、言語は英語です。確認しますか? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: マップ移動 @@ -178,6 +252,7 @@ ingame: clearSelection: 選択範囲をクリア pipette: スポイト switchLayers: レイヤーを変更 + clearBelts: Clear belts colors: red: 赤 green: 緑 @@ -313,6 +388,47 @@ ingame: achievements: title: アチーブメント desc: 取り尽くせ! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: ベルト、分配機とトンネル @@ -493,6 +609,18 @@ buildings: default: name: なんでも抽出機 description: サンドボックスモードでのみ使用可能で、ワイヤレイヤーで与えられた信号の形状を通常レイヤーに出力します。 + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: 形の切断 @@ -558,18 +686,21 @@ storyRewards: desc: <strong>回転機</strong>のバリエーションが利用可能になりました! 180°の回転ができるようになります!(サプライズ! :D) reward_wires_painter_and_levers: title: ワイヤ&着色機(四分割) - desc: "<strong>ワイヤレイヤ</strong>が利用可能になりました: これは通常の レイヤーの上にある別のレイヤであり、多くの新しい要素があります!<br><br> - まず最初に、<strong>四色着色機</strong>が利用可能になりました - 着色するスロットをワイヤレイヤで接続してください!<br><br> - ワイヤレイヤに切り替えるには、<strong>E</strong>を押します。 <br><br> - 補足: 設定で<strong>ヒントを有効にする</strong>と、 ワイヤのチュートリアルが有効になります。" + desc: "<strong>ワイヤレイヤ</strong>が利用可能になりました: これは通常の + レイヤーの上にある別のレイヤであり、多くの新しい要素があります!<br><br> + まず最初に、<strong>四色着色機</strong>が利用可能になりました - + 着色するスロットをワイヤレイヤで接続してください!<br><br> + ワイヤレイヤに切り替えるには、<strong>E</strong>を押します。 <br><br> 補足: + 設定で<strong>ヒントを有効にする</strong>と、 ワイヤのチュートリアルが有効になります。" reward_filter: title: アイテムフィルタ desc: <strong>アイテムフィルタ</strong>が利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、アイテムを上側または右側の出力に分離します。<br><br> また、真偽値(0/1)信号を入力すれば全てのアイテムの通過・非通過を制御できます。 reward_display: title: ディスプレイ - desc: "<strong>ディスプレイ</strong>が利用可能になりました - ワイヤレイヤで信号を接続することで、その内容を表示できます!<br><br> - 補足: ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに表示してみてください!" + desc: "<strong>ディスプレイ</strong>が利用可能になりました - + ワイヤレイヤで信号を接続することで、その内容を表示できます!<br><br> 補足: + ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに表示してみてください!" reward_constant_signal: title: 定数信号 desc: <strong>定数信号</strong>がワイヤレイヤで利用可能になりました! これは例えば<strong>アイテムフィルタ</strong>に接続すると便利です。<br><br> @@ -738,6 +869,11 @@ settings: mapResourcesScale: title: 資源アイコンのサイズ description: ズームアウトしたときの図形のサイズを調節します。 + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. + tickrateHz: <amount> Hz keybindings: title: キー設定 hint: "Tip: CTRL, SHIFT, ALTを活用してください。建造物配置の際の追加機能がそれぞれ割り当てられています。" @@ -814,6 +950,11 @@ keybindings: rotateToDown: "回転: 下向きにする" rotateToRight: "回転: 右向きにする" rotateToLeft: "回転: 左向きにする" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: このゲームについて body: >- @@ -860,9 +1001,9 @@ tips: - 切断機は配置された向きを考慮せず、常に垂直に切断します。 - ストレージは左側の出力を優先します。 - 増築可能なデザインを作るために時間を使ってください。それだけの価値があります! - - <b>SHIFT</b>を使用すると複数の建物を一度に配置できます。 + - Invest time to build repeatable designs - it's worth it! - <b>ALT</b>を押しながらベルトを設置すると、向きを逆転できます。 - - 効率が重要です! + - You can hold <b>ALT</b> to invert the direction of placed belts. - ハブから遠くに離れるほど、形状資源はより複雑な形になります。 - 機械の速度には上限があるので、最大効率を得るためには入力を分割してください。 - 効率を最大化するために分配機/合流機を使用できます。 @@ -878,8 +1019,8 @@ tips: - モジュールがあれば、空間はただの認識に過ぎなくなる――生ある人間に対する気遣いだ。 - 設計図としての工場を別に作っておくと、工場のモジュール化において重要な役割を果たします。 - 混色機をよく見ると、色の混ぜ方が解ります。 - - <b>CTRL</b> + クリックで範囲選択ができます。 - - ハブに近すぎる設計物を作ると、のちの設計の邪魔になるかもしれません。 + - Have a closer look at the color mixer, and your questions will be answered. + - Use <b>CTRL</b> + Click to select an area. - アップグレードリストの各形状の横にあるピンのアイコンは、その形状を画面左に固定表示します。 - 三原色全てを混ぜ合わせると白になります! - マップは無限の広さがあります。臆せずに拡張してください。 @@ -893,3 +1034,89 @@ tips: - F4を押すことで、FPSとTickレートを表示できます。 - F4を2回押すと、マウスとカメラの座標を表示できます。 - 左のピン留めされた図形をクリックすると、固定を解除できます。 + - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-kor.yaml b/translations/base-kor.yaml index 5d207b82..c8747f34 100644 --- a/translations/base-kor.yaml +++ b/translations/base-kor.yaml @@ -8,7 +8,7 @@ steamPage: 심지어 그것만으로는 충분하지 않을 겁니다. 수요는 기하급수적으로 늘어나게 될 것이고, 더욱 복잡한 도형을 더욱 많이 생산하여야 하므로, 유일하게 도움이 되는 것은 끊임없이 확장을 하는 것입니다! 처음에는 단순한 도형만을 만들지만, 나중에는 색소를 추출하고 혼합하여 도형에 색칠을 해야 합니다! Steam에서 게임을 구매하여 정식 버전의 콘텐츠를 사용하실 수 있지만, 먼저 Shapez.io의 체험판 버전을 플레이해보시고 구매를 고려하셔도 됩니다! - what_others_say: What people say about shapez.io + what_others_say: shapez.io에 대한 의견들 nothernlion_comment: This game is great - I'm having a wonderful time playing, and time has flown by. notch_comment: Oh crap. I really should sleep, but I think I just figured out @@ -47,6 +47,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: 로그인 중 demoBanners: title: 체험판 버전 intro: 정식 버전을 구매해서 모든 콘텐츠를 사용해 보세요! @@ -66,6 +67,11 @@ mainMenu: madeBy: 제작 <author-link> subreddit: Reddit savegameUnnamed: 이름 없음 + puzzleMode: 퍼즐 모드 + back: Back + puzzleDlcText: 공장의 크기를 줄이고 최적화하는 데 관심이 많으신가요? 지금 퍼즐 DLC를 구입하세요! + puzzleDlcWishlist: 지금 찜 목록에 추가하세요! + puzzleDlcViewNow: DLC 보러 가기 dialogs: buttons: ok: 확인 @@ -79,6 +85,9 @@ dialogs: viewUpdate: 업데이트 보기 showUpgrades: 업그레이드 보기 showKeybindings: 조작법 보기 + retry: 재시작 + continue: 계속하기 + playOffline: 오프라인 플레이 importSavegameError: title: 가져오기 오류 text: "세이브 파일을 가져오지 못했습니다:" @@ -163,6 +172,63 @@ dialogs: tutorialVideoAvailableForeignLanguage: title: 활성화된 튜토리얼 desc: 현재 레벨에서 사용할 수 있는 튜토리얼 비디오가 있습니다! 허나 영어로만 제공될 것입니다. 보시겠습니까? + editConstantProducer: + title: 아이템 설정 + puzzleLoadFailed: + title: 퍼즐 불러오기 실패 + desc: "불행히도 이 퍼즐은 불러오는데 실패하였습니다:" + submitPuzzle: + title: 퍼즐 보내기 + descName: "퍼즐에 이름을 지어 주세요:" + descIcon: "퍼즐의 아이콘으로 보여지게 될 짧은 단어를 지정해 주세요. (<link>이곳</link>에서 생성하시거나, 아래 랜덤한 모양 + 중 하나를 선택하세요):" + placeholderName: 퍼즐 제목 + puzzleResizeBadBuildings: + title: 크기 조절 불가능 + desc: 몇몇 건물이 구역 밖으로 벗어나게 되므로 크기를 조절할 수 없습니다. + puzzleLoadError: + title: 잘못된 퍼즐 + desc: "퍼즐을 불러올 수 없었습니다:" + offlineMode: + title: 오프라인 모드 + desc: 서버에 접속할 수 없었으므로 오프라인 모드로 게임이 시작되었습니다. 인터넷 연결 상태를 다시 한번 확인해 주세요. + puzzleDownloadError: + title: 다운로드 오류 + desc: "퍼즐을 다운로드할 수 없습니다:" + puzzleSubmitError: + title: 전송 오류 + desc: "퍼즐을 전송할 수 없습니다:" + puzzleSubmitOk: + title: 퍼즐 공개됨 + desc: 축하합니다! 퍼즐이 업로드되었고 이제 다른 사람이 플레이할 수 있습니다. "내 퍼즐" 섹션에서 찾으실 수 있습니다. + puzzleCreateOffline: + title: 오프라인 모드 + desc: 오프라인 모드임으로 퍼즐을 저장하거나 업로드할 수 없습니다. 그래도 계속하시겠습니까? + puzzlePlayRegularRecommendation: + title: 권장 사항 + desc: 퍼즐 DLC 플레이시 소개되지 않은 요소를 접하시게 될 수 있으므로, 적어도 일반 게임을 12레벨까지 플레이하시는것을 + <strong>강력히</strong> 권장드립니다. 그래도 계속하시겠습니까? + puzzleShare: + title: 짧은 키 복사됨 + desc: 퍼즐의 짧은 키 (<key>) 가 클립보드에 복사되었습니다! 메인 메뉴에서 퍼즐 접근 시 사용할 수 있습니다. + puzzleReport: + title: 퍼즐 신고 + options: + profane: 부적절함 + unsolvable: 풀 수 없음 + trolling: 낚시성 + puzzleReportComplete: + title: 피드백을 보내주셔서 감사드립니다! + desc: 퍼즐이 신고되었습니다. + puzzleReportError: + title: 신고 실패 + desc: "오류로 신고가 처리되지 못했습니다:" + puzzleLoadShortKey: + title: 짧은 키 입력 + desc: 불러올 퍼즐의 짧은 키를 입력해 주세요. + puzzleDelete: + title: 퍼즐을 지우시겠습니까? + desc: 정말로 퍼즐:'<title>'을 지우시겠습니까? 이것은 돌릴수 없습니다! ingame: keybindingsOverlay: moveMap: 이동 @@ -184,6 +250,7 @@ ingame: clearSelection: 지우기 pipette: 피펫 switchLayers: 레이어 전환 + clearBelts: 벨트 청소하기 buildingPlacement: cycleBuildingVariants: <key> 키를 눌러 변형 전환 hotkeyLabel: "단축키: <key>" @@ -253,9 +320,8 @@ ingame: 1_3_expand: "이 게임은 방치형 게임이 <strong>아닙니다</strong>! 더 많은 추출기와 벨트를 만들어 지정된 목표를 빨리 달성하세요.<br><br> 팁: <strong>SHIFT</strong> 키를 누른 상태에서는 빠르게 배치할 수 있고, <strong>R</strong> 키를 눌러 회전할 수 있습니다." - 2_1_place_cutter: "Now place a <strong>Cutter</strong> to cut the circles in two - halves!<br><br> PS: The cutter always cuts from <strong>top to - bottom</strong> regardless of its orientation." + 2_1_place_cutter: "이제 <strong>절단기</strong>를 배치해 원형 도형을 반으로 잘라보세요!<br><br> 참고: + 절단기는 놓는 방향에 상관없이 항상 <strong>위에서 아래로만</strong> 자릅니다." 2_2_place_trash: 절단기가 <strong>막히거나 멈출 수 있습니다</strong>!<br><br> <strong>휴지통</strong>을 사용하여 현재 필요없는 쓰레기 도형 (!)을 제거하세요. 2_3_more_cutters: "잘하셨습니다! 느린 처리 속도를 보완하기 위해 <strong>절단기를 두 개</strong> 이상 @@ -269,9 +335,8 @@ ingame: 21_2_switch_to_wires: <strong>E 키</strong>를 눌러 전선 레이어 로 전환하세요!<br><br> 그 후 색칠기의 <strong>네 입력 부분</strong>을 모두 케이블로 연결하세요! 21_3_place_button: 훌륭해요! 이제 <strong>스위치</strong>를 배치하고 전선으로 연결하세요! - 21_4_press_button: "Press the switch to make it <strong>emit a truthy - signal</strong> and thus activate the painter.<br><br> PS: You - don't have to connect all inputs! Try wiring only two." + 21_4_press_button: "스위치를 눌러서 색칠기에 <strong>참 신호를 보내</strong> 활성화해보세요.<br><br> 추신: + 모든 입력을 연결할 필요는 없습니다! 두개만 연결해 보세요." colors: red: 빨간색 green: 초록색 @@ -320,8 +385,43 @@ ingame: title: 저를 지원해주세요 desc: 저는 여가 시간에 게임을 개발합니다! achievements: - title: Achievements - desc: Hunt them all! + title: 도전 과제 + desc: 모두 잡아 보세요! + puzzleEditorSettings: + zoneTitle: 구역 + zoneWidth: 너비 + zoneHeight: 높이 + trimZone: 자르기 + clearItems: 아이템 초기화 + share: 공유 + report: 신고 + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: 퍼즐 생성기 + instructions: + - 1. <strong>일정 생성기</strong>를 배치해 플레이어가 사용할 색깔과 모양 을 생성하세요 + - 2. 플레이어가 나중에 만들 모양을 하나 이상 만들어 <strong>목표 수집기</strong> 로 배달하도록 만드세요 + - 3. 목표 수집기가 모양을 일정 양 이상 수집하면 그것은 플레이어가 반드시 <strong>생산해야 할 목표 + 모양</strong>으로 저장합니다 (<strong>초록색 뱃지</strong> 로 표시됨) + - 4. 건물의 <strong>잠금 버튼</strong>을 눌러서 비활성화하세요 + - 5. 리뷰 버튼을 누르면 퍼즐이 검증되고 업로드할수 있게 됩니다. + - 6. 공개시, 생성기와 목표 수집기를 제외한 <strong>모든 건물이</strong> 제거됩니다 - 그 부분이 바로 + 플레이어가 스스로 알아내야 하는 것들이죠 :) + puzzleCompletion: + title: 퍼즐 완료됨! + titleLike: "퍼즐이 좋았다면 하트를 눌러주세요:" + titleRating: 퍼즐의 난이도는 어땠나요? + titleRatingDesc: 당신의 평가는 제가 미래에 더 나은 평가를 만들수 있도록 도울 수 있습니다. + continueBtn: 계속 플레이하기 + menuBtn: 메뉴 + nextPuzzle: Next Puzzle + puzzleMetadata: + author: 제작자 + shortKey: 짧은 키 + rating: 난이도 + averageDuration: 평균 플레이 시간 + completionRate: 완료율 shopUpgrades: belt: name: 벨트, 밸런서, 터널 @@ -439,7 +539,7 @@ buildings: constant_signal: default: name: 일정 신호기 - description: 모양, 색상, 또는 불 값 (1 또는 0) 상수 신호를 방출합니다. + description: 모양, 색상, 또는 불 값 (1 또는 0)이 될 수 있는 일정한 신호를 방출합니다. lever: default: name: 스위치 @@ -506,6 +606,18 @@ buildings: default: name: 아이템 생성기 description: 샌드박스 모드에서만 사용할 수 있는 아이템으로, 일반 레이어 위에 있는 전선 레이어에서 주어진 신호를 출력합니다. + constant_producer: + default: + name: 일정 생성기 + description: 지정한 모양이나 색깔을 일정하게 생성합니다. + goal_acceptor: + default: + name: 목표 수집기 + description: 목표 수집기로 모양을 보내 목표로 설정하세요. + block: + default: + name: 차단기 + description: 타일을 사용하지 못하게 차단합니다. storyRewards: reward_cutter_and_trash: title: 절단기 @@ -622,13 +734,11 @@ storyRewards: - 평소처럼 게임을 진행합니다.<br><br> 어떤 방식으로든, 재미있게 게임을 플레이해주시길 바랍니다! reward_wires_painter_and_levers: title: 전선과 4단 색칠기 - desc: "You just unlocked the <strong>Wires Layer</strong>: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!<br><br> For the beginning I unlocked you the <strong>Quad - Painter</strong> - Connect the slots you would like to paint with on - the wires layer!<br><br> To switch to the wires layer, press - <strong>E</strong>. <br><br> PS: <strong>Enable hints</strong> in - the settings to activate the wires tutorial!" + desc: " 방금 <strong>전선 레이어</strong>를 활성화하셨습니다: 이것은 일반 레이어 위에 존재하는 별개의 레이어로 수많은 + 새로운 요소를 사용할 수 있습니다!<br><br> <strong>4단 색칠기</strong>를 활성화해 드리겠습니다 - + 전선 레이어에서 색을 칠할 부분에 연결해 보세요!<br><br> 전선 레이어로 전환하시려면 + <strong>E</strong>키를 눌러주세요.<br><br> 추신: <strong>힌트를 활성화</strong>해서 + 전선 튜토리얼을 활성화해 보세요!" reward_filter: title: 아이템 선별기 desc: <strong>아이템 선별기</strong>가 잠금 해제되었습니다! 전선 레이어의 신호와 일치하는지에 대한 여부로 아이템을 위쪽 @@ -765,8 +875,8 @@ settings: description: 기본적으로 활성화되어 있으며, 자원 패치에서 피펫 기능을 사용 시 즉시 추출기를 선택합니다. simplifiedBelts: title: 벨트 단순화 (못생김) - description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 할 - 정도로 심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다. + description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 정도로 + 심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다. enableMousePan: title: 화면 가장자리 패닝 description: 커서를 화면 가장자리로 옮기면 스크롤되어 지도를 이동할 수 있습니다. 스크롤 속도는 이동 속도 설정에 따릅니다. @@ -776,7 +886,12 @@ settings: mapResourcesScale: title: 지도 자원 크기 description: 지도를 축소할 때 나타나는 도형의 크기를 제어합니다. + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: 조작법 hint: "팁: CTRL, SHIFT, ALT를 적절히 사용하세요! 건물을 배치할 때 유용합니다." @@ -849,10 +964,15 @@ keybindings: comparator: 비교기 item_producer: 아이템 생성기 (샌드박스) copyWireValue: "전선: 커서 아래 값 복사" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: 위로 향하게 회전 + rotateToDown: 아래로 향하게 회전 + rotateToRight: 오른쪽으로 향하게 회전 + rotateToLeft: 아래쪽으로 향하게 회전 + constant_producer: 일정 생성기 + goal_acceptor: 목표 수집기 + block: 블록 + massSelectClear: 벨트 초기화 + showShapeTooltip: Show shape output tooltip about: title: 게임 정보 body: >- @@ -922,7 +1042,7 @@ tips: - 공장을 허브에 가까이 지으면 나중에 거대한 프로젝트에 방해가 될 수 있습니다. - 업그레이드 목록에 나타나는 도형 옆의 핀 아이콘을 누르면 화면에 고정됩니다. - 세 가지의 기본 색상을 모두 섞어서 흰색을 만드세요! - - 당신에겐 무한한 땅이 있습니다. 굳이 공간을 적게 쓸 필요는 없으니, 맘껏 확장하세요! + - 당신에겐 무한한 땅이 있습니다. 굳이 공간을 적게 쓸 필요는 없으니, 마음껏 확장하세요! - Factorio도 플레이 해보세요! 제가 가장 좋아하는 게임입니다. - 4단 절단기는 오른쪽 상단부터 시계 방향으로 차례로 절단합니다. - 메인 메뉴에서 세이브 파일을 다운로드 할 수 있습니다. @@ -933,3 +1053,80 @@ tips: - F4 키를 누르면 FPS와 틱 비율을 표시합니다. - F4 키를 두번 누르면 마우스와 카메라의 타일을 표시합니다. - 왼쪽에 고정된 도형을 클릭하여 고정을 해제할 수 있습니다. +puzzleMenu: + play: 플레이 + edit: 편집 + title: 퍼즐 모드 + createPuzzle: 퍼즐 만들기 + loadPuzzle: 불러오기 + reviewPuzzle: 리뷰 & 공개 + validatingPuzzle: 퍼즐 검증중 + submittingPuzzle: 퍼즐 전송중 + noPuzzles: 이 섹션에 퍼즐이 없습니다. + categories: + levels: 레벨순 + new: 최신순 + top-rated: 등급순 + mine: 내 퍼즐 + easy: 쉬움 + hard: 어러움 + completed: 완료함 + medium: 중간 + official: 공식 + trending: 오늘의 인기 + trending-weekly: 이 주의 인기 + categories: 카테고리 + difficulties: 난이도순 + account: 내 퍼즐들 + search: 검색 + validation: + title: 잘못된 퍼즐 + noProducers: 일정 생성기를 배치해주세요! + noGoalAcceptors: 목표 수집기를 배치해주세요! + goalAcceptorNoItem: 하나 이상의 목표 수집기에 아이템이 지정되지 않았습니다. 모양을 운반해서 목표를 지정해 주세요. + goalAcceptorRateNotMet: 하나 이상의 목표 수집기에 아이템이 충분하지 않습니다. 모든 수집기의 표시가 초록색인지 확인해주세요. + buildingOutOfBounds: 하나 이상의 건물이 지을 수 있는 영역 밖에 존재합니다. 영역을 늘리거나 건물을 제거하세요. + autoComplete: 퍼즐이 스스로 완료됩니다! 일정 생성기가 만든 모양이 목표 수집기로 바로 들어가고 있는건 아닌지 확인해주세요. + difficulties: + easy: 쉬움 + medium: 중간 + hard: 어려움 + unknown: Unrated + dlcHint: DLC를 이미 구입하셨나요? 라이브러리에서 shapez.io를 오른쪽 클릭한 다음 속성… > DLC 메뉴를 선택해서 + 활성화되었는지 확인해주세요. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: 너무 빠른 시간 내 작업을 반복하고 있습니다. 조금만 기다려 주세요. + invalid-api-key: 백엔드 서버와 통신할 수 없습니다. 게임을 업데이트하거나 재시작해 주세요 (잘못된 API 키). + unauthorized: 백엔드 서버와 통신할 수 없습니다. 게임을 업데이트하거나 재시작해 주세요 (인증되지 않음). + bad-token: 백엔드 서버와 통신할 수 없습니다. 게임을 업데이트하거나 재시작해 주세요 (잘못된 토큰). + bad-id: 잘못된 퍼즐 구분자. + not-found: 해당하는 퍼즐을 찾을 수 없습니다. + bad-category: 해당하는 분류를 찾을 수 없습니다. + bad-short-key: 입력한 짧은 키가 올바르지 않습니다. + profane-title: 퍼즐 제목에 부적절한 단어가 포함되어 있습니다. + bad-title-too-many-spaces: 퍼즐 제목이 너무 짧습니다. + bad-shape-key-in-emitter: 일정 생성기에 잘못된 아이템이 지정되어 있습니다. + bad-shape-key-in-goal: 목표 수집기에 잘못된 아이템이 지정되어 있습니다. + no-emitters: 퍼즐에 일정 생성기가 하나도 존재하지 않습니다. + no-goals: 퍼즐에 목표 생성기가 하나도 존재하지 않습니다. + short-key-already-taken: 이 짧은 키는 이미 사용중입니다. 다른 것을 이용해 주세요. + can-not-report-your-own-puzzle: 자신이 만든 퍼즐을 신고할 수 없습니다. + bad-payload: 요청이 잘못된 데이터를 포함하고 있습니다. + bad-building-placement: 퍼즐에 잘못된 곳에 위치한 건물이 있습니다. + timeout: 요청 시간이 초과되었습니다. + too-many-likes-already: 이 퍼즐은 이미 너무 많은 하트를 받았습니다. 그래도 제거하고 싶다면 support@shapez.io로 문의하세요! + no-permission: 이 작업을 할 권한이 없습니다. diff --git a/translations/base-lt.yaml b/translations/base-lt.yaml index 889fbad3..d9460298 100644 --- a/translations/base-lt.yaml +++ b/translations/base-lt.yaml @@ -52,6 +52,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: Demo Version intro: Get the standalone to unlock all features! @@ -71,6 +72,12 @@ mainMenu: madeBy: Made by <author-link> subreddit: Reddit savegameUnnamed: Unnamed + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -84,6 +91,9 @@ dialogs: viewUpdate: View Update showUpgrades: Show Upgrades showKeybindings: Show Keybindings + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Import Error text: "Failed to import your savegame:" @@ -180,6 +190,70 @@ dialogs: title: Tutorial Available desc: There is a tutorial video available for this level, but it is only available in English. Would you like to watch it? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Move @@ -201,6 +275,7 @@ ingame: clearSelection: Clear Selection pipette: Pipette switchLayers: Switch layers + clearBelts: Clear belts buildingPlacement: cycleBuildingVariants: Press <key> to cycle variants. hotkeyLabel: "Hotkey: <key>" @@ -348,6 +423,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Belts, Distributor & Tunnels @@ -554,6 +670,18 @@ buildings: name: Item Producer description: Available in sandbox mode only, outputs the given signal from the wires layer on the regular layer. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Cutting Shapes @@ -876,7 +1004,12 @@ settings: title: Map Resources Size description: Controls the size of the shapes on the map overview (when zooming out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Keybindings hint: "Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different @@ -954,6 +1087,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: About this Game body: >- @@ -1039,3 +1177,88 @@ tips: - Press F4 to show your FPS and Tick Rate. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index 798b8cda..176777e4 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -1,20 +1,20 @@ steamPage: shortText: shapez.io is een spel dat draait om het bouwen van fabrieken voor het produceren en automatiseren van steeds complexere vormen in een oneindig - groot speelveld. + grote wereld. discordLinkShort: Officiële Discord server intro: >- - Shapez.io is een spel waarin je fabrieken moet bouwen voor de - automatische productie van geometrische vormen. + Shapez.io is een spel waarin je fabrieken bouwt voor de automatische + productie van geometrische vormen. - Naarmate het spel vordert, worden de vormen complexer, en moet je uitbreiden in het oneindige speelveld. + Naarmate het spel vordert, worden de vormen complexer, en zul je moeten uitbreiden in de oneindige wereld. - En als dat nog niet genoeg is moet je ook nog eens steeds meer produceren om aan de vraag te kunnen voldoen. Het enige dat helpt is uitbreiden! + En als dat nog niet genoeg is produceer je ook nog steeds meer om aan de vraag te kunnen voldoen. Het enige dat helpt is uitbreiden! - Ondanks het feit dat je in het begin alleen vormen maakt, komt er het punt waarop je ze moet kleuren. Deze kleuren moet je vinden en mengen! + Ondanks het feit dat je in het begin alleen vormen maakt, komt er een punt waarop je ze gaat kleuren. Deze kleuren kun je vinden en mengen! Door het spel op Steam te kopen kun je de volledige versie spelen. Je kunt echter ook een demo versie spelen op shapez.io en later beslissen om over te schakelen zonder voortgang te verliezen. - what_others_say: What people say about shapez.io + what_others_say: Wat anderen vinden van shapez.io nothernlion_comment: This game is great - I'm having a wonderful time playing, and time has flown by. notch_comment: Oh crap. I really should sleep, but I think I just figured out @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: SPATIE + loggingIn: Inloggen demoBanners: title: Demoversie intro: Koop de standalone om alle functies te ontgrendelen! @@ -64,7 +65,8 @@ mainMenu: discordLink: Officiële Discord-server (Engelstalig) helpTranslate: Help ons met vertalen! browserWarning: Sorry, maar dit spel draait langzaam in je huidige browser! Koop - de standalone versie of download chrome voor de volledige ervaring. + de standalone versie of download Google Chrome voor de volledige + ervaring. savegameLevel: Level <x> savegameLevelUnknown: Level onbekend continue: Ga verder @@ -72,6 +74,12 @@ mainMenu: madeBy: Gemaakt door <author-link> subreddit: Reddit savegameUnnamed: Naamloos + puzzleMode: Puzzel Modus + back: Terug + puzzleDlcText: Houd je van het comprimeren en optimaliseren van fabrieken? + Verkrijg de puzzel DLC nu op Steam voor nog meer plezier! + puzzleDlcWishlist: Voeg nu toe aan je verlanglijst! + puzzleDlcViewNow: Bekijk DLC dialogs: buttons: ok: OK @@ -85,6 +93,9 @@ dialogs: viewUpdate: Zie Update showUpgrades: Zie Upgrades showKeybindings: Zie Sneltoetsen + retry: Opnieuw Proberen + continue: Ga Verder + playOffline: Offline Spelen importSavegameError: title: Importeerfout text: "Het importeren van je savegame is mislukt:" @@ -95,7 +106,7 @@ dialogs: title: Corrupte savegame text: "Het laden van je savegame is mislukt:" confirmSavegameDelete: - title: Bevestig het verwijderen + title: Bevestig verwijderen van savegame text: Ben je zeker dat je het volgende spel wil verwijderen?<br><br> '<savegameName>' op niveau <savegameLevel><br><br> Dit kan niet ongedaan worden gemaakt! @@ -104,7 +115,7 @@ dialogs: text: "Het verwijderen van de savegame is mislukt:" restartRequired: title: Opnieuw opstarten vereist - text: Je moet het spel opnieuw opstarten om de instellingen toe te passen. + text: Start het spel opnieuw op om de instellingen toe te passen. editKeybinding: title: Verander sneltoetsen desc: Druk op de toets of muisknop die je aan deze functie toe wil wijzen, of @@ -153,8 +164,8 @@ dialogs: van lopende banden om te draaien wanneer je ze plaatst.<br>" createMarker: title: Nieuwe markering - desc: Geef het een nuttige naam, Je kan ook een <strong>snel toets</strong> van - een vorm gebruiken (die je <link>here</link> kan genereren). + desc: Geef het een nuttige naam, Je kan ook een <strong>sleutel</strong> van een + vorm gebruiken (die je <link>hier</link> kunt genereren). titleEdit: Bewerk markering markerDemoLimit: desc: Je kunt maar twee markeringen plaatsen in de demo. Koop de standalone voor @@ -175,7 +186,7 @@ dialogs: editSignal: title: Stel het signaal in. descItems: "Kies een ingesteld item:" - descShortKey: ... of voer de <strong>hotkey</strong> in van een vorm (Die je + descShortKey: ... of voer de <strong>sleutel</strong> in van een vorm (Die je <link>hier</link> kunt vinden). renameSavegame: title: Hernoem opgeslagen spel @@ -185,16 +196,82 @@ dialogs: desc: Er is een tutorial video beschikbaar voor dit level! Zou je het willen bekijken? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available + title: Tutorial Beschikbaar desc: Er is een tutorial beschikbaar voor dit level, maar het is alleen - beschikbaar in het Engels. Zou je het toch graag kijken? + beschikbaar in het Engels. Wil je toch een kijkje nemen? + editConstantProducer: + title: Item instellen + puzzleLoadFailed: + title: Puzzels kunnen niet geladen worden + desc: "Helaas konden de puzzels niet worden geladen:" + submitPuzzle: + title: Puzzel indienen + descName: "Geef je puzzel een naam:" + descIcon: "Voer een unieke vorm sleutel in, die wordt weergegeven als het icoon + van je puzzel (je kunt ze <link>hier</link> genereren, of je kunt er + een kiezen van de willekeurig voorgestelde vormen hieronder):" + placeholderName: Puzzel Naam + puzzleResizeBadBuildings: + title: Formaat wijzigen niet mogelijk + desc: Je kunt het gebied niet kleiner maken, want dan zouden sommige gebouwen + buiten het gebied zijn. + puzzleLoadError: + title: Foute Puzzel + desc: "De puzzel kon niet geladen worden:" + offlineMode: + title: Offline Modus + desc: We konden de server niet bereiken, het spel draait nu in de offline modus. + Zorg ervoor dat je een actieve internetverbinding heeft. + puzzleDownloadError: + title: Download fout + desc: "Downloaden van de puzzel is mislukt:" + puzzleSubmitError: + title: Indieningsfout + desc: "Het indienen van je puzzel is mislukt:" + puzzleSubmitOk: + title: Puzzel Gepubliceerd + desc: Gefeliciteerd! Je puzzel is gepubliceerd en kan nu worden gespeeld door + anderen. Je kunt het nu vinden in het gedeelte "Mijn puzzels". + puzzleCreateOffline: + title: Offline Modus + desc: Aangezien je offline bent, kun je je puzzels niet opslaan of publiceren. + Wil je nog steeds doorgaan? + puzzlePlayRegularRecommendation: + title: Aanbeveling + desc: Ik raad <strong>sterk</strong> aan om het normale spel tot niveau 12 te + spelen voordat je de puzzel-DLC probeert, anders kan je mechanica + tegenkomen die je nog niet kent. Wil je toch doorgaan? + puzzleShare: + title: Vorm Sleutel Gekopieerd + desc: De vorm sleutel van de puzzel (<key>) is naar je klembord gekopieerd! Het + kan in het puzzelmenu worden ingevoerd om toegang te krijgen tot de + puzzel. + puzzleReport: + title: Puzzel Rapporteren + options: + profane: Ongepast + unsolvable: Niet oplosbaar + trolling: Trollen + puzzleReportComplete: + title: Bedankt voor je feedback! + desc: De puzzel is gemarkeerd. + puzzleReportError: + title: Melden mislukt + desc: "Je melding kan niet worden verwerkt:" + puzzleLoadShortKey: + title: Voer een vorm sleutel in + desc: Voer de vorm sleutel van de puzzel in om deze te laden. + puzzleDelete: + title: Puzzel verwijderen? + desc: Weet je zeker dat je '<title>' wilt verwijderen? Dit kan niet ongedaan + gemaakt worden! ingame: keybindingsOverlay: - moveMap: Beweeg speelveld + moveMap: Beweeg rond de wereld selectBuildings: Selecteer gebied stopPlacement: Stop met plaatsen rotateBuilding: Draai gebouw - placeMultiple: Plaats meerdere + placeMultiple: Plaats meerderen reverseOrientation: Omgekeerde oriëntatie disableAutoOrientation: Schakel auto-oriëntatie uit toggleHud: HUD aan-/uitzetten @@ -209,6 +286,7 @@ ingame: clearSelection: Annuleer selectie pipette: Pipet switchLayers: Wissel lagen + clearBelts: Lopende banden leeg maken buildingPlacement: cycleBuildingVariants: Druk op <key> om tussen varianten te wisselen. hotkeyLabel: "Hotkey: <key>" @@ -266,48 +344,49 @@ ingame: waypoints: Markeringen hub: HUB description: Klik met de linkermuisknop op een markering om hier naartoe te - gaan, klik met de rechtermuisknop om de markering te - verwijderen.<br><br>Druk op <keybinding> om een markering te maken - in het huidige zicht, of <strong>rechtermuisknop</strong> om een - markering te maken bij het geselecteerde gebied. + gaan, klik met de rechtermuisknop om hem te verwijderen.<br><br>Druk + op <keybinding> om een markering te maken in het huidige zicht, of + <strong>rechtermuisknop</strong> om een markering te maken bij het + geselecteerde gebied. creationSuccessNotification: Markering is gemaakt. interactiveTutorial: title: Tutorial hints: 1_1_extractor: Plaats een <strong>ontginner</strong> op een - <strong>cirkelvorm</strong> om deze te onttrekken! + <strong>cirkelvorm</strong> om deze te ontginnen! 1_2_conveyor: "Verbind de ontginner met een <strong>lopende band</strong> aan je - hub!<br><br>Tip: <strong>Klik en sleep</strong> de lopende band + HUB!<br><br>Tip: <strong>Klik en sleep</strong> de lopende band met je muis!" 1_3_expand: "Dit is <strong>GEEN</strong> nietsdoen-spel! Bouw meer ontginners en lopende banden om het doel sneller te behalen.<br><br>Tip: Houd <strong>SHIFT</strong> ingedrukt om meerdere ontginners te plaatsen en gebruik <strong>R</strong> om ze te draaien." 2_1_place_cutter: "Plaats nu een <strong>Knipper</strong> om de cirkels in twee - te knippen halves!<br><br> PS: De knipper knipt altijd van + helften te knippen<br><br> PS: De knipper knipt altijd van <strong>boven naar onder</strong> ongeacht zijn oriëntatie." 2_2_place_trash: De knipper kan vormen <strong>verstoppen en - bijhouden</strong>!<br><br> Gebruik een <strong>vuilbak</strong> - om van het (!) niet nodige afval vanaf te geraken. + bijhouden</strong>!<br><br> Gebruik een + <strong>vuilnisbak</strong> om van het momenteel (!) niet nodige + afval af te geraken. 2_3_more_cutters: "Goed gedaan! Plaats nu <strong>2 extra knippers</strong> om - dit traag process te versnellen! <br><br> PS: Gebruik de + dit trage process te versnellen! <br><br> PS: Gebruik de <strong>0-9 sneltoetsen</strong> om gebouwen sneller te selecteren." 3_1_rectangles: "Laten we nu rechthoeken ontginnen! <strong>Bouw 4 - ontginners</strong> en verbind ze met de lever.<br><br> PS: Houd - <strong>SHIFT</strong> Ingedrukt terwijl je lopende banden + ontginners</strong> en verbind ze met de schakelaar.<br><br> PS: + Houd <strong>SHIFT</strong> Ingedrukt terwijl je lopende banden plaats om ze te plannen!" 21_1_place_quad_painter: Plaats de <strong>quad painter</strong> en krijg een paar <strong>cirkels</strong> in <strong>witte</strong> en <strong>rode</strong> kleur! - 21_2_switch_to_wires: Schakel naar de draden laag door te duwen op + 21_2_switch_to_wires: Schakel naar de draden-laag door te drukken op <strong>E</strong>!<br><br> <strong>verbind daarna alle inputs</strong> van de verver met kabels! 21_3_place_button: Mooi! Plaats nu een <strong>schakelaar</strong> en verbind het met draden! 21_4_press_button: "Druk op de schakelaar om het een <strong>Juist signaal door - te geven</strong> en de verver te activeren.<br><br> PS: Je moet - niet alle inputs verbinden! Probeer er eens 2." + te geven</strong> en de verver te activeren.<br><br> PS: Verbind + niet alle inputs! Probeer er eens 2." colors: red: Rood green: Groen @@ -323,8 +402,8 @@ ingame: empty: Leeg copyKey: Kopieer sleutel connectedMiners: - one_miner: 1 Miner - n_miners: <amount> Miners + one_miner: 1 Ontginner + n_miners: <amount> Ontginners limited_items: "Gelimiteerd tot: <max_throughput>" watermark: title: Demo versie @@ -342,13 +421,13 @@ ingame: desc: Automatiseer je fabrieken nog beter en maak ze nog sneller! upgrades: title: ∞ Upgrade Levels - desc: Deze demo heeft er enkel 5! + desc: Deze demo heeft er slechts 5! markers: title: ∞ Markeringen desc: Verdwaal nooit meer in je fabriek! wires: title: Kabels - desc: Een volledig nieuwe wereld! + desc: Een volledig nieuwe laag! darkmode: title: Dark Mode desc: Minder vervelend voor je ogen! @@ -357,13 +436,58 @@ ingame: desc: Ik maak dit spel in mijn vrije tijd! achievements: title: Achievements - desc: Hunt them all! + desc: Krijg ze allemaal! + puzzleEditorSettings: + zoneTitle: Gebied + zoneWidth: Breedte + zoneHeight: Hoogte + trimZone: Bijsnijden + clearItems: Items leeg maken + share: Delen + report: Rapporteren + clearBuildings: Verwijder Gebouwen + resetPuzzle: Reset Puzzel + puzzleEditorControls: + title: Puzzel Maker + instructions: + - 1. Plaats <strong>Constante Producenten</strong> om vormen en + kleuren aan de speler te bieden. + - 2. Bouw een of meer vormen waarvan je wil dat de speler ze later + maakt en lever het aan een of meerdere + <strong>Ontvangers</strong>. + - 3. Wanneer een Ontvanger voor een bepaalde tijd lang een vorm + ontvangt, <strong>wordt het opgeslagen als een doel</strong> dat + de speler later moet produceren (Aangegeven door de <strong>groene + indicator</strong>). + - 4. Klik de <strong>vergrendelknop</strong> om een gebouw uit te + schakelen. + - 5. Zodra je op review klikt, wordt je puzzel gevalideerd en kun je + het publiceren. + - 6. Bij publicatie, <strong>worden alle gebouwen + verwijderd</strong> behalve de Muren, Constante Producenten en + Ontvangers - Dat is het deel dat de speler tenslotte voor zichzelf + moet uitzoeken :) + puzzleCompletion: + title: Puzzel Voltooid! + titleLike: "Klik op het hartje als je de puzzel leuk vond:" + titleRating: Hoe moeilijk vond je de puzzel? + titleRatingDesc: Je beoordeling helpt me om je in de toekomst betere suggesties + te geven + continueBtn: Blijf Spelen + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Auteur + shortKey: Vorm Sleutel + rating: Moeilijkheidsgraad + averageDuration: Gem. Speel Tijd + completionRate: Voltooiïngspercentage shopUpgrades: belt: - name: Banden, Verdeler & Tunnels + name: Lopende banden, Verdeler & Tunnels description: Snelheid x<currentMult> → x<newMult> miner: - name: Mijner + name: Ontginner description: Snelheid x<currentMult> → x<newMult> processors: name: Knippen, draaien & stapelen @@ -378,11 +502,11 @@ buildings: description: Transporteert voorwerpen, klik en sleep om meerdere te plaatsen. miner: default: - name: Mijner - description: Plaats op een vorm of kleur om deze te onttrekken. + name: Ontginner + description: Plaats op een vorm of kleur om deze te ontginnen. chainable: name: Ontginner (Ketting) - description: Plaats op een vorm of kleur om deze te onttrekken. Kan achter + description: Plaats op een vorm of kleur om deze te ontginnen. Kunnen achter elkaar worden geplaatst. underground_belt: default: @@ -460,19 +584,19 @@ buildings: balancer: default: name: Balanceerder - description: Multifunctioneel - Verdeel alle invoeren over alle uitvoeren. + description: Multifunctioneel - Verdeelt alle invoeren over alle uitvoeren. merger: name: Samenvoeger (compact) - description: Voeg 2 lopende banden samen. + description: Voegt 2 lopende banden samen. merger-inverse: name: Samenvoeger - description: Voeg 2 lopende banden samen. + description: Voegt 2 lopende banden samen. splitter: name: Splitser (compact) - description: Splits een lopende band in tweeën. + description: Splitst een lopende band in tweeën. splitter-inverse: name: Splitser - description: Splits een lopende band in tweeën. + description: Splitst een lopende band in tweeën. storage: default: name: Opslag @@ -485,7 +609,7 @@ buildings: constant_signal: default: name: Constant Signaal - description: Zend een constant signaal, dit kan een vorm, kleur of boolean (1 / + description: Zendt een constant signaal, dit kan een vorm, kleur of boolean (1 / 0) zijn. lever: default: @@ -494,18 +618,18 @@ buildings: logic_gate: default: name: AND poort - description: Zend een 1 uit als beide invoeren hetzelfde zijn. (Kan een vorm, + description: Zendt een 1 uit als beide invoeren hetzelfde zijn. (Kan een vorm, kleur of boolean (1/0) zijn) not: name: NOT poort - description: Zend een 1 uit als de invoer een 0 is. + description: Zendt een 1 uit als de invoer een 0 is. xor: name: XOR poort - description: Zend een 1 uit als de invoeren niet hetzelfde zijn. (Kan een vorm, + description: Zendt een 1 uit als de invoeren niet hetzelfde zijn. (Kan een vorm, kleur of boolean (1/0) zijn) or: name: OR poort - description: Zend een 1 uit als de invoeren wel of niet hetzelfde zijn, maar + description: Zendt een 1 uit als de invoeren wel of niet hetzelfde zijn, maar niet uit zijn. (Kan een vorm, kleur of boolean (1/0) zijn) transistor: default: @@ -527,22 +651,22 @@ buildings: reader: default: name: Lopende band lezer - description: Meet de gemiddelde doorvoer op de band. Geeft het laatste gelezen - item door aan de kabel. + description: Meet de gemiddelde doorvoer op de lopende band. Geeft het laatste + gelezen item door aan de kabel. analyzer: default: name: Vorm Analyse - description: Analiseert de onderste laag rechts boven en geeft de kleur en vorm + description: Analiseert de onderste laag rechtsboven en geeft de kleur en vorm door aan de kabel. comparator: default: name: Vergelijker - description: Zend 1 uit als beiden invoeren gelijk zijn, kunnen vormen, kleuren - of booleans (1/0) zijn + description: Zendt 1 uit als beiden invoeren gelijk zijn, dat kunnen vormen, + kleuren of booleans (1/0) zijn virtual_processor: default: - name: Virtuele Snijder - description: Snijdt de vorm virtueel in twee helften. + name: Virtuele Knipper + description: Knipt de vorm virtueel in twee helften. rotater: name: Virtuele Draaier description: Draait de vorm virtueel met de klok mee en tegen de klok in. @@ -556,37 +680,47 @@ buildings: painter: name: Virtuele Schilder description: Schildert de vorm virtueel vanaf de onderste invoer met de vorm aan - de rechter ingang. + de rechter invoer. item_producer: default: name: Item Producent - description: Alleen beschikbaar in sandbox-modus, geeft het gegeven signaal van - de kabel laag op de reguliere laag. + description: Alleen beschikbaar in sandbox-modus. Geeft het gegeven signaal van + de draden-laag op de normale laag. + constant_producer: + default: + name: Constante Producent + description: Voert constant een bepaalde vorm of kleur uit. + goal_acceptor: + default: + name: Ontvanger + description: Lever vormen aan de Ontvanger om ze als doel te stellen. + block: + default: + name: Blokkade + description: Hiermee kan je een tegel blokkeren. storyRewards: reward_cutter_and_trash: title: Vormen Knippen desc: Je hebt juist de <strong>knipper</strong> ontgrendeld, die vormen in de helft kan knippen van boven naar onder <strong>ongeacht zijn rotatie </strong>!<br><br>Wees zeker dat je het afval weggooit, want anders - <strong>zal het vastlopen</strong> - Voor deze reden heb ik je de - <strong>vuilbak</strong> gegeven, die alles vernietigd wat je erin - laat stromen! + <strong>zal het vastlopen</strong> - Daarom heb ik je de + <strong>vuilnisbak</strong> gegeven, die alles vernietigt wat je + erin laat stromen! reward_rotater: title: Roteren desc: De <strong>roteerder</strong> is ontgrendeld - Het draait vormen 90 graden met de klok mee. reward_painter: title: Verven - desc: "De <strong>verver</strong> is ontgrendeld - Onttrek wat kleur (op - dezelfde manier hoe je vormen onttrekt) en combineer het met een - vorm in de verver om ze te kleuren!<br><br>PS: Als je kleurenblind - bent, is er een <strong>kleurenblindmodus</strong> in de - instellingen!" + desc: "De <strong>verver</strong> is ontgrendeld - Ontgin wat kleur (op dezelfde + manier hoe je vormen ontgint) en combineer het met een vorm in de + verver om ze te kleuren!<br><br>PS: Als je kleurenblind bent, is er + een <strong>kleurenblind-modus</strong> in de instellingen!" reward_mixer: title: Kleuren mengen - desc: De <strong>menger</strong> is ontgrendeld - Gebruik dit gebouw om twee - kleuren te mengen met behulp van <strong>additieve - kleurmenging</strong>! + desc: De <strong>menger</strong> is ontgrendeld - Gebruik deze om twee kleuren + te mengen met behulp van <strong>additieve kleurmenging</strong>! reward_stacker: title: Stapelaar desc: Je kunt nu vormen combineren met de <strong>stapelaar</strong>! De inputs @@ -597,7 +731,7 @@ storyRewards: reward_splitter: title: Splitser/samenvoeger desc: Je hebt de <strong>splitser</strong> ontgrendeld, een variant van de - <strong>samenvoeger</strong> - Het accepteert 1 input en verdeelt + <strong>samenvoeger</strong>. - Het accepteert 1 input en verdeelt het in 2! reward_tunnel: title: Tunnel @@ -605,24 +739,24 @@ storyRewards: gebouwen en lopende banden door laten lopen. reward_rotater_ccw: title: Roteren (andersom) - desc: Je hebt een variant van de <strong>roteerder</strong> ontgrendeld - Het - roteert voorwerpen tegen de klok in! Om het te bouwen selecteer je + desc: Je hebt een variant van de <strong>roteerder</strong> ontgrendeld - Deze + roteert voorwerpen tegen de klok in! Om hem te plaatsen selecteer je de roteerder en <strong>druk je op 'T' om tussen varianten te wisselen</strong>! reward_miner_chainable: title: Ketting-ontginner - desc: "Je hebt de <strong>Ketting-ontginner</strong> ontgrendeld! Het kan - <strong>zijn materialen ontginnen</strong> via andere ontginners - zodat je meer materialen tegelijkertijd kan ontginnen!<br><br> PS: - De oude ontginner is vervangen in je toolbar!" + desc: "Je hebt de <strong>Ketting-ontginner</strong> ontgrendeld! Je kunt hem + <strong>koppelen aan andere ontginners</strong> zodat je meer + materialen tegelijkertijd kunt ontginnen!<br><br> PS: De oude + ontginner is vervangen in je toolbar!" reward_underground_belt_tier_2: title: Tunnel Niveau II desc: Je hebt een nieuwe variant van de <strong>tunnel</strong> ontgrendeld. - - Het heeft een <strong>groter bereik</strong>, en je kan nu ook die - tunnels mixen over en onder elkaar! + Het heeft een <strong>groter bereik</strong>, en je kunt nu ook + tunnels over en onder elkaar mixen! reward_cutter_quad: title: Quad Knippen - desc: Je hebt een variant van de <strong>knipper</strong> ontgrendeld - Dit + desc: Je hebt een variant van de <strong>knipper</strong> ontgrendeld - Deze knipt vormen in <strong>vier stukken</strong> in plaats van twee! reward_painter_double: title: Dubbel verven @@ -633,19 +767,18 @@ storyRewards: title: Opslagbuffer desc: Je hebt een variant van de <strong>opslag</strong> ontgrendeld - Het laat je toe om vormen op te slagen tot een bepaalde capaciteit!<br><br> - Het verkiest de linkse output, dus je kan het altijd gebruiken als + Het verkiest de linkse output, dus je kunt het altijd gebruiken als een <strong>overloop poort</strong>! reward_freeplay: - title: Vrij spel + title: Free-play modus desc: Je hebt het gedaan! Je hebt de <strong>free-play modus</strong> - ontgrendeld! Dit betekend dat vormen nu <strong>willekeurig</strong> - gegenereerd worden!<br><br> Omdat de hub vanaf nu een + ontgrendeld! Dit betekent dat vormen nu <strong>willekeurig</strong> + gegenereerd worden!<br><br> Omdat de HUB vanaf nu een <strong>bepaald aantal vormen per seconden</strong> nodig heeft, Raad ik echt aan een machine te maken die automatisch de juiste - vormen genereert!<br><br> De HUB geeft de vorm die je nodig hebt op - de tweede laag met draden, dus alles wat je moet doen is dat - analyseren en je fabriek dat automatisch laten maken op basis van - dat. + vormen genereert!<br><br> De HUB geeft de vorm die je nodig hebt + door op de draden-laag, dus je hoeft dat alleen te analyseren en je + fabriek dat automatisch te laten maken op basis daarvan. reward_blueprints: title: Blauwdrukken desc: Je kunt nu delen van je fabriek <strong>kopiëren en plakken</strong>! @@ -676,13 +809,13 @@ storyRewards: lopende banden 1! reward_belt_reader: title: Lopende band sensor - desc: Je hebt de <strong>lopende band lezer</strong> vrijgespeeld! Dit gebouw + desc: Je hebt de <strong>lopende band sensor</strong> vrijgespeeld! Dit gebouw geeft de doorvoer op een lopende band weer.<br><br>Wacht maar tot je kabels vrijspeeld, dan wordt het pas echt interessant! reward_rotater_180: title: Draaier (180 graden) - desc: Je hebt de 180 graden <strong>draaier</strong> vrijgespeeld! - Hiermee kun - je een item op de band 180 graden draaien! + desc: Je hebt de <strong>180 graden draaier</strong> vrijgespeeld! - Hiermee kun + je een item op de lopende band 180 graden draaien! reward_display: title: Scherm desc: "Je hebt het <strong>scherm</strong> ontgrendeld - Verbind een signaal met @@ -691,8 +824,8 @@ storyRewards: Probeer het te tonen op een scherm!" reward_constant_signal: title: Constant Signaal - desc: Je hebt het <strong>constante signaal</strong> vrijgespeeld op de kabel - dimensie! Dit gebouw is handig in samenwerking met <strong>item + desc: Je hebt het <strong>constante signaal</strong> vrijgespeeld op de draden + laag! Dit gebouw is handig in samenwerking met <strong>item filters</strong>.<br><br> Het constante signaal kan een <strong>vorm</strong>, <strong>kleur</strong> of <strong>boolean</strong> (1/0) zijn. @@ -702,26 +835,26 @@ storyRewards: je hier nog niet zo vrolijk van, maar eigenlijk zijn ze heel erg handig!<br><br> Met logische poorten kun je AND, OR en XOR operaties uitvoeren.<br><br> Als bonus krijg je ook nog een - <strong>transistor</strong> van mij! + <strong>transistor</strong> van me! reward_virtual_processing: title: Virtuele verwerking desc: Ik heb juist een hele hoop nieuwe gebouwen toegevoegd die je toetstaan om <strong>het process van vormen te stimuleren</strong>!<br><br> Je - kan nu de knipper, draaier, stapelaar en meer op de dradenlaag - stimuleren! Met dit heb je nu 3 opties om verder te gaan met het + kunt nu de knipper, draaier, stapelaar en meer op de dradenlaag + stimuleren! Daarmee heb je nu 3 opties om verder te gaan met het spel:<br><br> - Bouw een <strong>automatische fabriek</strong> om - eender welke mogelijke vorm te maken gebraagd door de HUB (Ik raad - aan dit te proberen!).<br><br> - Bouw iets cool met draden.<br><br> + elke mogelijke vorm te maken gevraagd door de HUB (Ik raad aan dit + te proberen!).<br><br> - Bouw iets cool met de draden-laag.<br><br> - Ga verder met normaal spelen.<br><br> Wat je ook kiest, onthoud - dat je plezier hoort te hebben! + dat je plezier blijft hebben! reward_wires_painter_and_levers: title: Wires & Quad Painter - desc: "Je hebt juist de <strong>draden laag</strong> ontgrendeld: Het is een + desc: "Je hebt juist de <strong>draden-laag</strong> ontgrendeld: Het is een aparte laag boven op de huidige laag en introduceert heel veel - nieuwe manieren om te spelen!<br><br> Voor het begin heb ik voor jou + nieuwe manieren om te spelen!<br><br> Aan het begin heb ik voor jou de <strong>Quad Painter</strong> ontgrendeld - Verbind de gleuf - waarin je wilt verven op de draden laag!<br><br> Om over te - schakelen naar de draden laag, Duw op <strong>E</strong>. <br><br> + waarin je wilt verven op de draden-laag!<br><br> Om over te + schakelen naar de draden-laag, Druk op <strong>E</strong>. <br><br> PS: <strong>Zet hints aan</strong> in de instellingen om de draden tutorial te activeren!" reward_filter: @@ -748,7 +881,7 @@ settings: labels: uiScale: title: Interface-schaal - description: Veranderd de grootte van de gebruikersinterface. De interface + description: Verandert de grootte van de gebruikersinterface. De interface schaalt nog steeds gebaseerd op de resolutie van je apparaat, maar deze optie heeft invloed op de hoeveelheid schaling. scales: @@ -759,7 +892,7 @@ settings: huge: Ultragroot scrollWheelSensitivity: title: Zoom-gevoeligheid - description: Veranderd hoe gevoelig het zoomen is (muiswiel of trackpad). + description: Verandert hoe gevoelig het zoomen is (muiswiel of trackpad). sensitivity: super_slow: Super langzaam slow: Langzaam @@ -804,7 +937,7 @@ settings: gebruikt worden om de instap in het spel makkelijker te maken. movementSpeed: title: Bewegingssnelheid - description: Veranderd hoe snel het beeld beweegt wanneer je het toetsenbord + description: Verandert hoe snel het beeld beweegt wanneer je het toetsenbord gebruikt. speeds: super_slow: Super langzaam @@ -824,7 +957,7 @@ settings: zodat de tekst makkelijker te lezen is. autosaveInterval: title: Autosave Interval - description: Bepaalt hoe vaak het spel automatisch opslaat. Je kan het hier ook + description: Bepaalt hoe vaak het spel automatisch opslaat. Je kunt het hier ook volledig mee uitschakelen. intervals: one_minute: 1 Minuut @@ -842,7 +975,7 @@ settings: description: Schakelt de waarschuwing uit die wordt weergegeven wanneer je meer dan 100 dingen probeert te knippen/verwijderen. enableColorBlindHelper: - title: Kleurenblindmodus + title: Kleurenblind-modus description: Schakelt verschillende hulpmiddelen in zodat je het spel alsnog kunt spelen wanneer je kleurenblind bent. rotationByBuilding: @@ -857,8 +990,8 @@ settings: title: Muziekvolume description: Stel het volume voor muziek in. lowQualityMapResources: - title: Lage kwaliteit van resources - description: Versimpeldde resources op de wereld wanneer ingezoomd om de + title: Lage kwaliteit van uiterlijk + description: Versimpelt het uiterlijk op de wereld wanneer ingezoomd om de performance te verbeteren. Het lijkt ook opgeruimder, dus probeer het zelf een keertje uit! disableTileGrid: @@ -885,9 +1018,9 @@ settings: met de pipet boven het vakje van een resource staat. simplifiedBelts: title: Versimpelde lopende banden - description: Toont geen items op de band tenzij je over de lopende band beweegt - met je muis. De functie wordt niet aangeraden tenzij het qua - performance echt niet anders kan! + description: Toont geen items op de lopende band tenzij je over de lopende band + beweegt met je muis. De functie wordt niet aangeraden tenzij het + wat je computer betreft echt niet anders kan! enableMousePan: title: Schakel bewegen met muis in description: Schakel deze functie in om met je muis het veld te kunnen bewegen. @@ -901,7 +1034,12 @@ settings: title: Kaartbronnen schaal description: Controleert de grootte van de vormen op het map overzicht (wanneer je uitzoomt). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Sneltoetsen hint: "Tip: Maak gebruik van CTRL, SHIFT en ALT! Hiermee kun je dingen anders en @@ -922,7 +1060,7 @@ keybindings: mapMoveRight: Beweeg naar rechts mapMoveDown: Beweeg omlaag mapMoveLeft: Beweeg naar links - centerMap: Ga naar het midden van het speelveld + centerMap: Ga naar het midden van de wereld mapZoomIn: Zoom in mapZoomOut: Zoom uit createMarker: Plaats een markering @@ -969,16 +1107,21 @@ keybindings: wire_tunnel: Kabel kruising display: Scherm reader: Lopende band lezer - virtual_processor: Virtuele Snijder + virtual_processor: Virtuele Knipper transistor: Transistor analyzer: Vorm Analyse comparator: Vergelijk - item_producer: Item Producent (Sandbox) + item_producer: Voorwerp Producent (Sandbox) copyWireValue: "Kabels: Kopieer waarde onder cursor" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: "Rotate: Wijs omhoog" + rotateToDown: "Rotate: Wijs omlaag" + rotateToRight: "Rotate: Wijs naar rechts" + rotateToLeft: "Rotate: Wijs naar links" + constant_producer: Constante Producent + goal_acceptor: Ontvanger + block: Blokkade + massSelectClear: Lopende banden leeg maken + showShapeTooltip: Show shape output tooltip about: title: Over dit spel body: >- @@ -1004,79 +1147,164 @@ demo: exportingBase: Exporteer volledige basis als afbeelding settingNotAvailable: Niet beschikbaar in de demo. tips: - - De hub accepteert elke vorm van invoer, niet alleen de huidige vorm! - - Zorg ervoor dat uw fabrieken modulair zijn - het loont! - - Bouw niet te dicht bij de hub, anders wordt het een enorme chaos! - - Als het stapelen niet werkt, probeer dan de ingangen om te wisselen. - - U kunt de richting van de lopende band planner wijzigen door op <b>R</b> + - De HUB accepteert elke vorm van invoer, niet alleen de huidige vorm! + - Zorg ervoor dat je fabrieken modulair zijn - het loont! + - Bouw niet te dicht bij de HUB, anders wordt het een enorme chaos! + - Als het stapelen niet werkt, probeer dan de invoeren om te wisselen. + - Je kunt de richting van de lopende band planner wijzigen door op <b>R</b> te drukken. - - Door <b> CTRL </b> ingedrukt te houden, kunnen lopende banden worden + - Door <b>CTRL</b> ingedrukt te houden, kunnen lopende banden worden gesleept zonder automatische oriëntatie. - - Verhoudingen blijven hetzelfde, zolang alle upgrades zich op hetzelfde - niveau bevinden. + - Verhoudingen van gebouw-snelheden blijven hetzelfde, zolang alle upgrades + zich op hetzelfde niveau bevinden. - Opeenvolgende uitvoering is efficiënter dan parallele uitvoering. - Je ontgrendelt later in het spel meer varianten van gebouwen! - - U kunt <b>T</b> gebruiken om tussen verschillende varianten te schakelen. + - Je kunt <b>T</b> gebruiken om tussen verschillende varianten te schakelen. - Symmetrie is de sleutel! - Je kunt verschillende tunnels weven. - Probeer compacte fabrieken te bouwen - het loont! - - De schilder heeft een gespiegelde variant die u kunt selecteren met + - De schilder heeft een gespiegelde variant die je kunt selecteren met <b>T</b> - Met de juiste bouwverhoudingen wordt de efficiëntie gemaximaliseerd. - - Op het maximale niveau vullen 5 ontginners een enkele band. + - Op het maximale niveau vullen 5 ontginners één lopende band. - Vergeet tunnels niet! - - U hoeft de items niet gelijkmatig te verdelen voor volledige efficiëntie. - - Als u <b>SHIFT</b> ingedrukt houdt tijdens het bouwen van lopende banden, + - Je hoeft de items niet gelijkmatig te verdelen voor volledige efficiëntie. + - Als je <b>SHIFT</b> ingedrukt houdt tijdens het bouwen van lopende banden, wordt de planner geactiveerd, zodat je gemakkelijk lange rijen kunt plaatsen. - - Snijders snijden altijd verticaal, ongeacht hun oriëntatie. - - Meng alle drie de kleuren om wit te krijgen. + - Knippers knippen altijd verticaal, ongeacht hun oriëntatie. - De opslagbuffer geeft prioriteit aan de eerste uitvoer. - Investeer tijd om herhaalbare ontwerpen te maken - het is het waard! - - Door <b>SHIFT</b> ingedrukt te houden, kunnen meerdere gebouwen worden - geplaatst. - - U kunt <b>ALT</b> ingedrukt houden om de richting van de geplaatste banden - om te keren. - - Efficiëntie is de sleutel! - - Vormontginningen die verder van de hub verwijderd zijn, zijn complexer. + - Invest time to build repeatable designs - it's worth it! + - Je kunt <b>ALT</b> ingedrukt houden om de richting van de geplaatste + lopende banden om te keren. + - You can hold <b>ALT</b> to invert the direction of placed belts. + - Vormontginningen die verder van de HUB verwijderd zijn, zijn complexer. - Machines hebben een beperkte snelheid, verdeel ze voor maximale efficiëntie. - - Gebruik verdelers om uw efficiëntie te maximaliseren. - - Organisatie is belangrijk. Probeer de transportbanden niet te veel over te + - Gebruik verdelers om je efficiëntie te maximaliseren. + - Organisatie is belangrijk. Probeer de lopende banden niet te veel over te steken. - Plan van tevoren, anders wordt het een enorme chaos! - - Verwijder uw oude fabrieken niet! Je hebt ze nodig om upgrades te + - Verwijder je oude fabrieken niet! Je hebt ze nodig om upgrades te ontgrendelen. - Probeer in je eentje level 20 te verslaan voordat je hulp zoekt! - - Maak de dingen niet ingewikkeld, probeer eenvoudig te blijven en u zult + - Maak de dingen niet ingewikkeld, probeer eenvoudig te blijven en je zult ver komen. - - Mogelijk moet u later in het spel fabrieken hergebruiken. Plan uw + - Mogelijk zul je later in het spel fabrieken moeten hergebruiken. Plan je fabrieken zodat ze herbruikbaar zijn. - - Soms kunt u een gewenste vorm op de kaart vinden zonder deze met + - Soms kun je een gewenste vorm op de kaart vinden zonder deze met stapelaars te maken. - - Volle windmolens / vuurwielen kunnen nooit op natuurlijke wijze spawnen. - - Kleur uw vormen voordat u ze snijdt voor maximale efficiëntie. + - Volle windmolens kunnen nooit op natuurlijke wijze spawnen. + - Kleur je vormen voordat je ze knipt voor maximale efficiëntie. - Bij modules is ruimte slechts een beleving; een zorg voor sterfelijke mannen. - Maak een aparte blueprint fabriek. Ze zijn belangrijk voor modules. - - Bekijk de kleurenmixer eens wat beter, en uw vragen worden beantwoord. - - Gebruik <b>CTRL</b> + klik om een gebied te selecteren. - - Te dicht bij de hub bouwen kan latere projecten in de weg staan. - - Het speldpictogram naast elke vorm in de upgradelijst zet deze vast op het - scherm. + - Bekijk de kleurenmixer eens wat beter, en je vragen worden beantwoord. + - Have a closer look at the color mixer, and your questions will be answered. + - Use <b>CTRL</b> + Click to select an area. + - Met het speldpictogram naast elke vorm in de upgradelijst zet deze vast op + het scherm. - Meng alle primaire kleuren door elkaar om wit te maken! - - Je hebt een oneindige kaart, verkramp je fabriek niet, breid uit! + - Je hebt een oneindige wereld, verkramp je fabriek niet, breid uit! - Probeer ook Factorio! Het is mijn favoriete spel. - - De quad-snijder snijdt met de klok mee vanaf de rechterbovenhoek! + - De quad-knipper knipt met de klok mee vanaf de rechterbovenhoek! - Je kunt je savegames downloaden in het hoofdmenu! - - Deze game heeft veel handige sneltoetsen! Bekijk zeker de + - Dit spel heeft veel handige sneltoetsen! Bekijk zeker de instellingenpagina. - - Deze game heeft veel instellingen, bekijk ze zeker! - - De markering naar uw hub heeft een klein kompas om de richting aan te + - Dit spel heeft veel instellingen, bekijk ze zeker! + - De markering naar je HUB heeft een klein kompas om de richting aan te geven! - - Om de banden leeg te maken, knipt u het gebied af en plakt u het op - dezelfde locatie. - - Druk op F4 om uw FPS en Tick Rate weer te geven. + - Om de lopende banden leeg te maken, kun je een gebied kopiëren en plakken + op dezelfde locatie. + - Druk op F4 om je FPS en Tick Rate weer te geven. - Druk twee keer op F4 om de tegel van je muis en camera weer te geven. - Je kan aan de linkerkant op een vastgezette vorm klikken om deze los te maken. + - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Spelen + edit: Bewerken + title: Puzzel Modus + createPuzzle: Puzzel Maken + loadPuzzle: Laden + reviewPuzzle: Beoordeel en publiceer + validatingPuzzle: Puzzel Valideren + submittingPuzzle: Puzzel Indienen + noPuzzles: Er zijn momenteel geen puzzels in deze sectie. + dlcHint: Heb je de DLC al gekocht? Zorg ervoor dat het is geactiveerd door met + de rechtermuisknop op shapez.io in uw bibliotheek te klikken, + Eigenschappen > DLC's te selecteren. + categories: + levels: Levels + new: Nieuw + top-rated: Best Beoordeeld + mine: Mijn Puzzels + easy: Makkelijk + hard: Moeilijk + completed: Voltooid + medium: Medium + official: Officieel + trending: Trending vandaag + trending-weekly: Trending wekelijks + categories: Categorieën + difficulties: Op Moeilijkheidsgraad + account: Mijn Puzzels + search: Zoeken + validation: + title: Ongeldige Puzzel + noProducers: Plaats alstublieft een Constante Producent! + noGoalAcceptors: Plaats alstublieft een Ontvanger! + goalAcceptorNoItem: Een of meer Ontvangers hebben nog geen item toegewezen. Geef + ze een vorm om een doel te stellen. + goalAcceptorRateNotMet: Een of meerdere Ontvangers krijgen niet genoeg items. + Zorg ervoor dat de indicatoren groen zijn voor alle acceptanten. + buildingOutOfBounds: Een of meer gebouwen bevinden zich buiten het bebouwbare + gebied. Vergroot het gebied of verwijder ze. + autoComplete: Je puzzel voltooit zichzelf automatisch! Zorg ervoor dat je + Constante Producenten niet rechtstreeks aan je Ontvangers leveren. + difficulties: + easy: Makkelijk + medium: Medium + hard: Moeilijk + unknown: Unrated + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Je voert je handelingen te vaak uit. Wacht alstublieft even. + invalid-api-key: Kan niet communiceren met de servers, probeer alstublieft het + spel te updaten/herstarten (ongeldige API-sleutel). + unauthorized: Kan niet communiceren met de servers, probeer alstublieft het spel + te updaten/herstarten (Onbevoegd). + bad-token: Kan niet communiceren met de servers, probeer alstublieft het spel te + updaten/herstarten (Ongeldige Token). + bad-id: Ongeldige puzzel-ID. + not-found: De opgegeven puzzel is niet gevonden. + bad-category: De opgegeven categorie is niet gevonden. + bad-short-key: De opgegeven vorm sleutel is ongeldig. + profane-title: Je puzzel titel bevat groffe woorden. + bad-title-too-many-spaces: Je puzzel titel is te kort. + bad-shape-key-in-emitter: Een Ontvanger heeft een ongeldig item. + bad-shape-key-in-goal: Een Constante Producent heeft een ongeldig item. + no-emitters: Je puzzel heeft geen Constante Producenten. + no-goals: Je puzzel heeft geen Ontvangers. + short-key-already-taken: Deze vorm sleutel is al in gebruik, gebruik een andere. + can-not-report-your-own-puzzle: Je kunt je eigen puzzel niet melden. + bad-payload: Het verzoek bevat ongeldige gegevens. + bad-building-placement: Je puzzel bevat ongeldig geplaatste gebouwen. + timeout: Het verzoek is verlopen. + too-many-likes-already: De puzzel heeft al te veel likes. Als je het nog steeds + wilt verwijderen, neem dan contact op support@shapez.io! + no-permission: Je bent niet gemachtigd om deze actie uit te voeren. diff --git a/translations/base-no.yaml b/translations/base-no.yaml index 22679991..0f79e24b 100644 --- a/translations/base-no.yaml +++ b/translations/base-no.yaml @@ -14,14 +14,14 @@ steamPage: Mens du kun produserer former i starten må du fargelegge de senere - for å gjøre dette må du hente ut og blande farger! Ved å kjøpe spillet på Steam får du tilgang til fullversjonen, men du kan også spille en demo på shapez.io først og bestemme deg senere! - what_others_say: What people say about shapez.io - nothernlion_comment: This game is great - I'm having a wonderful time playing, - and time has flown by. - notch_comment: Oh crap. I really should sleep, but I think I just figured out - how to make a computer in shapez.io - steam_review_comment: This game has stolen my life and I don't want it back. - Very chill factory game that won't let me stop making my lines more - efficient. + what_others_say: Hva sier andre om shapez.io + nothernlion_comment: Dette er et fantastisk spill - Jeg storkoser meg når jeg + spiller det, og tiden bare flyr avgårde. + notch_comment: Oops. Jeg burde egentlig sove, men jeg tror jeg nettop fant ut + hvordan man lager en PC i shapez.io + steam_review_comment: Dette spillet har sjålet livet mitt, og jeg vil ikke ha + det tilbake. Veldig avslappende fabrikkspill som ikke stopper meg fra å + lage båndene mere effektive. global: loading: Laster error: Feil @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: MELLOMROM + loggingIn: Logger inn demoBanners: title: Demo Versjon intro: Skaff deg frittstående versjon for å åpne alle funksjoner! @@ -72,7 +73,13 @@ mainMenu: newGame: Nytt Spill madeBy: Laget av <author-link> subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Ingen Navn + puzzleMode: Puzzle Modus + back: Tilbake + puzzleDlcText: Liker du å bygge kompate og optimaliserte fabrikker? Skaff deg + Puzzle tilleggspakken nå på Steam for mere moro! + puzzleDlcWishlist: Legg i ønskeliste nå! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -86,6 +93,9 @@ dialogs: viewUpdate: Vis Oppdatering showUpgrades: Vis Oppgraderinger showKeybindings: Se Hurtigtaster + retry: Prøv på nytt + continue: Fortsett + playOffline: Spill Offline importSavegameError: title: Importeringsfeil text: "Kunne ikke importere lagringsfilen:" @@ -97,9 +107,8 @@ dialogs: text: "Kunne ikke laste inn lagringsfilen:" confirmSavegameDelete: title: Bekreft sletting - text: Are you sure you want to delete the following game?<br><br> - '<savegameName>' at level <savegameLevel><br><br> This can not be - undone! + text: Er du sikker på at du vil slette følgende spill?<br><br> '<savegameName>' + på nivå <savegameLevel><br><br> Handlinge kan ikke reversjeres! savegameDeletionError: title: Kunne ikke slette text: "Kunne ikke slette lagringsfilen:" @@ -155,8 +164,8 @@ dialogs: samlebånd.<br>" createMarker: title: Ny Markør - desc: Give it a meaningful name, you can also include a <strong>short - key</strong> of a shape (Which you can generate <link>here</link>) + desc: Gi den et meningsfult navn, du kan også inkludere <strong>korte + koder</strong> av en form (Som du kan generere <link>her</link>) titleEdit: Rediger markør markerDemoLimit: desc: Du kan kun ha to markører i demoverjsonen. Skaff deg den frittstående @@ -171,21 +180,86 @@ dialogs: desc: Du har ikke råd til å lime inn dette området! er du sikker på at du vil klippe det ut? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the <strong>short key</strong> of a shape (Which you - can generate <link>here</link>) + title: Velg Signal + descItems: "Velg en forhåndsvalgt gjenstand:" + descShortKey: ... eller skriv inn <strong>korte koden</strong> av en form (Som + du kan generere <link>her</link>) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Bytt Spillnavn + desc: Du kan bytte navn på ditt lagrede spill her. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Introduksjon tilgjengelig + desc: Det er en introduksjonsvideo tilgjengelig for dette nivået! Ønsker du å ta + en titt? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Introduksjon tilgjengelig + desc: Det er en introduksjonsvideo tilgjengelig, men den er kun tilgjengelig på + Engelsk. Ønsker du å ta en titt? + editConstantProducer: + title: Velg Gjenstand + puzzleLoadFailed: + title: Puslespill feilet å laste inn + desc: "Beklageligvis, kunne ikke puslespillet lastes inn:" + submitPuzzle: + title: Send inn Puslespill + descName: "Gi ditt puslespill et navn:" + descIcon: "Vennligst skriv en kort, unik gjenkjenner, som vil bli vist som et + ikon av ditt brett (Du kan lage dem <link>her</link>, eller velge en + av de tilfeldigve genererte nedenfor):" + placeholderName: Puslespilltittel + puzzleResizeBadBuildings: + title: Omgjøring av størrelse ikke mulig + desc: Du kan ikke gjøre sonen noe mindre, for da vil noen bygninger være utenfor + sonen. + puzzleLoadError: + title: Feil i puslespillet + desc: "Puslespillet kunne ikke laste inn:" + offlineMode: + title: Offline Modus + desc: Fikk ikke kontakt med serveren, så spillet må kjøres i offline modus. Sørg + for at du har en fungerende internett tilkobling. + puzzleDownloadError: + title: Nedlastningsfeil + desc: "Kunne ikke laste ned puslespillet:" + puzzleSubmitError: + title: Innsendingsfeil + desc: "Kunne ikke sende inn puslespillet:" + puzzleSubmitOk: + title: Puslespill sendt inn + desc: Gratulerer! Ditt puslespill har blitt publisert og kan nå bli spilt av + andre. Du kan finne den under "Mine puslespill" seksjonen. + puzzleCreateOffline: + title: Offline Modus + desc: Siden du er frakoblet, så kan du ikke lagre og/eller publisere dine + puslespill. Ønsker du å fortsette? + puzzlePlayRegularRecommendation: + title: Anbefalinger + desc: Jeg anbefaler på det <strong>sterkeste</strong> å spille hovedspillet til + nivå 12 før du prøver Puzzle tillegspakken, ellers kan du oppleve + mekanikk som du ikke har prøvd før. Ønsker du å fortsette? + puzzleShare: + title: Kort kode kopiert + desc: Korte koden av puslespillet (<key>) har blitt kopiert til din + utklippstavle! Den kan skrives inn i puslespillmenyen for å få + tilgang til puslespillet. + puzzleReport: + title: Rapporter Puslespill + options: + profane: Vulgært + unsolvable: Ikke løsbart + trolling: Trolling + puzzleReportComplete: + title: Takk for din tilbakemelding! + desc: Puslespillet har blitt markert. + puzzleReportError: + title: Kunne ikke rapportere + desc: "Din rapport kunne ikke prosesseres:" + puzzleLoadShortKey: + title: Skriv inn kort kode + desc: Skriv inn korte koden til puslespillet for å laste den inn. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Beveg @@ -207,9 +281,10 @@ ingame: clearSelection: Fjern Valgte pipette: Pipette switchLayers: Bytt lag + clearBelts: Tøm belter buildingPlacement: cycleBuildingVariants: Trykk <key> for å veksle mellom variantene. - hotkeyLabel: "Hotkey: <key>" + hotkeyLabel: "Hurtigtast: <key>" infoTexts: speed: Hastighet range: Lengde @@ -226,7 +301,7 @@ ingame: notifications: newUpgrade: En ny oppgradering er tilgjengelig! gameSaved: Spillet ditt er lagret. - freeplayLevelComplete: Level <level> has been completed! + freeplayLevelComplete: Nivå <level> har blitt løst! shop: title: Oppgraderinger buttonUnlock: Oppgrader @@ -249,7 +324,7 @@ ingame: shapesDisplayUnits: second: <shapes> / s minute: <shapes> / m - hour: <shapes> / h + hour: <shapes> / t settingsMenu: playtime: Spilletid buildingsPlaced: Bygninger @@ -280,30 +355,30 @@ ingame: og belter for å nå målet raskere.<br><br>Tips: Hold <strong>SHIFT</strong> for å plassere flere utdragere, og bruk <strong>R</strong> for å rotere dem." - 2_1_place_cutter: "Now place a <strong>Cutter</strong> to cut the circles in two - halves!<br><br> PS: The cutter always cuts from <strong>top to - bottom</strong> regardless of its orientation." - 2_2_place_trash: The cutter can <strong>clog and stall</strong>!<br><br> Use a - <strong>trash</strong> to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place <strong>2 more cutters</strong> to speed - up this slow process!<br><br> PS: Use the <strong>0-9 - hotkeys</strong> to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! <strong>Build 4 - extractors</strong> and connect them to the hub.<br><br> PS: - Hold <strong>SHIFT</strong> while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the <strong>quad painter</strong> and get some - <strong>circles</strong>, <strong>white</strong> and - <strong>red</strong> color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - <strong>E</strong>!<br><br> Then <strong>connect all four - inputs</strong> of the painter with cables! - 21_3_place_button: Awesome! Now place a <strong>Switch</strong> and connect it - with wires! - 21_4_press_button: "Press the switch to make it <strong>emit a truthy - signal</strong> and thus activate the painter.<br><br> PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Nå plasser en <strong>kutter</strong> for å kutte sirklene i + to halve biter!<br><br> NB: Kutteren kutter alltid fra + <strong>toppen til bunnen</strong> uansett orienteringen." + 2_2_place_trash: Kutteren kan <strong>tette og lage kø</strong>!<br><br> Bruk en + <strong>søppelbøtte</strong> for å bli kvitt nåværende (!) ikke + nødvendige rester. + 2_3_more_cutters: "Godt jobba! Nå plasser <strong>2 flere kuttere</strong> for å + øke hastigheten på denne prosessen!<br><br> NB: Bruk <strong>0-9 + hurtigtastene</strong> for å velge bygning raskere!" + 3_1_rectangles: "Nå la oss fremvinne noen rektangler! <strong>Bygg 4 + utvinnere</strong> og koble de til hovedbygningen.<br><br> NB: + Hold inne <strong>SHIFT</strong> mens du drar beltet for å + aktivere belteplanleggeren!" + 21_1_place_quad_painter: Plasser <strong>4veis maleren</strong> og få noen + <strong>sirkler</strong>, <strong>hvite</strong> og + <strong>rød</strong> farget! + 21_2_switch_to_wires: Bytt til kabelnivået ved å trykke + <strong>E</strong>!<br><br> Deretter <strong>koble alle fire + inngangene</strong> til 4veis malerene med kabler! + 21_3_place_button: Flott! Nå plasser en <strong>bryter</strong> og koble den med + kabler! + 21_4_press_button: "Trykk på bryteren for å <strong>utgi et gyldig + signal</strong> som deretter aktiverer malerene.<br><br> NB: Du + må ikke koble til alle inngangene! Prøv bare med to." colors: red: Rød green: Grønn @@ -317,43 +392,85 @@ ingame: shapeViewer: title: Lag empty: Tom - copyKey: Copy Key + copyKey: Kopier Key connectedMiners: - one_miner: 1 Miner - n_miners: <amount> Miners - limited_items: Limited to <max_throughput> + one_miner: 1 Utgraver + n_miners: <amount> Utgravere + limited_items: Begrenset til <max_throughput> watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Demo versjon + desc: Trykk her for å se fordelene med Steam verjsonen! + get_on_steam: Få på Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Få fullversjonen! + no_thanks: Nei takk! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Nye Nivåer + desc: Tilsvarer totalt 26 nivåer! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Nye Bygninger + desc: Fullautomatiser din fabrikk! upgrades: - title: ∞ Upgrade Tiers - desc: This demo version has only 5! + title: ∞ Oppgraderingsnivåer + desc: Demoversjonen har kun 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Markører + desc: Aldri gå deg vill i din fabrikk! wires: - title: Wires - desc: An entirely new dimension! + title: Kabler + desc: En helt ny dimensjon! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Mørkmodus + desc: Slutt å skade øynene dine! support: - title: Support me - desc: I develop it in my spare time! + title: Støtt meg + desc: Jeg utvikler dette på min fritid! achievements: - title: Achievements - desc: Hunt them all! + title: Prestasjoner + desc: Skaff dem alle! + puzzleEditorSettings: + zoneTitle: Sone + zoneWidth: Bredde + zoneHeight: Høyde + trimZone: Kamtsone + clearItems: Fjern gjenstander + share: Del + report: Rapporter + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puslespill lager + instructions: + - 1. Plasser <strong>konstante produseringer</strong> for å gi + former og farger til spilleren + - 2. Bygg en eller flere former du vil at spilleren skal bygge + senere og lever det til en eller fler <strong>Mål mottak</strong> + - 3. Når et målmottak mottar en form over en viss periode, vil den + <strong>lagres som et mål</strong> som spilleren må produsere + senere (Indikert av <strong>grønne skiltet</strong>). + - 4. Trykk <strong>låse knappen</strong> på en bygning for å + deaktivere den. + - 5. Så fort du trykker gjennomgå, vil ditt puslespill bli validert + og du kan publisere det. + - 6. Når det er publisert, <strong>vil alle bygningene bli + fjernet</strong> utenom produseringene og mål mottakene - Det er + delen som spilleren skal finne ut av dem selv, tross alt :) + puzzleCompletion: + title: Puslespill Fullført! + titleLike: "Trykk på hjertet hvis du likte puslespillet:" + titleRating: Hvor vanskelig syntes du det var? + titleRatingDesc: Ditt omdømme vil hjelpe hjelpe meg med å gi deg bedre forslag i + fremtiden + continueBtn: Fortsett å spill + menuBtn: Meny + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Laget av + shortKey: Kort Kode + rating: Vanskelighetsscore + averageDuration: Gj. Varighet + completionRate: Fullføringsratio shopUpgrades: belt: name: Belter, Distributører & Tunneler @@ -372,7 +489,7 @@ buildings: deliver: Lever toUnlock: for å låse opp levelShortcut: nivå - endOfDemo: End of Demo + endOfDemo: Slutt på demoen belt: default: name: Samlebånd @@ -413,8 +530,8 @@ buildings: name: Roter (Mot klokken) description: Roter former mot klokken, 90 grader. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Roter (180) + description: Roter former med 180 grader. stacker: default: name: Stabler @@ -435,9 +552,8 @@ buildings: inngang. quad: name: Maler (Firedobbel) - description: Allows you to color each quadrant of the shape individually. Only - slots with a <strong>truthy signal</strong> on the wires layer - will be painted! + description: Lar deg male hver del av en form individuelt. Kun innganger med et + <strong>ekte signal</strong> på kabel nivået vil bli malt! mirrored: name: Maler description: Maler hele formen på venstre inngang med fargen fra øverste @@ -452,128 +568,141 @@ buildings: name: Energikabel description: Lar deg transportere energi. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Kabel + description: Overfører signaler, som kan være gjenstander, farger eller + booleanere (1 / 0). Forskjellige fargede kabler kobler seg ikke + sammen. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Balanserer + description: Multifunksjon - Distribuerer inngangene på utgangene jevnt. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Balanserer (kompakt) + description: Slår sammen to belter til ett. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Balanserer (kompakt) + description: Slår sammen to belter til ett. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Splitter (kompakt) + description: Deler ett belte i to. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Splitter (kompakt) + description: Deler ett belte i to. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Lager + description: Lagre overflødige gjenstander, opp til en viss antall. Prioriterer + venstre utgang og kan bli brukt som en overløpsventil. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Kabelkryss + description: Tillater å krysse to kabler uten å koble de sammen. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Konstant Signal + description: Utgir et konstant signal, som enten kan være en form, farge eller + booleaner (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Bryter + description: Kan skru av/på et booleaner signal (1 / 0) på kabel nivået, som + igjen kan brukes for å kontrolere for eksempel filtrering. logic_gate: default: name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + description: Utgir en booleaner "1" hvis begge innganger er sanne. (Sanne betyr + form, farge eller booleaner "1") not: name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + description: Utgir en booleaner "1" hvis begge innganger ikke er sanne. (Sanne + betyr form, farge eller booleaner "1") xor: name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + description: Utgir en booleaner "1" hvis en av inngangene er sanne, men ikke + begge. (Sanne betyr form, farge eller booleaner "1") or: name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + description: Utgir en booleaner "1" hvis en av inngangene er sanne. (Sanne betyr + form, farge eller booleaner "1") transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Transistorer + description: Vidresender nedre inngang om sideinngangen er sann (en form, farge + eller "1"). mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Transistorer + description: Vidresender nedre inngang om sideinngangen er sann (en form, farge + eller "1"). filter: default: name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + description: Koble til et signal for å rute alle tilsvarende gjenstander til + toppen og gjenværende til høyre. Kan bli kontroller med + booleaner signaler også. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Skjerm + description: Koble til et signal for å vise det på skjermen - Det kan være en + form, farge eller booleaner. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Belteleser + description: Tillater å telle gjennomsnittelig flyt på beltet. Utgir det siste + leste gjenstanden på kabel nivået (når tilgjengelig). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Form Analyserer + description: Analyserer øverst i høyre av det laveste nivået på en form og + returnerer dens form og farge. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Sammenlign + description: Returnerer booleaner "1" hvis begge signalene er like. Kan + sammenligne former, gjenstander og booleaner. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Virituell Kutter + description: Kutt former virituelt i to deler. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Virituell Roterer + description: Virituelt roterer formen, både med klokken og mot klokken. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Virituell Avstabler + description: Virituelt separerer øverste nivået på høyre utgang og gjenværende + nede på venstre. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Virituell Stabler + description: Virituelt stabler formen på høyre med den på venstre. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Virituell Fargelegger + description: Virituelt fargelegger formen fra nederste ingang med formen på + høyre inngang. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Gjenstands lager + description: Tilgjengelig kun i in sandbox modus, returnerer det gitte signalet + fra kabel nivået på det vanlige nivået. + constant_producer: + default: + name: Konstante Produseringer + description: Produserer konstant en spesifik form eller farge. + goal_acceptor: + default: + name: Mål Mottaker + description: Lever former til mål mottakeren for å sette dem som et mål. + block: + default: + name: Blokker + description: Lar deg blokkere en rute. storyRewards: reward_cutter_and_trash: title: Kutt Objekter - desc: You just unlocked the <strong>cutter</strong>, which cuts shapes in half - from top to bottom <strong>regardless of its - orientation</strong>!<br><br>Be sure to get rid of the waste, or - otherwise <strong>it will clog and stall</strong> - For this purpose - I have given you the <strong>trash</strong>, which destroys - everything you put into it! + desc: Du åpnet nettop <strong>kutteren</strong>, som kutter former i to fra + toppen til bunnen <strong>uavhengig av dens + orientasjon</strong>!<br><br>Sørg for å bli kvitt søppel, ellers + <strong>vil det samle seg og tette</strong> - For dette formålet så + har jeg gitt deg en <strong>søppelkasse</strong>, som ødelegger alt + du kaster i den! reward_rotater: title: Rotering desc: <strong>Rotereren</strong> har blitt tilgjengelig! Den roterer objekter @@ -596,10 +725,9 @@ storyRewards: bil <strong>til en</strong>. Hvis ikke, blir høyre inngang <strong>plassert over</strong> venstre inngang! reward_splitter: - title: Fordeler/Sammenslåer - desc: You have unlocked a <strong>splitter</strong> variant of the - <strong>balancer</strong> - It accepts one input and splits them - into two! + title: Fordeler + desc: Du har åpnet opp <strong>fordler</strong> varianten av + <strong>balansereren</strong> - Den godtar en inn og deler dem i to! reward_tunnel: title: Tunnel desc: <strong>Tunnelen</strong> har blitt tilgjengelig - Du kan nå transportere @@ -611,10 +739,10 @@ storyRewards: <strong>trykk 'T' for å veksle mellom variantene</strong>! reward_miner_chainable: title: Kjedeutdrager - desc: "You have unlocked the <strong>chained extractor</strong>! It can - <strong>forward its resources</strong> to other extractors so you - can more efficiently extract resources!<br><br> PS: The old - extractor has been replaced in your toolbar now!" + desc: "Du har åpnet <strong>kjedeutdrageren</strong>! Den kan <strong>vidresende + sine ressursser</strong> til andre utdragere så du kan mer effektivt + hente ut ressursser!<br><br> NB: Gamle utdrageren har blitt byttet + ut på din hurtigbar nå!" reward_underground_belt_tier_2: title: Tunnel Nivå II desc: Du har åpnet en ny variant av <strong>tunnelen</strong> - Den har @@ -631,18 +759,19 @@ storyRewards: konsumerer bare en farge istedenfor to! reward_storage: title: Lagringsbuffer - desc: You have unlocked the <strong>storage</strong> building - It allows you to - store items up to a given capacity!<br><br> It priorities the left - output, so you can also use it as an <strong>overflow gate</strong>! + desc: Du har åpnet <strong>lagringsbuffer</strong> bygningen - Den lar deg lagre + gjenstander opp til et gitt antall!<br><br> Den prioriterer venstre + utgangen, så du kan også bruke det som en + <strong>overløpsventil</strong>! reward_freeplay: title: Frispill - desc: You did it! You unlocked the <strong>free-play mode</strong>! This means - that shapes are now <strong>randomly</strong> generated!<br><br> - Since the hub will require a <strong>throughput</strong> from now - on, I highly recommend to build a machine which automatically - delivers the requested shape!<br><br> The HUB outputs the requested - shape on the wires layer, so all you have to do is to analyze it and - automatically configure your factory based on that. + desc: Du klarte det! Du låste opp <strong>frispill modus</strong>! Dette betyr + at former er nå <strong>tilfeldige</strong> generert!<br><br> Siden + hovedbygningen nå krever en <strong>gjennomgang</strong> fra nå av, + anbefaler jeg å bygge en maskin som automatisk leverer ønskede + formen!<br><br> Hovedbygningen utgir den forespurte formen på kabel + nivået, så alt du må gjøre er å analysere det og automatisk + konfigerer din fabrikk basert på det. reward_blueprints: title: Blåkopier desc: Du kan nå <strong>kopiere og lime inn</strong> deler av fabrikken din! @@ -661,78 +790,79 @@ storyRewards: desc: Gratulerer!! Forresten, mer innhold er planlagt for den frittstående versjonen! reward_balancer: - title: Balancer - desc: The multifunctional <strong>balancer</strong> has been unlocked - It can - be used to build bigger factories by <strong>splitting and merging - items</strong> onto multiple belts! + title: Balanserer + desc: Den multifunksjonible <strong>balansereren</strong> har blitt tilgjengelig + - Den kan bli brukt for å bygge større fabrikker ved å <strong>dele + opp og slå sammen gjenstander</strong> på flere belter! reward_merger: - title: Compact Merger - desc: You have unlocked a <strong>merger</strong> variant of the - <strong>balancer</strong> - It accepts two inputs and merges them - into one belt! + title: Kompakt Sammenslåer + desc: Du har åpnet opp en <strong>sammenslåer</strong> variant av + <strong>balansereren</strong> - Den godtar to innganger og slår de + sammen til ett belte! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the <strong>belt reader</strong>! It allows you to - measure the throughput of a belt.<br><br>And wait until you unlock - wires - then it gets really useful! + title: Belte Leser + desc: Du har låst opp <strong>belte leseren</strong>! Den lar deg måle trafikken + på et belte.<br><br>Og vent til du låser opp kabler - da blir den + veldig nyttig! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degrees <strong>rotater</strong>! - It allows - you to rotate a shape by 180 degrees (Surprise! :D) + title: Roterer (180 grader) + desc: Du åpnet opp 180 graders <strong>rotereren</strong>! - Den lar deg rotere + en form 180 grader (Overraskelse! :D) reward_display: - title: Display - desc: "You have unlocked the <strong>Display</strong> - Connect a signal on the - wires layer to visualize it!<br><br> PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + title: Skjerm + desc: "Du har åpnet opp <strong>Skjermen</strong> - Koble til et signal på kabel + nivået for å visualisere det!<br><br> NB: La du merke til belte + leseren og lagringsbygningen utgir siste gjenstanden de så? Prøv å + vis det på en skjerm!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the <strong>constant signal</strong> building on the wires - layer! This is useful to connect it to <strong>item filters</strong> - for example.<br><br> The constant signal can emit a - <strong>shape</strong>, <strong>color</strong> or - <strong>boolean</strong> (1 / 0). + title: Konstant Signal + desc: Du åpnet opp <strong>konstant signal</strong> bygningen på kabel nivået! + Denne er brukbar for å koble til <strong>gjenstandsfilter</strong> + for eksempel.<br><br> Det konstante signalet kan utgi en + <strong>form</strong>, <strong>farge</strong> eller + <strong>booleaner</strong> (1 / 0). reward_logic_gates: title: Logic Gates - desc: You unlocked <strong>logic gates</strong>! You don't have to be excited - about this, but it's actually super cool!<br><br> With those gates - you can now compute AND, OR, XOR and NOT operations.<br><br> As a - bonus on top I also just gave you a <strong>transistor</strong>! + desc: Du åpnet opp <strong>logic gates</strong>! Du trenger ikke være så + overlykkelig for dette, men det er faktisk super kult!<br><br> Med + disse kan du nå utregne AND, OR, XOR og NOT operasjoner.<br><br> Som + en bonus på toppen, ga jeg deg også <strong>transistorer</strong>! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - <strong>simulate the processing of shapes</strong>!<br><br> You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:<br><br> - - Build an <strong>automated machine</strong> to create any possible - shape requested by the HUB (I recommend to try it!).<br><br> - Build - something cool with wires.<br><br> - Continue to play - regulary.<br><br> Whatever you choose, remember to have fun! + title: Virtuell Prosessering + desc: Du fikk nettop en hel del av bygninger som lar deg <strong>simulere + prosessen av former</strong>!<br><br> Du kan nå simulere kutting, + rotering, stabling og mer på kabel nivået! Med dette har du nå tre + muligheter for å fortsette spillet:<br><br> - Bygg en + <strong>automatisert maskin</strong> som lager alle mulige former + forespurt av hovedbygningen (Jeg anbefaler deg å prøve + dette!).<br><br> - Bygg noe kult med kabler.<br><br> - Fortsett å + spill vanlig.<br><br> Hva nå enn du velger, husk å ha det gøy! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the <strong>Wires Layer</strong>: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!<br><br> For the beginning I unlocked you the <strong>Quad - Painter</strong> - Connect the slots you would like to paint with on - the wires layer!<br><br> To switch to the wires layer, press - <strong>E</strong>. <br><br> PS: <strong>Enable hints</strong> in - the settings to activate the wires tutorial!" + title: Kabler & 4veis Fargelegger + desc: "Du åpnet nettop <strong>kabel nivået</strong>: Det er et separat nivå på + toppen av det vanlige som introduserer mye nye mekanismer!<br><br> I + begynnelsen åpnet du <strong>4 veis fargeleggeren</strong> - Koble + til inngangene du vil male med på kabel nivået!<br><br> For å bytte + til kabel nivået, trykk <strong>E</strong>. <br><br> NB: + <strong>Skru på tips</strong> på instillinger for å aktivere kabel + nivå introduksjonen!" reward_filter: - title: Item Filter - desc: You unlocked the <strong>Item Filter</strong>! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.<br><br> You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Gjenstandsfilter + desc: Du åpnet opp <strong>Gjenstandsfilter</strong>! Den vil rute gjenstander + enten til toppen eller høyre utgang avhengig av om de matcher + signalet fra kabel nivået eller ikke.<br><br> Du kan også legge inn + et booleaner signal (1 / 0) for å aktivere eller deaktivere den i + sin helhet. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Slutt på Demo + desc: Du har nådd slutten på demoversjonen! settings: title: Instillinger categories: general: Generelt userInterface: Brukergrensesnitt advanced: Avansert - performance: Performance + performance: Ytelse versionBadges: dev: Utvikling staging: Iscenesettelse @@ -843,56 +973,62 @@ settings: kan være mer komfortabelt hvis du ofte veksler mellom plassering av forskjellige bygninger. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Lyd Volum + description: Sett volumet på lydeffekter musicVolume: - title: Music Volume - description: Set the volume for music + title: Musikk Volum + description: Sett volumet på musikk lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Lavkvalitets Kart Ressursser + description: Simplifiserer fremvisningen av ressursser på kartet når zoomet inn + for å forbedre ytelsen. Det ser også renere ut, så sørg for å + sjekke det ut! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Deaktiver Rutenett + description: Deaktiver rutenettet kan hjelpe på ytelse. Dette vil også få + spillet til å se renere ut! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Fjern musepil ved høyreklikk + description: Skrudd på standard, fjerner hva enn du har ved musen når du + høyreklikker mens du har en bygning valgt for plassering. Hvis + deaktivert, så kan du slette bytninger ved å høyreklikke mens du + plasserer en bytgning. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Lavkvalitets teksturer (Stygt) + description: Bruker lavkvalitets teksturer for å forbedre ytelsen. Dette vil få + spillet til å se veldig sygt ut! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Vis Sektor Rammer + description: Spillet er delt inn i sektorer på 16x16 ruter, hvis denne + instillingen er skrudd på, vil kantene i hver sektor vises. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Velg utdrager på ressurss felt + description: Aktivert standard, velger utdrageren hvis du bruker pipette når du + holder over et ressurss felt. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Simplifiserte Belter (Sygt) + description: Fremviser ikke ting på belter forutenom når du holder musen over + beltet for å forbedre ytelsen. Jeg anbefaler ikke å spille med + dette med mindre du absolutt trenger ytelsen. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Aktiver Musebeveget Kart + description: Lar deg flytte rundt på kartet ved å bevege musen til kanten av + skjermen. Hastigheten avgjøres av Bevegelses Hastighet + instillingen. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Forstørr mot musepekeren + description: Hvis aktivert, vil forstørring skje mot der du har musepekeren + posisjonert, ellers vil det være midt i kjermen. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Kart Ressursser Størrelse + description: Kontrollerer størrelsen på former på kartoversikten (når zoomet + ut). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Hurtigtaster hint: "Tips: Husk å bruke CTRL, SHIFT and ALT! De gir deg flere @@ -951,25 +1087,30 @@ keybindings: menuClose: Lukk meny switchLayers: Bytt lag wire: Energikabel - balancer: Balancer - storage: Storage - constant_signal: Constant Signal + balancer: Balanserer + storage: Lagringsboks + constant_signal: Konstant Signal logic_gate: Logic Gate - lever: Switch (regular) + lever: Bryter (vanlig) filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + wire_tunnel: Kabel Krysser + display: Skjerm + reader: Belte Leser + virtual_processor: Virituell Kutter + transistor: Transistorer + analyzer: Form Analyserer + comparator: Sammenlign + item_producer: Gjenstands Produserer (Sandbox) + copyWireValue: "Kabler: Kopier verdi under musen" + rotateToUp: "Roter: Pek Opp" + rotateToDown: "Roter: Pek Ned" + rotateToRight: "Roter: Pek Høyre" + rotateToLeft: "Roter: Pek Venstre" + constant_producer: Konstant Produserer + goal_acceptor: Mål Mottaker + block: Blokker + massSelectClear: Tøm Belter + showShapeTooltip: Show shape output tooltip about: title: Om dette spillet body: >- @@ -995,63 +1136,153 @@ demo: exportingBase: Eksporter hele basen som bilde settingNotAvailable: Ikke tilgjengelig i demoversjonen. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing <b>R</b>. - - Holding <b>CTRL</b> allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use <b>T</b> to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with <b>T</b> - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding <b>SHIFT</b> will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding <b>CTRL</b> allows to place multiple buildings. - - You can hold <b>ALT</b> to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use <b>CTRL</b> + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Hovedbygningen godtar alle mulige former, ikke kun nåværende form! + - Sørg for at dine fabrikker er modulære - det vil betale for seg selv! + - Ikke bygg for nære hovedbygningen. Ellers vil det bli et stort kaos! + - Hvis stabling ikke funker, prøv å bytt inngangene. + - Du kan veksle mellom belteplanleggerens orienterinv ved å trykke <b>R</b>. + - Hold nede <b>CTRL</b> for å dra belter uten auto orientering. + - Fordelingen forblir det samme, så lenge alle oppgraderingene er på samme + nivå. + - Seriell utføring er mer effektivt enn paralell utføring. + - Du vil låse opp flere varianter av bygninger senere i spillet! + - Du kan bruke <b>T</b> for å bytte mellom forskjellige varianter. + - Symmetri er nøkkelen! + - Du kan veve forskjellige typer av tuneller. + - Prøv å bygg kompate fabrikker - Det vil betale for seg selv! + - Fargeleggeren har en speilvent variant som du kan velge med <b>T</b> + - Å ha riktig forhold mellom bygningsantall vil maksimisere effektiviteten. + - På maks nivå, vil 5 utdragere fylle et eget belte. + - Ikke glem tunneller! + - Du trenger ikke å dele opp gjenstander jent for maks effektivitet. + - Holdt nede <b>SHIFT</b> for å aktivere belte planleggeren, den lar deg + plassere lange linjer med belter veldig lett. + - Kutteren vil alltid kutte vertikalt, uavhengig av orientasjonen. + - For hvit farge, kombiner alle tre fargene. + - Lagringbygningen prioriterer første utgangen. + - Sett av tid til å bygge repeterbare løsninger - det er verdt det! + - Hold nede <b>CTRL</b> for å plassere flere av samme bygning. + - Du kan holde nede <b>ALT</b> for å reversjere plasseringen av plasserte + belter. + - Effektivitet er nøkkelen! + - Form feltene som er lengt unna fra hovedbygget er mer avanserte. + - Bygninger har en begrenset hastighet. Del de opp for maksimum effektivitet. + - Bruk balanserere for å maksimere effektivitet. + - Organisering er viktig. Prøv å ikke kryss belter for mye. + - Planlegg i forveien, ellers vil det bli kaos! + - Ikke fjern dine gamle fabrikker! Du trenger de for å åpne oppgraderinger. + - Prøv å slå nivå 20 på egenhånd før du oppsøker hjelp! + - Ikke overkompliser ting, prøv å gjør det simpelt så kommer du langt. + - Det kan hende at du må gjenbruke fabrikker senere. Planlegg dine fabrikker + til å være gjenbrukbare. + - Noen ganger, kan du finne formen du trenger på kartet uten å lage det med + stablere. + - Fulle vindmøller / pinnehjul finnes ikke naturlig. + - Fargelegg dine former før du kutter de for maks effektivitet. + - Med moduler er plass bare en oppfatning; en bekymring for dødelige + mennesker. + - Lag en separat blueprint fabrikk. De er viktig for moduler. + - Sjekk ut fargeblanderen, og dine spørsmål vil bli besvart. + - Bruk <b>CTRL</b> + Trykk for å velge et område. + - Bygge for nære hovedbygnignen kan sette en stopper for senere prosjekter. + - Tegnestift ikonet ved siden av hver form i oppgraderingslisten låser det + fast til skjermen. + - Bland alle primærfargene sammen for å lage hvis farge! + - Du har et evit kart. Ikke tett sammen fabrikken, utvid! + - Sjekk også ut Factorio! Det er mitt favorittspill. + - 4veis Kutteren kutter med klokken, starter fra øverst i høyre! + - Du kan laste ned dine lagrede spill på hovedmenyen! + - Dette spillet har mange fornuftige hurtigtaster! Sjekk de ut på + instillinger. + - Dette spillet har masse instillinger, sørg for å sjekke de ut! + - Markøren på hjovedbygningen har et lite kompass for å indikere retningen + til den! + - For å tømme belter, kutt området også lim det inn igjen på samme område. + - Trykk F4 for å vise din FPS og Tick Rate. + - Trykk F4 to ganger for å vise ruten til din mus og kamera. + - Du kan trykke på en festet form på venstre for å fjerne festingen. +puzzleMenu: + play: Spill + edit: Endre + title: Puslespillmodus + createPuzzle: Lag Puslespill + loadPuzzle: Last inn + reviewPuzzle: Gjennomgå & Publiser + validatingPuzzle: Validerer Puslespill + submittingPuzzle: Publiserer Puslespill + noPuzzles: Det er for tiden ingen puslespill i denne seksjonen. + categories: + levels: Nivåer + new: Ny + top-rated: Høyest Rangert + mine: Mine Puslespill + easy: Lett + hard: Vanskelig + completed: Fullført + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Ugyldig Puslespill + noProducers: Venligst plasser en Konstant Produserer! + noGoalAcceptors: Vennligst plasser en Mål Mottaker! + goalAcceptorNoItem: En eller flere Mål Mottakere har ikke blitt tildelt en + gjenstand. Lever en form til dem for å sette målet. + goalAcceptorRateNotMet: En eller flere Mål Mottakere får ikke nok gjenstander. + Sørg for at indikatorene er grønn for alle mottakerene. + buildingOutOfBounds: En eller flere bygninger er utenfor det byggbare området. + Enten øk området eller fjern dem. + autoComplete: Ditt puslespill fullførte seg selv automatisk! Sørg for at dine + Konstant Pr Produserere ikke leverer direkte til dine Mål Mottakere. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Du gjør en handling for ofte. Vennligst vent litt. + invalid-api-key: Kunne ikke kommunisere med kjernen, vennligst prøv å + oppdater/start spillet på nytt (Ugyldig Api Nøkkel). + unauthorized: Kunne ikke kommunisere med kjernen, vennligst prøv å + oppdater/start spillet på nytt (Uautorisert). + bad-token: Kunne ikke kommunisere med kjernen, vennligst prøv å oppdater/ start + spillet på nytt (Ugyldig token). + bad-id: Ugyldig Puslespill identifikator. + not-found: Det gitte puslespillet kunne ikke bli funnet. + bad-category: Den gitte kategorien kunne ikke bli funnet. + bad-short-key: Den gitte korte koden er ugyldig. + profane-title: Ditt puslespill sitt navn inneholder stygge ord. + bad-title-too-many-spaces: Ditt puslespill sitt navn er for kort. + bad-shape-key-in-emitter: En Konstant Produserer har en ugyldig gjenstand. + bad-shape-key-in-goal: En Mål Mottaker har en ugyldig gjenstand. + no-emitters: Ditt puslespill inneholder ingen Konstante Produserere. + no-goals: Ditt puslespill inndeholder ingen Mål Mottakere. + short-key-already-taken: Denne korte koden er allerede i bruk, vennligst bruk en annen. + can-not-report-your-own-puzzle: Du kan ikke rapportere ditt eget puslespill. + bad-payload: Forespørselen inneholder ugyldig data. + bad-building-placement: Ditt puslespill inneholder ugyldig plasserte bygninger. + timeout: Forespørselen timet ut. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml index b6e9b2b5..a73dc869 100644 --- a/translations/base-pl.yaml +++ b/translations/base-pl.yaml @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: SPACJA + loggingIn: Logging in demoBanners: title: Wersja demonstracyjna intro: Kup pełną wersję gry, by odblokować więcej funkcji! @@ -72,6 +73,12 @@ mainMenu: madeBy: Gra wykonana przez <author-link> subreddit: Reddit savegameUnnamed: Zapis bez nazwy + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -85,6 +92,9 @@ dialogs: viewUpdate: Zobacz aktualizację showUpgrades: Pokaż ulepszenia showKeybindings: Pokaż Klawiszologię + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Błąd importowania text: "Nie udało się zaimportować twojego zapisu gry:" @@ -187,6 +197,70 @@ dialogs: title: Dostępny tutorial desc: Dla tego poziomu dostępny jest video tutorial w języku angielskim. Chcesz go obejrzeć? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Ruch @@ -208,6 +282,7 @@ ingame: clearSelection: Wyczyść zaznaczenie pipette: Wybierz obiekt z mapy switchLayers: Przełącz warstwy + clearBelts: Clear belts colors: red: Czerwony green: Zielony @@ -356,6 +431,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Taśmociągi, Dystrybutory & Tunele @@ -573,6 +689,18 @@ buildings: name: Producent kształtów description: Dostępne tylko w trybie piaskownicy. Produkuje przedmioty z sygnału danego na warstwie przewodów na główną warstwę. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Przecinanie Kształtów @@ -640,7 +768,7 @@ storyRewards: reward_storage: title: Magazyn desc: Właśnie odblokowałeś <strong>magazyn</strong> - Pozwala na przechowywanie - przedmiotów, do pewnej ilości!<br><br> Prawe wyjście posiada większy + przedmiotów, do pewnej ilości!<br><br> Lewe wyjście posiada większy piorytet, więc może być on użyty jako <strong>brama przepełnieniowa</strong>! reward_freeplay: @@ -902,7 +1030,12 @@ settings: title: Rozmiar mapy zasobów description: Steruje rozmiarem kształtów w przeglądzie mapy (podczas pomniejszenia). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Klawiszologia hint: "Wskazówka: Upewnij się, że wykorzystujesz CTRL, SHIFT i ALT! Pozwalają na @@ -980,6 +1113,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: O Grze body: 'Ta gra jest open-source. Rozwijana jest przez <a @@ -1078,3 +1216,88 @@ tips: - Naciśnij F4, by zobaczyć ilość FPS i tempo ticków. - Naciśnij F4 dwa razy, by zobaczyć kratkę twojej myszy i kamery. - Możesz kliknąć przypięty kształt po lewej stronie, by go odpiąć. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index 79435979..b976e5dc 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -14,10 +14,10 @@ steamPage: Comprar o jogo na Steam te garante acesso à versão completa, mas você pode jogar a versão demo em shapez.io primeiro e decidir depois! what_others_say: O que as pessoas dizem sobre o shapez.io - nothernlion_comment: Este jogo é ótimo - estou me divertindo muito jogando - e o tempo passou voando. - notch_comment: Droga. Eu realmente deveria dormir, mas eu acho que acabei - de descobrir como fazer um computador no shapez.io + nothernlion_comment: Este jogo é ótimo - estou me divertindo muito jogando e o + tempo passou voando. + notch_comment: Droga. Eu realmente deveria dormir, mas eu acho que acabei de + descobrir como fazer um computador no shapez.io steam_review_comment: Este jogo roubou minha vida e eu não a quero de volta. Jogo de fábrica muito descontraído que não me deixa parar de fazer linhas mais eficientes. @@ -52,6 +52,7 @@ global: escape: ESC shift: Shift space: Espaço + loggingIn: Entrando demoBanners: title: Versão Demo intro: Compre a versão completa para desbloquear todos os recursos! @@ -71,6 +72,12 @@ mainMenu: savegameLevel: Nível <x> savegameLevelUnknown: Nível desconhecido savegameUnnamed: Sem nome + puzzleMode: Modo Puzzle + back: Voltar + puzzleDlcText: Você gosta de compactar e otimizar fábricas? Adquira a Puzzle DLC + já disponível na Steam para se divertir ainda mais! + puzzleDlcWishlist: Adicione já a sua lista de desejos! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -84,6 +91,9 @@ dialogs: viewUpdate: Atualizações showUpgrades: Melhorias showKeybindings: Controles + retry: Tentar novamente + continue: Continue + playOffline: Jogar Offline importSavegameError: title: Erro de importação text: "Houve uma falha ao importar seu jogo salvo:" @@ -181,6 +191,72 @@ dialogs: title: Tutorial disponível desc: Existe um tutorial em vídeo para esse nível, mas está disponível apenas em Inglês. Gostaria de assistí-lo? + editConstantProducer: + title: Selecionar Item + puzzleLoadFailed: + title: O carregamento dos desafios falhou + desc: "Infelizmente os desafios não puderam ser carregados:" + submitPuzzle: + title: Enviar desafio + descName: "Dê um nome ao seu desafio:" + descIcon: "Por favor crie um código exclusivo, o qual será o ícone do seu + Desafio (Você pode gera-los <link>aqui</link>, ou escolha um dos + gerados aleatoriamente abaixo):" + placeholderName: Nome do desafio + puzzleResizeBadBuildings: + title: Mudar o tamanho não é possível + desc: Você não pode deixar a zona menor, porque algumas construções ficariam + fora dela. + puzzleLoadError: + title: Desafio Ruim + desc: "O desafio não pôde ser carregado:" + offlineMode: + title: Modo Offline + desc: Não conseguimos nos conectar aos servidores, então o jogo terá que ser + jogado no Modo Offline. Por favor garanta que você tenha uma conexão + ativa com a internet. + puzzleDownloadError: + title: Erro no download + desc: "Falha ao baixar o desafio:" + puzzleSubmitError: + title: Erro no envio + desc: "Erro ao enviar seu desafio:" + puzzleSubmitOk: + title: Desafio publicado + desc: Parabéns! Seu desafio foi publicado e pode ser acessado por outros + jogadores. Você pode acha-lo na categoria "Meus Desafios". + puzzleCreateOffline: + title: Modo Offline + desc: Como você está no Modo Offline, não será possível salvar e/ou publicar + seus desafios. Você deseja continuar? + puzzlePlayRegularRecommendation: + title: Recomendação + desc: Eu <strong>fortemente</strong> recomendo jogar o jogo normal até o nível + 12 antes de se aventurar na Puzzle DLC, senão você poderá encontrar + mecânicas que ainda não foram introduzidas. Você ainda deseja + continuar? + puzzleShare: + title: Código copiado + desc: O código do desafio (<key>) foi copiado para sua área de transferência! + Ele pode ser inserido no menu de desafios para acessar o desafio. + puzzleReport: + title: Denunciar Desafio + options: + profane: Ofensivo + unsolvable: Impossível + trolling: Antijogo + puzzleReportComplete: + title: Obrigado pelo seu feedback! + desc: O desafio foi marcado. + puzzleReportError: + title: Falha ao denunciar + desc: "Sua denúncia não pôde ser processada:" + puzzleLoadShortKey: + title: Insira código + desc: Insira o código do desafio para carrega-lo. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Mover @@ -202,6 +278,7 @@ ingame: clearSelection: Limpar Seleção pipette: Conta-Gotas switchLayers: Trocar Camadas + clearBelts: Clear belts colors: red: Vermelho green: Verde @@ -351,8 +428,51 @@ ingame: title: Me ajuda desc: Eu desenvolvo o jogo no meu tempo livre! achievements: - title: Achievements - desc: Hunt them all! + title: Conquistas + desc: Consiga todas elas! + puzzleEditorSettings: + zoneTitle: Zona + zoneWidth: Largura + zoneHeight: Altura + trimZone: Cortar + clearItems: Limpar Items + share: Compartilhar + report: Denunciar + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Criador de Desafios + instructions: + - 1. Coloque <strong>Produtores Constantes</strong> para gerar itens + e cores ao jogador + - 2. Monte uma ou mais itens que você quer que o jogador produza e + entregue em um ou mais <strong>Receptores de Objetivo</strong> + - 3. Uma vez que um Receptor de Objetivo recebe uma item por uma + certa quantidade de tempo, ele <strong>a salva como seu + objetivo</strong> , o qual o jogador terá que produzir depois + (Indicato pela <strong>insígnia verde</strong>). + - 4. Clique no <strong>botao de travar</strong> de uma construção + para desabilita-la. + - 5. Uma vez que você clicou em revisar, seu desafio será validado e + você poderá publica-lo. + - 6. Quando seu desafio for publicado, <strong>todas as construções + serão removidas</strong> exceto os Produtores Constantes e + Receptores de Objetivo - Essa é a parte que o jogador terá que + descobrir sozinho, por isso se chama desafio :) + puzzleCompletion: + title: Desafio Completo! + titleLike: "Clique no coração se você gostou do desafio:" + titleRating: O qual difícil foi esse desafio? + titleRatingDesc: Sua avaliação me ajuda a te fazer sugestões melhores no futuro! + continueBtn: Continuar jogando + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Autor + shortKey: Código + rating: Dificuldade + averageDuration: Duração média + completionRate: Taxa de sucesso shopUpgrades: belt: name: Esteiras, Distribuidores e Túneis @@ -569,6 +689,19 @@ buildings: name: Fabricante de Itens description: Disponível no modo sandbox apenas, envia o sinal recebido do plano de fios para o plano regular. + constant_producer: + default: + name: Produtor Constante + description: Produz constantemente um item ou cor específica. + goal_acceptor: + default: + name: Receptor de Objetivo + description: Entregue itens ao Receptor de Objetivo para os definir como o + objetivo. + block: + default: + name: Bloco + description: Te permite bloquear um espaço. storyRewards: reward_cutter_and_trash: title: Cortando formas @@ -906,7 +1039,12 @@ settings: title: Tamanho do Mapa de Recursos description: Controla o tamanho das formas no mapa de panorama (quando afasta o zoom). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Controles hint: "Dica: Certifique-se de usar CTRL, SHIFT e ALT! Eles permitem diferentes @@ -980,10 +1118,15 @@ keybindings: comparator: Comparador item_producer: Produtor de Itens (Sandbox) copyWireValue: "Fios: Copiar valor abaixo do cursor" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: "Rotação: Para cima" + rotateToDown: "Rotação: Para baixo" + rotateToRight: "Rotação: Para direita" + rotateToLeft: "Rotação: Para esquerda" + constant_producer: Produtor Constante + goal_acceptor: Receptor de Objetivo + block: Bloco + massSelectClear: Limpar esteiras + showShapeTooltip: Show shape output tooltip about: title: Sobre o jogo body: >- @@ -1077,3 +1220,90 @@ tips: - Pressione F4 para mostrar seu FPS e taxa de tiques. - Pressione F4 duas vezes para mostrar o ladrilho do seu mouse e da câmera. - Você pode clicar em uma forma fixada na esquerda para tirá-la de lá. +puzzleMenu: + play: Jogar + edit: Editar + title: Modo Puzzle + createPuzzle: Criar Desafio + loadPuzzle: Carregar + reviewPuzzle: Revisar e Publicar + validatingPuzzle: Validando Desafio + submittingPuzzle: Enviando Desafio + noPuzzles: Não existem desafios nesta categoria atualmente. + categories: + levels: Níveis + new: Novo + top-rated: Melhor Avaliados + mine: Meus Desafios + easy: Fácil + hard: Difícil + completed: Completados + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Desafio inválido + noProducers: Por favor coloque um Produtor Constante! + noGoalAcceptors: Por favor coloque um Receptor de Objetivo! + goalAcceptorNoItem: Um ou mais Receptores de Objetivo ainda não tiveram um item + determinado. Entregue um item a ele para definir seu objetivo. + goalAcceptorRateNotMet: Um ou mais Receptores de Objetivo não estão recebendo + itens suficientes. Garanta que os indicadores estejam verdes para + todos os Receptores. + buildingOutOfBounds: Uma ou mais construções estão fora da área construível. + Você pode aumentar a área ou removê-los. + autoComplete: Seu desafio se completa sozinho! Por favor garanta que seus + Produtores Constantes não estão entregando diretamente aos seus + Receptores de Objetivo. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Você está fazendo coisas muito rapidamente. Por favor espere um pouco. + invalid-api-key: Falha ao comunicar com o backend, por favor tente + atualizar/reiniciar o jogo (Chave API Inválida). + unauthorized: Falha ao comunicar com o backend, por favor tente + atualizar/reiniciar o jogo (Não autorizado). + bad-token: Falha ao comunicar com o backend, por favor tente atualizar/reiniciar + o jogo (Bad Token). + bad-id: Indentificador de desafio inválido. + not-found: O desafio não pôde ser achado. + bad-category: A categoria não pôde ser achada. + bad-short-key: O código é inválido. + profane-title: O nome do seu desafio contém palavras proibidas. + bad-title-too-many-spaces: O nome do seu desafio é muito curto. + bad-shape-key-in-emitter: Um Produtor Constante contém um item inválido. + bad-shape-key-in-goal: Um Receptor de Objetivo contém um item inválido. + no-emitters: Seu desafio não contém nenhum Produtor Constante. + no-goals: Seu desafio não contém nenhum Receptor de Objetivo. + short-key-already-taken: Esse código já está sendo usado, por favor escolha outro. + can-not-report-your-own-puzzle: Você não pode denunciar seu próprio desafio. + bad-payload: O pedido contém dados inválidos. + bad-building-placement: Seu desafio contém construções colocadas de forma inválida. + timeout: Acabou o tempo do pedido. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index ab10e6cd..049e0d03 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -15,12 +15,12 @@ steamPage: Comprar o jogo na Steam dar-te-á acesso à versão completa, mas também podes jogar a versão demo em shapez.io primeiro e decidir mais tarde! what_others_say: O que dizem sobre o shapez.io - nothernlion_comment: Este é um jogo fantástico - Estou a ter um bom bocado enquanto o jogo, - e o tempo parece que voa. + nothernlion_comment: Este é um jogo fantástico - Estou a ter um bom bocado + enquanto o jogo, e o tempo parece que voa. notch_comment: Ora bolas. Eu devia ir dormir, mas acho que acabei de descobrir como criar computorizar no shapez.io - steam_review_comment: Este jogo roubou a minha vida e não a quero de volta. - Jogo de fábrica relaxante que não me deixa parar de fazer as minhas linhas + steam_review_comment: Este jogo roubou a minha vida e não a quero de volta. Jogo + de fábrica relaxante que não me deixa parar de fazer as minhas linhas cada vez mais eficientes. global: loading: A Carregar @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: Versão Demo intro: Compra a versão completa para desbloqueares todas as funcionalidades! @@ -73,6 +74,12 @@ mainMenu: madeBy: Criado por <author-link> subreddit: Reddit savegameUnnamed: Sem Nome + puzzleMode: Modo Puzzle + back: Voltar + puzzleDlcText: Gostas de compactar e otimizar fábricas? Adquire agora o DLC + Puzzle na Steam para ainda mais diversão! + puzzleDlcWishlist: Lista de desejos agora! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -86,6 +93,9 @@ dialogs: viewUpdate: Ver Update showUpgrades: Mostrar Upgrades showKeybindings: Mostrar Atalhos + retry: Tentar novamente + continue: Continuar + playOffline: Jogar Offline importSavegameError: title: Erro de importação text: "Erro ao importar o teu savegame:" @@ -189,6 +199,74 @@ dialogs: title: Tutorial Disponível desc: Existe um vídeo de tutorial disponível para este nível, mas apenas está disponível em Inglês. Gostarias de o ver? + editConstantProducer: + title: Selecionar Item + puzzleLoadFailed: + title: Puzzles falharam a carregar + desc: "Infelizmente os puzzles não podem ser carregados:" + submitPuzzle: + title: Submeter Puzzle + descName: "Dá um nome ao teu puzzle:" + descIcon: "Por favor insere um pequeno código único que será a imagem do ícone + da teu puzzle (Podes gerar o código <link>aqui</link>, ou escolher + uma das seguintes sugestões aleatoriamente geradas.):" + placeholderName: Título do Puzzle + puzzleResizeBadBuildings: + title: Não é possível alterar o tamanho + desc: Não podes tornar a zona mais pequena, assim algumas das construções + ficariam fora da zona. + puzzleLoadError: + title: Mau puzzle + desc: "O puzzle falhou ao carregar:" + offlineMode: + title: Modo Offline + desc: Não conseguimos correr os servidores, sendo assim o jogo tem de ser jogado + em modo offline. Por favor assegura-te de que tens uma boa conexão + de internet. + puzzleDownloadError: + title: Falha no Download + desc: "Falha ao fazer o download do puzzle:" + puzzleSubmitError: + title: Erro ao submeter + desc: "Falha ao submeter o teu puzzle:" + puzzleSubmitOk: + title: Puzzle Publicado + desc: Parabéns! O teu puzzle foi publicado e agora pode ser jogado por outros + jogadores. Agora podes encontrar o teu puzzle na zona "Meus + puzzles". + puzzleCreateOffline: + title: Modo Offline + desc: Como estás no modo offline, tu não poderás salvar e/ou publicar o teu + puzzle. Mesmo assim queres continuar? + puzzlePlayRegularRecommendation: + title: Recomendação + desc: Eu recomendo <strong>fortemente</strong> a jogares no modo normal até ao + nível 12 antes de tentares o "puzzle DLC", caso contrário poderás + encontrar mecanicas às quais ainda não foste introduzido. Mesmo + assim queres continuar? + puzzleShare: + title: Pequeno código copiado + desc: O pequeno código do puzzle (<key>) foi copiado para a tua área de + transferências! Poderá ser introduzido no menu puzzle para teres + acesso ao puzzle. + puzzleReport: + title: Reportar Puzzle + options: + profane: Inapropriado + unsolvable: Não solucionável + trolling: Trolling + puzzleReportComplete: + title: Obrigado pelo teu feedback! + desc: O puzzle foi sinalizado. + puzzleReportError: + title: Falha ao reportar + desc: "Não foi possível proceder com o ter reporte:" + puzzleLoadShortKey: + title: Introduzir pequeno código + desc: Introduz um pequeno código para o puzzle carregar. + puzzleDelete: + title: Apagar Puzzle? + desc: Tens a certeza de que queres apagar '<title>'? Isto não pode ser anulado! ingame: keybindingsOverlay: moveMap: Mover @@ -210,6 +288,7 @@ ingame: clearSelection: Cancelar pipette: Pipeta switchLayers: Troca de camadas + clearBelts: Limpar tapetes rolantes buildingPlacement: cycleBuildingVariants: Pressionar <key> para obter variações. hotkeyLabel: "Atalho: <key>" @@ -358,8 +437,52 @@ ingame: title: Ajuda-me desc: Eu desenvolvo este jogo no meu tempo livre! achievements: - title: Achievements - desc: Hunt them all! + title: Conquistas + desc: Tenta obtê-las todas! + puzzleEditorSettings: + zoneTitle: Zona + zoneWidth: Largura + zoneHeight: Altura + trimZone: Aparar + clearItems: Limpar Itens + share: Partilhar + report: Reportar + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Criador de Puzzle + instructions: + - 1. Coloca um <strong>Produtor Constante</strong> para fornecer + formas e cores ao jogador + - 2. Constrói uma ou mais formas que queiras que o jogador tenha de + contruir mais tarde e a tenha de entregar a um ou mais + <strong>Recetor de Objetivo</strong> + - 3. Assim que o Recetor de Objetivo receba uma forma durante um + certo espaço de tempo, ele <strong>guarda-a num objetivo</strong> + que o jogador terá de produzir mais tarde (Indicatdo pelo + <strong>distintivo verde</strong>). + - 4. Clcica no <strong>botão de bloqueio</strong> numa construção + para desátiva-lo. + - 5. Assim que clicares em analisar, o teu puzzle será validado e + poderás publicá-lo. + - 6. Após publicado, <strong>todas as construções serão + removidas</strong> excepto os Produtores e Recetores de Objetivo - + Esta é a parte em que é suposto o jogador tentar descobrir como + resolver o teu Puzzle :) + puzzleCompletion: + title: Puzzle Completo! + titleLike: "Clica no coração se gostaste do puzzle:" + titleRating: Quão difícil achaste que foi o puzzle? + titleRatingDesc: A tua avaliação ajudar-me-á a fazer melhores sugestões no futuro + continueBtn: Continua a Jogar + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Autor + shortKey: Pequeno Código + rating: Grau de dificuldade + averageDuration: Média de duração + completionRate: Taxa de conclusão shopUpgrades: belt: name: Tapetes, Distribuidores e Túneis @@ -576,6 +699,19 @@ buildings: name: Produtor de Itens description: Disponível apenas no modo sandbox, produz o sinal dado na camada de fios na camada normal. + constant_producer: + default: + name: Produtor Constante + description: Produz constantemente uma forma ou cor específica. + goal_acceptor: + default: + name: Recetor de Objetivo + description: Entrega formas ao recetor de objetivo para defini-las como um + objetivo. + block: + default: + name: Bloqueador + description: Permite-te bloquear uma quadrícula. storyRewards: reward_cutter_and_trash: title: Corte de formas @@ -912,7 +1048,12 @@ settings: title: Tamanho de Recursos no Mapa description: Controla o tamanho das formas na visão geral do mapa (aplicando zoom out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Atalhos hint: "Dica: Utiliza o CTRL, o SHIFT e o ALT! Eles permitem diferentes opções de @@ -990,6 +1131,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Produtor Constante + goal_acceptor: Recetor de Objetivo + block: Bloqueador + massSelectClear: Limpar tapetes rolante + showShapeTooltip: Show shape output tooltip about: title: Sobre o Jogo body: >- @@ -1085,3 +1231,90 @@ tips: - Pressiona F4 para mostrar os teus FPS e Tick Rate. - Pressiona F4 duas vezes para mostrar a tile do teu rato e câmara. - Podes clicar numa forma afixada no lado direito para desafixa-la. +puzzleMenu: + play: Jogar + edit: Editar + title: Modo Puzzle + createPuzzle: Criar Puzzle + loadPuzzle: Carregar + reviewPuzzle: Analisar e Publicar + validatingPuzzle: A validar Puzzle + submittingPuzzle: A submeter Puzzle + noPuzzles: Não há atualmente puzzles nesta secção. + categories: + levels: Nivéis + new: Novo + top-rated: Melhor Avaliado + mine: Meus Puzzles + easy: Fácil + hard: Difícil + completed: Completo + medium: Médio + official: Oficial + trending: Tendências de Hoje + trending-weekly: Tendências da Semana + categories: Categorias + difficulties: Por Dificuldade + account: Os meus Puzzles + search: Procurar + validation: + title: Puzzle Inválido + noProducers: Por favor coloca um Produtor Constante! + noGoalAcceptors: Por favor coloca um Recetor de Objetivo! + goalAcceptorNoItem: Um ou mais Recetores de Objetivo ainda não tem itens + atrbuídos. Entrega uma forma nele para definires um objetivo. + goalAcceptorRateNotMet: Um ou mais Recetores de Objetivo não está a receber + itens suficientes. Assegura-te de que tens o indicador verde em + todos os Recetores. + buildingOutOfBounds: Uma ou mais formas estão fora da área de construção. Ou + aumentas a área ou removes esses itens. + autoComplete: O teu Puzzle completa-se sozinho! Por favor assegura-te de que os + teus Produtores Constantes não estão automaticamente direcionados + para os Recetores de Objetivo. + difficulties: + easy: Fácil + medium: Médio + hard: Difícil + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Estás a realizar as tuas ações demasiado rápido. Aguarda um pouco. + invalid-api-key: Falha ao cominucar com o backend, por favor tenta + atualizar/resetar o Jogo (Chave Api inválida). + unauthorized: Falha ao cominucar com o backend, or favor tenta atualizar/resetar + o Jogo (Não autorizado). + bad-token: Falha ao cominucar com o backend, por favor tenta atualizar/resetar o + Jogo (Mau Token). + bad-id: Identificador de Puzzle inválido. + not-found: O Puzzle pedido não foi encontrado. + bad-category: A categoria pedida não foi encontrada. + bad-short-key: O pequeno código inserido não é válido. + profane-title: O título do teu Puzzle contém palavras impróprias. + bad-title-too-many-spaces: O título do teu Puzzle é demasiado pequeno. + bad-shape-key-in-emitter: Um Produtor Constante tem um item inválido. + bad-shape-key-in-goal: Um Recetor de Objetivo tem um item inválido. + no-emitters: O teu Puzzle não contém nenhum Produtor Constante. + no-goals: O teu Puzzle não contém nenhum Recetor de Objetivo. + short-key-already-taken: Este pequeno código já foi utilizado, por favor tenta outro. + can-not-report-your-own-puzzle: Não podes reportar o teu próprio puzzle. + bad-payload: O pedido contém informção inválida. + bad-building-placement: O teu Puzzle contém construções posicionadas de forma inválida. + timeout: O tempo do pedido esgotou. + too-many-likes-already: O puzzle já tem imensos gostos. Se ainda o quiseres + remover, por favor contacta support@shapez.io! + no-permission: Não tens permissão para realizar esta ação. diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml index b5cbde49..f58bf28c 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -4,17 +4,16 @@ steamPage: într-o hartă infinită. discordLinkShort: Official Discord intro: >- - Shapez.io is a relaxed game in which you have to build factories for the - automated production of geometric shapes. + Shapez.io un joc relaxant in care trebuie sa construiești fabrici pentru a automatiza producția de figuri geometrice - As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + Pe măsură ce nivelul crește figurile devin din ce în ce mai complexe și vei fi nevoit să te extinzi pe harta infinită. - And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + Daca asta nu era suficient, vei fi nevoit sa produci exponențial mai multe figuri pentru a satisface cererea - singurul lucru care te poate ajuta este extinderea ! - While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - - Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! - what_others_say: What people say about shapez.io + Dacă la început procesezi doar forme, vei fi nevoit sa le colorezi mai târziu - pentru asta vei avea nevoie să extragi și să amesteci culori ! + + Cumpărarea jocului pe Steam îți va asigura acesul la versiunea finală, dar te poți juca o versiune demonstrativă pe shapez.io mai întâi și să te decizi mai târziu ! + what_others_say: Ce spun alții despre shapez.io nothernlion_comment: This game is great - I'm having a wonderful time playing, and time has flown by. notch_comment: Oh crap. I really should sleep, but I think I just figured out @@ -53,6 +52,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logare demoBanners: title: Versiunea Demo intro: Instalează versiunea Standalone pentru a debloca toate funcțiile! @@ -63,7 +63,7 @@ mainMenu: openSourceHint: Acest joc este open source! discordLink: Serverul oficial de Discord helpTranslate: Ajută să traducem! - browserWarning: Scuze dar, jocul este știut să ruleze încet pe browser-ul tău! + browserWarning: Scuze, dar jocul este cunoscut să ruleze încet pe browser-ul tău! Instalează versiunea standalone sau descarcă chrome pentru experiența completă. savegameLevel: Nivelul <x> @@ -73,6 +73,12 @@ mainMenu: madeBy: Făcut de <author-link> subreddit: Reddit savegameUnnamed: Fară nume + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Îți place să compresezi și să optimizezi fabricile ? Ia acum Puzzle + DLC pe Steam pentru mai multă distracție ! + puzzleDlcWishlist: Adaugă în Wishlist acum! + puzzleDlcViewNow: Vezi DlC dialogs: buttons: ok: OK @@ -86,25 +92,28 @@ dialogs: viewUpdate: Vezi Update-ul showUpgrades: Vezi Upgrade-urile showKeybindings: Arată tastele configurate + retry: Reîncearcă + continue: Continue + playOffline: Joacă Offline importSavegameError: title: Eroare la Importare text: "Încercarea de importare a eșuat:" importSavegameSuccess: title: Salvarea importată - text: Salvarea ta a fost importat cu succes. + text: Salvarea ta a fost importată cu succes. gameLoadFailure: title: Jocul este corupt text: "Încercarea de a încărca salvarea a eșuat:" confirmSavegameDelete: title: Confirmă ștergerea - text: Ești sigur că vrei să ștergi următorul joc?<br><br> '<savegameName>' la + text: Ești sigur că vrei să ștergi următoarea salvare?<br><br> '<savegameName>' la nivelul <savegameLevel><br><br> Acest lucru nu poate fi anulat! savegameDeletionError: title: Eroare la ștergere - text: "Nu a reușit să se ștearga salvarii:" + text: "Nu a fost reușită ștearga salvarii:" restartRequired: - title: Restartare necesară - text: Trebuie să restartezi jocul pentru a aplica setările. + title: Repornire necesară + text: Trebuie să repornești jocul pentru a aplica setările. editKeybinding: title: Schimbă Tastele configurate desc: Apasă tasta sau butonul mouse-ului pe care vrei să îl atribui, sau escape @@ -117,7 +126,7 @@ dialogs: title: Tastele configurate se resetează desc: Tastele configurate au fost resetate la valorile lor obișnuite! featureRestriction: - title: Demo Version + title: Versiune Demo desc: Ai încercat să accesezi o funcție (<feature>) care nu este disponibilă în demo. Consideră să instalezi standalone-ul pentru experiența completă! @@ -150,19 +159,19 @@ dialogs: class='keybinding'>CTRL</code> + Drag: Selectează o zonă pentreu a copia / delete.<br> <code class='keybinding'>SHIFT</code>: Ține apăsat pentru a plasa mai multe dintr-o clădire.<br> <code - class='keybinding'>ALT</code>: Inversează orientația a benzilor + class='keybinding'>ALT</code>: Inversează orientarea benzilor rulante.<br>" createMarker: - title: Nou waypoint - desc: Give it a meaningful name, you can also include a <strong>short - key</strong> of a shape (Which you can generate <link>here</link>) - titleEdit: Edit Marker + title: Waypoint nou + desc: Dă-i un nume sugestiv, poți include și o <strong> scurtă + cheie </strong> a unei figuri (Pe care o poți genera <link>aici</link>) + titleEdit: Editează Marker markerDemoLimit: desc: Poți crea decât două waypoint-uri personalizate în demo. Ia standalone-ul pentru Waypoint-uri nelimitate! massCutConfirm: - title: Confirmă tăierea - desc: Tu tai multe construcții (<count> pentru a fi precis)! Sunteți sigur că + title: Confirmă decuparea + desc: Tu decupezi mai multe construcții (<count> pentru a fi precis)! Sunteți sigur că vreți să faceți asta? exportScreenshotWarning: title: Exportează captură de ecran @@ -170,27 +179,91 @@ dialogs: rețineți că asta poate fi destul de lent pentru o bază mare și poate chiar să blocheze jocul! massCutInsufficientConfirm: - title: Confirm cut - desc: You can not afford to paste this area! Are you sure you want to cut it? + title: Confirmă decuparea + desc: Nu vă permiteți sa lipiți această zona ! Suntți sigur că doriți să o decupați ? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the <strong>short key</strong> of a shape (Which you - can generate <link>here</link>) + title: Setați semnal + descItems: "Selectați un item predefinit :" + descShortKey: ... sau introduceți <strong>cheia scurtă</strong> a unei forme (Pe care o + puteți genera <link>aici</link>) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Redenumiți salvarea + desc: Îți poți redenumi salvarea aici tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutorial Disponibil + desc: Există un tutorial video pentru acest nivel! Ați dori să + îl vizionați? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Tutorial Disponibil + desc: Există un tutorial video pentru acest nivel, dar este disponibil + doar în engleză. Ați dori să în vizionați? + editConstantProducer: + title: Setează Item + puzzleLoadFailed: + title: Încărcarea puzzleurilor a eșuat + desc: "Din păcate puzzelurile nu au putut fi încărcate:" + submitPuzzle: + title: Trimite Puzzle + descName: "Dă puzzle-ului tău un nume:" + descIcon: "Te rog introdu o cheie scurtă, care va fi folosită ca iconiță + pentru puzzleul tău (Le poți genera <link>aici</link>, sau poți alege + una din cele generate aleator de mai jos):" + placeholderName: Titlu Puzzle + puzzleResizeBadBuildings: + title: Redimenisonarea nu e posibilă + desc: Nu poți face zona asta mai mică, altfel unele clădiri vor fi + înafara zonei. + puzzleLoadError: + title: Puzzle Defect + desc: "Puzzle-ul nu a putut fi încărcat:" + offlineMode: + title: Mod Offline + desc: Nu am putut face conexiunea la servere, deci jocul trebuie să ruleze + în modul offine. Te rog verifică dacă ai o conexiune activă la internet. + puzzleDownloadError: + title: Eroare la descărcare + desc: "Descărcarea puzzle-ului a eșuat:" + puzzleSubmitError: + title: Eroare la trimitere + desc: "Trimiterea puzzle-ului a eșuat:" + puzzleSubmitOk: + title: Puzzle Publicat + desc: Felicitări! Puzzle-ul tău a fost publicat și poate fi jucat acum + de ceilalți. Îl poți găsi în secțiunea "Puzzle-urile mele". + puzzleCreateOffline: + title: Mod Offline + desc: Deoarece ești online nu poți salva/publica un + puzzle. Dorești să continui ? + puzzlePlayRegularRecommendation: + title: Recomandare + desc: Recomand <strong>cu tărie</strong> jucarea normală a jocului până la nivelul 12 + înainte de a încerca DLC-ul Puzzle, altfel e posibil să întâlnești mecanici + care nu au fost prezentate încă. Sigur dorești să continui ? + puzzleShare: + title: Cheie scurtă copiată + desc: Cheia scurtă a unui puzzle (<key>) a fost copiată în clipboard! Poate + fi introdusă in meniul puzzle pentru a accesa puzzle-ul respectiv. + puzzleReport: + title: Raportează Puzzle + options: + profane: Vulgar + unsolvable: Nu poate fi rezolvat + trolling: Trolaj + puzzleReportComplete: + title: Mulțumim pentru feedbackul dumneavoastră! + desc: Puzzle-ul a fost marcat. + puzzleReportError: + title: Eroare la raportare + desc: "Raportarea dumneavoastră nu a putut fi procesată:" + puzzleLoadShortKey: + title: Inserează cheie scurtă + desc: Inserează cheia scurtă a puzzleului pentru a îl încărca + puzzleDelete: + title: Șterge Puzzle? + desc: Ești sigur că vrei să ștergi '<title>'? Această modificare e permanentă! ingame: keybindingsOverlay: - moveMap: Move + moveMap: Mișcă-te selectBuildings: Selectează zona stopPlacement: Oprește plasarea rotateBuilding: Rotește construcția @@ -207,16 +280,17 @@ ingame: cutSelection: Taie copySelection: Copiază clearSelection: Golește Secțiunea - pipette: Pipette - switchLayers: Switch layers + pipette: Pipetă + switchLayers: Schimbă straturi + clearBelts: Golește benzile buildingPlacement: - cycleBuildingVariants: Apasă <key> pentru a cicla variantele. + cycleBuildingVariants: Apasă <key> pentru a parcurge variantele disponibile. hotkeyLabel: "Tasta: <key>" infoTexts: speed: Viteză range: Distanță storage: Capacitate - oneItemPerSecond: 1 obiect / second + oneItemPerSecond: 1 obiect / secundă itemsPerSecond: <x> obiecte / s itemsPerSecondDouble: (x2) tiles: <x> Câmpuri @@ -228,11 +302,11 @@ ingame: notifications: newUpgrade: Un upgrade nou este disponibil! gameSaved: Jocul tău a fost salvat. - freeplayLevelComplete: Level <level> has been completed! + freeplayLevelComplete: Nivelul <level> a fost completat! shop: title: Upgrade-uri buttonUnlock: Upgrade - tier: Tier <x> + tier: Nivel <x> maximumLevel: NIVELUL MAXIM (Speed x<currentMult>) statistics: title: Statistici @@ -258,7 +332,7 @@ ingame: beltsPlaced: Benzi tutorialHints: title: Ai nevoie de ajutor? - showHint: Arată o idee + showHint: Arată indiciu hideHint: Închide blueprintPlacer: cost: Preț @@ -278,35 +352,35 @@ ingame: 1_2_conveyor: "Conectează extractorul cu o<strong>bandă rulantă</strong> până la centru!<br><br>Sfat: <strong>Click și trage</strong> banda cu mouse-ul tău!" - 1_3_expand: "Acesta <strong>NU</strong> este un joc idle! Construiește mai multe + 1_3_expand: "Acesta <strong>NU</strong> este un joc de tip idle! Construiește mai multe extractoare și benzi pentru a finaliza scopul mai rapid.<br><br>Sfat: Ține apăsat <strong>SHIFT</strong> pentru a - plasa mai multe extractoare, și flosește <strong>R</strong> + plasa mai multe extractoare, și folosește <strong>R</strong> pentru a le roti." - 2_1_place_cutter: "Now place a <strong>Cutter</strong> to cut the circles in two - halves!<br><br> PS: The cutter always cuts from <strong>top to - bottom</strong> regardless of its orientation." - 2_2_place_trash: The cutter can <strong>clog and stall</strong>!<br><br> Use a - <strong>trash</strong> to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place <strong>2 more cutters</strong> to speed - up this slow process!<br><br> PS: Use the <strong>0-9 - hotkeys</strong> to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! <strong>Build 4 - extractors</strong> and connect them to the hub.<br><br> PS: - Hold <strong>SHIFT</strong> while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the <strong>quad painter</strong> and get some - <strong>circles</strong>, <strong>white</strong> and - <strong>red</strong> color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - <strong>E</strong>!<br><br> Then <strong>connect all four - inputs</strong> of the painter with cables! - 21_3_place_button: Awesome! Now place a <strong>Switch</strong> and connect it - with wires! - 21_4_press_button: "Press the switch to make it <strong>emit a truthy - signal</strong> and thus activate the painter.<br><br> PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Acum plasează un <strong>tăietor</strong> pentru a tăia cercurile în două + jumatăți!<br><br> PS: Tăietorul mereu taie de <strong>sus în + jos</strong> indiferent de orientare." + 2_2_place_trash: Tăietoarul poate fi <strong>înfundat și blocat</strong>!<br><br> Folosește + <strong>coșul de gunoi</strong> pentru a scăpa de bucățile + inutile. + 2_3_more_cutters: "Bună treabă! Acum pune <strong>încă 2 tăietoare</strong> pentru a + mări viteza acestui proces încet!<br><br> PS: Folosește <strong> tastele rapide + 0-9</strong> pentru a selecta construcțiile mai rapid!" + 3_1_rectangles: "Acum să extragem niște pătrate! <strong>Construiește 4 + extractoare</strong> și conectează-le la hub.<br><br> PS: + Ține apăsat <strong>SHIFT</strong> în timp ce tragi o banda pentru a activa + planificatorul de benzi!" + 21_1_place_quad_painter: Plasează <strong>vopsitorul cvadruplu</strong> și fă rost de + <strong>cercuri</strong> de culori <strong>albe</strong> și + <strong>roșii</strong>! + 21_2_switch_to_wires: Comută la stratul cabluri apăsând + <strong>E</strong>!<br><br> Apoi <strong>conectează toate cele 4 intrări + </strong>ale vopsitorului cu cabluri! + 21_3_place_button: Grozav! Acum plasează un <strong>Întrerupător</strong> și + conectează-l cu cabluri! + 21_4_press_button: "Apasă pe intrerupător pentru a <strong>emite semnalul + ADEVĂRAT</strong> și pentru a activa vopsitorul.<br><br> PS: Nu + e necesar să conectezi toate cele 4 intrări! Încearcă să conectezi doar 2." colors: red: Roșu green: Verde @@ -316,47 +390,87 @@ ingame: cyan: Cyan white: Alb uncolored: Necolorat - black: Black + black: Negru shapeViewer: title: Start empty: Gol - copyKey: Copy Key + copyKey: Copiază Cheie connectedMiners: one_miner: 1 Miner n_miners: <amount> Miners - limited_items: Limited to <max_throughput> + limited_items: Limitat la <max_throughput> watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Versiune Demo + desc: Apasă aici pentru a vedea avantajele versiunii Steam! + get_on_steam: Ia pe Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Ia versiunea completă! + no_thanks: Nu, mersi! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Nivele Noi + desc: Pentru un total de 26 de nivele! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 construcții noi + desc: Automatizează-ti complet fabrica! upgrades: - title: ∞ Upgrade Tiers - desc: This demo version has only 5! + title: Nivele de Upgrade Infinite + desc: Acest demo are doar 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: Marcatoare infinite + desc: Nu te rătăci niciodată în fabrică! wires: - title: Wires - desc: An entirely new dimension! + title: Cabluri + desc: O dimeniune complet nouă! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Mod întunecat + desc: Nu mai lăsa ochii să te doară! support: - title: Support me - desc: I develop it in my spare time! + title: Ajută-mă + desc: Dezvolt jocuri în timpul meu liber! achievements: - title: Achievements - desc: Hunt them all! + title: Realizări + desc: Vânează-le pe toate! + puzzleEditorSettings: + zoneTitle: Zonă + zoneWidth: Lățime + zoneHeight: Înăltime + trimZone: Taie + clearItems: Golește iteme + share: Distribuie + report: Raportează + clearBuildings: Șterge construcții + resetPuzzle: Resetează Puzzle + puzzleEditorControls: + title: Creator de puzzle + instructions: + - 1. Plasează <strong>Producătoare Constante</strong> care să ofere + forme și culori jucătorului. + - 2. Produ una sau mai multe forme pe care jucătorul să le producă + și să le livreze la <strong>Acceptorul de obiective</strong> + - 3. Odată ce acceptorul de obiective primește o formă pentru un timp + suficient, acesta <strong>îl salvează ca obiectiv</strong> pe care jucătorul + trebuie să îl producă (Indicat de <strong>insigna verde</strong>). + - 4. Apasă pe <strong>butonul blochează</strong> pe o clădire pentru a o dezactiva + - 5. Odată ce ai apăsat revizurie, puzzle-ul tău va fi validat și îl vei putea + publica. + - 6. Odată lansat, <strong>toate constucțiile vor fi distruse</strong> + cu excepția producătoarelor constante și a acceptoarelorl de obiective + - Asta face parte din ceea ce trebuie să își dea seama jucătorul, până la urmă :) + puzzleCompletion: + title: Puzzle Completat! + titleLike: "Apasă pe inimă dacă ți-a plăcut :" + titleRating: Cât de dificil ți s-a părut? + titleRatingDesc: Recenzia ta mă va ajuta să îți fac recomandări mai bune pe viitor ! + continueBtn: Continua joaca + menuBtn: Meniu + nextPuzzle: Puzzle-ul Următor + puzzleMetadata: + author: Autor + shortKey: Cheie scurtă + rating: Scor dificultate + averageDuration: Durată medie + completionRate: Rată completare shopUpgrades: belt: name: Benzi, Distribuitor & Tunele @@ -388,7 +502,7 @@ buildings: name: Tunel description: Permite transportarea resurselor pe sub construcții și benzi. tier2: - name: Tunnel Tier II + name: Tunnel Nivel II description: Permite transportarea resurselor pe sub construcții și benzi. cutter: default: @@ -397,26 +511,26 @@ buildings: folosești doar o parte, ține minte să o distrugi pe cealaltă sau producția se va opri!</strong> quad: - name: Tăietor (Quad) + name: Tăietor (Cvadruplu) description: Taie formele în patru părți. <strong>Dacă folosești doar o parte, ține minte să o distrugi pe cealaltă sau producția se va opri!</strong> rotater: default: - name: Rotate + name: Rotitor description: Rotește formele în sensul acelor de ceasornic la 90 de grade. ccw: - name: Rotate (CCW) - description: Rotește formele în inversul sensului acelor de ceasornic la 90 de + name: Rotitor (CCW) + description: Rotește formele în sensul invers acelor de ceasornic la 90 de grade. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Rotitor (180) + description: Rotește formele cu 180 de grade. stacker: default: name: Mașină de presat description: Unește ambele obiecte. Dacă ele nu poti fi unite, obiectul drept va - fi pus peste obiectul stâng. + fi pus deasupra obiectul stâng. mixer: default: name: Mixer de culori @@ -431,10 +545,10 @@ buildings: description: Colorează formele din input-urile din stânga folosind culoarea din input-ul de sus. quad: - name: Mașină de pictat (Quad) - description: Allows you to color each quadrant of the shape individually. Only - slots with a <strong>truthy signal</strong> on the wires layer - will be painted! + name: Mașină de pictat (Cvadruplu) + description: Îți permite să colorezi fiecare sfert de figură individual. Doar + sloturile cu <strong>semnalul ADEVARAT</strong> pe stratul de cabluri + va fi colorat! mirrored: name: Mașină de pictat description: Colorează întreaga formă din input-ul stâng folosind culoarea din @@ -445,151 +559,161 @@ buildings: description: Acceptă input-uri din toate părțile și le distruge. Pentru totdeauna. hub: - deliver: Deliver + deliver: Livrează toUnlock: pentru a debloca levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: Sfărșitul Demo-ului wire: default: - name: Energy Wire - description: Allows you to transport energy. + name: Cabluri de energie + description: Îți permite să transporți energie. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Cabluri + description: Transportă semnale, care pot fi culori sau valori binare (1/0) + Cablurile colorate diferit nu se conectează balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Balansor + description: Multifunctional - Distribuie toate input-urile catre toate output-urile. merger: name: Merger (compact) - description: Merges two conveyor belts into one. + description: Unește două benzi la una. merger-inverse: name: Merger (compact) - description: Merges two conveyor belts into one. + description: Unește două benzi la una. splitter: name: Splitter (compact) - description: Splits one conveyor belt into two. + description: Împarte o bandă în două. splitter-inverse: name: Splitter (compact) - description: Splits one conveyor belt into two. + description: Împarte o bandă în două. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Depozit + description: Depozitează iteleme în exces, până la o anumită capacitate. Prioritizează + output-ul stâng și poate fi folosit ca o poartă de revărsare. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Intersecție cabluri + description: Permite intersectarea a doua cabluri fără a le conecta constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Semnal constant + description: Emite un semnal constant, ce poate fi o formă, culoare sau o valoare + binară (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Întrerupător + description: Poate fi pus să emită un semnal binar (1/0) pe stratul cabluri, + putând fi folosit de exemplu cu un filtru de iteme. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: Poartă AND + description: Emite valoarea binară "1" daca ambele input-uri sunt adevărate. (adevarat înseamna formă, + culoare sau valoarea binară "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: Poartă NOT + description: Emite valoarea binară "1" daca input-ul nu este adevărat. (adevarat înseamna formă, + culoare sau valoarea binară "1") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Poartă XOR + description: Emite valoarea binară "1" daca unul din input-uri e adevărat, dar nu ambele. (adevarat înseamna formă, + culoare sau valoarea binară "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Poartă OR + description: Emite valoarea binară "1" daca unul sau mai multe input-uri este adevărat. (adevarat înseamna formă, + culoare sau valoarea binară "1") transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Tranzistor + description: Transmite valoarea de la input-ul de jos daca input-ul din lateral este adevarat (adevarat înseamna formă, + culoare sau valoarea binară "1"). mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Transmite valoarea de la input-ul de jos daca input-ul din lateral este adevarat (adevarat înseamna formă, + culoare sau valoarea binară "1"). filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Filtru + description: Conectează un semnal pentru a direcționa toate itemele corespunzătoare + în sus, iar restul către dreapta. Poate fi controlat cu semnale binare. display: default: name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + description: Conectează un semnal pentru a îl asișa pe display - Poate fi o formă, + o culoare sau valoare binară. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Cititor de bandă + description: Permite măsurarea debitului mediu al benzii. Transmite ultimul + item citit pe statul cabluri (odată deblocat). analyzer: default: - name: Shape Analyzer + name: Analizator de formă description: Analyzes the top right quadrant of the lowest layer of the shape and returns its shape and color. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Comparator + description: Returnează valoarea binară "1" dacă semnalele sunt egale. Poate + compara forme, coloari, valori binare virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Tăietor virtual + description: Taie virtual forma în două rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Rotitor virtual + description: Rotește virtual forma în ambele direcții. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Desfăcător virtual + description: Extrage virtual stratul de deasupra către output-ul din dreapta și cel + ce rămâne în stânga. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Stivuitor virtual + description: Stivuiește virtual forma din dreapta peste fomrma din stânga. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Vopsitor virtual + description: Vopsește virual forma din input-ul de jos cu cea din dreapta. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Producător de item + description: Disponsibil doar în modul sandbox, semnalul primit de pe + stratul cabluri pe stratul normal. + constant_producer: + default: + name: Producator de constantă + description: Produce constant o anumită formă/culoare + goal_acceptor: + default: + name: Acceptor de obiective + description: Livrează formele la acceptorul de obiective pentru a le seta ca obiectiv. + block: + default: + name: Bloc + description: Îți permite să blochezi o căsuță. storyRewards: reward_cutter_and_trash: title: Tăierea formelor - desc: You just unlocked the <strong>cutter</strong>, which cuts shapes in half - from top to bottom <strong>regardless of its - orientation</strong>!<br><br>Be sure to get rid of the waste, or - otherwise <strong>it will clog and stall</strong> - For this purpose - I have given you the <strong>trash</strong>, which destroys - everything you put into it! + desc: Tocmai ai deblocat <strong>tăietorul</strong>, care taie formele în jumătate + de sus in jos <strong>indiferent de orientare + </strong>!<br><br>Asigură-te că scapi de bucățile inutile, ori + altfel <strong>o să se înfunde și o să se oprească</strong> - Pentru asta + ți-am dat <strong>cosul de gunoi</strong> care distruge + tot ce pui în el! reward_rotater: title: Rotitul - desc: <strong>rotater-ul</strong> a fost deblocat! El rotește formele la 90 de + desc: <strong>Rotitorul</strong> a fost deblocat! El rotește formele la 90 de grade. reward_painter: title: Pictatul - desc: "The <strong>Mașina de pictat</strong> a fost deblocată - Extrage niște + desc: "The <strong>Vopsitorul</strong> a fost deblocată - Extrage niște culori (la fel cum faci și cu formele) și combină-le cu o formă în - mașina de pictat pentru a le colora!<br><br>PS: Dacă ești orb, acolo - este un <strong>mod pentru orbi</strong> în setări!" + mașina de pictat pentru a le colora!<br><br>PS: Dacă ești daltonist, există + un <strong>mod pentru daltoniști</strong> în setări!" reward_mixer: title: Amestecatul culorilor desc: <strong>Mixerul</strong> a fost deblocat - Combină două culori folosind - <strong>amestecul de aditivi</strong> cu această clădire! + <strong>amestecul de culori</strong> cu această clădire! reward_stacker: title: Mașina de presat desc: Acum poți combina forme cu <strong>mașina de presat</strong>! Ambele @@ -598,34 +722,34 @@ storyRewards: <strong>pus peste</strong> input-ul stâng! reward_splitter: title: Distribuitor/Combinator - desc: You have unlocked a <strong>splitter</strong> variant of the - <strong>balancer</strong> - It accepts one input and splits them - into two! + desc: Ai deblocat <strong>împărțitorul</strong> o variantă + <strong>a balansorului</strong> - Acceptă un input și în împarte + în două! reward_tunnel: title: Tunel - desc: <strong>Tunelul</strong> a fost deblocat - Acum poți deplasa obiecte prin + desc: <strong>Tunelul</strong> a fost deblocat - Acum poți deplasa obiecte pe sub benzi și construcții cu el! reward_rotater_ccw: - title: Rotarea CCW - desc: Ai deblocat o variantă a <strong>rotater-ului</strong> - El permite - rotația în sensul invers al acelor de ceasornic! Pentru a îț - construi, selectează rotater-ul și <strong>apasă 'T' pentru a cicla - printre variante</strong>! + title: Rotitul CCW + desc: Ai deblocat o variantă a <strong>rotitorului</strong> - El permite + rotația în sensul invers al acelor de ceasornic! Pentru a îl + construi, selectează rotitorul și <strong>apasă 'T' pentru a parcurge + variantele </strong>! reward_miner_chainable: - title: Chaining Extractor - desc: "You have unlocked the <strong>chained extractor</strong>! It can - <strong>forward its resources</strong> to other extractors so you - can more efficiently extract resources!<br><br> PS: The old - extractor has been replaced in your toolbar now!" + title: Extractor în lanț + desc: "Ai deblocat <strong>extractorul în lanț</strong>! El poate + <strong>transmite resursele</strong> către celelalte extractoare + încât minarea resurselor să fie mai eficientă<br><br> PS: Extractorul vechi + a fost înlocuit cu cel nou in bara de unelte!" reward_underground_belt_tier_2: - title: Tunnel Tier II + title: Tunel nivel II desc: Ai deblocat o variantă nouă a <strong>tunelului</strong> - El are <strong>distanță mai mare</strong>, iar tu poți de asemenea să alternezi acele tunele acum! reward_cutter_quad: title: Tăiatul quadriplu desc: Ai deblocat o variantă a <strong>tăietorului</strong> - El îți permite să - tai forme în <strong>patru părți</strong> în loc de doar două! + tai forme în <strong>patru părți</strong> în loc de două! reward_painter_double: title: Pictatul dublu desc: Ai deblocat o variantă a <strong>Mașini de pictat</strong> - Funcționează @@ -633,25 +757,25 @@ storyRewards: forme odată</strong> consumând doar o culoare în loc de două! reward_storage: title: Depozitul - desc: You have unlocked the <strong>storage</strong> building - It allows you to - store items up to a given capacity!<br><br> It priorities the left - output, so you can also use it as an <strong>overflow gate</strong>! + desc: Ai deblocat <strong>depozitul</strong> - Îți permite să stochezi + iteme până la o anumită capacitate!<br><br> El prioritizează + output-ul stâng, deci îl poți folosi ca o <strong>poarta de revărsare</strong>! reward_freeplay: title: Jocul liber - desc: You did it! You unlocked the <strong>free-play mode</strong>! This means - that shapes are now <strong>randomly</strong> generated!<br><br> - Since the hub will require a <strong>throughput</strong> from now - on, I highly recommend to build a machine which automatically - delivers the requested shape!<br><br> The HUB outputs the requested - shape on the wires layer, so all you have to do is to analyze it and - automatically configure your factory based on that. + desc: Ai reușit!Ai deblocat modul <strong>liber</strong>! Asta înseamnă + că formele sunt acum generate <strong>aleator</strong> !<br><br> + Deoarece hub-ul va necesita un <strong>debit</strong> mare de acum, + recomand să construiești o mașinărie care produce automat si livrează + forma cerută!<br><br> HUB-ul are forma ceută pe stratul cabluri, + deci tot ce trebuie să faci e să analizezi forma cerută și să + configurezi automat fabrica pentru asta ! reward_blueprints: title: Planuri desc: Acum poți <strong>copia și lipi</strong> părți ale fabrici tale! Selectează o zonă (Ține apăsat CTRL, apoi trage cu mouse-ul tău), și apasă 'C' pentru a o copia.<br><br>Lipitul nu este - <strong>gratis</strong>, ai nevoie să produci <strong>forme de - planuri</strong> pentru a ți le permite! (Acelea pe care tocmai + <strong>gratis</strong>, ai nevoie să produci <strong>forme de planuri + </strong> pentru a ți le permite! (Acelea pe care tocmai le-ai livrat). no_reward: title: Nivelul următor @@ -664,78 +788,77 @@ storyRewards: desc: Felicitări! Apropo, mai mult conținut este planificat pentru versiunea standalone! reward_balancer: - title: Balancer - desc: The multifunctional <strong>balancer</strong> has been unlocked - It can - be used to build bigger factories by <strong>splitting and merging - items</strong> onto multiple belts! + title: Balansor + desc: Acest multifuncțional <strong>balansor</strong> a fost deblocat - El poate + fi folosit pentru a construi fabrici mai mari <strong>împarțind și îmbinând + itemele</strong> pe benzi multiple! reward_merger: title: Compact Merger - desc: You have unlocked a <strong>merger</strong> variant of the - <strong>balancer</strong> - It accepts two inputs and merges them - into one belt! + desc: Ai deblocat <strong>Compact Merger</strong> o varianta a + <strong>balansorului</strong> - Accepta doua input-uri si le imbina + pe o singura banda! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the <strong>belt reader</strong>! It allows you to - measure the throughput of a belt.<br><br>And wait until you unlock - wires - then it gets really useful! + title: Cititor de bandă + desc: Ai deblocat <strong>cititirul de bandă</strong>! Iți permite să + măsori debitul unei benzi.<br><br>Și așteaptă pană deblochezi + cablurile - atungi devine foarte util! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degrees <strong>rotater</strong>! - It allows - you to rotate a shape by 180 degrees (Surprise! :D) + title: Rotator (180 degrees) + desc: Tocmai ai deblocat un <strong>rotator</strong> de 180 de grade! - Îți permite + să rotești o formă cu 180 de grade (Surpriză! :D) reward_display: title: Display - desc: "You have unlocked the <strong>Display</strong> - Connect a signal on the - wires layer to visualize it!<br><br> PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + desc: "Ai deblocat <strong>Display-ul</strong> - Conectează un semnal pe + stratul cabluri pentru a vizualiza!<br><br> PS: Ai observat că cititorul + de benzi are ca output ultimul item procesat? Încearcă să îl afișezi pe ecan !" reward_constant_signal: - title: Constant Signal - desc: You unlocked the <strong>constant signal</strong> building on the wires - layer! This is useful to connect it to <strong>item filters</strong> - for example.<br><br> The constant signal can emit a - <strong>shape</strong>, <strong>color</strong> or - <strong>boolean</strong> (1 / 0). + title: Semnal Constant + desc: Ai deblocat <strong>semnalul constant</strong> pe stratul cabluri! + Acesta e util când e conectat la <strong>filtre de iteme</strong> + spre exemplu.<br><br> Semnalul constant poate emite o + <strong>formă</strong>, <strong>culoare</strong> sau + <strong>valoare binară</strong> (1/0). reward_logic_gates: - title: Logic Gates - desc: You unlocked <strong>logic gates</strong>! You don't have to be excited - about this, but it's actually super cool!<br><br> With those gates - you can now compute AND, OR, XOR and NOT operations.<br><br> As a - bonus on top I also just gave you a <strong>transistor</strong>! + title: Porți logice + desc: Ai deblocat <strong>porțile logice</strong>! Nu e necesar să fi încântat + despre asta, dar e super tare!<br><br> Ce aceste porți logice + poți procesa operațiile AND, OR, XOR și NOT.<br><br> Ca bonus + ți-am dat deblocat și <strong>tranzistorul</strong>! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - <strong>simulate the processing of shapes</strong>!<br><br> You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:<br><br> - - Build an <strong>automated machine</strong> to create any possible - shape requested by the HUB (I recommend to try it!).<br><br> - Build - something cool with wires.<br><br> - Continue to play - regulary.<br><br> Whatever you choose, remember to have fun! + title: Procesare Virtuală + desc: Tocmai ți-am dat o grămadă de construcții care îți permit să + <strong>simulezi procesarea formelor</strong>!<br><br> Acum poți simula + un tăietor, un rotitor, o mașină de presat și altele pe stratul cabluri! + Cu asta ai acum 3 opțiuni de a continua jocul:<br><br> - + Construiește o <strong>mașină automată</strong> care să creeze orice formă + posibilă cerută de HUB,(Recomand să încerci!).<br><br> - Construiește + ceva mișto cu cabluri.<br><br> - Continuă să joci normal. + <br><br> Orice ai alege, amintește-ți să te distrezi! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the <strong>Wires Layer</strong>: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!<br><br> For the beginning I unlocked you the <strong>Quad - Painter</strong> - Connect the slots you would like to paint with on - the wires layer!<br><br> To switch to the wires layer, press - <strong>E</strong>. <br><br> PS: <strong>Enable hints</strong> in - the settings to activate the wires tutorial!" + title: Cabluri și vopsitor cvadruplu + desc: "Tocmai ai deblocat <strong>Stratul Cabluri</strong>: Acesta este un strat + separat de stratul normal și introduce o tonă de noi + mechanici!<br><br> Pentru început am deblocat <strong>Vopsitorul + Cvadruplu</strong> - Conectează sloturile pe care le dorești colorate în + stratul cabluri!<br><br> Pentru a schimba straturile, apasă butonul + <strong>E</strong>. <br><br> PS: <strong>Activează indiciile</strong> în + setări pentru a activa tutorialul!" reward_filter: - title: Item Filter - desc: You unlocked the <strong>Item Filter</strong>! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.<br><br> You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filtru de iteme + desc: Ai deblocat <strong>Filtrul de iteme</strong>! El va direcționa itemele fie + catre output-ul de sus, fie către cel din dreapta în funcție daca acesta se + potrivește cu semnalul de pe stratul cabluri sau nu.<br><br> De asemenea îi poți + da un semnal de tip valoare binară (1/0) pentru a îl activa sau dezactiva complet. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Sfârșitul Versiunii Demo + desc: Ai ajuns la sfârșitul versiunii demo! settings: title: Setări categories: general: General - userInterface: User Interface - advanced: Advanced - performance: Performance + userInterface: Interfață Utilizator + advanced: Avansat + performance: Performanță versionBadges: dev: Dezvoltare staging: Beta @@ -746,17 +869,17 @@ settings: title: Scala de interfață description: Schimbă dimensiunea interfeței utilizatorului. Această interfață tot se va scala bazată pe rezoluția dispozitivului dumneavoastră - dar, această setare controlează cantitatea scalări. + dar această setare controlează cantitatea scalări. scales: super_small: Foarte mică small: Mică - regular: Normal + regular: Normală large: Mare - huge: Imens + huge: Enormă scrollWheelSensitivity: title: Sensitivitatea Zoom-ului description: Schimbă cât de sensitiv zoom-ul este (Fie roata mouse-ului ori - trackpadlui). + trackpadului). sensitivity: super_slow: Foarte încet slow: Încet @@ -769,7 +892,7 @@ settings: pot fi incomplete! fullscreen: title: Fullscreen - description: Este recomandat ca jocul să fie jucat în fullscreen pentru a aveam + description: Este recomandat ca jocul să fie jucat în fullscreen pentru a avea cea mai bună experiență. Doar disponibil în versiunea standalone. soundsMuted: @@ -785,9 +908,9 @@ settings: dark: Întunecată light: Luminoasă refreshRate: - title: Simulation Target - description: Dacă ai un monitor cu 144hz, schimbă refresh rate-ul aici și jocul - va simula la refresh rate-uri mai mari. Acesta poate de fapt + title: Rata de reîmprospătare + description: Dacă ai un monitor cu 144hz, schimbă rata de reîmprospătare aici și + focul va avea o rată de reîmprospătare mai mare. Acesta poate de fapt scădea FPS-urile dacă calculatorul dumneavoastră este prea lent. alwaysMultiplace: title: Plasare multiplă @@ -798,8 +921,7 @@ settings: title: Indicii & Tutoriale description: Dacă este activat, oferă indicii și tutoriale în timpul jocului. De asemenea ascunde anumite elemente ale interfeței utilizatorului - certain UI pâna la anumite nivele pentru a ușura înțelegerea - jocului. + pâna la anumite nivele pentru a ușura înțelegerea jocului. movementSpeed: title: Viteza de deplasare description: Modifică viteza cât de rapid se mișcă vederea folosind tastatura. @@ -816,8 +938,8 @@ settings: nefolositoare. Aceasta permite de asemenea tragerea tunelelor și tunelele în exces vor fi șterse. vignette: - title: Vignette - description: Dacă este activat, înnegrește colțurile ecranului și face textul + title: Vinietă + description: Dacă este activată, înnegrește colțurile ecranului și face textul mai ușor de citit. autosaveInterval: title: Intervalul de salvare automată @@ -832,77 +954,80 @@ settings: disabled: Dezactivat compactBuildingInfo: title: Informații ale construcțiilor compacte - description: Shortens info boxes for buildings by only showing their ratios. - Otherwise adescription and image is shown. + description: Scurtează casetele cu informații ale construcțiilor afișând doar rația. + Altfel se va afișa descrierea și imaginea. disableCutDeleteWarnings: title: Dezactivre Avertizări Tăiere/Ștergere - description: Dezactivează avertizările dialogului adus când sunt șterse mai mult + description: Dezactivează dialogul de avertizare atunci când sunt șterse mai mult de 100 de entități. enableColorBlindHelper: - title: Modul pentru orbi de culoare + title: Modul pentru daltoniști description: Activează diferite unelte care îți permit să joci jocul chiar dacă - ești orb de culoare. + ești daltonist. rotationByBuilding: title: Rotație după tipul clădirii description: Fiecare tip de clădire ține minte ultima rotație pe care i-ai setat-o individual. Aceasta poate fi mai confortabil dacă schimbi frecvent între tipurile clădirilor. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Volum sunet + description: Setează volumul pentru efecte sonore musicVolume: - title: Music Volume - description: Set the volume for music + title: Volum muzică + description: Setează volumul pentru muzică lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Randarea la calitate slabă ale resurselor hărții + description: Simplifică randarea resurselor pe hartă când marești/micșorezi + pentru a îmbunătăți performanța. În plus arată mai simplu, deci merită + să încerci! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Dezactivează grila + description: Dezactivarea grilei poate ajuta cu performanța. De asemenea face + jocul să arate mai curat. clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Curăță cursorul la apăsarea click dreapta + description: Activat în mod implicit, curăță cursorul când apeși click dreapta + în timp ce ai o clădire selectată pentru plasare. Dacă e dezactivat, + poți șterge direct construcția apasând click dreapta. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Texturi la calitate slabă(Urât) + description: Folosește texturi la calitate slabă pentru a salva performanța. + Va face jocul să arate mai urât. displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Afișează marginea chuck-urilor + description: Jocul e împărțit in chuck-uri de 16x16 pătrate, daca această setare + e activată atunci marginile chunk-urilor sunt vizibile. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Selectează extractorul + description: Activată în mod implicit, selectează extractorul daca folosești pepita + deasupra unui petic de resurse. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Benzi simplificate (Urât) + description: Nu randează itemele de pe bandă decât când ești deasupra pentru a + salva performanță. Nu recomand să joci cu această setare decât dacă este + absolut necesară mai multă performanță. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Activeză mișcare mouse + description: Permite harții să se deplaseze mutând cursorul la marginea + ecranului. Viteza depinde de setarea Viteză de Deplasare. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Zoom către Cursor + description: Dacă e activat zoom-ul se va aplica deasupra poziției mouseului, + altfel în mijlocul ecranului. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Mărime resurse hartă + description: Controlează dimensiunea formelor pe hartă (la micșorare) + shapeTooltipAlwaysOn: + title: Sfaturi Formă - Afișează mereu + description: Dacă se va afișa permanent sfalturi despre formă deasupra + construcțiilor, in schimbul afișării doar la apăsarea butonului ALT. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Tastele setate hint: "Indiciu: Asigură-te că foloseșto CTRL, SHIFT și ALT! Ele activează diferite opțiuni de plasare." - resetKeybindings: Reset Keyinbindings + resetKeybindings: Resetează controale tastatură categoryLabels: general: Aplicație ingame: Joc @@ -925,12 +1050,12 @@ keybindings: menuOpenShop: Upgrade-uri menuOpenStats: Statistici toggleHud: Comută interfața - toggleFPSInfo: Comută FPS and Debug Info + toggleFPSInfo: Comută FPS și informații depănare belt: Benzi Rulante underground_belt: Tunel miner: Extractor cutter: Tăietor - rotater: Rotate + rotater: Rotitor stacker: Mașină de presat mixer: Mixer de culori painter: Mașină de pictat @@ -952,29 +1077,34 @@ keybindings: mapMoveFaster: Deplasează-te mai repede lockBeltDirection: Activează planificator de benzi switchDirectionLockSide: "Planificator: Schimbă direcția" - pipette: Pipette - menuClose: Close Menu - switchLayers: Switch layers - wire: Energy Wire - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing + pipette: Pipetă + menuClose: Închidere meniu + switchLayers: Schimbare straturi + wire: Cabluri Energie + balancer: Balansor + storage: Stocare + constant_signal: Semnal Constant + logic_gate: Poartă logică + lever: Întrerupător (normal) + filter: Filtru + wire_tunnel: Intersecție cabluri display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + reader: Cititor benzi + virtual_processor: Tăietor virtual + transistor: Tranzistor + analyzer: Analizator de formă + comparator: Comparator + item_producer: Producător iteme (Sandbox) + copyWireValue: "Cabluri: copiază valoarea de sub cursor" + rotateToUp: "Rotește: Direcționează în sus" + rotateToDown: "Rotește: Direcționează în jos" + rotateToRight: "Rotește: Direcționează în dreapta" + rotateToLeft: "Rotește: Direcționează în stânga" + constant_producer: Producător Constant + goal_acceptor: Acceptor de obiectiv + block: Bloc + massSelectClear: Ștergere benzi + showShapeTooltip: Afișează sfat cu forma de output about: title: Despre acest joc body: >- @@ -1000,63 +1130,147 @@ demo: exportingBase: Exportul întregii baze ca imagine settingNotAvailable: Nu este valabil în demo. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing <b>R</b>. - - Holding <b>CTRL</b> allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use <b>T</b> to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with <b>T</b> - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding <b>SHIFT</b> will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding <b>CTRL</b> allows to place multiple buildings. - - You can hold <b>ALT</b> to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use <b>CTRL</b> + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - HUB-ul acceptă orice fel de input, nu doar forma cerută curent! + - Asigură-te ca fabricile sunt modulare - o să merite! + - Nu construi prea aproape de HUB, altfel va fi un haos! + - Daca stivuirea nu merge, încearcă să interschimbi input-urile. + - Poși modifica sirecția planuitorului de benzi apăsând <b>R</b>. + - Apăsarea <b>CTRL</b> apermite tragerea benzilor fără orientare automată. + - Rațiile stau la fel, cât timp upgrade-urile sunt de același nivel. + - Executarea în serie e mai eficientă decât cea în paralel. + - Vei debloca alte variante ale construcțiilor mai târziu! + - Poți folosi <b>T</b> pentru a schimba prin diferitele variante. + - Simetria e cheia! + - Poți folosi tipuri diferite de tunele alternativ. + - Încearcă să construiești fabrici compacte - o să merite mai târziu! + - Pictorul are o variantă în oglindă pe care o puteți selecta cu <b>T</b> + - Având rapoartele de construcție corecte va maximiza eficiența. + - La nivelul maxim, 5 extractoare vor umple o singură bandă. + - Nu uita de tunele! + - Nu e nevoie să împărțiți itemele în mod egal pentru o eficiență deplină. + - Apăsând <b>SHIFT</b> va activa planificatorul de benzi, permițându-vă să plasați + linii lungi de benzi cu ușurință. + - Tăietoarele taie întotdeauna vertical, indiferent de orientarea lor. + - Pentru a obține alb amestecați toate cele trei culori. + - Buffer-ul de stocare prioritizează primul output. + - Investiți timp pentru a construi modele repetabile - merită! + - Apăsând <b>CTRL</b> permite amplasarea mai multor clădiri. + - Poți ține apăsat <b>ALT</b> pentru a inversa direcția benzilor plasate. + - Eficiența e cheia! + - Patch-urile de formă care sunt mai departe de hub sunt mai complexe. + - Mașinile au o viteză limitată, împărțiți-le pentru o eficiență maximă. + - Folosiți balansoare pentru a vă maximiza eficiența. + - Organizarea este importantă. Încercați să nu intersectați benzile prea mult. + - Planificați din timp, sau va fi un haos uriaș! + - Nu vă ștergeți vechile fabrici! Veți avea nevoie de ele pentru a debloca upgrade-urile. + - Încercați să bateți singur nivelul 20 înainte de a căuta ajutor! + - Nu complica lucrurile, încearcă să rămâi simplu și vei merge departe. + - Poate fi necesar să reutilizați fabricile mai târziu în joc. Planificați-vă fabricile + pentru a fi reutilizabile. + - Uneori, puteți găsi o formă necesară pe hartă fără a o crea cu + stivuitoare. + - Morile de vânt complete nu pot niciodată să apară în mod natural. + - Colorează-ți formele înainte de tăiere pentru o eficiență maximă. + - Cu module, spațiul este doar o percepție; o preocupare pentru oamenii muritori. + - Realizați o fabrică separată de planuri. Sunt importante pentru module. + - Aruncați o privire mai atentă asupra mixerului de culori, iar întrebările tale vor primi răspuns. + - Utilizați <b> CTRL </b> și faceți clic pentru a selecta o zonă. + - Construirea prea aproape de hub poate împiedica proiectele ulterioare. + - Pictograma de fixare de lângă fiecare formă din lista de upgrade o fixează pe ecran. + - Amestecați toate culorile primare împreună pentru a face alb! + - Aveți o hartă infinită, nu vă strângeți fabrica, extindeți-vă! + - Încercați și Factorio! Este jocul meu preferat. + - Tăietoarele cvadruple tăie în sensul acelor de ceasornic începând din dreapta sus! + - Puteți descărca salvările din meniul principal! + - Acest joc are o mulțime de scurtături de taste utile! Asigurați-vă că verificați + pagina de setări. + - Acest joc are o mulțime de setări, asigurați-vă că le verificați! + - Marcatorul de la HUB are o busolă mică pentru a indica direcția sa! + - Pentru a curăța centurile, tăiați zona și apoi lipiți-o în aceeași locație. + - Apăsați F4 pentru a afișa FPS și Tick Rate-ul. + - Apăsați de două ori F4 pentru a afișa căsuța mouse-ului și a camerei. + - Puteți face clic pe o formă fixată din partea stângă pentru a o anula. +puzzleMenu: + play: Joacă + edit: Editează + title: Titlu + createPuzzle: Crează puzzle + loadPuzzle: Încarcă + reviewPuzzle: Revizuie și publică + validatingPuzzle: Validează Puzzle + submittingPuzzle: Trimite Puzzle + noPuzzles: Nu există momentan niciun puzzle în această secțiune. + categories: + levels: Niveluri + new: Nou + top-rated: Cele mai apreciate + mine: Puzzle-urile mele + easy: Ușor + hard: Greu + completed: Completat + medium: Medium + official: Official + trending: În trending azi + trending-weekly: În treding săptămânal + categories: Categorii + difficulties: După Dificultate + account: Puzzle-urile mele + search: Căutare + validation: + title: Puzzle Invalid + noProducers: Te rugăm plasează un producător constant! + noGoalAcceptors: Te rugăm plasează un acceptor de obiective! + goalAcceptorNoItem: Unul sau mai multe acceptoare de obiective nu au stabilit niciun + item. Livrează o formă la ele pentru a continua. + goalAcceptorRateNotMet: Unul sau mai multe acceptoare de obiective nu primesc suficiente + iteme. Asigură-te că indicatoarele sunt verzi pentru toate acceptoarele. + buildingOutOfBounds: Una sau mai multe construcții sunt în afara ariei de construcție. + Mărește zona sau șterge-le. + autoComplete: Puzzle-ul tău se completeaza automat! Asigură-te că producătoarele + constante nu livrează direct către acceptoarele de obiective. + difficulties: + easy: Ușor + medium: Medium + hard: Greu + unknown: Neevaluat + dlcHint: Ai cumpărat deja DLC-ul? Asigură-te ca e activat pe + shapez.io în biblioteca ta, selectând Properietăți > DLC-uri. + search: + action: Caută + placeholder: Introdu Puzzle sau autor + includeCompleted: Include completate + difficulties: + easy: Ușor + medium: Medium + hard: Greu + durations: + any: Orice durată + short: Scurt (< 2 minute) + medium: Normal + long: Lung (> 10 minute) +backendErrors: + ratelimit: Efectuați acțiuni prea repede. Vă rugăm să așteptați puțin. + invalid-api-key: Comunicarea cu serverul a eșuat. Vă rugăm actualizați/reporniți + jocul (Invalid Api Key). + unauthorized: Comunicarea cu serverul a eșuat. Vă rugăm actualizați/reporniți + jocul (Unauthorized). + bad-token: Comunicarea cu serverul a eșuat. Vă rugăm actualizați/reporniți + jocul (Bad Token). + bad-id: Identificator Puzzle Invalid + not-found: Puzzle-ul căutat nu poate fi găsit + bad-category: Categoria căutată nu poate fi găsită + bad-short-key: Cheia scurtă furnizată este invalidă + profane-title: Titlul puzzle-ului contine cuvinte vulgare. + bad-title-too-many-spaces: Titlul puzzle-ului prea scurt. + bad-shape-key-in-emitter: Un producător constant are un item invalid. + bad-shape-key-in-goal: Un acceptor de obiectiv are un item invalid. + no-emitters: Puzzle-ul tău nu conține niciun producător constant + no-goals: Puzzle-ul tău nu conține niciun acceptor de obiectiv. + short-key-already-taken: Această cheie scurtă e deja folosită. Alege alta. + can-not-report-your-own-puzzle: Nu îți poți raporta propriul puzzle. + bad-payload: Cererea conține date invalide. + bad-building-placement: Puzzle-ul conține construcții așezate in mod nepermis. + timeout: Cererea a expirat. + too-many-likes-already: Acest puzzle are deja prea multe aprecieri. Dacă tot îl + dorești înlăturat, te rog contactează-ne la support@shapez.io! + no-permission: Nu ai permisiunea de a face acest lucru. diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index 001c3642..e5c03c19 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -5,14 +5,14 @@ steamPage: intro: >- Любите игры про автоматизацию? Тогда вы по адресу! - shapez.io это спокойная игра, в которой вам предстоит строить фабрики по автоматизированному производству геометрических фигур. По мере управления уровня, фигуры становятся все сложнее, так что придется расширять фабрику засчет бесконечной карты. + shapez.io это спокойная игра, в которой вам предстоит строить фабрики по автоматизированному производству геометрических фигур. По мере управления уровня, фигуры становятся все сложнее, так что придется расширять фабрику за счет бесконечной карты. - Если этого мало, то Вам так же придется экспоненциально увеличивать производство, чтобы удовлетворить потребности Вашей фабрики. Ключ к успеху - масштабирование! И если в начале вам понадобится обрабатывать только формы, то позже вы начнёте их раскрашивать, добывая и комбенируя красители. + Если этого мало, то Вам так же придется экспоненциально увеличивать производство, чтобы удовлетворить потребности Вашей фабрики. Ключ к успеху - масштабирование! И если в начале вам понадобится обрабатывать только формы, то позже вы начнёте их раскрашивать, добывая и комбинируя красители. Вначале игры Вам понадобится производить только фигуры, однако позже фигуры надо будет окрашивать. Для этого добывайте и смешивайте краски! Приобретение игры в Steam предоставляет доступ к полной версии игры, но вы можете опробовать демоверсию игры на shapez.io и принять решение позже! - what_others_say: What people say about shapez.io + what_others_say: Что говорят люди о shapez.io nothernlion_comment: This game is great - I'm having a wonderful time playing, and time has flown by. notch_comment: Oh crap. I really should sleep, but I think I just figured out @@ -51,26 +51,33 @@ global: escape: ESC shift: SHIFT space: ПРОБЕЛ + loggingIn: Logging in demoBanners: title: Демоверсия intro: Приобретите полную версию, чтобы разблокировать все возможности! mainMenu: play: Играть + continue: Продолжить + newGame: Новая Игра changelog: Список изменений + subreddit: Reddit importSavegame: Импорт openSourceHint: Это игра с открытым исходным кодом! discordLink: Официальный Дискорд сервер helpTranslate: Помоги с переводом! + madeBy: Создал <author-link> browserWarning: Извините, но игра работает медленно в вашем браузере! Приобретите полную версию или загрузите Google Chrome, чтобы ознакомится с игрой в полной мере. savegameLevel: Уровень <x> savegameLevelUnknown: Неизвестный уровень - continue: Продолжить - newGame: Новая Игра - madeBy: Создал <author-link> - subreddit: Reddit savegameUnnamed: Без названия + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -84,6 +91,9 @@ dialogs: viewUpdate: Посмотреть Обновление showUpgrades: Показать Улучшения showKeybindings: Показать Управление (Привязку клавиш) + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Ошибка импортирования text: Не удалось импортировать сохранение игры. @@ -109,15 +119,15 @@ dialogs: «Esc» для отмены. resetKeybindingsConfirmation: title: Сброс управления - desc: Это сбросит все настройки управления к их значениям по умолчанию. - Подтвердите это действие. + desc: Это сбросит все настройки управления к значениям по умолчанию. Подтвердите + это действие. keybindingsResetOk: title: Сброс управления desc: Настройки управления сброшены до соответствующих значений по умолчанию! featureRestriction: title: Демоверсия desc: Вы попытались получить доступ к функции (<feature>), которая недоступна в - демоверсии. Вы можете приобрести полную версию чтобы пользоваться + демоверсии. Вы можете приобрести полную версию, чтобы пользоваться всеми функциями! oneSavegameLimit: title: Лимит сохранений @@ -136,6 +146,14 @@ dialogs: title: Подтвердить удаление desc: "Вы собираетесь удалить много построек (точнее: <count>)! Вы действительно хотите сделать это?" + massCutConfirm: + title: Подтвердите вырезку + desc: "Вы собираетесь вырезать много зданий (точнее: <count>)! Вы уверены, что + хотите это сделать?" + massCutInsufficientConfirm: + title: Подтвердите вырезку + desc: Вы не можете позволить себе вставить эту область! Вы уверены, что хотите + вырезать её? blueprintsNotUnlocked: title: Еще не открыто desc: Чертежи еще не открыты! Завершите больше уровней, чтобы открыть их. @@ -150,31 +168,23 @@ dialogs: Инвертировать направление размещаемых конвейерных лент.<br>" createMarker: title: Новый маркер + titleEdit: Редактирование маркера desc: Дайте ему значимое название, вы также можете добавить <strong>короткий ключ</strong> фигуры (Который можно сгенерировать <link>здесь</link>) - titleEdit: Редактирование маркера - markerDemoLimit: - desc: Вы можете создать только 2 своих маркера в демоверсии. Приобретите полную - версию для безлимитных маркеров. - massCutConfirm: - title: Подтвердите вырезку - desc: "Вы собираетесь вырезать много зданий (точнее: <count>)! Вы уверены, что - хотите это сделать?" - exportScreenshotWarning: - title: Экспорт скриншота - desc: Вы собираетесь экспортировать вашу базу в виде скриншота. Обратите - внимание, что это может быть довольно медленным процессом для - большой базы и даже привести к аварийному завершению игры! - massCutInsufficientConfirm: - title: Подтвердите вырезку - desc: Вы не можете позволить себе вставить эту область! Вы уверены, что хотите - вырезать ее? editSignal: title: Установить Сигнал descItems: "Выберите объект:" descShortKey: ... или введите <strong>короткий ключ</strong> фигуры (Который можно сгенерировать <link>здесь</link>) + markerDemoLimit: + desc: Вы можете создать только 2 своих маркера в демоверсии. Приобретите полную + версию для безлимитных маркеров. + exportScreenshotWarning: + title: Экспорт скриншота + desc: Вы собираетесь экспортировать вашу базу в виде скриншота. Обратите + внимание, что это может быть довольно медленным процессом для + большой базы и даже привести к аварийному завершению игры! renameSavegame: title: Переименовать Сохранение desc: Здесь вы можете изменить название своего сохранения. @@ -185,6 +195,71 @@ dialogs: title: Доступно обучение desc: Для этого уровня доступно видео-обучение, но только на английском языке. Посмотрите его? + editConstantProducer: + title: Установить предмет + puzzleLoadFailed: + title: Не удалось загрузить головоломки + desc: "К сожалению, не удалось загрузить головоломки:" + submitPuzzle: + title: Отправить головоломку + descName: "Дайте имя вашей головоломке:" + descIcon: "Введите уникальный короткий ключ, который будет показан как иконка + вашей головоломки (Вы можете сгенерировать их <link>здесь</link>, + или выбрать один из случайно предложенных фигур ниже):" + placeholderName: Название головоломки + puzzleResizeBadBuildings: + title: Невозможно изменить размер + desc: Нельзя уменьшить область, потому что некоторые постройки будут вне + области. + puzzleLoadError: + title: Bad Puzzle + desc: "Не удалось загрузить головоломки:" + offlineMode: + title: Оффлайн режим + desc: Нам не удалось связаться с сервеами, поэтому игра будет работать в оффлайн + режиме. Убедитесь, что вы подключены к интернету. + puzzleDownloadError: + title: Ошибка загрузки + desc: "Не удалось загрузить головломку:" + puzzleSubmitError: + title: Ошибка отправки + desc: "Не удалось отправить вашу головоломку:" + puzzleSubmitOk: + title: Головоломка опубликована + desc: Поздравляю! Ваша головоломка была опубликована, и теперь в нее могут + играть остальные. Теперь вы можете найти ее в разделе "Мои + головоломки". + puzzleCreateOffline: + title: Оффлайн режим + desc: Поскольку вы не в сети, вы не сможете сохранять и / или публиковать свои + головоломки. Вы все еще хотите продолжить? + puzzlePlayRegularRecommendation: + title: Рекомендация + desc: Я <strong>настоятельно</strong> рекомендую пройти обычную игру до уровня + 12 перед игрой в Puzzle DLC, иначе вы можете встретить + непредставленные механики. Вы все еще хотите продолжить? + puzzleShare: + title: Короткий ключ скопирован + desc: Короткий ключ головоломки (<key>) был скопирован в буфер обмена! Он может + быть введен в меню головолом для доступа к головоломке. + puzzleReport: + title: Жалоба на головоломку + options: + profane: Оскорбительная + unsolvable: Не решается + trolling: Троллинг + puzzleReportComplete: + title: Спасибо за ваш отзыв! + desc: Головоломка была помечена. + puzzleReportError: + title: Не удалось сообщить + desc: "Ваша жалоба не может быть обработана:" + puzzleLoadShortKey: + title: Ввод короткого ключа + desc: Введите короткий ключ головоломки, чтобы загрузить ее. + puzzleDelete: + title: Удалить головоломку? + desc: Вы уверены, что хотите удалить '<title>'? Это действие нельзя отменить! ingame: keybindingsOverlay: moveMap: Передвижение @@ -206,6 +281,17 @@ ingame: clearSelection: Отменить pipette: Пипетка switchLayers: Переключить слои + clearBelts: Clear belts + colors: + red: Красный + green: Зеленый + blue: Синий + yellow: Желтый + purple: Фиолетовый + cyan: Бирюзовый + white: Белый + uncolored: Бесцветный + black: Черный buildingPlacement: cycleBuildingVariants: Нажмите <key> для переключения вариантов. hotkeyLabel: "Клавиша: <key>" @@ -263,36 +349,41 @@ ingame: waypoints: Маркеры hub: ХАБ description: ЛКМ по маркеру, чтобы переместиться к нему, ПКМ, чтобы удалить. - <br><br>Нажмите <keybinding> чтобы создать маркер в текущей позиции + <br><br> Нажмите <keybinding> чтобы создать маркер в текущей позиции или <strong>ПКМ</strong>, чтобы выбрать другое место для создания маркера. creationSuccessNotification: Маркер создан. + shapeViewer: + title: Слои + empty: Пусто + copyKey: Копировать interactiveTutorial: title: Обучение hints: 1_1_extractor: Поместите <strong>экстрактор</strong> на <strong>фигуру в форме - круга</strong> чтобы добыть ее! - 1_2_conveyor: "Соедините экстрактор <strong>конвейером</strong> с - хабом!<br><br>Подсказка: Необходимо выбрать конвейер и - <strong>нажать и потащить</strong> мышку!" + круга</strong>, чтобы добыть её! + 1_2_conveyor: "Соедините экстрактор <strong>конвейером</strong> с хабом!<br><br> + Подсказка: Необходимо выбрать конвейер и <strong>нажать и + потащить</strong> мышку!" 1_3_expand: "Это <strong>НЕ</strong> idle-игра! Постройте больше экстракторов и - конвейеров, чтобы достичь цели быстрее.<br><br>Подсказка: - Удерживайте <strong>SHIFT</strong> чтобы разместить несколько - экстракторов, а <strong>R</strong> чтобы вращать их." + конвейеров, чтобы достичь цели быстрее.<br><br> Подсказка: + Удерживайте <strong>SHIFT</strong>, чтобы разместить несколько + экстракторов, а <strong>R</strong>, чтобы вращать их." 2_1_place_cutter: "Разместите <strong>Резак</strong> для разрезания кругов на - две половины! <br><br> PS: Резак всегда разрезает <strong>сверху - вниз</strong> независимо от ориентации." + две половины!<br><br> Подсказка: Резак всегда разрезает + <strong>сверху вниз</strong> независимо от ориентации." 2_2_place_trash: Резак может <strong>засориться и остановиться</strong>!<br><br> - Используйте <strong>мусорку</strong> что бы избавиться от в - данный момент (!) ненужных частей. + Используйте <strong>мусорку</strong>, чтобы избавиться в данный + момент (!) от ненужных частей. 2_3_more_cutters: "Хорошая работа! Теперь разместите <strong>ещё 2 - резака</strong> что бы ускорить этот медленный процесс!<br><br> - PS: Используйте <strong>клавиши 0-9 </strong> для быстрого - доступа к постройкам!" + резака</strong>, чтобы ускорить этот медленный процесс!<br><br> + Подсказка: Используйте <strong>клавиши 0-9 </strong> для + быстрого доступа к постройкам!" 3_1_rectangles: "Теперь давайте извлечём немного прямоугольников! <strong>Постройте 4 экстрактора</strong>и соедините их с - хабом.<br><br> PS: Удерживайте <strong>SHIFT</strong> во время - удерживания конвейера для активации планировщика конвейеров!" + хабом.<br><br> Подсказка: Удерживайте <strong>SHIFT</strong> во + время удерживания конвейера для активации планировщика + конвейеров!" 21_1_place_quad_painter: Разместите <strong>покрасчик для 4 предметов</strong> и получите <strong>круги</strong>, <strong>белого</strong> и <strong>красного</strong> цветов! @@ -301,24 +392,10 @@ ingame: входы</strong> покрасчика кабелями! 21_3_place_button: Отлично! Теперь разместите <strong>Переключатель</strong> и присоедини его проводами! - 21_4_press_button: "Нажмите на переключатель что бы заставить его + 21_4_press_button: "Нажмите на переключатель, чтобы заставить его <strong>выдавать истинный сигнал </strong> и активировать этим - покрасчика.<br><br> PS: Не обязательно соединять все входы! - Достаточно двух." - colors: - red: Красный - green: Зеленый - blue: Синий - yellow: Желтый - purple: Фиолетовый - cyan: Бирюзовый - white: Белый - uncolored: Бесцветный - black: Черный - shapeViewer: - title: Слои - empty: Пусто - copyKey: Копировать + покрасчик.<br><br> Подсказка: Не обязательно соединять все + входы! Достаточно двух." connectedMiners: one_miner: 1 Экстрактор n_miners: <amount> Экстрактора(-ов) @@ -332,29 +409,72 @@ ingame: no_thanks: Нет, спасибо! points: levels: - title: 12 Новых Уровней! + title: 12 Новых Уровней desc: Всего 26 уровней! buildings: - title: 18 новых Построек! + title: 18 новых Построек desc: Полностью автоматизируйте свою фабрику! + achievements: + title: Достижения + desc: Получи их все! upgrades: - title: ∞ стадий улучшений! + title: ∞ стадий улучшений desc: В демоверсии всего 5! markers: - title: ∞ Маркеров! + title: ∞ Маркеров desc: Никогда не теряйтесь в своей фабрике! wires: - title: Провода! + title: Провода desc: Полноценное дополнительное измерение! darkmode: - title: Темная Тема! + title: Темная Тема desc: Дайте глазам отдохнуть! support: title: Поддержите меня desc: Я занимаюсь разработкой в свободное время! - achievements: - title: Achievements - desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Область + zoneWidth: Ширина + zoneHeight: Высота + trimZone: Обрезать + clearItems: Очистить предметы + share: Поделиться + report: Пожаловаться + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Редактор головоломок + instructions: + - 1. Разместите <strong>постоянный производитель</strong>, чтоб + предоставить фигуры и цвета игроку + - 2. Постройте одну или несколько фигур, которые вы хотите, чтобы + игрок построил позже, и доставьте их к одному или нескольким + <strong>приемникам цели</strong> + - 3. Как только приемник цели получил фигуру определенное количество + раз, он <strong>сохраняет фигуру как цель</strong>, которую игрок + должен произвести позже (Обозначается <strong>зеленым + значком</strong>). + - 4. Нажмите <strong>кнопу блокировки</strong> на здании, чтоб + выключить его. + - 5. Как только вы нажали "Обзор", ваша головоломка будет проверена + и вы сможете опубликовать ее. + - 6. После публикации, <strong>все постройки будут удалены</strong> + за исключением производителей и приемников цели - Это часть, в + которой игрок должен разобраться сам :) + puzzleCompletion: + title: Головоломка завершена! + titleLike: "Нажмите на сердечко, если головоломка вам понравилась:" + titleRating: Насколько сложной была головоломка? + titleRatingDesc: Ваша оценка поможет мне в будущем делать вам лучшие предложения + continueBtn: Продолжить игру + menuBtn: Меню + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Автор + shortKey: Короткий ключ + rating: Сложность + averageDuration: Средн. продолжительность + completionRate: Процент завершения shopUpgrades: belt: name: Конвейеры, Разделители & Туннели @@ -369,6 +489,11 @@ shopUpgrades: name: Смешивание & Покраска description: Скорость x<currentMult> → x<newMult> buildings: + hub: + deliver: Доставить + toUnlock: чтобы открыть + levelShortcut: Ур. + endOfDemo: Конец Демо belt: default: name: Конвейер @@ -390,6 +515,22 @@ buildings: tier2: name: Туннель II description: Позволяет перевозить ресурсы под зданиями и конвейерами. + balancer: + default: + name: Балансер + description: Многофункциональный - равномерно распределяет все входы на выходы. + merger: + name: Соединитель (компактный) + description: Соединяет две линии конвейера в одну. + merger-inverse: + name: Соединитель (компактный) + description: Соединяет две линии конвейера в одну. + splitter: + name: Разделитель (компактный) + description: Разделяет одну линию конвейера на две. + splitter-inverse: + name: Разделитель (компактный) + description: Разделяет одну линию конвейера на две. cutter: default: name: Резак @@ -415,7 +556,7 @@ buildings: default: name: Объединитель description: Объединяет два предмета. Если они не могут быть соединены, правый - элемент помещается над левым. + элемент помещается поверх левого. mixer: default: name: Смешиватель @@ -424,6 +565,9 @@ buildings: default: name: Покрасчик description: Красит всю фигуру из левого входа красителем из перпендикулярного. + mirrored: + name: Покрасчик + description: Красит всю фигуру из левого входа красителем из перпендикулярного. double: name: Покрасчик (2Вх.) description: Красит фигуру из левых входов красителем из перпендикулярного. @@ -432,18 +576,15 @@ buildings: description: Позволяет отдельно окрашивать каждую часть фигуры. Только ячейки с <strong>положительным сигналом</strong> на слое с проводами будут окрашены! - mirrored: - name: Покрасчик - description: Красит всю фигуру из левого входа красителем из перпендикулярного. trash: default: name: Мусорка description: Имеет входы со всех сторон. Уничтожает все принимаемые ресурсы. - hub: - deliver: Доставить - toUnlock: чтобы открыть - levelShortcut: Ур. - endOfDemo: Конец Демо + storage: + default: + name: Буферное Хранилище + description: Хранит излишние ресурсы пока есть место. Левый выход в приоритете, + может быть использован как буфер. wire: default: name: Энерг. провод @@ -453,31 +594,10 @@ buildings: description: Передает сигналы, которые могут быть ресурсами, цветами или логическими значениями (1 / 0). Провода разных цветов не соединяются. - balancer: - default: - name: Балансер - description: Многофункциональный - равномерно распределяет все входы на выходы. - merger: - name: Соединитель (компактный) - description: Соединяет две линии ковейера в одну. - merger-inverse: - name: Соединитель (компактный) - description: Соединяет две линии ковейера в одну. - splitter: - name: Разделитель (компактный) - description: Разделяет одну линию конвейера на две. - splitter-inverse: - name: Разделитель (компактный) - description: Разделяет одну линию конвейера на две. - storage: - default: - name: Буферное Хранилище - description: Хранит излишние ресурсы пока есть место. Левый выход в приоритете, - может быть использован как буфер. wire_tunnel: default: name: Пересечение Проводов - description: Позволяет пересекать провода при этом их не соединяя. + description: Позволяет пересекать провода при этом не соединяя их. constant_signal: default: name: Постоянный Сигнал @@ -487,8 +607,8 @@ buildings: default: name: Переключатель description: Может быть переключен, чтобы издавать логический сигнал (1 / 0) на - слое с проводами, который может быть использован для управления - Фильтром, например. + слое с проводами, который может быть использован, например, для + управления Фильтром. logic_gate: default: name: И @@ -507,16 +627,26 @@ buildings: name: ИЛИ description: Издает значение "1" если хотя бы один вход положительный. (Положительный - значит ресурс, цвет или логическое значение - "1"). + "1") + transistor: + default: + name: Транзистор + description: Пропускает предметы только если вход сбоку имеет истинное значение + (фигура, цвет или "1"). + mirrored: + name: Транзистор + description: Пропускает предметы только если вход сбоку имеет истинное значение + (фигура, цвет или "1"). filter: default: name: Фильтр description: Подключите сигнал, чтобы направить все подходящие ресурсы наверх, а - остальные направо. Также контролируемо логическими сигналами. + остальные направо. Также может контролироваться логическими + сигналами. display: default: name: Экран - description: Подключите сигнал, чтобы отобразить его на экране. Это может + description: Подключите сигнал, чтобы отобразить его на экране. Это может быть ресурс, цвет или логическое значение (1 / 0). reader: default: @@ -528,7 +658,7 @@ buildings: default: name: Анализатор Фигур description: Анализирует правую верхнюю часть низшего слоя фигуры и возвращает - ее форму и цвет. + её форму и цвет. comparator: default: name: Сравнить @@ -558,23 +688,26 @@ buildings: name: Генератор Ресурсов description: Доступен только в режиме песочницы, производит заданный на слое с проводами сигнал на обычном слое. - transistor: + constant_producer: default: - name: Транзистор - description: Пропускает предметы только если вход сбоку имеет истинноре значение - (фигура, цвет или "1"). - mirrored: - name: Транзистор - description: Пропускает предметы только если вход сбоку имеет истинноре значение - (фигура, цвет или "1"). + name: Постоянный производитель + description: Постоянно выводит указанную фигуру или цвет. + goal_acceptor: + default: + name: Приемник цели + description: Доставьте фигуру в приемник, чтобы установить их в качестве цели. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Разрезание Фигур desc: Разблокирован <strong>резак</strong>, который разрезает фигуры пополам по - вертикали <strong>независимо от ориентации</strong>!<br><br>Не + вертикали <strong>независимо от ориентации</strong>!<br><br> Не забудьте избавляться от излишков, иначе <strong>он забьется и остановится</strong> - для этого я также открыл для Вас - <strong>мусорку</strong>, которая уничтожает все, что в нее + <strong>мусорку</strong>, которая уничтожает все, что в неё попадает! reward_rotater: title: Вращение @@ -584,29 +717,29 @@ storyRewards: title: Покраска desc: "Разблокирован <strong>покрасчик</strong>! Добудьте краситель из жилы (так же, как и фигуры) и объедините его с фигурой в покрасчике, чтобы - раскрасить ее!<br><br>PS: Если вы дальтоник, то в настройках есть - <strong>Режим Дальтоника</strong>!" + раскрасить её!<br><br> Подсказка: Если вы дальтоник, то в настройках + есть <strong>Режим Дальтоника</strong>!" reward_mixer: title: Смешивание Цветов - desc: Разблокирован <strong>смешиватель</strong>! Объедините два цвета в этом - здании, используя <strong>аддитивное смешивание</strong>! + desc: Разблокирован <strong>смешиватель</strong>! Позволяет объединять два + цвета, используя <strong>аддитивное смешивание</strong>! reward_stacker: title: Объединитель desc: Теперь вы можете объединять фигуры <strong>объединителем</strong>! Фигуры - из обеих входов объединяются. Если они могут быть расположены рядом + из обоих входов совмещаются. Если они могут быть расположены рядом друг с другом, они будут <strong>соединены</strong>, иначе фигура из правого входа <strong>наложится</strong> на фигуру из левого! - reward_splitter: - title: Разделитель / Соединитель - desc: Разблокирован <strong>разделитель</strong> один из вариантов - <strong>балансера</strong> - он принимает один вход и разделяет его - на два! + reward_balancer: + title: Балансер + desc: Многофункциональный <strong>балансер</strong> разблокирован - Он + используется для <strong>разделения и обьединения потока + предметов</strong> на несколько конвейеров! reward_tunnel: title: Туннель desc: Разблокирован <strong>туннель</strong>! Теперь вы можете транспортировать предметы под другими конвейерами и зданиями! reward_rotater_ccw: - title: Вращатель (обратный) + title: Обратный Вращатель desc: Разблокирован вариант <strong>вращателя</strong>, вращающий фигуры против часовой стрелки! Чтобы построить его, выберите вращатель и <strong>нажмите 'T', чтобы переключить вариант</strong>! @@ -614,12 +747,27 @@ storyRewards: title: Цепной Экстрактор desc: "Разблокирован <strong>цепной экстрактор</strong>! Он может <strong>передавать свои ресурсы</strong> другим экстракторам, чтобы - вы могли эффективнее извлекать ресурсы!<br><br> PS: Старый + вы могли эффективнее извлекать ресурсы!<br><br> Подсказка: Старый экстрактор был заменен в панели инструментов!" reward_underground_belt_tier_2: title: Туннель II desc: Разблокирован новый вариант <strong>туннеля</strong> с <strong>большей дальностью</strong>, а также вы можете совмещать эти туннели! + reward_merger: + title: Компактный Соединитель + desc: Разблокирован <strong>соединитель</strong> - вариант + <strong>балансера</strong> - он принимает два входа и объединяет их + в один конвейер. + reward_splitter: + title: Разделитель / Соединитель + desc: Разблокирован <strong>разделитель</strong>, один из вариантов + <strong>балансера</strong> - он принимает один вход и разделяет его + на два! + reward_belt_reader: + title: Измеритель + desc: Разблокирован <strong>измеритель</strong>! Он позволяет измерять + пропускную способность конвейера.<br><br> Вы узнаете, как он + полезен, когда разблокируете провода! reward_cutter_quad: title: Резак (4 Выхода) desc: Разблокирован вариант <strong>резака</strong>, разрезающий фигуры на @@ -632,64 +780,46 @@ storyRewards: reward_storage: title: Буферное Хранилище desc: Разблокировано <strong>буферное хранилище</strong> - оно позволяет хранить - в нем ресурсы пока есть место! <br><br> Левый выход в приоритете, + в нем ресурсы пока есть место!<br><br> Левый выход в приоритете, может быть использован как <strong>буфер</strong>! - reward_freeplay: - title: Свободная игра - desc: У Вас получилось! Разблокирован <strong>свободный режим</strong>! Это - означает что теперь фигуры будут генерироваться - <strong>случайно</strong>!<br><br> Так как ХАБ отныне будет - требовать определенную <strong>пропускную способность</strong>, я - настоятельно рекомендую построить механизм, автоматически - доставляющий запрашиваемую фигуру!<br><br> ХАБ выводит запрашиваемую - фигуру на слое с проводами, так что все, что необходимо сделать, - - это проанализировать ее и автоматически настроить вашу фабрику. reward_blueprints: title: Чертежи desc: Теперь вы можете <strong>копировать и вставлять</strong> части вашей фабрики! Выберите область (Удерживая CTRL, перетащите мышь) и - нажмите 'C', чтобы скопировать ее.<br><br>Вставка <strong>не + нажмите 'C', чтобы скопировать её.<br><br> Вставка <strong>не бесплатна</strong>, для этого необходимо произвести <strong>фигуры - для чертежей</strong>! (Которые вы только что доставили). - no_reward: - title: Следующий уровень - desc: "Этот уровень не дал вам награды, но следующий даст! <br><br> PS: Лучше не - разрушайте вашу существующую фабрику - Вам понадобятся - <strong>все</strong> эти фигуры позже, чтобы <strong>разблокировать - улучшения</strong>!" - no_reward_freeplay: - title: Следующий уровень - desc: Поздравляем! Кстати, больше контента планируется для полной версии! - reward_balancer: - title: Балансер - desc: Многофункциональный <strong>балансер</strong> разблокирован - Он - используется для <strong>разделения и обьединения потока - предметов</strong> на несколько конвейеров! - reward_merger: - title: Компактный Соединитель - desc: Разблокирован <strong>соединитель</strong> - вариант - <strong>балансера</strong> - он принимает два входа и объединяет их - в один конвейер. - reward_belt_reader: - title: Измеритель - desc: Разблокирован <strong>измеритель</strong>! Он позволяет измерять - пропускную способность конвейера.<br><br>Вы узнаете, как он полезен, - когда разблокируете провода! + для чертежей</strong>! (Которые вы только что доставили) reward_rotater_180: title: Вращатель (180 градусов) desc: Разблокирован <strong>вращатель</strong> на 180 градусов! - Он позволяет - вращать фигур на 180 градусов (Сюрприз! :D) + вращать фигуры на 180 градусов (Сюрприз! :D) + reward_wires_painter_and_levers: + title: Провода & Покрасчик (4 входа) + desc: "Вы разблокировали <strong>Слой проводов</strong>: Это отдельный слой выше + обычного слоя и он предоставляет много новых механик!<br><br> Для + начала я разблокировал вам <strong>Покрасчик на 4 входа</strong> - + Соедини слоты которые нужно покрасить на слое проводов!<br><br> Для + переключения видимости слоя проводов, нажми + <strong>E</strong>.<br><br> Подсказка: <strong>Включи + подсказки</strong> в настройках, чтобы активировать обучение по + проводам!" + reward_filter: + title: Фильтр + desc: Разблокирован <strong>Фильтр</strong>! Он направит ресурсы наверх или + направо в зависмости от того, совпадают ли они с установленным + сигналом.<br><br> Вы также можете передавать логические значения (1 + / 0), чтобы полностью отключить или включить его. reward_display: title: Экран desc: "Разблокирован <strong>Экран</strong> - Подключите сигнал на слое с - проводами чтобы отобразить его!<br><br> PS: Заметили ли вы, что - измеритель и буферное хранилище отображают последний ресурс, + проводами, чтобы отобразить его!<br><br> Подсказка: Заметили ли вы, + что измеритель и буферное хранилище отображают последний ресурс, прошедший через них? Попробуйте отобразить его на экране!" reward_constant_signal: title: Постоянный Сигнал desc: Разблокирован <strong>постоянный сигнал</strong> на слое с проводами! Он - полезен для подключения к <strong>фильтрам</strong>, - например.<br><br> Постоянный сигнал может издавать + полезен, например, для подключения к + <strong>фильтрам</strong>.<br><br> Постоянный сигнал может издавать <strong>фигуру</strong>, <strong>цвет</strong> или <strong>логическое значение</strong> (1 / 0). reward_logic_gates: @@ -708,23 +838,27 @@ storyRewards: - Построить <strong>автоматический механизм</strong> для производства любой фигуры, запрашиваемой ХАБ (рекомендую попробовать!).<br><br> - Построить что-то клевое, используя - провода.<br><br> - Продолжить обычную игру. <br><br> Что бы вы не + провода.<br><br> - Продолжить обычную игру.<br><br> Чтобы вы не выбрали, не забывайте хорошо проводить время! - reward_wires_painter_and_levers: - title: Провода & Покрасчик (4 входа) - desc: "Вы разблокировали <strong>Слой проводов</strong>: Это отдельный слой выше - обычного слоя и он предоставляет много новых механик!<br><br> Для - начала я разблокировал тебе <strong>Покрасчик на 4 входа </strong> - - Соедини слоты которые нужно покрасить на слое проводов!<br><br> Для - переключения видимости слоя проводов, нажми <strong>E</strong>. - <br><br> PS: <strong>Включи подсказки</strong> в настройках что бы - активировать обучение по проводам!" - reward_filter: - title: Фильтр - desc: Разблокирован <strong>Фильтр</strong>! Он направит ресурсы наверх или - направо в зависмости от того, совпадают ли они с установленным - сигналом. <br><br> Вы также можете передавать логические значения (1 - / 0), чтобы полностью отключить или включить его. + no_reward: + title: Следующий уровень + desc: "Этот уровень не дал вам награды, но следующий даст!<br><br> Подсказка: + Лучше не разрушайте вашу существующую фабрику - Вам понадобятся + <strong>все</strong> эти фигуры позже, чтобы <strong>разблокировать + улучшения</strong>!" + no_reward_freeplay: + title: Следующий уровень + desc: Поздравляем! Кстати, больше контента планируется для полной версии! + reward_freeplay: + title: Свободная игра + desc: У Вас получилось! Разблокирован <strong>свободный режим</strong>! Это + означает что теперь фигуры будут генерироваться + <strong>случайно</strong>!<br><br> Так как ХАБ отныне будет + требовать определенную <strong>пропускную способность</strong>, я + настоятельно рекомендую построить механизм, автоматически + доставляющий запрашиваемую фигуру!<br><br> ХАБ выводит запрашиваемую + фигуру на слое с проводами, так что все, что необходимо сделать, - + это проанализировать её и автоматически настроить вашу фабрику. reward_demo_end: title: Конец Демо desc: Вы достигли конца демоверсии игры! @@ -740,6 +874,7 @@ settings: staging: Постановка prod: Произведена buildDate: Сборка <at-date> + rangeSliderPercentage: <amount> % labels: uiScale: title: Размер интерфейса @@ -753,6 +888,17 @@ settings: regular: Средний large: Большой huge: Огромный + autosaveInterval: + title: Интервал автосохранения + description: Управляет тем, как часто игра автоматически сохраняется. Также + здесь можно полностью отключить автосохранение. + intervals: + one_minute: 1 Минута + two_minutes: 2 Минуты + five_minutes: 5 Минут + ten_minutes: 10 Минут + twenty_minutes: 20 Минут + disabled: Отключено scrollWheelSensitivity: title: Чувствительность зума description: Изменяет чувствительность зума (колесико мыши или сенсорная @@ -763,10 +909,25 @@ settings: regular: Средне fast: Быстро super_fast: Очень быстро + movementSpeed: + title: Скорость движения + description: Изменяет скорость перемещения изображения при использовании + клавиатуры. + speeds: + super_slow: Очень медленно + slow: Медленно + regular: Средне + fast: Быстро + super_fast: Очень быстро + extremely_fast: Чрезвычайно быстро language: title: Язык description: Выберите язык. Все переводы сделаны пользователями и могут быть не законченными! + enableColorBlindHelper: + title: Режим Дальтоника + description: Включает различные инструменты, которые позволяют играть в игру + дальтоникам. fullscreen: title: Полный экран description: Для лучшей игры рекомендуется играть в полноэкранном режиме. @@ -777,6 +938,12 @@ settings: musicMuted: title: Выключить музыку description: Если включено, выключает музыку. + soundVolume: + title: Громкость Звука + description: Задает громкость звуковых эффектов. + musicVolume: + title: Громкость музыки + description: Задает громкость музыки. theme: title: Тема игры description: Выберите тему игры (светлая / темная). @@ -800,17 +967,6 @@ settings: Также скрывает определенные элементы пользовательского интерфейса для данного уровня, предназначенные для облегчения "входа" в игру. - movementSpeed: - title: Скорость движения - description: Изменяет скорость перемещения изображения при использовании - клавиатуры. - speeds: - super_slow: Очень медленно - slow: Медленно - regular: Средне - fast: Быстро - super_fast: Очень быстро - extremely_fast: Чрезвычайно быстро enableTunnelSmartplace: title: Умные Туннели description: Если включено, то при размещении туннелей автоматически удаляются @@ -820,17 +976,11 @@ settings: title: Виньетирование description: Включает виньетирование, которое затемняет углы экрана и облегчает чтение текста. - autosaveInterval: - title: Интервал автосохранения - description: Управляет тем, как часто игра автоматически сохраняется. Также - здесь можно полностью отключить автосохранение. - intervals: - one_minute: 1 Минута - two_minutes: 2 Минуты - five_minutes: 5 Минут - ten_minutes: 10 Минут - twenty_minutes: 20 Минут - disabled: Отключено + rotationByBuilding: + title: Поворот по типу здания + description: Каждый тип здания запоминает поворот, который в последний раз был + установлен. С этой настройкой может быть удобнее, при частом + переключении между различными типами зданий. compactBuildingInfo: title: Компактная Информация о Зданиях description: Сокращает отображаемую информацию о зданиях, показывая только их @@ -840,21 +990,6 @@ settings: title: Отключить Предупреждение о Вырезании/Удалении description: Отключает диалоговые окна с предупреждениями, появляющиеся при вырезании/удалении более 100 объектов. - enableColorBlindHelper: - title: Режим Дальтоника - description: Включает различные инструменты, которые позволяют играть в игру - дальтоникам. - rotationByBuilding: - title: Поворот по типу здания - description: Каждый тип здания запоминает поворот, который в последний раз был - установлен. С этой настройкой может быть удобнее, при частом - переключении между различными типами зданий. - soundVolume: - title: Громкость Звука - description: Задает громкость звуковых эффектов. - musicVolume: - title: Громкость музыки - description: Задает громкость музыки. lowQualityMapResources: title: Низкое качество ресурсов на карте description: Упрощает отображение ресурсов на карте при приближении для @@ -883,8 +1018,8 @@ settings: пипетку над жилой с ресурсами. simplifiedBelts: title: Упрощенные Конвейеры (Некрасиво) - description: Не отображает ресурсы, находящиеся на конвейере, если не навести - курсор для улучшения производительности. Не рекомендую играть с + description: Для улучшения производительности не отображает ресурсы, находящиеся + на конвейере, если не навести курсор. Не рекомендую играть с этой настройкой, если вас устраивает производительность. enableMousePan: title: Включить Перемещение Мышкой @@ -897,7 +1032,11 @@ settings: mapResourcesScale: title: Размер ресурсов на карте description: Устанавливает размер фигур на карте (когда вид достаточно отдалён). - rangeSliderPercentage: <amount> % + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. + tickrateHz: <amount> Hz keybindings: title: Настройки управления hint: "Подсказка: Обязательно используйте CTRL, SHIFT и ALT! Они дают разные @@ -918,15 +1057,20 @@ keybindings: mapMoveRight: Вправо mapMoveDown: Вниз mapMoveLeft: Влево + mapMoveFaster: Ускорение передвижения centerMap: Центрировать карту mapZoomIn: Приблизить mapZoomOut: Отдалить createMarker: Создать Маркер menuOpenShop: Улучшения menuOpenStats: Статистика + menuClose: Закрыть меню toggleHud: Переключить HUD toggleFPSInfo: Включить/выключить FPS и информацию отладки + switchLayers: Переключить слои + exportScreenshot: Экспорт всей Базы в виде Изображения belt: Конвейер + balancer: Балансер underground_belt: Туннель miner: Экстрактор cutter: Резак @@ -935,29 +1079,8 @@ keybindings: mixer: Смешиватель painter: Покрасчик trash: Мусорка - rotateWhilePlacing: Вращать - rotateInverseModifier: "Модификатор: Вращать против часовой стрелки" - cycleBuildingVariants: Переключение Вариантов - confirmMassDelete: Подтверждение Массового Удаления - cycleBuildings: Переключение Построек - massSelectStart: Модификатор для выделения области - massSelectSelectMultiple: Выбрать несколько областей - massSelectCopy: Копировать область - placementDisableAutoOrientation: Отключить автоопределение направления - placeMultiple: Оставаться в режиме размещения - placeInverse: Инвертировать автоопределение направления конвейеров - pasteLastBlueprint: Вставить последний чертеж - massSelectCut: Вырезать область - exportScreenshot: Экспорт всей Базы в виде Изображения - mapMoveFaster: Ускорение передвижения - lockBeltDirection: Включает конвейерный планировщик - switchDirectionLockSide: "Планировщик: Переключение сторон" - pipette: Пипетка - menuClose: Закрыть меню - switchLayers: Переключить слои - wire: Энергетический провод - balancer: Балансер storage: Буферное Хранилище + wire: Энергетический провод constant_signal: Постоянный Сигнал logic_gate: Логический Элемент lever: Переключатель (обычный) @@ -970,11 +1093,32 @@ keybindings: analyzer: Анализатор Фигур comparator: Сравнить item_producer: Генератор Ресурсов (Песочница) + pipette: Пипетка + rotateWhilePlacing: Вращать + rotateInverseModifier: "Модификатор: Вращать против часовой стрелки" + rotateToUp: "Повернуть: Направление Вверх" + rotateToDown: "Повернуть: Направление Вниз" + rotateToRight: "Повернуть: Направление Вправо" + rotateToLeft: "Повернуть: Направление Влево" + cycleBuildingVariants: Переключение Вариантов + confirmMassDelete: Подтверждение Массового Удаления + pasteLastBlueprint: Вставить последний чертеж + cycleBuildings: Переключение Построек + lockBeltDirection: Включает конвейерный планировщик + switchDirectionLockSide: "Планировщик: Переключение сторон" copyWireValue: "Провода: скопировать значение под курсором" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + massSelectStart: Модификатор для выделения области + massSelectSelectMultiple: Выбрать несколько областей + massSelectCopy: Копировать область + massSelectCut: Вырезать область + placementDisableAutoOrientation: Отключить автоопределение направления + placeMultiple: Оставаться в режиме размещения + placeInverse: Инвертировать автоопределение направления конвейеров + constant_producer: Постоянный генератор + goal_acceptor: Приёмник предметов + block: Блок + massSelectClear: Очистить конвейеры + showShapeTooltip: Show shape output tooltip about: title: Об игре body: >- @@ -1009,7 +1153,7 @@ tips: - Соотношения всегда одинаковы, если уровни улучшений равны. - Последовательное выполнение эффективнее, чем параллельное. - Вам будут открываться новые варианты построек по мере прохождения! - - Нажмите <b>T</b>, чтобы переключаться между различными вариантами. + - Нажмите <b>T</b>, чтобы переключаться между различными вариантами. - Симметрия - ключ к успеху! - Вы можете переплетать между собой туннели разных уровней. - Попробуйте строить компактные фабрики - вы не пожалеете! @@ -1017,52 +1161,140 @@ tips: <b>T</b>. - Правильные соотношения построек позволяет улучшить эффективность фабрики. - На максимальном уровне, 5 экстракторов заполняют один конвейер. + - Не забывайте про туннели! + - Вам не нужно делить предметы равномерно для полной эффективности. + - Удерживание <b>SHIFT</b> активирует планировщик конвейеров, что упрощает + постройку длинных конвейеров. - Резаки всегда разрезают пополам по вертикали вне зависимости от ориентации. - Чтобы получить белый цвет, смешайте все три цвета. - - Удерживание <b>SHIFT</b> активирует планировщик конвейеров, что упрощает - простройку длинных конвейеров. + - Буффер хранилища с большим приоритетом выдаёт предметы на левый выход. - Вкладывайте время в строительство повторяемых механизмов - оно того стоит! - - Смешайте все три цвета для получения белого. - - Буффер хранилища с большим приоритетом выдаёт на левый выход. - - Эффективность - ключ к успеху! - - Удерживание <b>CTRL</b> даёт возможность размещения нескольких построек. + - Удерживание <b>SHIFT</b> даёт возможность размещения нескольких построек. - Можно зажать <b>ALT</b> для инвертирования направления размещаемых конвейеров. + - Эффективность - ключ к успеху! + - Чем дальше от ХАБ-а, тем сложнее формы в жилах! + - Здания имеют лимит скорости, разделяйте их для максимальной эффективности. - Используйте балансеры, чтобы максимизировать эффективность. - Организация очень важна, старайтесь не пересекать конвейеры слишком часто. - Планируйте заранее, иначе начнется ужасный хаос! - Не удаляйте свои старые фабрики! Они понадобятся вам, чтобы открывать улучшения. - - Попробуйте пройти 20-ый уровень самостоятельно, прежде чем искать помощи! + - Попробуйте пройти 20-ый или 26-ой уровень самостоятельно, прежде чем + искать помощи! - Не усложняйте себе жизнь, старайтесь думать проще и вы достигните больших высот. - Вам может снова понадобиться ваша старая фабрика позже в игре. Старайтесь планировать фабрику, чтобы она могла быть повторно использована. - Иногда, вы можете найти необходимую фигуру на карте, вместо того, чтобы - создавать ее самостоятельно. + создавать её самостоятельно. - Полноценные мельницы/вертушки никогда не генерируются натурально. - - Окрашивайте свои фигуры, прежде чем разрезать для максимальной - эффективности. + - Для максимальной эффективности окрашивайте свои фигуры, прежде чем + разрезать. - С модулями теряется восприятие пространства; забота смертных. - Создайте отдельную фабрику чертежей. Они очень важны для модулей. - Взгляните внимательнее на смешиватель и вы найдете ответы на свои вопросы. + - Используйте <b>CTRL</b> + Потащить, чтобы выделить область - Строительство вблизи ХАБ-а может помешать будущим фабрикам. - - Иконка булавки на каждой фигуре закрепляет ее на экране. - - Have a closer look at the color mixer, and your questions will be answered. - - Use <b>CTRL</b> + Click to select an area. + - Иконка булавки на каждой фигуре закрепляет её на экране. + - Смешайте все три цвета для получения белого. + - У вас есть бесконечная карта. Не зажимайте свою фабрику, расширяйтесь! - Также попробуйте Factorio. Это моя любимая игра. - - Резак(4 входа) разрезает по часовой стрелке, начиная с правой верхней + - Резак (4 входа) разрезает по часовой стрелке, начиная с правой верхней части! - Вы можете скачать свои сохранения в главном меню! - В этой игре множество полезных комбинаций клавиш. Загляните в настройки, чтобы ознакомиться с ними. - В этой игре множество настроек, не забудьте с ними ознакомиться. - Маркер ХАБ-а имеет небольшой компас, указывающий его местоположение. + - Для очистки конвейеров, вырежьте область и вставьте её в то же место. - Нажмите F4, чтобы показать FPS и Частоту Обновления. - Нажмите F4 дважды, чтобы показать координаты курсора и камеры. - - Вы можете нажать на закрепленную фигуру слева, чтобы открепить ее. - - Для очистки конвейеров, вырежьте область и вставьте её в то же место. - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Вы можете нажать на закрепленную фигуру слева, чтобы открепить её. +puzzleMenu: + play: Играть + edit: Редактировать + title: Режим головоломок + createPuzzle: Создать головоломку + loadPuzzle: Загрузить + reviewPuzzle: Просмотреть и опубликовать + validatingPuzzle: Подтверждение головоломки + submittingPuzzle: Отправка головоломки + noPuzzles: В данный момент в этом разделе нет головоломок. + categories: + levels: Уровни + new: Новые + top-rated: Популярные + mine: Мои головоломки + easy: Простые + hard: Сложные + completed: Завершенные + medium: Средние + official: Официальные + trending: Популярные сегодня + trending-weekly: Популярные за неделю + categories: Категории + difficulties: По сложности + account: Мои головоломки + search: Поиск + validation: + title: Недействительная головоломка + noProducers: Пожалуйста, разместисте постоянный производитель! + noGoalAcceptors: Пожалуйста, разместите приемник цели! + goalAcceptorNoItem: Одному или несколькоим приеминкам цели не назначен предмет. + Доставьте к ним фигуру, чтоб установить цель. + goalAcceptorRateNotMet: Один или несколько приемников цели не получают + достаточно предметов. Убедитесь, что индикаторы всех приемников + зеленые. + buildingOutOfBounds: Одно или несколько зданий находятся за пределами зоны + строительства. Либо увеличьте зону, либо удалите их. + autoComplete: Ваша головоломка завершится автоматически! Убедитесь, что ваши + постоянные производители не доставляют фигуры напрямую приемникам + цели. + difficulties: + easy: Легко + medium: Средне + hard: Сложно + unknown: Unrated + dlcHint: Уже купили DLC? Проверьте, что оно активировано, нажав правый клик на + shapez.io в своей библиотеке, и далее Свойства > Доп. Контент + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Вы слишком часто выполняете свои действия. Подождите немного. + invalid-api-key: Не удалось связаться с сервером, попробуйте + обновить/перезапустить игру (Invalid Api Key). + unauthorized: Не удалось связаться с сервером, попробуйте обновить/перезапустить + игру (Unauthorized). + bad-token: Не удалось связаться с сервером, попробуйте обновить/перезапустить + игру (Bad Token). + bad-id: Недействительный идентификатор головоломки. + not-found: Данная головломка не может быть найдена. + bad-category: Данная категория не может быть найдена. + bad-short-key: Данный короткий ключ недействителен. + profane-title: Название вашей головоломки содержит нецензурные слова. + bad-title-too-many-spaces: Название вашей головоломки слишком короткое. + bad-shape-key-in-emitter: Недопустимный предмет у постоянного производителя. + bad-shape-key-in-goal: Недопустимный предмет у применика цели. + no-emitters: Ваша головоломка не содержит постоянных производителей. + no-goals: Ваша головоломка не содержит приемников цели. + short-key-already-taken: Этот короткий ключ уже занят, используйте другой. + can-not-report-your-own-puzzle: Вы не можете пожаловаться на собственную головоломку. + bad-payload: Запрос содержит неверные данные. + bad-building-placement: Ваша головоломка содержит неверно размещенные здания. + timeout: Время ожидания запроса истекло. + too-many-likes-already: Головоломка уже заработала слишком много лайков. Если вы + все еще хотите удалить ее, обратитесь в support@shapez.io! + no-permission: У вас нет прав на выполнение этого действия. diff --git a/translations/base-sl.yaml b/translations/base-sl.yaml index 727a5301..ace5055d 100644 --- a/translations/base-sl.yaml +++ b/translations/base-sl.yaml @@ -53,6 +53,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: Demo Version intro: Get the standalone to unlock all features! @@ -72,6 +73,12 @@ mainMenu: savegameLevel: Level <x> savegameLevelUnknown: Unknown Level savegameUnnamed: Unnamed + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -85,6 +92,9 @@ dialogs: viewUpdate: View Update showUpgrades: Show Upgrades showKeybindings: Show Keybindings + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Import Error text: "Failed to import your savegame:" @@ -182,6 +192,70 @@ dialogs: title: Tutorial Available desc: There is a tutorial video available for this level, but it is only available in English. Would you like to watch it? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Move @@ -203,6 +277,7 @@ ingame: clearSelection: Clear selection pipette: Pipette switchLayers: Switch layers + clearBelts: Clear belts colors: red: Red green: Green @@ -350,6 +425,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Belts, Distributor & Tunnels @@ -556,6 +672,18 @@ buildings: name: Item Producer description: Available in sandbox mode only, outputs the given signal from the wires layer on the regular layer. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Cutting Shapes @@ -879,7 +1007,12 @@ settings: title: Map Resources Size description: Controls the size of the shapes on the map overview (when zooming out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Keybindings hint: "Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different @@ -957,6 +1090,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: About this Game body: >- @@ -1042,3 +1180,88 @@ tips: - Press F4 to show your FPS and Tick Rate. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-sr.yaml b/translations/base-sr.yaml index 2ac49bb2..b0826a98 100644 --- a/translations/base-sr.yaml +++ b/translations/base-sr.yaml @@ -1,26 +1,25 @@ steamPage: shortText: shapez.io je igra o pravljenju fabrika za automatizaciju stvaranja i spajanja sve složenijih oblika na beskonačno velikoj mapi. - discordLinkShort: Official Discord + discordLinkShort: Oficijalni Diskord intro: >- - Shapez.io is a relaxed game in which you have to build factories for the - automated production of geometric shapes. + Shapez.io je opuštena igra u kojoj gradite fabrike za automatizaciju + proizvodnje geometrijskih oblika. - As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + Kako se nivo povećava, oblici postaju sve složeniji, tako da morate da proširite fabriku na beskonačno velikoj mapi. - And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + I ako sve to nije dovoljno, moraćete da proizvodite sve više i više oblika kako bi zadovoljili zahteve proizvodnje - jedina stvar koja pomaže je skaliranje! - While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + Na početku je dovoljno samo da prerađujete oblike, ali kasnije morate da ih farbate - za ovaj posao morate da vadite i mešate boje! - Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! - what_others_say: What people say about shapez.io - nothernlion_comment: This game is great - I'm having a wonderful time playing, - and time has flown by. - notch_comment: Oh crap. I really should sleep, but I think I just figured out - how to make a computer in shapez.io - steam_review_comment: This game has stolen my life and I don't want it back. - Very chill factory game that won't let me stop making my lines more - efficient. + Kupovinom ove igre na Steam-u dobijate pristup punoj verziji igre, ali prvo možete da odigrate probnu verziju na shapez.io pa onda da se odlučite kasnije! + what_others_say: Šta pričaju ljudi o shapez.io + nothernlion_comment: Igra je sjajna - vreme je proletelo, divno sam se proveo igrajući. + notch_comment: Dođavola. Stvarno bi trebao da spavam, ali mislim da sam upravo + shvatio kako da napravim računar u shapez.io + steam_review_comment: Ova igra mi je ukrala život i više ga ne želim nazad. + Veoma opuštena igra o građenju fabrika, koja me stalno tera da + prerađujem fabrike kako bi bile efikasnije. global: loading: Učitavanje error: Greška @@ -52,8 +51,9 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Prijavljivanje demoBanners: - title: Demo Verzija + title: Probna Verzija intro: Nabavite punu igru kako biste otključali sve funkcije! mainMenu: play: Igraj @@ -71,7 +71,13 @@ mainMenu: chrome. savegameLevel: Nivo <x> savegameLevelUnknown: Nepoznat Nivo - savegameUnnamed: Unnamed + savegameUnnamed: Neimenovano + puzzleMode: Slagalice + back: Nazad + puzzleDlcText: Uživate u optimizovanju i minimizovanju fabrika? Nabavite + ekspanziju sa Slagalicama na Steam-u, za još više zabave! + puzzleDlcWishlist: Dodaj na listu želja! + puzzleDlcViewNow: Pogledaj ekspanziju dialogs: buttons: ok: OK @@ -85,6 +91,9 @@ dialogs: viewUpdate: Pogledajte ažuriranje showUpgrades: Prikaži Nadogradnje showKeybindings: Prikaži podešavanje tastera + retry: Pokušaj ponovo + continue: Nastavi + playOffline: Igraj Oflajn importSavegameError: title: Greška prilikom uvoza text: "Neuspešan uvoz sačuvane igre:" @@ -96,9 +105,9 @@ dialogs: text: "Neuspešno učitavanje sačuvane igre:" confirmSavegameDelete: title: Potrvrdi brisanje - text: Are you sure you want to delete the following game?<br><br> - '<savegameName>' at level <savegameLevel><br><br> This can not be - undone! + text: Da li sigurno želite da obrišeš ovu sačuvanu igru?<br><br> + '<savegameName>' nivo <savegameLevel><br><br> Ne možete je vratiti + kasnije! savegameDeletionError: title: Greška prilikom brisanja text: "Neuspešno brisanje sačuvane igre:" @@ -117,16 +126,16 @@ dialogs: title: Podešavanja tastera su resetovana desc: Podešavanja tastera su resetovana na njihove početne vrednosti! featureRestriction: - title: Demo Verzija + title: Probna Verzija desc: Pokušali ste da pristupite funkciji (<feature>) koja nije dostupna u demo verziji. Za puno iskustvo, nabavite samostalnu igru! oneSavegameLimit: title: Ograničen broj sačuvanih igara - desc: Možete imati samo jednu sačuvanu igru u demo verziji. Izbrišite postojeću - ili nabavite samostalnu igru! + desc: Možete imati samo jednu sačuvanu igru u probnoj verziji. Izbrišite + postojeću ili nabavite samostalnu igru! updateSummary: title: Novo ažuriranje! - desc: "OVo su promene od zadnjeg igranja:" + desc: "Ovo su promene od zadnjeg igranja:" upgradesIntroduction: title: Oktključaj Nadogradnje desc: Svi oblici koje napravite mogu se iskoristiti za oktljučavanje nadogradnji @@ -157,31 +166,96 @@ dialogs: createMarker: title: Novi Putokaz titleEdit: Uredi Putokaz - desc: Give it a meaningful name, you can also include a <strong>short - key</strong> of a shape (Which you can generate <link>here</link>) + desc: Dajte mu neko smisleno ime, možete koristiti i <strong>kratak kod</strong> + oblika (Koji možete da generišete <link>ovde</link>) markerDemoLimit: - desc: U demo verziji možete imati samo dva putokaza istovremeno. Nabavite + desc: U probnoj verziji možete imati samo dva putokaza istovremeno. Nabavite samostalnu igru za beskonačno mnogo putokaza! exportScreenshotWarning: title: Izvezi sliku ekrana desc: Hoćete da izvezete sliku cele fabrike kao snimak ekrana. Ovaj proces može biti prilično spor za velike fabrike, može se desiti i pucanje igre! editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the <strong>short key</strong> of a shape (Which you - can generate <link>here</link>) + title: Postavi Signal + descItems: "Odaberite unapred definisan predmet:" + descShortKey: ... ili unesite <strong>kratak kod</strong> oblika (Koji možete da + generišete <link>ovde</link>) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Preimenujte Sačuvanu igru + desc: Ovde možete preimenovati sačuvanu igru. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutorijal je dostpan + desc: Za ovaj nivo je dostupan video tutorijal! Da li želite da ga pogledate? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Tutoijal je dostupan + desc: Za ovaj nivo je dostupan video tutorijal, ali je na engleskom. Da li + želite da ga pogledate? + editConstantProducer: + title: Postavi Predmet + puzzleLoadFailed: + title: Učitavanje Slagalice nije uspelo + desc: "Nažalost slagalica nije mogla da se učita:" + submitPuzzle: + title: Podnesite Slagalicu + descName: "Dajte ime slagalici:" + descIcon: "Molimo da unesete kratak kod, koji će biti ikonica slagalice (Možete + generisati kod <link>ovde</link>, ili možete i da odaberete jedan od + nasumičnih preloženih oblika ispod):" + placeholderName: Naslov Slagalice + puzzleResizeBadBuildings: + title: Promena veličine nije moguća + desc: Ne možete da učinite zonu manjom, zato što će onda neke građevine biti van + zone. + puzzleLoadError: + title: Loša Slagalica + desc: "Učitavanje Slagalice nije uspelo:" + offlineMode: + title: Oflajn Režim + desc: Ne možemo da pristupimo serverima, zbog toga je igra u oflajn režimu. + Uverite se da imate aktivnu internet vezu. + puzzleDownloadError: + title: Greška prilikom preuzimanja + desc: "Preuzimanje slagalica nije uspelo:" + puzzleSubmitError: + title: Greška prilikom podnošenja + desc: "Greška prilikom podnoženja slagalice:" + puzzleSubmitOk: + title: Slagalica objavljena + desc: Čestitamo! Slagalica je objavljena i drugi igrači mogu da je igraju. + Možete je pronaći u delu "Moje slagalice". + puzzleCreateOffline: + title: Oflajn Režim + desc: Pošto ste u oflajn režimu, nećete moći da sačuvate i/ili objavljujete + slagalice. Da li ipak želite da nastavite? + puzzlePlayRegularRecommendation: + title: Preporuka + desc: <strong>Strogo</strong> preporučujemo da prvo odigrate normalnu igru do + nivoa 12 pre nego što krenete ekspanziju sa slagalicama, u protivnom + srešćete se nekim delovima igre koje niste videli do sad. Da li ipak + želite da nastavite? + puzzleShare: + title: Kratak kod je iskopiran + desc: Kratak kod ove slagalice (<key>) je iskopiran! Možete ga uneti u meni + slagalica da bi pristupili slagalici. + puzzleReport: + title: Prijavi Slagalicu + options: + profane: Ružne reči ili ponašanje + unsolvable: Nemoguće da se reši + trolling: Neozbiljna slagalica + puzzleReportComplete: + title: Hvala na povratnoj informaciji! + desc: Ova slagalica je označena. + puzzleReportError: + title: Neuspešno prijavljivanje slagalice + desc: "Zahtev za prijavljivanje slagalice nije mogao biti obrađen:" + puzzleLoadShortKey: + title: Unesite kratak kod + desc: Unesite kratak kod slagalice kako bi je učitali. + puzzleDelete: + title: Izbrišite Slagalicu? + desc: Da li sigurno želite da obrišete '<title>'? Ne možete da je vratite + kasnije! ingame: keybindingsOverlay: moveMap: Kretanje @@ -197,12 +271,13 @@ ingame: delete: Brisanje pasteLastBlueprint: Nalepi zadnji nacrt lockBeltDirection: Omogući planiranje traka - plannerSwitchSide: Okreni stranu planera + plannerSwitchSide: Okreni smer planera cutSelection: Izreži copySelection: Kopiraj clearSelection: Očisti odabir pipette: Pipeta switchLayers: Promeni sloj + clearBelts: Očisti trake colors: red: Crvena green: Zelena @@ -232,7 +307,7 @@ ingame: notifications: newUpgrade: Nova nadogradnja je dostupna! gameSaved: Igra je sačuvana. - freeplayLevelComplete: Level <level> has been completed! + freeplayLevelComplete: Završen Nivo <level>! shop: title: Nadogradnje buttonUnlock: Nadogradi @@ -290,66 +365,109 @@ ingame: pokretnih traka će ubrzati napredak do cilja.<br><br>Savet: Drži <strong>SHIFT</strong> za postavljanje više rudara istovremeno, a pritisni <strong>R</strong> za okretanje." - 2_1_place_cutter: "Now place a <strong>Cutter</strong> to cut the circles in two - halves!<br><br> PS: The cutter always cuts from <strong>top to - bottom</strong> regardless of its orientation." - 2_2_place_trash: The cutter can <strong>clog and stall</strong>!<br><br> Use a - <strong>trash</strong> to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place <strong>2 more cutters</strong> to speed - up this slow process!<br><br> PS: Use the <strong>0-9 - hotkeys</strong> to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! <strong>Build 4 - extractors</strong> and connect them to the hub.<br><br> PS: - Hold <strong>SHIFT</strong> while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the <strong>quad painter</strong> and get some - <strong>circles</strong>, <strong>white</strong> and - <strong>red</strong> color! + 2_1_place_cutter: "Postavi <strong>Rezača</strong> kako bi presekao krug na dve + polovine!<br><br> PS: Rezač uvek reže od <strong>vrha ka + dnu</strong> bez obzira na njegovu orijentaciju." + 2_2_place_trash: Rezač može da se <strong>začepi i stane sa + radom</strong>!<br><br> Koristite <strong>smeće</strong> kako bi + se rešili trenutno (!) neželjenog otpada. + 2_3_more_cutters: "Super! Postavi još <strong>2 rezača</strong> kako bi ubrzali + ovaj ovaj spor proces!<br><br> PS: Koristite <strong>prečice + 0-9</strong> koje brže pristupaju građevinama!" + 3_1_rectangles: "Hajdemo sada da iskopamo pravougaonike! <strong>Postavi 4 + rudara</strong> i poveži ih na središte.<br><br> PS: Zadrži + <strong>SHIFT</strong> dok prevlačiš pokretne trake kako bi + aktivirao planiranje traka!" + 21_1_place_quad_painter: Postavi <strong>četvorostrukog farbača</strong> i oboji + <strong>krugove</strong> u <strong>belu</strong> and + <strong>crvenu</strong> boju! 21_2_switch_to_wires: Switch to the wires layer by pressing <strong>E</strong>!<br><br> Then <strong>connect all four inputs</strong> of the painter with cables! - 21_3_place_button: Awesome! Now place a <strong>Switch</strong> and connect it - with wires! - 21_4_press_button: "Press the switch to make it <strong>emit a truthy - signal</strong> and thus activate the painter.<br><br> PS: You - don't have to connect all inputs! Try wiring only two." + 21_3_place_button: Fenomenalno! Sada postavi <strong>Prekidač</strong> i poveži + ga žicama! + 21_4_press_button: "Kako bi aktivirao farbača, pritisni prekidač i on <strong>će + emitovati tačan signal</strong> i tim signalom će pokrenuti + farbanje.<br><br> PS: Ne morate da povežete sve ulaze! Za sada + probajte samo dva." connectedMiners: - one_miner: 1 Miner - n_miners: <amount> Miners - limited_items: Limited to <max_throughput> + one_miner: 1 Rudar + n_miners: <amount> Rudara + limited_items: Ograničeno na <max_throughput> watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Probna Verzija + desc: Kliknite ovde da pogledate prednosti Steam verzije! + get_on_steam: Nabavite na Steam-u standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Nabavite punu verziju! + no_thanks: Neka, hvala! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Novih Nivoa + desc: Ukupno 26 nivoa! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Novih Građevina + desc: U potpunosti automatizujte fabriku! upgrades: - title: ∞ Upgrade Tiers - desc: This demo version has only 5! + title: ∞ Redova Nadogradnje + desc: Probna verzija ima samo 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Putokaza + desc: Nikada se nećete izgubiti u fabrici! wires: - title: Wires - desc: An entirely new dimension! + title: Žice + desc: Potpuno nova dimenzija! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Tamna Tema + desc: Recite stop bolu u očima! support: - title: Support me - desc: I develop it in my spare time! + title: Podržite me + desc: Razvijam igru u slobodno vreme! achievements: - title: Achievements - desc: Hunt them all! + title: Dostignuća + desc: Osvojite ih sve! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Širina + zoneHeight: Visina + trimZone: Skrati + clearItems: Očisti Predmete + share: Podeli + report: Prijavi + clearBuildings: Očisti Građevine + resetPuzzle: Restartuj Slagalicu + puzzleEditorControls: + title: Kreator Slagalica + instructions: + - 1. Postavite <strong>Stalni Proizvođač</strong> kako bi kasnije + pružili oblike i boje igraču + - 2. Napravite jedan ili više oblika koje želite da igrač napravi i + dostavite ga jednom ili više <strong>Ciljnih Blokova</strong> + - 3. Nakon što Ciljni Blok primi određeni oblik na određeno vreme, + on taj oblik <strong>sačuva kao njegov cilj</strong> koji igrač + mora da proizvede kasnije (Naznačeno <strong>zelenom + značkom</strong>). + - 4. Klikom na <strong>dugme za zaključavanje</strong> na građevini + je onemogućujete. + - 5. Kada kliknete na oceni, slagalica će biti proverena i onda je + možete objaviti. + - 6. Nakon objavljivanja, <strong>sve građevine će biti + obrisane</strong> osim Stalnih Proizvođača i Ciljnih Blokova - To + je deo koji igrač treba samostalno da reši :) + puzzleCompletion: + title: Završena Slagalica! + titleLike: "Klikni na srce ako ti se svidela slagalica:" + titleRating: Koliko ti je bila teška ova slagalica? + titleRatingDesc: Vaša ocena nam pomaže u boljem preporučivanju slagalica + continueBtn: Nastavi da igraš + menuBtn: Meni + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Autor + shortKey: Kratak kod + rating: Težina + averageDuration: Prosečno trajanje + completionRate: Stopa završavanja shopUpgrades: belt: name: Trake, Delioci i Tuneli @@ -367,28 +485,28 @@ buildings: hub: deliver: Dostavite toUnlock: kako bi otključali - levelShortcut: LVL - endOfDemo: End of Demo + levelShortcut: Nivo + endOfDemo: Kraj probne verzije belt: default: name: Pokretna traka - description: Prenosi predmete, drži i prevuci za postavku više njih. + description: Prenosi predmete, drži i prevuci za postavljanje više njih. wire: default: name: Žica description: Omogućava prenos energije. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Žica + description: Prenosi signale, koji mogu biti boje ili da/ne vrednosti (1 / 0). + Žice različitih boja se ne mogu povezati. miner: default: name: Rudar description: Postavite ga na oblik koji želite da iskopate. chainable: name: Rudar (Lančani) - description: Postavite ga na oblik koji želite da iskopate. Mogu se ređati jedan - u drugi. + description: Postavite ga na oblik koji želite da iskopate. Mogu se lančano + povezati jedan za drugim. underground_belt: default: name: Tunel @@ -400,12 +518,12 @@ buildings: default: name: Rezač description: Reže oblike od vrha prema dnu i na izlaze daje obe polovine. - <strong>Ako se koristi samo jedan deo, drugi se mora uništiti da - bi se sprečio zastoj!</strong> + <strong>Ako se koristi samo jedan deo, drugi se mora uništiti + kako bi sprečili zastoj!</strong> quad: name: Rezač (četvorostruki) description: Reže oblike na četiri dela. <strong>Ako se koristi samo jedan deo, - ostali se moraju uništiti da bi se sprečio zastoj!</strong> + ostali se moraju uništiti kako bi sprečili zastoj!</strong> rotater: default: name: Obrtač (↻) @@ -414,8 +532,8 @@ buildings: name: Obrtač (↺) description: Okreće oblike za 90 stepeni u smeru suprotnom od kazaljke na satu. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Obrtač (180) + description: Okreće oblike za 180 stepeni. stacker: default: name: Slagač @@ -423,7 +541,7 @@ buildings: oblik se postavlja na vrh levog. mixer: default: - name: Mešalica boja + name: Mešalica za boje description: Spaja dve boje koristeći aditivno mešanje boja. painter: default: @@ -437,132 +555,145 @@ buildings: description: Farba ceo oblik na levom ulazu bojom sa gornjeg ulaza. quad: name: Farbač (četvorostruki) - description: Allows you to color each quadrant of the shape individually. Only - slots with a <strong>truthy signal</strong> on the wires layer - will be painted! + description: Omoćugava da ofarbate svaku četvrtinu oblika zasebno. Samo delovi + sa <strong>tačnim signalom</strong> na sloju žica će biti + ofarbati! trash: default: name: Smeće - description: Prima stvar sa svih strana i zauvek ih uništava. + description: Prima stvari sa svih strana i zauvek ih uništava. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Balanser + description: Ravnomerno raspoređuje sve ulaze na sve izlaze. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Spajač (kompaktni) + description: Spaja dve pokretne trake u jednu. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Spajač (kompaktni) + description: Spaja dve pokretne trake u jednu. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Delilac (kompaktni) + description: Deli jednu pokretnu traku na dve. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Delilac (kompaktni) + description: Deli jednu pokretnu traku na dve. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Skladište + description: Skladišti višak predmeta dok ne dostigne maksimalni kapacitet. + Prioritet daje levom izlazu i može se koristiti kao kapija za + prelivanje. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Žičani Preklopnik + description: Omogućava dvema različitim žicama da se ukrste, bez povezivanja. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Konstantan Signal + description: Emituje konstantan signal, koji može bili ili oblik ili boja ili + da/ne vrednost (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Prekidač + description: Može biti podešen da emituje da/ne vrednost (1 / 0) na sloju žica, + koja posle može biti korišćena za npr. filter predmeta. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: I Kapija + description: Emituje da/ne vrednost "1" ako su oba ulaza tačna. (Tačno znači + oblik, boja or da/ne vrednost "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NE Kapija + description: Emituje da/ne vrednost "1" ako ulaz nije tačan. (Tačan znači oblik, + boja ili da/ne vrednost "1") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: EKSILI Kapija + description: Emituje da/ne vrednost "1" ako je jedan od ulaza tačan, ali ne oba. + (Tačan znači oblik, boja ili da/ne vrednost "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: ILI Kapija + description: Emituje da/ne vrednost "1" ako je jedan od ulaza tačan. (Tačan + znači oblik, boja ili da/ne vrednost "1") transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Tranzistor + description: Prosleđuje donji ulaz ako je ulaz sa strane tačan (oblik, boja ili + "1"). mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Tranzistor + description: Prosleđuje donji ulaz ako je ulaz sa strane tačan (oblik, boja ili + "1"). filter: default: name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + description: Povežite signal kako bi usmerili sve predmete koji se poklapaju na + gornji izlaz, a ostatak odlazi na desni izlaz. Može biti + kontrolisano preko da/ne signala. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Displej + description: Povežite signal na displej i on će biti prikazan na njemu - Signal + može biti oblik, boja ili da/ne vrednost. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Čitač Trake + description: Meri propusnost pokretne trake. Na žičanom sloju, na izlaz šalje + poslednje pročitani predmet (tek kada se otključa). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Analizator Oblika + description: Analizira gornju desnu četvrtinu najnižeg sloja oblika i vraća + njegov oblik i boju. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Upoređivač + description: Vraća da/ne vrednost "1" ako su oba ulazna signala jednaka. Mogu se + porediti oblici, predmeti i da/ne vrednosti. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Virtuelni Rezač + description: Virtuelno reže oblik na dve polovine. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Virtuelni Obrtač + description: Virtuelno okreće oblike, i u smeru kazaljke na satu i suprotno od + smera kazaljke na satu. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Virtuelni Razlagač + description: Virtuelno razlaže najviši sloj oblika i šalje ga desni izlaz, a + ostatak šalje na levi izlaz. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Virtualni Slagač + description: Virtuelno slaže oblik sa desnog ulaza na oblik sa levog ulaza. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Virtual Farbač + description: Virtuelno farba oblik sa donjeg ulaza sa oblikom sa desnog ulaza. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Proizvođač predmeta + description: Dostupan samo u Sandbox režimu, na izlaz šalje ulazni signal sa + žičanog sloja na običan sloj. + constant_producer: + default: + name: Stalni Proizvođač + description: Konstantno na izlaz šalje odabrani oblik ili boju. + goal_acceptor: + default: + name: Ciljni Blok + description: Dostavite oblike u ciljni blok kako bi ih postavili kao cilj. + block: + default: + name: Blok + description: Može da blokira polje. storyRewards: reward_cutter_and_trash: title: Rezanje Oblika - desc: You just unlocked the <strong>cutter</strong>, which cuts shapes in half - from top to bottom <strong>regardless of its - orientation</strong>!<br><br>Be sure to get rid of the waste, or - otherwise <strong>it will clog and stall</strong> - For this purpose - I have given you the <strong>trash</strong>, which destroys - everything you put into it! + desc: <strong>Rezač</strong> je otključan, on reže oblike na dva dela od vrha + prema dnu <strong>bez obzira na njegovu + orijentaciju</strong>!<br><br>Obavezno se rešite ostatka, ili će u + suprotnom će se<strong>začepiti i stati sa radom</strong> - Baš zbog + toga imate <strong>Smeće</strong>, koje uništava sve što uđe u + njega! reward_rotater: title: Obrtanje desc: <strong>Obrtač</strong> je otključan! On okreće oblike za 90 stepeni u @@ -571,7 +702,7 @@ storyRewards: title: Farbanje desc: "<strong>Farbač</strong> je otključan - Boja se (kao i oblici) može rudariti i spojiti s oblikom u farbaču!<br><br>PS: Postoji - <strong>opcija za daltonizam</strong> u podešavanjima!" + <strong>opcija za daltoniste</strong> u podešavanjima!" reward_mixer: title: Mešalica boja desc: <strong>Mešalica boja</strong> je otključana - Ona spaja dve boje @@ -618,9 +749,9 @@ storyRewards: odjednom</strong> po ceni jedne boje umesto dve! reward_storage: title: Skladište - desc: You have unlocked the <strong>storage</strong> building - It allows you to - store items up to a given capacity!<br><br> It priorities the left - output, so you can also use it as an <strong>overflow gate</strong>! + desc: <strong>Skladište</strong> je otključano - Omogućava skadištenje predmeta + dok ne dostigne maksimalni kapacitet!<br><br> Prioritet daje levom + izlazu, može se koristiti kao <strong>kapija za prelivanje</strong>! reward_freeplay: title: Slobodna Igra desc: You did it! You unlocked the <strong>free-play mode</strong>! This means @@ -648,30 +779,29 @@ storyRewards: title: Sledeći Nivo desc: Svaka čast! Više sadržaja je u planu za samostalnu igru! reward_balancer: - title: Balancer - desc: The multifunctional <strong>balancer</strong> has been unlocked - It can - be used to build bigger factories by <strong>splitting and merging - items</strong> onto multiple belts! + title: Balanser + desc: <strong>Balanser</strong> je otključan - Može da se koristi pri izgradnji + većih fabrika tako što <strong>deli i spaja predmete</strong> na + više traka! reward_merger: - title: Compact Merger - desc: You have unlocked a <strong>merger</strong> variant of the - <strong>balancer</strong> - It accepts two inputs and merges them - into one belt! + title: Kompaktni Spajač + desc: Varijacija <strong>balansera</strong>, odnosno <strong>spajač</strong> je + otključan! On prima dva ulaza i spaja ih u jednu traku! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the <strong>belt reader</strong>! It allows you to - measure the throughput of a belt.<br><br>And wait until you unlock - wires - then it gets really useful! + title: Čitač Trake + desc: <strong>Čitač Trake</strong> je otključan! On meri propusnost pokretne + trake.<br><br>Biće vam od velike pomoći, samo se stripite dok ne + otključate žice! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degrees <strong>rotater</strong>! - It allows - you to rotate a shape by 180 degrees (Surprise! :D) + title: Obrtač (180 stepeni) + desc: Otključali ste <strong>obrtač</strong> od 180 stepeni! - On može da okreće + oblike za 180 stepeni (Iznenađenje! :D) reward_display: - title: Display - desc: "You have unlocked the <strong>Display</strong> - Connect a signal on the - wires layer to visualize it!<br><br> PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + title: Displej + desc: "<strong>Displej</strong> je otključan - Povežite signal na žičanom sloju + kako bi ga displej prikazao!<br><br> PS: Da li ste primetili da + čitač trake i skladište na izlaz šalju poslednje prošitani predmet? + Probajte da ih prikažete na displeju!" reward_constant_signal: title: Constant Signal desc: You unlocked the <strong>constant signal</strong> building on the wires @@ -680,11 +810,11 @@ storyRewards: <strong>shape</strong>, <strong>color</strong> or <strong>boolean</strong> (1 / 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked <strong>logic gates</strong>! You don't have to be excited - about this, but it's actually super cool!<br><br> With those gates - you can now compute AND, OR, XOR and NOT operations.<br><br> As a - bonus on top I also just gave you a <strong>transistor</strong>! + title: Logičke Kapije + desc: <strong>Logičke Kapije</strong> su otključane! You don't have to be + excited about this, but it's actually super cool!<br><br> Pomoću + ovih kapija možete da radite I, ILI, NE i EKSILI operacije.<br><br> + Kao šlag na tortu, dobijate i <strong>Tranzistor</strong>! reward_virtual_processing: title: Virtual Processing desc: I just gave a whole bunch of new buildings which allow you to @@ -711,15 +841,15 @@ storyRewards: signal from the wires layer or not.<br><br> You can also pass in a boolean signal (1 / 0) to entirely activate or disable it. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Kraj probne verzije + desc: Došli ste do kraja probne verzije! settings: title: Podešavanja categories: - general: General - userInterface: User Interface - advanced: Advanced - performance: Performance + general: Opšta + userInterface: Korisnički Interfejs + advanced: Napredna + performance: Performanse versionBadges: dev: Razvoj staging: Skela @@ -793,9 +923,11 @@ settings: dark: Tamna light: Svetla refreshRate: - title: Simulacija na 144 Hz - description: Opcija za monitore visoke frekvencije osvežavanja. Ovo može - smanjiti FPS ako je vaš računar prespor. + title: Brzina Otkucaja + description: Podešava koliko se otkucaja u igri dešavaju u jednoj sekundi. + Uglavnom, veći broj otkucaja znači veća preciznost ali gori + performans. Kod manjeg broja otkucaja propusnost ne mora biti + tačna. alwaysMultiplace: title: Višestruko Postavljanje description: Ako je omogućeno, sve građevine će ostati odabrane nakon što su @@ -817,7 +949,7 @@ settings: čitljiviji. rotationByBuilding: title: Okretanje prema vrsti građevine - description: Svaka građevina pamti smer na koji je bila okrenuta. Ova opcija je + description: Svaka građevina pamti smer na koji je bila okrenuta. Ova opcija se preporučuje ako često menjate vrste građevina koje postavljate. compactBuildingInfo: title: Skraćene Informacije o Građevinama @@ -828,56 +960,62 @@ settings: description: Onemogućuje upozorenje koje se javlja kada režete/brišete više od 100 stvari. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Jačina Zvuka + description: Podesite jačinu zvučnih efekata. musicVolume: - title: Music Volume - description: Set the volume for music + title: Jačina Muzike + description: Podesite jačinu muzike. lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Mapa Manjeg Kvaliteta + description: Ova opcija pojednostavljuje simbole na mapi kada su zumirani kako + bi poboljšala performanse. Nekima izgledaju lepše, tako da + slobodno možete da probate! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Onemogući Mrežu + description: Ova opcija onemogućuje mrežu sa poljima i može poboljšati + performans. Nekima ovo izgleda lepše! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Očistite kursor/strelicu desnim klikom + description: Uobičajeno je omogućena ova opcija, briše sa kursora/strelice + trenutno odabranu građevinu. Ako je ova opcija onemogućena, + možete očistiti kursor/strelicu desnim klikom dok postavljate + građevinu. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Teksture niskog kvaliteta (Ružno) + description: Da bi poboljšala performanse igra će koristiti teksture niskog + kvaliteta. Zbog ovoga će igra izgledati baš ružno! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Prikazati Ivice Regija + description: Igra je podeljena u regije od 16x16 polja, ako uključite ovu opciju + ivice ovih regija postaće vidljive. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Odaberi rudara na rudama + description: Uobičajeno je omogućena ova opcija, kada pipetom odaberete neku + rudu, rudar će automatski biti odabran. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Pojednostavljene Pokretne Trake (Ružno) + description: Ne prikazuje predmete na pokretnoj traci. Predmete možete videti + ako pređete mišem preko trake. Ova opcija povećava persormans, + ali nije preporučljivo da igrate igru sa ovom opcijom + omogućenom, osim ako vam je performans prejako potreban. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Omogučite kretanje po mapi mišem + description: Omogućava kreatanje po mapi pomeranjem kursora/strelice ivicama + ekrana. Brzina kretanja zavisi od opcije Brzina kretanja. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Zumiraj prema kursoru/strelici + description: Ako je ova opcija odabrana, zumiranje će se vršiti u smeru + kursora/strelice, u suprotnom vrši se prema centru ekrana. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Veličina simbola na mapi + description: Kontroliše veličinu simbola na mapi (kada se vrši odzumiranje + mape). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Tasteri hint: "Savet: Koristite CTRL, SHIFT i ALT! Oni omogućuju razne opcije @@ -920,6 +1058,23 @@ keybindings: painter: Farbač trash: Smeće wire: Žica + balancer: Balanser + storage: Skladište + constant_signal: Konstantan Signal + logic_gate: Logička Kapija + lever: Prekidač (regularan) + filter: Filter + wire_tunnel: Žičani Preklopnik + display: Displej + reader: Čitač Trake + virtual_processor: Virtuelni Rezač + transistor: Transistor + analyzer: Analizator Oblika + comparator: Upoređivač + item_producer: Proizvođač predmeta (Sandbox režim) + constant_producer: Stalni Proizvođač + goal_acceptor: Ciljni Blok + block: Blok pipette: Pipeta rotateWhilePlacing: Okreni građevinu rotateInverseModifier: "Modifikator: Rotiraj u smeru suprotnom od kazaljke na satu" @@ -929,32 +1084,20 @@ keybindings: cycleBuildings: Promena Građevine lockBeltDirection: Omogući planer pokretnih traka switchDirectionLockSide: "Planer: Okreni stranu" - massSelectStart: Pritisni i zadrži za za početak + massSelectStart: Pritisni i zadrži za početak massSelectSelectMultiple: Odabir više oblasti massSelectCopy: Kopiranje oblasti massSelectCut: Izrezivanje oblasti placementDisableAutoOrientation: Onemogućite automatsku orijentaciju placeMultiple: Ostanite u modu za postavljanje placeInverse: Automatski okreni orijentaciju pokretnih traka - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + copyWireValue: "Žice: Kopiraj vrednost ispod kursora/strelice" + rotateToUp: "Obrtač: Gleda Gore" + rotateToDown: "Obrtač: Gleda Dole" + rotateToRight: "Obrtač: Gleda Desno" + rotateToLeft: "Obrtač: Gleda Levo" + massSelectClear: Očisti trake + showShapeTooltip: Show shape output tooltip about: title: O Igri body: >- @@ -966,7 +1109,7 @@ about: Bez odlične Discord zajednice ova igra, kao ni druge, ne bi postojala - Pridružite se <a href="<discordlink>" target="_blank">Discord serveru</a>!<br><br> - <a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a> je komponovao muziku za igru - On je super.<br><br> + <a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a> je komponovao muziku za igru - super lik.<br><br> Na kraju svega, veliko hvala mom najboljem prijatelju <a href="https://github.com/niklas-dahl" target="_blank">Niklas-u</a> - Bez naših factorio sesija, ova igra nikad ne bi postojala. changelog: @@ -980,63 +1123,156 @@ demo: exportingBase: Izvoz slike cele fabrike kao snimak ekrana settingNotAvailable: Nije dostupno u demo verziji. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing <b>R</b>. - - Holding <b>CTRL</b> allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use <b>T</b> to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with <b>T</b> - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding <b>SHIFT</b> will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding <b>CTRL</b> allows to place multiple buildings. - - You can hold <b>ALT</b> to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use <b>CTRL</b> + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Središte prihvata oblike bilo koje vrste, ne samo trenutni oblik! + - Pravite modularne fabrike koje se mogu lako proširiti - isplatiće se + kasnije! + - Izbegavajte gradnju fabrike u blizini središta ili će biti vrlo gusto! + - Ako slaganje oblika ne radi funkcioniše, probajte da zamenite ulaze. + - Možete da promenite smer planera pritiskom na <b>R</b>. + - Držanjem tastera <b>CTRL</b> omogućava prevlačenje trakama bez automatske + orijentacije. + - Odnosi ostaju isti, sve dok su sve nadogradnje na istom nivou. + - Serijsko izvršavanje je efikasnije od paralelnog. + - Kasnije u igri ćete otključati još varijanti građevina! + - Možete koristiti <b>T</b> za menjanje izmežu različitih varijanti + građevina. + - Simetrija je ključna! + - Možete izmešati tunele različitih redova u jednu liniju. + - Pokušajte da gradite kompaktne fabrike - isplatiće se kasnije! + - Farbač ima drugu varijantu koju možete odabrati pritiskom na <b>T</b> + - Pravilni odnosi povećavaju efikasnost. + - Na maksimalnom nivou, 5 rudara su dovoljna da napune jednu traku. + - Ne zaboravite tunele! + - Ne morate ravnomerno da delite predmete za potpunu efikasnost. + - Držanjem tastera <b>SHIFT</b> aktiviraćete planer traka, koji omogućava + postavljanje dugačkih linija traka sa lakoćom. + - Rezači uvek seku vertikalno, bez obzira na njihovu orijentaciju. + - Bela boja je mešavina svih boja. + - Bafer skladišta daje prioritet prvom izlazu. + - Uložite vreme u izgradnju dizajna koji se ponavljaju - vredeće! + - Držanjem tastera <b>CTRL</b> možete postavljati veći broj građevina + odjednom. + - Držanjem tastera <b>ALT</b> možete promeniti smer postavljenih traka. + - Efikasnost je ključna! + - Rude koje dalje od središta su komplikovanije. + - Mašine imaju ograničenu brzinu, podelite ih zarad maksimalne efikasnosti. + - Koristite balansere kako bi povećali efikasnost. + - Organizacija je bitna. Pokušajte da smanjite ukrštanje pokretnih traka. + - Planirajte unapred ili će sve postati gusto! + - Ne uklanjajte stare fabrike! Biće vam potrebne za otključavanje + nadogradnji. + - Pokušajte da samostalno završite 20-ti nivo, pre nego što zatražite pomoć! + - Ne komplikujte stvari, pokušajte da pravite što jednostavnije fabrike. + - Možda ćete kasnije morati ponovo da koristite fabrike. Isplanirajte ih + tako da budu ponovo upotrebljive. + - Ponekad možete da nađete potreban oblik na mapi, bez da ga pravite + slagačima. + - Kompletne vetrenjače se ne mogu naći na mapi. + - Obojite oblike pre rezanja za maksimalnu efikasnost. + - Koristite module! + - Napravite posebnu fabriku za nacrte, bitna je za module. + - Pažljivo pogledajte sličicu na mešalici boja, ako imate problema sa bojama. + - Držite taster <b>CTRL</b> i prevucite klikom miša kako bi izabrali oblast. + - Izgradnja blizu središta može smetati kasnijim fabrikama. + - Špenadla pored svakog oblika u listi nadogradnji će taj oblik zakačiti na + ekran. + - Pomešajte sve osnovne boje kako bi dobili belu boju! + - Mapa je beskonačno velika, izbegavajte pravljenje skučenih fabrika, + proširite se! + - Takođe probajte Factorio! To mi je omiljena igra. + - Četvorostruki rezač reže u smeru kazaljke na satu počevši od gornje deve + četvrtine! + - Možete da preuzmete sačuvane igre u glavnom meniju! + - Ova igra ima dosta korisnih prečica! Obavezno pogledajte podešavanja. + - Ova igra ima dosta podešavanja, obavezno bacite pogled na njih! + - Putokaz čvorišta ima mali kompas koji pokazuje smer čvorišta! + - Da bi očistili trake, izrežite oblast i onda je nalepite na isto mesto. + - Pritisnite F4 kako bi prikazali FPS i Brzinu Otkucaja. + - Pritisnite dvaput F4 kako bi prikazali lokaciju polja miša i kamere. + - Možete kliknuti na zakačen oblik na levi krstić kako bi ga otkačili. +puzzleMenu: + play: Igraj + edit: Uredi + title: Slagalice + createPuzzle: Kreiraj Slagalicu + loadPuzzle: Učitaj + reviewPuzzle: Oceni & Objavi + validatingPuzzle: Proveravanje Slagalice + submittingPuzzle: Podnošenje Slagalice + noPuzzles: Trenutno nemate slagalica ovde. + categories: + levels: Nivoi + new: Novo + top-rated: Najbolje ocenjene + mine: Moje Slagalice + easy: Lako + hard: Teško + completed: Završeno + medium: Srednje + official: Oficijalno + trending: Popularno danas + trending-weekly: Popularno nedeljno + categories: Kategorije + difficulties: Po težini + account: Moje Slagalice + search: Pretraga + validation: + title: Slagalica nije validna! + noProducers: Postavite Stalnog Proizvođača! + noGoalAcceptors: Postavite Ciljni Blok! + goalAcceptorNoItem: Jedan ili više Ciljnih Blokova još uvek nemaju dodeljen + predmet. Dostavite oblik kako bi ga postavili kao cilj. + goalAcceptorRateNotMet: Jedan ili više Ciljnih Blokova ne dobijaju dovoljno + predmeta. Budite sigurni da su indikatori zeleni za sve ove blokove. + buildingOutOfBounds: Jedna ili više građevina su van zone izgradnje. Ili + povećajte zonu ili uklonite te građevine. + autoComplete: Vaša slagalica se završava automatski! Uverite se da stalni + proizvođači ne isporučuju direktno ciljnim blokovima. + difficulties: + easy: Lako + medium: Srednje + hard: Teško + unknown: Unrated + dlcHint: Već imate kupljenu ekspanziju? Desnim klikom na shapez.io u vašoj + biblioteci, nakon toga na Properties > DLCs, proverite da li je + aktivirana. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: Previše često pokušavate nešto. Sačekajte malo. + invalid-api-key: Komunikacija sa pozadinskim serverom nije uspela, pokušajte da + ažurirate/restartujete igru (Nevažeći Api Ključ). + unauthorized: Komunikacija sa pozadinskim serverom nije uspela, pokušajte da + ažurirate/restartujete igru (Neovlašćeno). + bad-token: Komunikacija sa pozadinskim serverom nije uspela, pokušajte da + ažurirate/restartujete igru (Loš Token). + bad-id: Nevažeći identifikator slagalice. + not-found: Nije moguće pronaći datu slagalicu. + bad-category: Nije moguće pronaći datu kategoriju. + bad-short-key: Navedeni kratki ključ nije važeći. + profane-title: Vaša slagalica sadrži ružne reči. + bad-title-too-many-spaces: Naslov slagalice je previše kratak. + bad-shape-key-in-emitter: Nevalidan predmet u stalnom proizvođaču. + bad-shape-key-in-goal: Nevalidan predmet u ciljnom bloku. + no-emitters: Slagalica ne sadrži nijedan stalni proizvođač. + no-goals: Slagalica ne sadrži nijedan ciljni blok. + short-key-already-taken: Ovaj kratak kod je već zauzet, molimo da odaberete drugi. + can-not-report-your-own-puzzle: Ne možete prijaviti lične slagalice. + bad-payload: Zahtev sadrži nevažeće podatke. + bad-building-placement: Slagalica sadrži nevažeće postavljene građevine. + timeout: Vreme za izvršenje zahteva je isteklo. + too-many-likes-already: Slagalica ima dosta lajkova. Ako i dalje želite da je + uklonite, molimo da kontaktirate support@shapez.io! + no-permission: Nemate dozvolu za izvršenje ove radnje. diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml index c8bab8f8..4c1db212 100644 --- a/translations/base-sv.yaml +++ b/translations/base-sv.yaml @@ -52,6 +52,7 @@ global: escape: ESC shift: SKIFT space: MELLANSLAG + loggingIn: Logging in demoBanners: title: Demo-version intro: Skaffa den fristående versionen för att låsa upp alla funktioner! @@ -72,6 +73,12 @@ mainMenu: madeBy: Skapad av <author-link> subreddit: Reddit savegameUnnamed: Namnlöst + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: OK @@ -85,6 +92,9 @@ dialogs: viewUpdate: Se uppdateringar showUpgrades: Visa uppgraderingar showKeybindings: Visa tangentbindingar + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Importfel text: "Kunde inte importera sparfil:" @@ -186,6 +196,70 @@ dialogs: title: Handledning Tillgänglig desc: Det finns en handledningsvideo tillgänglig för denna nivå, men den är bara tillgänglig på engelska. Vill du se den? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Flytta @@ -207,6 +281,7 @@ ingame: clearSelection: Rensa vald pipette: Pipett switchLayers: Byt lager + clearBelts: Clear belts buildingPlacement: cycleBuildingVariants: Tryck ned <key> För att bläddra igenom varianter. hotkeyLabel: "Snabbtangent: <key>" @@ -354,6 +429,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Rullband, Distributörer & Tunnlar @@ -559,6 +675,18 @@ buildings: name: Item Producer description: Endast tillgänglig i sandlådeläge, avger en given signal från kabellagret till det vanliga lagret. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Att klippa former @@ -887,7 +1015,12 @@ settings: title: Map Resources Size description: Controls the size of the shapes on the map overview (when zooming out). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: Snabbtangenter hint: "Tips: Se till att använda CTRL, SKIFT, och ALT! De låter dig använda @@ -965,6 +1098,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: Om detta spel body: >- @@ -1050,3 +1188,88 @@ tips: - Press F4 to show your FPS and Tick Rate. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml index 9291372c..f793972a 100644 --- a/translations/base-tr.yaml +++ b/translations/base-tr.yaml @@ -14,15 +14,14 @@ steamPage: Oyunu Steam'de satın almak tam sürüme erişimi sağlayacak, ama herzaman shapez.io deneme sürümünü oynayıp sonradan karar verebilirsin! what_others_say: İnsanlar shapez.io hakkında ne düşünüyor? - nothernlion_comment: Bu oyun süper - Oynarken harika vakit geçiriyorum - ve zaman akıp gidiyor. - notch_comment: Hay aksi. Gerçekten uyumalıyım, ama şimdi shapez.io'da - nasıl bir bilgisayar yapabileceğimi çözdüm. - steam_review_comment: Bu oyun hayatımı çaldı ve geri istemiyorum. - Üretim hatlarımı daha verimli yapmamı engelleyemeyecek kadar güzel bir - fabrika oyunu. + nothernlion_comment: Bu oyun süper - Oynarken harika vakit geçiriyorum ve zaman akıp gidiyor. + notch_comment: Hay aksi. Gerçekten uyumalıyım, ama şimdi shapez.io'da nasıl bir + bilgisayar yapabileceğimi çözdüm. + steam_review_comment: Bu oyun hayatımı çaldı ve geri istemiyorum. Üretim + hatlarımı daha verimli yapmamı engelleyemeyecek kadar güzel bir fabrika + oyunu. global: - loading: Yüklenİyor + loading: Yükleniyor error: Hata thousandsDivider: "," decimalSeparator: . @@ -52,16 +51,17 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Giriş yapılıyor demoBanners: title: Deneme Sürümü intro: Bütün özellikleri açmak için tam sürümü satın alın! mainMenu: play: Oyna - changelog: Değİşİklİk Günlüğü + changelog: Değişiklik Günlüğü importSavegame: Kayıt Yükle openSourceHint: Bu oyun açık kaynak kodlu! - discordLink: Resmİ Discord Sunucusu - helpTranslate: Çevİrİye yardım et! + discordLink: Resmi Discord Sunucusu + helpTranslate: Çeviriye yardım et! browserWarning: Üzgünüz, bu oyunun tarayıcınızda yavaş çalıştığı biliniyor! Tam sürümü satın alın veya iyi performans için Chrome tarayıcısını kullanın. savegameLevel: Seviye <x> @@ -71,6 +71,13 @@ mainMenu: madeBy: <author-link> tarafından yapıldı subreddit: Reddit savegameUnnamed: İsimsiz + puzzleMode: Yapboz Modu + back: Geri + puzzleDlcText: Fabrikaları küçültmeyi ve verimli hale getirmekten keyif mi + alıyorsun? Şimdi Yapboz Paketini (DLC) Steam'de alarak keyfine keyif + katabilirsin! + puzzleDlcWishlist: İstek listene ekle! + puzzleDlcViewNow: Paketi (DLC) görüntüle dialogs: buttons: ok: OK @@ -84,6 +91,9 @@ dialogs: viewUpdate: Güncellemeleri Görüntüle showUpgrades: Geliştirmeleri Göster showKeybindings: Tuş Kısayollarını Göster + retry: Yeniden Dene + continue: Devam Et + playOffline: Çevrimdışı Oyna importSavegameError: title: Kayıt yükleme hatası text: "Oyun kaydı yükleme başarısız:" @@ -94,11 +104,9 @@ dialogs: title: Oyun bozuk text: "Oyun yükleme başarısız:" confirmSavegameDelete: - title: Sİlme İşlemİnİ onayla - text: >- - Bu kaydı silmek istediğinize emin misiniz?<br><br> - '<savegameName>' seviyesi <savegameLevel><br><br> - Bu işlem geri alınamaz! + title: Silme İşlemini onayla + text: Bu kaydı silmek istediğinize emin misiniz?<br><br> '<savegameName>' + seviyesi <savegameLevel><br><br> Bu işlem geri alınamaz! savegameDeletionError: title: Silme başarısız text: "Oyun kaydı silinemedi:" @@ -122,8 +130,8 @@ dialogs: için tam versiyonu satın alın. oneSavegameLimit: title: Sınırlı Oyun Kaydı - desc: Deneme sürümünde sadece tek bir oyun kaydınız olabilir. Lütfen mevcut kaydı - silin veya tam sürümü satın alın! + desc: Deneme sürümünde sadece tek bir oyun kaydınız olabilir. Lütfen mevcut + kaydı silin veya tam sürümü satın alın! updateSummary: title: Yeni güncelleme! desc: "Son oynadığınızdan bu yana gelen değişikler:" @@ -150,8 +158,8 @@ dialogs: taşıma bantlarının yönünü ters çevirir.<br>" createMarker: title: Yeni Konum İşareti - desc: Anlamlı bir isim ver. Ayrıca <strong>Şekil kodu da</strong> koyabilirsiniz - (<link>Buradan</link> kod yapabilirsiniz ) + desc: Anlamlı bir isim ver. Ayrıca <strong>Şekil kodu da</strong> + koyabilirsiniz (<link>Buradan</link> kod yapabilirsiniz ) titleEdit: Konum İşaretini Düzenle markerDemoLimit: desc: Deneme sürümünde sadece iki adet yer imi oluşturabilirsiniz. Sınırsız yer @@ -184,11 +192,77 @@ dialogs: title: Eğitim Mevcut desc: Bu seviye için eğitim videosu mevcut, ama İngilizce dilinde. İzlemek ister misin? + editConstantProducer: + title: Eşya Seç + puzzleLoadFailed: + title: Yapbozlar yüklenirken hata oluştu + desc: "Malesef yapbozlar yüklenemedi:" + submitPuzzle: + title: Yapboz Yayınla + descName: "Yapbozuna bir isim ver:" + descIcon: "Lütfen yapbozunun ikonu olacak eşsiz kısa bir anahtar gir. (Anahtarı + <link>buradan</link> oluşturabilirsin, yada aşagıdaki şekillerden + rastgele birini seçebilirsin):" + placeholderName: Yapboz İsmi + puzzleResizeBadBuildings: + title: Yeniden boyutlandırma mümkün değil + desc: Alanı daha fazla küçültemezsin, çünkü bazı yapılar alanın dışında + kalabilir. + puzzleLoadError: + title: Kötü Yapboz + desc: "Yapboz yüklenirken hata oluştu:" + offlineMode: + title: Çevrİmdışı Modu + desc: Sunuculara ulaşamadık, bu yüzden oyun çevrimdışı modda çalışmak zorunda. + Lütfen aktif bir internet bağlantısı olduğundan emin olunuz. + puzzleDownloadError: + title: İndirme Hatası + desc: "Yapboz indirilemedi:" + puzzleSubmitError: + title: Yayınlama Hatası + desc: "Yapboz yayınlanamadı:" + puzzleSubmitOk: + title: Yapboz Yayınlandı + desc: Tebrikler! Yapbozun yayınlandı ve artık başkaları tarafından + oynanabilecek. Şimdi yapbozunu "Yapbozlarım" kısmında bulabilirsin. + puzzleCreateOffline: + title: Çevrimdışı Modu + desc: Çevrimdışı olduğundan yapbozunu kayıt edemeyecek veya yayınlayamayacaksın. + Devam etmek istediğinize emin misiniz? + puzzlePlayRegularRecommendation: + title: Öneri + desc: Ben <strong>muhakkak</strong> yapboz moduna başlamadan önce normal oyunu + seviye 12'ye kadar oynamayı tavsiye ediyorum, aksi takdirde henüz + sunulmamış mekaniklerle (yapılar ve oynanış şekilleri) + karşılaşabilirsiniz. + puzzleShare: + title: Kısa Anahtar Kopyalandı + desc: Yapbozun kısa anahtarı (<key>) kopyala/yapıştır hafızasına kopyalandı! Bu + anahtar yapboz menüsünde, yapboza erişmek için kullanılabilir. + puzzleReport: + title: Yapbozu Şikayet Et + options: + profane: Ayrımcılık (din, dil, ırk) + unsolvable: Çözülemez Yapboz + trolling: Trolleme + puzzleReportComplete: + title: Geri bildiriminiz için teşekkürler! + desc: Yapboz işaretlendi. + puzzleReportError: + title: Şikayet edilemedi + desc: "Şikayetiniz iletilemedi:" + puzzleLoadShortKey: + title: Kısa anahtar gir + desc: Yapbozu yüklemek için kısa anahtarı giriniz + puzzleDelete: + title: Yapboz silinsin mi? + desc: "'<title>' yapbozunu silmek istediğinize emin misiniz? Bu işlem geri + alınamaz!" ingame: keybindingsOverlay: moveMap: Hareket Et selectBuildings: Alan seç - stopPlacement: Yerleştİrmeyİ durdur + stopPlacement: Yerleştirmeyi durdur rotateBuilding: Yapıyı döndür placeMultiple: Çoklu yerleştir reverseOrientation: Yönünü ters çevir @@ -202,9 +276,10 @@ ingame: plannerSwitchSide: Planlayıcıyı ters çevir cutSelection: Kes copySelection: Kopyala - clearSelection: Seçimi temİzle + clearSelection: Seçimi temizle pipette: Pipet switchLayers: Katman değiştir + clearBelts: Bantları temizle buildingPlacement: cycleBuildingVariants: Yapının farklı türlerine geçmek için <key> tuşuna bas. hotkeyLabel: "Kısayol: <key>" @@ -258,7 +333,7 @@ ingame: blueprintPlacer: cost: Bedel waypoints: - waypoints: Yer imler + waypoints: Yer imleri hub: MERKEZ description: Sol-tık ile Yer imlerine git, sağ-tık ile yer imini sil.<br><br>Mevcut konumdan yer imi oluşturmak için <keybinding>'a @@ -354,6 +429,49 @@ ingame: achievements: title: Başarımlar desc: Bütün başarımları açmaya çalış! + puzzleEditorSettings: + zoneTitle: Alan + zoneWidth: Genişlik + zoneHeight: Yükseklik + trimZone: Alanı Sınırlandır + clearItems: Eşyaları temizle + share: Paylaş + report: Şikayet et + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Yapboz Oluşturucu + instructions: + - 1. Oyunculara şekil ve renk sağlamak için <strong>Sabit + Üreticileri</strong> yerleştir. + - 2. Oyuncuların üretmesi ve bir veya birden fazla <strong>Hedef + Merkezine</strong> teslim edebilmeleri için bir veya birden fazla + şekil oluştur. + - 3. Bir Hedef Merkezine belirli bir zaman içinde şekil teslim + edilirse, Hedef Merkezi bunu oyuncuların tekrardan üreteceği bir + <strong>hedef olarak kabul eder</strong> (<strong>Yeşil + rozetle</strong> gösterilmiş). + - 4. Bir yapıyı devre dışı bırakmak için üzerindeki <strong>kilit + butonuna</strong> basınız. + - 5. Gözat butonuna bastığınız zaman, yapbozunuz onaylanacaktır ve + sonra onu yayınlayabileceksiniz. + - 6. Yayınlandığı zaman, Sabit Üreticiler ve Hedef Merkezleri + dışındaki <strong>bütün yapılar silinecektir</strong> - Bu kısmı + oyuncuların kendisi çözmesi gerekecek sonuçta :) + puzzleCompletion: + title: Yapboz Tamamlandı! + titleLike: "Yapbozu beğendiyseniz kalbe tıklayınız:" + titleRating: Yapbozu ne kadar zor buldunuz? + titleRatingDesc: Değerlendirmeniz size daha iyi öneriler sunmamda yardımcı olacaktır + continueBtn: Oynamaya Devam Et + menuBtn: Menü + nextPuzzle: Sonraki Yapboz + puzzleMetadata: + author: Yapımcı + shortKey: Kısa Anahtar + rating: Zorluk + averageDuration: Ortamala Süre + completionRate: Tamamlama Süresi shopUpgrades: belt: name: Taşıma Bandı, Dağıtıcılar & Tüneller @@ -383,7 +501,7 @@ buildings: name: Üretici description: Bir şekli veya rengi üretmek için üzerine yerleştir. chainable: - name: Üretici (Zİncİrleme) + name: Üretici (Zincirleme) description: Bir şekli veya rengi üretmek için üzerine yerleştir. Zincirleme bağlanabilir. underground_belt: @@ -446,12 +564,12 @@ buildings: wire: default: name: Kablo - description: Eşya, renk ve ikili değerler(1 / 0) gibi sinyalleri aktarmayı sağlar. - Farklı renkteki kablolar bağlanamaz. + description: Eşya, renk ve ikili değerler(1 / 0) gibi sinyalleri aktarmayı + sağlar. Farklı renkteki kablolar bağlanamaz. second: name: Kablo - description: Eşya, renk ve ikili değerler(1 / 0) gibi sinyalleri aktarmayı sağlar. - Farklı renkteki kablolar bağlanamaz. + description: Eşya, renk ve ikili değerler(1 / 0) gibi sinyalleri aktarmayı + sağlar. Farklı renkteki kablolar bağlanamaz. wire_tunnel: default: name: Kablo Tüneli @@ -467,16 +585,16 @@ buildings: name: Birleştirici (tekil) description: İki taşıma bandını bir çıktı verecek şekilde birleştirir. splitter: - name: Ayırıcı (tekİl) + name: Ayırıcı (tekil) description: Bir taşıma bandını iki çıktı verecek şekilde ayırır. splitter-inverse: - name: Ayırıcı (tekİl) + name: Ayırıcı (tekil) description: Bir taşıma bandını iki çıktı verecek şekilde ayırır. storage: default: name: Depo - description: Belirli bir sınıra kadar fazla eşyaları depolar. Sol çıkışa öncelik verir ve taşma kapısı - olarak kullanılabilir. + description: Belirli bir sınıra kadar fazla eşyaları depolar. Sol çıkışa öncelik + verir ve taşma kapısı olarak kullanılabilir. constant_signal: default: name: Sabit Sinyal @@ -562,6 +680,18 @@ buildings: name: Eşya Üretici description: Sadece kum kutusu modunda açık, kablo katmanındaki sinyali normal katmanda çıktı olarak verir. + constant_producer: + default: + name: Sabİt Üretİcİ + description: Sabit olarak belirli bir şekli veya rengi üretir. + goal_acceptor: + default: + name: Hedef Merkezİ + description: Şekilleri hedef olarak tanımlamak için hedef merkezine teslim et. + block: + default: + name: Engel + description: Bir karoyu kullanıma kapatmayı sağlar. storyRewards: reward_cutter_and_trash: title: Şekilleri Kesmek @@ -591,7 +721,7 @@ storyRewards: <strong>birleştirilir</strong>, yoksa sol girişteki şeklin <strong>üzerine kaynaştırılır</strong>! reward_splitter: - title: Ayırıcı/Bİrleştİrİcİ + title: Ayırıcı/Birleştirici desc: <strong>Ayırıcıyı</strong> açtın! <strong>dengeleyicin</strong> başka bir türü - Tek giriş alıp ikiye ayırır reward_tunnel: @@ -599,7 +729,7 @@ storyRewards: desc: <strong>Tünel</strong> açıldı - Artık eşyaları taşıma bantları ve yapılar altından geçirebilirsiniz! reward_rotater_ccw: - title: Saat yönünün tersİnde Döndürme + title: Saat yönünün tersinde Döndürme desc: <strong>Döndürücünün</strong> farklı bir türünü açtın - Şekiller artık saat yönünün tersinde döndürülebilir! İnşa etmek için döndürücüyü seç ve <strong>türler arası geçiş yapmak için 'T' tuşuna @@ -616,7 +746,7 @@ storyRewards: <strong>daha yüksek</strong> ve tünel türlerini artık içiçe kullanabilirsin! reward_cutter_quad: - title: Çeyreğİnİ Kesme + title: Çeyreğini Kesme desc: <strong>Kesicinin</strong> yeni bir türünü açtın - Bu tür şekilleri iki parça yerine <strong>dört parçaya</strong> ayırabilir! reward_painter_double: @@ -711,13 +841,13 @@ storyRewards: et.<br><br> Ne seçersen seç eğlenmeyi unutma! reward_wires_painter_and_levers: title: Kablolar ve Dörtlü Boyayıcı - desc: "You just unlocked the <strong>Wires Layer</strong>: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!<br><br> For the beginning I unlocked you the <strong>Quad - Painter</strong> - Connect the slots you would like to paint with on - the wires layer!<br><br> To switch to the wires layer, press - <strong>E</strong>. <br><br> PS: <strong>Enable hints</strong> in - the settings to activate the wires tutorial!" + desc: "Az önce the <strong>Tel Katmanının</strong> kilidini açtın : Normal + katmanın üzerinde ayrı bir katman ve yeni mekanikler + sunmakta!<br><br> Başlangıç için sana <strong>Quad + Painter'ı</strong> açtım - Tel tabakasındaki bağlamak istediğin + yuvaları bağla !<br><br> Tel katmanına geçmek için + <strong>E</strong> tuşuna bas. <br><br> NOT:Kablolar öğreticisini + aktive etmek için <strong>ipuçlarını etkinleştir</strong> !" reward_filter: title: Eşya Filtresi desc: <strong>Eşya filtresini</strong> açtın! Kablo katmanından gelen sinyalle @@ -729,7 +859,7 @@ settings: categories: general: Genel userInterface: Kullanıcı Arayüzü - advanced: Gelişmİş + advanced: Gelİşmİş performance: Performans versionBadges: dev: Geliştirme @@ -817,7 +947,7 @@ settings: twenty_minutes: 20 Dakika disabled: Devredışı compactBuildingInfo: - title: Derlİ Toplu Yapı Bİlgİlerİ + title: Derli Toplu Yapı Bilgileri description: Yapıların bilgi kutularını sadece oranlarını göstecek şekilde kısaltır. Aksi takdirde yapının açıklaması ve resmi gösterilir. disableCutDeleteWarnings: @@ -847,24 +977,24 @@ settings: title: Ses Ayarı description: Ses efektlerinin seviyesini ayarlar musicVolume: - title: Müzİk Ayarı + title: Müzik Ayarı description: Müzik seviyesini ayarlar lowQualityMapResources: - title: Düşük Kalİte Harİta Kaynakları + title: Düşük Kalite Harİta Kaynakları description: Oyun performansını artırmak için haritada görünen kaynakların çizim - kalitesini sadeleştirir. - Hatta daha net bir görüntü sağlar, bu yüzden bir dene! + kalitesini sadeleştirir. Hatta daha net bir görüntü sağlar, bu + yüzden bir dene! disableTileGrid: - title: Harİta Çİzgİlerİnİ Gİzle + title: Harita Çizgilerini Gizle description: Harita çizgilerini gizlemek oyun performansına yardımcı olabilir. Aynı zamanda oyunun daha net görünmesini sağlar! clearCursorOnDeleteWhilePlacing: - title: Sağ Tık İnşa İptalİ + title: Sağ Tık İnşa İptali description: Varsayılan olarak açık. Özellik açıksa, inşa modundayken sağ yık yapıldığında inşa modundan çıkar. Eğer özellik kapalıysa, inşa modundan çıkmadan var olan yapıları sağ tık ile silebilirsiniz. lowQualityTextures: - title: Düşük Kalİte Görüntü (Çİrkİn) + title: Düşük Kalite Görüntü (Çirkin) description: Performans için düşük kalite görüntü kullanır. Bu oyunun daha çirkin görünmesine sebep olur! displayChunkBorders: @@ -872,11 +1002,11 @@ settings: description: Oyun 16'ya 16 alanlardan oluşur. Bu seçenek aktif olduğunda alan sınırları görüntülenir. pickMinerOnPatch: - title: Kaynak Üzerinde Üretİcİ Seç + title: Kaynak Üzerinde Üretici Seç description: Varsayılan olarak açık. Eğer pipet bir kaynağın üzerinde kullanılırsa, üreteç yapısı inşa için seçilir. simplifiedBelts: - title: Sadeleştİrİlmİş Bantlar (Çİrkİn) + title: Sadeleştirilmiş Bantlar (Çirkin) description: Taşıma bandı üzerindeki eşyalar fare imleci üzerinde değilse görüntülenmez. Eğer gerçekten performansa ihtiyacınız yoksa bu ayarla oynamanız tavsiye edilmez. @@ -892,6 +1022,11 @@ settings: title: Uzak Bakışta Kaynakların Büyüklüğü description: Haritaya uzaktan bakıldığında, haritadaki şekillerin büyüklüğünü ayarlar. + shapeTooltipAlwaysOn: + title: Şekil İpucu - Her Zaman Göster + description: Şekil ipuçlarını 'ALT' tuşuna basarak göstermek yerine her zaman + gösterir. + tickrateHz: <amount> Hz keybindings: title: Tuş Atamaları hint: "İpucu: CTRL, SHIFT ve ALT tuşlarından yararlanın! Farklı yerleştirme @@ -965,10 +1100,15 @@ keybindings: comparator: Karşılaştırıcı item_producer: Eşya Üretici (Kum Kutusu) copyWireValue: "Kablo: Fare altındaki değeri kopyala" - rotateToUp: "Yukarı Döndür" - rotateToDown: "Aşağı Döndür" - rotateToRight: "Sağa Döndür" - rotateToLeft: "Sola Döndür" + rotateToUp: Yukarı Döndür + rotateToDown: Aşağı Döndür + rotateToRight: Sağa Döndür + rotateToLeft: Sola Döndür + constant_producer: Sabit Üretici + goal_acceptor: Hedef Merkezi + block: Engel + massSelectClear: Bantları temizle + showShapeTooltip: Şekil çıkış ipucunu göster about: title: Oyun Hakkında body: >- @@ -984,7 +1124,7 @@ about: Son olarak, en iyi arkadaşım <a href="https://github.com/niklas-dahl" target="_blank">Niklas'a</a> büyük teşekkürler. Factorio oyunlarımız olmasaydı bu oyun hiç var olmamış olacaktı. changelog: - title: Değİşİklİk Günlüğü + title: Değişiklik Günlüğü demo: features: restoringGames: Oyun kayıtlarını yükleme @@ -1067,3 +1207,89 @@ tips: - Farenizin ve kameranızın sınırlarını göstermek için F4'e iki kez basın. - Sol tarafta sabitlenmiş bir şekle tıklayarak sabitlemesini kaldırabilirsiniz. +puzzleMenu: + play: Oyna + edit: Düzenle + title: Yapboz Modu + createPuzzle: Yapboz Oluştur + loadPuzzle: Yükle + reviewPuzzle: Gözat & Yayınla + validatingPuzzle: Yapboz onaylanıyor + submittingPuzzle: Yapboz yayınlanıyor + noPuzzles: Bu kısımda yapboz yok. + categories: + levels: Seviyeler + new: Yenİ + top-rated: En İyİ Değerlendirilen + mine: Yapbozlarım + easy: Kolay + hard: Zor + completed: Tamamlanan + medium: Orta + official: Resmİ + trending: Bugün öne çıkan + trending-weekly: Haftalık öne çıkan + categories: Kategorİler + difficulties: Zorluğa göre + account: Yapbozlarım + search: Ara + validation: + title: Geçersiz Yapboz + noProducers: Lütfen bir Sabit Üretici yerleştiriniz! + noGoalAcceptors: Lütfen bir Hedef Merkezi yerleştiriniz! + goalAcceptorNoItem: Bir veya birden fazla Hedef Merkezine şekil gönderilmedi. + Hedef belirlemek için onlara şekil gönderiniz. + goalAcceptorRateNotMet: Bir veya birden fazla Hedef Merkezi yeterince eşya + almıyor. Hedef Merkezlerindeki bütün göstergelerin yeşil olduğundan + emin olunuz. + buildingOutOfBounds: Bir veya birden fazla yapı inşa edilebilir alanın dışında. + Alanı azaltınız veya yapıları siliniz. + autoComplete: Yapbozunuz kendisini çözüyor! Sabit üreticilerin hedef + merkezlerine direkt olarak şekil göndermediğinden emin olunuz. + difficulties: + easy: Kolay + medium: Orta + hard: Zor + unknown: Değerlendirilmemiş + dlcHint: Paketi (DLC) çoktan aldın mı? Kütüphanende oyuna sağ tıklayarak, + Özellikler > DLC, paketi etkileştirmeyi unutma. + search: + action: Arama + placeholder: Bir yapboz veya tasarımcı adı giriniz. + includeCompleted: Tamamlananları Göster + difficulties: + any: Hepsi + easy: Kolay + medium: Orta + hard: Zor + durations: + any: Hepsi + short: Kısa (< 2 dk) + medium: Normal + long: Uzun (> 10 dk) +backendErrors: + ratelimit: Çok sık işlem yapıyorsunuz. Biraz bekleyiniz. + invalid-api-key: Arka tarafla iletişim kurulamadı, lütfen oyunu + güncellemeyi/yeniden başlatmayı deneyiniz (Geçersiz Api Anahtarı). + unauthorized: Arka tarafla iletişim kurulamadı, lütfen oyunu + güncellemeyi/yeniden başlatmayı deneyiniz (Yetkisiz erişim). + bad-token: Arka tarafla iletişim kurulamadı, lütfen oyunu güncellemeyi/yeniden + başlatmayı deneyiniz (Kötü Anahtar). + bad-id: Geçersiz Yapboz tanımlayıcısı (ID). + not-found: İstenilen Yapboz bulunamadı. + bad-category: İstenilen kategori bulunamadı. + bad-short-key: Girilen kısa anahtar geçersiz. + profane-title: Yapboz ismi ayrımcı kelimeler(din,dil,ırk) içeriyor. + bad-title-too-many-spaces: Yapboz ismi çok kısa. + bad-shape-key-in-emitter: Bir sabit üreticide geçersiz bir eşya mevcut. + bad-shape-key-in-goal: Bir hedef merkezinde geçersiz bir eşya mevcut. + no-emitters: Yapbozda hiç sabit üretici yok. + no-goals: Yapbozda hiç hedef merkezi yok. + short-key-already-taken: Bu kısa anahtar kullanılıyor, lütfen başka bir tane kullanınız. + can-not-report-your-own-puzzle: Kendi yapbozunuzu şikayet edemezsiniz. + bad-payload: İstek geçersiz veri içeriyor. + bad-building-placement: Yapbozunuzda uygun yerleştirilmeyen yapılar mevcut. + timeout: İstek zaman aşımına uğradı. + too-many-likes-already: Yapbozun zaten çok beğenisi var. Yine de silmek + istiyorsanız support@shapez.io ile iletişime geçiniz! + no-permission: Bu işlemi yapmak için izniniz yok. diff --git a/translations/base-uk.yaml b/translations/base-uk.yaml index b051f13d..03071b1d 100644 --- a/translations/base-uk.yaml +++ b/translations/base-uk.yaml @@ -52,6 +52,7 @@ global: escape: ESC shift: SHIFT space: SPACE + loggingIn: Logging in demoBanners: title: Демо-версія intro: Завантажте повну версію, щоб розблокувати всі можливості та вміст! @@ -72,6 +73,12 @@ mainMenu: savegameLevel: Рівень <x> savegameLevelUnknown: Невідомий рівень savegameUnnamed: Unnamed + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: Гаразд @@ -85,6 +92,9 @@ dialogs: viewUpdate: Переглянути оновлення showUpgrades: Показати поліпшення showKeybindings: Показати прив’язки клавіш + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: Помилка при імпортуванні text: "Не вдалося імпортувати вашу збережену гру:" @@ -184,6 +194,70 @@ dialogs: title: Доступна інструкція desc: Для цього рівня доступна відео-інструкція, але вона доступна лише на Англійській. Чи бажаєте переглянути її? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: Рухатися @@ -205,6 +279,7 @@ ingame: clearSelection: Очистити виділене pipette: Піпетка switchLayers: Змінити шар + clearBelts: Clear belts colors: red: Червоний green: Зелений @@ -271,10 +346,10 @@ ingame: waypoints: waypoints: Позначки hub: Центр - description: Left-click a marker to jump to it, right-click to delete - it.<br><br>Press <keybinding> to create a marker from the current - view, or <strong>right-click</strong> to create a marker at the - selected location. + description: Натисніть ліву кнопку миші на позначці, щоб переміститися до неї, + праву - для її видалення.<br><br>Натисніть <keybinding> щоб створити + позначку на місці вашої камери, або <strong>праву кнопку + миші</strong>, щоб створити її в положенні курсора. creationSuccessNotification: Позначку створено. shapeViewer: title: Шари @@ -356,6 +431,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: Стрічки, розподілювачі і тунелі @@ -569,6 +685,18 @@ buildings: name: Генератор елементів description: Доступно лише в режимі Пісочниці, видає отриманий на шарі дроту сигнал в якості фігури на звичайний шар. + constant_producer: + default: + name: Constant Producer + description: Constantly outputs a specified shape or color. + goal_acceptor: + default: + name: Goal Acceptor + description: Deliver shapes to the goal acceptor to set them as a goal. + block: + default: + name: Block + description: Allows you to block a tile. storyRewards: reward_cutter_and_trash: title: Різання фігур @@ -904,6 +1032,11 @@ settings: mapResourcesScale: title: Розмір ресурсів на карті description: Регулює розмір фігур в режимі карти (при віддаленні). + shapeTooltipAlwaysOn: + title: Shape Tooltip - Show Always + description: Whether to always show the shape tooltip when hovering buildings, + instead of having to hold 'ALT'. + tickrateHz: <amount> Hz keybindings: title: Гарячі клавіши hint: '"Підказка: Упевніться, що ви використовуєте CTRL, SHIFT і ALT! Вони @@ -981,6 +1114,11 @@ keybindings: rotateToDown: "Rotate: Point Down" rotateToRight: "Rotate: Point Right" rotateToLeft: "Rotate: Point Left" + constant_producer: Constant Producer + goal_acceptor: Goal Acceptor + block: Block + massSelectClear: Clear belts + showShapeTooltip: Show shape output tooltip about: title: Про гру body: >- @@ -1080,3 +1218,88 @@ tips: координати камери. - Ви можете натиснути на фігуру, зкаріплену в лівому краю екрану, аби відкріпити її. +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/translations/base-zh-CN-ISBN.yaml b/translations/base-zh-CN-ISBN.yaml new file mode 100644 index 00000000..175cbd68 --- /dev/null +++ b/translations/base-zh-CN-ISBN.yaml @@ -0,0 +1,1083 @@ +steamPage: + shortText: “唯一能限制您的,只有您的想象力!” 《异形工厂》(Shapez.io) + 是一款在无限拓展的地图上,通过建造各类工厂设施,来自动化生产与组合出愈加复杂图形的游戏。 + discordLinkShort: 官方 Discord 服务器 + intro: |- + “奇形怪状,放飞想象!” + “自动生产,尽情创造!” + 《异形工厂》(Shapez.io)是一款能让您尽情发挥创造力,充分享受思维乐趣的IO游戏。 + 游戏很轻松,只需建造工厂,布好设施,无需操作即能自动创造出各种各样的几何图形。 + 挑战很烧脑,随着等级提升,需要创造的图形将会越来越复杂,同时您还需要在无限扩展的地图中持续扩建优化您的工厂。 + 以为这就是全部了吗? 不!图形的生产需求将会指数性增长,持续的扩大规模和熵增带来的无序,将会是令人头痛的问题! + 这还不是全部! 一开始我们创造了图形,然后我们需要学会提取和混合来让它们五颜六色。 + 然后,还有吗? 当然,唯有思维,方能无限。 + + 欢迎免费体验试玩版:“让您的想象力插上翅膀!” + 和最聪明的玩家一起挑战,请访问 Steam 游戏商城购买《异形工厂》(Shapez.io)的完整版, + what_others_say: 来看看玩家们对《异形工厂》(Shapez.io)的评价 + nothernlion_comment: 非常棒的有游戏,我的游戏过程充满乐趣,不觉时间飞逝。 + notch_comment: 哦,天哪!我真得该去睡了!但我想我刚刚搞定如何在游戏里面制造一台电脑出来。 + steam_review_comment: 这是一个不知不觉偷走你时间,但你并不会想要追回的游戏。非常烧脑的挑战,让我这样的完美主义者停不下来,总是希望可以再高效一些。 +global: + loading: 加载中 + error: 错误 + thousandsDivider: "," + decimalSeparator: . + suffix: + thousands: 千 + millions: 百万 + billions: 亿万 + trillions: 兆 + infinite: 无限 + time: + oneSecondAgo: 1秒前 + xSecondsAgo: <x>秒前 + oneMinuteAgo: 1分钟前 + xMinutesAgo: <x>分钟前 + oneHourAgo: 1小时前 + xHoursAgo: <x>小时前 + oneDayAgo: 1天前 + xDaysAgo: <x>天前 + secondsShort: <seconds>秒 + minutesAndSecondsShort: <minutes>分 <seconds>秒 + hoursAndMinutesShort: <hours>时 <minutes>分 + xMinutes: <x>分钟 + keys: + tab: TAB键 + control: CTRL键 + alt: ALT键 + escape: ESC键 + shift: SHIFT键 + space: 空格键 + loggingIn: 登录 +demoBanners: + title: 试玩版 + intro: 购买完整版以解锁所有游戏内容! +mainMenu: + play: 开始游戏 + changelog: 更新日志 + importSavegame: 读取存档 + openSourceHint: 本游戏已开源! + discordLink: 官方Discord服务器 + helpTranslate: 帮助我们翻译! + browserWarning: 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用 谷歌浏览器 或者购买完整版以得到更好的体验。 + savegameLevel: 第<x>关 + savegameLevelUnknown: 未知关卡 + continue: 继续游戏 + newGame: 新游戏 + madeBy: 作者:<author-link> + subreddit: Reddit + savegameUnnamed: 存档未命名 + puzzleMode: 谜题模式 + back: 返回 + puzzleDlcText: 新增谜题模式将带给您更多的游戏乐趣! + puzzleDlcWishlist: 添加心愿单! + puzzleDlcViewNow: View Dlc +dialogs: + buttons: + ok: 确认 + delete: 删除 + cancel: 取消 + later: 以后 + restart: 重新开始 + reset: 重置 + getStandalone: 获取完整版 + deleteGame: 我没疯!我知道我在做什么! + viewUpdate: 查看更新 + showUpgrades: 显示设施升级 + showKeybindings: 显示按键设置 + retry: 重试 + continue: 继续 + playOffline: 离线游戏 + importSavegameError: + title: 读取错误 + text: 未能读取您的存档: + importSavegameSuccess: + title: 读取成功 + text: 存档被成功读取 + gameLoadFailure: + title: 存档损坏 + text: 未能读取您的存档: + confirmSavegameDelete: + title: 确认删除 + text: 您确定要删除这个游戏吗?<br><br> '<savegameName>' 等级 <savegameLevel><br><br> 该操作无法回退! + savegameDeletionError: + title: 删除失败 + text: 未能删除您的存档 + restartRequired: + title: 需要重启游戏 + text: 您需要重启游戏以应用变更的设置。 + editKeybinding: + title: 更改按键设定 + desc: 请按下您想要使用的按键以设定,或者按下 ESC 键来取消设定。 + resetKeybindingsConfirmation: + title: 重置按键设定 + desc: 您将要重置所有按键设定,请确认。 + keybindingsResetOk: + title: 重置按键设定 + desc: 成功重置所有按键设定! + featureRestriction: + title: 试玩版 + desc: 您尝试使用了<feature>一项功能。该功能在试玩版中不可用。请考虑购买完整版以获得更好的体验。 + oneSavegameLimit: + title: 存档数量限制 + desc: 试玩版中只能保存一份存档。请删除旧存档或者购买完整版! + updateSummary: + title: 新内容更新啦! + desc: "以下为游戏最新更新内容:" + upgradesIntroduction: + title: 解锁升级 + desc: <strong>您生产过的所有图形都能被用来解锁升级。</strong> 所以不要销毁您之前建造的工厂! 注意:升级菜单在屏幕右上角。 + massDeleteConfirm: + title: 确认删除 + desc: 您将要删除很多设施,准确来说有<count>种! 您确定要这么做吗? + blueprintsNotUnlocked: + title: 尚未解锁 + desc: 您还没有解锁蓝图功能!通过第12关的挑战后可解锁蓝图。 + keybindingsIntroduction: + title: 实用快捷键 + desc: "这个游戏有很多有用的快捷键设定。 以下是其中的一些介绍,记得在<strong>按键设置</strong>中查看其他按键设定!<br><br> + <code class='keybinding'>CTRL键</code> + 拖动:选择区域以复制或删除。<br> <code + class='keybinding'>SHIFT键</code>: 按住以放置多个同一种设施。<br> <code + class='keybinding'>ALT键</code>: 反向放置传送带。<br>" + createMarker: + title: 创建地图标记 + desc: 填写一个有意义的名称, 还可以同时包含一个形状的 <strong>短代码</strong> (您可以 <link>点击这里</link> + 生成短代码) + titleEdit: 编辑地图标记 + markerDemoLimit: + desc: 在试玩版中您只能创建两个地图标记。请获取完整版以创建更多标记。 + massCutConfirm: + title: 确认剪切 + desc: 您将要剪切很多设施,准确来说有<count>种! 您确定要这么做吗? + exportScreenshotWarning: + title: 工厂截图 + desc: 您将要导出您整个工厂基地的截图。如果您已经建设了一个规模很大的基地,生成截图的过程将会很慢,且有可能导致游戏崩溃! + massCutInsufficientConfirm: + title: 确认剪切 + desc: 您没有足够的图形来粘贴这个区域!您确定要剪切吗? + editSignal: + title: 设置信号 + descItems: "选择一个预定义的项目:" + descShortKey: ... 或者输入图形的 <strong>短代码</strong> (您可以 <link>点击这里</link> 生成短代码) + renameSavegame: + title: 重命名游戏存档 + desc: 您可以在此重命名游戏存档。 + tutorialVideoAvailable: + title: 教程 + desc: 这个关卡有视频攻略! 您想查看这个视频攻略? + tutorialVideoAvailableForeignLanguage: + title: 教程 + desc: 这个关卡有英语版本的视频攻略! 您想查看这个视频攻略吗?? + editConstantProducer: + title: 设置项目 + puzzleLoadFailed: + title: 谜题载入失败 + desc: 谜题未能载入: + submitPuzzle: + title: 提交谜题 + descName: 为您的谜题命名: + descIcon: 请输入唯一的短代码,它将作为您的谜题图标显示(您可以在<link>这里</link>生成,或者从以下随机推荐的图形中选择一个): + placeholderName: 谜题标题 + puzzleResizeBadBuildings: + title: 无法重新定义尺寸 + desc: 由于某些设施将会超出区域范围,因此您无法将区域变得更小。 + puzzleLoadError: + title: 谜题出错! + desc: 谜题未能载入: + offlineMode: + title: 离线模式 + desc: 无法访问服务器,所以游戏以离线模式进行。请确认您的互联网访问正常。 + puzzleDownloadError: + title: 下载出错! + desc: 无法下载谜题: + puzzleSubmitError: + title: 提交出错! + desc: 无法提交谜题: + puzzleSubmitOk: + title: 谜题成功发布! + desc: 恭喜!您的谜题已经成功发布,其他玩家已经可以玩到。您可以在“我的谜题”中找到自己已发布的谜题。 + puzzleCreateOffline: + title: 离线模式 + desc: 由于您处在离线模式,所以无法保存或发布您的谜题,您是否还要继续? + puzzlePlayRegularRecommendation: + title: 游戏建议 + desc: <strong>强烈</strong>建议您至少完成游戏本体第12关以后再尝试挑战《谜题挑战者》,否则您在游戏过程中可能遇到困难,是否仍要继续? + puzzleShare: + title: 短代码已复制 + desc: 谜题(<key>)的短代码已复制到剪贴板!您可以在谜题菜单中输入它以访问谜题。 + puzzleReport: + title: 上报谜题 + options: + profane: 污言秽语 + unsolvable: 无法完成 + trolling: 恶意设计 + puzzleReportComplete: + title: 感谢您的反馈! + desc: 此谜已被标记! + puzzleReportError: + title: 上报失败 + desc: 无法处理您的上报: + puzzleLoadShortKey: + title: 输入短代码 + desc: 输入谜题的短代码并载入。 + puzzleDelete: + title: 删除谜题吗? + desc: 您是否确认删除 '<title>'?删除谜题后将无法恢复! +ingame: + keybindingsOverlay: + moveMap: 移动地图 + selectBuildings: 选择区域 + stopPlacement: 停止放置 + rotateBuilding: 转动设施 + placeMultiple: 放置多个 + reverseOrientation: 反向放置 + disableAutoOrientation: 关闭自动定向 + toggleHud: 切换可视化界面 + placeBuilding: 放置设施 + createMarker: 创建地图标记 + delete: 销毁 + pasteLastBlueprint: 粘贴上一个蓝图 + lockBeltDirection: 启用传送带规划器 + plannerSwitchSide: 规划器换边 + cutSelection: 剪切 + copySelection: 复制 + clearSelection: 取消选择 + pipette: 吸取器 + switchLayers: 切换层 + clearBelts: 清除传送带 + buildingPlacement: + cycleBuildingVariants: 按 <key> 键以选择设施的变型体。 + hotkeyLabel: "快捷键: <key>" + infoTexts: + speed: 速率 + range: 范围 + storage: 容量 + oneItemPerSecond: 1个/秒 + itemsPerSecond: <x>个/秒 + itemsPerSecondDouble: (2倍) + tiles: <x>格 + levelCompleteNotification: + levelTitle: 第<level>关 + completed: 完成 + unlockText: 解锁<reward>! + buttonNextLevel: 下一关 + notifications: + newUpgrade: 有新内容更新啦! + gameSaved: 游戏已保存。 + freeplayLevelComplete: 第 <level>关 完成了! + shop: + title: 升级 + buttonUnlock: 升级 + tier: <x>级 + maximumLevel: 最高级(<currentMult>倍速率) + statistics: + title: 统计信息 + dataSources: + stored: + title: 已存储 + description: 所有图形已存储于中心。 + produced: + title: 生产 + description: 所有图形已在工厂内生产,包括中间产物。 + delivered: + title: 交付 + description: 图形已交付到中心基地。 + noShapesProduced: 您还没有生产任何图形。 + shapesDisplayUnits: + second: <shapes> / 秒 + minute: <shapes> / 分 + hour: <shapes> / 小时 + settingsMenu: + playtime: 游戏时间 + buildingsPlaced: 设施数量 + beltsPlaced: 传送带数量 + tutorialHints: + title: 需要帮助? + showHint: 显示帮助 + hideHint: 关闭 + blueprintPlacer: + cost: 成本 + waypoints: + waypoints: 地图标记 + hub: 中心 + description: 左键点击地图标记以跳转到该处,右键点击可删除地图标记。<br><br>按 <keybinding> + 在当前地点创建地图标记,或者在选定位置上<strong>右键</strong>创建地图标记。 + creationSuccessNotification: 成功创建地图标记。 + interactiveTutorial: + title: 新手教程 + hints: + 1_1_extractor: 在<strong>圆形</strong>上放置一个<strong>开采器</strong>来获取圆形!<br><br>提示:<strong>按下鼠标左键</strong>选中<strong>开采器</strong> + 1_2_conveyor: 用<strong>传送带</strong>将您的开采器连接到中心基地上!<br><br>提示:选中<strong>传送带</strong>后<strong>按下鼠标左键可拖动</strong>布置传送带! + 1_3_expand: 您可以放置更多的<strong>开采器</strong>和<strong>传送带</strong>来更有效率地完成关卡目标。<br><br> + 提示:按住 <strong>SHIFT</strong> + 键可放置多个<strong>开采器</strong>,注意用<strong>R</strong> + 键可旋转<strong>开采器</strong>的出口方向,确保开采的图形可以顺利传送。 + 2_1_place_cutter: 现在放置一个<strong>切割器</strong>,这个设施可把<strong>圆形</strong>切成两半!<br><br>注意:无论如何放置,切割机总是<strong>从上到下</strong>切割。 + 2_2_place_trash: 使用切割机后产生的废弃图形会导致<strong>堵塞</strong>。<br><br>注意使用<strong>垃圾桶</strong>清除当前 + (!) 不需要的废物。 + 2_3_more_cutters: 干的好!现在放置<strong>2个以上的切割机</strong>来加快当前缓慢的过程!<br><br>提示:用<strong>快捷键0-9</strong>可以快速选择各项设施! + 3_1_rectangles: 现在让我们开采一些矩形!找到<strong>矩形地带</strong>并<strong>放置4个开采器</strong>并将它们用<strong>传送带</strong>连接到中心基地。<br><br> + 提示:选中<strong>传送带</strong>后按住<strong>SHIFT键</strong>可快速准确地规划<strong>传送带路线!</strong> + 21_1_place_quad_painter: 放置<strong>四口上色器</strong>并且获取一些<strong>圆形</strong>,<strong>白色</strong>和<strong>红色</strong>! + 21_2_switch_to_wires: 按 <strong>E</strong> 键选择<strong>电线层</strong>!<br><br> + 然后用导线连接上色器的<strong>四个输入口</strong>! + 21_3_place_button: 很好!现在放置一个<strong>开关</strong>并连接导线! + 21_4_press_button: 按下<strong>开关</strong>来<strong>产生正信号</strong>以激活<strong>上色器</strong>。<br><br>注:您不用连上所有的输入口!试着只接两个。 + colors: + red: 红色 + green: 绿色 + blue: 蓝色 + yellow: 黄色 + purple: 紫色 + cyan: 青色 + white: 白色 + uncolored: 无色 + black: 黑色 + shapeViewer: + title: 层 + empty: 空 + copyKey: 复制短代码 + connectedMiners: + one_miner: 1 个开采器 + n_miners: <amount> 个开采器 + limited_items: 限制在 <max_throughput> + watermark: + title: 试玩版 + desc: 点击这里了解完整版内容 + get_on_steam: 在Steam商城购买 + standaloneAdvantages: + title: 购买完整版! + no_thanks: 不需要,谢谢 + points: + levels: + title: 12 个全新关卡! + desc: 总共 26 个不同关卡! + buildings: + title: 18 个全新设施! + desc: 呈现完全体的全自动工厂! + upgrades: + title: 20个等级升级 + desc: 试玩版只有5个等级! + markers: + title: 无限数量地图标记 + desc: 地图再大,不会迷路! + wires: + title: 电线更新包 + desc: 发挥创造力的全新维度! + darkmode: + title: 暗色模式 + desc: 优雅且护眼的配色! + support: + title: 支持作者 + desc: 我使用闲暇时间开发游戏! + achievements: + title: 成就 + desc: 挑战全成就解锁! + puzzleEditorSettings: + zoneTitle: 区域 + zoneWidth: 宽度 + zoneHeight: 高度 + trimZone: 整理 + clearItems: 清除项目 + clearBuildings: 清除设施 + resetPuzzle: 重设谜题 + share: 共享 + report: 上报 + puzzleEditorControls: + title: 谜题编辑器 + instructions: + - 1.放置<strong>常量生成器</strong>,为玩家提供此谜题的初始图形和颜色。 + - 2.建造您希望玩家建造的一个或多个图形,并将其交付给一个或多个<strong>目标接收器</strong>。 + - 3.当一个目标接收器接收到一个图形一段时间后,会<strong>将其保存为此玩家必须建造的目标</strong>(由<strong>绿色充能条</strong>表示)。 + - 4.单击设施上的<strong>锁定按钮</strong>即可将其禁用。 + - 5.单击审阅后,您的谜题将通过验证,您可以正式发布它。 + - 6.谜题发布后,<strong>所有设施都将被拆除</strong>,除了<strong>常量生成器</strong>和<strong>目标接收器</strong>。然后,等着其他玩家对您创造的谜题发起挑战吧! + puzzleCompletion: + title: 谜题挑战成功! + titleLike: 喜欢此谜题的话,请为它点赞: + titleRating: 您觉得此谜题难度如何? + titleRatingDesc: 您的评分将帮助作者在未来创作出更好的谜题! + continueBtn: 继续游戏 + menuBtn: 菜单 + nextPuzzle: 下一个谜题 + puzzleMetadata: + author: 作者 + shortKey: 短代码 + rating: 难度评分 + averageDuration: 平均挑战时间 + completionRate: 挑战完成率 +shopUpgrades: + belt: + name: 传送、分发、隧道 + description: 效率 <currentMult>倍 → <newMult>倍 + miner: + name: 开采 + description: 效率 <currentMult>倍 → <newMult>倍 + processors: + name: 切割、旋转、堆叠 + description: 效率 <currentMult>倍 → <newMult>倍 + painting: + name: 混色、上色 + description: 效率 <currentMult>倍 → <newMult>倍 +buildings: + belt: + default: + name: 传送带 + description: 运送物品,选中后<strong>按住鼠标并拖动</strong>可一次性放置多个传送带。 + miner: + default: + name: 开采器 + description: 放置在<strong>图形</strong>或者<strong>颜色</strong>上进行开采。 + chainable: + name: 开采器(链式) + description: 放置在<strong>图形</strong>或者<strong>颜色</strong>上进行开采。它们可以被链接在一起。 + underground_belt: + default: + name: 隧道 + description: 可放置在<strong>传送带</strong>或<strong>设施</strong>下方以运送物品。 + tier2: + name: 二级隧道 + description: 可放置在<strong>传送带</strong>或<strong>设施</strong>下方以运送物品。 + cutter: + default: + name: 切割机 + description: 始终将<strong>图形</strong>从上到下切开并分别输出。<strong>如果您只需要其中一半的图形,使用<strong>垃圾桶</strong>清除另一半图形,否则切割机会停止工作!</strong> + quad: + name: 切割机(四向) + description: 将输入的图形切成四块。<strong>如果您只需要其中一块图形,使用<strong>垃圾桶</strong>清除其他图形,否则切割机会停止工作!</strong> + rotater: + default: + name: 旋转机 + description: 将<strong>图形</strong>顺时针旋转90度。 + ccw: + name: 旋转机(逆时针) + description: 将<strong>图形</strong>逆时针旋转90度。 + rotate180: + name: 旋转机 (180度) + description: 将<strong>图形</strong>旋转180度。 + stacker: + default: + name: 堆叠机 + description: 将输入的<strong>图形</strong>在同一层内组合在一起。如果不能被直接组合,则右边输入<strong>图形</strong>会堆叠在左边输入<strong>图形</strong>上面。 + mixer: + default: + name: 混色器 + description: 用叠加混色法将两个<strong>颜色</strong>混合。 + painter: + default: + name: 上色器 + description: 将整个<strong>图形</strong>涂上输入的<strong>颜色</strong>。 + double: + name: 上色器(双面) + description: 使用顶部输入的<strong>颜色</strong>为左侧输入的<strong>图形</strong>上色。 + quad: + name: 上色器(四口) + description: 能够为<strong>图形</strong>的四个象限单独上色。记住只有通过电线层上带有<strong>正信号</strong>的插槽才可以上色! + mirrored: + name: 上色器 (镜像) + description: 将整个<strong>图形</strong>涂上输入的颜色。 + trash: + default: + name: 垃圾桶 + description: 可以从所有四个方向上输入物品并永远清除它们。 + hub: + deliver: 交付 + toUnlock: 解锁 + levelShortcut: 关卡 + endOfDemo: 试玩版结束 + wire: + default: + name: 电线 + description: 可用来传输<strong>信号<strong>,信号可以是物品,颜色或者开关值(0或1)。 + 不同颜色的<strong>电线</strong>不会互相连接 + second: + name: 电线 + description: 可用来传输<strong>信号<strong>,信号可以是物品,颜色或者开关值(0或1)。 + 不同颜色的<strong>电线</strong>不会互相连接 + balancer: + default: + name: 平衡器 + description: 多功能的设施:可将所有输入均匀地分配到所有输出上。 + merger: + name: 合并器 (小型) + description: 可将两条传送带合并为一条。 + merger-inverse: + name: 合并器 (小型) + description: 可将两条传送带合并为一条。 + splitter: + name: 分离器 (小型) + description: 可将一条传送带分成为两条。 + splitter-inverse: + name: 分离器 (小型) + description: 可将一条传送带分成为两条。 + storage: + default: + name: 存储器 + description: 储存多余的物品,直到储满。 优先处理左边的输出,并可以用作溢出门。 + wire_tunnel: + default: + name: 交叉电线 + description: 使两根<strong>电线</strong>交叉而不会连接起来。 + constant_signal: + default: + name: 恒定信号 + description: 发出固定信号,可以是<strong>图形</strong>、<strong>颜色</strong>、<strong>开关值(1 / + 0)</strong>。 + lever: + default: + name: 开关 + description: 可以在电线层上发出<strong>开关值(1 / 0)</strong>信号,以达到控制部件的作用,比如可以用来控制物品过滤器。 + logic_gate: + default: + name: 与门 + description: 如果输入<strong>都是</strong>正信号,则发出<strong>开(1)</strong>信号。(正信号:图形,颜色,开(1)信号) + not: + name: 非门 + description: 如果输入<strong>不是</strong>正信号,则发出<strong>开(1)</strong>信号。(正信号:图形,颜色,开(1)信号) + xor: + name: 异或门 + description: 如果输入<strong>只有一个</strong>正信号,则发出<strong>开(1)</strong>信号。(正信号:图形,颜色,开(1)信号) + or: + name: 或门 + description: 如果输入<strong>有一个</strong>是正信号,则发出<strong>开(1)</strong>信号。(正信号:图形,颜色,开(1)信号) + transistor: + default: + name: 晶体管 + description: 如果侧边输入正信号,输入可以通过并转发。(正信号:图形,颜色,开(1)信号) + mirrored: + name: 晶体管 + description: 如果侧边输入正信号,输入可以通过并转发。(正信号:图形,颜色,开(1)信号) + filter: + default: + name: 过滤器 + description: 在顶侧输出和<strong>信号</strong>匹配的内容,在右侧输出不匹配的内容。如果是开关量的话,开(1)信号从顶侧输出,关(0)信号从右侧输出。 + display: + default: + name: 显示器 + description: 在显示器上显示连接的<strong>信号</strong>(信号可以是:图形、颜色、开关值)。 + reader: + default: + name: 传送带读取器 + description: 可以读取<strong>传送带</strong>平均<strong>吞吐量</strong>。输出最后在<strong>电线层</strong>上读取的物品(一旦解锁。) + analyzer: + default: + name: 图形分析器 + description: 分析<strong>图形</strong>最底层的右上象限并返回其<strong>图形</strong>和<strong>颜色</strong>。 + comparator: + default: + name: 比较器 + description: 如果输入的两个<strong>信号</strong>一样将输出开(1)信号,可以比较图形,颜色,和开关值。 + virtual_processor: + default: + name: 虚拟切割机 + description: 模拟将<strong>图形</strong>切割成两半。 + rotater: + name: 模拟旋转机 + description: 模拟顺时针旋转<strong>图形</strong>。 + unstacker: + name: 模拟拆分器 + description: 模拟提取最上层<strong>图形</strong>从右侧输出,提取其余的<strong>图形</strong>从左侧输出。 + stacker: + name: 模拟堆叠机 + description: 模拟将右侧<strong>图形</strong>叠在左侧<strong>图形</strong>上。 + painter: + name: 模拟上色器 + description: 模拟使用右侧输入的<strong>颜色</strong>给底部输入的<strong>图形</strong>上色 + item_producer: + default: + name: 物品生成器 + description: 仅在沙盒模式下可用,在常规层上输出<strong>电线层</strong>给定的<strong>信号</strong>。 + constant_producer: + default: + name: 常量生成器 + description: 不断输出指定的图形或颜色。 + goal_acceptor: + default: + name: 目标接收器 + description: 将图形传递给目标接收器,并将它们设置为谜题挑战目标。 + block: + default: + name: 方块 + description: 放置了方块的格子将无法再进行其他放置。 +storyRewards: + reward_cutter_and_trash: + title: 切割图形 + desc: 恭喜!您解锁了<strong>切割机</strong>,不管如何放置,它只会从上到下切开<strong>图形</strong>! + <br>注意一定要处理掉切割后废弃的<strong>图形</strong>,不然它会<strong>阻塞</strong>传送带, + <br>使用<strong>垃圾桶</strong>,它会清除所有放进去的图形! + reward_rotater: + title: 旋转 + desc: 恭喜!您解锁了<strong>旋转机</strong>。它会顺时针将输入的<strong>图形旋转90度</strong>。 + reward_painter: + title: 上色 + desc: 恭喜!您解锁了<strong>上色器</strong>。开采一些颜色 (就像您开采图形一样),将其在上色器中与图形结合来将图形上色! + <br>注意:如果您不幸患有色盲,可以在设置中启用<strong>色盲模式</strong> + reward_mixer: + title: 混合颜色 + desc: 恭喜!您解锁了<strong>混色器</strong>。它使用<strong>叠加混色法</strong>将两种颜色混合起来。 + reward_stacker: + title: 堆叠 + desc: 恭喜!您解锁了<strong>堆叠机</strong>。它会将将输入的<strong>图形</strong>在同一层内组合在一起。 + <br>如果不能被直接组合,则右边输入<strong>图形</strong>会堆叠在左边输入<strong>图形</strong>上面。 + reward_splitter: + title: 分离器(小型) + desc: 您已经解锁了<strong>平衡器</strong>的变体<strong>分离器</strong>,它会把输入的东西一分为二! + reward_tunnel: + title: 隧道 + desc: 恭喜!您解锁了<strong>隧道</strong>。它可放置在<strong>传送带</strong>或<strong>设施</strong>下方以运送物品。 + reward_rotater_ccw: + title: 逆时针旋转 + desc: 恭喜!您解锁了<strong>旋转机</strong>的<strong>逆时针</strong>变体。它可以逆时针旋转<strong>图形</strong>。 + <br>选择<strong>旋转机</strong>然后按"T"键来选取这个变体。 + reward_miner_chainable: + title: 链式开采器 + desc: 您已经解锁了<strong>链式开采器</strong>!它能<strong>转发资源</strong>给其他的开采器,这样您就能更有效率的开采各类资源了!<br><br> + 注意:新的开采器已替换了工具栏里旧的开采器! + reward_underground_belt_tier_2: + title: 二级隧道 + desc: 恭喜!您解锁了<strong>二级隧道</strong>。这是隧道的一个变体。二级隧道有<strong>更长的传输距离</strong>。您还可以混用不同的隧道变体! + reward_cutter_quad: + title: 四向切割机 + desc: 恭喜!您解锁了<strong>切割机</strong>的<strong>四向</strong>变体。它可以将输入的<strong>图形</strong>切成四块而不只是左右两块! + reward_painter_double: + title: 双面上色器 + desc: 恭喜!您解锁了<strong>上色器</strong>的<strong>双面</strong>变体。它可以同时为两个图形上色,但每次只消耗一份颜色! + reward_storage: + title: 存储器 + desc: 您已经解锁了<strong>存储器</strong>,它能存满指定容量的物品! + <br>它<strong>优先从左边</strong>输出,这样您就可以用它做一个<strong>溢流门</strong>了! + reward_freeplay: + title: 自由模式 + desc: 成功了!您解锁了<strong>自由模式</strong>!挑战升级!这意味着现在将<strong>随机</strong>生成图形! + 从现在起,中心基地最为需要的是<strong>产量</strong>,我强烈建议您去制造一台能够自动交付所需图形的机器!<br><br> + 基地会在<strong>电线层</strong>输出需要的图形,您需要去分析图形并在此基础上自动配置您的工厂。 + reward_blueprints: + title: 蓝图 + desc: 您现在可以<strong>复制粘贴</strong>您的工厂的一部分了!按住 CTRL键并拖动鼠标来选择一块区域,然后按C键复制。 + <br><br>粘贴并<strong>不是免费的</strong>,您需要制造<strong>蓝图图形</strong>来负担。蓝图图形是您刚刚交付的图形。 + no_reward: + title: 下一关 + desc: 这一关没有奖励,但是下一关有! <br><br> + 注意:最高明的规划师都不会破坏原有的工厂设施,您生产过的<strong>所有图形</strong>都会被用于<strong>解锁升级</strong>。 + no_reward_freeplay: + title: 下一关 + desc: 恭喜您!另外,我们已经计划在完整版中加入更多内容! + reward_balancer: + title: 平衡器 + desc: 恭喜!您解锁了多功能<strong>平衡器</strong>,它能够<strong>分割和合并</strong>多个传送带的资源,可以用来建造更大的工厂! + reward_merger: + title: 合并器(小型) + desc: 恭喜!您解锁了<strong>平衡器</strong>的变体<strong>合并器</strong>,它能合并两个输入到同一个传送带上! + reward_belt_reader: + title: 传送带读取器 + desc: 恭喜!您解锁了<strong>传送带读取器</strong>!它能够测量传送带上的生产率。 + <br><br>等您解锁了<strong>电线层</strong>后,它将会极其有用! + reward_rotater_180: + title: 旋转机(180度) + desc: 恭喜!您解锁了<strong>旋转器(180度)</strong>!它能帮您把一个图形旋转180度(惊喜! :D) + reward_display: + title: 显示器 + desc: 恭喜!您已经解锁了<strong>显示器</strong>,它可以显示一个在<strong>电线层上连接的信号</strong>! + <br>注意:您注意到<strong>传送读取器</strong>和<strong>存储器</strong>输出的他们最后读取的物品了吗?试着在显示屏上展示一下!" + reward_constant_signal: + title: 恒定信号 + desc: 恭喜!您解锁了生成于电线层之上的<strong>恒定信号</strong>,把它连接到<strong>过滤器</strong>时非常有用。 + <br>比如,它能发出图形、颜色、开关值(1 / 0)的固定信号。 + reward_logic_gates: + title: 逻辑门 + desc: 您解锁了<strong>逻辑门</strong>!它们是个好东西!<br> + 您可以用它们来进行'与,或,非,异或'操作。<br><br>作为奖励,我还给您解锁了<strong>晶体管</strong>! + reward_virtual_processing: + title: 模拟处理器 + desc: 我刚刚给了一大堆新设施,让您可以<strong>模拟形状的处理过程</strong>!<br> + 您现在可以在电线层上模拟切割机,旋转机,堆叠机和其他机器!<br> 有了这些,您可以选择下面三个方向来继续游戏:<br> + -建立一个<strong>自动化机器</strong>以生产出任何中心基地需要图形(建议一试!)。<br> + -用<strong>电线层</strong>做些酷炫的东西。<br> -继续正常游戏。<br> 放飞想象,尽情创造! + reward_wires_painter_and_levers: + title: 电线 & 四口上色器 + desc: 恭喜!您解锁了<strong>电线层</strong>:它是正常层之上的一个层,它将带来了许多新的机制!<br><br> + 首先我解锁了您的<strong>四口上色器</strong>,按<strong>E</strong>键切换到电线层,然后连接您想要染色的槽,用开关来控制开启。<br><br> + <strong>提示</strong>:可在设置中打开电线层教程!" + reward_filter: + title: 物品过滤器 + desc: 恭喜!您解锁了<strong>物品过滤器</strong>!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。<br><br> + 您也可以输入开关值(1 / 0)信号来激活或者禁用它。 + reward_demo_end: + title: 试玩结束 + desc: 恭喜!您已经通关了试玩版本! <br>更多挑战,请至Steam商城购买完整版!谢谢支持! +settings: + title: 设置 + categories: + general: 通用 + userInterface: 用户界面 + advanced: 高级 + performance: 性能 + versionBadges: + dev: 开发版本 + staging: 预览版本 + prod: 正式版本 + buildDate: 与<at-date>编译 + tickrateHz: <amount> 赫兹 + labels: + uiScale: + title: 用户界面大小 + description: 改变用户界面大小。用户界面会随着屏幕分辨率缩放,这个设置决定缩放比例。 + scales: + super_small: 最小 + small: 较小 + regular: 正常 + large: 较大 + huge: 最大 + scrollWheelSensitivity: + title: 缩放灵敏度 + description: 改变屏幕缩放灵敏度(用鼠标滚轮或者触控板控制缩放)。 + sensitivity: + super_slow: 最低 + slow: 较低 + regular: 正常 + fast: 较高 + super_fast: 最高 + language: + title: 语言 + description: 改变语言。官方中文版已更新,欢迎玩家继续提供更好的翻译意见。 + fullscreen: + title: 全屏 + description: 全屏可获得更好的游戏体验。仅在完整版中可用。 + soundsMuted: + title: 关闭音效 + description: 关闭所有音效。 + musicMuted: + title: 关闭音乐 + description: 关闭所有音乐。 + theme: + title: 界面主题 + description: 选择界面主题(深色或浅色)。 + themes: + dark: 深色 + light: 浅色 + refreshRate: + title: 模拟频率、刷新频率 + description: 如果您的显示器刷新频率是 + 144赫兹,请在这里更改刷新频率,这样游戏可以正确地根据您的屏幕进行模拟。但是如果您的电脑性能不佳,提高刷新频率可能降低帧数。 + alwaysMultiplace: + title: 多重放置 + description: 开启这个选项之后放下设施将不会取消设施选择。等同于一直按下 SHIFT 键。 + offerHints: + title: 提示与教程 + description: 是否显示提示、教程以及一些其他的帮助理解游戏的用户界面元素。建议新手玩家开启。 + movementSpeed: + title: 移动速度 + description: 改变摄像头的移动速度。 + speeds: + super_slow: 最慢 + slow: 较慢 + regular: 正常 + fast: 较快 + super_fast: 非常快 + extremely_fast: 最快 + enableTunnelSmartplace: + title: 智能隧道放置 + description: 启用后,放置隧道时会将多余的传送带移除。 此外,拖动隧道可以快速铺设隧道,以及移除不必要的隧道。 + vignette: + title: 晕映 + description: 启用晕映功能,可将屏幕角落里的颜色变深,更容易阅读文本。 + autosaveInterval: + title: 自动存档间隔 + description: 在这里控制您的游戏多长时间自动存档一次,你也可以完全关闭这个功能。建议打开。 + intervals: + one_minute: 1分钟 + two_minutes: 2分钟 + five_minutes: 5分钟 + ten_minutes: 10分钟 + twenty_minutes: 20分钟 + disabled: 关闭 + compactBuildingInfo: + title: 精简设施信息 + description: 缩小设施信息展示框。如果打开,放置设施时将不再显示说明和图片,只显示建造速度或其他数据。 + disableCutDeleteWarnings: + title: 关闭剪切/删除警告 + description: 如果打开,将不再在剪切或者删除100+实体时显示警告信息。 + enableColorBlindHelper: + title: 色盲模式 + description: 提供多种工具,帮助色盲玩家可正常进行游戏。 + rotationByBuilding: + title: 记忆设施方向 + description: 每一类设施都会记住各自上一次的旋转方向。如果您经常在不同设施类型之间切换,这个设置会让游戏操控更加便捷。 + soundVolume: + title: 音效音量 + description: 设置音效的音量 + musicVolume: + title: 音乐音量 + description: 设置音乐的音量 + lowQualityMapResources: + title: 低质量地图资源 + description: 放大时简化地图上资源的渲染以提高性能。开启甚至会让画面看起来更干净,低配置电脑玩家建议开启! + disableTileGrid: + title: 禁用网格 + description: 禁用平铺网格有助于提高性能。这也让游戏画面看起来更干净! + clearCursorOnDeleteWhilePlacing: + title: 右键取消 + description: 默认启用。在选择要放置的设施时,单击鼠标右键即可取消。如果禁用,则可以通过在放置设施时单击鼠标右键来删除设施。 + lowQualityTextures: + title: 低质量纹理 + description: 使用低质量纹理提高游戏性能。但是这样游戏会以低画面质量运行! + displayChunkBorders: + title: 显示大块的边框 + description: 游戏将每一个大块分成16*16的小块,如果启用将会显示每个大块的边框。 + pickMinerOnPatch: + title: 在资源块上选择开采器 + description: 默认开启,当在资源块上使用选取器时会选择开采器。 + simplifiedBelts: + title: 简单的传送带 + description: 除非鼠标放在传送带上,不然不会渲染传送带上的物品。启用可提升游戏性能。但除非特别需要性能,否则不推荐启用。 + enableMousePan: + title: 鼠标平移屏幕 + description: 在鼠标滑到屏幕边缘时可以移动地图。移动速度取决于移动速度设置。 + zoomToCursor: + title: 鼠标位置缩放 + description: 启用后在鼠标所在位置进行屏幕缩放,否则在屏幕中间进行缩放。 + mapResourcesScale: + title: 地图资源图形尺寸 + description: 控制地图总览时图形的尺寸(指缩小视野时)。 + shapeTooltipAlwaysOn: + title: 图形工具提示-始终显示 + description: 在设施上悬停时是否始终显示图形工具提示,而不是必须按住“Alt”键。 + rangeSliderPercentage: <amount> % +keybindings: + title: 按键设定 + hint: 提示:使用 CTRL、SHIFT、ALT!这些键在放置设施时有不同的效果。 + resetKeybindings: 重置按键设定 + categoryLabels: + general: 通用 + ingame: 游戏 + navigation: 视角 + placement: 放置 + massSelect: 批量选择 + buildings: 设施快捷键 + placementModifiers: 放置设施修饰键 + mappings: + confirm: 确认 + back: 返回 + mapMoveUp: 上 + mapMoveRight: 右 + mapMoveDown: 下 + mapMoveLeft: 左 + centerMap: 回到中心基地 + mapZoomIn: 放大 + mapZoomOut: 缩小 + createMarker: 创建地图标记 + menuOpenShop: 升级菜单 + menuOpenStats: 统计菜单 + toggleHud: 开关可视化界面 + toggleFPSInfo: 开关帧数与调试信息 + belt: 传送带 + underground_belt: 隧道 + miner: 开采器 + cutter: 切割机 + rotater: 旋转机 + stacker: 堆叠机 + mixer: 混色器 + painter: 上色器 + trash: 垃圾桶 + rotateWhilePlacing: 顺时针旋转 + rotateInverseModifier: "修饰键: 改为逆时针旋转" + cycleBuildingVariants: 切换所选择设施变体 + confirmMassDelete: 确认批量删除 + cycleBuildings: 切换所选择设施 + massSelectStart: 开始批量选择 + massSelectSelectMultiple: 选择多个区域 + massSelectCopy: 复制区域 + placementDisableAutoOrientation: 取消自动定向 + placeMultiple: 继续放置 + placeInverse: 反向自动传送带方向 + pasteLastBlueprint: 粘贴上一张蓝图 + massSelectCut: 剪切区域 + exportScreenshot: 导出截图 + mapMoveFaster: 快速移动 + lockBeltDirection: 启用传送带规划 + switchDirectionLockSide: 规划器:换边 + pipette: 吸取器 + menuClose: 关闭菜单 + switchLayers: 切换层 + wire: 电线 + balancer: 平衡器 + storage: 存储器 + constant_signal: 恒定信号 + logic_gate: 逻辑门 + lever: 控制杆 + filter: 过滤器 + wire_tunnel: 电线隧道 + display: 显示器 + reader: 传送带读取器 + virtual_processor: 模拟切割机 + transistor: 晶体管 + analyzer: 图形分析器 + comparator: 比较器 + item_producer: 物品生产器 (沙盒模式) + copyWireValue: 电线:复制指定电线上的值 + rotateToUp: 向上旋转 + rotateToDown: 向下旋转 + rotateToRight: 向右旋转 + rotateToLeft: 向左旋转 + constant_producer: 常量生成器 + goal_acceptor: 目标接收器 + block: 方块 + massSelectClear: 清除传送带 + showShapeTooltip: 显示图形输出提示 +about: + title: 关于游戏 + body: >- + 本游戏由 <a href="https://github.com/tobspr" target="_blank">Tobias + Springer</a>(我)开发,并且已经开源。<br><br> + + 如果您想参与开发,请查看 <a href="<githublink>" target="_blank">shapez.io on github</a>。<br><br> + + 这个游戏的开发获得了 Discord 社区内热情玩家的巨大支持。诚挚邀请您加入我们的 <a href="<discordlink>" target="_blank">Discord 服务器</a>!<br><br> + + 本游戏的音乐由 <a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a> 制作——他是个很棒的伙伴。<br><br> + + 最后,我想感谢我最好的朋友 <a href="https://github.com/niklas-dahl" target="_blank">Niklas</a> ——如果没有他的《异星工厂》(factorio)带给我的体验和启发,《异形工厂》(shapez.io)将不会存在。 +changelog: + title: 版本日志 +demo: + features: + restoringGames: 恢复存档 + importingGames: 导入存档 + oneGameLimit: 最多一个存档 + customizeKeybindings: 按键设定 + exportingBase: 导出工厂截图 + settingNotAvailable: 在试玩版中不可用。 +tips: + - 基地接受所有创造后输入的图形!并不限于现有的图形! + - 让你的工厂尽量模块化,不然后期你会面对大麻烦! + - 不要让设施太过靠近基地,不然可能会乱成一锅粥! + - 如果堆叠不起作用,尝试切换输入的图形来重新组合。 + - 您可以通过 <b>R</b> 键切换传送带规化方向。 + - 按住 <b>CTRL</b> 键拖动传送带将始终保持它现有的传送方向。 + - 只要所有设施等级一致,效率也将一致。 + - 串行执行比并行执行更有效。 + - 在后面的游戏中您会解锁更多设施的变种! + - 您可以使用<b>T</b>键切换不同的设施变种。 + - 对称是关键! + - 您可以使用隧道构建不同层次的通道。 + - 试着建造紧凑型工厂,它会给您带来好处的! + - 您可以按<b>T</b>来切换上色器的镜像变体。 + - 正确的设施比例将使效率最大化。 + - 在传送带和开采器等级一致时,5个开采器就可以占满一条传送带的运量。 + - 别忘了隧道! + - 您不必为了充分发挥效率而平均分配物品。 + - 按住<b>SHIFT</b>键将激活传送带路线规划,这样可以更有效地规划如何放置长距离的传送带。 + - 切割机总是垂直切割图形,而不管图形方向如何。 + - 还记得吗?混合三原色能够获得白色。 + - 存储缓冲区优先处理左侧的输出。 + - 您值得花时间来构建可重复的设计! + - 按住<b>CTRL</b>键能够放置多个设施。 + - 您可以按住<b>ALT</b>来反向放置传送带的方向。 + - 效率是关键! + - 离基地越远图形越复杂。 + - 机器的速度是有限的,把它们分开可以获得最高的效率。 + - 使用平衡器最大化您的效率。 + - 有条不紊!尽量不要过多地穿过传送带。 + - 凡事预则立!不预则废! + - 尽量不要删除旧的设施和生产线,您会需要他们生产的东西来升级设施并提高效率。 + - 先给自己定一个小目标:自己完成20级!!不去看别人的攻略! + - 不要把问题复杂化,试着保持简单,您会成功的。 + - 您可能需要在游戏的后期重复使用工厂。把您的工厂规划成可重复使用的。 + - 有时,您可以在地图上直接找到您需要的图形,并不需要使用堆叠机去合成它。 + - 风车图形不会自动产生 + - 在切割前,给您的图形上色可以获得最高的效率。 + - 模块化,可以使您提高效率。 + - 记得做一个单独的蓝图工厂。 + - 仔细看看调色器,您就会调色了。 + - <b>CTRL+点击</b>能够选择一块区域。 + - 设施建得离基地太近很可能会妨碍以后的工作。 + - 使用升级列表中每个形状旁边的固定图标将其固定到屏幕上。 + - 地图无限,放飞想象,尽情创造。 + - 向您推荐《异星工厂》!这是我最喜欢的游戏。向神作致敬! + - 四向切割机从右上开始进行顺时针切割! + - 在主界面您可以下载您的游戏存档文件! + - 这个游戏有很多有用的快捷键!一定要到快捷键页面看看。 + - 这个游戏有很多设置可以提高游戏效率,请一定要了解一下! + - 中心基地有个指向它所在方向的小指南指针! + - 想清理传送带,可剪切那块区域然后将其在相同位置粘贴。 + - 按F4显示FPS。 + - 按两次F4显示您鼠标和镜头所在的块。 + - 您可以点击被固定在屏幕左侧的图形来解除固定。 + - 您可以点击被固定在屏幕左侧的图形来解除固定。 +puzzleMenu: + play: 游戏 + edit: 编辑 + title: 谜题模式 + createPuzzle: 创建谜题 + loadPuzzle: 载入 + reviewPuzzle: 审阅 & 发布 + validatingPuzzle: 验证谜题 + submittingPuzzle: 提交谜题 + noPuzzles: 暂无满足此部分条件的谜题。 + dlcHint: 如已购买DLC,请在您的Steam库中右键点击异形工厂,然后选择属性-DLC。 + categories: + levels: 关卡 + new: 最新 + top-rated: 最受好评 + mine: 已创建 + easy: 简单 + medium: 普通 + hard: 困难 + completed: 已完成 + official: 官方教程 + trending: 本日趋势 + trending-weekly: 本周趋势 + categories: 分类 + difficulties: 根据难度 + account: 我的谜题 + search: 查找 + search: + action: 查找 + placeholder: 输入谜题或作者名称 + includeCompleted: 包括已完成 + difficulties: + any: 任何难度 + easy: 简单 + medium: 普通 + hard: 困难 + durations: + any: 任何挑战时间 + short: 快速 (< 2 分钟) + medium: 正常 + long: 较长 (> 10 分钟) + difficulties: + easy: 简单 + medium: 普通 + hard: 困难 + unknown: 未评分 + validation: + title: 无效谜题 + noProducers: 请放置一个常量生成器! + noGoalAcceptors: 请放置一个目标接收器! + goalAcceptorNoItem: 一或者多个目标接收器尚未分配目标图形,请传送一个图形以设定目标! + goalAcceptorRateNotMet: 一或者多个目标接收器尚未被传送足够数量的目标图形,请确认所有目标接收器的指示器都已显示绿色。 + buildingOutOfBounds: 一个或多个设施处于可建造区域范围外,扩大建造区域或者移除当前范围外的设施。 + autoComplete: 您的谜题已自动完成!请确认您的常量生成器没有直接向您的目标接收器进行传送。 +backendErrors: + ratelimit: 您的操作太频繁了。请稍等。 + invalid-api-key: 与后台通信失败,请尝试更新或重新启动游戏(无效的Api密钥)。 + unauthorized: 与后台通信失败,请尝试更新或重新启动游戏(未经授权)。 + bad-token: 与后台通信失败,请尝试更新或重新启动游戏(令牌错误)。 + bad-id: 谜题标识符无效。 + not-found: 找不到给定的谜题。 + bad-category: 找不到给定的类别。 + bad-short-key: 给定的短代码错误。 + profane-title: 您的谜题标题包含污言秽语。 + bad-title-too-many-spaces: 您的谜题标题过短。 + bad-shape-key-in-emitter: 常量生成器包含无效项目。 + bad-shape-key-in-goal: 目标接收器包含无效项目。 + no-emitters: 您的谜题没有任何常量生成器。 + no-goals: 您的谜题没有任何目标接收器。 + short-key-already-taken: 此短代码已被使用,请使用其他短代码。 + can-not-report-your-own-puzzle: 您无法上报您自己的谜题问题。 + bad-payload: 此请求包含无效数据。 + bad-building-placement: 您的谜题包含放置错误的设施。 + timeout: 请求超时。 + too-many-likes-already: 您的谜题已经得到了许多玩家的赞赏。如果您仍然希望删除它,请联系support@shapez.io! + no-permission: 您没有执行此操作的权限。 diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index f49dd241..d3f7c190 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -8,17 +8,16 @@ steamPage: 《异形工厂》(Shapez.io)是一款能让您尽情发挥创造力,充分享受思维乐趣的IO游戏。 游戏很轻松,只需建造工厂,布好设施,无需操作即能自动创造出各种各样的几何图形。 挑战很烧脑,随着等级提升,需要创造的图形将会越来越复杂,同时您还需要在无限扩展的地图中持续扩建优化您的工厂。 - 以为这就是全部了吗? 不!图形的生产需求将会指数性增长,持续的扩大规模和熵增带来的无序,将会是令人头痛的问题! - 这还不是全部! 一开始我们创造了图形,然后我们需要学会提取和混合来让它们五颜六色。 - 然后,还有吗? 当然,唯有思维,方能无限。 + 以为这就是全部了吗?不!图形的生产需求将会指数性增长,持续的扩大规模和熵增带来的无序,将会是令人头痛的问题! + 这还不是全部!一开始我们创造了图形,然后我们需要学会提取和混合来让它们五颜六色。 + 然后,还有吗?当然,唯有思维,方能无限。 欢迎免费体验试玩版:“让您的想象力插上翅膀!” - 和最聪明的玩家一起挑战,请访问 Steam 游戏商城购买《异形工厂》(Shapez.io)的完整版, + 和最聪明的玩家一起挑战,请访问 Steam 游戏商城购买《异形工厂》(Shapez.io)的完整版, what_others_say: 来看看玩家们对《异形工厂》(Shapez.io)的评价 nothernlion_comment: 非常棒的有游戏,我的游戏过程充满乐趣,不觉时间飞逝。 notch_comment: 哦,天哪!我真得该去睡了!但我想我刚刚搞定如何在游戏里面制造一台电脑出来。 steam_review_comment: 这是一个不知不觉偷走你时间,但你并不会想要追回的游戏。非常烧脑的挑战,让我这样的完美主义者停不下来,总是希望可以再高效一些。 - global: loading: 加载中 error: 错误 @@ -50,6 +49,7 @@ global: escape: ESC键 shift: SHIFT键 space: 空格键 + loggingIn: 登录 demoBanners: title: 试玩版 intro: 购买完整版以解锁所有游戏内容! @@ -60,7 +60,7 @@ mainMenu: openSourceHint: 本游戏已开源! discordLink: 官方Discord服务器 helpTranslate: 帮助我们翻译! - browserWarning: 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用 Chrome 或者购买完整版以得到更好的体验。 + browserWarning: 很抱歉,本游戏在当前浏览器上可能运行缓慢!使用 Chrome 或者购买完整版以得到更好的体验。 savegameLevel: 第<x>关 savegameLevelUnknown: 未知关卡 continue: 继续游戏 @@ -68,6 +68,11 @@ mainMenu: madeBy: 作者:<author-link> subreddit: Reddit savegameUnnamed: 存档未命名 + puzzleMode: 谜题模式 + back: 返回 + puzzleDlcText: 持续优化,追求极致效率。在限定空间内使用有限的设施来创造图形!《异形工厂》(Shapez.io)的首个DLC“谜题挑战者”将会给大家带来更烧脑、更自由的全新挑战! + puzzleDlcWishlist: 添加愿望单! + puzzleDlcViewNow: 查看DLC dialogs: buttons: ok: 确认 @@ -81,6 +86,9 @@ dialogs: viewUpdate: 查看更新 showUpgrades: 显示设施升级 showKeybindings: 显示按键设置 + retry: 重试 + continue: 继续 + playOffline: 离线游戏 importSavegameError: title: 读取错误 text: 未能读取您的存档: @@ -92,7 +100,7 @@ dialogs: text: 未能读取您的存档: confirmSavegameDelete: title: 确认删除 - text: 您确定要删除这个游戏吗?<br><br> '<savegameName>' 等级 <savegameLevel><br><br> 该操作无法回退! + text: 您确定要删除这个游戏吗?<br><br> '<savegameName>' 等级 <savegameLevel><br><br> 该操作无法回退! savegameDeletionError: title: 删除失败 text: 未能删除您的存档 @@ -116,34 +124,31 @@ dialogs: desc: 试玩版中只能保存一份存档。请删除旧存档或者购买完整版! updateSummary: title: 新内容更新啦! - desc: "以下为游戏最新更新内容:" + desc: 以下为游戏最新更新内容: upgradesIntroduction: title: 解锁升级 - desc: <strong>您生产过的所有图形都能被用来解锁升级。</strong> 所以不要销毁您之前建造的工厂! 注意:升级菜单在屏幕右上角。 + desc: <strong>您生产过的所有图形都能被用来解锁升级。</strong> 所以不要销毁您之前建造的工厂!注意:升级菜单在屏幕右上角。 massDeleteConfirm: title: 确认删除 - desc: 您将要删除很多设施,准确来说有<count>种! 您确定要这么做吗? + desc: 您将要删除很多设施,准确来说有<count>种!您确定要这么做吗? blueprintsNotUnlocked: title: 尚未解锁 desc: 您还没有解锁蓝图功能!通过第12关的挑战后可解锁蓝图。 keybindingsIntroduction: title: 实用快捷键 - desc: - "这个游戏有很多有用的快捷键设定。 以下是其中的一些介绍,记得在<strong>按键设置</strong>中查看其他按键设定!<br><br> + desc: 这个游戏有很多有用的快捷键设定。以下是其中的一些介绍,记得在<strong>按键设置</strong>中查看其他按键设定!<br><br> <code class='keybinding'>CTRL键</code> + 拖动:选择区域以复制或删除。<br> <code - class='keybinding'>SHIFT键</code>: 按住以放置多个同一种设施。<br> <code - class='keybinding'>ALT键</code>: 反向放置传送带。<br>" + class='keybinding'>SHIFT键</code>: 按住以放置多个同一种设施。<br> <code + class='keybinding'>ALT键</code>:反向放置传送带。<br> createMarker: title: 创建地图标记 - desc: - 填写一个有意义的名称, 还可以同时包含一个形状的 <strong>短代码</strong> (您可以 <link>点击这里</link> - 生成短代码) + desc: 填写一个有意义的名称,还可以同时包含一个形状的 <strong>短代码</strong>(您可以 <link>点击这里</link> 生成短代码) titleEdit: 编辑地图标记 markerDemoLimit: desc: 在试玩版中您只能创建两个地图标记。请获取完整版以创建更多标记。 massCutConfirm: title: 确认剪切 - desc: 您将要剪切很多设施,准确来说有<count>种! 您确定要这么做吗? + desc: 您将要剪切很多设施,准确来说有<count>种!您确定要这么做吗? exportScreenshotWarning: title: 工厂截图 desc: 您将要导出您整个工厂基地的截图。如果您已经建设了一个规模很大的基地,生成截图的过程将会很慢,且有可能导致游戏崩溃! @@ -153,16 +158,71 @@ dialogs: editSignal: title: 设置信号 descItems: "选择一个预定义的项目:" - descShortKey: ... 或者输入图形的 <strong>短代码</strong> (您可以 <link>点击这里</link> 生成短代码) + descShortKey: ... 或者输入图形的 <strong>短代码</strong> (您可以 <link>点击这里</link> 生成短代码) renameSavegame: title: 重命名游戏存档 desc: 您可以在此重命名游戏存档。 tutorialVideoAvailable: title: 教程 - desc: 这个关卡有视频攻略! 您想查看这个视频攻略? + desc: 这个关卡有视频攻略!您想查看这个视频攻略? tutorialVideoAvailableForeignLanguage: title: 教程 - desc: 这个关卡有英语版本的视频攻略! 您想查看这个视频攻略吗?? + desc: 这个关卡有英语版本的视频攻略!您想查看这个视频攻略吗? + editConstantProducer: + title: 设置项目 + puzzleLoadFailed: + title: 谜题载入失败 + desc: 很遗憾,谜题未能载入: + submitPuzzle: + title: 提交谜题 + descName: 给您的谜题设定名称: + descIcon: 请输入唯一的短代码,它将显示为标志您的谜题的图标( <link>在此</link>生成,或者从以下随机推荐的图形中选择一个): + placeholderName: 谜题标题 + puzzleResizeBadBuildings: + title: 无法调整大小 + desc: 您无法使这块区域变得更小,否则有些设施将会超出区域范围。 + puzzleLoadError: + title: 谜题出错 + desc: 谜题载入失败: + offlineMode: + title: 离线模式 + desc: 访问服务器失败,游戏只能在离线模式下进行。请确认您的网络连接正常。 + puzzleDownloadError: + title: 下载出错 + desc: 无法下载谜题: + puzzleSubmitError: + title: 提交出错 + desc: 无法提交您的谜题: + puzzleSubmitOk: + title: 谜题已发布 + desc: 恭喜!您所创造的谜题已成功发布,别的玩家已经可以对您的谜题发起挑战!您可以在“我的谜题”部分找到您发布的谜题。 + puzzleCreateOffline: + title: 离线模式 + desc: 由于您现在没有连接互联网,所以您将无法保存或发布您的谜题。是否仍要继续? + puzzlePlayRegularRecommendation: + title: 游戏建议 + desc: <strong>强烈</strong>建议您在至少完成本体第12关后再尝试体验“谜题挑战者”DLC,否则您可能在游戏过程中遇到困难,您是否仍要继续? + puzzleShare: + title: 短代码已复制 + desc: 此谜题的短代码(<key>)已经复制到了您的剪贴板!您可以在谜题菜单中输入短代码以快速访问对应谜题。 + puzzleReport: + title: 上报谜题 + options: + profane: 污言秽语 + unsolvable: 无法完成 + trolling: 恶意设计 + puzzleReportComplete: + title: 感谢您的反馈! + desc: 此谜题已标记! + puzzleReportError: + title: 上报失败 + desc: 无法处理您的上报: + puzzleLoadShortKey: + title: 输入短代码 + desc: 输入此谜题的短代码以载入。 + puzzleDelete: + title: 删除谜题? + desc: 您是否确认删除 '<title>'?删除后不可恢复! ingame: keybindingsOverlay: moveMap: 移动地图 @@ -184,9 +244,10 @@ ingame: clearSelection: 取消选择 pipette: 吸取器 switchLayers: 切换层 + clearBelts: 清除传送带 buildingPlacement: cycleBuildingVariants: 按 <key> 键以选择设施的变型体。 - hotkeyLabel: "快捷键: <key>" + hotkeyLabel: 快捷键:<key> infoTexts: speed: 速率 range: 范围 @@ -203,7 +264,7 @@ ingame: notifications: newUpgrade: 有新内容更新啦! gameSaved: 游戏已保存。 - freeplayLevelComplete: 第 <level>关 完成了! + freeplayLevelComplete: 第 <level>关 完成了! shop: title: 升级 buttonUnlock: 升级 @@ -213,14 +274,14 @@ ingame: title: 统计信息 dataSources: stored: - title: 已存储 - description: 所有图形已存储于中心。 + title: 仓库 + description: 所有存储在中心基地的图形。 produced: title: 生产 - description: 所有图形已在工厂内生产,包括中间产物。 + description: 所有在工厂内生产的图形,包括中间产物。 delivered: title: 交付 - description: 图形已交付到中心基地。 + description: 交付到中心基地的图形。 noShapesProduced: 您还没有生产任何图形。 shapesDisplayUnits: second: <shapes> / 秒 @@ -247,18 +308,15 @@ ingame: hints: 1_1_extractor: 在<strong>圆形</strong>上放置一个<strong>开采器</strong>来获取圆形!<br><br>提示:<strong>按下鼠标左键</strong>选中<strong>开采器</strong> 1_2_conveyor: 用<strong>传送带</strong>将您的开采器连接到中心基地上!<br><br>提示:选中<strong>传送带</strong>后<strong>按下鼠标左键可拖动</strong>布置传送带! - 1_3_expand: - 您可以放置更多的<strong>开采器</strong>和<strong>传送带</strong>来更有效率地完成关卡目标。<br><br> + 1_3_expand: 您可以放置更多的<strong>开采器</strong>和<strong>传送带</strong>来更有效率地完成关卡目标。<br><br> 提示:按住 <strong>SHIFT</strong> 键可放置多个<strong>开采器</strong>,注意用<strong>R</strong> 键可旋转<strong>开采器</strong>的出口方向,确保开采的图形可以顺利传送。 2_1_place_cutter: 现在放置一个<strong>切割器</strong>,这个设施可把<strong>圆形</strong>切成两半!<br><br>注意:无论如何放置,切割机总是<strong>从上到下</strong>切割。 - 2_2_place_trash: - 使用切割机后产生的废弃图形会导致<strong>堵塞</strong>。<br><br>注意使用<strong>垃圾桶</strong>清除当前 + 2_2_place_trash: 使用切割机后产生的废弃图形会导致<strong>堵塞</strong>。<br><br>注意使用<strong>垃圾桶</strong>清除当前 (!) 不需要的废物。 2_3_more_cutters: 干的好!现在放置<strong>2个以上的切割机</strong>来加快当前缓慢的过程!<br><br>提示:用<strong>快捷键0-9</strong>可以快速选择各项设施! - 3_1_rectangles: - 现在让我们开采一些矩形!找到<strong>矩形地带</strong>并<strong>放置4个开采器</strong>并将它们用<strong>传送带</strong>连接到中心基地。<br><br> + 3_1_rectangles: 现在让我们开采一些矩形!找到<strong>矩形地带</strong>并<strong>放置4个开采器</strong>并将它们用<strong>传送带</strong>连接到中心基地。<br><br> 提示:选中<strong>传送带</strong>后按住<strong>SHIFT键</strong>可快速准确地规划<strong>传送带路线!</strong> 21_1_place_quad_painter: 放置<strong>四口上色器</strong>并且获取一些<strong>圆形</strong>,<strong>白色</strong>和<strong>红色</strong>! 21_2_switch_to_wires: 按 <strong>E</strong> 键选择<strong>电线层</strong>!<br><br> @@ -292,8 +350,8 @@ ingame: no_thanks: 不需要,谢谢 points: levels: - title: 12 个全新关卡! - desc: 总共 26 个不同关卡! + title: 12 个全新关卡! + desc: 总共 26 个不同关卡! buildings: title: 18 个全新设施! desc: 呈现完全体的全自动工厂! @@ -314,7 +372,40 @@ ingame: desc: 我使用闲暇时间开发游戏! achievements: title: 成就 - desc: 挑战全成就解锁! + desc: 挑战全成就解锁! + puzzleEditorSettings: + zoneTitle: 区域 + zoneWidth: 宽度 + zoneHeight: 高度 + trimZone: 整理 + clearItems: 清除项目 + share: 共享 + report: 上报 + clearBuildings: 清除设施 + resetPuzzle: 重设谜题 + puzzleEditorControls: + title: 谜题编辑器 + instructions: + - 1.放置<strong>常量生成器</strong>,为玩家提供此谜题的初始图形和颜色。 + - 2.建造您希望玩家稍后建造的一个或多个图形,并将其交付给一个或多个<strong>目标接收器</strong>。 + - 3.当一个目标接收器接收到一个图形一段时间后,会<strong>将其保存为此玩家稍后必须建造的目标</strong>(由<strong>绿色充能条</strong>表示)。 + - 4.单击设施上的<strong>锁定按钮</strong>即可将其禁用。 + - 5.单击审阅后,您的谜题将通过验证,您可以正式发布它。 + - 6.谜题发布后,<strong>所有设施都将被拆除</strong>,除了<strong>常量生成器</strong>和<strong>目标接收器</strong>。然后,等着其他玩家对您创造的谜题发起挑战吧! + puzzleCompletion: + title: 谜题挑战成功! + titleLike: 喜欢此谜题的话,请为它点赞: + titleRating: 您觉得此谜题难度如何? + titleRatingDesc: 您的评分将帮助作者在未来创作出更好的谜题! + continueBtn: 继续游戏 + menuBtn: 菜单 + nextPuzzle: 下一个谜题 + puzzleMetadata: + author: 作者 + shortKey: 短代码 + rating: 难度评分 + averageDuration: 平均挑战时间 + completionRate: 挑战完成率 shopUpgrades: belt: name: 传送、分发、隧道 @@ -338,7 +429,7 @@ buildings: name: 开采器 description: 放置在<strong>图形</strong>或者<strong>颜色</strong>上进行开采。 chainable: - name: 开采器(链式) + name: 开采器(链式) description: 放置在<strong>图形</strong>或者<strong>颜色</strong>上进行开采。它们可以被链接在一起。 underground_belt: default: @@ -362,7 +453,7 @@ buildings: name: 旋转机(逆时针) description: 将<strong>图形</strong>逆时针旋转90度。 rotate180: - name: 旋转机 (180度) + name: 旋转机(180度) description: 将<strong>图形</strong>旋转180度。 stacker: default: @@ -383,7 +474,7 @@ buildings: name: 上色器(四口) description: 能够为<strong>图形</strong>的四个象限单独上色。记住只有通过电线层上带有<strong>正信号</strong>的插槽才可以上色! mirrored: - name: 上色器 (镜像) + name: 上色器(镜像) description: 将整个<strong>图形</strong>涂上输入的颜色。 trash: default: @@ -392,7 +483,7 @@ buildings: hub: deliver: 交付 toUnlock: 解锁 - levelShortcut: LVL + levelShortcut: 关卡 endOfDemo: 试玩版结束 wire: default: @@ -408,21 +499,21 @@ buildings: name: 平衡器 description: 多功能的设施:可将所有输入均匀地分配到所有输出上。 merger: - name: 合并器 (小型) + name: 合并器(小型) description: 可将两条传送带合并为一条。 merger-inverse: - name: 合并器 (小型) + name: 合并器(小型) description: 可将两条传送带合并为一条。 splitter: - name: 分离器 (小型) + name: 分离器(小型) description: 可将一条传送带分成为两条。 splitter-inverse: - name: 分离器 (小型) + name: 分离器(小型) description: 可将一条传送带分成为两条。 storage: default: name: 存储器 - description: 储存多余的物品,直到储满。 优先处理左边的输出,并可以用作溢出门。 + description: 储存多余的物品,直到储满。优先处理左边的输出,并可以用作溢出门。 wire_tunnel: default: name: 交叉电线 @@ -475,7 +566,7 @@ buildings: comparator: default: name: 比较器 - description: 如果输入的两个<strong>信号</strong>一样将输出开(1)信号,可以比较图形,颜色,和开关值。 + description: 如果输入的两个<strong>信号</strong>一样将输出开(1)信号,可以比较图形,颜色,和开关值。 virtual_processor: default: name: 虚拟切割机 @@ -496,6 +587,18 @@ buildings: default: name: 物品生成器 description: 仅在沙盒模式下可用,在常规层上输出<strong>电线层</strong>给定的<strong>信号</strong>。 + constant_producer: + default: + name: 常量生成器 + description: 不断输出指定的图形或颜色。 + goal_acceptor: + default: + name: 目标接收器 + description: 将图状传递给目标接收器,以将它们设置为谜题挑战目标。 + block: + default: + name: 方块 + description: 放置了方块的格子将无法再进行其他放置。 storyRewards: reward_cutter_and_trash: title: 切割图形 @@ -507,8 +610,7 @@ storyRewards: desc: 恭喜!您解锁了<strong>旋转机</strong>。它会顺时针将输入的<strong>图形旋转90度</strong>。 reward_painter: title: 上色 - desc: - 恭喜!您解锁了<strong>上色器</strong>。开采一些颜色 (就像您开采图形一样),将其在上色器中与图形结合来将图形上色! + desc: 恭喜!您解锁了<strong>上色器</strong>。开采一些颜色(就像您开采图形一样),将其在上色器中与图形结合来将图形上色! <br>注意:如果您不幸患有色盲,可以在设置中启用<strong>色盲模式</strong> reward_mixer: title: 混合颜色 @@ -525,13 +627,11 @@ storyRewards: desc: 恭喜!您解锁了<strong>隧道</strong>。它可放置在<strong>传送带</strong>或<strong>设施</strong>下方以运送物品。 reward_rotater_ccw: title: 逆时针旋转 - desc: - 恭喜!您解锁了<strong>旋转机</strong>的<strong>逆时针</strong>变体。它可以逆时针旋转<strong>图形</strong>。 + desc: 恭喜!您解锁了<strong>旋转机</strong>的<strong>逆时针</strong>变体。它可以逆时针旋转<strong>图形</strong>。 <br>选择<strong>旋转机</strong>然后按"T"键来选取这个变体。 reward_miner_chainable: title: 链式开采器 - desc: - 您已经解锁了<strong>链式开采器</strong>!它能<strong>转发资源</strong>给其他的开采器,这样您就能更有效率的开采各类资源了!<br><br> + desc: 您已经解锁了<strong>链式开采器</strong>!它能<strong>转发资源</strong>给其他的开采器,这样您就能更有效率的开采各类资源了!<br><br> 注意:新的开采器已替换了工具栏里旧的开采器! reward_underground_belt_tier_2: title: 二级隧道 @@ -548,25 +648,23 @@ storyRewards: <br>它<strong>优先从左边</strong>输出,这样您就可以用它做一个<strong>溢流门</strong>了! reward_freeplay: title: 自由模式 - desc: - 成功了!您解锁了<strong>自由模式</strong>!挑战升级!这意味着现在将<strong>随机</strong>生成图形! + desc: 成功了!您解锁了<strong>自由模式</strong>!挑战升级!这意味着现在将<strong>随机</strong>生成图形! 从现在起,中心基地最为需要的是<strong>产量</strong>,我强烈建议您去制造一台能够自动交付所需图形的机器!<br><br> 基地会在<strong>电线层</strong>输出需要的图形,您需要去分析图形并在此基础上自动配置您的工厂。 reward_blueprints: title: 蓝图 - desc: - 您现在可以<strong>复制粘贴</strong>您的工厂的一部分了!按住 CTRL键并拖动鼠标来选择一块区域,然后按C键复制。 + desc: 您现在可以<strong>复制粘贴</strong>您的工厂的一部分了!按住 CTRL键并拖动鼠标来选择一块区域,然后按C键复制。 <br><br>粘贴并<strong>不是免费的</strong>,您需要制造<strong>蓝图图形</strong>来负担。蓝图图形是您刚刚交付的图形。 no_reward: title: 下一关 - desc: 这一关没有奖励,但是下一关有! <br><br> + desc: 这一关没有奖励,但是下一关有!<br><br> 注意:最高明的规划师都不会破坏原有的工厂设施,您生产过的<strong>所有图形</strong>都会被用于<strong>解锁升级</strong>。 no_reward_freeplay: title: 下一关 desc: 恭喜您!另外,我们已经计划在完整版中加入更多内容! reward_balancer: title: 平衡器 - desc: 恭喜!您解锁了多功能<strong>平衡器</strong>,它能够<strong>分割和合并</strong>多个传送带的资源,可以用来建造更大的工厂! + desc: 恭喜!您解锁了多功能<strong>平衡器</strong>,它能够<strong>分割和合并</strong>多个传送带的资源,可以用来建造更大的工厂! reward_merger: title: 合并器(小型) desc: 恭喜!您解锁了<strong>平衡器</strong>的变体<strong>合并器</strong>,它能合并两个输入到同一个传送带上! @@ -580,11 +678,10 @@ storyRewards: reward_display: title: 显示器 desc: 恭喜!您已经解锁了<strong>显示器</strong>,它可以显示一个在<strong>电线层上连接的信号</strong>! - <br>注意:您注意到<strong>传送读取器</strong>和<strong>存储器</strong>输出的他们最后读取的物品了吗?试着在显示屏上展示一下!" + <br>注意:您注意到<strong>传送读取器</strong>和<strong>存储器</strong>输出的他们最后读取的物品了吗?试着在显示屏上展示一下! reward_constant_signal: title: 恒定信号 - desc: - 恭喜!您解锁了生成于电线层之上的<strong>恒定信号</strong>,把它连接到<strong>过滤器</strong>时非常有用。 + desc: 恭喜!您解锁了生成于电线层之上的<strong>恒定信号</strong>,把它连接到<strong>过滤器</strong>时非常有用。 <br>比如,它能发出图形、颜色、开关值(1 / 0)的固定信号。 reward_logic_gates: title: 逻辑门 @@ -599,16 +696,15 @@ storyRewards: reward_wires_painter_and_levers: title: 电线 & 四口上色器 desc: 恭喜!您解锁了<strong>电线层</strong>:它是正常层之上的一个层,它将带来了许多新的机制!<br><br> - 首先我解锁了您的<strong>四口上色器</strong>,按<strong>E</strong>键切换到电线层,然后连接您想要染色的槽,用开关来控制开启。<br><br> - <strong>提示</strong>:可在设置中打开电线层教程!" + 首先我解锁了您的<strong>四口上色器</strong>,按<strong>E</strong>键切换到电线层,然后连接您想要染色的槽,用开关来控制开启。<br><br> + <strong>提示</strong>:可在设置中打开电线层教程! reward_filter: title: 物品过滤器 - desc: - 恭喜!您解锁了<strong>物品过滤器</strong>!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。<br><br> + desc: 恭喜!您解锁了<strong>物品过滤器</strong>!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。<br><br> 您也可以输入开关值(1 / 0)信号来激活或者禁用它。 reward_demo_end: title: 试玩结束 - desc: 恭喜!您已经通关了试玩版本! <br>更多挑战,请至Steam商城购买完整版!谢谢支持! + desc: 恭喜!您已经通关了试玩版本!<br>更多挑战,请至Steam商城购买完整版!谢谢支持! settings: title: 设置 categories: @@ -680,7 +776,7 @@ settings: extremely_fast: 最快 enableTunnelSmartplace: title: 智能隧道放置 - description: 启用后,放置隧道时会将多余的传送带移除。 此外,拖动隧道可以快速铺设隧道,以及移除不必要的隧道。 + description: 启用后,放置隧道时会将多余的传送带移除。此外,拖动隧道可以快速铺设隧道,以及移除不必要的隧道。 vignette: title: 晕映 description: 启用晕映功能,可将屏幕角落里的颜色变深,更容易阅读文本。 @@ -722,7 +818,7 @@ settings: title: 右键取消 description: 默认启用。在选择要放置的设施时,单击鼠标右键即可取消。如果禁用,则可以通过在放置设施时单击鼠标右键来删除设施。 lowQualityTextures: - title: 低质量纹理(丑陋) + title: 低质量纹理(丑陋) description: 使用低质量纹理提高游戏性能。但是这样游戏会看起来很丑! displayChunkBorders: title: 显示大块的边框 @@ -742,7 +838,11 @@ settings: mapResourcesScale: title: 地图资源图形尺寸 description: 控制地图总览时图形的尺寸(指缩小视野时)。 + shapeTooltipAlwaysOn: + title: 图形工具提示-始终显示 + description: 在设施上悬停时是否始终显示图形工具提示, 而不是必须按住“Alt”键。 rangeSliderPercentage: <amount> % + tickrateHz: <amount> 赫兹 keybindings: title: 按键设定 hint: 提示:使用 CTRL、SHIFT、ALT!这些键在放置设施时有不同的效果。 @@ -813,12 +913,17 @@ keybindings: transistor: 晶体管 analyzer: 图形分析器 comparator: 比较器 - item_producer: 物品生产器 (沙盒模式) + item_producer: 物品生产器(沙盒模式) copyWireValue: 电线:复制指定电线上的值 - rotateToUp: "向上旋转" - rotateToDown: "向下旋转" - rotateToRight: "向右旋转" - rotateToLeft: "向左旋转" + rotateToUp: 向上旋转 + rotateToDown: 向下旋转 + rotateToRight: 向右旋转 + rotateToLeft: 向左旋转 + constant_producer: 常量生成器 + goal_acceptor: 目标接收器 + block: 方块 + massSelectClear: 清除传送带 + showShapeTooltip: 显示图形输出提示 about: title: 关于游戏 body: >- @@ -868,14 +973,14 @@ tips: - 您值得花时间来构建可重复的设计! - 按住<b>CTRL</b>键能够放置多个设施。 - 您可以按住<b>ALT</b>来反向放置传送带的方向。 - - 效率是关键! + - 效率是关键! - 离基地越远图形越复杂。 - 机器的速度是有限的,把它们分开可以获得最高的效率。 - 使用平衡器最大化您的效率。 - 有条不紊!尽量不要过多地穿过传送带。 - - 凡事预则立!不预则废! + - 凡事预则立!不预则废! - 尽量不要删除旧的设施和生产线,您会需要他们生产的东西来升级设施并提高效率。 - - 先给自己定一个小目标:自己完成20级!!不去看别人的攻略! + - 先给自己定一个小目标:自己完成20级!不去看别人的攻略! - 不要把问题复杂化,试着保持简单,您会成功的。 - 您可能需要在游戏的后期重复使用工厂。把您的工厂规划成可重复使用的。 - 有时,您可以在地图上直接找到您需要的图形,并不需要使用堆叠机去合成它。 @@ -889,8 +994,8 @@ tips: - 使用升级列表中每个形状旁边的固定图标将其固定到屏幕上。 - 地图无限,放飞想象,尽情创造。 - 向您推荐Factorio!这是我最喜欢的游戏。向神作致敬! - - 四向切割机从右上开始进行顺时针切割! - - 在主界面您可以下载您的游戏存档文件! + - 四向切割机从右上开始进行顺时针切割! + - 在主界面您可以下载您的游戏存档文件! - 这个游戏有很多有用的快捷键!一定要到快捷键页面看看。 - 这个游戏有很多设置可以提高游戏效率,请一定要了解一下! - 中心基地有个指向它所在方向的小指南指针! @@ -898,3 +1003,80 @@ tips: - 按F4显示FPS。 - 按两次F4显示您鼠标和镜头所在的块。 - 您可以点击被固定在屏幕左侧的图形来解除固定。 + - 您可以单击左侧的固定形状将其取消固定。 +puzzleMenu: + play: 游戏 + edit: 编辑 + title: 谜题模式 + createPuzzle: 创建谜题 + loadPuzzle: 载入 + reviewPuzzle: 审阅 & 发布 + validatingPuzzle: 验证谜题 + submittingPuzzle: 提交谜题 + noPuzzles: 暂无满足此部分条件的谜题。 + categories: + levels: 关卡 + new: 最新 + top-rated: 最受好评 + mine: 我的谜题 + easy: 简单 + hard: 困难 + completed: 完成 + medium: 普通 + official: 官方 + trending: 本日趋势 + trending-weekly: 本周趋势 + categories: 分类 + difficulties: 根据难度 + account: 我的谜题 + search: 查找 + validation: + title: 无效谜题 + noProducers: 请放置<strong>常量生成器</strong>! + noGoalAcceptors: 请放置<strong>目标接收器</strong>! + goalAcceptorNoItem: 一个或多个目标接收器尚未被分配图形目标。请向它们传递图形以设置目标。 + goalAcceptorRateNotMet: 一个或多个目标接收器没有获得足够数量的图形。请确保所有接收器的充能条指示器均为绿色。 + buildingOutOfBounds: 一个或多个设施位于可建造区域之外。请增加区域面积,或将超出区域的设施移除。 + autoComplete: 请确保您的常量生成器不会直接向目标接收器传递目标图形。否则您的谜题会自动完成。 + difficulties: + easy: 简单 + medium: 普通 + hard: 困难 + unknown: 未定级 + dlcHint: 如尚未购买DLC,请在您的Steam库中右键点击异形工厂, DLCs.然后选择属性-DLC。 + search: + action: 搜索 + placeholder: 输入谜题或作者名称 + includeCompleted: 包括已完成 + difficulties: + any: 任何难度 + easy: 简单 + medium: 普通 + hard: 困难 + durations: + any: 任何挑战时间 + short: 快速 (< 2 分钟) + medium: 正常 + long: 较长 (> 10 分钟) +backendErrors: + ratelimit: 你的操作太频繁了。请稍等。 + invalid-api-key: 与后台通信失败,请尝试更新或重新启动游戏(无效的Api密钥)。 + unauthorized: 与后台通信失败,请尝试更新或重新启动游戏(未经授权)。 + bad-token: 与后台通信失败,请尝试更新或重新启动游戏(令牌错误)。 + bad-id: 谜题标识符无效。 + not-found: 找不到给定的谜题。 + bad-category: 找不到给定的类别。 + bad-short-key: 给定的短代码错误。 + profane-title: 您的谜题标题包含污言秽语。 + bad-title-too-many-spaces: 您的谜题标题过短。 + bad-shape-key-in-emitter: 常量生成器包含无效项目。 + bad-shape-key-in-goal: 目标接收器包含无效项目。 + no-emitters: 您的谜题没有任何常量生成器。 + no-goals: 您的谜题没有任何目标接收器。 + short-key-already-taken: 此短代码已被使用,请使用其他短代码。 + can-not-report-your-own-puzzle: 您无法上报您自己的谜题问题。 + bad-payload: 此请求包含无效数据。 + bad-building-placement: 您的谜题包含放置错误的设施。 + timeout: 请求超时。 + too-many-likes-already: 您的谜题已经得到了许多玩家的赞赏。如果您仍然希望删除它,请联系support@shapez.io! + no-permission: 您没有执行此操作的权限。 diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index bdad632a..81e5c8a7 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -38,7 +38,7 @@ global: xDaysAgo: <x>天前 secondsShort: <seconds>秒 minutesAndSecondsShort: <minutes>分 <seconds>秒 - hoursAndMinutesShort: <hours>小時 <minutes>秒 + hoursAndMinutesShort: <hours>小時 <minutes>分 xMinutes: <x>分鐘 keys: tab: TAB @@ -47,6 +47,7 @@ global: escape: ESC shift: SHIFT space: 空白鍵 + loggingIn: Logging in demoBanners: title: 試玩版 intro: 取得單機版以解鎖所有功能! @@ -65,6 +66,12 @@ mainMenu: madeBy: 作者:<author-link> subreddit: Reddit savegameUnnamed: 未命名 + puzzleMode: Puzzle Mode + back: Back + puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle + DLC now on Steam for even more fun! + puzzleDlcWishlist: Wishlist now! + puzzleDlcViewNow: View Dlc dialogs: buttons: ok: 確認 @@ -78,6 +85,9 @@ dialogs: viewUpdate: 查看更新 showUpgrades: 顯示建築升級 showKeybindings: 顯示按鍵設定 + retry: Retry + continue: Continue + playOffline: Play Offline importSavegameError: title: 匯入錯誤 text: 存檔匯入失敗: @@ -158,6 +168,70 @@ dialogs: tutorialVideoAvailableForeignLanguage: title: 有教學 desc: 這個等級目前只有英文版教學影片,你想觀看嗎? + editConstantProducer: + title: Set Item + puzzleLoadFailed: + title: Puzzles failed to load + desc: "Unfortunately the puzzles could not be loaded:" + submitPuzzle: + title: Submit Puzzle + descName: "Give your puzzle a name:" + descIcon: "Please enter a unique short key, which will be shown as the icon of + your puzzle (You can generate them <link>here</link>, or choose one + of the randomly suggested shapes below):" + placeholderName: Puzzle Title + puzzleResizeBadBuildings: + title: Resize not possible + desc: You can't make the zone any smaller, because then some buildings would be + outside the zone. + puzzleLoadError: + title: Bad Puzzle + desc: "The puzzle failed to load:" + offlineMode: + title: Offline Mode + desc: We couldn't reach the servers, so the game has to run in offline mode. + Please make sure you have an active internet connection. + puzzleDownloadError: + title: Download Error + desc: "Failed to download the puzzle:" + puzzleSubmitError: + title: Submission Error + desc: "Failed to submit your puzzle:" + puzzleSubmitOk: + title: Puzzle Published + desc: Congratulations! Your puzzle has been published and can now be played by + others. You can now find it in the "My puzzles" section. + puzzleCreateOffline: + title: Offline Mode + desc: Since you are offline, you will not be able to save and/or publish your + puzzle. Would you still like to continue? + puzzlePlayRegularRecommendation: + title: Recommendation + desc: I <strong>strongly</strong> recommend playing the normal game to level 12 + before attempting the puzzle DLC, otherwise you may encounter + mechanics not yet introduced. Do you still want to continue? + puzzleShare: + title: Short Key Copied + desc: The short key of the puzzle (<key>) has been copied to your clipboard! It + can be entered in the puzzle menu to access the puzzle. + puzzleReport: + title: Report Puzzle + options: + profane: Profane + unsolvable: Not solvable + trolling: Trolling + puzzleReportComplete: + title: Thank you for your feedback! + desc: The puzzle has been flagged. + puzzleReportError: + title: Failed to report + desc: "Your report could not get processed:" + puzzleLoadShortKey: + title: Enter short key + desc: Enter the short key of the puzzle to load it. + puzzleDelete: + title: Delete Puzzle? + desc: Are you sure you want to delete '<title>'? This can not be undone! ingame: keybindingsOverlay: moveMap: 移動 @@ -179,6 +253,7 @@ ingame: clearSelection: 清空選取 pipette: 滴管 switchLayers: 切換層 + clearBelts: Clear belts buildingPlacement: cycleBuildingVariants: 按<key>鍵以選擇建築變體。 hotkeyLabel: 快捷鍵:<key> @@ -191,14 +266,14 @@ ingame: itemsPerSecondDouble: (2倍) tiles: <x>格 levelCompleteNotification: - levelTitle: 第<level>級 + levelTitle: 第<level>關 completed: 完成 unlockText: 解鎖<reward>! buttonNextLevel: 下一關 notifications: newUpgrade: 有新的更新啦! gameSaved: 遊戲已保存。 - freeplayLevelComplete: 已完成第<level>級! + freeplayLevelComplete: 已完成第<level>關! shop: title: 建築升級 buttonUnlock: 升級 @@ -230,7 +305,7 @@ ingame: showHint: 顯示 hideHint: 關閉 blueprintPlacer: - cost: 需要 + cost: 消耗 waypoints: waypoints: 地圖標記 hub: 基地 @@ -253,7 +328,7 @@ ingame: 使用<strong>0-9快捷鍵</strong>可以更快選取建築 !" 3_1_rectangles: "現在來開採一些方形吧!<strong>蓋4座開採機</strong>,把形狀收集到基地。<br><br> PS: 選擇輸送帶,按住<strong>SHIFT</strong>並拖曳滑鼠可以計畫輸送帶位置!" - 21_1_place_quad_painter: 放置一個<strong>切割機(四分)</strong>並取得一些 + 21_1_place_quad_painter: 放置一個<strong>上色機(四向)</strong>並取得一些 <strong>圓形</strong>、<strong>白色</strong>和<strong>紅色</strong>! 21_2_switch_to_wires: Switch to the wires layer by pressing <strong>E</strong>!<br><br> Then <strong>connect all four @@ -266,7 +341,7 @@ ingame: green: 綠 blue: 藍 yellow: 黃 - purple: 紫 + purple: 洋紅(紫) cyan: 青 white: 白 uncolored: 無顏色 @@ -274,7 +349,7 @@ ingame: shapeViewer: title: 層 empty: 空 - copyKey: 複製鍵 + copyKey: 複製圖形代碼 connectedMiners: one_miner: 1 個開採機 n_miners: <amount> 個開採機 @@ -311,6 +386,47 @@ ingame: achievements: title: Achievements desc: Hunt them all! + puzzleEditorSettings: + zoneTitle: Zone + zoneWidth: Width + zoneHeight: Height + trimZone: Trim + clearItems: Clear Items + share: Share + report: Report + clearBuildings: Clear Buildings + resetPuzzle: Reset Puzzle + puzzleEditorControls: + title: Puzzle Creator + instructions: + - 1. Place <strong>Constant Producers</strong> to provide shapes and + colors to the player + - 2. Build one or more shapes you want the player to build later and + deliver it to one or more <strong>Goal Acceptors</strong> + - 3. Once a Goal Acceptor receives a shape for a certain amount of + time, it <strong>saves it as a goal</strong> that the player must + produce later (Indicated by the <strong>green badge</strong>). + - 4. Click the <strong>lock button</strong> on a building to disable + it. + - 5. Once you click review, your puzzle will be validated and you + can publish it. + - 6. Upon release, <strong>all buildings will be removed</strong> + except for the Producers and Goal Acceptors - That's the part that + the player is supposed to figure out for themselves, after all :) + puzzleCompletion: + title: Puzzle Completed! + titleLike: "Click the heart if you liked the puzzle:" + titleRating: How difficult did you find the puzzle? + titleRatingDesc: Your rating will help me to make you better suggestions in the future + continueBtn: Keep Playing + menuBtn: Menu + nextPuzzle: Next Puzzle + puzzleMetadata: + author: Author + shortKey: Short Key + rating: Difficulty score + averageDuration: Avg. Duration + completionRate: Completion rate shopUpgrades: belt: name: 輸送帶、平衡機、隧道 @@ -332,23 +448,23 @@ buildings: miner: default: name: 開採機 - description: 在圖形或者顏色上放置來開採他們。 + description: 在圖形礦脈或者顏色礦脈上放置開採機來開採。 chainable: name: 鏈式開採機 - description: 在圖形或者顏色上放置來開採他們。可以被鏈接在一起。 + description: 在圖形礦脈或者顏色礦脈上放置開採機來開採。 underground_belt: default: name: 隧道 description: 可以從其他輸送帶或建築底下方運送物品。 tier2: - name: 貳級隧道 + name: 二級隧道 description: 可以從其他輸送帶或建築底下方運送物品。 cutter: default: name: 切割機 description: 將圖形從上到下切開並輸出。 <strong>如果你只需要其中一半,記得把另一半銷毀掉,否則切割機會停止運作! </strong> quad: - name: 切割機(四分) + name: 四分切割機 description: 將輸入的圖形切成四塊。 <strong>如果你只需要其中一塊,記得把其他的銷毀掉,否則切割機會停止運作! </strong> rotater: default: @@ -362,29 +478,30 @@ buildings: description: 將圖形旋轉180度。 stacker: default: - name: 混合機 - description: 將輸入的圖形拼貼在一起。如果不能被直接拼貼,右邊的圖形會被疊在左邊的圖形上面. + name: 圖形拼貼機 + description: 將輸入的圖形拼貼在一起。如果不能在同一圖層直接拼貼,右邊的圖形會被堆疊在左邊的圖形上面. mixer: default: name: 混色機 - description: 將兩個顏色加在一起。 + description: Mixes two colors using additive blending. painter: default: name: 上色機 - description: 將整個圖形塗上輸入的顏色。 + description: 將整個圖形塗上輸入的顏料。 double: - name: 上色機(雙倍) - description: 同時為兩個輸入的圖形上色,每次上色只消耗一份顏色塗料。 + name: 雙倍上色機 + description: 同時為兩個輸入的圖形上色,每次上色只消耗一份顏料。 quad: - name: 上色機(四向) - description: 分別為圖形的四個部分上色。 只有 <strong>truthy signal</strong> 的格子會被上色。 + name: 四分上色機 + description: 分別為圖形的四個部分上色。 只有從 <strong>有「真」訊號輸入</strong> + 的顏料輸入端輸入的顏料會用來為相對的四分位上色。 mirrored: name: 上色機 - description: 將整個圖形塗上輸入的顏色。 + description: 將整個圖形塗上輸入的顏料。 trash: default: name: 垃圾桶 - description: 從所有四個方向上輸入物品並永遠銷毀它們。 + description: 從所有從四個方向輸入的物品銷毀。 hub: deliver: 交付 toUnlock: 來解鎖 @@ -392,95 +509,96 @@ buildings: endOfDemo: 試玩結束 wire: default: - name: 能量電線 - description: 傳輸能量。 + name: 電線 + description: 傳輸訊號,訊號可以是圖形,顏料或布林值(0或1)。 不同顏色的電線無法互相連接。 second: name: 電線 - description: 傳輸訊號,訊號可以是物件,顏色或布林值(0或1)。 不同顏色的電線無法互相連接。 + description: 傳輸訊號,訊號可以是圖形,顏料或布林值(0或1)。 不同顏色的電線無法互相連接。 balancer: default: name: 平衡機 - description: 多功能——將所有輸入平均分配到所有輸出。 + description: 多功能 —— 將單一輸入平均分配到所有輸出;及將多個輸入集合到一個輸出。 merger: name: 合流機(右) - description: 將兩個輸送帶整合成一個。 + description: 將兩條輸送帶(底部和右側)整合成一條(頂部)。 merger-inverse: name: 合流機(左) - description: 將兩個輸送帶整合成一個。 + description: 將兩條輸送帶(底部和左側)整合成一條(頂部)。 splitter: name: 分流機(右) - description: 將單個輸送帶分流成兩個。 + description: 將底部的輸送帶輸入分流成兩個輸出(頂部和右側)。 splitter-inverse: name: 分流機(左) - description: 將單個輸送帶分流成兩個 + description: 將底部的輸送帶輸入分流成兩個輸出(頂部和左側)。 storage: default: name: 倉庫 - description: 儲存多餘的物品,有一定儲存上限。優先從左側輸出,可以被用來作為溢流門。 + description: 儲存多餘的物品,有一定儲存上限。優先從左側輸出,右側輸出可以被用來作為溢流門。 wire_tunnel: default: name: 電線交叉 description: 電線彼此交叉但不互相連接。 constant_signal: default: - name: 固定信號 - description: 輸出固定信號,可以是形狀、顏色或布林值(1或0)。 + name: 固定訊號 + description: 輸出固定訊號,可以是形狀、顏料或布林值(1或0)。 lever: default: name: 信號切換器 - description: 切換電路層的輸出布林值(1或0),舉例來說,它可以操控物件分類器。 + description: 切換「1(真值)」或「0(假值)」輸出,舉例來說,它可以操控物件分類器。 logic_gate: default: name: AND 邏輯閘 - description: 當輸入均為「真」時,輸出才為1。(「真」值代表:形狀正確、顏色正確或布林值為1) + description: 當輸入均為「真」訊號時,輸出「1(真值)」。(「真」訊號代表:形狀訊號、顏色訊號或布林值為1) not: name: NOT 邏輯閘 - description: 當輸入之ㄧ為「假」時,輸出才為1。(「假」值代表:形狀不正確、顏色不正確或布林值為0) + description: 當輸入為「假」訊號時,輸出「1(真值)」。(「假」訊號代表:沒有訊號或布林值為0) xor: name: XOR 邏輯閘 - description: 當輸入均為「假」時,輸出才為1。(「假」值代表:形狀不正確、顏色不正確或布林值為0) + description: 當輸入為一個「真」訊號和一個「假」訊號時,輸出「1(真值)」。(「假」訊號代表:沒有訊號或布林值為0) or: name: OR 邏輯閘 - description: 當輸入之ㄧ為「真」時,輸出才為1。(「真」值代表:形狀正確、顏色正確或布林值為1) + description: 當其中一個輸入為「真」訊號時,輸出「1(真值)」。(「真」訊號代表:形狀訊號、顏色訊號或布林值為1) transistor: default: name: 電晶體 description: 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 - (「真」值代表:形狀正確、顏色正確或布林值為1) + (「真」訊號代表:形狀訊號、顏色訊號或布林值為1) mirrored: name: 電晶體 description: 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 - (「真」值代表:形狀正確、顏色正確或布林值為1) + (「真」訊號代表:形狀訊號、顏色訊號或布林值為1) filter: default: name: 物件分類器 - description: 它會依據電路層收到的訊號分類,符合的會到上方,不符合的到右方。 它也可以被布林值訊號控制。 + description: 它會依據電路層收到的訊號,從分類器底部輸入的物件如符合輸入信號的會輸出到頂部,不符合的會從右方(交叉標記)排出。 + 它也可以被布林值訊號控制。 display: default: name: 顯示器 - description: 連接一個訊號到顯示器上顯示,訊號可以是形狀、物件或布林值。 + description: 連接一個訊號到顯示器上顯示,訊號可以是形狀、顏料或布林值。 reader: default: name: 輸送帶讀取機 - description: 它會讀取輸送帶的平均流量,(解鎖後)在電路層輸出最後讀取的物件。 + description: 它會讀取輸送帶的平均流量,(電路層解鎖後)在電路層輸出最後讀取的物件。 analyzer: default: - name: 形狀分析機 - description: 分析最底層右上角的圖形並輸出他的形狀跟顏色。 + name: 圖形分析機 + description: 分析輸入的圖形訊號中最底層右上角的圖形並輸出其形狀和顏色。 comparator: default: name: 比較機 - description: 當兩個輸入訊號完全相等時,輸出布林值「1」。它可以比較形狀、物件或布林值。 + description: 當兩個輸入訊號完全相等時,輸出布林值「1(真值)」。它可以比較形狀、物件或布林值。 virtual_processor: default: name: 虛擬切割機 - description: 虛擬地將圖形從上到下切開並輸出。 + description: 虛擬地將圖形訊號從上到下切開。 rotater: name: 虛擬旋轉機 - description: 虛擬地將圖形順時針或逆時針旋轉。 + description: 虛擬地將圖形訊號順時針旋轉。 unstacker: name: 虛擬提取機 - description: 虛擬地提取最上層的圖形到右方輸出,剩下的圖形由左方輸出。 + description: 虛擬地提取圖形訊號最上層的圖形到右方輸出,剩下的圖形由左方輸出。 stacker: name: 虛擬堆疊機 description: 虛擬地將輸入的圖形拼貼在一起。如果不能被直接拼貼,右邊的圖形會被疊在左邊的圖形上面。 @@ -490,114 +608,136 @@ buildings: item_producer: default: name: 物品製造機 - description: 沙盒模式專有,將電路層的輸入轉化成一般層的輸出。 + description: 沙盒模式專有,將電路層的輸入轉化成實體層的輸出。 + constant_producer: + default: + name: 恆定生產機 + description: 持續輸出圖形或顏料。 + goal_acceptor: + default: + name: 目標接收機 + description: 交付接收機所示圖形以完成目標。 + block: + default: + name: 障礙物 + description: 用來禁止在障礙物處放置物件。 storyRewards: reward_cutter_and_trash: title: 切割圖形 - desc: <strong>切割機</strong>已解鎖。不論切割機的方向,它都會把圖形<strong>垂直地</strong>切成兩半。 - <br><br>記得把不需要的部分處理掉,否則這個這個建築會<strong>停止運作</strong>。 + desc: <strong>切割機</strong>已解鎖!不論切割機的方向,它都會把圖形<strong>垂直地</strong>切成兩半。<br><br> + 記得把不需要的部分處理掉,否則切割機會<strong>因為堵塞而停止運作</strong>。 為此我給你準備了<strong>垃圾桶</strong>,它會把所有放進去的物品銷毀掉。 reward_rotater: title: 順時針旋轉 - desc: <strong>順時針旋轉機</strong>已解鎖。它會順時針旋轉輸入的圖形90度。 + desc: <strong>順時針旋轉機</strong>已解鎖! 它會順時針旋轉輸入的圖形90度。 reward_painter: title: 上色 - desc: <strong>上色機</strong>已解鎖。開採一些顏色,用上色機把顏色和圖形混合,就可以為圖形著色。<br><br>備註:如果你是色盲,設定中有<strong>色盲模式</strong>可以選。 + desc: <strong>上色機</strong>已解鎖! + 開採一些顏色,用上色機把顏色和圖形混合,就可以為圖形著色。<br><br>備註:如果你是色盲,設定中有<strong>色盲模式</strong>可以選。 reward_mixer: title: 混色 - desc: <strong>混色器</strong>已解鎖-在此建築物中使用<strong>附加混合</strong>結合兩種顏色! + desc: <strong>混色器</strong>已解鎖! 在此建築物中使用<strong>附加混合</strong>結合兩種顏色! reward_stacker: - title: 混合 - desc: <strong>混合機</strong>已解鎖。如果沒有重疊的部分,混合機會嘗試把兩個輸入的圖形<strong>拼貼</strong>在一起。如果有重疊的部分,右邊的輸入會被<strong>疊</strong>到左邊的輸入上方! + title: 拼貼 + desc: <strong>圖形拼貼機</strong>已解鎖! + 如果沒有重疊的部分,圖形拼貼機會嘗試把兩個輸入的圖形<strong>拼貼</strong>在一起。如果有重疊的部分,右邊的輸入會被<strong>疊</strong>到左邊的輸入上方! reward_splitter: title: 分流 - desc: <strong>分流機</strong>(<strong>平衡機</strong>的變體)已解鎖。 - 它將單個輸送帶分流成兩個。 + desc: |- + <strong>分流機</strong>(<strong>平衡機</strong>的變體)已解鎖! + - 它將單個輸送帶分流成兩個。 reward_tunnel: title: 隧道 - desc: <strong>隧道</strong>已解鎖。你現在可以從其他輸送帶或建築底下運送物品了! + desc: <strong>隧道</strong>已解鎖! 你現在可以在其他輸送帶或建築底下運送物品了! reward_rotater_ccw: title: 逆時針旋轉 - desc: <strong>逆時針旋轉機</strong>已解鎖。它會逆時針旋轉輸入的圖形90度。 - 逆時針旋轉機是順時針旋轉機的變體。選擇「順時針旋轉機」並<strong>按「T」來切換變體</strong>就能建立。 + desc: <strong>逆時針旋轉機</strong>已解鎖! 它會逆時針旋轉輸入的圖形90度。 + 逆時針旋轉機是順時針旋轉機的變體。選擇「順時針旋轉機」並<strong>按「T」來切換變體</strong>就能使用。 reward_miner_chainable: title: 鏈式開採 - desc: "<strong>鏈式開採機</strong>變體已解鎖。它是開採機的一個變體。 - 它可以將開採出來的資源<strong>傳遞</strong>給其他的開採機,使得資源提取更加高效!<br><br> PS: - 工具列中舊的開採機已被取代。" + desc: <strong>鏈式開採機</strong>已解鎖! 它是開採機的一個變體。 + 它可以將開採出來的資源<strong>傳遞</strong>給其他的開採機,使得資源提取更加高效!<br><br> + 備註:工具列中舊的開採機已被取代。 reward_underground_belt_tier_2: - title: 貳級隧道 - desc: <strong>貳級隧道</strong>變體已解鎖。這個隧道有<strong>更長的傳輸距離</strong>。你還可以混用不同的隧道變體! + title: 二級隧道 + desc: <strong>二級隧道</strong>已解鎖! 這個隧道變體有<strong>更長的傳輸距離</strong>。你還可以混用不同的隧道變體! reward_cutter_quad: title: 四分切割 desc: 您已解鎖了<strong>切割機</strong>的變體:四分切割機。 - 它允許您將形狀直接切割為<strong>四個部分</strong>,而不是兩個! + 它允許您將直接切割出形狀的<strong>四個邊角</strong>,而不是分成兩半! reward_painter_double: title: 雙倍上色 desc: 您已經解鎖了<strong>上色機</strong>的變體:雙倍上色機。 它的運作方式跟上色機類似,但一次能處理<strong>兩個形狀</strong>,而且只消耗一種顏色而不是兩種顏色! reward_storage: title: 倉庫 - desc: <strong>倉庫</strong> 已解鎖: - 可以儲存多餘的物品,有一定儲存上限。<br><br>優先從左側輸出,可以被用來作為<strong>溢流門</strong>。 + desc: <strong>倉庫</strong> 已解鎖: 它可以儲存多餘的物品,但有一定儲存上限。<br><br> + 物品優先從左側輸出,它也可以被用來作為<strong>溢流門</strong>。 reward_freeplay: title: 自由模式 desc: 你做到了!你解鎖了<strong>自由模式</strong>!現在圖形將會是<strong>隨機</strong>生成的!<br><br> - 從現在開始,基地會要求<strong>流量</strong>下限,因此我強烈建議你建造全自動化的生產線。<br><br> - 基地會在電路層輸出他需要的形狀,你只需要分析這些訊號,然後依照需求自動調整你的工廠。 + 從現在開始,基地會有<strong>交付速率下限</strong>的要求,因此我強烈建議你建造全自動化的生產線。<br><br> + 基地會在電路層輸出它需要的形狀,你只需要分析這些訊號,然後依照需求自動調整你的工廠。 reward_blueprints: title: 藍圖 desc: 你現在可以<strong>複製貼上</strong>你的工廠某些區域。 選擇一個區域(按住 CTRL 並拖曳滑鼠),再按「C」來複製。<br><br> - 貼上<strong>不是免費的</strong>,你必須製造(剛才生成的)<strong>藍圖形狀</strong>來給付。 + 貼上藍圖<strong>不是免費的</strong>,你必須製造(剛才生成的)<strong>藍圖形狀</strong>來給付。 no_reward: title: 下一關 - desc: "這一關沒有獎勵,但是下一關有! <br><br> PS: - 你生產過的<strong>所有</strong>圖形都會被用來<strong>升級建築</strong>。" + desc: 這一關沒有獎勵,但是下一關會有! <br><br> + 備註:你生產過的<strong>所有</strong>圖形都會被用來<strong>升級建築</strong>。 no_reward_freeplay: title: 下一關 desc: 恭喜你!另外,我們已經計劃在單機版中加入更多內容! reward_balancer: title: 平衡物流 - desc: <strong>平衡機</strong>已解鎖。在大型工廠中,平衡機負責<strong>合流或分流</strong>多個輸送帶上的物品。 + desc: <strong>平衡機</strong>已解鎖! 在大型工廠中,平衡機負責<strong>合流或分流</strong>多個輸送帶上的物品。 reward_merger: title: 合流 - desc: <strong>合流機</strong>(<strong>平衡機</strong>的變體)已解鎖。 - 它會將兩個輸送帶整合成一個。 + desc: |- + <strong>合流機</strong>(<strong>平衡機</strong>的變體)已解鎖! + - 它會將兩個輸送帶整合成一個。 reward_belt_reader: title: 讀取輸送帶 - desc: <strong>輸送帶讀取機</strong>已解鎖。 它會讀取輸送帶的流量。<br><br> 當你解鎖電路層時,它會變得超有用! + desc: <strong>輸送帶讀取機</strong>已解鎖! 它會讀取輸送帶的流量。<br><br> 當你解鎖電路層時,它會變得超有用! reward_rotater_180: title: 180度旋轉 - desc: 180度<strong>旋轉機</strong>已解鎖。 - 它可以180度旋轉物件(驚喜!:D) + desc: <strong>180度旋轉機</strong>已解鎖! - 它可以180度旋轉物件(驚喜!:D) reward_display: title: 顯示器 - desc: "<strong>顯示器</strong> 已解鎖。 - 在電路層上連接一個訊號到顯示器上顯示!<br><br> PS: - 你有注意到輸送帶讀取機跟倉庫都會輸出它們最後讀取的物件嗎? 試試看在顯示器上顯示它吧!" + desc: <strong>顯示器</strong> 已解鎖! - 在電路層上連接一個訊號到顯示器上顯示!<br><br> + 備註:你有注意到輸送帶讀取機跟倉庫都會輸出它們最後讀取的物件嗎? 試試看在顯示器上顯示它吧!" reward_constant_signal: title: 固定信號 - desc: 電路層上的<strong>固定信號</strong>已解鎖。 + desc: 電路層上的<strong>固定信號</strong>已解鎖! 舉例,將<strong>物件分類器</strong>連上固定信號會很有用。<br><br> 固定信號可以輸出<strong>形狀</strong>、<strong>顏色</strong>或是 <strong>布林值</strong>(1或0)。 reward_logic_gates: title: 邏輯閘 - desc: <strong>邏輯閘</strong>已解鎖。 你可以覺得無所謂,但其實邏輯閘其實超酷的!<br><br> 有了這些邏輯閘,你可以運算 AND, - OR, XOR 與 NOT。<br><br> 錦上添花,我再送你<strong>電晶體</strong>! + desc: <strong>邏輯閘</strong>已解鎖!你可能覺得無所謂,但其實邏輯閘其實超酷的!<br><br> 有了這些邏輯閘,你可以運算 AND, + OR, XOR 與 NOT 邏輯。<br><br> 錦上添花,我再送你<strong>電晶體</strong>! reward_virtual_processing: title: 虛擬操作 - desc: <strong>虛擬操作</strong>!<br><br>已解鎖。很多新建築有虛擬版,你可以模擬切割機、旋轉機、推疊機還有更多電路層上的建築。 - 繼續遊玩的你現在有三個選項:<br><br> - - 蓋一個自動生成任何基地要求圖形的<strong>自動機</strong>(推薦!)。<br><br> - - 利用電路層蓋一些很酷建築<br><br> - 繼續用原本的方式破關。<br><br> 不論你的選擇是什麼,祝你玩得開心! + desc: I just gave a whole bunch of new buildings which allow you to + <strong>simulate the processing of shapes</strong>!<br><br> You can + now simulate a cutter, rotator, stacker and more on the wires layer! + With this you now have three options to continue the game:<br><br> - + Build an <strong>automated machine</strong> to create any possible + shape requested by the HUB (I recommend to try it!).<br><br> - Build + something cool with wires.<br><br> - Continue to play + normally.<br><br> Whatever you choose, remember to have fun! reward_wires_painter_and_levers: title: 電路層 & 四角上色機 - desc: "You just unlocked the <strong>電路層</strong>已解鎖。 - 它是一個獨立於一般層之外的存在,將帶給你更多玩法!<br><br> 首先,我為你解鎖<strong>四角上色機</strong>。 - 想要上色的角落記得在電路層通電!<br><br> 按<strong>E</strong>切換至電路層。<br><br> PS: - 設定裡<strong>開啟提示</strong>來啟動教學!" + desc: <strong>電路層</strong>已解鎖! 它是一個獨立於實體層之外的存在,將帶給你更多玩法!<br><br> + 首先,我為你解鎖<strong>四角上色機</strong>。記得先在電路層為想要上色的角落通電!<br><br> + 按<strong>E</strong>切換至電路層。<br><br> + 備註:設定裡<strong>開啟提示</strong>來啟動教學!" reward_filter: title: 物件分類器 - desc: <strong>物件分類器</strong>已解鎖。 它會依據電路層收到的訊號決定輸出端(右方或上方)。<br><br> - 你也可以送一個固定訊號(1或0)來徹底啟用或不啟用此機器。 + desc: <strong>物件分類器</strong>已解鎖! 它會依據電路層收到的訊號決定輸出端(右方或上方)。<br><br> + 你也可以輸入布林值(1或0)來徹底啟用或不啟用此機器。 reward_demo_end: title: 試玩結束 desc: 你已破關試玩版! @@ -677,8 +817,8 @@ settings: title: 暈映 description: 啟用暈映,將螢幕角落裡的顏色變深,更容易閱讀文字。 autosaveInterval: - title: 自動刷新時間 - description: 控制遊戲自動刷新的頻率。您也可以停用它。 + title: 自動存檔時間 + description: 控制遊戲自動存檔的頻率。您也可以停用它。 intervals: one_minute: 1 分鐘 two_minutes: 2 分鐘 @@ -736,7 +876,11 @@ settings: mapResourcesScale: title: 地圖資源標示大小 description: 控制地圖資源標示大小(縮小俯瞰時)。 + shapeTooltipAlwaysOn: + title: 常時顯示建築物輸出提示 + description: 選擇是否常時在焦點移到建築物時顯示它的上一個輸出物件,而不需按「ALT」鍵才會顯示。 rangeSliderPercentage: <amount> % + tickrateHz: <amount> Hz keybindings: title: 按鍵設定 hint: 提示:使用 CTRL、SHIFT、ALT ! 這些建在放置建築時有不同的效果。 @@ -752,10 +896,10 @@ keybindings: mappings: confirm: 確認 back: 返回 - mapMoveUp: 上 - mapMoveRight: 右 - mapMoveDown: 下 - mapMoveLeft: 左 + mapMoveUp: 向上移動 + mapMoveRight: 向右移動 + mapMoveDown: 向下移動 + mapMoveLeft: 向左移動 centerMap: 回到基地 mapZoomIn: 放大 mapZoomOut: 縮小 @@ -768,10 +912,10 @@ keybindings: underground_belt: 隧道 miner: 開採機 cutter: 切割機 - rotater: 旋轉機 - stacker: 混合機 + rotater: 虛擬旋轉機 + stacker: 虛擬堆疊機 mixer: 混色機 - painter: 上色機 + painter: 虛擬上色機 trash: 垃圾桶 rotateWhilePlacing: 順時針旋轉 rotateInverseModifier: "修飾鍵: 改為逆時針旋轉" @@ -792,27 +936,32 @@ keybindings: switchDirectionLockSide: 規劃器:換邊 pipette: 滴管 menuClose: 關閉選單 - switchLayers: 更換層 + switchLayers: 切換實體層/電路層 wire: 電線 balancer: 平衡機 storage: 倉庫 - constant_signal: 固定信號 + constant_signal: 固定訊號 logic_gate: 邏輯閘 - lever: 開關(一般) - filter: 過濾器 + lever: 信號切換器 + filter: 物件分類器 wire_tunnel: 電線交叉 - display: Display + display: 顯示器 reader: 輸送帶讀取機 - virtual_processor: 虛擬切割機 + virtual_processor: 虛擬處理 transistor: 電晶體 - analyzer: 形狀分析機 - comparator: 比對機 + analyzer: 圖形分析機 + comparator: 比較機 item_producer: 物品生產機(沙盒模式) copyWireValue: 電路:複製數值於游標底下 - rotateToUp: "Rotate: Point Up" - rotateToDown: "Rotate: Point Down" - rotateToRight: "Rotate: Point Right" - rotateToLeft: "Rotate: Point Left" + rotateToUp: "轉動: 向上" + rotateToDown: "轉動: 向下" + rotateToRight: "轉動: 向右" + rotateToLeft: "轉動: 向左" + constant_producer: 恆定生產機 + goal_acceptor: 目標接收機 + block: 障礙物 + massSelectClear: 清空輸送帶 + showShapeTooltip: 顯示建築物輸出提示 about: title: 關於遊戲 body: >- @@ -893,3 +1042,88 @@ tips: - 按 F4 來顯示螢幕的幀數(FPS)與刷新率(Tick Rate)。 - 按 F4 兩次來顯示相機和游標的絕對位置。 - 在已標記的圖形上按左鍵去除標記。 +puzzleMenu: + play: Play + edit: Edit + title: Puzzle Mode + createPuzzle: Create Puzzle + loadPuzzle: Load + reviewPuzzle: Review & Publish + validatingPuzzle: Validating Puzzle + submittingPuzzle: Submitting Puzzle + noPuzzles: There are currently no puzzles in this section. + categories: + levels: Levels + new: New + top-rated: Top Rated + mine: My Puzzles + easy: Easy + hard: Hard + completed: Completed + medium: Medium + official: Official + trending: Trending today + trending-weekly: Trending weekly + categories: Categories + difficulties: By Difficulty + account: My Puzzles + search: Search + validation: + title: Invalid Puzzle + noProducers: Please place a Constant Producer! + noGoalAcceptors: Please place a Goal Acceptor! + goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item. + Deliver a shape to them to set a goal. + goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items. + Make sure that the indicators are green for all acceptors. + buildingOutOfBounds: One or more buildings are outside of the buildable area. + Either increase the area or remove them. + autoComplete: Your puzzle autocompletes itself! Please make sure your constant + producers are not directly delivering to your goal acceptors. + difficulties: + easy: Easy + medium: Medium + hard: Hard + unknown: Unrated + dlcHint: Purchased the DLC already? Make sure it is activated by right clicking + shapez.io in your library, selecting Properties > DLCs. + search: + action: Search + placeholder: Enter a puzzle or author name + includeCompleted: Include Completed + difficulties: + any: Any Difficulty + easy: Easy + medium: Medium + hard: Hard + durations: + any: Any Duration + short: Short (< 2 min) + medium: Normal + long: Long (> 10 min) +backendErrors: + ratelimit: You are performing your actions too frequent. Please wait a bit. + invalid-api-key: Failed to communicate with the backend, please try to + update/restart the game (Invalid Api Key). + unauthorized: Failed to communicate with the backend, please try to + update/restart the game (Unauthorized). + bad-token: Failed to communicate with the backend, please try to update/restart + the game (Bad Token). + bad-id: Invalid puzzle identifier. + not-found: The given puzzle could not be found. + bad-category: The given category could not be found. + bad-short-key: The given short key is invalid. + profane-title: Your puzzle title contains profane words. + bad-title-too-many-spaces: Your puzzle title is too short. + bad-shape-key-in-emitter: A constant producer has an invalid item. + bad-shape-key-in-goal: A goal acceptor has an invalid item. + no-emitters: Your puzzle does not contain any constant producers. + no-goals: Your puzzle does not contain any goal acceptors. + short-key-already-taken: This short key is already taken, please use another one. + can-not-report-your-own-puzzle: You can not report your own puzzle. + bad-payload: The request contains invalid data. + bad-building-placement: Your puzzle contains invalid placed buildings. + timeout: The request timed out. + too-many-likes-already: The puzzle alreay got too many likes. If you still want + to remove it, please contact support@shapez.io! + no-permission: You do not have the permission to perform this action. diff --git a/version b/version index 6261a05b..e1df5de7 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.3.1 \ No newline at end of file +1.4.4 \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 58cfbdc3..cdcdd19e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,25 +3,25 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": - "integrity" "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: "@babel/highlight" "^7.8.3" "@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0": - "integrity" "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==" - "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz" + integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g== dependencies: - "browserslist" "^4.9.1" - "invariant" "^2.2.4" - "semver" "^5.5.0" + browserslist "^4.9.1" + invariant "^2.2.4" + semver "^5.5.0" -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.5.4": - "integrity" "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==" - "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz" - "version" "7.9.0" +"@babel/core@^7.5.4": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== dependencies: "@babel/code-frame" "^7.8.3" "@babel/generator" "^7.9.0" @@ -31,118 +31,118 @@ "@babel/template" "^7.8.6" "@babel/traverse" "^7.9.0" "@babel/types" "^7.9.0" - "convert-source-map" "^1.7.0" - "debug" "^4.1.0" - "gensync" "^1.0.0-beta.1" - "json5" "^2.1.2" - "lodash" "^4.17.13" - "resolve" "^1.3.2" - "semver" "^5.4.1" - "source-map" "^0.5.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" "@babel/generator@^7.9.0", "@babel/generator@^7.9.5": - "integrity" "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz" + integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== dependencies: "@babel/types" "^7.9.5" - "jsesc" "^2.5.1" - "lodash" "^4.17.13" - "source-map" "^0.5.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" "@babel/helper-annotate-as-pure@^7.8.3": - "integrity" "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==" - "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== dependencies: "@babel/types" "^7.8.3" "@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - "integrity" "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==" - "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== dependencies: "@babel/helper-explode-assignable-expression" "^7.8.3" "@babel/types" "^7.8.3" "@babel/helper-compilation-targets@^7.8.7": - "integrity" "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==" - "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz" - "version" "7.8.7" + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz" + integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== dependencies: "@babel/compat-data" "^7.8.6" - "browserslist" "^4.9.1" - "invariant" "^2.2.4" - "levenary" "^1.1.1" - "semver" "^5.5.0" + browserslist "^4.9.1" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" "@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": - "integrity" "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==" - "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz" - "version" "7.8.8" + version "7.8.8" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz" + integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-regex" "^7.8.3" - "regexpu-core" "^4.7.0" + regexpu-core "^4.7.0" "@babel/helper-define-map@^7.8.3": - "integrity" "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==" - "resolved" "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== dependencies: "@babel/helper-function-name" "^7.8.3" "@babel/types" "^7.8.3" - "lodash" "^4.17.13" + lodash "^4.17.13" "@babel/helper-explode-assignable-expression@^7.8.3": - "integrity" "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==" - "resolved" "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== dependencies: "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" "@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": - "integrity" "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==" - "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== dependencies: "@babel/helper-get-function-arity" "^7.8.3" "@babel/template" "^7.8.3" "@babel/types" "^7.9.5" "@babel/helper-get-function-arity@^7.8.3": - "integrity" "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==" - "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-hoist-variables@^7.8.3": - "integrity" "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==" - "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== dependencies: "@babel/types" "^7.8.3" "@babel/helper-member-expression-to-functions@^7.8.3": - "integrity" "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==" - "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-module-imports@^7.8.3": - "integrity" "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== dependencies: "@babel/types" "^7.8.3" "@babel/helper-module-transforms@^7.9.0": - "integrity" "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== dependencies: "@babel/helper-module-imports" "^7.8.3" "@babel/helper-replace-supers" "^7.8.6" @@ -150,31 +150,31 @@ "@babel/helper-split-export-declaration" "^7.8.3" "@babel/template" "^7.8.6" "@babel/types" "^7.9.0" - "lodash" "^4.17.13" + lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.8.3": - "integrity" "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== dependencies: "@babel/types" "^7.8.3" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - "integrity" "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== "@babel/helper-regex@^7.8.3": - "integrity" "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== dependencies: - "lodash" "^4.17.13" + lodash "^4.17.13" "@babel/helper-remap-async-to-generator@^7.8.3": - "integrity" "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==" - "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-wrap-function" "^7.8.3" @@ -183,9 +183,9 @@ "@babel/types" "^7.8.3" "@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": - "integrity" "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==" - "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz" - "version" "7.8.6" + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== dependencies: "@babel/helper-member-expression-to-functions" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" @@ -193,29 +193,29 @@ "@babel/types" "^7.8.6" "@babel/helper-simple-access@^7.8.3": - "integrity" "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==" - "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== dependencies: "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" "@babel/helper-split-export-declaration@^7.8.3": - "integrity" "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==" - "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": - "integrity" "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== "@babel/helper-wrap-function@^7.8.3": - "integrity" "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== dependencies: "@babel/helper-function-name" "^7.8.3" "@babel/template" "^7.8.3" @@ -223,200 +223,200 @@ "@babel/types" "^7.8.3" "@babel/helpers@^7.9.0": - "integrity" "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==" - "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz" - "version" "7.9.2" + version "7.9.2" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz" + integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== dependencies: "@babel/template" "^7.8.3" "@babel/traverse" "^7.9.0" "@babel/types" "^7.9.0" "@babel/highlight@^7.8.3": - "integrity" "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== dependencies: "@babel/helper-validator-identifier" "^7.9.0" - "chalk" "^2.0.0" - "js-tokens" "^4.0.0" + chalk "^2.0.0" + js-tokens "^4.0.0" "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": - "integrity" "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz" - "version" "7.9.4" + version "7.9.4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz" + integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== "@babel/plugin-proposal-async-generator-functions@^7.8.3": - "integrity" "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-remap-async-to-generator" "^7.8.3" "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-proposal-dynamic-import@^7.8.3": - "integrity" "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz" + integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-proposal-json-strings@^7.8.3": - "integrity" "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - "integrity" "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" "@babel/plugin-proposal-numeric-separator@^7.8.3": - "integrity" "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz" + integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" "@babel/plugin-proposal-object-rest-spread@^7.9.5": - "integrity" "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz" + integrity sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.9.5" "@babel/plugin-proposal-optional-catch-binding@^7.8.3": - "integrity" "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-proposal-optional-chaining@^7.9.0": - "integrity" "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz" + integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" "@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": - "integrity" "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz" - "version" "7.8.8" + version "7.8.8" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz" + integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.8" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-async-generators@^7.8.0": - "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - "version" "7.8.4" + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-dynamic-import@^7.8.0": - "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-json-strings@^7.8.0": - "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": - "integrity" "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz" + integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread@^7.8.0": - "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.0": - "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.0": - "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": - "integrity" "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-arrow-functions@^7.8.3": - "integrity" "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-async-to-generator@^7.8.3": - "integrity" "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== dependencies: "@babel/helper-module-imports" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-remap-async-to-generator" "^7.8.3" "@babel/plugin-transform-block-scoped-functions@^7.8.3": - "integrity" "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-block-scoping@^7.4.4", "@babel/plugin-transform-block-scoping@^7.8.3": - "integrity" "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== dependencies: "@babel/helper-plugin-utils" "^7.8.3" - "lodash" "^4.17.13" + lodash "^4.17.13" "@babel/plugin-transform-classes@^7.5.5", "@babel/plugin-transform-classes@^7.9.5": - "integrity" "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz" + integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-define-map" "^7.8.3" @@ -425,211 +425,211 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" - "globals" "^11.1.0" + globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.8.3": - "integrity" "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-destructuring@^7.9.5": - "integrity" "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz" + integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": - "integrity" "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-duplicate-keys@^7.8.3": - "integrity" "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-exponentiation-operator@^7.8.3": - "integrity" "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-for-of@^7.9.0": - "integrity" "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz" + integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-function-name@^7.8.3": - "integrity" "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== dependencies: "@babel/helper-function-name" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-literals@^7.8.3": - "integrity" "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-member-expression-literals@^7.8.3": - "integrity" "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz" + integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-modules-amd@^7.9.0": - "integrity" "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz" + integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q== dependencies: "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" - "babel-plugin-dynamic-import-node" "^2.3.0" + babel-plugin-dynamic-import-node "^2.3.0" "@babel/plugin-transform-modules-commonjs@^7.9.0": - "integrity" "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz" + integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g== dependencies: "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-simple-access" "^7.8.3" - "babel-plugin-dynamic-import-node" "^2.3.0" + babel-plugin-dynamic-import-node "^2.3.0" "@babel/plugin-transform-modules-systemjs@^7.9.0": - "integrity" "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz" + integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ== dependencies: "@babel/helper-hoist-variables" "^7.8.3" "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" - "babel-plugin-dynamic-import-node" "^2.3.0" + babel-plugin-dynamic-import-node "^2.3.0" "@babel/plugin-transform-modules-umd@^7.9.0": - "integrity" "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz" - "version" "7.9.0" + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz" + integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== dependencies: "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - "integrity" "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/plugin-transform-new-target@^7.8.3": - "integrity" "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-object-super@^7.8.3": - "integrity" "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.3" "@babel/plugin-transform-parameters@^7.9.5": - "integrity" "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz" + integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== dependencies: "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-property-literals@^7.8.3": - "integrity" "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz" + integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-regenerator@^7.8.7": - "integrity" "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz" - "version" "7.8.7" + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz" + integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== dependencies: - "regenerator-transform" "^0.14.2" + regenerator-transform "^0.14.2" "@babel/plugin-transform-reserved-words@^7.8.3": - "integrity" "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz" + integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-shorthand-properties@^7.8.3": - "integrity" "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-spread@^7.8.3": - "integrity" "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-sticky-regex@^7.8.3": - "integrity" "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-regex" "^7.8.3" "@babel/plugin-transform-template-literals@^7.8.3": - "integrity" "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-typeof-symbol@^7.8.4": - "integrity" "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz" - "version" "7.8.4" + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz" + integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-unicode-regex@^7.8.3": - "integrity" "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/preset-env@^7.5.4": - "integrity" "sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ==" - "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.5.tgz" + integrity sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ== dependencies: "@babel/compat-data" "^7.9.0" "@babel/helper-compilation-targets" "^7.8.7" @@ -686,43 +686,43 @@ "@babel/plugin-transform-unicode-regex" "^7.8.3" "@babel/preset-modules" "^0.1.3" "@babel/types" "^7.9.5" - "browserslist" "^4.9.1" - "core-js-compat" "^3.6.2" - "invariant" "^2.2.2" - "levenary" "^1.1.1" - "semver" "^5.5.0" + browserslist "^4.9.1" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" "@babel/preset-modules@^0.1.3": - "integrity" "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==" - "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz" - "version" "0.1.3" + version "0.1.3" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" - "esutils" "^2.0.2" + esutils "^2.0.2" "@babel/runtime@^7.8.4": - "integrity" "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz" - "version" "7.9.2" + version "7.9.2" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz" + integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== dependencies: - "regenerator-runtime" "^0.13.4" + regenerator-runtime "^0.13.4" "@babel/template@^7.8.3", "@babel/template@^7.8.6": - "integrity" "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==" - "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz" - "version" "7.8.6" + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== dependencies: "@babel/code-frame" "^7.8.3" "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": - "integrity" "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz" + integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== dependencies: "@babel/code-frame" "^7.8.3" "@babel/generator" "^7.9.5" @@ -730,218 +730,218 @@ "@babel/helper-split-export-declaration" "^7.8.3" "@babel/parser" "^7.9.0" "@babel/types" "^7.9.5" - "debug" "^4.1.0" - "globals" "^11.1.0" - "lodash" "^4.17.13" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5": - "integrity" "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz" - "version" "7.9.5" + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz" + integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== dependencies: "@babel/helper-validator-identifier" "^7.9.5" - "lodash" "^4.17.13" - "to-fast-properties" "^2.0.0" + lodash "^4.17.13" + to-fast-properties "^2.0.0" "@csstools/convert-colors@^1.4.0": - "integrity" "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - "resolved" "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz" - "version" "1.4.0" + version "1.4.0" + resolved "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== "@jimp/bmp@^0.6.8": - "integrity" "sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w==" - "resolved" "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.8.tgz" + integrity sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w== dependencies: "@jimp/utils" "^0.6.8" - "bmp-js" "^0.1.0" - "core-js" "^2.5.7" + bmp-js "^0.1.0" + core-js "^2.5.7" "@jimp/core@^0.6.8": - "integrity" "sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA==" - "resolved" "https://registry.npmjs.org/@jimp/core/-/core-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/core/-/core-0.6.8.tgz" + integrity sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA== dependencies: "@jimp/utils" "^0.6.8" - "any-base" "^1.1.0" - "buffer" "^5.2.0" - "core-js" "^2.5.7" - "exif-parser" "^0.1.12" - "file-type" "^9.0.0" - "load-bmfont" "^1.3.1" - "mkdirp" "0.5.1" - "phin" "^2.9.1" - "pixelmatch" "^4.0.2" - "tinycolor2" "^1.4.1" + any-base "^1.1.0" + buffer "^5.2.0" + core-js "^2.5.7" + exif-parser "^0.1.12" + file-type "^9.0.0" + load-bmfont "^1.3.1" + mkdirp "0.5.1" + phin "^2.9.1" + pixelmatch "^4.0.2" + tinycolor2 "^1.4.1" -"@jimp/custom@^0.6.8", "@jimp/custom@>=0.3.5": - "integrity" "sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng==" - "resolved" "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.8.tgz" - "version" "0.6.8" +"@jimp/custom@^0.6.8": + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.8.tgz" + integrity sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng== dependencies: "@jimp/core" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/gif@^0.6.8": - "integrity" "sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw==" - "resolved" "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.8.tgz" + integrity sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" - "omggif" "^1.0.9" + core-js "^2.5.7" + omggif "^1.0.9" "@jimp/jpeg@^0.6.8": - "integrity" "sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew==" - "resolved" "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.8.tgz" + integrity sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" - "jpeg-js" "^0.3.4" + core-js "^2.5.7" + jpeg-js "^0.3.4" -"@jimp/plugin-blit@^0.6.8", "@jimp/plugin-blit@>=0.3.5": - "integrity" "sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz" - "version" "0.6.8" +"@jimp/plugin-blit@^0.6.8": + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz" + integrity sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-blur@^0.6.8": - "integrity" "sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz" + integrity sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-color@^0.6.8": - "integrity" "sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.8.tgz" + integrity sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" - "tinycolor2" "^1.4.1" + core-js "^2.5.7" + tinycolor2 "^1.4.1" "@jimp/plugin-contain@^0.6.8": - "integrity" "sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz" + integrity sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-cover@^0.6.8": - "integrity" "sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz" + integrity sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" -"@jimp/plugin-crop@^0.6.8", "@jimp/plugin-crop@>=0.3.5": - "integrity" "sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz" - "version" "0.6.8" +"@jimp/plugin-crop@^0.6.8": + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz" + integrity sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-displace@^0.6.8": - "integrity" "sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz" + integrity sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-dither@^0.6.8": - "integrity" "sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz" + integrity sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-flip@^0.6.8": - "integrity" "sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz" + integrity sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-gaussian@^0.6.8": - "integrity" "sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz" + integrity sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-invert@^0.6.8": - "integrity" "sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz" + integrity sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-mask@^0.6.8": - "integrity" "sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz" + integrity sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-normalize@^0.6.8": - "integrity" "sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz" + integrity sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugin-print@^0.6.8": - "integrity" "sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.8.tgz" + integrity sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" - "load-bmfont" "^1.4.0" + core-js "^2.5.7" + load-bmfont "^1.4.0" -"@jimp/plugin-resize@^0.6.8", "@jimp/plugin-resize@>=0.3.5": - "integrity" "sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz" - "version" "0.6.8" +"@jimp/plugin-resize@^0.6.8": + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz" + integrity sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" -"@jimp/plugin-rotate@^0.6.8", "@jimp/plugin-rotate@>=0.3.5": - "integrity" "sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz" - "version" "0.6.8" +"@jimp/plugin-rotate@^0.6.8": + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz" + integrity sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" -"@jimp/plugin-scale@^0.6.8", "@jimp/plugin-scale@>=0.3.5": - "integrity" "sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ==" - "resolved" "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz" - "version" "0.6.8" +"@jimp/plugin-scale@^0.6.8": + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz" + integrity sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" + core-js "^2.5.7" "@jimp/plugins@^0.6.8": - "integrity" "sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ==" - "resolved" "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.8.tgz" + integrity sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ== dependencies: "@jimp/plugin-blit" "^0.6.8" "@jimp/plugin-blur" "^0.6.8" @@ -960,130 +960,130 @@ "@jimp/plugin-resize" "^0.6.8" "@jimp/plugin-rotate" "^0.6.8" "@jimp/plugin-scale" "^0.6.8" - "core-js" "^2.5.7" - "timm" "^1.6.1" + core-js "^2.5.7" + timm "^1.6.1" "@jimp/png@^0.6.8": - "integrity" "sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew==" - "resolved" "https://registry.npmjs.org/@jimp/png/-/png-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/png/-/png-0.6.8.tgz" + integrity sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew== dependencies: "@jimp/utils" "^0.6.8" - "core-js" "^2.5.7" - "pngjs" "^3.3.3" + core-js "^2.5.7" + pngjs "^3.3.3" "@jimp/tiff@^0.6.8": - "integrity" "sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg==" - "resolved" "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.8.tgz" + integrity sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg== dependencies: - "core-js" "^2.5.7" - "utif" "^2.0.1" + core-js "^2.5.7" + utif "^2.0.1" "@jimp/types@^0.6.8": - "integrity" "sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A==" - "resolved" "https://registry.npmjs.org/@jimp/types/-/types-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/types/-/types-0.6.8.tgz" + integrity sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A== dependencies: "@jimp/bmp" "^0.6.8" "@jimp/gif" "^0.6.8" "@jimp/jpeg" "^0.6.8" "@jimp/png" "^0.6.8" "@jimp/tiff" "^0.6.8" - "core-js" "^2.5.7" - "timm" "^1.6.1" + core-js "^2.5.7" + timm "^1.6.1" "@jimp/utils@^0.6.8": - "integrity" "sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw==" - "resolved" "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.8.tgz" - "version" "0.6.8" + version "0.6.8" + resolved "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.8.tgz" + integrity sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw== dependencies: - "core-js" "^2.5.7" + core-js "^2.5.7" "@octokit/auth-token@^2.4.0": - "integrity" "sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==" - "resolved" "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz" - "version" "2.4.2" + version "2.4.2" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz" + integrity sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ== dependencies: "@octokit/types" "^5.0.0" -"@octokit/core@^3.0.0", "@octokit/core@>=2": - "integrity" "sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw==" - "resolved" "https://registry.npmjs.org/@octokit/core/-/core-3.1.2.tgz" - "version" "3.1.2" +"@octokit/core@^3.0.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@octokit/core/-/core-3.1.2.tgz" + integrity sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw== dependencies: "@octokit/auth-token" "^2.4.0" "@octokit/graphql" "^4.3.1" "@octokit/request" "^5.4.0" "@octokit/types" "^5.0.0" - "before-after-hook" "^2.1.0" - "universal-user-agent" "^6.0.0" + before-after-hook "^2.1.0" + universal-user-agent "^6.0.0" "@octokit/endpoint@^6.0.1": - "integrity" "sha512-7Cc8olaCoL/mtquB7j/HTbPM+sY6Ebr4k2X2y4JoXpVKQ7r5xB4iGQE0IoO58wIPsUk4AzoT65AMEpymSbWTgQ==" - "resolved" "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.6.tgz" - "version" "6.0.6" + version "6.0.6" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.6.tgz" + integrity sha512-7Cc8olaCoL/mtquB7j/HTbPM+sY6Ebr4k2X2y4JoXpVKQ7r5xB4iGQE0IoO58wIPsUk4AzoT65AMEpymSbWTgQ== dependencies: "@octokit/types" "^5.0.0" - "is-plain-object" "^5.0.0" - "universal-user-agent" "^6.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" "@octokit/graphql@^4.3.1": - "integrity" "sha512-Rry+unqKTa3svswT2ZAuqenpLrzJd+JTv89LTeVa5UM/5OX8o4KTkPL7/1ABq4f/ZkELb0XEK/2IEoYwykcLXg==" - "resolved" "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.6.tgz" - "version" "4.5.6" + version "4.5.6" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.6.tgz" + integrity sha512-Rry+unqKTa3svswT2ZAuqenpLrzJd+JTv89LTeVa5UM/5OX8o4KTkPL7/1ABq4f/ZkELb0XEK/2IEoYwykcLXg== dependencies: "@octokit/request" "^5.3.0" "@octokit/types" "^5.0.0" - "universal-user-agent" "^6.0.0" + universal-user-agent "^6.0.0" "@octokit/plugin-paginate-rest@^2.2.0": - "integrity" "sha512-YT6Klz3LLH6/nNgi0pheJnUmTFW4kVnxGft+v8Itc41IIcjl7y1C8TatmKQBbCSuTSNFXO5pCENnqg6sjwpJhg==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.4.0.tgz" - "version" "2.4.0" + version "2.4.0" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.4.0.tgz" + integrity sha512-YT6Klz3LLH6/nNgi0pheJnUmTFW4kVnxGft+v8Itc41IIcjl7y1C8TatmKQBbCSuTSNFXO5pCENnqg6sjwpJhg== dependencies: "@octokit/types" "^5.5.0" "@octokit/plugin-request-log@^1.0.0": - "integrity" "sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz" - "version" "1.0.0" + version "1.0.0" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz" + integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== "@octokit/plugin-rest-endpoint-methods@4.2.0": - "integrity" "sha512-1/qn1q1C1hGz6W/iEDm9DoyNoG/xdFDt78E3eZ5hHeUfJTLJgyAMdj9chL/cNBHjcjd+FH5aO1x0VCqR2RE0mw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.2.0.tgz" - "version" "4.2.0" + version "4.2.0" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.2.0.tgz" + integrity sha512-1/qn1q1C1hGz6W/iEDm9DoyNoG/xdFDt78E3eZ5hHeUfJTLJgyAMdj9chL/cNBHjcjd+FH5aO1x0VCqR2RE0mw== dependencies: "@octokit/types" "^5.5.0" - "deprecation" "^2.3.1" + deprecation "^2.3.1" "@octokit/request-error@^2.0.0": - "integrity" "sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==" - "resolved" "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz" - "version" "2.0.2" + version "2.0.2" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz" + integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw== dependencies: "@octokit/types" "^5.0.1" - "deprecation" "^2.0.0" - "once" "^1.4.0" + deprecation "^2.0.0" + once "^1.4.0" "@octokit/request@^5.3.0", "@octokit/request@^5.4.0": - "integrity" "sha512-CzwVvRyimIM1h2n9pLVYfTDmX9m+KHSgCpqPsY8F1NdEK8IaWqXhSBXsdjOBFZSpEcxNEeg4p0UO9cQ8EnOCLA==" - "resolved" "https://registry.npmjs.org/@octokit/request/-/request-5.4.9.tgz" - "version" "5.4.9" + version "5.4.9" + resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.9.tgz" + integrity sha512-CzwVvRyimIM1h2n9pLVYfTDmX9m+KHSgCpqPsY8F1NdEK8IaWqXhSBXsdjOBFZSpEcxNEeg4p0UO9cQ8EnOCLA== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" "@octokit/types" "^5.0.0" - "deprecation" "^2.0.0" - "is-plain-object" "^5.0.0" - "node-fetch" "^2.6.1" - "once" "^1.4.0" - "universal-user-agent" "^6.0.0" + deprecation "^2.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + once "^1.4.0" + universal-user-agent "^6.0.0" "@octokit/rest@^18.0.6": - "integrity" "sha512-ES4lZBKPJMX/yUoQjAZiyFjei9pJ4lTTfb9k7OtYoUzKPDLl/M8jiHqt6qeSauyU4eZGLw0sgP1WiQl9FYeM5w==" - "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-18.0.6.tgz" - "version" "18.0.6" + version "18.0.6" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-18.0.6.tgz" + integrity sha512-ES4lZBKPJMX/yUoQjAZiyFjei9pJ4lTTfb9k7OtYoUzKPDLl/M8jiHqt6qeSauyU4eZGLw0sgP1WiQl9FYeM5w== dependencies: "@octokit/core" "^3.0.0" "@octokit/plugin-paginate-rest" "^2.2.0" @@ -1091,155 +1091,155 @@ "@octokit/plugin-rest-endpoint-methods" "4.2.0" "@octokit/types@^5.0.0", "@octokit/types@^5.0.1", "@octokit/types@^5.5.0": - "integrity" "sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ==" - "resolved" "https://registry.npmjs.org/@octokit/types/-/types-5.5.0.tgz" - "version" "5.5.0" + version "5.5.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-5.5.0.tgz" + integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ== dependencies: "@types/node" ">= 8" "@sindresorhus/is@^0.7.0": - "integrity" "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" - "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz" - "version" "0.7.0" + version "0.7.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== "@types/color-name@^1.1.1": - "integrity" "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - "resolved" "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" - "version" "1.1.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== "@types/cordova@^0.0.34": - "integrity" "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" - "resolved" "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz" - "version" "0.0.34" + version "0.0.34" + resolved "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz" + integrity sha1-6nrd907Ow9dimCegw54smt3HPQQ= "@types/eslint-visitor-keys@^1.0.0": - "integrity" "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" - "resolved" "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz" - "version" "1.0.0" + version "1.0.0" + resolved "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== "@types/filesystem@^0.0.29": - "integrity" "sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw==" - "resolved" "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.29.tgz" - "version" "0.0.29" + version "0.0.29" + resolved "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.29.tgz" + integrity sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw== dependencies: "@types/filewriter" "*" "@types/filewriter@*": - "integrity" "sha1-wFTor02d11205jq8dviFFocU1LM=" - "resolved" "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.28.tgz" - "version" "0.0.28" + version "0.0.28" + resolved "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.28.tgz" + integrity sha1-wFTor02d11205jq8dviFFocU1LM= "@types/json-schema@^7.0.3": - "integrity" "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==" - "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz" - "version" "7.0.4" + version "7.0.4" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== "@types/node@>= 8": - "integrity" "sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-14.11.2.tgz" - "version" "14.11.2" + version "14.11.2" + resolved "https://registry.npmjs.org/@types/node/-/node-14.11.2.tgz" + integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== "@types/q@^1.5.1": - "integrity" "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" - "resolved" "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz" - "version" "1.5.2" + version "1.5.2" + resolved "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== "@typescript-eslint/eslint-plugin@3.0.1": - "integrity" "sha512-RxGldRQD3hgOK2xtBfNfA5MMV3rn5gVChe+MIf14hKm51jO2urqF64xOyVrGtzThkrd4rS1Kihqx2nkSxkXHvA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.0.1.tgz" - "version" "3.0.1" + version "3.0.1" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.0.1.tgz" + integrity sha512-RxGldRQD3hgOK2xtBfNfA5MMV3rn5gVChe+MIf14hKm51jO2urqF64xOyVrGtzThkrd4rS1Kihqx2nkSxkXHvA== dependencies: "@typescript-eslint/experimental-utils" "3.0.1" - "functional-red-black-tree" "^1.0.1" - "regexpp" "^3.0.0" - "semver" "^7.3.2" - "tsutils" "^3.17.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" "@typescript-eslint/experimental-utils@3.0.1": - "integrity" "sha512-GdwOVz80MOWxbc/br1DC30eeqlxfpVzexHgHtf3L0hcbOu1xAs1wSCNcaBTLMOMZbh1gj/cKZt0eB207FxWfFA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.0.1.tgz" - "version" "3.0.1" + version "3.0.1" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.0.1.tgz" + integrity sha512-GdwOVz80MOWxbc/br1DC30eeqlxfpVzexHgHtf3L0hcbOu1xAs1wSCNcaBTLMOMZbh1gj/cKZt0eB207FxWfFA== dependencies: "@types/json-schema" "^7.0.3" "@typescript-eslint/typescript-estree" "3.0.1" - "eslint-scope" "^5.0.0" - "eslint-utils" "^2.0.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" -"@typescript-eslint/parser@^3.0.0", "@typescript-eslint/parser@3.0.1": - "integrity" "sha512-Pn2tDmOc4Ri93VQnT70W0pqQr6i/pEZqIPXfWXm4RuiIprL0t6SG13ViVXHgfScknL2Fm2G4IqXhUzxSRCWXCw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.0.1.tgz" - "version" "3.0.1" +"@typescript-eslint/parser@3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.0.1.tgz" + integrity sha512-Pn2tDmOc4Ri93VQnT70W0pqQr6i/pEZqIPXfWXm4RuiIprL0t6SG13ViVXHgfScknL2Fm2G4IqXhUzxSRCWXCw== dependencies: "@types/eslint-visitor-keys" "^1.0.0" "@typescript-eslint/experimental-utils" "3.0.1" "@typescript-eslint/typescript-estree" "3.0.1" - "eslint-visitor-keys" "^1.1.0" + eslint-visitor-keys "^1.1.0" "@typescript-eslint/typescript-estree@3.0.1": - "integrity" "sha512-FrbMdgVCeIGHKaP9OYTttFTlF8Ds7AkjMca2GzYCE7pVch10PAJc1mmAFt+DfQPgu/2TrLAprg2vI0PK/WTdcg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.0.1.tgz" - "version" "3.0.1" + version "3.0.1" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.0.1.tgz" + integrity sha512-FrbMdgVCeIGHKaP9OYTttFTlF8Ds7AkjMca2GzYCE7pVch10PAJc1mmAFt+DfQPgu/2TrLAprg2vI0PK/WTdcg== dependencies: - "debug" "^4.1.1" - "eslint-visitor-keys" "^1.1.0" - "glob" "^7.1.6" - "is-glob" "^4.0.1" - "lodash" "^4.17.15" - "semver" "^7.3.2" - "tsutils" "^3.17.1" + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" "@webassemblyjs/ast@1.9.0": - "integrity" "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== dependencies: "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/helper-wasm-bytecode" "1.9.0" "@webassemblyjs/wast-parser" "1.9.0" "@webassemblyjs/floating-point-hex-parser@1.9.0": - "integrity" "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== "@webassemblyjs/helper-api-error@1.9.0": - "integrity" "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== "@webassemblyjs/helper-buffer@1.9.0": - "integrity" "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== "@webassemblyjs/helper-code-frame@1.9.0": - "integrity" "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== dependencies: "@webassemblyjs/wast-printer" "1.9.0" "@webassemblyjs/helper-fsm@1.9.0": - "integrity" "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== "@webassemblyjs/helper-module-context@1.9.0": - "integrity" "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-wasm-bytecode@1.9.0": - "integrity" "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== "@webassemblyjs/helper-wasm-section@1.9.0": - "integrity" "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -1247,28 +1247,28 @@ "@webassemblyjs/wasm-gen" "1.9.0" "@webassemblyjs/ieee754@1.9.0": - "integrity" "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.9.0": - "integrity" "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.9.0": - "integrity" "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== "@webassemblyjs/wasm-edit@1.9.0": - "integrity" "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -1280,9 +1280,9 @@ "@webassemblyjs/wast-printer" "1.9.0" "@webassemblyjs/wasm-gen@1.9.0": - "integrity" "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-wasm-bytecode" "1.9.0" @@ -1291,9 +1291,9 @@ "@webassemblyjs/utf8" "1.9.0" "@webassemblyjs/wasm-opt@1.9.0": - "integrity" "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -1301,9 +1301,9 @@ "@webassemblyjs/wasm-parser" "1.9.0" "@webassemblyjs/wasm-parser@1.9.0": - "integrity" "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-api-error" "1.9.0" @@ -1313,9 +1313,9 @@ "@webassemblyjs/utf8" "1.9.0" "@webassemblyjs/wast-parser@1.9.0": - "integrity" "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/floating-point-hex-parser" "1.9.0" @@ -1325,7742 +1325,7559 @@ "@xtuc/long" "4.2.2" "@webassemblyjs/wast-printer@1.9.0": - "integrity" "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz" - "version" "1.9.0" + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": - "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" - "version" "1.2.0" + version "1.2.0" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": - "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" - "version" "4.2.2" + version "4.2.2" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -"accepts@~1.3.7": - "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==" - "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" - "version" "1.3.7" +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: - "mime-types" "~2.1.24" - "negotiator" "0.6.2" + mime-types "~2.1.24" + negotiator "0.6.2" -"acorn-jsx@^5.2.0": - "integrity" "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz" - "version" "5.2.0" +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== -"acorn-walk@^7.1.1": - "integrity" "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==" - "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz" - "version" "7.1.1" +acorn-walk@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz" + integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== -"acorn@^6.0.0 || ^7.0.0", "acorn@^7.1.1": - "integrity" "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz" - "version" "7.1.1" +acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -"acorn@^6.4.1": - "integrity" "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz" - "version" "6.4.1" +acorn@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -"ajv-errors@^1.0.0": - "integrity" "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - "resolved" "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" - "version" "1.0.1" +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -"ajv-keywords@^3.1.0", "ajv-keywords@^3.4.1": - "integrity" "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==" - "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz" - "version" "3.5.1" +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.5.1" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz" + integrity sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA== -"ajv@^6.1.0", "ajv@^6.10.0", "ajv@^6.10.2", "ajv@^6.12.0", "ajv@^6.9.1", "ajv@>=5.0.0": - "integrity" "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz" - "version" "6.12.0" +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0: + version "6.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -"alphanum-sort@^1.0.0": - "integrity" "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - "resolved" "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" - "version" "1.0.2" +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -"amdefine@>=0.0.4": - "integrity" "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - "resolved" "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" - "version" "1.0.1" +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -"ansi-escapes@^4.2.1": - "integrity" "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz" - "version" "4.3.1" +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: - "type-fest" "^0.11.0" + type-fest "^0.11.0" -"ansi-regex@^2.0.0": - "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - "version" "2.1.1" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -"ansi-regex@^4.1.0": - "integrity" "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" - "version" "4.1.0" +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -"ansi-regex@^5.0.0": - "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" - "version" "5.0.0" +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -"ansi-styles@^2.2.1": - "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - "version" "2.2.1" +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -"ansi-styles@^3.2.0", "ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: - "color-convert" "^1.9.0" + color-convert "^1.9.0" -"ansi-styles@^4.0.0": - "integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" - "version" "4.2.1" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: "@types/color-name" "^1.1.1" - "color-convert" "^2.0.1" - -"ansi-styles@^4.1.0": - "integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "@types/color-name" "^1.1.1" - "color-convert" "^2.0.1" - -"any-base@^1.1.0": - "integrity" "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" - "resolved" "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz" - "version" "1.1.0" - -"anymatch@~3.1.1": - "integrity" "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" - -"aproba@^1.1.1": - "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" - "version" "1.2.0" - -"arch@^2.1.0": - "integrity" "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==" - "resolved" "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz" - "version" "2.1.1" - -"archive-type@^4.0.0": - "integrity" "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=" - "resolved" "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "file-type" "^4.2.0" - -"argparse@^1.0.7": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"arr-diff@^4.0.0": - "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - "version" "4.0.0" - -"arr-flatten@^1.1.0": - "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - "version" "1.1.0" - -"arr-union@^3.1.0": - "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - "version" "3.1.0" - -"array-find-index@^1.0.1": - "integrity" "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - "resolved" "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" - "version" "1.0.2" - -"array-flatten@1.1.1": - "integrity" "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - "version" "1.1.1" - -"array-unique@^0.3.2": - "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - "version" "0.3.2" - -"asn1.js@^4.0.0": - "integrity" "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==" - "resolved" "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz" - "version" "4.10.1" - dependencies: - "bn.js" "^4.0.0" - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - -"assert@^1.1.1": - "integrity" "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==" - "resolved" "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "object-assign" "^4.1.1" - "util" "0.10.3" - -"assets@^3.0.0": - "integrity" "sha512-fTyLNf/9V24y5zO83f4DAEuvaKj7MWBixbnqdZneAhsv1r21yQ/6ogZfvXHmphJAHsz4DhuOwHeJKVbGqqvk0Q==" - "resolved" "https://registry.npmjs.org/assets/-/assets-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "async" "^2.5.0" - "bluebird" "^3.4.6" - "calipers" "^2.0.0" - "calipers-gif" "^2.0.0" - "calipers-jpeg" "^2.0.0" - "calipers-png" "^2.0.0" - "calipers-svg" "^2.0.0" - "calipers-webp" "^2.0.0" - "glob" "^7.0.6" - "lodash" "^4.15.0" - "mime" "^2.4.0" - -"assign-symbols@^1.0.0": - "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - "version" "1.0.0" - -"ast-types@0.9.6": - "integrity" "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" - "resolved" "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz" - "version" "0.9.6" - -"astral-regex@^1.0.0": - "integrity" "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz" - "version" "1.0.0" - -"async-limiter@~1.0.0": - "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - "version" "1.0.1" - -"async@^2.5.0": - "integrity" "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==" - "resolved" "https://registry.npmjs.org/async/-/async-2.6.3.tgz" - "version" "2.6.3" - dependencies: - "lodash" "^4.17.14" - -"async@~0.2.10": - "integrity" "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - "resolved" "https://registry.npmjs.org/async/-/async-0.2.10.tgz" - "version" "0.2.10" - -"atob@^2.1.2": - "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - "version" "2.1.2" - -"autoprefixer@^9.4.3", "autoprefixer@^9.4.7", "autoprefixer@^9.6.1": - "integrity" "sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ==" - "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.6.tgz" - "version" "9.7.6" - dependencies: - "browserslist" "^4.11.1" - "caniuse-lite" "^1.0.30001039" - "chalk" "^2.4.2" - "normalize-range" "^0.1.2" - "num2fraction" "^1.2.2" - "postcss" "^7.0.27" - "postcss-value-parser" "^4.0.3" - -"babel-code-frame@^6.26.0": - "integrity" "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=" - "resolved" "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz" - "version" "6.26.0" - dependencies: - "chalk" "^1.1.3" - "esutils" "^2.0.2" - "js-tokens" "^3.0.2" - -"babel-core@^6.26.0", "babel-core@^6.26.3": - "integrity" "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==" - "resolved" "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz" - "version" "6.26.3" - dependencies: - "babel-code-frame" "^6.26.0" - "babel-generator" "^6.26.0" - "babel-helpers" "^6.24.1" - "babel-messages" "^6.23.0" - "babel-register" "^6.26.0" - "babel-runtime" "^6.26.0" - "babel-template" "^6.26.0" - "babel-traverse" "^6.26.0" - "babel-types" "^6.26.0" - "babylon" "^6.18.0" - "convert-source-map" "^1.5.1" - "debug" "^2.6.9" - "json5" "^0.5.1" - "lodash" "^4.17.4" - "minimatch" "^3.0.4" - "path-is-absolute" "^1.0.1" - "private" "^0.1.8" - "slash" "^1.0.0" - "source-map" "^0.5.7" - -"babel-generator@^6.26.0": - "integrity" "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==" - "resolved" "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz" - "version" "6.26.1" - dependencies: - "babel-messages" "^6.23.0" - "babel-runtime" "^6.26.0" - "babel-types" "^6.26.0" - "detect-indent" "^4.0.0" - "jsesc" "^1.3.0" - "lodash" "^4.17.4" - "source-map" "^0.5.7" - "trim-right" "^1.0.1" - -"babel-helpers@^6.24.1": - "integrity" "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=" - "resolved" "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz" - "version" "6.24.1" - dependencies: - "babel-runtime" "^6.22.0" - "babel-template" "^6.24.1" - -"babel-loader@^8.0.4": - "integrity" "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==" - "resolved" "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "find-cache-dir" "^2.1.0" - "loader-utils" "^1.4.0" - "mkdirp" "^0.5.3" - "pify" "^4.0.1" - "schema-utils" "^2.6.5" - -"babel-messages@^6.23.0": - "integrity" "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=" - "resolved" "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz" - "version" "6.23.0" - dependencies: - "babel-runtime" "^6.22.0" - -"babel-plugin-closure-elimination@^1.3.0": - "integrity" "sha512-ClKuSxKLLNhe69bvTMuONDI0dQDW49lXB2qtQyyKCzvwegRGel/q4/e+1EoDNDN97Hf1QkxGMbzpAGPmU4Tfjw==" - "resolved" "https://registry.npmjs.org/babel-plugin-closure-elimination/-/babel-plugin-closure-elimination-1.3.0.tgz" - "version" "1.3.0" - -"babel-plugin-console-source@^2.0.2": - "integrity" "sha512-OGhrdhuMjiEW0Ma0P9e2B4dFddCpJ/xN/RRaM/4wwDLl+6ZKf+Xd77FtVjpNeDzNRNk8wjRdStA4hpZizXzl1g==" - "resolved" "https://registry.npmjs.org/babel-plugin-console-source/-/babel-plugin-console-source-2.0.4.tgz" - "version" "2.0.4" - -"babel-plugin-danger-remove-unused-import@^1.1.2": - "integrity" "sha512-3bNmVAaakP3b1aROj7O3bOWj2kBa85sZR5naZ3Rn8L9buiZaAyZLgjfrPDL3zhX4wySOA5jrTm/wSmJPsMm3cg==" - "resolved" "https://registry.npmjs.org/babel-plugin-danger-remove-unused-import/-/babel-plugin-danger-remove-unused-import-1.1.2.tgz" - "version" "1.1.2" - -"babel-plugin-dynamic-import-node@^2.3.0": - "integrity" "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==" - "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "object.assign" "^4.1.0" - -"babel-register@^6.26.0": - "integrity" "sha1-btAhFz4vy0htestFxgCahW9kcHE=" - "resolved" "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz" - "version" "6.26.0" - dependencies: - "babel-core" "^6.26.0" - "babel-runtime" "^6.26.0" - "core-js" "^2.5.0" - "home-or-tmp" "^2.0.0" - "lodash" "^4.17.4" - "mkdirp" "^0.5.1" - "source-map-support" "^0.4.15" - -"babel-runtime@^6.22.0", "babel-runtime@^6.26.0": - "integrity" "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" - "resolved" "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" - "version" "6.26.0" - dependencies: - "core-js" "^2.4.0" - "regenerator-runtime" "^0.11.0" - -"babel-runtime@^7.0.0-beta.3": - "integrity" "sha512-jlzZ8RACjt0QGxq+wqsw5bCQE9RcUyWpw987mDY3GYxTpOQT2xoyNoG++oVCHzr/nACLBIprfVBNvv/If1ZYcg==" - "resolved" "https://registry.npmjs.org/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz" - "version" "7.0.0-beta.3" - dependencies: - "core-js" "^2.4.0" - "regenerator-runtime" "^0.11.0" - -"babel-template@^6.24.1", "babel-template@^6.26.0": - "integrity" "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=" - "resolved" "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz" - "version" "6.26.0" - dependencies: - "babel-runtime" "^6.26.0" - "babel-traverse" "^6.26.0" - "babel-types" "^6.26.0" - "babylon" "^6.18.0" - "lodash" "^4.17.4" - -"babel-traverse@^6.26.0": - "integrity" "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=" - "resolved" "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz" - "version" "6.26.0" - dependencies: - "babel-code-frame" "^6.26.0" - "babel-messages" "^6.23.0" - "babel-runtime" "^6.26.0" - "babel-types" "^6.26.0" - "babylon" "^6.18.0" - "debug" "^2.6.8" - "globals" "^9.18.0" - "invariant" "^2.2.2" - "lodash" "^4.17.4" - -"babel-types@^6.26.0": - "integrity" "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=" - "resolved" "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" - "version" "6.26.0" - dependencies: - "babel-runtime" "^6.26.0" - "esutils" "^2.0.2" - "lodash" "^4.17.4" - "to-fast-properties" "^1.0.3" - -"babylon@^6.18.0": - "integrity" "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - "resolved" "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz" - "version" "6.18.0" - -"balanced-match@^1.0.0": - "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - "version" "1.0.0" - -"base@^0.11.1": - "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" - "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - "version" "0.11.2" - dependencies: - "cache-base" "^1.0.1" - "class-utils" "^0.3.5" - "component-emitter" "^1.2.1" - "define-property" "^1.0.0" - "isobject" "^3.0.1" - "mixin-deep" "^1.2.0" - "pascalcase" "^0.1.1" - -"base64-js@^1.0.2": - "integrity" "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz" - "version" "1.3.1" - -"before-after-hook@^2.1.0": - "integrity" "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==" - "resolved" "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz" - "version" "2.1.0" - -"bfj@^6.1.1": - "integrity" "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==" - "resolved" "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz" - "version" "6.1.2" - dependencies: - "bluebird" "^3.5.5" - "check-types" "^8.0.3" - "hoopy" "^0.1.4" - "tryer" "^1.0.1" - -"big.js@^3.1.3": - "integrity" "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" - "resolved" "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz" - "version" "3.2.0" - -"big.js@^5.2.2": - "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - "version" "5.2.2" - -"bin-build@^3.0.0": - "integrity" "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==" - "resolved" "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "decompress" "^4.0.0" - "download" "^6.2.2" - "execa" "^0.7.0" - "p-map-series" "^1.0.0" - "tempfile" "^2.0.0" - -"bin-check@^4.1.0": - "integrity" "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==" - "resolved" "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "execa" "^0.7.0" - "executable" "^4.1.0" - -"bin-version-check@^4.0.0": - "integrity" "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==" - "resolved" "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "bin-version" "^3.0.0" - "semver" "^5.6.0" - "semver-truncate" "^1.1.2" - -"bin-version@^3.0.0": - "integrity" "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==" - "resolved" "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "execa" "^1.0.0" - "find-versions" "^3.0.0" - -"bin-wrapper@^4.0.0", "bin-wrapper@^4.0.1": - "integrity" "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==" - "resolved" "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "bin-check" "^4.1.0" - "bin-version-check" "^4.0.0" - "download" "^7.1.0" - "import-lazy" "^3.1.0" - "os-filter-obj" "^2.0.0" - "pify" "^4.0.1" - -"binary-extensions@^2.0.0": - "integrity" "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz" - "version" "2.1.0" - -"bl@^1.0.0": - "integrity" "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==" - "resolved" "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz" - "version" "1.2.2" - dependencies: - "readable-stream" "^2.3.5" - "safe-buffer" "^5.1.1" - -"bluebird@^3.4.6", "bluebird@^3.5.0", "bluebird@^3.5.5", "bluebird@3.x.x": - "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - "version" "3.7.2" - -"bmp-js@^0.1.0": - "integrity" "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" - "resolved" "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz" - "version" "0.1.0" - -"bn.js@^4.0.0": - "integrity" "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz" - "version" "4.11.9" - -"bn.js@^4.1.0": - "integrity" "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz" - "version" "4.11.9" - -"bn.js@^4.4.0": - "integrity" "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz" - "version" "4.11.9" - -"bn.js@^5.1.1": - "integrity" "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz" - "version" "5.1.2" - -"body-parser@1.19.0": - "integrity" "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==" - "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" - "version" "1.19.0" - dependencies: - "bytes" "3.1.0" - "content-type" "~1.0.4" - "debug" "2.6.9" - "depd" "~1.1.2" - "http-errors" "1.7.2" - "iconv-lite" "0.4.24" - "on-finished" "~2.3.0" - "qs" "6.7.0" - "raw-body" "2.4.0" - "type-is" "~1.6.17" - -"boolbase@^1.0.0", "boolbase@~1.0.0": - "integrity" "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" - "version" "1.0.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"braces@^2.3.1": - "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" - "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "arr-flatten" "^1.1.0" - "array-unique" "^0.3.2" - "extend-shallow" "^2.0.1" - "fill-range" "^4.0.0" - "isobject" "^3.0.1" - "repeat-element" "^1.1.2" - "snapdragon" "^0.8.1" - "snapdragon-node" "^2.0.1" - "split-string" "^3.0.2" - "to-regex" "^3.0.1" - -"braces@~3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "fill-range" "^7.0.1" - -"brorand@^1.0.1": - "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - "version" "1.1.0" - -"browserify-aes@^1.0.0", "browserify-aes@^1.0.4": - "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" - "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "buffer-xor" "^1.0.3" - "cipher-base" "^1.0.0" - "create-hash" "^1.1.0" - "evp_bytestokey" "^1.0.3" - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"browserify-cipher@^1.0.0": - "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" - "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "browserify-aes" "^1.0.4" - "browserify-des" "^1.0.0" - "evp_bytestokey" "^1.0.0" - -"browserify-des@^1.0.0": - "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" - "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "cipher-base" "^1.0.1" - "des.js" "^1.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1": - "integrity" "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=" - "resolved" "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "bn.js" "^4.1.0" - "randombytes" "^2.0.1" - -"browserify-sign@^4.0.0": - "integrity" "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==" - "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "bn.js" "^5.1.1" - "browserify-rsa" "^4.0.1" - "create-hash" "^1.2.0" - "create-hmac" "^1.1.7" - "elliptic" "^6.5.2" - "inherits" "^2.0.4" - "parse-asn1" "^5.1.5" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"browserify-zlib@^0.2.0": - "integrity" "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==" - "resolved" "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" - "version" "0.2.0" - dependencies: - "pako" "~1.0.5" - -"browserslist@^4.0.0", "browserslist@^4.11.1", "browserslist@^4.6.4", "browserslist@^4.8.5", "browserslist@^4.9.1": - "integrity" "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz" - "version" "4.11.1" - dependencies: - "caniuse-lite" "^1.0.30001038" - "electron-to-chromium" "^1.3.390" - "node-releases" "^1.1.53" - "pkg-up" "^2.0.0" - -"buffer-alloc-unsafe@^1.1.0": - "integrity" "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - "resolved" "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" - "version" "1.1.0" - -"buffer-alloc@^1.2.0": - "integrity" "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==" - "resolved" "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "buffer-alloc-unsafe" "^1.1.0" - "buffer-fill" "^1.0.0" - -"buffer-crc32@~0.2.3": - "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - "version" "0.2.13" - -"buffer-equal@0.0.1": - "integrity" "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" - "resolved" "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz" - "version" "0.0.1" - -"buffer-fill@^1.0.0": - "integrity" "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - "resolved" "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" - "version" "1.0.0" - -"buffer-from@^1.0.0": - "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - "version" "1.1.1" - -"buffer-xor@^1.0.3": - "integrity" "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - "version" "1.0.3" - -"buffer@^4.3.0": - "integrity" "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" - "version" "4.9.2" - dependencies: - "base64-js" "^1.0.2" - "ieee754" "^1.1.4" - "isarray" "^1.0.0" - -"buffer@^5.1.0", "buffer@^5.2.0", "buffer@^5.2.1": - "integrity" "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz" - "version" "5.6.0" - dependencies: - "base64-js" "^1.0.2" - "ieee754" "^1.1.4" - -"builtin-status-codes@^3.0.0": - "integrity" "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - "resolved" "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" - "version" "3.0.0" - -"bytes@3.1.0": - "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" - "version" "3.1.0" - -"cacache@^12.0.2": - "integrity" "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==" - "resolved" "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz" - "version" "12.0.4" - dependencies: - "bluebird" "^3.5.5" - "chownr" "^1.1.1" - "figgy-pudding" "^3.5.1" - "glob" "^7.1.4" - "graceful-fs" "^4.1.15" - "infer-owner" "^1.0.3" - "lru-cache" "^5.1.1" - "mississippi" "^3.0.0" - "mkdirp" "^0.5.1" - "move-concurrently" "^1.0.1" - "promise-inflight" "^1.0.1" - "rimraf" "^2.6.3" - "ssri" "^6.0.1" - "unique-filename" "^1.1.1" - "y18n" "^4.0.0" - -"cache-base@^1.0.1": - "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" - "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "collection-visit" "^1.0.0" - "component-emitter" "^1.2.1" - "get-value" "^2.0.6" - "has-value" "^1.0.0" - "isobject" "^3.0.1" - "set-value" "^2.0.0" - "to-object-path" "^0.3.0" - "union-value" "^1.0.0" - "unset-value" "^1.0.0" - -"cacheable-request@^2.1.1": - "integrity" "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=" - "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" - "version" "2.1.4" - dependencies: - "clone-response" "1.0.2" - "get-stream" "3.0.0" - "http-cache-semantics" "3.8.1" - "keyv" "3.0.0" - "lowercase-keys" "1.0.0" - "normalize-url" "2.0.1" - "responselike" "1.0.2" - -"calipers-gif@^2.0.0": - "integrity" "sha1-te7+wwZKd8bc29W9xRc1oBuv3Dc=" - "resolved" "https://registry.npmjs.org/calipers-gif/-/calipers-gif-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "bluebird" "3.x.x" - -"calipers-jpeg@^2.0.0": - "integrity" "sha1-BtVqU/YnF92AnLlWz2RCPOaTRls=" - "resolved" "https://registry.npmjs.org/calipers-jpeg/-/calipers-jpeg-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "bluebird" "3.x.x" - -"calipers-png@^2.0.0": - "integrity" "sha1-HQ0g5cGuX3m3TVKGoul/Wbtwtlg=" - "resolved" "https://registry.npmjs.org/calipers-png/-/calipers-png-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "bluebird" "3.x.x" - -"calipers-svg@^2.0.0": - "integrity" "sha512-3PROqHARmj8wWudUC7DzXm1+mSocqgY7jNuehFNHgrUVrKf8o7MqDjS92vJz5LvZsAofJsoAFMajkqwbxBROSQ==" - "resolved" "https://registry.npmjs.org/calipers-svg/-/calipers-svg-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "bluebird" "3.x.x" - -"calipers-webp@^2.0.0": - "integrity" "sha1-4Sbs4vhM1xd5YSv6KyZTzZXOp3o=" - "resolved" "https://registry.npmjs.org/calipers-webp/-/calipers-webp-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "bluebird" "3.x.x" - -"calipers@^2.0.0", "calipers@2.x.x": - "integrity" "sha512-AP4Ui2Z8fZf69d8Dx4cfJgPjQHY3m+QXGFCaAGu8pfNQjyajkosS+Kkf1n6pQDMZcelN5h3MdcjweUqxcsS4pg==" - "resolved" "https://registry.npmjs.org/calipers/-/calipers-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "bluebird" "3.x.x" - -"caller-callsite@^2.0.0": - "integrity" "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=" - "resolved" "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "callsites" "^2.0.0" - -"caller-path@^2.0.0": - "integrity" "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=" - "resolved" "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "caller-callsite" "^2.0.0" - -"callsites@^2.0.0": - "integrity" "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz" - "version" "2.0.0" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"camel-case@3.0.x": - "integrity" "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=" - "resolved" "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "no-case" "^2.2.0" - "upper-case" "^1.1.1" - -"camelcase-keys@^2.0.0": - "integrity" "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=" - "resolved" "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "camelcase" "^2.0.0" - "map-obj" "^1.0.0" - -"camelcase@^2.0.0": - "integrity" "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" - "version" "2.1.1" - -"camelcase@^5.0.0": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - -"caniuse-api@^3.0.0": - "integrity" "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==" - "resolved" "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "browserslist" "^4.0.0" - "caniuse-lite" "^1.0.0" - "lodash.memoize" "^4.1.2" - "lodash.uniq" "^4.5.0" - -"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30000981", "caniuse-lite@^1.0.30001038", "caniuse-lite@^1.0.30001039": - "integrity" "sha512-fqDtRCApddNrQuBxBS7kEiSGdBsgO4wiVw4G/IClfqzfhW45MbTumfN4cuUJGTM0YGFNn97DCXPJ683PS6zwvA==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001041.tgz" - "version" "1.0.30001041" - -"caw@^2.0.0", "caw@^2.0.1": - "integrity" "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==" - "resolved" "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "get-proxy" "^2.0.0" - "isurl" "^1.0.0-alpha5" - "tunnel-agent" "^0.6.0" - "url-to-options" "^1.0.1" - -"chalk@^1.0.0": - "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "ansi-styles" "^2.2.1" - "escape-string-regexp" "^1.0.2" - "has-ansi" "^2.0.0" - "strip-ansi" "^3.0.0" - "supports-color" "^2.0.0" - -"chalk@^1.1.3": - "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "ansi-styles" "^2.2.1" - "escape-string-regexp" "^1.0.2" - "has-ansi" "^2.0.0" - "strip-ansi" "^3.0.0" - "supports-color" "^2.0.0" - -"chalk@^2.0.0", "chalk@^2.4.1", "chalk@^2.4.2", "chalk@2.4.2": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^3.0.0": - "integrity" "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chalk@^4.0.0": - "integrity" "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chardet@^0.7.0": - "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - "version" "0.7.0" - -"check-types@^8.0.3": - "integrity" "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==" - "resolved" "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz" - "version" "8.0.3" - -"chokidar@^3.4.0": - "integrity" "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz" - "version" "3.4.1" - dependencies: - "anymatch" "~3.1.1" - "braces" "~3.0.2" - "glob-parent" "~5.1.0" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.4.0" + color-convert "^2.0.1" + +any-base@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz" + integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arch@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz" + integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== + +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" + integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= + dependencies: + file-type "^4.2.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assets@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/assets/-/assets-3.0.1.tgz" + integrity sha512-fTyLNf/9V24y5zO83f4DAEuvaKj7MWBixbnqdZneAhsv1r21yQ/6ogZfvXHmphJAHsz4DhuOwHeJKVbGqqvk0Q== + dependencies: + async "^2.5.0" + bluebird "^3.4.6" + calipers "^2.0.0" + calipers-gif "^2.0.0" + calipers-jpeg "^2.0.0" + calipers-png "^2.0.0" + calipers-svg "^2.0.0" + calipers-webp "^2.0.0" + glob "^7.0.6" + lodash "^4.15.0" + mime "^2.4.0" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz" + integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.5.0: + version "2.6.3" + resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +async@~0.2.10: + version "0.2.10" + resolved "https://registry.npmjs.org/async/-/async-0.2.10.tgz" + integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.4.3, autoprefixer@^9.4.7, autoprefixer@^9.6.1: + version "9.7.6" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.6.tgz" + integrity sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ== + dependencies: + browserslist "^4.11.1" + caniuse-lite "^1.0.30001039" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.27" + postcss-value-parser "^4.0.3" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0, babel-core@^6.26.3: + version "6.26.3" + resolved "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^8.0.4: + version "8.1.0" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-closure-elimination@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/babel-plugin-closure-elimination/-/babel-plugin-closure-elimination-1.3.0.tgz" + integrity sha512-ClKuSxKLLNhe69bvTMuONDI0dQDW49lXB2qtQyyKCzvwegRGel/q4/e+1EoDNDN97Hf1QkxGMbzpAGPmU4Tfjw== + +babel-plugin-console-source@^2.0.2: + version "2.0.4" + resolved "https://registry.npmjs.org/babel-plugin-console-source/-/babel-plugin-console-source-2.0.4.tgz" + integrity sha512-OGhrdhuMjiEW0Ma0P9e2B4dFddCpJ/xN/RRaM/4wwDLl+6ZKf+Xd77FtVjpNeDzNRNk8wjRdStA4hpZizXzl1g== + +babel-plugin-danger-remove-unused-import@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/babel-plugin-danger-remove-unused-import/-/babel-plugin-danger-remove-unused-import-1.1.2.tgz" + integrity sha512-3bNmVAaakP3b1aROj7O3bOWj2kBa85sZR5naZ3Rn8L9buiZaAyZLgjfrPDL3zhX4wySOA5jrTm/wSmJPsMm3cg== + +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-runtime@^7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz" + integrity sha512-jlzZ8RACjt0QGxq+wqsw5bCQE9RcUyWpw987mDY3GYxTpOQT2xoyNoG++oVCHzr/nACLBIprfVBNvv/If1ZYcg== + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +before-after-hook@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + +bfj@^6.1.1: + version "6.1.2" + resolved "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== + dependencies: + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +bin-build@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz" + integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA== + dependencies: + decompress "^4.0.0" + download "^6.2.2" + execa "^0.7.0" + p-map-series "^1.0.0" + tempfile "^2.0.0" + +bin-check@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz" + integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA== + dependencies: + execa "^0.7.0" + executable "^4.1.0" + +bin-version-check@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz" + integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ== + dependencies: + bin-version "^3.0.0" + semver "^5.6.0" + semver-truncate "^1.1.2" + +bin-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz" + integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ== + dependencies: + execa "^1.0.0" + find-versions "^3.0.0" + +bin-wrapper@^4.0.0, bin-wrapper@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz" + integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q== + dependencies: + bin-check "^4.1.0" + bin-version-check "^4.0.0" + download "^7.1.0" + import-lazy "^3.1.0" + os-filter-obj "^2.0.0" + pify "^4.0.1" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bluebird@3.x.x, bluebird@^3.4.6, bluebird@^3.5.0, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bmp-js@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz" + integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.6.4, browserslist@^4.8.5, browserslist@^4.9.1: + version "4.11.1" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz" + integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g== + dependencies: + caniuse-lite "^1.0.30001038" + electron-to-chromium "^1.3.390" + node-releases "^1.1.53" + pkg-up "^2.0.0" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz" + integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.1.0, buffer@^5.2.0, buffer@^5.2.1: + version "5.6.0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + +calipers-gif@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/calipers-gif/-/calipers-gif-2.0.0.tgz" + integrity sha1-te7+wwZKd8bc29W9xRc1oBuv3Dc= + dependencies: + bluebird "3.x.x" + +calipers-jpeg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/calipers-jpeg/-/calipers-jpeg-2.0.0.tgz" + integrity sha1-BtVqU/YnF92AnLlWz2RCPOaTRls= + dependencies: + bluebird "3.x.x" + +calipers-png@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/calipers-png/-/calipers-png-2.0.0.tgz" + integrity sha1-HQ0g5cGuX3m3TVKGoul/Wbtwtlg= + dependencies: + bluebird "3.x.x" + +calipers-svg@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/calipers-svg/-/calipers-svg-2.0.1.tgz" + integrity sha512-3PROqHARmj8wWudUC7DzXm1+mSocqgY7jNuehFNHgrUVrKf8o7MqDjS92vJz5LvZsAofJsoAFMajkqwbxBROSQ== + dependencies: + bluebird "3.x.x" + +calipers-webp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/calipers-webp/-/calipers-webp-2.0.0.tgz" + integrity sha1-4Sbs4vhM1xd5YSv6KyZTzZXOp3o= + dependencies: + bluebird "3.x.x" + +calipers@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/calipers/-/calipers-2.0.1.tgz" + integrity sha512-AP4Ui2Z8fZf69d8Dx4cfJgPjQHY3m+QXGFCaAGu8pfNQjyajkosS+Kkf1n6pQDMZcelN5h3MdcjweUqxcsS4pg== + dependencies: + bluebird "3.x.x" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001038, caniuse-lite@^1.0.30001039: + version "1.0.30001041" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001041.tgz" + integrity sha512-fqDtRCApddNrQuBxBS7kEiSGdBsgO4wiVw4G/IClfqzfhW45MbTumfN4cuUJGTM0YGFNn97DCXPJ683PS6zwvA== + +caw@^2.0.0, caw@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" optionalDependencies: - "fsevents" "~2.1.2" + fsevents "^1.2.7" -"chownr@^1.1.1": - "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - "version" "1.1.4" - -"chrome-trace-event@^1.0.2": - "integrity" "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==" - "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz" - "version" "1.0.2" +chokidar@^3.4.0: + version "3.4.1" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== dependencies: - "tslib" "^1.9.0" + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" -"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": - "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" - "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - "version" "1.0.4" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" + tslib "^1.9.0" -"circular-dependency-plugin@^5.0.2": - "integrity" "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==" - "resolved" "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz" - "version" "5.2.0" - -"circular-json@^0.5.9": - "integrity" "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==" - "resolved" "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz" - "version" "0.5.9" - -"class-utils@^0.3.5": - "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" - "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - "version" "0.3.6" +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: - "arr-union" "^3.1.0" - "define-property" "^0.2.5" - "isobject" "^3.0.0" - "static-extend" "^0.1.1" + inherits "^2.0.1" + safe-buffer "^5.0.1" -"clean-css@4.2.x": - "integrity" "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==" - "resolved" "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz" - "version" "4.2.3" +circular-dependency-plugin@^5.0.2: + version "5.2.0" + resolved "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz" + integrity sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw== + +circular-json@^0.5.9: + version "0.5.9" + resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz" + integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: - "source-map" "~0.6.0" + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" -"cli-cursor@^3.1.0": - "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - "version" "3.1.0" +clean-css@4.2.x: + version "4.2.3" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== dependencies: - "restore-cursor" "^3.1.0" + source-map "~0.6.0" -"cli-width@^2.0.0": - "integrity" "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz" - "version" "2.2.0" - -"clipboard-copy@^3.1.0": - "integrity" "sha512-Xsu1NddBXB89IUauda5BIq3Zq73UWkjkaQlPQbLNvNsd5WBMnTWPNKYR6HGaySOxGYZ+BKxP2E9X4ElnI3yiPA==" - "resolved" "https://registry.npmjs.org/clipboard-copy/-/clipboard-copy-3.1.0.tgz" - "version" "3.1.0" - -"cliui@^5.0.0": - "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" - "version" "5.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - "string-width" "^3.1.0" - "strip-ansi" "^5.2.0" - "wrap-ansi" "^5.1.0" + restore-cursor "^3.1.0" -"cliui@^6.0.0": - "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - "version" "6.0.0" +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +clipboard-copy@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/clipboard-copy/-/clipboard-copy-3.1.0.tgz" + integrity sha512-Xsu1NddBXB89IUauda5BIq3Zq73UWkjkaQlPQbLNvNsd5WBMnTWPNKYR6HGaySOxGYZ+BKxP2E9X4ElnI3yiPA== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^6.2.0" + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" -"clone-response@1.0.2": - "integrity" "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=" - "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - "version" "1.0.2" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: - "mimic-response" "^1.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" -"coa@^2.0.2": - "integrity" "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==" - "resolved" "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" - "version" "2.0.2" +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== dependencies: "@types/q" "^1.5.1" - "chalk" "^2.4.1" - "q" "^1.1.2" - -"collection-visit@^1.0.0": - "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" - "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "map-visit" "^1.0.0" - "object-visit" "^1.0.0" - -"color-convert@^1.9.0", "color-convert@^1.9.1": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@^1.0.0", "color-name@1.1.3": - "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-string@^1.5.2": - "integrity" "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==" - "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz" - "version" "1.5.3" - dependencies: - "color-name" "^1.0.0" - "simple-swizzle" "^0.2.2" - -"color@^3.0.0": - "integrity" "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==" - "resolved" "https://registry.npmjs.org/color/-/color-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "color-convert" "^1.9.1" - "color-string" "^1.5.2" - -"colorette@^1.2.1": - "integrity" "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz" - "version" "1.2.1" - -"colors@^1.3.3": - "integrity" "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - "resolved" "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" - "version" "1.4.0" - -"commander@^2.18.0": - "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - "version" "2.20.3" - -"commander@^2.20.0": - "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - "version" "2.20.3" - -"commander@~2.19.0": - "integrity" "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz" - "version" "2.19.0" - -"commander@~2.8.1": - "integrity" "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz" - "version" "2.8.1" - dependencies: - "graceful-readlink" ">= 1.0.0" - -"commander@2.17.x": - "integrity" "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz" - "version" "2.17.1" - -"commondir@^1.0.1": - "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - "version" "1.0.1" - -"component-emitter@^1.2.1": - "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - "version" "1.3.0" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"concat-stream@^1.5.0": - "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" - "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - "version" "1.6.2" - dependencies: - "buffer-from" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^2.2.2" - "typedarray" "^0.0.6" - -"config-chain@^1.1.11": - "integrity" "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==" - "resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz" - "version" "1.1.12" - dependencies: - "ini" "^1.3.4" - "proto-list" "~1.2.1" - -"console-browserify@^1.1.0": - "integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - "resolved" "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" - "version" "1.2.0" - -"console-stream@^0.1.1": - "integrity" "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=" - "resolved" "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz" - "version" "0.1.1" - -"constants-browserify@^1.0.0": - "integrity" "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - "resolved" "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" - "version" "1.0.0" - -"content-disposition@^0.5.2", "content-disposition@0.5.3": - "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==" - "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" - "version" "0.5.3" - dependencies: - "safe-buffer" "5.1.2" - -"content-type@~1.0.4": - "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - "version" "1.0.4" - -"convert-source-map@^1.5.1", "convert-source-map@^1.7.0": - "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "safe-buffer" "~5.1.1" - -"cookie-signature@1.0.6": - "integrity" "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - "version" "1.0.6" - -"cookie@0.4.0": - "integrity" "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" - "version" "0.4.0" - -"copy-concurrently@^1.0.0": - "integrity" "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==" - "resolved" "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "aproba" "^1.1.1" - "fs-write-stream-atomic" "^1.0.8" - "iferr" "^0.1.5" - "mkdirp" "^0.5.1" - "rimraf" "^2.5.4" - "run-queue" "^1.0.0" - -"copy-descriptor@^0.1.0": - "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - "version" "0.1.1" - -"core-js-compat@^3.6.2": - "integrity" "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==" - "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz" - "version" "3.6.5" - dependencies: - "browserslist" "^4.8.5" - "semver" "7.0.0" - -"core-js@^2.4.0": - "integrity" "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" - "resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz" - "version" "2.6.11" - -"core-js@^2.5.0": - "integrity" "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" - "resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz" - "version" "2.6.11" - -"core-js@^2.5.7": - "integrity" "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" - "resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz" - "version" "2.6.11" - -"core-js@3": - "integrity" "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - "resolved" "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz" - "version" "3.6.5" - -"core-util-is@~1.0.0": - "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cosmiconfig@^5.0.0": - "integrity" "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==" - "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "import-fresh" "^2.0.0" - "is-directory" "^0.3.1" - "js-yaml" "^3.13.1" - "parse-json" "^4.0.0" - -"crc@^3.8.0": - "integrity" "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==" - "resolved" "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz" - "version" "3.8.0" - dependencies: - "buffer" "^5.1.0" - -"create-ecdh@^4.0.0": - "integrity" "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==" - "resolved" "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "bn.js" "^4.1.0" - "elliptic" "^6.0.0" - -"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0": - "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" - "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "cipher-base" "^1.0.1" - "inherits" "^2.0.1" - "md5.js" "^1.3.4" - "ripemd160" "^2.0.1" - "sha.js" "^2.4.0" - -"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7": - "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" - "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "cipher-base" "^1.0.3" - "create-hash" "^1.1.0" - "inherits" "^2.0.1" - "ripemd160" "^2.0.0" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"cross-spawn@^5.0.1": - "integrity" "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "lru-cache" "^4.0.1" - "shebang-command" "^1.2.0" - "which" "^1.2.9" - -"cross-spawn@^6.0.0": - "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - "version" "6.0.5" - dependencies: - "nice-try" "^1.0.4" - "path-key" "^2.0.1" - "semver" "^5.5.0" - "shebang-command" "^1.2.0" - "which" "^1.2.9" - -"cross-spawn@^7.0.2": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"cross-spawn@6.0.5": - "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - "version" "6.0.5" - dependencies: - "nice-try" "^1.0.4" - "path-key" "^2.0.1" - "semver" "^5.5.0" - "shebang-command" "^1.2.0" - "which" "^1.2.9" - -"crypto-browserify@^3.11.0": - "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" - "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - "version" "3.12.0" - dependencies: - "browserify-cipher" "^1.0.0" - "browserify-sign" "^4.0.0" - "create-ecdh" "^4.0.0" - "create-hash" "^1.1.0" - "create-hmac" "^1.1.0" - "diffie-hellman" "^5.0.0" - "inherits" "^2.0.1" - "pbkdf2" "^3.0.3" - "public-encrypt" "^4.0.0" - "randombytes" "^2.0.0" - "randomfill" "^1.0.3" - -"css-blank-pseudo@^0.1.4": - "integrity" "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==" - "resolved" "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz" - "version" "0.1.4" - dependencies: - "postcss" "^7.0.5" - -"css-color-names@^0.0.4", "css-color-names@0.0.4": - "integrity" "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - "resolved" "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" - "version" "0.0.4" - -"css-declaration-sorter@^4.0.1": - "integrity" "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==" - "resolved" "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "postcss" "^7.0.1" - "timsort" "^0.3.0" - -"css-has-pseudo@^0.10.0": - "integrity" "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==" - "resolved" "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz" - "version" "0.10.0" - dependencies: - "postcss" "^7.0.6" - "postcss-selector-parser" "^5.0.0-rc.4" - -"css-loader@^0.9.1": - "integrity" "sha1-LhqgDOfjDvLGp6SzAKCAp8l54Nw=" - "resolved" "https://registry.npmjs.org/css-loader/-/css-loader-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "csso" "1.3.x" - "loader-utils" "~0.2.2" - "source-map" "~0.1.38" - -"css-mqpacker@^7.0.0": - "integrity" "sha512-temVrWS+sB4uocE2quhW8ru/KguDmGhCU7zN213KxtDvWOH3WS/ZUStfpF4fdCT7W8fPpFrQdWRFqtFtPPfBLA==" - "resolved" "https://registry.npmjs.org/css-mqpacker/-/css-mqpacker-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "minimist" "^1.2.0" - "postcss" "^7.0.0" - -"css-prefers-color-scheme@^3.1.1": - "integrity" "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==" - "resolved" "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "postcss" "^7.0.5" - -"css-select-base-adapter@^0.1.1": - "integrity" "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - "resolved" "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" - "version" "0.1.1" - -"css-select@^2.0.0": - "integrity" "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==" - "resolved" "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "boolbase" "^1.0.0" - "css-what" "^3.2.1" - "domutils" "^1.7.0" - "nth-check" "^1.0.2" - -"css-tree@1.0.0-alpha.37": - "integrity" "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==" - "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" - "version" "1.0.0-alpha.37" - dependencies: - "mdn-data" "2.0.4" - "source-map" "^0.6.1" - -"css-tree@1.0.0-alpha.39": - "integrity" "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==" - "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz" - "version" "1.0.0-alpha.39" - dependencies: - "mdn-data" "2.0.6" - "source-map" "^0.6.1" - -"css-what@^3.2.1": - "integrity" "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==" - "resolved" "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz" - "version" "3.2.1" - -"cssdb@^4.4.0": - "integrity" "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - "resolved" "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz" - "version" "4.4.0" - -"cssesc@^2.0.0": - "integrity" "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz" - "version" "2.0.0" - -"cssesc@^3.0.0": - "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - "version" "3.0.0" - -"cssnano-preset-advanced@^4.0.7": - "integrity" "sha512-j1O5/DQnaAqEyFFQfC+Z/vRlLXL3LxJHN+lvsfYqr7KgPH74t69+Rsy2yXkovWNaJjZYBpdz2Fj8ab2nH7pZXw==" - "resolved" "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-4.0.7.tgz" - "version" "4.0.7" - dependencies: - "autoprefixer" "^9.4.7" - "cssnano-preset-default" "^4.0.7" - "postcss-discard-unused" "^4.0.1" - "postcss-merge-idents" "^4.0.1" - "postcss-reduce-idents" "^4.0.2" - "postcss-zindex" "^4.0.1" - -"cssnano-preset-default@^4.0.7": - "integrity" "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==" - "resolved" "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz" - "version" "4.0.7" - dependencies: - "css-declaration-sorter" "^4.0.1" - "cssnano-util-raw-cache" "^4.0.1" - "postcss" "^7.0.0" - "postcss-calc" "^7.0.1" - "postcss-colormin" "^4.0.3" - "postcss-convert-values" "^4.0.1" - "postcss-discard-comments" "^4.0.2" - "postcss-discard-duplicates" "^4.0.2" - "postcss-discard-empty" "^4.0.1" - "postcss-discard-overridden" "^4.0.1" - "postcss-merge-longhand" "^4.0.11" - "postcss-merge-rules" "^4.0.3" - "postcss-minify-font-values" "^4.0.2" - "postcss-minify-gradients" "^4.0.2" - "postcss-minify-params" "^4.0.2" - "postcss-minify-selectors" "^4.0.2" - "postcss-normalize-charset" "^4.0.1" - "postcss-normalize-display-values" "^4.0.2" - "postcss-normalize-positions" "^4.0.2" - "postcss-normalize-repeat-style" "^4.0.2" - "postcss-normalize-string" "^4.0.2" - "postcss-normalize-timing-functions" "^4.0.2" - "postcss-normalize-unicode" "^4.0.1" - "postcss-normalize-url" "^4.0.1" - "postcss-normalize-whitespace" "^4.0.2" - "postcss-ordered-values" "^4.1.2" - "postcss-reduce-initial" "^4.0.3" - "postcss-reduce-transforms" "^4.0.2" - "postcss-svgo" "^4.0.2" - "postcss-unique-selectors" "^4.0.1" - -"cssnano-util-get-arguments@^4.0.0": - "integrity" "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" - "resolved" "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz" - "version" "4.0.0" - -"cssnano-util-get-match@^4.0.0": - "integrity" "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" - "resolved" "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz" - "version" "4.0.0" - -"cssnano-util-raw-cache@^4.0.1": - "integrity" "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==" - "resolved" "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "postcss" "^7.0.0" - -"cssnano-util-same-parent@^4.0.0": - "integrity" "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" - "resolved" "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz" - "version" "4.0.1" - -"cssnano@^4.1.10": - "integrity" "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==" - "resolved" "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz" - "version" "4.1.10" - dependencies: - "cosmiconfig" "^5.0.0" - "cssnano-preset-default" "^4.0.7" - "is-resolvable" "^1.0.0" - "postcss" "^7.0.0" - -"csso@^4.0.2": - "integrity" "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==" - "resolved" "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "css-tree" "1.0.0-alpha.39" - -"csso@1.3.x": - "integrity" "sha1-/GKGlKLTiTiqrEmWdTIY/TEc254=" - "resolved" "https://registry.npmjs.org/csso/-/csso-1.3.12.tgz" - "version" "1.3.12" - -"currently-unhandled@^0.4.1": - "integrity" "sha1-mI3zP+qxke95mmE2nddsF635V+o=" - "resolved" "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "array-find-index" "^1.0.1" - -"cyclist@^1.0.1": - "integrity" "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" - "resolved" "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz" - "version" "1.0.1" - -"debounce-promise@^3.1.2": - "integrity" "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==" - "resolved" "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz" - "version" "3.1.2" - -"debug@^2.2.0": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.3.3": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.6.8": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.6.9": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1": - "integrity" "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "ms" "^2.1.1" - -"debug@2.6.9": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"decamelize@^1.1.2", "decamelize@^1.2.0": - "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - -"decode-uri-component@^0.2.0": - "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - "version" "0.2.0" - -"decompress-response@^3.2.0", "decompress-response@^3.3.0": - "integrity" "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "mimic-response" "^1.0.0" - -"decompress-tar@^4.0.0", "decompress-tar@^4.1.0", "decompress-tar@^4.1.1": - "integrity" "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==" - "resolved" "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "file-type" "^5.2.0" - "is-stream" "^1.1.0" - "tar-stream" "^1.5.2" - -"decompress-tarbz2@^4.0.0": - "integrity" "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==" - "resolved" "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "decompress-tar" "^4.1.0" - "file-type" "^6.1.0" - "is-stream" "^1.1.0" - "seek-bzip" "^1.0.5" - "unbzip2-stream" "^1.0.9" - -"decompress-targz@^4.0.0": - "integrity" "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==" - "resolved" "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "decompress-tar" "^4.1.1" - "file-type" "^5.2.0" - "is-stream" "^1.1.0" - -"decompress-unzip@^4.0.1": - "integrity" "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=" - "resolved" "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "file-type" "^3.8.0" - "get-stream" "^2.2.0" - "pify" "^2.3.0" - "yauzl" "^2.4.2" - -"decompress@^4.0.0", "decompress@^4.2.0": - "integrity" "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==" - "resolved" "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "decompress-tar" "^4.0.0" - "decompress-tarbz2" "^4.0.0" - "decompress-targz" "^4.0.0" - "decompress-unzip" "^4.0.1" - "graceful-fs" "^4.1.10" - "make-dir" "^1.0.0" - "pify" "^2.3.0" - "strip-dirs" "^2.0.0" - -"deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" - -"deep-scope-analyser@^1.7.0": - "integrity" "sha512-rl5Dmt2IZkFpZo6XbEY1zG8st2Wpq8Pi/dV2gz8ZF6BDYt3fnor2JNxHwdO1WLo0k6JbmYp0x8MNy8kE4l1NtA==" - "resolved" "https://registry.npmjs.org/deep-scope-analyser/-/deep-scope-analyser-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "esrecurse" "^4.2.1" - "estraverse" "^4.2.0" - -"define-properties@^1.1.2", "define-properties@^1.1.3": - "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "object-keys" "^1.0.12" - -"define-property@^0.2.5": - "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - "version" "0.2.5" - dependencies: - "is-descriptor" "^0.1.0" - -"define-property@^1.0.0": - "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-descriptor" "^1.0.0" - -"define-property@^2.0.2": - "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "is-descriptor" "^1.0.2" - "isobject" "^3.0.1" - -"depd@~1.1.2": - "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"deprecation@^2.0.0", "deprecation@^2.3.1": - "integrity" "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - "resolved" "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" - "version" "2.3.1" - -"des.js@^1.0.0": - "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" - "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - -"destroy@~1.0.4": - "integrity" "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" - "version" "1.0.4" - -"detect-file@^1.0.0": - "integrity" "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" - "resolved" "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" - "version" "1.0.0" - -"detect-indent@^4.0.0": - "integrity" "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=" - "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "repeating" "^2.0.0" - -"diffie-hellman@^5.0.0": - "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" - "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - "version" "5.0.3" - dependencies: - "bn.js" "^4.1.0" - "miller-rabin" "^4.0.0" - "randombytes" "^2.0.0" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"dom-serializer@0": - "integrity" "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==" - "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" - "version" "0.2.2" - dependencies: - "domelementtype" "^2.0.1" - "entities" "^2.0.0" - -"dom-walk@^0.1.0": - "integrity" "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - "resolved" "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" - "version" "0.1.2" - -"domain-browser@^1.1.1": - "integrity" "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - "resolved" "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" - "version" "1.2.0" - -"domelementtype@^2.0.1": - "integrity" "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" - "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz" - "version" "2.0.1" - -"domelementtype@1": - "integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - "version" "1.3.1" - -"domutils@^1.7.0": - "integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==" - "resolved" "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "dom-serializer" "0" - "domelementtype" "1" - -"dot-prop@^5.2.0": - "integrity" "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==" - "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "is-obj" "^2.0.0" - -"download@^6.2.2": - "integrity" "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==" - "resolved" "https://registry.npmjs.org/download/-/download-6.2.5.tgz" - "version" "6.2.5" - dependencies: - "caw" "^2.0.0" - "content-disposition" "^0.5.2" - "decompress" "^4.0.0" - "ext-name" "^5.0.0" - "file-type" "5.2.0" - "filenamify" "^2.0.0" - "get-stream" "^3.0.0" - "got" "^7.0.0" - "make-dir" "^1.0.0" - "p-event" "^1.0.0" - "pify" "^3.0.0" - -"download@^7.1.0": - "integrity" "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==" - "resolved" "https://registry.npmjs.org/download/-/download-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "archive-type" "^4.0.0" - "caw" "^2.0.1" - "content-disposition" "^0.5.2" - "decompress" "^4.2.0" - "ext-name" "^5.0.0" - "file-type" "^8.1.0" - "filenamify" "^2.0.0" - "get-stream" "^3.0.0" - "got" "^8.3.1" - "make-dir" "^1.2.0" - "p-event" "^2.1.0" - "pify" "^3.0.0" - -"duplexer@^0.1.1": - "integrity" "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz" - "version" "0.1.1" - -"duplexer3@^0.1.4": - "integrity" "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" - "version" "0.1.4" - -"duplexify@^3.4.2", "duplexify@^3.6.0": - "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==" - "resolved" "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" - "version" "3.7.1" - dependencies: - "end-of-stream" "^1.0.0" - "inherits" "^2.0.1" - "readable-stream" "^2.0.0" - "stream-shift" "^1.0.0" - -"ee-first@1.1.1": - "integrity" "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - "version" "1.1.1" - -"ejs@^2.6.1": - "integrity" "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" - "resolved" "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz" - "version" "2.7.4" - -"electron-to-chromium@^1.3.390": - "integrity" "sha512-JaoxV4RzdBAZOnsF4dAlZ2ijJW72MbqO5lNfOBHUWiBQl3Rwe+mk2RCUMrRI3rSClLJ8HSNQNqcry12H+0ZjFw==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.403.tgz" - "version" "1.3.403" - -"elliptic@^6.0.0", "elliptic@^6.5.2": - "integrity" "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==" - "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz" - "version" "6.5.3" - dependencies: - "bn.js" "^4.4.0" - "brorand" "^1.0.1" - "hash.js" "^1.0.0" - "hmac-drbg" "^1.0.0" - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - "minimalistic-crypto-utils" "^1.0.0" - -"email-validator@^2.0.4": - "integrity" "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==" - "resolved" "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz" - "version" "2.0.4" - -"emoji-regex@^7.0.1": - "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - "version" "7.0.3" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"emojis-list@^2.0.0": - "integrity" "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" - "version" "2.1.0" - -"emojis-list@^3.0.0": - "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" - "version" "3.0.0" - -"encodeurl@~1.0.2": - "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - "version" "1.0.2" - -"end-of-stream@^1.0.0", "end-of-stream@^1.1.0": - "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "once" "^1.4.0" - -"enhanced-resolve@^4.1.0": - "integrity" "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==" - "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "graceful-fs" "^4.1.2" - "memory-fs" "^0.5.0" - "tapable" "^1.0.0" - -"enhanced-resolve@4.1.0": - "integrity" "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==" - "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "memory-fs" "^0.4.0" - "tapable" "^1.0.0" - -"entities@^2.0.0": - "integrity" "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" - "resolved" "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz" - "version" "2.0.0" - -"errno@^0.1.3", "errno@~0.1.7": - "integrity" "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==" - "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz" - "version" "0.1.7" - dependencies: - "prr" "~1.0.1" - -"error-ex@^1.2.0", "error-ex@^1.3.1": - "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" - "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-arrayish" "^0.2.1" - -"es-abstract@^1.17.0-next.1", "es-abstract@^1.17.2", "es-abstract@^1.17.5": - "integrity" "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz" - "version" "1.17.5" - dependencies: - "es-to-primitive" "^1.2.1" - "function-bind" "^1.1.1" - "has" "^1.0.3" - "has-symbols" "^1.0.1" - "is-callable" "^1.1.5" - "is-regex" "^1.0.5" - "object-inspect" "^1.7.0" - "object-keys" "^1.1.1" - "object.assign" "^4.1.0" - "string.prototype.trimleft" "^2.1.1" - "string.prototype.trimright" "^2.1.1" - -"es-to-primitive@^1.2.1": - "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" - "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "is-callable" "^1.1.4" - "is-date-object" "^1.0.1" - "is-symbol" "^1.0.2" - -"es6-templates@^0.2.3": - "integrity" "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=" - "resolved" "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz" - "version" "0.2.3" - dependencies: - "recast" "~0.11.12" - "through" "~2.3.6" - -"escape-html@~1.0.3": - "integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - "version" "1.0.3" - -"escape-string-regexp@^1.0.2", "escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"eslint-config-prettier@6.11.0": - "integrity" "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==" - "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz" - "version" "6.11.0" - dependencies: - "get-stdin" "^6.0.0" - -"eslint-plugin-prettier@3.1.3": - "integrity" "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==" - "resolved" "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz" - "version" "3.1.3" - dependencies: - "prettier-linter-helpers" "^1.0.0" - -"eslint-scope@^4.0.3": - "integrity" "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "esrecurse" "^4.1.0" - "estraverse" "^4.1.1" - -"eslint-scope@^5.0.0": - "integrity" "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "esrecurse" "^4.1.0" - "estraverse" "^4.1.1" - -"eslint-utils@^2.0.0": - "integrity" "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "eslint-visitor-keys" "^1.1.0" - -"eslint-visitor-keys@^1.1.0": - "integrity" "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz" - "version" "1.1.0" - -"eslint@*", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@>= 5.0.0", "eslint@>=3.14.1", "eslint@7.1.0": - "integrity" "sha512-DfS3b8iHMK5z/YLSme8K5cge168I8j8o1uiVmFCgnnjxZQbCGyraF8bMl7Ju4yfBmCuxD7shOF7eqGkcuIHfsA==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.1.0.tgz" - "version" "7.1.0" + chalk "^2.4.1" + q "^1.1.2" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3, color-name@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/color/-/color-3.1.2.tgz" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colors@^1.3.3: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +commander@2.17.x: + version "2.17.1" + resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@^2.18.0, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commander@~2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz" + integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= + dependencies: + graceful-readlink ">= 1.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-stream@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz" + integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3, content-disposition@^0.5.2: + version "0.5.3" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js@3: + version "3.6.5" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: + version "2.6.11" + resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@6.0.5, cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-0.9.1.tgz" + integrity sha1-LhqgDOfjDvLGp6SzAKCAp8l54Nw= + dependencies: + csso "1.3.x" + loader-utils "~0.2.2" + source-map "~0.1.38" + +css-mqpacker@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/css-mqpacker/-/css-mqpacker-7.0.0.tgz" + integrity sha512-temVrWS+sB4uocE2quhW8ru/KguDmGhCU7zN213KxtDvWOH3WS/ZUStfpF4fdCT7W8fPpFrQdWRFqtFtPPfBLA== + dependencies: + minimist "^1.2.0" + postcss "^7.0.0" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz" + integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^4.0.7: + version "4.0.7" + resolved "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-4.0.7.tgz" + integrity sha512-j1O5/DQnaAqEyFFQfC+Z/vRlLXL3LxJHN+lvsfYqr7KgPH74t69+Rsy2yXkovWNaJjZYBpdz2Fj8ab2nH7pZXw== + dependencies: + autoprefixer "^9.4.7" + cssnano-preset-default "^4.0.7" + postcss-discard-unused "^4.0.1" + postcss-merge-idents "^4.0.1" + postcss-reduce-idents "^4.0.2" + postcss-zindex "^4.0.1" + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@1.3.x: + version "1.3.12" + resolved "https://registry.npmjs.org/csso/-/csso-1.3.12.tgz" + integrity sha1-/GKGlKLTiTiqrEmWdTIY/TEc254= + +csso@^4.0.2: + version "4.0.3" + resolved "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + dependencies: + css-tree "1.0.0-alpha.39" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +debounce-promise@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz" + integrity sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" + integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.0.0, decompress@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deep-scope-analyser@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/deep-scope-analyser/-/deep-scope-analyser-1.7.0.tgz" + integrity sha512-rl5Dmt2IZkFpZo6XbEY1zG8st2Wpq8Pi/dV2gz8ZF6BDYt3fnor2JNxHwdO1WLo0k6JbmYp0x8MNy8kE4l1NtA== + dependencies: + esrecurse "^4.2.1" + estraverse "^4.2.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + +download@^6.2.2: + version "6.2.5" + resolved "https://registry.npmjs.org/download/-/download-6.2.5.tgz" + integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA== + dependencies: + caw "^2.0.0" + content-disposition "^0.5.2" + decompress "^4.0.0" + ext-name "^5.0.0" + file-type "5.2.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^7.0.0" + make-dir "^1.0.0" + p-event "^1.0.0" + pify "^3.0.0" + +download@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/download/-/download-7.1.0.tgz" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.390: + version "1.3.403" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.403.tgz" + integrity sha512-JaoxV4RzdBAZOnsF4dAlZ2ijJW72MbqO5lNfOBHUWiBQl3Rwe+mk2RCUMrRI3rSClLJ8HSNQNqcry12H+0ZjFw== + +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.3" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +email-validator@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz" + integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +enhanced-resolve@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-templates@^0.2.3: + version "0.2.3" + resolved "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz" + integrity sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ= + dependencies: + recast "~0.11.12" + through "~2.3.6" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-prettier@6.11.0: + version "6.11.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz" + integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== + dependencies: + get-stdin "^6.0.0" + +eslint-plugin-prettier@3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz" + integrity sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.1.0.tgz" + integrity sha512-DfS3b8iHMK5z/YLSme8K5cge168I8j8o1uiVmFCgnnjxZQbCGyraF8bMl7Ju4yfBmCuxD7shOF7eqGkcuIHfsA== dependencies: "@babel/code-frame" "^7.0.0" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.0.1" - "doctrine" "^3.0.0" - "eslint-scope" "^5.0.0" - "eslint-utils" "^2.0.0" - "eslint-visitor-keys" "^1.1.0" - "espree" "^7.0.0" - "esquery" "^1.2.0" - "esutils" "^2.0.2" - "file-entry-cache" "^5.0.1" - "functional-red-black-tree" "^1.0.1" - "glob-parent" "^5.0.0" - "globals" "^12.1.0" - "ignore" "^4.0.6" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "inquirer" "^7.0.0" - "is-glob" "^4.0.0" - "js-yaml" "^3.13.1" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash" "^4.17.14" - "minimatch" "^3.0.4" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "progress" "^2.0.0" - "regexpp" "^3.1.0" - "semver" "^7.2.1" - "strip-ansi" "^6.0.0" - "strip-json-comments" "^3.1.0" - "table" "^5.2.3" - "text-table" "^0.2.0" - "v8-compile-cache" "^2.0.3" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + eslint-visitor-keys "^1.1.0" + espree "^7.0.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.14" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" -"espree@^7.0.0": - "integrity" "sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==" - "resolved" "https://registry.npmjs.org/espree/-/espree-7.0.0.tgz" - "version" "7.0.0" +espree@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/espree/-/espree-7.0.0.tgz" + integrity sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw== dependencies: - "acorn" "^7.1.1" - "acorn-jsx" "^5.2.0" - "eslint-visitor-keys" "^1.1.0" + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -"esprima@~3.1.0": - "integrity" "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz" - "version" "3.1.3" +esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -"esquery@^1.2.0": - "integrity" "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz" - "version" "1.3.1" +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - "estraverse" "^5.1.0" + estraverse "^5.1.0" -"esrecurse@^4.1.0", "esrecurse@^4.2.1": - "integrity" "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz" - "version" "4.2.1" +esrecurse@^4.1.0, esrecurse@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: - "estraverse" "^4.1.0" + estraverse "^4.1.0" -"estraverse@^4.1.0", "estraverse@^4.1.1", "estraverse@^4.2.0": - "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - "version" "4.3.0" +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -"estraverse@^5.1.0": - "integrity" "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz" - "version" "5.1.0" +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -"etag@~1.8.1": - "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - "version" "1.8.1" +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -"events@^3.0.0": - "integrity" "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==" - "resolved" "https://registry.npmjs.org/events/-/events-3.1.0.tgz" - "version" "3.1.0" +events@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/events/-/events-3.1.0.tgz" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== -"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": - "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" - "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - "version" "1.0.3" +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: - "md5.js" "^1.3.4" - "safe-buffer" "^5.1.1" + md5.js "^1.3.4" + safe-buffer "^5.1.1" -"execa@^0.10.0": - "integrity" "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==" - "resolved" "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz" - "version" "0.10.0" +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== dependencies: - "cross-spawn" "^6.0.0" - "get-stream" "^3.0.0" - "is-stream" "^1.1.0" - "npm-run-path" "^2.0.0" - "p-finally" "^1.0.0" - "signal-exit" "^3.0.0" - "strip-eof" "^1.0.0" + cross-spawn "^6.0.0" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" -"execa@^0.7.0": - "integrity" "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=" - "resolved" "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz" - "version" "0.7.0" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: - "cross-spawn" "^5.0.1" - "get-stream" "^3.0.0" - "is-stream" "^1.1.0" - "npm-run-path" "^2.0.0" - "p-finally" "^1.0.0" - "signal-exit" "^3.0.0" - "strip-eof" "^1.0.0" + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" -"execa@^1.0.0": - "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" - "version" "1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: - "cross-spawn" "^6.0.0" - "get-stream" "^4.0.0" - "is-stream" "^1.1.0" - "npm-run-path" "^2.0.0" - "p-finally" "^1.0.0" - "signal-exit" "^3.0.0" - "strip-eof" "^1.0.0" + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" -"executable@^4.1.0": - "integrity" "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==" - "resolved" "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" - "version" "4.1.1" +executable@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== dependencies: - "pify" "^2.2.0" + pify "^2.2.0" -"exif-parser@^0.1.12": - "integrity" "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" - "resolved" "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz" - "version" "0.1.12" +exif-parser@^0.1.12: + version "0.1.12" + resolved "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz" + integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= -"expand-brackets@^2.1.4": - "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" - "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - "version" "2.1.4" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: - "debug" "^2.3.3" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "posix-character-classes" "^0.1.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" -"expand-tilde@^2.0.0", "expand-tilde@^2.0.2": - "integrity" "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=" - "resolved" "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" - "version" "2.0.2" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: - "homedir-polyfill" "^1.0.1" + homedir-polyfill "^1.0.1" -"express@^4.16.3": - "integrity" "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==" - "resolved" "https://registry.npmjs.org/express/-/express-4.17.1.tgz" - "version" "4.17.1" +express@^4.16.3: + version "4.17.1" + resolved "https://registry.npmjs.org/express/-/express-4.17.1.tgz" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: - "accepts" "~1.3.7" - "array-flatten" "1.1.1" - "body-parser" "1.19.0" - "content-disposition" "0.5.3" - "content-type" "~1.0.4" - "cookie" "0.4.0" - "cookie-signature" "1.0.6" - "debug" "2.6.9" - "depd" "~1.1.2" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "etag" "~1.8.1" - "finalhandler" "~1.1.2" - "fresh" "0.5.2" - "merge-descriptors" "1.0.1" - "methods" "~1.1.2" - "on-finished" "~2.3.0" - "parseurl" "~1.3.3" - "path-to-regexp" "0.1.7" - "proxy-addr" "~2.0.5" - "qs" "6.7.0" - "range-parser" "~1.2.1" - "safe-buffer" "5.1.2" - "send" "0.17.1" - "serve-static" "1.14.1" - "setprototypeof" "1.1.1" - "statuses" "~1.5.0" - "type-is" "~1.6.18" - "utils-merge" "1.0.1" - "vary" "~1.1.2" + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" -"ext-list@^2.0.0": - "integrity" "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==" - "resolved" "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" - "version" "2.2.2" +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== dependencies: - "mime-db" "^1.28.0" + mime-db "^1.28.0" -"ext-name@^5.0.0": - "integrity" "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==" - "resolved" "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" - "version" "5.0.0" +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== dependencies: - "ext-list" "^2.0.0" - "sort-keys-length" "^1.0.0" + ext-list "^2.0.0" + sort-keys-length "^1.0.0" -"extend-shallow@^2.0.1": - "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - "version" "2.0.1" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: - "is-extendable" "^0.1.0" + is-extendable "^0.1.0" -"extend-shallow@^3.0.0", "extend-shallow@^3.0.2": - "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - "version" "3.0.2" +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: - "assign-symbols" "^1.0.0" - "is-extendable" "^1.0.1" + assign-symbols "^1.0.0" + is-extendable "^1.0.1" -"external-editor@^3.0.3": - "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" - "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - "version" "3.1.0" +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: - "chardet" "^0.7.0" - "iconv-lite" "^0.4.24" - "tmp" "^0.0.33" + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" -"extglob@^2.0.4": - "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" - "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - "version" "2.0.4" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: - "array-unique" "^0.3.2" - "define-property" "^1.0.0" - "expand-brackets" "^2.1.4" - "extend-shallow" "^2.0.1" - "fragment-cache" "^0.2.1" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" -"fast-deep-equal@^3.1.1": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -"fast-diff@^1.1.2": - "integrity" "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" - "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - "version" "1.2.0" +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -"fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -"fastdom@^1.0.8": - "integrity" "sha512-SSp4fbVzu8JkkG01NUX+0iOwe9M5PN3MGIQ84txLf4TkkJG4q30khkzumKgi4hUqO1+jX6wLHfnCPoZ6eSZ6Tg==" - "resolved" "https://registry.npmjs.org/fastdom/-/fastdom-1.0.9.tgz" - "version" "1.0.9" +fastdom@^1.0.8: + version "1.0.9" + resolved "https://registry.npmjs.org/fastdom/-/fastdom-1.0.9.tgz" + integrity sha512-SSp4fbVzu8JkkG01NUX+0iOwe9M5PN3MGIQ84txLf4TkkJG4q30khkzumKgi4hUqO1+jX6wLHfnCPoZ6eSZ6Tg== dependencies: - "strictdom" "^1.0.1" + strictdom "^1.0.1" -"faster.js@^1.1.0": - "integrity" "sha512-vPThNSLL/E1f7cLHd9yuayxZR82o/Iic4S5ZY45iY5AgBLNIlr3b3c+VpDjoYqjY9a9C/FQVUQy9oTILVP7X0g==" - "resolved" "https://registry.npmjs.org/faster.js/-/faster.js-1.1.1.tgz" - "version" "1.1.1" +faster.js@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/faster.js/-/faster.js-1.1.1.tgz" + integrity sha512-vPThNSLL/E1f7cLHd9yuayxZR82o/Iic4S5ZY45iY5AgBLNIlr3b3c+VpDjoYqjY9a9C/FQVUQy9oTILVP7X0g== -"fastparse@^1.1.1": - "integrity" "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - "resolved" "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz" - "version" "1.1.2" +fastparse@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== -"fd-slicer@~1.1.0": - "integrity" "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=" - "resolved" "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" - "version" "1.1.0" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= dependencies: - "pend" "~1.2.0" + pend "~1.2.0" -"figgy-pudding@^3.5.1": - "integrity" "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - "resolved" "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz" - "version" "3.5.2" +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -"figures@^1.3.5": - "integrity" "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=" - "resolved" "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" - "version" "1.7.0" +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= dependencies: - "escape-string-regexp" "^1.0.5" - "object-assign" "^4.1.0" + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" -"figures@^3.0.0": - "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - "version" "3.2.0" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: - "escape-string-regexp" "^1.0.5" + escape-string-regexp "^1.0.5" -"file-entry-cache@^5.0.1": - "integrity" "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz" - "version" "5.0.1" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: - "flat-cache" "^2.0.1" + flat-cache "^2.0.1" -"file-loader@^0.8.1": - "integrity" "sha1-knXQMf54DyfUf19K8CvUNxPMFRs=" - "resolved" "https://registry.npmjs.org/file-loader/-/file-loader-0.8.5.tgz" - "version" "0.8.5" +file-loader@^0.8.1: + version "0.8.5" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-0.8.5.tgz" + integrity sha1-knXQMf54DyfUf19K8CvUNxPMFRs= dependencies: - "loader-utils" "~0.2.5" + loader-utils "~0.2.5" -"file-type@^3.8.0": - "integrity" "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" - "version" "3.9.0" +file-type@5.2.0, file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" + integrity sha1-LdvqfHP/42No365J3DOMBYwritY= -"file-type@^4.2.0": - "integrity" "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" - "version" "4.4.0" +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" + integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= -"file-type@^5.2.0": - "integrity" "sha1-LdvqfHP/42No365J3DOMBYwritY=" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" - "version" "5.2.0" +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" + integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= -"file-type@^6.1.0": - "integrity" "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" - "version" "6.2.0" +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== -"file-type@^8.1.0": - "integrity" "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz" - "version" "8.1.0" +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== -"file-type@^9.0.0": - "integrity" "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz" - "version" "9.0.0" +file-type@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz" + integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== -"file-type@5.2.0": - "integrity" "sha1-LdvqfHP/42No365J3DOMBYwritY=" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" - "version" "5.2.0" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -"filename-reserved-regex@^2.0.0": - "integrity" "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" - "resolved" "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" - "version" "2.0.0" +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" + integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= -"filenamify@^2.0.0": - "integrity" "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==" - "resolved" "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz" - "version" "2.1.0" +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== dependencies: - "filename-reserved-regex" "^2.0.0" - "strip-outer" "^1.0.0" - "trim-repeated" "^1.0.0" + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" -"filesize@^3.6.1": - "integrity" "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" - "resolved" "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz" - "version" "3.6.1" +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== -"fill-range@^4.0.0": - "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - "version" "4.0.0" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: - "extend-shallow" "^2.0.1" - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" - "to-regex-range" "^2.1.0" + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: - "to-regex-range" "^5.0.1" + to-regex-range "^5.0.1" -"finalhandler@~1.1.2": - "integrity" "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==" - "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" - "version" "1.1.2" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: - "debug" "2.6.9" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "on-finished" "~2.3.0" - "parseurl" "~1.3.3" - "statuses" "~1.5.0" - "unpipe" "~1.0.0" + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" -"find-cache-dir@^2.1.0": - "integrity" "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==" - "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" - "version" "2.1.0" +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: - "commondir" "^1.0.1" - "make-dir" "^2.0.0" - "pkg-dir" "^3.0.0" + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" -"find-up@^1.0.0": - "integrity" "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" - "version" "1.1.2" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: - "path-exists" "^2.0.0" - "pinkie-promise" "^2.0.0" + path-exists "^2.0.0" + pinkie-promise "^2.0.0" -"find-up@^2.1.0": - "integrity" "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - "version" "2.1.0" +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: - "locate-path" "^2.0.0" + locate-path "^2.0.0" -"find-up@^3.0.0": - "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - "version" "3.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: - "locate-path" "^3.0.0" + locate-path "^3.0.0" -"find-up@^4.1.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" + locate-path "^5.0.0" + path-exists "^4.0.0" -"find-versions@^3.0.0": - "integrity" "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==" - "resolved" "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz" - "version" "3.2.0" +find-versions@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== dependencies: - "semver-regex" "^2.0.0" + semver-regex "^2.0.0" -"findup-sync@3.0.0": - "integrity" "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==" - "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" - "version" "3.0.0" +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== dependencies: - "detect-file" "^1.0.0" - "is-glob" "^4.0.0" - "micromatch" "^3.0.4" - "resolve-dir" "^1.0.1" + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" -"flat-cache@^2.0.1": - "integrity" "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz" - "version" "2.0.1" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== dependencies: - "flatted" "^2.0.0" - "rimraf" "2.6.3" - "write" "1.0.3" + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" -"flatted@^2.0.0", "flatted@^2.0.1": - "integrity" "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz" - "version" "2.0.2" +flatted@^2.0.0, flatted@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -"flatten@^1.0.2": - "integrity" "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - "resolved" "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz" - "version" "1.0.3" +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== -"flush-write-stream@^1.0.0": - "integrity" "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==" - "resolved" "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" - "version" "1.1.1" +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: - "inherits" "^2.0.3" - "readable-stream" "^2.3.6" + inherits "^2.0.3" + readable-stream "^2.3.6" -"for-in@^1.0.2": - "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - "version" "1.0.2" +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -"forwarded@~0.1.2": - "integrity" "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz" - "version" "0.1.2" +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= -"fragment-cache@^0.2.1": - "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" - "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - "version" "0.2.1" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: - "map-cache" "^0.2.2" + map-cache "^0.2.2" -"fresh@0.5.2": - "integrity" "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - "version" "0.5.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -"from2@^2.1.0", "from2@^2.1.1": - "integrity" "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=" - "resolved" "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" - "version" "2.3.0" +from2@^2.1.0, from2@^2.1.1: + version "2.3.0" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: - "inherits" "^2.0.1" - "readable-stream" "^2.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" -"fs-constants@^1.0.0": - "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - "version" "1.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -"fs-write-stream-atomic@^1.0.8": - "integrity" "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=" - "resolved" "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz" - "version" "1.0.10" +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: - "graceful-fs" "^4.1.2" - "iferr" "^0.1.5" - "imurmurhash" "^0.1.4" - "readable-stream" "1 || 2" + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" - -"functional-red-black-tree@^1.0.1": - "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - "version" "1.0.1" - -"gensync@^1.0.0-beta.1": - "integrity" "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" - "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz" - "version" "1.0.0-beta.1" - -"get-caller-file@^2.0.1": - "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - "version" "2.0.5" - -"get-proxy@^2.0.0": - "integrity" "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==" - "resolved" "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz" - "version" "2.1.0" +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: - "npm-conf" "^1.1.0" + bindings "^1.5.0" + nan "^2.12.1" -"get-stdin@^4.0.1": - "integrity" "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" - "version" "4.0.1" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -"get-stdin@^6.0.0": - "integrity" "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" - "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz" - "version" "6.0.0" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -"get-stream@^2.2.0": - "integrity" "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" - "version" "2.3.1" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== dependencies: - "object-assign" "^4.0.1" - "pinkie-promise" "^2.0.0" + npm-conf "^1.1.0" -"get-stream@^3.0.0": - "integrity" "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" - "version" "3.0.0" +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -"get-stream@^4.0.0": - "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - "version" "4.1.0" +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" + integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= dependencies: - "pump" "^3.0.0" + object-assign "^4.0.1" + pinkie-promise "^2.0.0" -"get-stream@3.0.0": - "integrity" "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" - "version" "3.0.0" - -"get-value@^2.0.3", "get-value@^2.0.6": - "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - "version" "2.0.6" - -"glob-all@^3.1.0": - "integrity" "sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==" - "resolved" "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz" - "version" "3.2.1" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: - "glob" "^7.1.2" - "yargs" "^15.3.1" + pump "^3.0.0" -"glob-parent@^5.0.0", "glob-parent@~5.1.0": - "integrity" "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz" - "version" "5.1.1" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-all@^3.1.0: + version "3.2.1" + resolved "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz" + integrity sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw== dependencies: - "is-glob" "^4.0.1" + glob "^7.1.2" + yargs "^15.3.1" -"glob@^7.0.5", "glob@^7.0.6", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": - "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - "version" "7.1.6" +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" + is-glob "^3.1.0" + path-dirname "^1.0.0" -"global-modules@^1.0.0": - "integrity" "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==" - "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" - "version" "1.0.0" +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: - "global-prefix" "^1.0.1" - "is-windows" "^1.0.1" - "resolve-dir" "^1.0.0" + is-glob "^4.0.1" -"global-modules@2.0.0": - "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" - "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" - "version" "2.0.0" +glob@^7.0.5, glob@^7.0.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: - "global-prefix" "^3.0.0" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" -"global-prefix@^1.0.1": - "integrity" "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=" - "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" - "version" "1.0.2" +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== dependencies: - "expand-tilde" "^2.0.2" - "homedir-polyfill" "^1.0.1" - "ini" "^1.3.4" - "is-windows" "^1.0.1" - "which" "^1.2.14" + global-prefix "^3.0.0" -"global-prefix@^3.0.0": - "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" - "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" - "version" "3.0.0" +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: - "ini" "^1.3.5" - "kind-of" "^6.0.2" - "which" "^1.3.1" + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" -"global@~4.3.0": - "integrity" "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=" - "resolved" "https://registry.npmjs.org/global/-/global-4.3.2.tgz" - "version" "4.3.2" +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= dependencies: - "min-document" "^2.19.0" - "process" "~0.5.1" + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" -"globals@^11.1.0": - "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - "version" "11.12.0" - -"globals@^12.1.0": - "integrity" "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==" - "resolved" "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" - "version" "12.4.0" +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== dependencies: - "type-fest" "^0.8.1" + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" -"globals@^9.18.0": - "integrity" "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - "resolved" "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz" - "version" "9.18.0" - -"gonzales-pe@^4.2.3": - "integrity" "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==" - "resolved" "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz" - "version" "4.3.0" +global@~4.3.0: + version "4.3.2" + resolved "https://registry.npmjs.org/global/-/global-4.3.2.tgz" + integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= dependencies: - "minimist" "^1.2.5" + min-document "^2.19.0" + process "~0.5.1" -"got@^7.0.0": - "integrity" "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==" - "resolved" "https://registry.npmjs.org/got/-/got-7.1.0.tgz" - "version" "7.1.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: - "decompress-response" "^3.2.0" - "duplexer3" "^0.1.4" - "get-stream" "^3.0.0" - "is-plain-obj" "^1.1.0" - "is-retry-allowed" "^1.0.0" - "is-stream" "^1.0.0" - "isurl" "^1.0.0-alpha5" - "lowercase-keys" "^1.0.0" - "p-cancelable" "^0.3.0" - "p-timeout" "^1.1.1" - "safe-buffer" "^5.0.1" - "timed-out" "^4.0.0" - "url-parse-lax" "^1.0.0" - "url-to-options" "^1.0.1" + type-fest "^0.8.1" -"got@^8.3.1": - "integrity" "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==" - "resolved" "https://registry.npmjs.org/got/-/got-8.3.2.tgz" - "version" "8.3.2" +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +gonzales-pe@^4.2.3: + version "4.3.0" + resolved "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + +got@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/got/-/got-7.1.0.tgz" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +got@^8.3.1: + version "8.3.2" + resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== dependencies: "@sindresorhus/is" "^0.7.0" - "cacheable-request" "^2.1.1" - "decompress-response" "^3.3.0" - "duplexer3" "^0.1.4" - "get-stream" "^3.0.0" - "into-stream" "^3.1.0" - "is-retry-allowed" "^1.1.0" - "isurl" "^1.0.0-alpha5" - "lowercase-keys" "^1.0.0" - "mimic-response" "^1.0.0" - "p-cancelable" "^0.4.0" - "p-timeout" "^2.0.1" - "pify" "^3.0.0" - "safe-buffer" "^5.1.1" - "timed-out" "^4.0.1" - "url-parse-lax" "^3.0.0" - "url-to-options" "^1.0.1" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" -"graceful-fs@^4.1.10", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2": - "integrity" "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz" - "version" "4.2.3" +graceful-fs@^4.1.10, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +graceful-fs@^4.1.11: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== "graceful-readlink@>= 1.0.0": - "integrity" "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - "resolved" "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - "version" "1.0.1" + version "1.0.1" + resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= -"gzip-size@^5.0.0": - "integrity" "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==" - "resolved" "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz" - "version" "5.1.1" +gzip-size@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== dependencies: - "duplexer" "^0.1.1" - "pify" "^4.0.1" + duplexer "^0.1.1" + pify "^4.0.1" -"has-ansi@^2.0.0": - "integrity" "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" - "resolved" "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - "version" "2.0.0" +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: - "ansi-regex" "^2.0.0" + ansi-regex "^2.0.0" -"has-flag@^1.0.0": - "integrity" "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" - "version" "1.0.0" +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= -"has-flag@^3.0.0": - "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -"has-symbol-support-x@^1.4.1": - "integrity" "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - "resolved" "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" - "version" "1.4.2" +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== -"has-symbols@^1.0.0", "has-symbols@^1.0.1": - "integrity" "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" - "version" "1.0.1" +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -"has-to-string-tag-x@^1.2.0": - "integrity" "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==" - "resolved" "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" - "version" "1.4.1" +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: - "has-symbol-support-x" "^1.4.1" + has-symbol-support-x "^1.4.1" -"has-value@^0.3.1": - "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - "version" "0.3.1" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: - "get-value" "^2.0.3" - "has-values" "^0.1.4" - "isobject" "^2.0.0" + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" -"has-value@^1.0.0": - "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" - "version" "1.0.0" +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: - "get-value" "^2.0.6" - "has-values" "^1.0.0" - "isobject" "^3.0.0" + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" -"has-values@^0.1.4": - "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - "version" "0.1.4" +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= -"has-values@^1.0.0": - "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" - "version" "1.0.0" +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: - "is-number" "^3.0.0" - "kind-of" "^4.0.0" + is-number "^3.0.0" + kind-of "^4.0.0" -"has@^1.0.0", "has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: - "function-bind" "^1.1.1" + function-bind "^1.1.1" -"hash-base@^3.0.0": - "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" - "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - "version" "3.1.0" +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - "inherits" "^2.0.4" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" -"hash.js@^1.0.0", "hash.js@^1.0.3": - "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" - "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - "version" "1.1.7" +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: - "inherits" "^2.0.3" - "minimalistic-assert" "^1.0.1" + inherits "^2.0.3" + minimalistic-assert "^1.0.1" -"he@1.2.x": - "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - "version" "1.2.0" +he@1.2.x: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -"hex-color-regex@^1.1.0": - "integrity" "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - "resolved" "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" - "version" "1.1.0" +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -"hmac-drbg@^1.0.0": - "integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=" - "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - "version" "1.0.1" +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: - "hash.js" "^1.0.3" - "minimalistic-assert" "^1.0.0" - "minimalistic-crypto-utils" "^1.0.1" + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" -"home-or-tmp@^2.0.0": - "integrity" "sha1-42w/LSyufXRqhX440Y1fMqeILbg=" - "resolved" "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz" - "version" "2.0.0" +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= dependencies: - "os-homedir" "^1.0.0" - "os-tmpdir" "^1.0.1" + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" -"homedir-polyfill@^1.0.1": - "integrity" "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==" - "resolved" "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" - "version" "1.0.3" +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: - "parse-passwd" "^1.0.0" + parse-passwd "^1.0.0" -"hoopy@^0.1.4": - "integrity" "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" - "resolved" "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz" - "version" "0.1.4" +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== -"hosted-git-info@^2.1.4": - "integrity" "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" - "version" "2.8.8" +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -"howler@^2.1.2": - "integrity" "sha512-PSGbOi1EYgw80C5UQbxtJM7TmzD+giJunIMBYyH3RVzHZx2fZLYBoes0SpVVHi/SFa1GoNtgXj/j6I7NOKYBxQ==" - "resolved" "https://registry.npmjs.org/howler/-/howler-2.1.3.tgz" - "version" "2.1.3" +howler@^2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/howler/-/howler-2.1.3.tgz" + integrity sha512-PSGbOi1EYgw80C5UQbxtJM7TmzD+giJunIMBYyH3RVzHZx2fZLYBoes0SpVVHi/SFa1GoNtgXj/j6I7NOKYBxQ== -"hsl-regex@^1.0.0": - "integrity" "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - "resolved" "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" - "version" "1.0.0" +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= -"hsla-regex@^1.0.0": - "integrity" "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - "resolved" "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" - "version" "1.0.0" +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= -"html-comment-regex@^1.1.0": - "integrity" "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" - "resolved" "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz" - "version" "1.1.2" +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== -"html-loader@^0.5.5": - "integrity" "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==" - "resolved" "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz" - "version" "0.5.5" +html-loader@^0.5.5: + version "0.5.5" + resolved "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz" + integrity sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog== dependencies: - "es6-templates" "^0.2.3" - "fastparse" "^1.1.1" - "html-minifier" "^3.5.8" - "loader-utils" "^1.1.0" - "object-assign" "^4.1.1" + es6-templates "^0.2.3" + fastparse "^1.1.1" + html-minifier "^3.5.8" + loader-utils "^1.1.0" + object-assign "^4.1.1" -"html-minifier@^3.5.8": - "integrity" "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==" - "resolved" "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz" - "version" "3.5.21" +html-minifier@^3.5.8: + version "3.5.21" + resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== dependencies: - "camel-case" "3.0.x" - "clean-css" "4.2.x" - "commander" "2.17.x" - "he" "1.2.x" - "param-case" "2.1.x" - "relateurl" "0.2.x" - "uglify-js" "3.4.x" + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" -"http-cache-semantics@3.8.1": - "integrity" "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" - "version" "3.8.1" +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== -"http-errors@~1.7.2", "http-errors@1.7.2": - "integrity" "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==" - "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" - "version" "1.7.2" +http-errors@1.7.2, http-errors@~1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== dependencies: - "depd" "~1.1.2" - "inherits" "2.0.3" - "setprototypeof" "1.1.1" - "statuses" ">= 1.5.0 < 2" - "toidentifier" "1.0.0" + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" -"https-browserify@^1.0.0": - "integrity" "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - "resolved" "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" - "version" "1.0.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -"iconv-lite@^0.4.24", "iconv-lite@0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: - "safer-buffer" ">= 2.1.2 < 3" + safer-buffer ">= 2.1.2 < 3" -"ieee754@^1.1.4": - "integrity" "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" - "version" "1.1.13" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -"iferr@^0.1.5": - "integrity" "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - "resolved" "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz" - "version" "0.1.5" +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -"ignore-loader@^0.1.2": - "integrity" "sha1-2B8kA3bQuk8Nd4lyw60lh0EXpGM=" - "resolved" "https://registry.npmjs.org/ignore-loader/-/ignore-loader-0.1.2.tgz" - "version" "0.1.2" +ignore-loader@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/ignore-loader/-/ignore-loader-0.1.2.tgz" + integrity sha1-2B8kA3bQuk8Nd4lyw60lh0EXpGM= -"ignore@^4.0.6": - "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - "version" "4.0.6" +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -"imagemin-mozjpeg@^8.0.0": - "integrity" "sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==" - "resolved" "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz" - "version" "8.0.0" +imagemin-mozjpeg@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz" + integrity sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA== dependencies: - "execa" "^1.0.0" - "is-jpg" "^2.0.0" - "mozjpeg" "^6.0.0" + execa "^1.0.0" + is-jpg "^2.0.0" + mozjpeg "^6.0.0" -"imagemin-pngquant@^8.0.0": - "integrity" "sha512-PVq0diOxO+Zyq/zlMCz2Pfu6mVLHgiT1GpW702OwVlnej+NhS6ZQegYi3OFEDW8d7GxouyR5e8R+t53SMciOeg==" - "resolved" "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-8.0.0.tgz" - "version" "8.0.0" +imagemin-pngquant@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-8.0.0.tgz" + integrity sha512-PVq0diOxO+Zyq/zlMCz2Pfu6mVLHgiT1GpW702OwVlnej+NhS6ZQegYi3OFEDW8d7GxouyR5e8R+t53SMciOeg== dependencies: - "execa" "^1.0.0" - "is-png" "^2.0.0" - "is-stream" "^2.0.0" - "ow" "^0.13.2" - "pngquant-bin" "^5.0.0" + execa "^1.0.0" + is-png "^2.0.0" + is-stream "^2.0.0" + ow "^0.13.2" + pngquant-bin "^5.0.0" -"import-fresh@^2.0.0": - "integrity" "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" - "version" "2.0.0" +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= dependencies: - "caller-path" "^2.0.0" - "resolve-from" "^3.0.0" + caller-path "^2.0.0" + resolve-from "^3.0.0" -"import-fresh@^3.0.0": - "integrity" "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" - "version" "3.2.1" +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" + parent-module "^1.0.0" + resolve-from "^4.0.0" -"import-lazy@^3.1.0": - "integrity" "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==" - "resolved" "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz" - "version" "3.1.0" +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz" + integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== -"import-local@2.0.0": - "integrity" "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==" - "resolved" "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz" - "version" "2.0.0" +import-local@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: - "pkg-dir" "^3.0.0" - "resolve-cwd" "^2.0.0" + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" -"imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -"indent-string@^2.1.0": - "integrity" "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz" - "version" "2.1.0" +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= dependencies: - "repeating" "^2.0.0" + repeating "^2.0.0" -"indexes-of@^1.0.1": - "integrity" "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - "resolved" "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" - "version" "1.0.1" +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -"infer-owner@^1.0.3": - "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - "version" "1.0.4" +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: - "once" "^1.3.0" - "wrappy" "1" + once "^1.3.0" + wrappy "1" -"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -"inherits@2.0.1": - "integrity" "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - "version" "2.0.1" +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -"inherits@2.0.3": - "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - "version" "2.0.3" +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -"ini@^1.3.4", "ini@^1.3.5": - "integrity" "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz" - "version" "1.3.5" +ini@^1.3.4, ini@^1.3.5: + version "1.3.5" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -"inquirer@^7.0.0": - "integrity" "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==" - "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz" - "version" "7.1.0" +inquirer@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz" + integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== dependencies: - "ansi-escapes" "^4.2.1" - "chalk" "^3.0.0" - "cli-cursor" "^3.1.0" - "cli-width" "^2.0.0" - "external-editor" "^3.0.3" - "figures" "^3.0.0" - "lodash" "^4.17.15" - "mute-stream" "0.0.8" - "run-async" "^2.4.0" - "rxjs" "^6.5.3" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "through" "^2.3.6" + ansi-escapes "^4.2.1" + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" -"interpret@1.2.0": - "integrity" "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz" - "version" "1.2.0" +interpret@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -"into-stream@^3.1.0": - "integrity" "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=" - "resolved" "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" - "version" "3.1.0" +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= dependencies: - "from2" "^2.1.1" - "p-is-promise" "^1.1.0" + from2 "^2.1.1" + p-is-promise "^1.1.0" -"invariant@^2.2.2", "invariant@^2.2.4": - "integrity" "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==" - "resolved" "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" - "version" "2.2.4" +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: - "loose-envify" "^1.0.0" + loose-envify "^1.0.0" -"invert-kv@^2.0.0": - "integrity" "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" - "version" "2.0.0" +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -"ipaddr.js@1.9.1": - "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - "version" "1.9.1" +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -"is-absolute-url@^2.0.0": - "integrity" "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" - "resolved" "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz" - "version" "2.1.0" +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= -"is-accessor-descriptor@^0.1.6": - "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" - "version" "0.1.6" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: - "kind-of" "^3.0.2" + kind-of "^3.0.2" -"is-accessor-descriptor@^1.0.0": - "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" - "version" "1.0.0" +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: - "kind-of" "^6.0.0" + kind-of "^6.0.0" -"is-arrayish@^0.2.1": - "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - "version" "0.2.1" +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -"is-arrayish@^0.3.1": - "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - "version" "0.3.2" +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -"is-binary-path@~2.1.0": - "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - "version" "2.1.0" +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: - "binary-extensions" "^2.0.0" + binary-extensions "^1.0.0" -"is-buffer@^1.1.5": - "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - "version" "1.1.6" - -"is-callable@^1.1.4", "is-callable@^1.1.5": - "integrity" "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" - "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz" - "version" "1.1.5" - -"is-color-stop@^1.0.0": - "integrity" "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=" - "resolved" "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" - "version" "1.1.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: - "css-color-names" "^0.0.4" - "hex-color-regex" "^1.1.0" - "hsl-regex" "^1.0.0" - "hsla-regex" "^1.0.0" - "rgb-regex" "^1.0.1" - "rgba-regex" "^1.0.0" + binary-extensions "^2.0.0" -"is-data-descriptor@^0.1.4": - "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" - "version" "0.1.4" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= dependencies: - "kind-of" "^3.0.2" + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" -"is-data-descriptor@^1.0.0": - "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" - "version" "1.0.0" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: - "kind-of" "^6.0.0" + kind-of "^3.0.2" -"is-date-object@^1.0.1": - "integrity" "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz" - "version" "1.0.2" - -"is-descriptor@^0.1.0": - "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" - "version" "0.1.6" +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: - "is-accessor-descriptor" "^0.1.6" - "is-data-descriptor" "^0.1.4" - "kind-of" "^5.0.0" + kind-of "^6.0.0" -"is-descriptor@^1.0.0", "is-descriptor@^1.0.2": - "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" - "version" "1.0.2" +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: - "is-accessor-descriptor" "^1.0.0" - "is-data-descriptor" "^1.0.0" - "kind-of" "^6.0.2" + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" -"is-directory@^0.3.1": - "integrity" "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - "resolved" "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz" - "version" "0.3.1" - -"is-extendable@^0.1.0", "is-extendable@^0.1.1": - "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - "version" "0.1.1" - -"is-extendable@^0.1.1": - "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - "version" "0.1.1" - -"is-extendable@^1.0.1": - "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - "version" "1.0.1" +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: - "is-plain-object" "^2.0.4" + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" -"is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -"is-finite@^1.0.0": - "integrity" "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" - "resolved" "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz" - "version" "1.1.0" +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= -"is-fullwidth-code-point@^2.0.0": - "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - "version" "2.0.0" - -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" - -"is-function@^1.0.1": - "integrity" "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - "resolved" "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz" - "version" "1.0.1" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": - "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - "version" "4.0.1" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: - "is-extglob" "^2.1.1" + is-plain-object "^2.0.4" -"is-jpg@^2.0.0": - "integrity" "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=" - "resolved" "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz" - "version" "2.0.0" +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -"is-natural-number@^4.0.1": - "integrity" "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - "resolved" "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" - "version" "4.0.1" +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== -"is-number@^3.0.0": - "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - "version" "3.0.0" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz" + integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: - "kind-of" "^3.0.2" + is-extglob "^2.1.0" -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-obj@^2.0.0": - "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - "version" "2.0.0" - -"is-object@^1.0.1": - "integrity" "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - "resolved" "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz" - "version" "1.0.1" - -"is-plain-obj@^1.0.0", "is-plain-obj@^1.1.0": - "integrity" "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - "version" "1.1.0" - -"is-plain-object@^2.0.3": - "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - "version" "2.0.4" +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: - "isobject" "^3.0.1" + is-extglob "^2.1.1" -"is-plain-object@^2.0.4": - "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - "version" "2.0.4" +is-jpg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz" + integrity sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc= + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" + integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: - "isobject" "^3.0.1" + kind-of "^3.0.2" -"is-plain-object@^5.0.0": - "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - "version" "5.0.0" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -"is-png@^2.0.0": - "integrity" "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==" - "resolved" "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz" - "version" "2.0.0" +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -"is-regex@^1.0.5": - "integrity" "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==" - "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz" - "version" "1.0.5" +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: - "has" "^1.0.3" + isobject "^3.0.1" -"is-resolvable@^1.0.0": - "integrity" "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - "resolved" "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" - "version" "1.1.0" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -"is-retry-allowed@^1.0.0", "is-retry-allowed@^1.1.0": - "integrity" "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - "resolved" "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" - "version" "1.2.0" +is-png@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz" + integrity sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g== -"is-stream@^1.0.0", "is-stream@^1.1.0": - "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" - -"is-stream@^2.0.0": - "integrity" "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" - "version" "2.0.0" - -"is-svg@^3.0.0": - "integrity" "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==" - "resolved" "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz" - "version" "3.0.0" +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== dependencies: - "html-comment-regex" "^1.1.0" + has "^1.0.3" -"is-symbol@^1.0.2": - "integrity" "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==" - "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz" - "version" "1.0.3" +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== dependencies: - "has-symbols" "^1.0.1" + html-comment-regex "^1.1.0" -"is-utf8@^0.2.0": - "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - "version" "0.2.1" - -"is-windows@^1.0.1", "is-windows@^1.0.2": - "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - "version" "1.0.2" - -"is-wsl@^1.1.0": - "integrity" "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" - "version" "1.1.0" - -"isarray@^1.0.0", "isarray@~1.0.0", "isarray@1.0.0": - "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" - -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"isobject@^2.0.0": - "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - "version" "2.1.0" +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - "isarray" "1.0.0" + has-symbols "^1.0.1" -"isobject@^3.0.0", "isobject@^3.0.1": - "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - "version" "3.0.1" +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -"isurl@^1.0.0-alpha5": - "integrity" "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==" - "resolved" "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" - "version" "1.0.0" +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: - "has-to-string-tag-x" "^1.2.0" - "is-object" "^1.0.1" + isarray "1.0.0" -"jimp@^0.6.1": - "integrity" "sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q==" - "resolved" "https://registry.npmjs.org/jimp/-/jimp-0.6.8.tgz" - "version" "0.6.8" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +jimp@^0.6.1: + version "0.6.8" + resolved "https://registry.npmjs.org/jimp/-/jimp-0.6.8.tgz" + integrity sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q== dependencies: "@jimp/custom" "^0.6.8" "@jimp/plugins" "^0.6.8" "@jimp/types" "^0.6.8" - "core-js" "^2.5.7" - "regenerator-runtime" "^0.13.3" - -"jpeg-js@^0.3.4": - "integrity" "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" - "resolved" "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz" - "version" "0.3.7" - -"js-base64@^2.1.9": - "integrity" "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==" - "resolved" "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz" - "version" "2.5.2" - -"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-tokens@^3.0.2": - "integrity" "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" - "version" "3.0.2" - -"js-yaml@^3.13.1", "js-yaml@^3.4.2": - "integrity" "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" - "version" "3.13.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"jsesc@^1.3.0": - "integrity" "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz" - "version" "1.3.0" - -"jsesc@^2.5.1": - "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - "version" "2.5.2" - -"jsesc@~0.5.0": - "integrity" "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - "version" "0.5.0" - -"json-buffer@3.0.0": - "integrity" "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - "version" "3.0.0" - -"json-parse-better-errors@^1.0.1", "json-parse-better-errors@^1.0.2": - "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - "version" "1.0.2" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"json5@^0.5.0": - "integrity" "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - "resolved" "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz" - "version" "0.5.1" - -"json5@^0.5.1": - "integrity" "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - "resolved" "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz" - "version" "0.5.1" - -"json5@^1.0.1": - "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" - "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "minimist" "^1.2.0" - -"json5@^2.1.2": - "integrity" "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==" - "resolved" "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz" - "version" "2.1.3" - dependencies: - "minimist" "^1.2.5" - -"keyv@3.0.0": - "integrity" "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "json-buffer" "3.0.0" - -"kind-of@^3.0.2", "kind-of@^3.0.3": - "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^3.2.0": - "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^4.0.0": - "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^5.0.0": - "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - "version" "5.1.0" - -"kind-of@^6.0.0", "kind-of@^6.0.2": - "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - "version" "6.0.3" - -"known-css-properties@^0.11.0": - "integrity" "sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==" - "resolved" "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz" - "version" "0.11.0" - -"lcid@^2.0.0": - "integrity" "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==" - "resolved" "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "invert-kv" "^2.0.0" - -"leven@^3.1.0": - "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - "version" "3.1.0" - -"levenary@^1.1.1": - "integrity" "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==" - "resolved" "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "leven" "^3.1.0" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"load-bmfont@^1.3.1", "load-bmfont@^1.4.0": - "integrity" "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==" - "resolved" "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "buffer-equal" "0.0.1" - "mime" "^1.3.4" - "parse-bmfont-ascii" "^1.0.3" - "parse-bmfont-binary" "^1.0.5" - "parse-bmfont-xml" "^1.1.4" - "phin" "^2.9.1" - "xhr" "^2.0.1" - "xtend" "^4.0.0" - -"load-json-file@^1.0.0": - "integrity" "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "parse-json" "^2.2.0" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - "strip-bom" "^2.0.0" - -"loader-runner@^2.4.0": - "integrity" "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz" - "version" "2.4.0" - -"loader-utils@^0.2.5": - "integrity" "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz" - "version" "0.2.17" - dependencies: - "big.js" "^3.1.3" - "emojis-list" "^2.0.0" - "json5" "^0.5.0" - "object-assign" "^4.0.1" - -"loader-utils@^1.0.0", "loader-utils@^1.1.0", "loader-utils@^1.2.3", "loader-utils@^1.4.0": - "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "big.js" "^5.2.2" - "emojis-list" "^3.0.0" - "json5" "^1.0.1" - -"loader-utils@~0.2.2": - "integrity" "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz" - "version" "0.2.17" - dependencies: - "big.js" "^3.1.3" - "emojis-list" "^2.0.0" - "json5" "^0.5.0" - "object-assign" "^4.0.1" - -"loader-utils@~0.2.3": - "integrity" "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz" - "version" "0.2.17" - dependencies: - "big.js" "^3.1.3" - "emojis-list" "^2.0.0" - "json5" "^0.5.0" - "object-assign" "^4.0.1" - -"loader-utils@~0.2.5": - "integrity" "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz" - "version" "0.2.17" - dependencies: - "big.js" "^3.1.3" - "emojis-list" "^2.0.0" - "json5" "^0.5.0" - "object-assign" "^4.0.1" - -"loader-utils@1.2.3": - "integrity" "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz" - "version" "1.2.3" - dependencies: - "big.js" "^5.2.2" - "emojis-list" "^2.0.0" - "json5" "^1.0.1" - -"locate-path@^2.0.0": - "integrity" "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "p-locate" "^2.0.0" - "path-exists" "^3.0.0" - -"locate-path@^3.0.0": - "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "p-locate" "^3.0.0" - "path-exists" "^3.0.0" - -"locate-path@^5.0.0": - "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-locate" "^4.1.0" - -"lodash._reinterpolate@^3.0.0": - "integrity" "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - "resolved" "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz" - "version" "3.0.0" - -"lodash.memoize@^4.1.2": - "integrity" "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - "version" "4.1.2" - -"lodash.template@^4.5.0": - "integrity" "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==" - "resolved" "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz" - "version" "4.5.0" - dependencies: - "lodash._reinterpolate" "^3.0.0" - "lodash.templatesettings" "^4.0.0" - -"lodash.templatesettings@^4.0.0": - "integrity" "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==" - "resolved" "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "lodash._reinterpolate" "^3.0.0" - -"lodash.uniq@^4.5.0": - "integrity" "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - "version" "4.5.0" - -"lodash@^4.15.0", "lodash@^4.17.11", "lodash@^4.17.13", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.4": - "integrity" "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz" - "version" "4.17.15" - -"logalot@^2.0.0", "logalot@^2.1.0": - "integrity" "sha1-X46MkNME7fElMJUaVVSruMXj9VI=" - "resolved" "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "figures" "^1.3.5" - "squeak" "^1.0.0" - -"logrocket@^1.0.7": - "integrity" "sha512-v6HWEQIsyG+3FkldB7vIAgHh7/qpsiz2Br4bLK5SHBvjqRrHs/Fp+Jr8oiA2GYq0UurAtCu51U8SWft5+OCKtg==" - "resolved" "https://registry.npmjs.org/logrocket/-/logrocket-1.0.7.tgz" - "version" "1.0.7" - -"longest@^1.0.0": - "integrity" "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - "resolved" "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz" - "version" "1.0.1" - -"loose-envify@^1.0.0": - "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" - "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "js-tokens" "^3.0.0 || ^4.0.0" - -"loud-rejection@^1.0.0": - "integrity" "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=" - "resolved" "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "currently-unhandled" "^0.4.1" - "signal-exit" "^3.0.0" - -"lower-case@^1.1.1": - "integrity" "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" - "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" - "version" "1.1.4" - -"lowercase-keys@^1.0.0": - "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - "version" "1.0.1" - -"lowercase-keys@1.0.0": - "integrity" "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" - "version" "1.0.0" - -"lpad-align@^1.0.1": - "integrity" "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=" - "resolved" "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "get-stdin" "^4.0.1" - "indent-string" "^2.1.0" - "longest" "^1.0.0" - "meow" "^3.3.0" - -"lru-cache@^4.0.1": - "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" - "version" "4.1.5" - dependencies: - "pseudomap" "^1.0.2" - "yallist" "^2.1.2" - -"lru-cache@^5.1.1": - "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "yallist" "^3.0.2" - -"lz-string@^1.4.4": - "integrity" "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=" - "resolved" "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz" - "version" "1.4.4" - -"make-dir@^1.0.0": - "integrity" "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "pify" "^3.0.0" - -"make-dir@^1.2.0": - "integrity" "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "pify" "^3.0.0" - -"make-dir@^2.0.0": - "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "pify" "^4.0.1" - "semver" "^5.6.0" - -"map-age-cleaner@^0.1.1": - "integrity" "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==" - "resolved" "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" - "version" "0.1.3" - dependencies: - "p-defer" "^1.0.0" - -"map-cache@^0.2.2": - "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - "version" "0.2.2" - -"map-obj@^1.0.0", "map-obj@^1.0.1": - "integrity" "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - "version" "1.0.1" - -"map-visit@^1.0.0": - "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" - "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "object-visit" "^1.0.0" - -"markdown-loader@^4.0.0": - "integrity" "sha512-9BCm8iyLF4AVYtjtybOTg8cTcpWYKsDGWWhsc7XaJlXQiddo3ztbZxLPJ28pmCxFI1BlMkT1wDVav1chPjTpdA==" - "resolved" "https://registry.npmjs.org/markdown-loader/-/markdown-loader-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "loader-utils" "^1.1.0" - "marked" "^0.5.0" - -"marked@^0.5.0": - "integrity" "sha512-fdZvBa7/vSQIZCi4uuwo2N3q+7jJURpMVCcbaX0S1Mg65WZ5ilXvC67MviJAsdjqqgD+CEq4RKo5AYGgINkVAA==" - "resolved" "https://registry.npmjs.org/marked/-/marked-0.5.2.tgz" - "version" "0.5.2" - -"match-all@^1.2.5": - "integrity" "sha512-KW4trRDMYbVkAKZ1J655vh0931mk3XM1lIJ480TXUL3KBrOsZ6WpryYJELonvtXC1O4erLYB069uHidLkswbjQ==" - "resolved" "https://registry.npmjs.org/match-all/-/match-all-1.2.5.tgz" - "version" "1.2.5" - -"md5.js@^1.3.4": - "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" - "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - "version" "1.3.5" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"mdn-data@2.0.4": - "integrity" "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" - "version" "2.0.4" - -"mdn-data@2.0.6": - "integrity" "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" - "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz" - "version" "2.0.6" - -"media-typer@0.3.0": - "integrity" "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - "version" "0.3.0" - -"mem@^4.0.0": - "integrity" "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==" - "resolved" "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "map-age-cleaner" "^0.1.1" - "mimic-fn" "^2.0.0" - "p-is-promise" "^2.0.0" - -"memory-fs@^0.4.0", "memory-fs@^0.4.1": - "integrity" "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=" - "resolved" "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "errno" "^0.1.3" - "readable-stream" "^2.0.1" - -"memory-fs@^0.5.0": - "integrity" "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==" - "resolved" "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz" - "version" "0.5.0" - dependencies: - "errno" "^0.1.3" - "readable-stream" "^2.0.1" - -"meow@^3.3.0": - "integrity" "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=" - "resolved" "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" - "version" "3.7.0" - dependencies: - "camelcase-keys" "^2.0.0" - "decamelize" "^1.1.2" - "loud-rejection" "^1.0.0" - "map-obj" "^1.0.1" - "minimist" "^1.1.3" - "normalize-package-data" "^2.3.4" - "object-assign" "^4.0.1" - "read-pkg-up" "^1.0.1" - "redent" "^1.0.0" - "trim-newlines" "^1.0.0" - -"merge-descriptors@1.0.1": - "integrity" "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - "version" "1.0.1" - -"methods@~1.1.2": - "integrity" "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - "version" "1.1.2" - -"micromatch@^3.0.4", "micromatch@^3.1.10": - "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - "version" "3.1.10" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "braces" "^2.3.1" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "extglob" "^2.0.4" - "fragment-cache" "^0.2.1" - "kind-of" "^6.0.2" - "nanomatch" "^1.2.9" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.2" - -"miller-rabin@^4.0.0": - "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" - "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "bn.js" "^4.0.0" - "brorand" "^1.0.1" - -"mime-db@^1.28.0", "mime-db@1.43.0": - "integrity" "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz" - "version" "1.43.0" - -"mime-types@~2.1.24": - "integrity" "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz" - "version" "2.1.26" - dependencies: - "mime-db" "1.43.0" - -"mime@^1.3.4", "mime@1.6.0": - "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - "version" "1.6.0" - -"mime@^2.4.0": - "integrity" "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" - "resolved" "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz" - "version" "2.4.4" - -"mimic-fn@^2.0.0", "mimic-fn@^2.1.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-response@^1.0.0": - "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - "version" "1.0.1" - -"min-document@^2.19.0": - "integrity" "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=" - "resolved" "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" - "version" "2.19.0" - dependencies: - "dom-walk" "^0.1.0" - -"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": - "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - "version" "1.0.1" - -"minimalistic-crypto-utils@^1.0.0", "minimalistic-crypto-utils@^1.0.1": - "integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - "version" "1.0.1" - -"minimatch@^3.0.4": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" - -"minimist@^1.1.3", "minimist@^1.2.0", "minimist@^1.2.5": - "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - "version" "1.2.5" - -"minimist@0.0.8": - "integrity" "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" - "version" "0.0.8" - -"mississippi@^3.0.0": - "integrity" "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==" - "resolved" "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "concat-stream" "^1.5.0" - "duplexify" "^3.4.2" - "end-of-stream" "^1.1.0" - "flush-write-stream" "^1.0.0" - "from2" "^2.1.0" - "parallel-transform" "^1.1.0" - "pump" "^3.0.0" - "pumpify" "^1.3.3" - "stream-each" "^1.1.0" - "through2" "^2.0.0" - -"mixin-deep@^1.2.0": - "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" - "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "for-in" "^1.0.2" - "is-extendable" "^1.0.1" - -"mkdirp@^0.5.1", "mkdirp@^0.5.3", "mkdirp@~0.5.1": - "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - "version" "0.5.5" - dependencies: - "minimist" "^1.2.5" - -"mkdirp@0.5.1": - "integrity" "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" - "version" "0.5.1" - dependencies: - "minimist" "0.0.8" - -"move-concurrently@^1.0.1": - "integrity" "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=" - "resolved" "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "aproba" "^1.1.1" - "copy-concurrently" "^1.0.0" - "fs-write-stream-atomic" "^1.0.8" - "mkdirp" "^0.5.1" - "rimraf" "^2.5.4" - "run-queue" "^1.0.3" - -"mozjpeg@^6.0.0": - "integrity" "sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==" - "resolved" "https://registry.npmjs.org/mozjpeg/-/mozjpeg-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "bin-build" "^3.0.0" - "bin-wrapper" "^4.0.0" - "logalot" "^2.1.0" - -"ms@^2.1.1": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"ms@2.0.0": - "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - "version" "2.0.0" - -"ms@2.1.1": - "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - "version" "2.1.1" - -"mute-stream@0.0.8": - "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - "version" "0.0.8" - -"nanoid@^3.1.20": - "integrity" "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz" - "version" "3.1.20" - -"nanomatch@^1.2.9": - "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" - "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - "version" "1.2.13" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "fragment-cache" "^0.2.1" - "is-windows" "^1.0.2" - "kind-of" "^6.0.2" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"negotiator@0.6.2": - "integrity" "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" - "version" "0.6.2" - -"neo-async@^2.5.0", "neo-async@^2.6.1": - "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - "version" "2.6.2" - -"nice-try@^1.0.4": - "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - "version" "1.0.5" - -"no-case@^2.2.0": - "integrity" "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==" - "resolved" "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "lower-case" "^1.1.1" - -"node-fetch@^2.6.1": - "integrity" "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" - "version" "2.6.1" - -"node-libs-browser@^2.2.1": - "integrity" "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==" - "resolved" "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "assert" "^1.1.1" - "browserify-zlib" "^0.2.0" - "buffer" "^4.3.0" - "console-browserify" "^1.1.0" - "constants-browserify" "^1.0.0" - "crypto-browserify" "^3.11.0" - "domain-browser" "^1.1.1" - "events" "^3.0.0" - "https-browserify" "^1.0.0" - "os-browserify" "^0.3.0" - "path-browserify" "0.0.1" - "process" "^0.11.10" - "punycode" "^1.2.4" - "querystring-es3" "^0.2.0" - "readable-stream" "^2.3.3" - "stream-browserify" "^2.0.1" - "stream-http" "^2.7.2" - "string_decoder" "^1.0.0" - "timers-browserify" "^2.0.4" - "tty-browserify" "0.0.0" - "url" "^0.11.0" - "util" "^0.11.0" - "vm-browserify" "^1.0.1" - -"node-releases@^1.1.53": - "integrity" "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz" - "version" "1.1.53" - -"normalize-package-data@^2.3.2", "normalize-package-data@^2.3.4": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-path@^3.0.0", "normalize-path@~3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"normalize-range@^0.1.2": - "integrity" "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - "version" "0.1.2" - -"normalize-url@^3.0.0": - "integrity" "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz" - "version" "3.3.0" - -"normalize-url@2.0.1": - "integrity" "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==" - "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "prepend-http" "^2.0.0" - "query-string" "^5.0.1" - "sort-keys" "^2.0.0" - -"npm-conf@^1.1.0": - "integrity" "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==" - "resolved" "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "config-chain" "^1.1.11" - "pify" "^3.0.0" - -"npm-run-path@^2.0.0": - "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "path-key" "^2.0.0" - -"nth-check@^1.0.2": - "integrity" "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==" - "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "boolbase" "~1.0.0" - -"num2fraction@^1.2.2": - "integrity" "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - "resolved" "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" - "version" "1.2.2" - -"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-copy@^0.1.0": - "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" - "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "copy-descriptor" "^0.1.0" - "define-property" "^0.2.5" - "kind-of" "^3.0.3" - -"object-inspect@^1.7.0": - "integrity" "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz" - "version" "1.7.0" - -"object-keys@^1.0.11", "object-keys@^1.0.12", "object-keys@^1.1.1": - "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - "version" "1.1.1" - -"object-visit@^1.0.0": - "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" - "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "isobject" "^3.0.0" - -"object.assign@^4.1.0": - "integrity" "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "define-properties" "^1.1.2" - "function-bind" "^1.1.1" - "has-symbols" "^1.0.0" - "object-keys" "^1.0.11" - -"object.getownpropertydescriptors@^2.1.0": - "integrity" "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==" - "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "define-properties" "^1.1.3" - "es-abstract" "^1.17.0-next.1" - -"object.pick@^1.3.0": - "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" - "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "isobject" "^3.0.1" - -"object.values@^1.1.0": - "integrity" "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==" - "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "define-properties" "^1.1.3" - "es-abstract" "^1.17.0-next.1" - "function-bind" "^1.1.1" - "has" "^1.0.3" - -"omggif@^1.0.9": - "integrity" "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" - "resolved" "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz" - "version" "1.0.10" - -"on-finished@~2.3.0": - "integrity" "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" - "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "ee-first" "1.1.1" - -"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"onetime@^5.1.0": - "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "mimic-fn" "^2.1.0" - -"opener@^1.5.1": - "integrity" "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" - "resolved" "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz" - "version" "1.5.1" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"os-browserify@^0.3.0": - "integrity" "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - "resolved" "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" - "version" "0.3.0" - -"os-filter-obj@^2.0.0": - "integrity" "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==" - "resolved" "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "arch" "^2.1.0" - -"os-homedir@^1.0.0": - "integrity" "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - "resolved" "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" - "version" "1.0.2" - -"os-locale@^3.1.0": - "integrity" "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==" - "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "execa" "^1.0.0" - "lcid" "^2.0.0" - "mem" "^4.0.0" - -"os-tmpdir@^1.0.1", "os-tmpdir@~1.0.2": - "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - "version" "1.0.2" - -"ow@^0.13.2": - "integrity" "sha512-9wvr+q+ZTDRvXDjL6eDOdFe5WUl/wa5sntf9kAolxqSpkBqaIObwLgFCGXSJASFw+YciXnOVtDWpxXa9cqV94A==" - "resolved" "https://registry.npmjs.org/ow/-/ow-0.13.2.tgz" - "version" "0.13.2" + core-js "^2.5.7" + regenerator-runtime "^0.13.3" + +jpeg-js@^0.3.4: + version "0.3.7" + resolved "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz" + integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ== + +js-base64@^2.1.9: + version "2.5.2" + resolved "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz" + integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.13.1, js-yaml@^3.4.2: + version "3.13.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +known-css-properties@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz" + integrity sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w== + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +load-bmfont@^1.3.1, load-bmfont@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz" + integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g== + dependencies: + buffer-equal "0.0.1" + mime "^1.3.4" + parse-bmfont-ascii "^1.0.3" + parse-bmfont-binary "^1.0.5" + parse-bmfont-xml "^1.1.4" + phin "^2.9.1" + xhr "^2.0.1" + xtend "^4.0.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^0.2.5, loader-utils@~0.2.2, loader-utils@~0.2.3, loader-utils@~0.2.5: + version "0.2.17" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.0, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: + version "4.17.15" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +logalot@^2.0.0, logalot@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz" + integrity sha1-X46MkNME7fElMJUaVVSruMXj9VI= + dependencies: + figures "^1.3.5" + squeak "^1.0.0" + +logrocket@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/logrocket/-/logrocket-1.0.7.tgz" + integrity sha512-v6HWEQIsyG+3FkldB7vIAgHh7/qpsiz2Br4bLK5SHBvjqRrHs/Fp+Jr8oiA2GYq0UurAtCu51U8SWft5+OCKtg== + +longest@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lpad-align@^1.0.1: + version "1.1.2" + resolved "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz" + integrity sha1-IfYArBwwlcPG5JfuZyce4ISB/p4= + dependencies: + get-stdin "^4.0.1" + indent-string "^2.1.0" + longest "^1.0.0" + meow "^3.3.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + +make-dir@^1.0.0, make-dir@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/markdown-loader/-/markdown-loader-4.0.0.tgz" + integrity sha512-9BCm8iyLF4AVYtjtybOTg8cTcpWYKsDGWWhsc7XaJlXQiddo3ztbZxLPJ28pmCxFI1BlMkT1wDVav1chPjTpdA== + dependencies: + loader-utils "^1.1.0" + marked "^0.5.0" + +marked@^0.5.0: + version "0.5.2" + resolved "https://registry.npmjs.org/marked/-/marked-0.5.2.tgz" + integrity sha512-fdZvBa7/vSQIZCi4uuwo2N3q+7jJURpMVCcbaX0S1Mg65WZ5ilXvC67MviJAsdjqqgD+CEq4RKo5AYGgINkVAA== + +match-all@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.5.tgz" + integrity sha512-KW4trRDMYbVkAKZ1J655vh0931mk3XM1lIJ480TXUL3KBrOsZ6WpryYJELonvtXC1O4erLYB069uHidLkswbjQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.43.0, mime-db@^1.28.0: + version "1.43.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@1.6.0, mime@^1.3.4: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.0: + version "2.4.4" + resolved "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +mozjpeg@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/mozjpeg/-/mozjpeg-6.0.1.tgz" + integrity sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + logalot "^2.1.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanoid@^3.1.20: + version "3.1.20" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.53: + version "1.1.53" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz" + integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +omggif@^1.0.9: + version "1.0.10" + resolved "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz" + integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-filter-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz" + integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg== + dependencies: + arch "^2.1.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +ow@^0.13.2: + version "0.13.2" + resolved "https://registry.npmjs.org/ow/-/ow-0.13.2.tgz" + integrity sha512-9wvr+q+ZTDRvXDjL6eDOdFe5WUl/wa5sntf9kAolxqSpkBqaIObwLgFCGXSJASFw+YciXnOVtDWpxXa9cqV94A== dependencies: - "type-fest" "^0.5.1" - -"p-cancelable@^0.3.0": - "integrity" "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz" - "version" "0.3.0" + type-fest "^0.5.1" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== -"p-cancelable@^0.4.0": - "integrity" "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz" - "version" "0.4.1" - -"p-defer@^1.0.0": - "integrity" "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - "resolved" "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" - "version" "1.0.0" - -"p-event@^1.0.0": - "integrity" "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=" - "resolved" "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "p-timeout" "^1.1.1" - -"p-event@^2.1.0": - "integrity" "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==" - "resolved" "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "p-timeout" "^2.0.1" +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-event@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz" + integrity sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU= + dependencies: + p-timeout "^1.1.1" + +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" -"p-finally@^1.0.0": - "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - "version" "1.0.0" - -"p-is-promise@^1.1.0": - "integrity" "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" - "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" - "version" "1.1.0" - -"p-is-promise@^2.0.0": - "integrity" "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" - "version" "2.1.0" - -"p-limit@^1.1.0": - "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "p-try" "^1.0.0" - -"p-limit@^2.0.0", "p-limit@^2.2.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "p-try" "^2.0.0" - -"p-locate@^2.0.0": - "integrity" "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "p-limit" "^1.1.0" - -"p-locate@^3.0.0": - "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "p-limit" "^2.0.0" - -"p-locate@^4.1.0": - "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "p-limit" "^2.2.0" - -"p-map-series@^1.0.0": - "integrity" "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=" - "resolved" "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "p-reduce" "^1.0.0" - -"p-reduce@^1.0.0": - "integrity" "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" - "resolved" "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz" - "version" "1.0.0" - -"p-timeout@^1.1.1": - "integrity" "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=" - "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "p-finally" "^1.0.0" +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= + dependencies: + p-reduce "^1.0.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" -"p-timeout@^2.0.1": - "integrity" "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==" - "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "p-finally" "^1.0.0" - -"p-try@^1.0.0": - "integrity" "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - "version" "1.0.0" - -"p-try@^2.0.0": - "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - "version" "2.2.0" - -"pako@^1.0.5", "pako@~1.0.5": - "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" - "version" "1.0.11" - -"parallel-transform@^1.1.0": - "integrity" "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==" - "resolved" "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "cyclist" "^1.0.1" - "inherits" "^2.0.3" - "readable-stream" "^2.1.5" - -"param-case@2.1.x": - "integrity" "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=" - "resolved" "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "no-case" "^2.2.0" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"parse-asn1@^5.0.0", "parse-asn1@^5.1.5": - "integrity" "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==" - "resolved" "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz" - "version" "5.1.5" - dependencies: - "asn1.js" "^4.0.0" - "browserify-aes" "^1.0.0" - "create-hash" "^1.1.0" - "evp_bytestokey" "^1.0.0" - "pbkdf2" "^3.0.3" - "safe-buffer" "^5.1.1" - -"parse-bmfont-ascii@^1.0.3": - "integrity" "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" - "resolved" "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz" - "version" "1.0.6" - -"parse-bmfont-binary@^1.0.5": - "integrity" "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" - "resolved" "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz" - "version" "1.0.6" - -"parse-bmfont-xml@^1.1.4": - "integrity" "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==" - "resolved" "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "xml-parse-from-string" "^1.0.0" - "xml2js" "^0.4.5" - -"parse-headers@^2.0.0": - "integrity" "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - "resolved" "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz" - "version" "2.0.3" - -"parse-json@^2.2.0": - "integrity" "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "error-ex" "^1.2.0" - -"parse-json@^4.0.0": - "integrity" "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "error-ex" "^1.3.1" - "json-parse-better-errors" "^1.0.1" - -"parse-passwd@^1.0.0": - "integrity" "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - "resolved" "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" - "version" "1.0.0" - -"parseurl@~1.3.3": - "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - "version" "1.3.3" - -"pascalcase@^0.1.1": - "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - "version" "0.1.1" - -"path-browserify@0.0.1": - "integrity" "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" - "version" "0.0.1" - -"path-exists@^2.0.0": - "integrity" "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "pinkie-promise" "^2.0.0" - -"path-exists@^3.0.0": - "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - "version" "3.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0", "path-is-absolute@^1.0.1": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-key@^2.0.0": - "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - "version" "2.0.1" - -"path-key@^2.0.1": - "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - "version" "2.0.1" - -"path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-parse@^1.0.6": - "integrity" "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" - "version" "1.0.6" - -"path-to-regexp@0.1.7": - "integrity" "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - "version" "0.1.7" - -"path-type@^1.0.0": - "integrity" "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"pbkdf2@^3.0.3": - "integrity" "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==" - "resolved" "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "create-hash" "^1.1.2" - "create-hmac" "^1.1.4" - "ripemd160" "^2.0.1" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"pend@~1.2.0": - "integrity" "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - "resolved" "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" - "version" "1.2.0" - -"phin@^2.9.1": - "integrity" "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - "resolved" "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz" - "version" "2.9.3" - -"phonegap-plugin-mobile-accessibility@^1.0.5": - "integrity" "sha1-lah1TRJ1CLxuGuJZpTznZYNurAM=" - "resolved" "https://registry.npmjs.org/phonegap-plugin-mobile-accessibility/-/phonegap-plugin-mobile-accessibility-1.0.5.tgz" - "version" "1.0.5" - -"picomatch@^2.0.4", "picomatch@^2.2.1": - "integrity" "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz" - "version" "2.2.2" - -"pify@^2.0.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^2.2.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^2.3.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^3.0.0": - "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - "version" "3.0.0" - -"pify@^4.0.1": - "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - "version" "4.0.1" - -"pinkie-promise@^2.0.0": - "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" - "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "pinkie" "^2.0.0" - -"pinkie@^2.0.0": - "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - "version" "2.0.4" - -"pixelmatch@^4.0.2": - "integrity" "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=" - "resolved" "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "pngjs" "^3.0.0" - -"pkg-dir@^3.0.0": - "integrity" "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==" - "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "find-up" "^3.0.0" - -"pkg-up@^2.0.0": - "integrity" "sha1-yBmscoBZpGHKscOImivjxJoATX8=" - "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "find-up" "^2.1.0" - -"pngjs@^3.0.0", "pngjs@^3.3.3": - "integrity" "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz" - "version" "3.4.0" - -"pngquant-bin@^5.0.0": - "integrity" "sha512-OLdT+4JZx5BqE1CFJkrvomYV0aSsv6x2Bba+aWaVc0PMfWlE+ZByNKYAdKeIqsM4uvW1HOSEHnf8KcOnykPNxA==" - "resolved" "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-5.0.2.tgz" - "version" "5.0.2" - dependencies: - "bin-build" "^3.0.0" - "bin-wrapper" "^4.0.1" - "execa" "^0.10.0" - "logalot" "^2.0.0" - -"posix-character-classes@^0.1.0": - "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - "version" "0.1.1" - -"postcss-assets@^5.0.0": - "integrity" "sha1-9yHQfTOWBftYQU6fac8FQBxU5wk=" - "resolved" "https://registry.npmjs.org/postcss-assets/-/postcss-assets-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "assets" "^3.0.0" - "bluebird" "^3.5.0" - "postcss" "^6.0.10" - "postcss-functions" "^3.0.0" - -"postcss-attribute-case-insensitive@^4.0.1": - "integrity" "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==" - "resolved" "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "postcss" "^7.0.2" - "postcss-selector-parser" "^6.0.2" - -"postcss-calc@^7.0.1": - "integrity" "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==" - "resolved" "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz" - "version" "7.0.2" - dependencies: - "postcss" "^7.0.27" - "postcss-selector-parser" "^6.0.2" - "postcss-value-parser" "^4.0.2" - -"postcss-color-functional-notation@^2.0.1": - "integrity" "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==" - "resolved" "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-color-gray@^5.0.0": - "integrity" "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==" - "resolved" "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz" - "version" "5.0.0" +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@^1.0.5, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-bmfont-ascii@^1.0.3: + version "1.0.6" + resolved "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz" + integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= + +parse-bmfont-binary@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz" + integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= + +parse-bmfont-xml@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz" + integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== + dependencies: + xml-parse-from-string "^1.0.0" + xml2js "^0.4.5" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +phin@^2.9.1: + version "2.9.3" + resolved "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz" + integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== + +phonegap-plugin-mobile-accessibility@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/phonegap-plugin-mobile-accessibility/-/phonegap-plugin-mobile-accessibility-1.0.5.tgz" + integrity sha1-lah1TRJ1CLxuGuJZpTznZYNurAM= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pixelmatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz" + integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= + dependencies: + pngjs "^3.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +pngjs@^3.0.0, pngjs@^3.3.3: + version "3.4.0" + resolved "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +pngquant-bin@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-5.0.2.tgz" + integrity sha512-OLdT+4JZx5BqE1CFJkrvomYV0aSsv6x2Bba+aWaVc0PMfWlE+ZByNKYAdKeIqsM4uvW1HOSEHnf8KcOnykPNxA== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.1" + execa "^0.10.0" + logalot "^2.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-assets@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/postcss-assets/-/postcss-assets-5.0.0.tgz" + integrity sha1-9yHQfTOWBftYQU6fac8FQBxU5wk= + dependencies: + assets "^3.0.0" + bluebird "^3.5.0" + postcss "^6.0.10" + postcss-functions "^3.0.0" + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-calc@^7.0.1: + version "7.0.2" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz" + integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== dependencies: "@csstools/convert-colors" "^1.4.0" - "postcss" "^7.0.5" - "postcss-values-parser" "^2.0.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" -"postcss-color-hex-alpha@^5.0.3": - "integrity" "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==" - "resolved" "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz" - "version" "5.0.3" +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== dependencies: - "postcss" "^7.0.14" - "postcss-values-parser" "^2.0.1" + postcss "^7.0.14" + postcss-values-parser "^2.0.1" -"postcss-color-mod-function@^3.0.3": - "integrity" "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==" - "resolved" "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz" - "version" "3.0.3" +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== dependencies: "@csstools/convert-colors" "^1.4.0" - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" -"postcss-color-rebeccapurple@^4.0.1": - "integrity" "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==" - "resolved" "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz" - "version" "4.0.1" +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" -"postcss-colormin@^4.0.3": - "integrity" "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==" - "resolved" "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz" - "version" "4.0.3" +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== dependencies: - "browserslist" "^4.0.0" - "color" "^3.0.0" - "has" "^1.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" -"postcss-convert-values@^4.0.1": - "integrity" "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==" - "resolved" "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz" - "version" "4.0.1" +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== dependencies: - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" -"postcss-custom-media@^7.0.8": - "integrity" "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==" - "resolved" "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz" - "version" "7.0.8" +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== dependencies: - "postcss" "^7.0.14" + postcss "^7.0.14" -"postcss-custom-properties@^8.0.11": - "integrity" "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==" - "resolved" "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz" - "version" "8.0.11" +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== dependencies: - "postcss" "^7.0.17" - "postcss-values-parser" "^2.0.1" + postcss "^7.0.17" + postcss-values-parser "^2.0.1" -"postcss-custom-selectors@^5.1.2": - "integrity" "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==" - "resolved" "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz" - "version" "5.1.2" +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== dependencies: - "postcss" "^7.0.2" - "postcss-selector-parser" "^5.0.0-rc.3" + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" -"postcss-dir-pseudo-class@^5.0.0": - "integrity" "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==" - "resolved" "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz" - "version" "5.0.0" +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== dependencies: - "postcss" "^7.0.2" - "postcss-selector-parser" "^5.0.0-rc.3" + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" -"postcss-discard-comments@^4.0.2": - "integrity" "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==" - "resolved" "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz" - "version" "4.0.2" +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== dependencies: - "postcss" "^7.0.0" + postcss "^7.0.0" -"postcss-discard-duplicates@^4.0.2": - "integrity" "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==" - "resolved" "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz" - "version" "4.0.2" +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== dependencies: - "postcss" "^7.0.0" + postcss "^7.0.0" -"postcss-discard-empty@^4.0.1": - "integrity" "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==" - "resolved" "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz" - "version" "4.0.1" +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== dependencies: - "postcss" "^7.0.0" + postcss "^7.0.0" -"postcss-discard-overridden@^4.0.1": - "integrity" "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==" - "resolved" "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz" - "version" "4.0.1" +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== dependencies: - "postcss" "^7.0.0" + postcss "^7.0.0" -"postcss-discard-unused@^4.0.1": - "integrity" "sha512-/3vq4LU0bLH2Lj4NYN7BTf2caly0flUB7Xtrk9a5K3yLuXMkHMqMO/x3sDq8W2b1eQFSCyY0IVz2L+0HP8kUUA==" - "resolved" "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-4.0.1.tgz" - "version" "4.0.1" +postcss-discard-unused@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-4.0.1.tgz" + integrity sha512-/3vq4LU0bLH2Lj4NYN7BTf2caly0flUB7Xtrk9a5K3yLuXMkHMqMO/x3sDq8W2b1eQFSCyY0IVz2L+0HP8kUUA== dependencies: - "postcss" "^7.0.0" - "postcss-selector-parser" "^3.0.0" - "uniqs" "^2.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + uniqs "^2.0.0" -"postcss-double-position-gradients@^1.0.0": - "integrity" "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==" - "resolved" "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz" - "version" "1.0.0" +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== dependencies: - "postcss" "^7.0.5" - "postcss-values-parser" "^2.0.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" -"postcss-env-function@^2.0.2": - "integrity" "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==" - "resolved" "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz" - "version" "2.0.2" +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" -"postcss-focus-visible@^4.0.0": - "integrity" "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==" - "resolved" "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz" - "version" "4.0.0" +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== dependencies: - "postcss" "^7.0.2" + postcss "^7.0.2" -"postcss-focus-within@^3.0.0": - "integrity" "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==" - "resolved" "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz" - "version" "3.0.0" +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== dependencies: - "postcss" "^7.0.2" + postcss "^7.0.2" -"postcss-font-variant@^4.0.0": - "integrity" "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==" - "resolved" "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz" - "version" "4.0.0" +postcss-font-variant@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz" + integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg== dependencies: - "postcss" "^7.0.2" + postcss "^7.0.2" -"postcss-functions@^3.0.0": - "integrity" "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=" - "resolved" "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz" - "version" "3.0.0" +postcss-functions@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz" + integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= dependencies: - "glob" "^7.1.2" - "object-assign" "^4.1.1" - "postcss" "^6.0.9" - "postcss-value-parser" "^3.3.0" + glob "^7.1.2" + object-assign "^4.1.1" + postcss "^6.0.9" + postcss-value-parser "^3.3.0" -"postcss-gap-properties@^2.0.0": - "integrity" "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==" - "resolved" "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz" - "version" "2.0.0" +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== dependencies: - "postcss" "^7.0.2" + postcss "^7.0.2" -"postcss-image-set-function@^3.0.1": - "integrity" "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==" - "resolved" "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz" - "version" "3.0.1" +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" -"postcss-initial@^3.0.0": - "integrity" "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==" - "resolved" "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz" - "version" "3.0.2" +postcss-initial@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz" + integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== dependencies: - "lodash.template" "^4.5.0" - "postcss" "^7.0.2" + lodash.template "^4.5.0" + postcss "^7.0.2" -"postcss-lab-function@^2.0.1": - "integrity" "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==" - "resolved" "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz" - "version" "2.0.1" +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== dependencies: "@csstools/convert-colors" "^1.4.0" - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-logical@^3.0.0": - "integrity" "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==" - "resolved" "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-media-minmax@^4.0.0": - "integrity" "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==" - "resolved" "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-merge-idents@^4.0.1": - "integrity" "sha512-43S/VNdF6II0NZ31YxcvNYq4gfURlPAAsJW/z84avBXQCaP4I4qRHUH18slW/SOlJbcxxCobflPNUApYDddS7A==" - "resolved" "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "cssnano-util-same-parent" "^4.0.0" - "has" "^1.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-merge-longhand@^4.0.11": - "integrity" "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==" - "resolved" "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz" - "version" "4.0.11" - dependencies: - "css-color-names" "0.0.4" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - "stylehacks" "^4.0.0" - -"postcss-merge-rules@^4.0.3": - "integrity" "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==" - "resolved" "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "browserslist" "^4.0.0" - "caniuse-api" "^3.0.0" - "cssnano-util-same-parent" "^4.0.0" - "postcss" "^7.0.0" - "postcss-selector-parser" "^3.0.0" - "vendors" "^1.0.0" - -"postcss-minify-font-values@^4.0.2": - "integrity" "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==" - "resolved" "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-minify-gradients@^4.0.2": - "integrity" "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==" - "resolved" "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "cssnano-util-get-arguments" "^4.0.0" - "is-color-stop" "^1.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-minify-params@^4.0.2": - "integrity" "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==" - "resolved" "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "alphanum-sort" "^1.0.0" - "browserslist" "^4.0.0" - "cssnano-util-get-arguments" "^4.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - "uniqs" "^2.0.0" - -"postcss-minify-selectors@^4.0.2": - "integrity" "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==" - "resolved" "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "alphanum-sort" "^1.0.0" - "has" "^1.0.0" - "postcss" "^7.0.0" - "postcss-selector-parser" "^3.0.0" - -"postcss-nesting@^7.0.0": - "integrity" "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==" - "resolved" "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "postcss" "^7.0.2" - -"postcss-normalize-charset@^4.0.1": - "integrity" "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==" - "resolved" "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "postcss" "^7.0.0" - -"postcss-normalize-display-values@^4.0.2": - "integrity" "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==" - "resolved" "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "cssnano-util-get-match" "^4.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-normalize-positions@^4.0.2": - "integrity" "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==" - "resolved" "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "cssnano-util-get-arguments" "^4.0.0" - "has" "^1.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-normalize-repeat-style@^4.0.2": - "integrity" "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==" - "resolved" "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "cssnano-util-get-arguments" "^4.0.0" - "cssnano-util-get-match" "^4.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-normalize-string@^4.0.2": - "integrity" "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==" - "resolved" "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "has" "^1.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-normalize-timing-functions@^4.0.2": - "integrity" "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==" - "resolved" "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "cssnano-util-get-match" "^4.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-normalize-unicode@^4.0.1": - "integrity" "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==" - "resolved" "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "browserslist" "^4.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-normalize-url@^4.0.1": - "integrity" "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==" - "resolved" "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "is-absolute-url" "^2.0.0" - "normalize-url" "^3.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-normalize-whitespace@^4.0.2": - "integrity" "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==" - "resolved" "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-ordered-values@^4.1.2": - "integrity" "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==" - "resolved" "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "cssnano-util-get-arguments" "^4.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-overflow-shorthand@^2.0.0": - "integrity" "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==" - "resolved" "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-page-break@^2.0.0": - "integrity" "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==" - "resolved" "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-place@^4.0.1": - "integrity" "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==" - "resolved" "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-preset-env@^6.5.0": - "integrity" "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==" - "resolved" "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz" - "version" "6.7.0" - dependencies: - "autoprefixer" "^9.6.1" - "browserslist" "^4.6.4" - "caniuse-lite" "^1.0.30000981" - "css-blank-pseudo" "^0.1.4" - "css-has-pseudo" "^0.10.0" - "css-prefers-color-scheme" "^3.1.1" - "cssdb" "^4.4.0" - "postcss" "^7.0.17" - "postcss-attribute-case-insensitive" "^4.0.1" - "postcss-color-functional-notation" "^2.0.1" - "postcss-color-gray" "^5.0.0" - "postcss-color-hex-alpha" "^5.0.3" - "postcss-color-mod-function" "^3.0.3" - "postcss-color-rebeccapurple" "^4.0.1" - "postcss-custom-media" "^7.0.8" - "postcss-custom-properties" "^8.0.11" - "postcss-custom-selectors" "^5.1.2" - "postcss-dir-pseudo-class" "^5.0.0" - "postcss-double-position-gradients" "^1.0.0" - "postcss-env-function" "^2.0.2" - "postcss-focus-visible" "^4.0.0" - "postcss-focus-within" "^3.0.0" - "postcss-font-variant" "^4.0.0" - "postcss-gap-properties" "^2.0.0" - "postcss-image-set-function" "^3.0.1" - "postcss-initial" "^3.0.0" - "postcss-lab-function" "^2.0.1" - "postcss-logical" "^3.0.0" - "postcss-media-minmax" "^4.0.0" - "postcss-nesting" "^7.0.0" - "postcss-overflow-shorthand" "^2.0.0" - "postcss-page-break" "^2.0.0" - "postcss-place" "^4.0.1" - "postcss-pseudo-class-any-link" "^6.0.0" - "postcss-replace-overflow-wrap" "^3.0.0" - "postcss-selector-matches" "^4.0.0" - "postcss-selector-not" "^4.0.0" - -"postcss-pseudo-class-any-link@^6.0.0": - "integrity" "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==" - "resolved" "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "postcss" "^7.0.2" - "postcss-selector-parser" "^5.0.0-rc.3" - -"postcss-reduce-idents@^4.0.2": - "integrity" "sha512-Tz70Ri10TclPoCtFfftjFVddx3fZGUkr0dEDbIEfbYhFUOFQZZ77TEqRrU0e6TvAvF+Wa5VVzYTpFpq0uwFFzw==" - "resolved" "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-reduce-initial@^4.0.3": - "integrity" "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==" - "resolved" "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "browserslist" "^4.0.0" - "caniuse-api" "^3.0.0" - "has" "^1.0.0" - "postcss" "^7.0.0" - -"postcss-reduce-transforms@^4.0.2": - "integrity" "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==" - "resolved" "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "cssnano-util-get-match" "^4.0.0" - "has" "^1.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - -"postcss-replace-overflow-wrap@^3.0.0": - "integrity" "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==" - "resolved" "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-round-subpixels@^1.2.0": - "integrity" "sha1-4h1qxZUuGF+b3ACLlPAE/lCdChE=" - "resolved" "https://registry.npmjs.org/postcss-round-subpixels/-/postcss-round-subpixels-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "postcss" "^5.0.2" - "postcss-value-parser" "^3.1.2" - -"postcss-selector-matches@^4.0.0": - "integrity" "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==" - "resolved" "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "balanced-match" "^1.0.0" - "postcss" "^7.0.2" - -"postcss-selector-not@^4.0.0": - "integrity" "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==" - "resolved" "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "balanced-match" "^1.0.0" - "postcss" "^7.0.2" - -"postcss-selector-parser@^3.0.0": - "integrity" "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "dot-prop" "^5.2.0" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" - -"postcss-selector-parser@^5.0.0-rc.3": - "integrity" "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "cssesc" "^2.0.0" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" - -"postcss-selector-parser@^5.0.0-rc.4": - "integrity" "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "cssesc" "^2.0.0" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" - -"postcss-selector-parser@^5.0.0": - "integrity" "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "cssesc" "^2.0.0" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" - -"postcss-selector-parser@^6.0.2": - "integrity" "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "cssesc" "^3.0.0" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" - -"postcss-svgo@^4.0.2": - "integrity" "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==" - "resolved" "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "is-svg" "^3.0.0" - "postcss" "^7.0.0" - "postcss-value-parser" "^3.0.0" - "svgo" "^1.0.0" - -"postcss-unique-selectors@^4.0.1": - "integrity" "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==" - "resolved" "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "alphanum-sort" "^1.0.0" - "postcss" "^7.0.0" - "uniqs" "^2.0.0" - -"postcss-unprefix@^2.1.3": - "integrity" "sha512-s+muBiGIMx3RvgPTtPBnSrfvIBHJ2Zx16QZf/VDB/sAxdYP6FIzci8d1gLh0+9psu5W6zVtCbU5micNt6Zh3cg==" - "resolved" "https://registry.npmjs.org/postcss-unprefix/-/postcss-unprefix-2.1.4.tgz" - "version" "2.1.4" - dependencies: - "autoprefixer" "^9.4.3" - "known-css-properties" "^0.11.0" - "normalize-range" "^0.1.2" - "postcss-selector-parser" "^5.0.0" - "postcss-value-parser" "^3.3.1" - "pseudo-classes" "^1.0.0" - "pseudo-elements" "^1.1.0" - -"postcss-value-parser@^3.0.0": - "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" - "version" "3.3.1" - -"postcss-value-parser@^3.1.2": - "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" - "version" "3.3.1" - -"postcss-value-parser@^3.3.0": - "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" - "version" "3.3.1" - -"postcss-value-parser@^3.3.1": - "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" - "version" "3.3.1" - -"postcss-value-parser@^4.0.2", "postcss-value-parser@^4.0.3": - "integrity" "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz" - "version" "4.0.3" - -"postcss-values-parser@^2.0.0", "postcss-values-parser@^2.0.1": - "integrity" "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==" - "resolved" "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "flatten" "^1.0.2" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" - -"postcss-zindex@^4.0.1": - "integrity" "sha512-d/8BlQcUdEugZNRM9AdCA2V4fqREUtn/wcixLN3L6ITgc2P/FMcVVYz8QZkhItWT9NB5qr8wuN2dJCE4/+dlrA==" - "resolved" "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "has" "^1.0.0" - "postcss" "^7.0.0" - "uniqs" "^2.0.0" - -"postcss@^5.0.2": - "integrity" "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" - "version" "5.2.18" - dependencies: - "chalk" "^1.1.3" - "js-base64" "^2.1.9" - "source-map" "^0.5.6" - "supports-color" "^3.2.3" - -"postcss@^6.0.10": - "integrity" "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" - "version" "6.0.23" - dependencies: - "chalk" "^2.4.1" - "source-map" "^0.6.1" - "supports-color" "^5.4.0" - -"postcss@^6.0.9": - "integrity" "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" - "version" "6.0.23" - dependencies: - "chalk" "^2.4.1" - "source-map" "^0.6.1" - "supports-color" "^5.4.0" - -"postcss@^7.0.0": - "integrity" "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" - "version" "7.0.27" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.1": - "integrity" "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" - "version" "7.0.27" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.14": - "integrity" "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" - "version" "7.0.27" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.17": - "integrity" "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" - "version" "7.0.27" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.2": - "integrity" "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" - "version" "7.0.27" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.27": - "integrity" "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" - "version" "7.0.27" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.5": - "integrity" "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" - "version" "7.0.27" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.6": - "integrity" "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" - "version" "7.0.27" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@>=5.0.0": - "integrity" "sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.2.6.tgz" - "version" "8.2.6" - dependencies: - "colorette" "^1.2.1" - "nanoid" "^3.1.20" - "source-map" "^0.6.1" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"prepend-http@^1.0.1": - "integrity" "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" - "version" "1.0.4" - -"prepend-http@^2.0.0": - "integrity" "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - "version" "2.0.0" - -"prettier-linter-helpers@^1.0.0": - "integrity" "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==" - "resolved" "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "fast-diff" "^1.1.2" - -"prettier@^2.0.4", "prettier@>= 1.13.0": - "integrity" "sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==" - "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz" - "version" "2.0.4" - -"private@^0.1.8", "private@~0.1.5": - "integrity" "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - "resolved" "https://registry.npmjs.org/private/-/private-0.1.8.tgz" - "version" "0.1.8" - -"process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"process@^0.11.10": - "integrity" "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - "version" "0.11.10" - -"process@~0.5.1": - "integrity" "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - "resolved" "https://registry.npmjs.org/process/-/process-0.5.2.tgz" - "version" "0.5.2" - -"progress@^2.0.0": - "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - "version" "2.0.3" - -"promise-inflight@^1.0.1": - "integrity" "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - "version" "1.0.1" - -"promise-polyfill@^8.1.0": - "integrity" "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" - "resolved" "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz" - "version" "8.1.3" - -"proto-list@~1.2.1": - "integrity" "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - "resolved" "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - "version" "1.2.4" - -"proxy-addr@~2.0.5": - "integrity" "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==" - "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz" - "version" "2.0.6" - dependencies: - "forwarded" "~0.1.2" - "ipaddr.js" "1.9.1" - -"prr@~1.0.1": - "integrity" "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" - "version" "1.0.1" - -"pseudo-classes@^1.0.0": - "integrity" "sha1-YKabZzlcNv8RnE0chuGYF4Uga5Y=" - "resolved" "https://registry.npmjs.org/pseudo-classes/-/pseudo-classes-1.0.0.tgz" - "version" "1.0.0" - -"pseudo-elements@^1.1.0": - "integrity" "sha1-m6bdisPOHz19NtQ1WqPijQg5Hyg=" - "resolved" "https://registry.npmjs.org/pseudo-elements/-/pseudo-elements-1.1.0.tgz" - "version" "1.1.0" - -"pseudomap@^1.0.2": - "integrity" "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" - "version" "1.0.2" - -"public-encrypt@^4.0.0": - "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" - "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "bn.js" "^4.1.0" - "browserify-rsa" "^4.0.0" - "create-hash" "^1.1.0" - "parse-asn1" "^5.0.0" - "randombytes" "^2.0.1" - "safe-buffer" "^5.1.2" - -"pump@^2.0.0": - "integrity" "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==" - "resolved" "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"pump@^3.0.0": - "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" - "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"pumpify@^1.3.3": - "integrity" "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==" - "resolved" "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "duplexify" "^3.6.0" - "inherits" "^2.0.3" - "pump" "^2.0.0" - -"punycode@^1.2.4": - "integrity" "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - "version" "1.4.1" - -"punycode@^2.1.0": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"punycode@1.3.2": - "integrity" "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" - "version" "1.3.2" - -"q@^1.1.2": - "integrity" "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" - "version" "1.5.1" - -"qs@6.7.0": - "integrity" "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" - "version" "6.7.0" - -"query-string@^5.0.1": - "integrity" "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==" - "resolved" "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "decode-uri-component" "^0.2.0" - "object-assign" "^4.1.0" - "strict-uri-encode" "^1.0.0" - -"query-string@^6.8.1": - "integrity" "sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA==" - "resolved" "https://registry.npmjs.org/query-string/-/query-string-6.12.1.tgz" - "version" "6.12.1" - dependencies: - "decode-uri-component" "^0.2.0" - "split-on-first" "^1.0.0" - "strict-uri-encode" "^2.0.0" - -"querystring-es3@^0.2.0": - "integrity" "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - "resolved" "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" - "version" "0.2.1" - -"querystring@0.2.0": - "integrity" "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" - "version" "0.2.0" - -"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5": - "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" - "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "safe-buffer" "^5.1.0" - -"randomfill@^1.0.3": - "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" - "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "randombytes" "^2.0.5" - "safe-buffer" "^5.1.0" - -"range-parser@~1.2.1": - "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - "version" "1.2.1" - -"raw-body@2.4.0": - "integrity" "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==" - "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz" - "version" "2.4.0" - dependencies: - "bytes" "3.1.0" - "http-errors" "1.7.2" - "iconv-lite" "0.4.24" - "unpipe" "1.0.0" - -"read-pkg-up@^1.0.1": - "integrity" "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "find-up" "^1.0.0" - "read-pkg" "^1.0.0" - -"read-pkg@^1.0.0": - "integrity" "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "load-json-file" "^1.0.0" - "normalize-package-data" "^2.3.2" - "path-type" "^1.0.0" - -"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.1.5", "readable-stream@^2.2.2", "readable-stream@^2.3.0", "readable-stream@^2.3.3", "readable-stream@^2.3.5", "readable-stream@^2.3.6", "readable-stream@~2.3.6", "readable-stream@1 || 2": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^3.6.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readdirp@~3.4.0": - "integrity" "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz" - "version" "3.4.0" - dependencies: - "picomatch" "^2.2.1" - -"recast@~0.11.12": - "integrity" "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=" - "resolved" "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz" - "version" "0.11.23" - dependencies: - "ast-types" "0.9.6" - "esprima" "~3.1.0" - "private" "~0.1.5" - "source-map" "~0.5.0" - -"redent@^1.0.0": - "integrity" "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=" - "resolved" "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "indent-string" "^2.1.0" - "strip-indent" "^1.0.1" - -"regenerate-unicode-properties@^8.2.0": - "integrity" "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==" - "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz" - "version" "8.2.0" - dependencies: - "regenerate" "^1.4.0" - -"regenerate@^1.4.0": - "integrity" "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" - "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz" - "version" "1.4.0" - -"regenerator-runtime@^0.11.0": - "integrity" "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz" - "version" "0.11.1" - -"regenerator-runtime@^0.13.3": - "integrity" "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz" - "version" "0.13.5" - -"regenerator-runtime@^0.13.4": - "integrity" "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz" - "version" "0.13.5" - -"regenerator-transform@^0.14.2": - "integrity" "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==" - "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz" - "version" "0.14.4" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-idents@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-4.0.1.tgz" + integrity sha512-43S/VNdF6II0NZ31YxcvNYq4gfURlPAAsJW/z84avBXQCaP4I4qRHUH18slW/SOlJbcxxCobflPNUApYDddS7A== + dependencies: + cssnano-util-same-parent "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@^6.5.0: + version "6.7.0" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-idents@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-4.0.2.tgz" + integrity sha512-Tz70Ri10TclPoCtFfftjFVddx3fZGUkr0dEDbIEfbYhFUOFQZZ77TEqRrU0e6TvAvF+Wa5VVzYTpFpq0uwFFzw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-round-subpixels@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/postcss-round-subpixels/-/postcss-round-subpixels-1.2.0.tgz" + integrity sha1-4h1qxZUuGF+b3ACLlPAE/lCdChE= + dependencies: + postcss "^5.0.2" + postcss-value-parser "^3.1.2" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz" + integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-unprefix@^2.1.3: + version "2.1.4" + resolved "https://registry.npmjs.org/postcss-unprefix/-/postcss-unprefix-2.1.4.tgz" + integrity sha512-s+muBiGIMx3RvgPTtPBnSrfvIBHJ2Zx16QZf/VDB/sAxdYP6FIzci8d1gLh0+9psu5W6zVtCbU5micNt6Zh3cg== + dependencies: + autoprefixer "^9.4.3" + known-css-properties "^0.11.0" + normalize-range "^0.1.2" + postcss-selector-parser "^5.0.0" + postcss-value-parser "^3.3.1" + pseudo-classes "^1.0.0" + pseudo-elements "^1.1.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.1.2, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz" + integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-zindex@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-4.0.1.tgz" + integrity sha512-d/8BlQcUdEugZNRM9AdCA2V4fqREUtn/wcixLN3L6ITgc2P/FMcVVYz8QZkhItWT9NB5qr8wuN2dJCE4/+dlrA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss@>=5.0.0: + version "8.2.6" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.2.6.tgz" + integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== + dependencies: + colorette "^1.2.1" + nanoid "^3.1.20" + source-map "^0.6.1" + +postcss@^5.0.2: + version "5.2.18" + resolved "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.10, postcss@^6.0.9: + version "6.0.23" + resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.27" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz" + integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz" + integrity sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w== + +private@^0.1.8, private@~0.1.5: + version "0.1.8" + resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.npmjs.org/process/-/process-0.5.2.tgz" + integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-polyfill@^8.1.0: + version "8.1.3" + resolved "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz" + integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudo-classes@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/pseudo-classes/-/pseudo-classes-1.0.0.tgz" + integrity sha1-YKabZzlcNv8RnE0chuGYF4Uga5Y= + +pseudo-elements@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/pseudo-elements/-/pseudo-elements-1.1.0.tgz" + integrity sha1-m6bdisPOHz19NtQ1WqPijQg5Hyg= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^6.8.1: + version "6.12.1" + resolved "https://registry.npmjs.org/query-string/-/query-string-6.12.1.tgz" + integrity sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +recast@~0.11.12: + version "0.11.23" + resolved "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz" + integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== dependencies: "@babel/runtime" "^7.8.4" - "private" "^0.1.8" + private "^0.1.8" -"regex-not@^1.0.0", "regex-not@^1.0.2": - "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" - "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - "version" "1.0.2" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: - "extend-shallow" "^3.0.2" - "safe-regex" "^1.1.0" + extend-shallow "^3.0.2" + safe-regex "^1.1.0" -"regexpp@^3.0.0", "regexpp@^3.1.0": - "integrity" "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" - "version" "3.1.0" +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -"regexpu-core@^4.7.0": - "integrity" "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==" - "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz" - "version" "4.7.0" +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== dependencies: - "regenerate" "^1.4.0" - "regenerate-unicode-properties" "^8.2.0" - "regjsgen" "^0.5.1" - "regjsparser" "^0.6.4" - "unicode-match-property-ecmascript" "^1.0.4" - "unicode-match-property-value-ecmascript" "^1.2.0" + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" -"regjsgen@^0.5.1": - "integrity" "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" - "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz" - "version" "0.5.1" +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== -"regjsparser@^0.6.4": - "integrity" "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==" - "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz" - "version" "0.6.4" +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: - "jsesc" "~0.5.0" + jsesc "~0.5.0" -"relateurl@0.2.x": - "integrity" "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - "resolved" "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" - "version" "0.2.7" +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -"repeat-element@^1.1.2": - "integrity" "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" - "version" "1.1.3" +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= -"repeat-string@^1.6.1": - "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - "version" "1.6.1" +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -"repeating@^2.0.0": - "integrity" "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=" - "resolved" "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" - "version" "2.0.1" +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: - "is-finite" "^1.0.0" + is-finite "^1.0.0" -"require-directory@^2.1.1": - "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - "version" "2.1.1" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -"require-main-filename@^2.0.0": - "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - "version" "2.0.0" +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -"resolve-cwd@^2.0.0": - "integrity" "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=" - "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz" - "version" "2.0.0" +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: - "resolve-from" "^3.0.0" + resolve-from "^3.0.0" -"resolve-dir@^1.0.0", "resolve-dir@^1.0.1": - "integrity" "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=" - "resolved" "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" - "version" "1.0.1" +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= dependencies: - "expand-tilde" "^2.0.0" - "global-modules" "^1.0.0" + expand-tilde "^2.0.0" + global-modules "^1.0.0" -"resolve-from@^3.0.0": - "integrity" "sha1-six699nWiBvItuZTM17rywoYh0g=" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" - "version" "3.0.0" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -"resolve-url@^0.2.1": - "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - "version" "0.2.1" +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -"resolve@^1.10.0", "resolve@^1.3.2": - "integrity" "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz" - "version" "1.15.1" +resolve@^1.10.0, resolve@^1.3.2: + version "1.15.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: - "path-parse" "^1.0.6" + path-parse "^1.0.6" -"responselike@1.0.2": - "integrity" "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=" - "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - "version" "1.0.2" +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: - "lowercase-keys" "^1.0.0" + lowercase-keys "^1.0.0" -"restore-cursor@^3.1.0": - "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - "version" "3.1.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" + onetime "^5.1.0" + signal-exit "^3.0.2" -"ret@~0.1.10": - "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - "version" "0.1.15" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -"rgb-regex@^1.0.1": - "integrity" "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - "resolved" "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" - "version" "1.0.1" +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= -"rgba-regex@^1.0.0": - "integrity" "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - "resolved" "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" - "version" "1.0.0" +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -"rimraf@^2.5.4", "rimraf@^2.6.3", "rimraf@2.6.3": - "integrity" "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" - "version" "2.6.3" +rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.3: + version "2.6.3" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: - "glob" "^7.1.3" + glob "^7.1.3" -"ripemd160@^2.0.0", "ripemd160@^2.0.1": - "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" - "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" - "version" "2.0.2" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" + hash-base "^3.0.0" + inherits "^2.0.1" -"run-async@^2.4.0": - "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - "version" "2.4.1" +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -"run-queue@^1.0.0", "run-queue@^1.0.3": - "integrity" "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=" - "resolved" "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz" - "version" "1.0.3" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: - "aproba" "^1.1.1" + aproba "^1.1.1" -"rusha@^0.8.13": - "integrity" "sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo=" - "resolved" "https://registry.npmjs.org/rusha/-/rusha-0.8.13.tgz" - "version" "0.8.13" +rusha@^0.8.13: + version "0.8.13" + resolved "https://registry.npmjs.org/rusha/-/rusha-0.8.13.tgz" + integrity sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo= -"rxjs@^6.5.3": - "integrity" "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz" - "version" "6.5.5" +rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== dependencies: - "tslib" "^1.9.0" + tslib "^1.9.0" -"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safe-buffer@^5.2.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" +safe-buffer@^5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safe-regex@^1.1.0": - "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" - "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - "version" "1.1.0" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: - "ret" "~0.1.10" + ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -"sass-unused@^0.3.0": - "integrity" "sha512-fGNcUpDeSFwnN+BTQ251iM77Py8awPXc96vSE3TpvMcgbC90IrohonRb4oxWX/KzHpezkmUddS8/t04R+yIB8w==" - "resolved" "https://registry.npmjs.org/sass-unused/-/sass-unused-0.3.0.tgz" - "version" "0.3.0" +sass-unused@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/sass-unused/-/sass-unused-0.3.0.tgz" + integrity sha512-fGNcUpDeSFwnN+BTQ251iM77Py8awPXc96vSE3TpvMcgbC90IrohonRb4oxWX/KzHpezkmUddS8/t04R+yIB8w== dependencies: - "glob" "^7.0.5" - "gonzales-pe" "^4.2.3" + glob "^7.0.5" + gonzales-pe "^4.2.3" -"sax@>=0.6.0", "sax@~1.2.4": - "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" - "version" "1.2.4" +sax@>=0.6.0, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -"schema-utils@^0.4.0": - "integrity" "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==" - "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz" - "version" "0.4.7" +schema-utils@^0.4.0: + version "0.4.7" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== dependencies: - "ajv" "^6.1.0" - "ajv-keywords" "^3.1.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" -"schema-utils@^1.0.0": - "integrity" "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==" - "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" - "version" "1.0.0" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== dependencies: - "ajv" "^6.1.0" - "ajv-errors" "^1.0.0" - "ajv-keywords" "^3.1.0" + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" -"schema-utils@^2.6.5": - "integrity" "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==" - "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz" - "version" "2.6.5" +schema-utils@^2.6.5: + version "2.6.5" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz" + integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ== dependencies: - "ajv" "^6.12.0" - "ajv-keywords" "^3.4.1" + ajv "^6.12.0" + ajv-keywords "^3.4.1" -"seek-bzip@^1.0.5": - "integrity" "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=" - "resolved" "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz" - "version" "1.0.5" +seek-bzip@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz" + integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w= dependencies: - "commander" "~2.8.1" + commander "~2.8.1" -"semver-regex@^2.0.0": - "integrity" "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" - "resolved" "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz" - "version" "2.0.0" +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== -"semver-truncate@^1.1.2": - "integrity" "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=" - "resolved" "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz" - "version" "1.1.2" +semver-truncate@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz" + integrity sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g= dependencies: - "semver" "^5.3.0" + semver "^5.3.0" -"semver@^5.3.0", "semver@^5.4.1", "semver@^5.5.0", "semver@^5.6.0", "semver@2 || 3 || 4 || 5": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -"semver@^7.2.1": - "integrity" "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz" - "version" "7.3.2" +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -"semver@^7.3.2": - "integrity" "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz" - "version" "7.3.2" +semver@^7.2.1, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -"semver@7.0.0": - "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" - "version" "7.0.0" - -"send@0.17.1": - "integrity" "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==" - "resolved" "https://registry.npmjs.org/send/-/send-0.17.1.tgz" - "version" "0.17.1" +send@0.17.1: + version "0.17.1" + resolved "https://registry.npmjs.org/send/-/send-0.17.1.tgz" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: - "debug" "2.6.9" - "depd" "~1.1.2" - "destroy" "~1.0.4" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "etag" "~1.8.1" - "fresh" "0.5.2" - "http-errors" "~1.7.2" - "mime" "1.6.0" - "ms" "2.1.1" - "on-finished" "~2.3.0" - "range-parser" "~1.2.1" - "statuses" "~1.5.0" + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" -"serialize-error@^3.0.0": - "integrity" "sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A==" - "resolved" "https://registry.npmjs.org/serialize-error/-/serialize-error-3.0.0.tgz" - "version" "3.0.0" +serialize-error@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-3.0.0.tgz" + integrity sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A== -"serialize-javascript@^2.1.2": - "integrity" "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" - "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz" - "version" "2.1.2" +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -"serve-static@1.14.1": - "integrity" "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==" - "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz" - "version" "1.14.1" +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "parseurl" "~1.3.3" - "send" "0.17.1" + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" -"set-blocking@^2.0.0": - "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -"set-value@^2.0.0", "set-value@^2.0.1": - "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" - "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - "version" "2.0.1" +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: - "extend-shallow" "^2.0.1" - "is-extendable" "^0.1.1" - "is-plain-object" "^2.0.3" - "split-string" "^3.0.1" + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" -"setimmediate@^1.0.4": - "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - "version" "1.0.5" +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -"setprototypeof@1.1.1": - "integrity" "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" - "version" "1.1.1" +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -"sha.js@^2.4.0", "sha.js@^2.4.8": - "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" - "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - "version" "2.4.11" +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" + inherits "^2.0.1" + safe-buffer "^5.0.1" -"shebang-command@^1.2.0": - "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - "version" "1.2.0" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: - "shebang-regex" "^1.0.0" + shebang-regex "^1.0.0" -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: - "shebang-regex" "^3.0.0" + shebang-regex "^3.0.0" -"shebang-regex@^1.0.0": - "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - "version" "1.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -"signal-exit@^3.0.0", "signal-exit@^3.0.2": - "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - "version" "3.0.3" +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -"simple-swizzle@^0.2.2": - "integrity" "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=" - "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - "version" "0.2.2" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= dependencies: - "is-arrayish" "^0.3.1" + is-arrayish "^0.3.1" -"slash@^1.0.0": - "integrity" "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - "resolved" "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" - "version" "1.0.0" +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= -"slice-ansi@^2.1.0": - "integrity" "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz" - "version" "2.1.0" +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: - "ansi-styles" "^3.2.0" - "astral-regex" "^1.0.0" - "is-fullwidth-code-point" "^2.0.0" + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" -"snapdragon-node@^2.0.1": - "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" - "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - "version" "2.1.1" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: - "define-property" "^1.0.0" - "isobject" "^3.0.0" - "snapdragon-util" "^3.0.1" + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" -"snapdragon-util@^3.0.1": - "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" - "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - "version" "3.0.1" +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: - "kind-of" "^3.2.0" + kind-of "^3.2.0" -"snapdragon@^0.8.1": - "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" - "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - "version" "0.8.2" +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: - "base" "^0.11.1" - "debug" "^2.2.0" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "map-cache" "^0.2.2" - "source-map" "^0.5.6" - "source-map-resolve" "^0.5.0" - "use" "^3.1.0" + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" -"sort-keys-length@^1.0.0": - "integrity" "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=" - "resolved" "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" - "version" "1.0.1" +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" + integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= dependencies: - "sort-keys" "^1.0.0" + sort-keys "^1.0.0" -"sort-keys@^1.0.0": - "integrity" "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=" - "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" - "version" "1.1.2" +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= dependencies: - "is-plain-obj" "^1.0.0" + is-plain-obj "^1.0.0" -"sort-keys@^2.0.0": - "integrity" "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=" - "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" - "version" "2.0.0" +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: - "is-plain-obj" "^1.0.0" + is-plain-obj "^1.0.0" -"source-list-map@^2.0.0": - "integrity" "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - "resolved" "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" - "version" "2.0.1" +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -"source-map-resolve@^0.5.0": - "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" - "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - "version" "0.5.3" +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - "atob" "^2.1.2" - "decode-uri-component" "^0.2.0" - "resolve-url" "^0.2.1" - "source-map-url" "^0.4.0" - "urix" "^0.1.0" + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" -"source-map-support@^0.4.15": - "integrity" "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz" - "version" "0.4.18" +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: - "source-map" "^0.5.6" + source-map "^0.5.6" -"source-map-support@~0.5.12": - "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - "version" "0.5.19" +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" + buffer-from "^1.0.0" + source-map "^0.6.0" -"source-map-url@^0.4.0": - "integrity" "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" - "version" "0.4.0" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -"source-map@^0.5.0", "source-map@^0.5.6", "source-map@^0.5.7", "source-map@~0.5.0": - "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - "version" "0.5.7" +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -"source-map@^0.6.0", "source-map@~0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -"source-map@^0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@~0.1.38": - "integrity" "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" - "version" "0.1.43" +source-map@~0.1.38: + version "0.1.43" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" + integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= dependencies: - "amdefine" ">=0.0.4" + amdefine ">=0.0.4" -"source-map@~0.6.0": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"spdx-correct@^3.0.0": - "integrity" "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==" - "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz" - "version" "3.1.0" +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: - "spdx-expression-parse" "^3.0.0" - "spdx-license-ids" "^3.0.0" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -"spdx-exceptions@^2.1.0": - "integrity" "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" - "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz" - "version" "2.2.0" +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== -"spdx-expression-parse@^3.0.0": - "integrity" "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==" - "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz" - "version" "3.0.0" +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: - "spdx-exceptions" "^2.1.0" - "spdx-license-ids" "^3.0.0" + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" -"spdx-license-ids@^3.0.0": - "integrity" "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" - "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz" - "version" "3.0.5" +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== -"split-on-first@^1.0.0": - "integrity" "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" - "resolved" "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz" - "version" "1.1.0" +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== -"split-string@^3.0.1", "split-string@^3.0.2": - "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" - "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - "version" "3.1.0" +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: - "extend-shallow" "^3.0.0" + extend-shallow "^3.0.0" -"sprintf-js@~1.0.2": - "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -"squeak@^1.0.0": - "integrity" "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=" - "resolved" "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz" - "version" "1.3.0" +squeak@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz" + integrity sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM= dependencies: - "chalk" "^1.0.0" - "console-stream" "^0.1.1" - "lpad-align" "^1.0.1" + chalk "^1.0.0" + console-stream "^0.1.1" + lpad-align "^1.0.1" -"ssri@^6.0.1": - "integrity" "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==" - "resolved" "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz" - "version" "6.0.1" +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: - "figgy-pudding" "^3.5.1" + figgy-pudding "^3.5.1" -"stable@^0.1.8": - "integrity" "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - "resolved" "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" - "version" "0.1.8" +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -"static-extend@^0.1.1": - "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" - "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - "version" "0.1.2" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: - "define-property" "^0.2.5" - "object-copy" "^0.1.0" + define-property "^0.2.5" + object-copy "^0.1.0" -"statuses@>= 1.5.0 < 2", "statuses@~1.5.0": - "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - "version" "1.5.0" +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -"stream-browserify@^2.0.1": - "integrity" "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==" - "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" - "version" "2.0.2" +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: - "inherits" "~2.0.1" - "readable-stream" "^2.0.2" + inherits "~2.0.1" + readable-stream "^2.0.2" -"stream-each@^1.1.0": - "integrity" "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==" - "resolved" "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz" - "version" "1.2.3" +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: - "end-of-stream" "^1.1.0" - "stream-shift" "^1.0.0" + end-of-stream "^1.1.0" + stream-shift "^1.0.0" -"stream-http@^2.7.2": - "integrity" "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==" - "resolved" "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" - "version" "2.8.3" +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: - "builtin-status-codes" "^3.0.0" - "inherits" "^2.0.1" - "readable-stream" "^2.3.6" - "to-arraybuffer" "^1.0.0" - "xtend" "^4.0.0" + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" -"stream-shift@^1.0.0": - "integrity" "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - "resolved" "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" - "version" "1.0.1" +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -"strict-uri-encode@^1.0.0": - "integrity" "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" - "version" "1.1.0" +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -"strict-uri-encode@^2.0.0": - "integrity" "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" - "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz" - "version" "2.0.0" +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= -"strictdom@^1.0.1": - "integrity" "sha1-GJ3pFkn3PUTVm4Qy76aO+dJllGA=" - "resolved" "https://registry.npmjs.org/strictdom/-/strictdom-1.0.1.tgz" - "version" "1.0.1" +strictdom@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/strictdom/-/strictdom-1.0.1.tgz" + integrity sha1-GJ3pFkn3PUTVm4Qy76aO+dJllGA= -"string_decoder@^1.0.0", "string_decoder@^1.1.1", "string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" +string-replace-webpack-plugin@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/string-replace-webpack-plugin/-/string-replace-webpack-plugin-0.1.3.tgz" + integrity sha1-c8ZX51nWbP6Arh4M8JGqJW0OcVw= dependencies: - "safe-buffer" "~5.1.0" - -"string-replace-webpack-plugin@^0.1.3": - "integrity" "sha1-c8ZX51nWbP6Arh4M8JGqJW0OcVw=" - "resolved" "https://registry.npmjs.org/string-replace-webpack-plugin/-/string-replace-webpack-plugin-0.1.3.tgz" - "version" "0.1.3" - dependencies: - "async" "~0.2.10" - "loader-utils" "~0.2.3" + async "~0.2.10" + loader-utils "~0.2.3" optionalDependencies: - "css-loader" "^0.9.1" - "file-loader" "^0.8.1" - "style-loader" "^0.8.3" + css-loader "^0.9.1" + file-loader "^0.8.1" + style-loader "^0.8.3" -"string-width@^3.0.0", "string-width@^3.1.0": - "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - "version" "3.1.0" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: - "emoji-regex" "^7.0.1" - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^5.1.0" + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" -"string-width@^4.1.0", "string-width@^4.2.0": - "integrity" "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" - "version" "4.2.0" +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" -"string.prototype.trimend@^1.0.0": - "integrity" "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==" - "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz" - "version" "1.0.1" +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== dependencies: - "define-properties" "^1.1.3" - "es-abstract" "^1.17.5" + define-properties "^1.1.3" + es-abstract "^1.17.5" -"string.prototype.trimleft@^2.1.1": - "integrity" "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==" - "resolved" "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz" - "version" "2.1.2" +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== dependencies: - "define-properties" "^1.1.3" - "es-abstract" "^1.17.5" - "string.prototype.trimstart" "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" -"string.prototype.trimright@^2.1.1": - "integrity" "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==" - "resolved" "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz" - "version" "2.1.2" +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== dependencies: - "define-properties" "^1.1.3" - "es-abstract" "^1.17.5" - "string.prototype.trimend" "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" -"string.prototype.trimstart@^1.0.0": - "integrity" "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==" - "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz" - "version" "1.0.1" +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== dependencies: - "define-properties" "^1.1.3" - "es-abstract" "^1.17.5" + define-properties "^1.1.3" + es-abstract "^1.17.5" -"strip-ansi@^3.0.0": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" +string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: - "ansi-regex" "^2.0.0" + safe-buffer "~5.1.0" -"strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0": - "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - "version" "5.2.0" +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: - "ansi-regex" "^4.1.0" + ansi-regex "^2.0.0" -"strip-ansi@^6.0.0": - "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - "version" "6.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - "ansi-regex" "^5.0.0" + ansi-regex "^4.1.0" -"strip-bom@^2.0.0": - "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" - "version" "2.0.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: - "is-utf8" "^0.2.0" + ansi-regex "^5.0.0" -"strip-dirs@^2.0.0": - "integrity" "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==" - "resolved" "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" - "version" "2.1.0" +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: - "is-natural-number" "^4.0.1" + is-utf8 "^0.2.0" -"strip-eof@^1.0.0": - "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - "version" "1.0.0" - -"strip-indent@^1.0.1": - "integrity" "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=" - "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" - "version" "1.0.1" +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== dependencies: - "get-stdin" "^4.0.1" + is-natural-number "^4.0.1" -"strip-json-comments@^3.0.1", "strip-json-comments@^3.1.0": - "integrity" "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz" - "version" "3.1.0" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -"strip-outer@^1.0.0": - "integrity" "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==" - "resolved" "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" - "version" "1.0.1" +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= dependencies: - "escape-string-regexp" "^1.0.2" + get-stdin "^4.0.1" -"style-loader@^0.8.3": - "integrity" "sha1-9Pkut9tjdodI8VBlzWcA9aHIU1c=" - "resolved" "https://registry.npmjs.org/style-loader/-/style-loader-0.8.3.tgz" - "version" "0.8.3" +strip-json-comments@^3.0.1, strip-json-comments@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== + +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: - "loader-utils" "^0.2.5" + escape-string-regexp "^1.0.2" -"stylehacks@^4.0.0": - "integrity" "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==" - "resolved" "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz" - "version" "4.0.3" +style-loader@^0.8.3: + version "0.8.3" + resolved "https://registry.npmjs.org/style-loader/-/style-loader-0.8.3.tgz" + integrity sha1-9Pkut9tjdodI8VBlzWcA9aHIU1c= dependencies: - "browserslist" "^4.0.0" - "postcss" "^7.0.0" - "postcss-selector-parser" "^3.0.0" + loader-utils "^0.2.5" -"supports-color@^2.0.0": - "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - "version" "2.0.0" - -"supports-color@^3.2.3": - "integrity" "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" - "version" "3.2.3" +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== dependencies: - "has-flag" "^1.0.0" + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" -"supports-color@^5.3.0", "supports-color@^5.4.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" +supports-color@6.1.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: - "has-flag" "^3.0.0" + has-flag "^3.0.0" -"supports-color@^6.1.0": - "integrity" "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" - "version" "6.1.0" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: - "has-flag" "^3.0.0" + has-flag "^1.0.0" -"supports-color@^7.1.0": - "integrity" "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" - "version" "7.1.0" +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: - "has-flag" "^4.0.0" + has-flag "^3.0.0" -"supports-color@6.1.0": - "integrity" "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" - "version" "6.1.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== dependencies: - "has-flag" "^3.0.0" + has-flag "^4.0.0" -"svgo@^1.0.0": - "integrity" "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==" - "resolved" "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" - "version" "1.3.2" +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== dependencies: - "chalk" "^2.4.1" - "coa" "^2.0.2" - "css-select" "^2.0.0" - "css-select-base-adapter" "^0.1.1" - "css-tree" "1.0.0-alpha.37" - "csso" "^4.0.2" - "js-yaml" "^3.13.1" - "mkdirp" "~0.5.1" - "object.values" "^1.1.0" - "sax" "~1.2.4" - "stable" "^0.1.8" - "unquote" "~1.1.1" - "util.promisify" "~1.0.0" + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" -"table@^5.2.3": - "integrity" "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==" - "resolved" "https://registry.npmjs.org/table/-/table-5.4.6.tgz" - "version" "5.4.6" +table@^5.2.3: + version "5.4.6" + resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== dependencies: - "ajv" "^6.10.2" - "lodash" "^4.17.14" - "slice-ansi" "^2.1.0" - "string-width" "^3.0.0" + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" -"tapable@^1.0.0", "tapable@^1.1.3": - "integrity" "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - "resolved" "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" - "version" "1.1.3" +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -"tar-stream@^1.5.2": - "integrity" "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==" - "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" - "version" "1.6.2" +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== dependencies: - "bl" "^1.0.0" - "buffer-alloc" "^1.2.0" - "end-of-stream" "^1.0.0" - "fs-constants" "^1.0.0" - "readable-stream" "^2.3.0" - "to-buffer" "^1.1.1" - "xtend" "^4.0.0" + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" -"temp-dir@^1.0.0": - "integrity" "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" - "resolved" "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" - "version" "1.0.0" +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= -"tempfile@^2.0.0": - "integrity" "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=" - "resolved" "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz" - "version" "2.0.0" +tempfile@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz" + integrity sha1-awRGhWqbERTRhW/8vlCczLCXcmU= dependencies: - "temp-dir" "^1.0.0" - "uuid" "^3.0.1" + temp-dir "^1.0.0" + uuid "^3.0.1" -"terser-webpack-plugin@^1.1.0", "terser-webpack-plugin@^1.4.3": - "integrity" "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==" - "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz" - "version" "1.4.3" +terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: - "cacache" "^12.0.2" - "find-cache-dir" "^2.1.0" - "is-wsl" "^1.1.0" - "schema-utils" "^1.0.0" - "serialize-javascript" "^2.1.2" - "source-map" "^0.6.1" - "terser" "^4.1.2" - "webpack-sources" "^1.4.0" - "worker-farm" "^1.7.0" + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" -"terser@^4.1.2": - "integrity" "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==" - "resolved" "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz" - "version" "4.8.0" +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: - "commander" "^2.20.0" - "source-map" "~0.6.1" - "source-map-support" "~0.5.12" + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" -"text-table@^0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -"through@^2.3.6", "through@^2.3.8", "through@~2.3.6": - "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - "version" "2.3.8" - -"through2@^2.0.0": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" + readable-stream "~2.3.6" + xtend "~4.0.1" -"timed-out@^4.0.0", "timed-out@^4.0.1": - "integrity" "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" - "version" "4.0.1" +through@^2.3.6, through@^2.3.8, through@~2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -"timers-browserify@^2.0.4": - "integrity" "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==" - "resolved" "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz" - "version" "2.0.11" +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== dependencies: - "setimmediate" "^1.0.4" + setimmediate "^1.0.4" -"timm@^1.6.1": - "integrity" "sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw==" - "resolved" "https://registry.npmjs.org/timm/-/timm-1.6.2.tgz" - "version" "1.6.2" +timm@^1.6.1: + version "1.6.2" + resolved "https://registry.npmjs.org/timm/-/timm-1.6.2.tgz" + integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw== -"timsort@^0.3.0": - "integrity" "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - "resolved" "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" - "version" "0.3.0" +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -"tinycolor2@^1.4.1": - "integrity" "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" - "resolved" "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz" - "version" "1.4.1" +tinycolor2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= -"tmp@^0.0.33": - "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - "version" "0.0.33" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: - "os-tmpdir" "~1.0.2" + os-tmpdir "~1.0.2" -"to-arraybuffer@^1.0.0": - "integrity" "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - "resolved" "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" - "version" "1.0.1" +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= -"to-buffer@^1.1.1": - "integrity" "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - "resolved" "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" - "version" "1.1.1" +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== -"to-fast-properties@^1.0.3": - "integrity" "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" - "version" "1.0.3" +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= -"to-fast-properties@^2.0.0": - "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - "version" "2.0.0" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -"to-object-path@^0.3.0": - "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" - "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - "version" "0.3.0" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: - "kind-of" "^3.0.2" + kind-of "^3.0.2" -"to-regex-range@^2.1.0": - "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - "version" "2.1.1" +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" + is-number "^3.0.0" + repeat-string "^1.6.1" -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: - "is-number" "^7.0.0" + is-number "^7.0.0" -"to-regex@^3.0.1", "to-regex@^3.0.2": - "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" - "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - "version" "3.0.2" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "regex-not" "^1.0.2" - "safe-regex" "^1.1.0" + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" -"toidentifier@1.0.0": - "integrity" "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" - "version" "1.0.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -"trim-newlines@^1.0.0": - "integrity" "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - "resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" - "version" "1.0.0" +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= -"trim-repeated@^1.0.0": - "integrity" "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=" - "resolved" "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" - "version" "1.0.0" +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" + integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= dependencies: - "escape-string-regexp" "^1.0.2" + escape-string-regexp "^1.0.2" -"trim-right@^1.0.1": - "integrity" "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - "resolved" "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz" - "version" "1.0.1" +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -"trim@^0.0.1": - "integrity" "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - "resolved" "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz" - "version" "0.0.1" +trim@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= -"tryer@^1.0.1": - "integrity" "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - "resolved" "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz" - "version" "1.0.1" +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== -"tslib@^1.8.1", "tslib@^1.9.0": - "integrity" "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz" - "version" "1.13.0" +tslib@^1.8.1, tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -"tsutils@^3.17.1": - "integrity" "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==" - "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz" - "version" "3.17.1" +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== dependencies: - "tslib" "^1.8.1" + tslib "^1.8.1" -"tty-browserify@0.0.0": - "integrity" "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - "resolved" "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" - "version" "0.0.0" +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= -"tunnel-agent@^0.6.0": - "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" - "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - "version" "0.6.0" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: - "safe-buffer" "^5.0.1" + safe-buffer "^5.0.1" -"type-check@^0.4.0", "type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - "prelude-ls" "^1.2.1" + prelude-ls "^1.2.1" -"type-fest@^0.11.0": - "integrity" "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz" - "version" "0.11.0" +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== -"type-fest@^0.5.1": - "integrity" "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz" - "version" "0.5.2" +type-fest@^0.5.1: + version "0.5.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz" + integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== -"type-fest@^0.8.1": - "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - "version" "0.8.1" +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -"type-is@~1.6.17", "type-is@~1.6.18": - "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" - "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - "version" "1.6.18" +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: - "media-typer" "0.3.0" - "mime-types" "~2.1.24" + media-typer "0.3.0" + mime-types "~2.1.24" -"typedarray@^0.0.6": - "integrity" "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - "version" "0.0.6" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -"typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@3.9.3": - "integrity" "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz" - "version" "3.9.3" +typescript@3.9.3: + version "3.9.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz" + integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ== -"uglify-js@3.4.x": - "integrity" "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==" - "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz" - "version" "3.4.10" +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== dependencies: - "commander" "~2.19.0" - "source-map" "~0.6.1" + commander "~2.19.0" + source-map "~0.6.1" -"uglify-template-string-loader@^1.1.0": - "integrity" "sha512-EHJx8m0aIHlwX5xlJd2xPYIFvLrPkVK5X8zpVxSNTmu7KoT2eSg1TNlwZS+JS65+dwJXC4rC5mc+F4UVe2rckw==" - "resolved" "https://registry.npmjs.org/uglify-template-string-loader/-/uglify-template-string-loader-1.1.1.tgz" - "version" "1.1.1" +uglify-template-string-loader@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/uglify-template-string-loader/-/uglify-template-string-loader-1.1.1.tgz" + integrity sha512-EHJx8m0aIHlwX5xlJd2xPYIFvLrPkVK5X8zpVxSNTmu7KoT2eSg1TNlwZS+JS65+dwJXC4rC5mc+F4UVe2rckw== -"unbzip2-stream@^1.0.9": - "integrity" "sha512-sgDYfSDPMsA4Hr2/w7vOlrJBlwzmyakk1+hW8ObLvxSp0LA36LcL2XItGvOT3OSblohSdevMuT8FQjLsqyy4sA==" - "resolved" "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.1.tgz" - "version" "1.4.1" +unbzip2-stream@^1.0.9: + version "1.4.1" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.1.tgz" + integrity sha512-sgDYfSDPMsA4Hr2/w7vOlrJBlwzmyakk1+hW8ObLvxSp0LA36LcL2XItGvOT3OSblohSdevMuT8FQjLsqyy4sA== dependencies: - "buffer" "^5.2.1" - "through" "^2.3.8" + buffer "^5.2.1" + through "^2.3.8" -"unicode-canonical-property-names-ecmascript@^1.0.4": - "integrity" "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz" - "version" "1.0.4" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== -"unicode-match-property-ecmascript@^1.0.4": - "integrity" "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==" - "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz" - "version" "1.0.4" +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: - "unicode-canonical-property-names-ecmascript" "^1.0.4" - "unicode-property-aliases-ecmascript" "^1.0.4" + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" -"unicode-match-property-value-ecmascript@^1.2.0": - "integrity" "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz" - "version" "1.2.0" +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== -"unicode-property-aliases-ecmascript@^1.0.4": - "integrity" "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz" - "version" "1.1.0" +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== -"union-value@^1.0.0": - "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" - "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - "version" "1.0.1" +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: - "arr-union" "^3.1.0" - "get-value" "^2.0.6" - "is-extendable" "^0.1.1" - "set-value" "^2.0.1" + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" -"uniq@^1.0.1": - "integrity" "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - "resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" - "version" "1.0.1" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= -"uniqs@^2.0.0": - "integrity" "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - "resolved" "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" - "version" "2.0.0" +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= -"unique-filename@^1.1.1": - "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" - "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - "version" "1.1.1" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: - "unique-slug" "^2.0.0" + unique-slug "^2.0.0" -"unique-slug@^2.0.0": - "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" - "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - "version" "2.0.2" +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: - "imurmurhash" "^0.1.4" + imurmurhash "^0.1.4" -"universal-user-agent@^6.0.0": - "integrity" "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - "resolved" "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" - "version" "6.0.0" +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -"unpipe@~1.0.0", "unpipe@1.0.0": - "integrity" "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - "version" "1.0.0" +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -"unquote@~1.1.1": - "integrity" "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - "resolved" "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" - "version" "1.1.1" +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= -"unset-value@^1.0.0": - "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" - "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - "version" "1.0.0" +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: - "has-value" "^0.3.1" - "isobject" "^3.0.0" + has-value "^0.3.1" + isobject "^3.0.0" -"unused-files-webpack-plugin@^3.4.0": - "integrity" "sha512-cmukKOBdIqaM1pqThY0+jp+mYgCVyzrD8uRbKEucQwIGZcLIRn+gSRiQ7uLjcDd3Zba9NUxVGyYa7lWM4UCGeg==" - "resolved" "https://registry.npmjs.org/unused-files-webpack-plugin/-/unused-files-webpack-plugin-3.4.0.tgz" - "version" "3.4.0" +unused-files-webpack-plugin@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/unused-files-webpack-plugin/-/unused-files-webpack-plugin-3.4.0.tgz" + integrity sha512-cmukKOBdIqaM1pqThY0+jp+mYgCVyzrD8uRbKEucQwIGZcLIRn+gSRiQ7uLjcDd3Zba9NUxVGyYa7lWM4UCGeg== dependencies: - "babel-runtime" "^7.0.0-beta.3" - "glob-all" "^3.1.0" - "semver" "^5.5.0" - "util.promisify" "^1.0.0" - "warning" "^3.0.0" + babel-runtime "^7.0.0-beta.3" + glob-all "^3.1.0" + semver "^5.5.0" + util.promisify "^1.0.0" + warning "^3.0.0" -"upper-case@^1.1.1": - "integrity" "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" - "resolved" "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz" - "version" "1.1.3" +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -"uri-js@^4.2.2": - "integrity" "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" - "version" "4.2.2" +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: - "punycode" "^2.1.0" + punycode "^2.1.0" -"urix@^0.1.0": - "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - "version" "0.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -"url-parse-lax@^1.0.0": - "integrity" "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=" - "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz" - "version" "1.0.0" +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= dependencies: - "prepend-http" "^1.0.1" + prepend-http "^1.0.1" -"url-parse-lax@^3.0.0": - "integrity" "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=" - "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - "version" "3.0.0" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: - "prepend-http" "^2.0.0" + prepend-http "^2.0.0" -"url-to-options@^1.0.1": - "integrity" "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - "resolved" "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz" - "version" "1.0.1" +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= -"url@^0.11.0": - "integrity" "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=" - "resolved" "https://registry.npmjs.org/url/-/url-0.11.0.tgz" - "version" "0.11.0" +url@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: - "punycode" "1.3.2" - "querystring" "0.2.0" + punycode "1.3.2" + querystring "0.2.0" -"use@^3.1.0": - "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - "version" "3.1.1" +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -"utif@^2.0.1": - "integrity" "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==" - "resolved" "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz" - "version" "2.0.1" +utif@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz" + integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg== dependencies: - "pako" "^1.0.5" + pako "^1.0.5" -"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -"util.promisify@^1.0.0", "util.promisify@~1.0.0": - "integrity" "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==" - "resolved" "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" - "version" "1.0.1" +util.promisify@^1.0.0, util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== dependencies: - "define-properties" "^1.1.3" - "es-abstract" "^1.17.2" - "has-symbols" "^1.0.1" - "object.getownpropertydescriptors" "^2.1.0" + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" -"util@^0.11.0": - "integrity" "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==" - "resolved" "https://registry.npmjs.org/util/-/util-0.11.1.tgz" - "version" "0.11.1" +util@0.10.3: + version "0.10.3" + resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: - "inherits" "2.0.3" + inherits "2.0.1" -"util@0.10.3": - "integrity" "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=" - "resolved" "https://registry.npmjs.org/util/-/util-0.10.3.tgz" - "version" "0.10.3" +util@^0.11.0: + version "0.11.1" + resolved "https://registry.npmjs.org/util/-/util-0.11.1.tgz" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== dependencies: - "inherits" "2.0.1" + inherits "2.0.3" -"utils-merge@1.0.1": - "integrity" "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - "version" "1.0.1" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -"uuid@^3.0.1": - "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - "version" "3.4.0" +uuid@^3.0.1: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -"v8-compile-cache@^2.0.3": - "integrity" "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz" - "version" "2.1.0" +v8-compile-cache@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== -"v8-compile-cache@2.0.3": - "integrity" "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz" - "version" "2.0.3" +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== -"validate-npm-package-license@^3.0.1": - "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" - "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - "version" "3.0.4" +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: - "spdx-correct" "^3.0.0" - "spdx-expression-parse" "^3.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" -"vary@~1.1.2": - "integrity" "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - "version" "1.1.2" +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -"vendors@^1.0.0": - "integrity" "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - "resolved" "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" - "version" "1.0.4" +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== -"vm-browserify@^1.0.1": - "integrity" "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - "resolved" "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" - "version" "1.1.2" +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -"warning@^3.0.0": - "integrity" "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=" - "resolved" "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz" - "version" "3.0.0" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= dependencies: - "loose-envify" "^1.0.0" + loose-envify "^1.0.0" -"watchpack@^1.6.1": - "integrity" "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==" - "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz" - "version" "1.7.2" +watchpack-chokidar2@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: - "graceful-fs" "^4.1.2" - "neo-async" "^2.5.0" + chokidar "^2.1.8" + +watchpack@^1.6.1: + version "1.7.2" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" optionalDependencies: - "chokidar" "^3.4.0" - "watchpack-chokidar2" "^2.0.0" + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" -"webpack-bundle-analyzer@^3.0.3": - "integrity" "sha512-mETdjZ30a3Yf+NTB/wqTgACK7rAYQl5uxKK0WVTNmF0sM3Uv8s3R58YZMW7Rhu0Lk2Rmuhdj5dcH5Q76zCDVdA==" - "resolved" "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.7.0.tgz" - "version" "3.7.0" +webpack-bundle-analyzer@^3.0.3: + version "3.7.0" + resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.7.0.tgz" + integrity sha512-mETdjZ30a3Yf+NTB/wqTgACK7rAYQl5uxKK0WVTNmF0sM3Uv8s3R58YZMW7Rhu0Lk2Rmuhdj5dcH5Q76zCDVdA== dependencies: - "acorn" "^7.1.1" - "acorn-walk" "^7.1.1" - "bfj" "^6.1.1" - "chalk" "^2.4.1" - "commander" "^2.18.0" - "ejs" "^2.6.1" - "express" "^4.16.3" - "filesize" "^3.6.1" - "gzip-size" "^5.0.0" - "lodash" "^4.17.15" - "mkdirp" "^0.5.1" - "opener" "^1.5.1" - "ws" "^6.0.0" + acorn "^7.1.1" + acorn-walk "^7.1.1" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.15" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" -"webpack-cli@^3.1.0": - "integrity" "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==" - "resolved" "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz" - "version" "3.3.11" +webpack-cli@^3.1.0: + version "3.3.11" + resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== dependencies: - "chalk" "2.4.2" - "cross-spawn" "6.0.5" - "enhanced-resolve" "4.1.0" - "findup-sync" "3.0.0" - "global-modules" "2.0.0" - "import-local" "2.0.0" - "interpret" "1.2.0" - "loader-utils" "1.2.3" - "supports-color" "6.1.0" - "v8-compile-cache" "2.0.3" - "yargs" "13.2.4" + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" -"webpack-deep-scope-plugin@^1.6.0": - "integrity" "sha512-S5ZM1i7oTIVPIS1z/Fu41tqFzaXpy8vZnwEDC9I7NLj5XD8GGrDZbDXtG5FCGkHPGxtAzF4O21DKZZ76vpBGzw==" - "resolved" "https://registry.npmjs.org/webpack-deep-scope-plugin/-/webpack-deep-scope-plugin-1.6.2.tgz" - "version" "1.6.2" +webpack-deep-scope-plugin@^1.6.0: + version "1.6.2" + resolved "https://registry.npmjs.org/webpack-deep-scope-plugin/-/webpack-deep-scope-plugin-1.6.2.tgz" + integrity sha512-S5ZM1i7oTIVPIS1z/Fu41tqFzaXpy8vZnwEDC9I7NLj5XD8GGrDZbDXtG5FCGkHPGxtAzF4O21DKZZ76vpBGzw== dependencies: - "deep-scope-analyser" "^1.7.0" + deep-scope-analyser "^1.7.0" -"webpack-plugin-replace@^1.1.1": - "integrity" "sha512-1HA3etHpJW55qonJqv84o5w5GY7iqF8fqSHpTWdNwarj1llkkt4jT4QSvYs1hoaU8Lu5akDnq/spHHO5mXwo1w==" - "resolved" "https://registry.npmjs.org/webpack-plugin-replace/-/webpack-plugin-replace-1.2.0.tgz" - "version" "1.2.0" +webpack-plugin-replace@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/webpack-plugin-replace/-/webpack-plugin-replace-1.2.0.tgz" + integrity sha512-1HA3etHpJW55qonJqv84o5w5GY7iqF8fqSHpTWdNwarj1llkkt4jT4QSvYs1hoaU8Lu5akDnq/spHHO5mXwo1w== -"webpack-sources@^1.4.0", "webpack-sources@^1.4.1": - "integrity" "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==" - "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" - "version" "1.4.3" +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: - "source-list-map" "^2.0.0" - "source-map" "~0.6.1" + source-list-map "^2.0.0" + source-map "~0.6.1" -"webpack-strip-block@^0.2.0": - "integrity" "sha1-xg1KcD4O7uiJXn8avptf6RRoFHA=" - "resolved" "https://registry.npmjs.org/webpack-strip-block/-/webpack-strip-block-0.2.0.tgz" - "version" "0.2.0" +webpack-strip-block@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/webpack-strip-block/-/webpack-strip-block-0.2.0.tgz" + integrity sha1-xg1KcD4O7uiJXn8avptf6RRoFHA= dependencies: - "loader-utils" "^1.1.0" + loader-utils "^1.1.0" -"webpack@^1.4.2 || >=2.2.0", "webpack@^3.0.0 || ^4.0.0-alpha.0 || ^4.0.0", "webpack@^4.0.0", "webpack@^4.14.0", "webpack@^4.43.0", "webpack@>=2", "webpack@>=2.2.0", "webpack@>=4.0.1", "webpack@4.x.x": - "integrity" "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==" - "resolved" "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz" - "version" "4.43.0" +webpack@^4.43.0: + version "4.43.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/wasm-edit" "1.9.0" "@webassemblyjs/wasm-parser" "1.9.0" - "acorn" "^6.4.1" - "ajv" "^6.10.2" - "ajv-keywords" "^3.4.1" - "chrome-trace-event" "^1.0.2" - "enhanced-resolve" "^4.1.0" - "eslint-scope" "^4.0.3" - "json-parse-better-errors" "^1.0.2" - "loader-runner" "^2.4.0" - "loader-utils" "^1.2.3" - "memory-fs" "^0.4.1" - "micromatch" "^3.1.10" - "mkdirp" "^0.5.3" - "neo-async" "^2.6.1" - "node-libs-browser" "^2.2.1" - "schema-utils" "^1.0.0" - "tapable" "^1.1.3" - "terser-webpack-plugin" "^1.4.3" - "watchpack" "^1.6.1" - "webpack-sources" "^1.4.1" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.1" + webpack-sources "^1.4.1" -"whatwg-fetch@^3.0.0": - "integrity" "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz" - "version" "3.0.0" +whatwg-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -"which-module@^2.0.0": - "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - "version" "2.0.0" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -"which@^1.2.14": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: - "isexe" "^2.0.0" + isexe "^2.0.0" -"which@^1.2.9": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: - "isexe" "^2.0.0" + isexe "^2.0.0" -"which@^1.3.1": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== dependencies: - "isexe" "^2.0.0" + errno "~0.1.7" -"which@^2.0.1": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" +worker-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/worker-loader/-/worker-loader-2.0.0.tgz" + integrity sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw== dependencies: - "isexe" "^2.0.0" + loader-utils "^1.0.0" + schema-utils "^0.4.0" -"word-wrap@^1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"worker-farm@^1.7.0": - "integrity" "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==" - "resolved" "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz" - "version" "1.7.0" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: - "errno" "~0.1.7" + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" -"worker-loader@^2.0.0": - "integrity" "sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==" - "resolved" "https://registry.npmjs.org/worker-loader/-/worker-loader-2.0.0.tgz" - "version" "2.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: - "loader-utils" "^1.0.0" - "schema-utils" "^0.4.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" -"wrap-ansi@^5.1.0": - "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" - "version" "5.1.0" +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/write/-/write-1.0.3.tgz" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: - "ansi-styles" "^3.2.0" - "string-width" "^3.0.0" - "strip-ansi" "^5.0.0" + mkdirp "^0.5.1" -"wrap-ansi@^6.2.0": - "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - "version" "6.2.0" +ws@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" + async-limiter "~1.0.0" -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"write@1.0.3": - "integrity" "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==" - "resolved" "https://registry.npmjs.org/write/-/write-1.0.3.tgz" - "version" "1.0.3" +xhr@^2.0.1: + version "2.5.0" + resolved "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz" + integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== dependencies: - "mkdirp" "^0.5.1" + global "~4.3.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" -"ws@^6.0.0": - "integrity" "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==" - "resolved" "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz" - "version" "6.2.1" +xml-parse-from-string@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz" + integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= + +xml2js@^0.4.5: + version "0.4.23" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== dependencies: - "async-limiter" "~1.0.0" + sax ">=0.6.0" + xmlbuilder "~11.0.0" -"xhr@^2.0.1": - "integrity" "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==" - "resolved" "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz" - "version" "2.5.0" +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml-js@^0.1.3: + version "0.1.5" + resolved "https://registry.npmjs.org/yaml-js/-/yaml-js-0.1.5.tgz" + integrity sha1-oBNpAQs1WNiq7SOUYV39B4D9j6w= + +yaml@^1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@^13.1.0: + version "13.1.2" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: - "global" "~4.3.0" - "is-function" "^1.0.1" - "parse-headers" "^2.0.0" - "xtend" "^4.0.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -"xml-parse-from-string@^1.0.0": - "integrity" "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - "resolved" "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz" - "version" "1.0.1" - -"xml2js@^0.4.5": - "integrity" "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==" - "resolved" "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" - "version" "0.4.23" +yargs-parser@^18.1.1: + version "18.1.2" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz" + integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== dependencies: - "sax" ">=0.6.0" - "xmlbuilder" "~11.0.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -"xmlbuilder@~11.0.0": - "integrity" "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - "resolved" "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" - "version" "11.0.1" - -"xtend@^4.0.0", "xtend@~4.0.1": - "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - "version" "4.0.2" - -"y18n@^4.0.0": - "integrity" "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz" - "version" "4.0.0" - -"yallist@^2.1.2": - "integrity" "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" - "version" "2.1.2" - -"yallist@^3.0.2": - "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - "version" "3.1.1" - -"yaml-js@^0.1.3": - "integrity" "sha1-oBNpAQs1WNiq7SOUYV39B4D9j6w=" - "resolved" "https://registry.npmjs.org/yaml-js/-/yaml-js-0.1.5.tgz" - "version" "0.1.5" - -"yaml@^1.10.0": - "integrity" "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" - "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz" - "version" "1.10.0" - -"yargs-parser@^13.1.0": - "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - "version" "13.1.2" +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" -"yargs-parser@^18.1.1": - "integrity" "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz" - "version" "18.1.2" +yargs@^15.3.1: + version "15.3.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz" + integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.1" -"yargs@^15.3.1": - "integrity" "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz" - "version" "15.3.1" +yarn@^1.22.4: + version "1.22.4" + resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.4.tgz" + integrity sha512-oYM7hi/lIWm9bCoDMEWgffW8aiNZXCWeZ1/tGy0DWrN6vmzjCXIKu2Y21o8DYVBUtiktwKcNoxyGl/2iKLUNGA== + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= dependencies: - "cliui" "^6.0.0" - "decamelize" "^1.2.0" - "find-up" "^4.1.0" - "get-caller-file" "^2.0.1" - "require-directory" "^2.1.1" - "require-main-filename" "^2.0.0" - "set-blocking" "^2.0.0" - "string-width" "^4.2.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^18.1.1" + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" -"yargs@13.2.4": - "integrity" "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" - "version" "13.2.4" +yawn-yaml@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/yawn-yaml/-/yawn-yaml-1.5.0.tgz" + integrity sha512-sH2zX9K1QiWhWh9U19pye660qlzrEAd5c4ebw/6lqz17LZw7xYi7nqXlBoVLVtc2FZFXDKiJIsvVcKGYbLVyFQ== dependencies: - "cliui" "^5.0.0" - "find-up" "^3.0.0" - "get-caller-file" "^2.0.1" - "os-locale" "^3.1.0" - "require-directory" "^2.1.1" - "require-main-filename" "^2.0.0" - "set-blocking" "^2.0.0" - "string-width" "^3.0.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^13.1.0" - -"yarn@^1.22.4": - "integrity" "sha512-oYM7hi/lIWm9bCoDMEWgffW8aiNZXCWeZ1/tGy0DWrN6vmzjCXIKu2Y21o8DYVBUtiktwKcNoxyGl/2iKLUNGA==" - "resolved" "https://registry.npmjs.org/yarn/-/yarn-1.22.4.tgz" - "version" "1.22.4" - -"yauzl@^2.4.2": - "integrity" "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=" - "resolved" "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" - "version" "2.10.0" - dependencies: - "buffer-crc32" "~0.2.3" - "fd-slicer" "~1.1.0" - -"yawn-yaml@^1.5.0": - "integrity" "sha512-sH2zX9K1QiWhWh9U19pye660qlzrEAd5c4ebw/6lqz17LZw7xYi7nqXlBoVLVtc2FZFXDKiJIsvVcKGYbLVyFQ==" - "resolved" "https://registry.npmjs.org/yawn-yaml/-/yawn-yaml-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "js-yaml" "^3.4.2" - "lodash" "^4.17.11" - "yaml-js" "^0.1.3" + js-yaml "^3.4.2" + lodash "^4.17.11" + yaml-js "^0.1.3"