From 551bedbe6d746f51d5b1a9c8e2ca9e290e02c018 Mon Sep 17 00:00:00 2001
From: Toinane <toinane@crea-that.fr>
Date: Thu, 24 Nov 2022 12:37:15 +0100
Subject: [PATCH] v2.2.0

---
 .github/CHANGELOG.md               |    9 +
 .npmrc                             |    4 +-
 README.md                          |   10 -
 package-lock.json                  | 1325 ++++++++--------------------
 package.json                       |   14 +-
 snap/snapcraft.yaml                |    1 -
 src/browsers/colorpicker.js        |   12 +-
 src/browsers/colorsbook.js         |    4 +-
 src/browsers/preview.js            |    4 +-
 src/browsers/settings.js           |    4 +-
 src/events/colorpicker.js          |   43 +-
 src/events/colorsbook.js           |    4 +-
 src/events/picker.js               |   44 +-
 src/events/settings.js             |   10 +-
 src/main.js                        |   20 +-
 src/storage.js                     |   31 +-
 src/views/css/app-buttons.css      |    8 +-
 src/views/css/colorpicker.css      |    6 -
 src/views/js/color.class.js        |  143 +--
 src/views/js/colorpicker.class.js  |   46 +-
 src/views/js/colorpicker.events.js |   77 +-
 src/views/js/colorsbook.js         |   27 +-
 src/views/js/picker.js             |    4 +-
 src/views/js/settings.js           |   15 +-
 src/views/js/util.class.js         |   17 +-
 25 files changed, 649 insertions(+), 1233 deletions(-)

diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md
index 100f11d9..43540735 100644
--- a/.github/CHANGELOG.md
+++ b/.github/CHANGELOG.md
@@ -1,6 +1,15 @@
 # Changelog
 All releases changes will be documented in this file.
 
+# 2.2.0 - 2022-11-24
+
+## Changed
+- Updated dependencies
+- Remove Opacity feature as it's really buggy sometimes
+
+## Fixed
+- Fix issues with picker on bigger resolution
+
 ---
 # 2.0.0 - 2018-02-24
 
diff --git a/.npmrc b/.npmrc
index 37b22bfa..8a6d5dcc 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1,6 +1,6 @@
 runtime = electron
-target = 7.1.7
+target = 19.1.7
 target_arch = x64
-disturl = https://atom.io/download/atom-shell
+disturl = https://electronjs.org/headers
 export npm_config_runtime=electron
 export npm_config_build_from_source=true
diff --git a/README.md b/README.md
index 35c7a234..34a73bfa 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,6 @@ Colorpicker's menu come with a lot of cool features :
 -   [Picker](#picker): open an eyedropper who can pick a color from your desktop;
 -   [Colorsbook](#colorsbook): open Colorsbook, a color manager;
 -   [Shading](#shading): show three bar of shading — hue bar, natural bar and lightness bar;
--   [Opacity](#opacity): toggle Opacity range;
 -   [Clean Vue](#clean-vue): unshow menu, ranges and inputs;
 -   [Magic color](#magic-color): show colors from the clipboard;
 -   [Random](#random): show a random color;
@@ -79,15 +78,6 @@ bar.
 
 ---
 
-## Opacity [WIP]
-
-![Opacity gif](.github/screenshots/opacity.png)
-
-This feature is a bit special. It allows you to render the application transparent. This can be useful to see the
-appearance of a transparent color.
-
----
-
 ## Focus Mode
 
 ![Focus screenshot](.github/screenshots/focus.png)
diff --git a/package-lock.json b/package-lock.json
index 11acf609..124e92fc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,27 +1,27 @@
 {
   "name": "colorpicker",
-  "version": "2.1.0",
+  "version": "2.2.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "colorpicker",
-      "version": "2.1.0",
+      "version": "2.2.0",
       "license": "GPL-3.0",
       "dependencies": {
-        "electron-json-storage": "^4.5.0",
+        "electron-json-storage": "^4.6.0",
         "request": "^2.88.2",
         "robotjs": "github:Toinane/robotjs",
-        "semver": "^7.3.7"
+        "semver": "^7.3.8"
       },
       "devDependencies": {
-        "electron": "^18.2.3",
-        "electron-builder": "^23.0.3",
+        "electron": "^19.1.7",
+        "electron-builder": "^23.6.0",
         "standard": "^17.0.0"
       },
       "optionalDependencies": {
         "iohook": "^0.9.3",
-        "osx-mouse": "git+https://github.com/Toinane/osx-mouse",
+        "osx-mouse": "github:Toinane/osx-mouse",
         "win-mouse": "github:Toinane/win-mouse"
       }
     },
@@ -74,9 +74,9 @@
       }
     },
     "node_modules/@electron/universal": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.0.tgz",
-      "integrity": "sha512-eu20BwNsrMPKoe2bZ3/l9c78LclDvxg3PlVXrQf3L50NaUuW5M59gbPytI+V4z7/QMrohUHetQaU0ou+p1UG9Q==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz",
+      "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==",
       "dev": true,
       "dependencies": {
         "@malept/cross-spawn-promise": "^1.1.0",
@@ -318,9 +318,9 @@
       "dev": true
     },
     "node_modules/@types/minimatch": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-      "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+      "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
       "dev": true,
       "optional": true
     },
@@ -348,9 +348,9 @@
       }
     },
     "node_modules/@types/verror": {
-      "version": "1.10.5",
-      "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz",
-      "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==",
+      "version": "1.10.6",
+      "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz",
+      "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==",
       "dev": true,
       "optional": true
     },
@@ -432,15 +432,6 @@
         "ajv": "^6.9.1"
       }
     },
-    "node_modules/ansi-align": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
-      "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^4.1.0"
-      }
-    },
     "node_modules/ansi-regex": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -472,35 +463,36 @@
       "dev": true
     },
     "node_modules/app-builder-lib": {
-      "version": "23.0.3",
-      "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.0.3.tgz",
-      "integrity": "sha512-1qrtXYHXJfXhzJnMtVGjIva3067F1qYQubl2oBjI61gCBoCHvhghdYJ57XxXTQQ0VxnUhg1/Iaez87uXp8mD8w==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz",
+      "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==",
       "dev": true,
       "dependencies": {
         "@develar/schema-utils": "~2.6.5",
-        "@electron/universal": "1.2.0",
+        "@electron/universal": "1.2.1",
         "@malept/flatpak-bundler": "^0.4.0",
         "7zip-bin": "~5.1.1",
         "async-exit-hook": "^2.0.1",
         "bluebird-lst": "^1.0.9",
-        "builder-util": "23.0.2",
-        "builder-util-runtime": "9.0.0",
+        "builder-util": "23.6.0",
+        "builder-util-runtime": "9.1.1",
         "chromium-pickle-js": "^0.2.0",
-        "debug": "^4.3.2",
-        "ejs": "^3.1.6",
+        "debug": "^4.3.4",
+        "ejs": "^3.1.7",
         "electron-osx-sign": "^0.6.0",
-        "electron-publish": "23.0.2",
+        "electron-publish": "23.6.0",
         "form-data": "^4.0.0",
-        "fs-extra": "^10.0.0",
-        "hosted-git-info": "^4.0.2",
+        "fs-extra": "^10.1.0",
+        "hosted-git-info": "^4.1.0",
         "is-ci": "^3.0.0",
-        "isbinaryfile": "^4.0.8",
+        "isbinaryfile": "^4.0.10",
         "js-yaml": "^4.1.0",
         "lazy-val": "^1.0.5",
-        "minimatch": "^3.0.4",
+        "minimatch": "^3.1.2",
         "read-config-file": "6.2.0",
         "sanitize-filename": "^1.6.3",
-        "semver": "^7.3.5",
+        "semver": "^7.3.7",
+        "tar": "^6.1.11",
         "temp-file": "^3.4.0"
       },
       "engines": {
@@ -604,9 +596,10 @@
       }
     },
     "node_modules/asar": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz",
-      "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz",
+      "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==",
+      "deprecated": "Please use @electron/asar moving forward.  There is no API change, just a package name change",
       "dev": true,
       "dependencies": {
         "chromium-pickle-js": "^0.2.0",
@@ -768,40 +761,6 @@
       "dev": true,
       "optional": true
     },
-    "node_modules/boxen": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
-      "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-align": "^3.0.0",
-        "camelcase": "^6.2.0",
-        "chalk": "^4.1.0",
-        "cli-boxes": "^2.2.1",
-        "string-width": "^4.2.2",
-        "type-fest": "^0.20.2",
-        "widest-line": "^3.1.0",
-        "wrap-ansi": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/boxen/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -883,9 +842,9 @@
       "dev": true
     },
     "node_modules/builder-util": {
-      "version": "23.0.2",
-      "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.0.2.tgz",
-      "integrity": "sha512-HaNHL3axNW/Ms8O1mDx3I07G+ZnZ/TKSWWvorOAPau128cdt9S+lNx5ocbx8deSaHHX4WFXSZVHh3mxlaKJNgg==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz",
+      "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==",
       "dev": true,
       "dependencies": {
         "@types/debug": "^4.1.6",
@@ -893,10 +852,10 @@
         "7zip-bin": "~5.1.1",
         "app-builder-bin": "4.0.0",
         "bluebird-lst": "^1.0.9",
-        "builder-util-runtime": "9.0.0",
+        "builder-util-runtime": "9.1.1",
         "chalk": "^4.1.1",
         "cross-spawn": "^7.0.3",
-        "debug": "^4.3.2",
+        "debug": "^4.3.4",
         "fs-extra": "^10.0.0",
         "http-proxy-agent": "^5.0.0",
         "https-proxy-agent": "^5.0.0",
@@ -908,12 +867,12 @@
       }
     },
     "node_modules/builder-util-runtime": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz",
-      "integrity": "sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA==",
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz",
+      "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==",
       "dev": true,
       "dependencies": {
-        "debug": "^4.3.2",
+        "debug": "^4.3.4",
         "sax": "^1.2.4"
       },
       "engines": {
@@ -1028,18 +987,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -1074,21 +1021,12 @@
       "dev": true
     },
     "node_modules/ci-info": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz",
-      "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==",
-      "dev": true
-    },
-    "node_modules/cli-boxes": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
-      "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz",
+      "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==",
       "dev": true,
       "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
     "node_modules/cli-truncate": {
@@ -1158,7 +1096,7 @@
     "node_modules/colors": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
-      "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+      "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
       "dev": true,
       "engines": {
         "node": ">=0.1.90"
@@ -1187,7 +1125,7 @@
     "node_modules/compare-version": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
-      "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
+      "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -1224,35 +1162,6 @@
         "proto-list": "~1.2.1"
       }
     },
-    "node_modules/configstore": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
-      "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
-      "dev": true,
-      "dependencies": {
-        "dot-prop": "^5.2.0",
-        "graceful-fs": "^4.1.2",
-        "make-dir": "^3.0.0",
-        "unique-string": "^2.0.0",
-        "write-file-atomic": "^3.0.0",
-        "xdg-basedir": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/configstore/node_modules/write-file-atomic": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
-      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
-      "dev": true,
-      "dependencies": {
-        "imurmurhash": "^0.1.4",
-        "is-typedarray": "^1.0.0",
-        "signal-exit": "^3.0.2",
-        "typedarray-to-buffer": "^3.1.5"
-      }
-    },
     "node_modules/core-util-is": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -1283,15 +1192,6 @@
         "node": ">= 8"
       }
     },
-    "node_modules/crypto-random-string": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
-      "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -1336,7 +1236,7 @@
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
       "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
-      "devOptional": true,
+      "optional": true,
       "engines": {
         "node": ">=4.0.0"
       }
@@ -1402,7 +1302,7 @@
     "node_modules/dir-compare/node_modules/commander": {
       "version": "2.9.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
-      "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+      "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==",
       "dev": true,
       "dependencies": {
         "graceful-readlink": ">= 1.0.0"
@@ -1424,20 +1324,20 @@
       }
     },
     "node_modules/dmg-builder": {
-      "version": "23.0.3",
-      "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.0.3.tgz",
-      "integrity": "sha512-mBYrHHnSM5PC656TDE+xTGmXIuWHAGmmRfyM+dV0kP+AxtwPof4pAXNQ8COd0/exZQ4dqf72FiPS3B9G9aB5IA==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz",
+      "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==",
       "dev": true,
       "dependencies": {
-        "app-builder-lib": "23.0.3",
-        "builder-util": "23.0.2",
-        "builder-util-runtime": "9.0.0",
+        "app-builder-lib": "23.6.0",
+        "builder-util": "23.6.0",
+        "builder-util-runtime": "9.1.1",
         "fs-extra": "^10.0.0",
         "iconv-lite": "^0.6.2",
         "js-yaml": "^4.1.0"
       },
       "optionalDependencies": {
-        "dmg-license": "^1.0.9"
+        "dmg-license": "^1.0.11"
       }
     },
     "node_modules/dmg-builder/node_modules/fs-extra": {
@@ -1479,7 +1379,6 @@
       "version": "1.0.11",
       "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz",
       "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==",
-      "deprecated": "Disk image license agreements are deprecated by Apple and will probably be removed in a future macOS release. Discussion at: https://github.com/argv-minus-one/dmg-license/issues/11",
       "dev": true,
       "optional": true,
       "os": [
@@ -1514,18 +1413,6 @@
         "node": ">=6.0.0"
       }
     },
-    "node_modules/dot-prop": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
-      "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
-      "dev": true,
-      "dependencies": {
-        "is-obj": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/dotenv": {
       "version": "9.0.2",
       "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz",
@@ -1572,13 +1459,13 @@
       }
     },
     "node_modules/electron": {
-      "version": "18.2.3",
-      "resolved": "https://registry.npmjs.org/electron/-/electron-18.2.3.tgz",
-      "integrity": "sha512-DJWX03hCRKTscsfXxmW4gmgFuseop+g+m4ml7NfOMfankD8uYyr2Xyi3Ui02inL9qZOlbLMeLVCu6jKCKs8p/w==",
+      "version": "19.1.7",
+      "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.7.tgz",
+      "integrity": "sha512-U5rCktIm/EeRjfg/9QFo29jzvZVV2z8Xw7r2NdGTpljmjd+7kySHvUHthO2hk8HETILJivL4+R5lF9zxcJ2J9w==",
       "dev": true,
       "hasInstallScript": true,
       "dependencies": {
-        "@electron/get": "^1.13.0",
+        "@electron/get": "^1.14.1",
         "@types/node": "^16.11.26",
         "extract-zip": "^1.0.3"
       },
@@ -1590,23 +1477,23 @@
       }
     },
     "node_modules/electron-builder": {
-      "version": "23.0.3",
-      "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.0.3.tgz",
-      "integrity": "sha512-0lnTsljAgcOMuIiOjPcoFf+WxOOe/O04hZPgIvvUBXIbz3kolbNu0Xdch1f5WuQ40NdeZI7oqs8Eo395PcuGHQ==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz",
+      "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==",
       "dev": true,
       "dependencies": {
         "@types/yargs": "^17.0.1",
-        "app-builder-lib": "23.0.3",
-        "builder-util": "23.0.2",
-        "builder-util-runtime": "9.0.0",
+        "app-builder-lib": "23.6.0",
+        "builder-util": "23.6.0",
+        "builder-util-runtime": "9.1.1",
         "chalk": "^4.1.1",
-        "dmg-builder": "23.0.3",
+        "dmg-builder": "23.6.0",
         "fs-extra": "^10.0.0",
         "is-ci": "^3.0.0",
         "lazy-val": "^1.0.5",
         "read-config-file": "6.2.0",
-        "update-notifier": "^5.1.0",
-        "yargs": "^17.0.1"
+        "simple-update-notifier": "^1.0.7",
+        "yargs": "^17.5.1"
       },
       "bin": {
         "electron-builder": "cli.js",
@@ -1652,9 +1539,9 @@
       }
     },
     "node_modules/electron-json-storage": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.5.0.tgz",
-      "integrity": "sha512-ML6Um4tZbJv938EbxvMJwzLA+v/wfWwEP+AXNum1zQF9RUFJ/SrRtIjGm9eFTFxURxn81r3ggdovuQikyF/m0Q==",
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.6.0.tgz",
+      "integrity": "sha512-gAgNsnA7tEtV9LzzOnZTyVIb3cQtCva+bEBVT5pbRGU8ZSZTVKPBrTxIAYjeVfdSjyNXgfb1mr/CZrOJgeHyqg==",
       "dependencies": {
         "async": "^2.0.0",
         "lockfile": "^1.0.4",
@@ -1668,6 +1555,7 @@
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz",
       "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==",
+      "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different",
       "dev": true,
       "dependencies": {
         "bluebird": "^3.5.0",
@@ -1709,18 +1597,18 @@
     "node_modules/electron-osx-sign/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/electron-publish": {
-      "version": "23.0.2",
-      "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.0.2.tgz",
-      "integrity": "sha512-8gMYgWqv96lc83FCm85wd+tEyxNTJQK7WKyPkNkO8GxModZqt1GO8S+/vAnFGxilS/7vsrVRXFfqiCDUCSuxEg==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz",
+      "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==",
       "dev": true,
       "dependencies": {
         "@types/fs-extra": "^9.0.11",
-        "builder-util": "23.0.2",
-        "builder-util-runtime": "9.0.0",
+        "builder-util": "23.6.0",
+        "builder-util-runtime": "9.1.1",
         "chalk": "^4.1.1",
         "fs-extra": "^10.0.0",
         "lazy-val": "^1.0.5",
@@ -1884,15 +1772,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/escape-goat": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
-      "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/escape-string-regexp": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -2402,7 +2281,7 @@
     "node_modules/extract-zip/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/extsprintf": {
@@ -2432,7 +2311,7 @@
     "node_modules/fd-slicer": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+      "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
       "dev": true,
       "dependencies": {
         "pend": "~1.2.0"
@@ -2574,6 +2453,18 @@
         "node": ">=6 <7 || >=8"
       }
     },
+    "node_modules/fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
     "node_modules/fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2738,30 +2629,6 @@
         "node": ">=10.0"
       }
     },
-    "node_modules/global-dirs": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
-      "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
-      "dev": true,
-      "dependencies": {
-        "ini": "2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/global-dirs/node_modules/ini": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
-      "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/global-tunnel-ng": {
       "version": "2.7.1",
       "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
@@ -2851,7 +2718,7 @@
     "node_modules/graceful-readlink": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
-      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+      "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==",
       "dev": true
     },
     "node_modules/har-schema": {
@@ -2944,15 +2811,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/has-yarn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
-      "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/hosted-git-info": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
@@ -3087,15 +2945,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/import-lazy": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
-      "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -3122,7 +2971,7 @@
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
-      "devOptional": true
+      "optional": true
     },
     "node_modules/internal-slot": {
       "version": "1.0.3",
@@ -3276,22 +3125,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/is-installed-globally": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
-      "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
-      "dev": true,
-      "dependencies": {
-        "global-dirs": "^3.0.0",
-        "is-path-inside": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/is-negative-zero": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
@@ -3304,18 +3137,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-npm": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
-      "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/is-number-object": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
@@ -3331,24 +3152,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-obj": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
-      "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-path-inside": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/is-regex": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -3424,12 +3227,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-yarn-global": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
-      "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
-      "dev": true
-    },
     "node_modules/isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -3478,9 +3275,9 @@
       }
     },
     "node_modules/jake/node_modules/async": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
-      "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+      "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
       "dev": true
     },
     "node_modules/js-tokens": {
@@ -3614,18 +3411,6 @@
         "json-buffer": "3.0.0"
       }
     },
-    "node_modules/latest-version": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
-      "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
-      "dev": true,
-      "dependencies": {
-        "package-json": "^6.3.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/lazy-val": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz",
@@ -3743,30 +3528,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/make-dir": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-      "dev": true,
-      "dependencies": {
-        "semver": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/make-dir/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/matcher": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
@@ -3836,6 +3597,31 @@
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
       "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
     },
+    "node_modules/minipass": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
+      "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
     "node_modules/mkdirp": {
       "version": "0.5.6",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -4130,30 +3916,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/package-json": {
-      "version": "6.5.0",
-      "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
-      "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
-      "dev": true,
-      "dependencies": {
-        "got": "^9.6.0",
-        "registry-auth-token": "^4.0.0",
-        "registry-url": "^5.0.0",
-        "semver": "^6.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/package-json/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -4214,7 +3976,7 @@
     "node_modules/pend": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
       "dev": true
     },
     "node_modules/performance-now": {
@@ -4307,27 +4069,18 @@
       }
     },
     "node_modules/plist": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz",
-      "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==",
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz",
+      "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==",
       "dev": true,
       "dependencies": {
         "base64-js": "^1.5.1",
-        "xmlbuilder": "^9.0.7"
+        "xmlbuilder": "^15.1.1"
       },
       "engines": {
         "node": ">=6"
       }
     },
-    "node_modules/plist/node_modules/xmlbuilder": {
-      "version": "9.0.7",
-      "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
-      "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
     "node_modules/prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -4421,18 +4174,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/pupa": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
-      "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
-      "dev": true,
-      "dependencies": {
-        "escape-goat": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/qs": {
       "version": "6.5.3",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
@@ -4445,7 +4186,7 @@
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
       "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
-      "devOptional": true,
+      "optional": true,
       "dependencies": {
         "deep-extend": "^0.6.0",
         "ini": "~1.3.0",
@@ -4522,30 +4263,6 @@
         "url": "https://github.com/sponsors/mysticatea"
       }
     },
-    "node_modules/registry-auth-token": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
-      "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
-      "dev": true,
-      "dependencies": {
-        "rc": "^1.2.8"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/registry-url": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
-      "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
-      "dev": true,
-      "dependencies": {
-        "rc": "^1.2.8"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/request": {
       "version": "2.88.2",
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -4698,9 +4415,9 @@
       "dev": true
     },
     "node_modules/semver": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+      "version": "7.3.8",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
       "dependencies": {
         "lru-cache": "^6.0.0"
       },
@@ -4718,27 +4435,6 @@
       "dev": true,
       "optional": true
     },
-    "node_modules/semver-diff": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
-      "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
-      "dev": true,
-      "dependencies": {
-        "semver": "^6.3.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/semver-diff/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/serialize-error": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
@@ -4795,6 +4491,27 @@
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
     },
+    "node_modules/simple-update-notifier": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.8.tgz",
+      "integrity": "sha512-KPXw773wEyrIIhjZh83kmHGrmiAWTxwhAFOhN09IIN1I6ZAmh1luQnS9KPmFaz3X53dcIJ4II80iYV7z7LsUjQ==",
+      "dev": true,
+      "dependencies": {
+        "semver": "~7.0.0"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/simple-update-notifier/node_modules/semver": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+      "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
     "node_modules/single-line-log": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
@@ -5102,7 +4819,7 @@
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
       "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
-      "devOptional": true,
+      "optional": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -5143,6 +4860,23 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/tar": {
+      "version": "6.1.12",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz",
+      "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==",
+      "dev": true,
+      "dependencies": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^3.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/tar-fs": {
       "version": "1.16.3",
       "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
@@ -5183,6 +4917,27 @@
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/tar/node_modules/chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/tar/node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "dev": true,
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/temp-file": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz",
@@ -5358,7 +5113,7 @@
     "node_modules/truncate-utf8-bytes": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
-      "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
+      "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
       "dev": true,
       "dependencies": {
         "utf8-byte-length": "^1.0.1"
@@ -5442,18 +5197,9 @@
     "node_modules/typedarray": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
       "dev": true
     },
-    "node_modules/typedarray-to-buffer": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
-      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
-      "dev": true,
-      "dependencies": {
-        "is-typedarray": "^1.0.0"
-      }
-    },
     "node_modules/unbox-primitive": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -5467,73 +5213,15 @@
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/unique-string": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
-      "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
-      "dev": true,
-      "dependencies": {
-        "crypto-random-string": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/universalify": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
-      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
-    "node_modules/update-notifier": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
-      "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==",
-      "dev": true,
-      "dependencies": {
-        "boxen": "^5.0.0",
-        "chalk": "^4.1.0",
-        "configstore": "^5.0.1",
-        "has-yarn": "^2.1.0",
-        "import-lazy": "^2.1.0",
-        "is-ci": "^2.0.0",
-        "is-installed-globally": "^0.4.0",
-        "is-npm": "^5.0.0",
-        "is-yarn-global": "^0.3.0",
-        "latest-version": "^5.1.0",
-        "pupa": "^2.1.1",
-        "semver": "^7.3.4",
-        "semver-diff": "^3.1.1",
-        "xdg-basedir": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/yeoman/update-notifier?sponsor=1"
-      }
-    },
-    "node_modules/update-notifier/node_modules/ci-info": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-      "dev": true
+      }
     },
-    "node_modules/update-notifier/node_modules/is-ci": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+    "node_modules/universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
       "dev": true,
-      "dependencies": {
-        "ci-info": "^2.0.0"
-      },
-      "bin": {
-        "is-ci": "bin.js"
+      "engines": {
+        "node": ">= 4.0.0"
       }
     },
     "node_modules/uri-js": {
@@ -5559,7 +5247,7 @@
     "node_modules/utf8-byte-length": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
-      "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
+      "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==",
       "dev": true
     },
     "node_modules/util-deprecate": {
@@ -5601,7 +5289,7 @@
     "node_modules/verror/node_modules/core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
       "dev": true,
       "optional": true
     },
@@ -5636,18 +5324,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/widest-line": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
-      "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/win-mouse": {
       "version": "1.3.1",
       "resolved": "git+ssh://git@github.com/Toinane/win-mouse.git#279764072235b02c6b1710b8f57cef851424bb5c",
@@ -5717,7 +5393,6 @@
       "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
       "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
       "dev": true,
-      "optional": true,
       "engines": {
         "node": ">=8.0"
       }
@@ -5775,7 +5450,7 @@
     "node_modules/yauzl": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+      "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
       "dev": true,
       "dependencies": {
         "buffer-crc32": "~0.2.3",
@@ -5820,9 +5495,9 @@
       }
     },
     "@electron/universal": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.0.tgz",
-      "integrity": "sha512-eu20BwNsrMPKoe2bZ3/l9c78LclDvxg3PlVXrQf3L50NaUuW5M59gbPytI+V4z7/QMrohUHetQaU0ou+p1UG9Q==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz",
+      "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==",
       "dev": true,
       "requires": {
         "@malept/cross-spawn-promise": "^1.1.0",
@@ -6014,9 +5689,9 @@
       "dev": true
     },
     "@types/minimatch": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-      "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+      "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
       "dev": true,
       "optional": true
     },
@@ -6044,9 +5719,9 @@
       }
     },
     "@types/verror": {
-      "version": "1.10.5",
-      "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz",
-      "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==",
+      "version": "1.10.6",
+      "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz",
+      "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==",
       "dev": true,
       "optional": true
     },
@@ -6111,15 +5786,6 @@
       "dev": true,
       "requires": {}
     },
-    "ansi-align": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
-      "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
-      "dev": true,
-      "requires": {
-        "string-width": "^4.1.0"
-      }
-    },
     "ansi-regex": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -6142,35 +5808,36 @@
       "dev": true
     },
     "app-builder-lib": {
-      "version": "23.0.3",
-      "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.0.3.tgz",
-      "integrity": "sha512-1qrtXYHXJfXhzJnMtVGjIva3067F1qYQubl2oBjI61gCBoCHvhghdYJ57XxXTQQ0VxnUhg1/Iaez87uXp8mD8w==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz",
+      "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==",
       "dev": true,
       "requires": {
         "@develar/schema-utils": "~2.6.5",
-        "@electron/universal": "1.2.0",
+        "@electron/universal": "1.2.1",
         "@malept/flatpak-bundler": "^0.4.0",
         "7zip-bin": "~5.1.1",
         "async-exit-hook": "^2.0.1",
         "bluebird-lst": "^1.0.9",
-        "builder-util": "23.0.2",
-        "builder-util-runtime": "9.0.0",
+        "builder-util": "23.6.0",
+        "builder-util-runtime": "9.1.1",
         "chromium-pickle-js": "^0.2.0",
-        "debug": "^4.3.2",
-        "ejs": "^3.1.6",
+        "debug": "^4.3.4",
+        "ejs": "^3.1.7",
         "electron-osx-sign": "^0.6.0",
-        "electron-publish": "23.0.2",
+        "electron-publish": "23.6.0",
         "form-data": "^4.0.0",
-        "fs-extra": "^10.0.0",
-        "hosted-git-info": "^4.0.2",
+        "fs-extra": "^10.1.0",
+        "hosted-git-info": "^4.1.0",
         "is-ci": "^3.0.0",
-        "isbinaryfile": "^4.0.8",
+        "isbinaryfile": "^4.0.10",
         "js-yaml": "^4.1.0",
         "lazy-val": "^1.0.5",
-        "minimatch": "^3.0.4",
+        "minimatch": "^3.1.2",
         "read-config-file": "6.2.0",
         "sanitize-filename": "^1.6.3",
-        "semver": "^7.3.5",
+        "semver": "^7.3.7",
+        "tar": "^6.1.11",
         "temp-file": "^3.4.0"
       },
       "dependencies": {
@@ -6247,9 +5914,9 @@
       }
     },
     "asar": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz",
-      "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz",
+      "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==",
       "dev": true,
       "requires": {
         "@types/glob": "^7.1.1",
@@ -6374,30 +6041,6 @@
       "dev": true,
       "optional": true
     },
-    "boxen": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
-      "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
-      "dev": true,
-      "requires": {
-        "ansi-align": "^3.0.0",
-        "camelcase": "^6.2.0",
-        "chalk": "^4.1.0",
-        "cli-boxes": "^2.2.1",
-        "string-width": "^4.2.2",
-        "type-fest": "^0.20.2",
-        "widest-line": "^3.1.0",
-        "wrap-ansi": "^7.0.0"
-      },
-      "dependencies": {
-        "type-fest": {
-          "version": "0.20.2",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-          "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-          "dev": true
-        }
-      }
-    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -6459,9 +6102,9 @@
       "dev": true
     },
     "builder-util": {
-      "version": "23.0.2",
-      "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.0.2.tgz",
-      "integrity": "sha512-HaNHL3axNW/Ms8O1mDx3I07G+ZnZ/TKSWWvorOAPau128cdt9S+lNx5ocbx8deSaHHX4WFXSZVHh3mxlaKJNgg==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz",
+      "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==",
       "dev": true,
       "requires": {
         "@types/debug": "^4.1.6",
@@ -6469,10 +6112,10 @@
         "7zip-bin": "~5.1.1",
         "app-builder-bin": "4.0.0",
         "bluebird-lst": "^1.0.9",
-        "builder-util-runtime": "9.0.0",
+        "builder-util-runtime": "9.1.1",
         "chalk": "^4.1.1",
         "cross-spawn": "^7.0.3",
-        "debug": "^4.3.2",
+        "debug": "^4.3.4",
         "fs-extra": "^10.0.0",
         "http-proxy-agent": "^5.0.0",
         "https-proxy-agent": "^5.0.0",
@@ -6513,12 +6156,12 @@
       }
     },
     "builder-util-runtime": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz",
-      "integrity": "sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA==",
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz",
+      "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==",
       "dev": true,
       "requires": {
-        "debug": "^4.3.2",
+        "debug": "^4.3.4",
         "sax": "^1.2.4"
       }
     },
@@ -6579,12 +6222,6 @@
       "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
       "dev": true
     },
-    "camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-      "dev": true
-    },
     "caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -6613,15 +6250,9 @@
       "dev": true
     },
     "ci-info": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz",
-      "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==",
-      "dev": true
-    },
-    "cli-boxes": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
-      "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz",
+      "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==",
       "dev": true
     },
     "cli-truncate": {
@@ -6679,7 +6310,7 @@
     "colors": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
-      "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+      "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
       "dev": true
     },
     "combined-stream": {
@@ -6699,7 +6330,7 @@
     "compare-version": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
-      "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
+      "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==",
       "dev": true
     },
     "concat-map": {
@@ -6730,34 +6361,6 @@
         "proto-list": "~1.2.1"
       }
     },
-    "configstore": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
-      "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
-      "dev": true,
-      "requires": {
-        "dot-prop": "^5.2.0",
-        "graceful-fs": "^4.1.2",
-        "make-dir": "^3.0.0",
-        "unique-string": "^2.0.0",
-        "write-file-atomic": "^3.0.0",
-        "xdg-basedir": "^4.0.0"
-      },
-      "dependencies": {
-        "write-file-atomic": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
-          "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
-          "dev": true,
-          "requires": {
-            "imurmurhash": "^0.1.4",
-            "is-typedarray": "^1.0.0",
-            "signal-exit": "^3.0.2",
-            "typedarray-to-buffer": "^3.1.5"
-          }
-        }
-      }
-    },
     "core-util-is": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -6785,12 +6388,6 @@
         "which": "^2.0.1"
       }
     },
-    "crypto-random-string": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
-      "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
-      "dev": true
-    },
     "dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -6821,7 +6418,7 @@
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
       "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
-      "devOptional": true
+      "optional": true
     },
     "deep-is": {
       "version": "0.1.4",
@@ -6872,7 +6469,7 @@
         "commander": {
           "version": "2.9.0",
           "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
-          "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+          "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==",
           "dev": true,
           "requires": {
             "graceful-readlink": ">= 1.0.0"
@@ -6890,15 +6487,15 @@
       }
     },
     "dmg-builder": {
-      "version": "23.0.3",
-      "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.0.3.tgz",
-      "integrity": "sha512-mBYrHHnSM5PC656TDE+xTGmXIuWHAGmmRfyM+dV0kP+AxtwPof4pAXNQ8COd0/exZQ4dqf72FiPS3B9G9aB5IA==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz",
+      "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==",
       "dev": true,
       "requires": {
-        "app-builder-lib": "23.0.3",
-        "builder-util": "23.0.2",
-        "builder-util-runtime": "9.0.0",
-        "dmg-license": "^1.0.9",
+        "app-builder-lib": "23.6.0",
+        "builder-util": "23.6.0",
+        "builder-util-runtime": "9.1.1",
+        "dmg-license": "^1.0.11",
         "fs-extra": "^10.0.0",
         "iconv-lite": "^0.6.2",
         "js-yaml": "^4.1.0"
@@ -6959,15 +6556,6 @@
         "esutils": "^2.0.2"
       }
     },
-    "dot-prop": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
-      "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
-      "dev": true,
-      "requires": {
-        "is-obj": "^2.0.0"
-      }
-    },
     "dotenv": {
       "version": "9.0.2",
       "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz",
@@ -7005,34 +6593,34 @@
       }
     },
     "electron": {
-      "version": "18.2.3",
-      "resolved": "https://registry.npmjs.org/electron/-/electron-18.2.3.tgz",
-      "integrity": "sha512-DJWX03hCRKTscsfXxmW4gmgFuseop+g+m4ml7NfOMfankD8uYyr2Xyi3Ui02inL9qZOlbLMeLVCu6jKCKs8p/w==",
+      "version": "19.1.7",
+      "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.7.tgz",
+      "integrity": "sha512-U5rCktIm/EeRjfg/9QFo29jzvZVV2z8Xw7r2NdGTpljmjd+7kySHvUHthO2hk8HETILJivL4+R5lF9zxcJ2J9w==",
       "dev": true,
       "requires": {
-        "@electron/get": "^1.13.0",
+        "@electron/get": "^1.14.1",
         "@types/node": "^16.11.26",
         "extract-zip": "^1.0.3"
       }
     },
     "electron-builder": {
-      "version": "23.0.3",
-      "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.0.3.tgz",
-      "integrity": "sha512-0lnTsljAgcOMuIiOjPcoFf+WxOOe/O04hZPgIvvUBXIbz3kolbNu0Xdch1f5WuQ40NdeZI7oqs8Eo395PcuGHQ==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz",
+      "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==",
       "dev": true,
       "requires": {
         "@types/yargs": "^17.0.1",
-        "app-builder-lib": "23.0.3",
-        "builder-util": "23.0.2",
-        "builder-util-runtime": "9.0.0",
+        "app-builder-lib": "23.6.0",
+        "builder-util": "23.6.0",
+        "builder-util-runtime": "9.1.1",
         "chalk": "^4.1.1",
-        "dmg-builder": "23.0.3",
+        "dmg-builder": "23.6.0",
         "fs-extra": "^10.0.0",
         "is-ci": "^3.0.0",
         "lazy-val": "^1.0.5",
         "read-config-file": "6.2.0",
-        "update-notifier": "^5.1.0",
-        "yargs": "^17.0.1"
+        "simple-update-notifier": "^1.0.7",
+        "yargs": "^17.5.1"
       },
       "dependencies": {
         "fs-extra": {
@@ -7065,9 +6653,9 @@
       }
     },
     "electron-json-storage": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.5.0.tgz",
-      "integrity": "sha512-ML6Um4tZbJv938EbxvMJwzLA+v/wfWwEP+AXNum1zQF9RUFJ/SrRtIjGm9eFTFxURxn81r3ggdovuQikyF/m0Q==",
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.6.0.tgz",
+      "integrity": "sha512-gAgNsnA7tEtV9LzzOnZTyVIb3cQtCva+bEBVT5pbRGU8ZSZTVKPBrTxIAYjeVfdSjyNXgfb1mr/CZrOJgeHyqg==",
       "requires": {
         "async": "^2.0.0",
         "lockfile": "^1.0.4",
@@ -7112,20 +6700,20 @@
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         }
       }
     },
     "electron-publish": {
-      "version": "23.0.2",
-      "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.0.2.tgz",
-      "integrity": "sha512-8gMYgWqv96lc83FCm85wd+tEyxNTJQK7WKyPkNkO8GxModZqt1GO8S+/vAnFGxilS/7vsrVRXFfqiCDUCSuxEg==",
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz",
+      "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==",
       "dev": true,
       "requires": {
         "@types/fs-extra": "^9.0.11",
-        "builder-util": "23.0.2",
-        "builder-util-runtime": "9.0.0",
+        "builder-util": "23.6.0",
+        "builder-util-runtime": "9.1.1",
         "chalk": "^4.1.1",
         "fs-extra": "^10.0.0",
         "lazy-val": "^1.0.5",
@@ -7262,12 +6850,6 @@
       "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
       "dev": true
     },
-    "escape-goat": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
-      "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
-      "dev": true
-    },
     "escape-string-regexp": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -7638,7 +7220,7 @@
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         }
       }
@@ -7667,7 +7249,7 @@
     "fd-slicer": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+      "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
       "dev": true,
       "requires": {
         "pend": "~1.2.0"
@@ -7786,6 +7368,15 @@
         "universalify": "^0.1.0"
       }
     },
+    "fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -7908,23 +7499,6 @@
         "serialize-error": "^7.0.1"
       }
     },
-    "global-dirs": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
-      "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
-      "dev": true,
-      "requires": {
-        "ini": "2.0.0"
-      },
-      "dependencies": {
-        "ini": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
-          "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
-          "dev": true
-        }
-      }
-    },
     "global-tunnel-ng": {
       "version": "2.7.1",
       "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
@@ -7992,7 +7566,7 @@
     "graceful-readlink": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
-      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+      "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==",
       "dev": true
     },
     "har-schema": {
@@ -8054,12 +7628,6 @@
         "has-symbols": "^1.0.2"
       }
     },
-    "has-yarn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
-      "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
-      "dev": true
-    },
     "hosted-git-info": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
@@ -8149,12 +7717,6 @@
         "resolve-from": "^4.0.0"
       }
     },
-    "import-lazy": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
-      "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
-      "dev": true
-    },
     "imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -8178,7 +7740,7 @@
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
-      "devOptional": true
+      "optional": true
     },
     "internal-slot": {
       "version": "1.0.3",
@@ -8294,28 +7856,12 @@
         "is-extglob": "^2.1.1"
       }
     },
-    "is-installed-globally": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
-      "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
-      "dev": true,
-      "requires": {
-        "global-dirs": "^3.0.0",
-        "is-path-inside": "^3.0.2"
-      }
-    },
     "is-negative-zero": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
       "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
       "dev": true
     },
-    "is-npm": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
-      "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==",
-      "dev": true
-    },
     "is-number-object": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
@@ -8325,18 +7871,6 @@
         "has-tostringtag": "^1.0.0"
       }
     },
-    "is-obj": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
-      "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
-      "dev": true
-    },
-    "is-path-inside": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-      "dev": true
-    },
     "is-regex": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -8388,12 +7922,6 @@
         "call-bind": "^1.0.2"
       }
     },
-    "is-yarn-global": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
-      "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
-      "dev": true
-    },
     "isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -8430,9 +7958,9 @@
       },
       "dependencies": {
         "async": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
-          "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
+          "version": "3.2.4",
+          "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+          "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
           "dev": true
         }
       }
@@ -8552,15 +8080,6 @@
         "json-buffer": "3.0.0"
       }
     },
-    "latest-version": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
-      "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
-      "dev": true,
-      "requires": {
-        "package-json": "^6.3.0"
-      }
-    },
     "lazy-val": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz",
@@ -8656,23 +8175,6 @@
         "yallist": "^4.0.0"
       }
     },
-    "make-dir": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-      "dev": true,
-      "requires": {
-        "semver": "^6.0.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        }
-      }
-    },
     "matcher": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
@@ -8721,6 +8223,25 @@
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
       "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
     },
+    "minipass": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
+      "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      }
+    },
+    "minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      }
+    },
     "mkdirp": {
       "version": "0.5.6",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -8910,7 +8431,7 @@
     },
     "osx-mouse": {
       "version": "git+ssh://git@github.com/Toinane/osx-mouse.git#2cec72631834adb66f549ee036d2f8ee5434e95d",
-      "from": "osx-mouse@git+https://github.com/Toinane/osx-mouse",
+      "from": "osx-mouse@github:Toinane/osx-mouse",
       "optional": true,
       "requires": {
         "bindings": "^1.5.0",
@@ -8947,26 +8468,6 @@
       "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
       "dev": true
     },
-    "package-json": {
-      "version": "6.5.0",
-      "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
-      "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
-      "dev": true,
-      "requires": {
-        "got": "^9.6.0",
-        "registry-auth-token": "^4.0.0",
-        "registry-url": "^5.0.0",
-        "semver": "^6.2.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        }
-      }
-    },
     "parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -9012,7 +8513,7 @@
     "pend": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
       "dev": true
     },
     "performance-now": {
@@ -9083,21 +8584,13 @@
       }
     },
     "plist": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz",
-      "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==",
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz",
+      "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==",
       "dev": true,
       "requires": {
         "base64-js": "^1.5.1",
-        "xmlbuilder": "^9.0.7"
-      },
-      "dependencies": {
-        "xmlbuilder": {
-          "version": "9.0.7",
-          "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
-          "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
-          "dev": true
-        }
+        "xmlbuilder": "^15.1.1"
       }
     },
     "prelude-ls": {
@@ -9178,15 +8671,6 @@
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
     },
-    "pupa": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
-      "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
-      "dev": true,
-      "requires": {
-        "escape-goat": "^2.0.0"
-      }
-    },
     "qs": {
       "version": "6.5.3",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
@@ -9196,7 +8680,7 @@
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
       "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
-      "devOptional": true,
+      "optional": true,
       "requires": {
         "deep-extend": "^0.6.0",
         "ini": "~1.3.0",
@@ -9255,24 +8739,6 @@
       "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
       "dev": true
     },
-    "registry-auth-token": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
-      "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
-      "dev": true,
-      "requires": {
-        "rc": "^1.2.8"
-      }
-    },
-    "registry-url": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
-      "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
-      "dev": true,
-      "requires": {
-        "rc": "^1.2.8"
-      }
-    },
     "request": {
       "version": "2.88.2",
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -9400,9 +8866,9 @@
       "dev": true
     },
     "semver": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+      "version": "7.3.8",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
       "requires": {
         "lru-cache": "^6.0.0"
       }
@@ -9414,23 +8880,6 @@
       "dev": true,
       "optional": true
     },
-    "semver-diff": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
-      "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
-      "dev": true,
-      "requires": {
-        "semver": "^6.3.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        }
-      }
-    },
     "serialize-error": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
@@ -9472,6 +8921,23 @@
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
     },
+    "simple-update-notifier": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.8.tgz",
+      "integrity": "sha512-KPXw773wEyrIIhjZh83kmHGrmiAWTxwhAFOhN09IIN1I6ZAmh1luQnS9KPmFaz3X53dcIJ4II80iYV7z7LsUjQ==",
+      "dev": true,
+      "requires": {
+        "semver": "~7.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+          "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+          "dev": true
+        }
+      }
+    },
     "single-line-log": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
@@ -9693,7 +9159,7 @@
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
       "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
-      "devOptional": true
+      "optional": true
     },
     "sumchecker": {
       "version": "3.0.1",
@@ -9719,6 +9185,34 @@
       "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
       "dev": true
     },
+    "tar": {
+      "version": "6.1.12",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz",
+      "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==",
+      "dev": true,
+      "requires": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^3.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "chownr": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+          "dev": true
+        },
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        }
+      }
+    },
     "tar-fs": {
       "version": "1.16.3",
       "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
@@ -9913,7 +9407,7 @@
     "truncate-utf8-bytes": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
-      "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
+      "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
       "dev": true,
       "requires": {
         "utf8-byte-length": "^1.0.1"
@@ -9981,18 +9475,9 @@
     "typedarray": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
       "dev": true
     },
-    "typedarray-to-buffer": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
-      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
-      "dev": true,
-      "requires": {
-        "is-typedarray": "^1.0.0"
-      }
-    },
     "unbox-primitive": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -10005,60 +9490,12 @@
         "which-boxed-primitive": "^1.0.2"
       }
     },
-    "unique-string": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
-      "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
-      "dev": true,
-      "requires": {
-        "crypto-random-string": "^2.0.0"
-      }
-    },
     "universalify": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
       "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
       "dev": true
     },
-    "update-notifier": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
-      "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==",
-      "dev": true,
-      "requires": {
-        "boxen": "^5.0.0",
-        "chalk": "^4.1.0",
-        "configstore": "^5.0.1",
-        "has-yarn": "^2.1.0",
-        "import-lazy": "^2.1.0",
-        "is-ci": "^2.0.0",
-        "is-installed-globally": "^0.4.0",
-        "is-npm": "^5.0.0",
-        "is-yarn-global": "^0.3.0",
-        "latest-version": "^5.1.0",
-        "pupa": "^2.1.1",
-        "semver": "^7.3.4",
-        "semver-diff": "^3.1.1",
-        "xdg-basedir": "^4.0.0"
-      },
-      "dependencies": {
-        "ci-info": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-          "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-          "dev": true
-        },
-        "is-ci": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-          "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-          "dev": true,
-          "requires": {
-            "ci-info": "^2.0.0"
-          }
-        }
-      }
-    },
     "uri-js": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -10079,7 +9516,7 @@
     "utf8-byte-length": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
-      "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
+      "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==",
       "dev": true
     },
     "util-deprecate": {
@@ -10114,7 +9551,7 @@
         "core-util-is": {
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+          "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
           "dev": true,
           "optional": true
         }
@@ -10142,15 +9579,6 @@
         "is-symbol": "^1.0.3"
       }
     },
-    "widest-line": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
-      "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
-      "dev": true,
-      "requires": {
-        "string-width": "^4.0.0"
-      }
-    },
     "win-mouse": {
       "version": "git+ssh://git@github.com/Toinane/win-mouse.git#279764072235b02c6b1710b8f57cef851424bb5c",
       "from": "win-mouse@github:Toinane/win-mouse",
@@ -10202,8 +9630,7 @@
       "version": "15.1.1",
       "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
       "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
-      "dev": true,
-      "optional": true
+      "dev": true
     },
     "xtend": {
       "version": "4.0.2",
@@ -10246,7 +9673,7 @@
     "yauzl": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+      "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
       "dev": true,
       "requires": {
         "buffer-crc32": "~0.2.3",
diff --git a/package.json b/package.json
index 9dfc53d4..5a271e6d 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "colorpicker",
   "productName": "colorpicker",
-  "version": "2.1.0",
+  "version": "2.2.0",
   "description": "Colorpicker is a little Electron app that can show colors with hex/rgb code, and generate shading for your color.",
   "main": "src/main.js",
   "scripts": {
@@ -15,7 +15,7 @@
     "release-window": "electron-builder --publish=never --config colorpicker-build.json --win nsis portable",
     "nightly": "electron-builder --publish=never --config colorpicker-build-nightly.json",
     "nightly-linux": "electron-builder --publish=never --config colorpicker-build-nightly.json --linux deb appImage",
-    "rebuild": "npm rebuild --runtime=electron --target=18.2.3 --disturl=https://electronjs.org/headers --abi=103"
+    "rebuild": "npm rebuild --runtime=electron --target=19.1.7 --disturl=https://electronjs.org/headers --abi=106"
   },
   "repository": "https://github.com/toinane/colorpicker",
   "keywords": [
@@ -29,19 +29,19 @@
     "crea-that"
   ],
   "dependencies": {
-    "electron-json-storage": "^4.5.0",
+    "electron-json-storage": "^4.6.0",
     "request": "^2.88.2",
     "robotjs": "github:Toinane/robotjs",
-    "semver": "^7.3.7"
+    "semver": "^7.3.8"
   },
   "optionalDependencies": {
     "iohook": "^0.9.3",
-    "osx-mouse": "git+https://github.com/Toinane/osx-mouse",
+    "osx-mouse": "github:Toinane/osx-mouse",
     "win-mouse": "github:Toinane/win-mouse"
   },
   "devDependencies": {
-    "electron": "^18.2.3",
-    "electron-builder": "^23.0.3",
+    "electron": "^19.1.7",
+    "electron-builder": "^23.6.0",
     "standard": "^17.0.0"
   },
   "author": {
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index 2fd92585..f56a6b25 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -11,7 +11,6 @@ description: |
   - Picker: open an eyedropper who can pick a color from your desktop;
   - Colorsbook: open Colorsbook, a color manager;
   - Shading: show three bar of shading — hue bar, natural bar and lightness bar;
-  - Opacity: toggle Opacity range;
   - Clean Vue: unshow menu, ranges and inputs;
   - Magic color: show colors from the clipboard;
   - Random: show a random color;
diff --git a/src/browsers/colorpicker.js b/src/browsers/colorpicker.js
index 7e56b05b..9092a9a6 100644
--- a/src/browsers/colorpicker.js
+++ b/src/browsers/colorpicker.js
@@ -13,9 +13,10 @@ module.exports = (dirname, storage, util) => {
    */
   let init = (force, color) => {
     const size = storage.get("size");
-    if (win === null || win === undefined || force)
+    if (win === null || win === undefined || force) {
       createWindow(size.width, size.height);
-    else win.show();
+    }
+    else { win.show(); }
   };
 
   /**
@@ -28,14 +29,13 @@ module.exports = (dirname, storage, util) => {
     const pos = storage.get("pos");
     let options = {
       frame: false,
-      autoHideMenuBar: true,
       width: width,
       height: height,
       minWidth: 440,
       minHeight: 150,
-      transparent: true,
       icon: nativeImage.createFromPath(`${dirname}/build/icon.png`),
       webPreferences: {
+        devTools: true,
         preload: `${dirname}/preload.js`,
       },
     };
@@ -47,12 +47,12 @@ module.exports = (dirname, storage, util) => {
     win = new BrowserWindow(options);
     win.loadURL(`file://${dirname}/views/colorpicker.html`);
 
-    if (touchbar) win.setTouchBar(touchbar);
+    if (touchbar) { win.setTouchBar(touchbar); }
 
     win.on("closed", () => {
       win = undefined;
       let totalWin = BrowserWindow.getAllWindows();
-      for (let wins of totalWin) wins.close();
+      for (let wins of totalWin) { wins.close(); }
     });
 
     windowEvents(win);
diff --git a/src/browsers/colorsbook.js b/src/browsers/colorsbook.js
index 3873744b..bc2dded6 100644
--- a/src/browsers/colorsbook.js
+++ b/src/browsers/colorsbook.js
@@ -9,8 +9,8 @@ module.exports = (dirname, storage) => {
    * @return {void} [new Colorsbook]
    */
   let init = () => {
-    if (win === null || win === undefined) createWindow();
-    else win.show();
+    if (win === null || win === undefined) { createWindow(); }
+    else { win.show(); }
   };
 
   /**
diff --git a/src/browsers/preview.js b/src/browsers/preview.js
index 47fe65ea..5faabff2 100644
--- a/src/browsers/preview.js
+++ b/src/browsers/preview.js
@@ -11,8 +11,8 @@ module.exports = (dirname, storage) => {
    * @return {void} [new Colorpicker]
    */
   let init = () => {
-    if (win === null || win === undefined) createWindow();
-    else win.show();
+    if (win === null || win === undefined) { createWindow(); }
+    else { win.show(); }
   };
 
   /**
diff --git a/src/browsers/settings.js b/src/browsers/settings.js
index abbcf4af..c43b190d 100644
--- a/src/browsers/settings.js
+++ b/src/browsers/settings.js
@@ -11,8 +11,8 @@ module.exports = (dirname, storage) => {
    * @return {void} [new Colorpicker]
    */
   let init = () => {
-    if (win === null || win === undefined) createWindow();
-    else win.show();
+    if (win === null || win === undefined) { createWindow(); }
+    else { win.show(); }
   };
 
   /**
diff --git a/src/events/colorpicker.js b/src/events/colorpicker.js
index 81737353..7a7527e0 100644
--- a/src/events/colorpicker.js
+++ b/src/events/colorpicker.js
@@ -4,7 +4,8 @@ const { ipcMain, clipboard, Menu } = require("electron");
 
 module.exports = (storage, browsers, eventEmitter) => {
   const { colorpicker, settings, picker, colorsbook } = browsers;
-  let win, opacity, shading;
+  let win;
+  let shading;
 
   eventEmitter.on("changeColor", (color) => {
     console.log(color);
@@ -33,7 +34,7 @@ module.exports = (storage, browsers, eventEmitter) => {
     let colorsbook = storage.get("colors", "colorsbook");
     colorsbook[
       Object.getOwnPropertyNames(colorsbook)[
-        Object.values(colorsbook).length - 1
+      Object.values(colorsbook).length - 1
       ]
     ].push(color);
     storage.add({ colors: colorsbook }, "colorsbook");
@@ -51,7 +52,7 @@ module.exports = (storage, browsers, eventEmitter) => {
   ipcMain.on("openMenu", (event, type) => {
     let menu;
     switch (type) {
-      case "colorpickerMenu":
+      case "colorpickerMenu": {
         menu = Menu.buildFromTemplate([
           {
             label: "Pin to Foreground",
@@ -90,11 +91,6 @@ module.exports = (storage, browsers, eventEmitter) => {
             accelerator: "CmdOrCtrl+T",
             click: () => event.sender.send("shortShading"),
           },
-          {
-            label: "Toggle Opacity",
-            accelerator: "CmdOrCtrl+O",
-            click: () => event.sender.send("shortOpacity"),
-          },
           { type: "separator" },
           {
             label: "Set Random Color",
@@ -115,47 +111,36 @@ module.exports = (storage, browsers, eventEmitter) => {
         ]);
         menu.popup(this.window);
         break;
-      case "colorMenu":
+      }
+      case "colorMenu": {
         menu = Menu.buildFromTemplate([
           { label: "Delete", click: () => event.sender.send("deleteColor") },
         ]);
         menu.popup(this.window);
         break;
-      case "categoryMenu":
+      }
+      case "categoryMenu": {
         menu = Menu.buildFromTemplate([
           { label: "Delete", click: () => event.sender.send("deleteCategory") },
         ]);
         menu.popup(this.window);
         break;
+      }
     }
   });
 
-  ipcMain.on("opacityActive", (event, bool) => {
-    opacity = bool;
-    let size = win.getSize();
-    if (!opacity && shading) return win.setMinimumSize(440, 220);
-    if (!opacity) return win.setMinimumSize(440, 150);
-    if (size[1] < 180 && !shading) win.setSize(size[0], 180, true);
-    if (size[1] < 255 && shading) win.setSize(size[0], 255, true);
-    if (!shading) win.setMinimumSize(440, 180);
-    else win.setMinimumSize(440, 255);
-  });
-
   ipcMain.on("shadingActive", (event, bool) => {
     shading = bool;
     let size = win.getSize();
-    if (!shading && !opacity) return win.setMinimumSize(440, 150);
-    if (!shading && opacity) return win.setMinimumSize(440, 180);
-    if (size[1] < 220 && !opacity) win.setSize(size[0], 220, true);
-    if (size[1] < 255 && opacity) win.setSize(size[0], 255, true);
-    if (!opacity) win.setMinimumSize(440, 220);
-    else win.setMinimumSize(440, 255);
+    if (shading && size[1] < 220) { win.setSize(size[0], 220, true); }
+    if (shading) { return win.setMinimumSize(440, 220); }
+    if (!shading) { return win.setMinimumSize(440, 150); }
   });
 
   ipcMain.on("minimize-colorpicker", (event) => win.minimize());
   ipcMain.on("maximize-colorpicker", (event) => {
-    if (win.isMaximized()) return win.unmaximize();
-    else return win.maximize();
+    if (win.isMaximized()) { return win.unmaximize(); }
+    else { return win.maximize(); }
   });
   ipcMain.on("close-colorpicker", (event) => win.close());
   ipcMain.on("setOnTop", (event, bool) => win.setAlwaysOnTop(bool));
diff --git a/src/events/colorsbook.js b/src/events/colorsbook.js
index 901b8ce5..e5bd6967 100644
--- a/src/events/colorsbook.js
+++ b/src/events/colorsbook.js
@@ -1,6 +1,6 @@
 "use strict";
 
-const { ipcMain, BrowserWindow, app } = require("electron");
+const { ipcMain } = require("electron");
 
 module.exports = (storage, browsers) => {
     const { colorpicker, settings, colorsbook } = browsers;
@@ -18,7 +18,7 @@ module.exports = (storage, browsers) => {
 
     ipcMain.on("minimize-colorsbook", (event) => win.minimize());
     ipcMain.on("maximize-colorsbook", (event, bool) => {
-        if (bool) return win.maximize();
+        if (bool) { return win.maximize(); }
         return win.unmaximize();
     });
     ipcMain.on("close-colorsbook", (event) => win.close());
diff --git a/src/events/picker.js b/src/events/picker.js
index 560102b1..f7ce9861 100644
--- a/src/events/picker.js
+++ b/src/events/picker.js
@@ -1,20 +1,21 @@
 "use strict";
 
-const { ipcMain } = require("electron");
+const { ipcMain, screen } = require("electron");
 const robot = require("robotjs");
 
-let size, mouse, mouseEvent, color;
+let mouseEvent;
+let color;
 
 module.exports = (storage, browsers) => {
   const { picker, colorpicker } = browsers;
 
   let closePicker = (newColor) => {
-    if (typeof newColor !== "string") newColor = color;
+    if (typeof newColor !== "string") { newColor = color; }
     if (picker.getWindow()) {
       colorpicker.getWindow().webContents.send("changeColor", newColor);
       colorpicker.getWindow().focus();
       ipcMain.removeListener("closePicker", closePicker);
-      ipcMain.removeListener("pickerRequested", (event) => {});
+      ipcMain.removeListener("pickerRequested", (event) => { });
       picker.getWindow().close();
     }
   };
@@ -25,21 +26,22 @@ module.exports = (storage, browsers) => {
     ioHook.start();
 
     ioHook.on("mousemove", (event) => {
-      if (!picker.getWindow()) return;
+      if (!picker.getWindow()) { return; }
       let realtime = storage.get("realtime", "picker");
       let { x, y } = event;
-      let color = "#" + robot.getPixelColor(parseInt(x), parseInt(y));
+      let color = `#${robot.getPixelColor(parseInt(x), parseInt(y))}`;
       picker.getWindow().setPosition(parseInt(x) - 50, parseInt(y) - 50);
       picker.getWindow().webContents.send("updatePicker", color);
-      if (realtime)
+      if (realtime) {
         colorpicker.getWindow().webContents.send("previewColor", color);
+      }
     });
 
     ioHook.on("mouseup", (event) => {
-      if (!picker.getWindow()) return;
-      if (event.button == 2) return closePicker();
+      if (!picker.getWindow()) { return; }
+      if (event.button === 2) { return closePicker(); }
       let { x, y } = event;
-      closePicker("#" + robot.getPixelColor(parseInt(x), parseInt(y)));
+      closePicker(`#${robot.getPixelColor(parseInt(x), parseInt(y))}`);
     });
 
     let pos = robot.getMousePos();
@@ -54,28 +56,32 @@ module.exports = (storage, browsers) => {
 
   ipcMain.on("pickerRequested", (event) => {
     let realtime = storage.get("realtime", "picker");
-    if (process.platform !== "darwin" && process.platform !== "win32")
+    if (process.platform !== "darwin" && process.platform !== "win32") {
       return linuxSupport();
-    if (process.platform === "darwin") mouseEvent = require("osx-mouse")();
-    if (process.platform === "win32") mouseEvent = require("win-mouse")();
+    }
+    if (process.platform === "darwin") { mouseEvent = require("osx-mouse")(); }
+    if (process.platform === "win32") { mouseEvent = require("win-mouse")(); }
     color = storage.get("lastColor");
 
     picker.getWindow().on("close", () => mouseEvent.destroy());
 
     mouseEvent.on("move", (x, y) => {
-      let color = "#" + robot.getPixelColor(parseInt(x), parseInt(y));
-      picker.getWindow().setPosition(parseInt(x) - 50, parseInt(y) - 50);
+      let color = `#${robot.getPixelColor(parseInt(x), parseInt(y))}`;
+      const positionScreen = screen.getCursorScreenPoint()
+
+      picker.getWindow().setPosition(positionScreen.x - 50, positionScreen.y - 50);
       picker.getWindow().webContents.send("updatePicker", color);
-      if (realtime)
+      if (realtime) {
         colorpicker.getWindow().webContents.send("previewColor", color);
+      }
     });
 
     mouseEvent.on("left-up", (x, y) => {
-      closePicker("#" + robot.getPixelColor(parseInt(x), parseInt(y)));
+      closePicker(`#${robot.getPixelColor(parseInt(x), parseInt(y))}`);
     });
 
-    let pos = robot.getMousePos();
-    picker.getWindow().setPosition(parseInt(pos.x) - 50, parseInt(pos.y) - 50);
+    const pos = screen.getCursorScreenPoint()
+    picker.getWindow().setPosition(pos.x - 50, pos.y - 50);
 
     picker
       .getWindow()
diff --git a/src/events/settings.js b/src/events/settings.js
index 2d195435..00fb325e 100644
--- a/src/events/settings.js
+++ b/src/events/settings.js
@@ -87,19 +87,21 @@ module.exports = (storage, browsers) => {
     let message =
       '<i class="fa fa-ban"></i> Can\'t connect to server, check manually <a href="https://github.com/Toinane/colorpicker/releases">here</a>';
     request(options, (err, res, body) => {
-      if (err) return event.sender.send("update", message);
+      if (err) { return event.sender.send("update", message); }
       let update = JSON.parse(body);
-      if (update === undefined || update === null)
+      if (update === undefined || update === null) {
         return event.sender.send("update", message);
-      if (semver.lt(update.release, app.getVersion()))
+      }
+      if (semver.lt(update.release, app.getVersion())) {
         return event.sender.send(
           "update",
           '<i class="fa fa-check"></i> You\'re up to date!'
         );
+      }
       else {
         let notification = new Notification({
           title: "New update available",
-          subtitle: update.release + " release is available!",
+          subtitle: `${update.release} release is available!`,
         });
         notification.show();
         notification.on("click", () => {
diff --git a/src/main.js b/src/main.js
index 70a634c4..907ead84 100644
--- a/src/main.js
+++ b/src/main.js
@@ -19,22 +19,25 @@ app.allowRendererProcessReuse = true;
 require("./events")(storage, browsers, eventEmitter);
 
 if (process.platform === "linux") {
-  app.commandLine.appendSwitch("enable-transparent-visuals");
   app.disableHardwareAcceleration();
 }
 
 let tray;
 
 let createTray = () => {
-  if (tray) return;
-  if (process.platform === "darwin")
+  if (tray) { return; }
+  if (process.platform === "darwin") {
     tray = new Tray(`${__dirname}/ressources/tray-black@3x.png`);
-  if (process.platform === "win32")
+  }
+  if (process.platform === "win32") {
     tray = new Tray(`${__dirname}/ressources/tray-black@3x.png`); // color here
-  if (process.platform === "linux")
+  }
+  if (process.platform === "linux") {
     tray = new Tray(`${__dirname}/ressources/tray-white@3x.png`);
-  if (process.platform === "darwin")
+  }
+  if (process.platform === "darwin") {
     tray.setPressedImage(`${__dirname}/ressources/tray-white@3x.png`);
+  }
   tray.on("click", (event) => colorpicker.init());
 };
 
@@ -155,11 +158,6 @@ let setMenu = () => {
           accelerator: "CmdOrCtrl+T",
           click: () => colorpicker.getWindow().webContents.send("shortShading"),
         },
-        {
-          label: "Toggle Opacity",
-          accelerator: "CmdOrCtrl+O",
-          click: () => colorpicker.getWindow().webContents.send("shortOpacity"),
-        },
         {
           label: "Set Random Color",
           accelerator: "CmdOrCtrl+M",
diff --git a/src/storage.js b/src/storage.js
index b0d07160..e733810f 100644
--- a/src/storage.js
+++ b/src/storage.js
@@ -3,7 +3,9 @@
 const electronStorage = require("electron-json-storage");
 const { dialog } = require("electron");
 
-let storage, template, defaultStorage;
+let storage;
+let template;
+let defaultStorage;
 
 /**
  * [init - init storage]
@@ -12,8 +14,8 @@ let storage, template, defaultStorage;
 let init = () =>
   new Promise((resolve, reject) =>
     electronStorage.has("colorpicker", (err, exist) => {
-      if (err) throw err;
-      if (exist) resolve(fetch());
+      if (err) { throw err; }
+      if (exist) { resolve(fetch()); }
       else {
         storage = defaultStorage;
         resolve(save());
@@ -35,19 +37,22 @@ let fetch = () =>
       }
       storage = defaultStorage;
       for (let key in defaultStorage.colorpicker) {
-        if (!data.colorpicker) return;
-        if (!data.colorpicker.hasOwnProperty(key))
+        if (!data.colorpicker) { return; }
+        if (!data.colorpicker.hasOwnProperty(key)) {
           data.colorpicker[key] = defaultStorage.colorpicker[key];
+        }
       }
       for (let key in defaultStorage.picker) {
-        if (!data.picker) return;
-        if (!data.picker.hasOwnProperty(key))
+        if (!data.picker) { return; }
+        if (!data.picker.hasOwnProperty(key)) {
           data.picker[key] = defaultStorage.picker[key];
+        }
       }
       for (let key in defaultStorage.colorsbook) {
-        if (!data.colorsbook) return;
-        if (!data.colorsbook.hasOwnProperty(key))
+        if (!data.colorsbook) { return; }
+        if (!data.colorsbook.hasOwnProperty(key)) {
           data.colorsbook[key] = defaultStorage.colorsbook[key];
+        }
       }
       storage = data;
       resolve(true);
@@ -61,7 +66,7 @@ let fetch = () =>
  * @return {string|Object}  [settings string or object]
  */
 let get = (el, name) => {
-  if (!name) name = "colorpicker";
+  if (!name) { name = "colorpicker"; }
   return storage[name][el] !== null || storage[name][el] !== undefined
     ? storage[name][el]
     : {};
@@ -74,7 +79,7 @@ let get = (el, name) => {
  */
 let add = (payload, name) =>
   new Promise((resolve, reject) => {
-    if (!name) name = "colorpicker";
+    if (!name) { name = "colorpicker"; }
     Object.assign(storage[name], payload);
     resolve(save());
   });
@@ -86,7 +91,7 @@ let add = (payload, name) =>
 let save = () =>
   new Promise((resolve, reject) => {
     electronStorage.set("colorpicker", storage, (err, data) => {
-      if (err) throw err;
+      if (err) { throw err; }
       resolve(true);
     });
   });
@@ -146,7 +151,7 @@ template = {
  */
 defaultStorage = {
   colorpicker: {
-    tools: ["top", "picker", "tags", "shade", "opacity", "settings"],
+    tools: ["top", "picker", "tags", "shade", "settings"],
     size: { width: 440, height: 150 },
     buttonsPosition: template[platform()].buttonsPosition,
     buttonsType: template[platform()].buttonsType,
diff --git a/src/views/css/app-buttons.css b/src/views/css/app-buttons.css
index a784ff5a..5ae785c4 100644
--- a/src/views/css/app-buttons.css
+++ b/src/views/css/app-buttons.css
@@ -253,7 +253,7 @@ a {
   top: 50%;
   left: 38%;
   width: 10px;
-  border-bottom: 1px solid var(--window-icon-main-color);
+  border-bottom: 1.2px solid var(--window-icon-main-color);
 }
 
 .windows #maximize:not(.active)::before {
@@ -261,9 +261,9 @@ a {
   position: absolute;
   top: 37%;
   left: 37%;
-  width: 10px;
-  height: 10px;
-  border: 1px solid var(--window-icon-main-color);
+  width: 9px;
+  height: 9px;
+  border: 1.2px solid var(--window-icon-main-color);
   border-radius: 2px;
 }
 
diff --git a/src/views/css/colorpicker.css b/src/views/css/colorpicker.css
index 18059b39..07f06f2c 100644
--- a/src/views/css/colorpicker.css
+++ b/src/views/css/colorpicker.css
@@ -146,12 +146,6 @@ header .naturals aside {
   transition: 0.5s;
   bottom: -10px;
 }
-.opacity .sliders,
-.opacity .alpha_bar,
-.opacity .inputs,
-.opacity #alpha_value {
-  bottom: 0.5px;
-}
 
 .red_bar,
 .green_bar,
diff --git a/src/views/js/color.class.js b/src/views/js/color.class.js
index c85c4b49..0a28a7e6 100644
--- a/src/views/js/color.class.js
+++ b/src/views/js/color.class.js
@@ -62,15 +62,16 @@ class Color {
       Number(rgb[2]).toString(16),
     ];
     for (let i = 0; i < 3; i++) {
-      if (hex[i] < 10 || hex[i].length === 1) hex[i] = "0" + hex[i];
+      if (hex[i] < 10 || hex[i].length === 1) { hex[i] = `0${hex[i]}`; }
     }
-    return "#" + hex.join("").toUpperCase();
+    return `#${hex.join("").toUpperCase()}`;
   }
 
   getRGBFromHex(hex) {
     hex = hex.replace(/^#/, "");
-    if (hex.length === 3)
+    if (hex.length === 3) {
       hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
+    }
     let num = parseInt(hex, 16);
     return [num >> 16, (num >> 8) & 255, num & 255];
   }
@@ -86,20 +87,22 @@ class Color {
     let min = Math.min(r, g, b);
     let max = Math.max(r, g, b);
     let delta = max - min;
-    let h, s, l;
+    let h;
+    let s;
+    let l;
 
-    if (max === min) h = 0;
-    else if (r === max) h = (g - b) / delta;
-    else if (g === max) h = 2 + (b - r) / delta;
-    else if (b === max) h = 4 + (r - g) / delta;
+    if (max === min) { h = 0; }
+    else if (r === max) { h = (g - b) / delta; }
+    else if (g === max) { h = 2 + (b - r) / delta; }
+    else if (b === max) { h = 4 + (r - g) / delta; }
 
     h = Math.min(h * 60, 360);
-    if (h < 0) h += 360;
+    if (h < 0) { h += 360; }
     l = (min + max) / 2;
 
-    if (max === min) s = 0;
-    else if (l <= 0.5) s = delta / (max + min);
-    else s = delta / (2 - max - min);
+    if (max === min) { s = 0; }
+    else if (l <= 0.5) { s = delta / (max + min); }
+    else { s = delta / (2 - max - min); }
 
     return [Math.round(h), Math.round(s * 100), Math.round(l * 100)];
   }
@@ -108,26 +111,30 @@ class Color {
     let h = hsl[0] / 360;
     let s = hsl[1] / 100;
     let l = hsl[2] / 100;
-    let t1, t2, t3, rgb, val;
+    let t1;
+    let t2;
+    let t3;
+    let rgb;
+    let val;
 
     if (s === 0) {
       val = l * 255;
       return [val, val, val];
     }
-    if (l < 0.5) t2 = l * (1 + s);
-    else t2 = l + s - l * s;
+    if (l < 0.5) { t2 = l * (1 + s); }
+    else { t2 = l + s - l * s; }
 
     t1 = 2 * l - t2;
     rgb = [0, 0, 0];
 
     for (let i = 0; i < 3; i++) {
       t3 = h + (1 / 3) * -(i - 1);
-      if (t3 < 0) t3++;
-      if (t3 > 1) t3--;
-      if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3;
-      else if (2 * t3 < 1) val = t2;
-      else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
-      else val = t1;
+      if (t3 < 0) { t3++; }
+      if (t3 > 1) { t3--; }
+      if (6 * t3 < 1) { val = t1 + (t2 - t1) * 6 * t3; }
+      else if (2 * t3 < 1) { val = t2; }
+      else if (3 * t3 < 2) { val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; }
+      else { val = t1; }
 
       rgb[i] = Math.round(val * 255);
     }
@@ -161,12 +168,12 @@ class Color {
     p = Math.round(p);
     q = Math.round(q);
 
-    if (hi === 0) return [v, t, p];
-    else if (hi === 1) return [q, v, p];
-    else if (hi === 2) return [p, v, t];
-    else if (hi === 3) return [p, q, v];
-    else if (hi === 4) return [t, p, v];
-    else if (hi === 5) return [v, p, q];
+    if (hi === 0) { return [v, t, p]; }
+    else if (hi === 1) { return [q, v, p]; }
+    else if (hi === 2) { return [p, v, t]; }
+    else if (hi === 3) { return [p, q, v]; }
+    else if (hi === 4) { return [t, p, v]; }
+    else if (hi === 5) { return [v, p, q]; }
   }
 
   getHSVFromRGB(rgb) {
@@ -180,12 +187,12 @@ class Color {
     const s = max === 0 ? 0 : ((delta / max) * 1000) / 10;
     const v = ((max / 255) * 1000) / 10;
 
-    if (max === min) h = 0;
-    else if (r === max) h = (g - b) / delta;
-    else if (g === max) h = 2 + (b - r) / delta;
-    else if (b === max) h = 4 + (r - g) / delta;
+    if (max === min) { h = 0; }
+    else if (r === max) { h = (g - b) / delta; }
+    else if (g === max) { h = 2 + (b - r) / delta; }
+    else if (b === max) { h = 4 + (r - g) / delta; }
     h = Math.min(h * 60, 360);
-    if (h < 0) h += 360;
+    if (h < 0) { h += 360; }
 
     return [Math.round(h), Math.round(s), Math.round(v)];
   }
@@ -197,7 +204,7 @@ class Color {
           (parseInt(rgb[0], 10) * 299 +
             parseInt(rgb[1], 10) * 587 +
             parseInt(rgb[2], 10) * 114) /
-            1000
+          1000
         ) <= 140
       );
     }
@@ -206,13 +213,13 @@ class Color {
         (parseInt(this.red, 10) * 299 +
           parseInt(this.green, 10) * 587 +
           parseInt(this.blue, 10) * 114) /
-          1000
+        1000
       ) <= 140
     );
   }
 
   setNegativeColor(rgb) {
-    if (!rgb) rgb = this.rgb;
+    if (!rgb) { rgb = this.rgb; }
     const negative = this.getNegativeColor(rgb);
     this.setColorFromRGB(negative);
     return negative;
@@ -231,7 +238,7 @@ class Color {
   }
 
   getRedComplementary(rgb) {
-    if (!rgb) rgb = this.rgb;
+    if (!rgb) { rgb = this.rgb; }
     return [rgb[0], rgb[2], rgb[1]];
   }
 
@@ -240,7 +247,7 @@ class Color {
   }
 
   getGreenComplementary(rgb) {
-    if (!rgb) rgb = this.rgb;
+    if (!rgb) { rgb = this.rgb; }
     return [rgb[2], rgb[1], rgb[0]];
   }
 
@@ -249,7 +256,7 @@ class Color {
   }
 
   getBlueComplementary(rgb) {
-    if (!rgb) rgb = this.rgb;
+    if (!rgb) { rgb = this.rgb; }
     return [rgb[1], rgb[0], rgb[2]];
   }
 
@@ -261,8 +268,8 @@ class Color {
 
   getGrayscale(rgb) {
     var gray = parseInt(rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11, 10);
-    if (gray < 0) gray = 0;
-    if (gray > 255) gray = 255;
+    if (gray < 0) { gray = 0; }
+    if (gray > 255) { gray = 255; }
     return [gray, gray, gray];
   }
 
@@ -276,8 +283,8 @@ class Color {
     hsl = [hsl[0], hsl[1], hsl[2] + light];
     let rgb = this.getRGBFromHSL(hsl);
     for (let i = 0; i < rgb.length; i++) {
-      if (rgb[i] < 0) rgb[i] = 0;
-      if (rgb[i] > 255) rgb[i] = 255;
+      if (rgb[i] < 0) { rgb[i] = 0; }
+      if (rgb[i] > 255) { rgb[i] = 255; }
     }
     return rgb;
   }
@@ -312,8 +319,8 @@ class Color {
 
   getChangeHueFromHSL(degrees, hsl) {
     hsl[0] += degrees;
-    if (hsl[0] > 360) hsl[0] -= 360;
-    else if (hsl[0] < 0) hsl[0] += 360;
+    if (hsl[0] > 360) { hsl[0] -= 360; }
+    else if (hsl[0] < 0) { hsl[0] += 360; }
     return this.getRGBFromHSL(hsl);
   }
 
@@ -326,8 +333,8 @@ class Color {
   getChangeHueFromRGB(degrees, rgb) {
     const hsl = this.getHSLFromRGB(rgb);
     hsl[0] += degrees;
-    if (hsl[0] > 360) hsl[0] -= 360;
-    else if (hsl[0] < 0) hsl[0] += 360;
+    if (hsl[0] > 360) { hsl[0] -= 360; }
+    else if (hsl[0] < 0) { hsl[0] += 360; }
     return this.getRGBFromHSL(hsl);
   }
 
@@ -340,8 +347,8 @@ class Color {
   getChangeHueFromHex(degrees, hex) {
     const hsl = this.getHSLFromHex(hex);
     hsl[0] += degrees;
-    if (hsl[0] > 360) hsl[0] -= 360;
-    else if (hsl[0] < 0) hsl[0] += 360;
+    if (hsl[0] > 360) { hsl[0] -= 360; }
+    else if (hsl[0] < 0) { hsl[0] += 360; }
     return this.getHexFromHSL(hsl);
   }
 
@@ -352,29 +359,29 @@ class Color {
     let v = hsv[2];
 
     h += 0.8 * percent;
-    if (h > 360) h -= 360;
-    else if (h < 0) h += 360;
+    if (h > 360) { h -= 360; }
+    else if (h < 0) { h += 360; }
 
     if (hsv[0] > 240 || hsv[0] < 60) {
-      if (percent > 0) s -= 0.7 * percent;
-      else s -= 0.7 * percent;
-      if (s > 100) s = 100;
-      else if (s < 0) s = 0;
-
-      if (percent < 0) v += 0.4 * percent;
-      else v += 0.3 * percent;
-      if (v > 100) v = 100;
-      else if (v < 0) v = 0;
+      if (percent > 0) { s -= 0.7 * percent; }
+      else { s -= 0.7 * percent; }
+      if (s > 100) { s = 100; }
+      else if (s < 0) { s = 0; }
+
+      if (percent < 0) { v += 0.4 * percent; }
+      else { v += 0.3 * percent; }
+      if (v > 100) { v = 100; }
+      else if (v < 0) { v = 0; }
     } else {
-      if (percent > 0) s += 0.7 * percent;
-      else s += 0.7 * percent;
-      if (s > 100) s = 100;
-      else if (s < 0) s = 0;
-
-      if (percent < 0) v -= 0.4 * percent;
-      else v -= 0.3 * percent;
-      if (v > 100) v = 100;
-      else if (v < 0) v = 0;
+      if (percent > 0) { s += 0.7 * percent; }
+      else { s += 0.7 * percent; }
+      if (s > 100) { s = 100; }
+      else if (s < 0) { s = 0; }
+
+      if (percent < 0) { v -= 0.4 * percent; }
+      else { v -= 0.3 * percent; }
+      if (v > 100) { v = 100; }
+      else if (v < 0) { v = 0; }
     }
 
     return this.getRGBFromHSV([h, s, v]);
diff --git a/src/views/js/colorpicker.class.js b/src/views/js/colorpicker.class.js
index 54308c04..59946be0 100644
--- a/src/views/js/colorpicker.class.js
+++ b/src/views/js/colorpicker.class.js
@@ -39,7 +39,7 @@ class Colorpicker extends Color {
   }
 
   setNegativeColor(rgb) {
-    if (!rgb) rgb = this.rgb;
+    if (!rgb) { rgb = this.rgb; }
     const negative = this.getNegativeColor(rgb);
     this.setNewColor(this.getHexFromRGB(negative));
     return negative;
@@ -54,22 +54,25 @@ class Colorpicker extends Color {
     this.isDark = this.isDarkColor(this.rgb);
 
     for (let i = 0, total = Object.keys(this.rgbhtml).length; i < total; i++) {
-      if (total - 2 <= i)
+      if (total - 2 <= i) {
         this.rgbhtml[Object.keys(this.rgbhtml)[i]].value =
           this.rgba[Math.floor(i / 3)] * 255;
+      }
       else {
-        if (i === 9 && this.rgba[3].toString().length > 4)
+        if (i === 9 && this.rgba[3].toString().length > 4) {
           this.rgbhtml[Object.keys(this.rgbhtml)[i]].value =
             this.rgba[Math.floor(i / 3)].toFixed(2);
-        else
+        }
+        else {
           this.rgbhtml[Object.keys(this.rgbhtml)[i]].value =
             this.rgba[Math.floor(i / 3)];
+        }
       }
     }
     this.hex_value.value = this.hex;
     this.body.classList.toggle("darkMode", this.isDark);
     this.body.style.background = this.getCSSFromRGBA(this.rgba);
-    if (this.isShadingActive) this.changeShading();
+    if (this.isShadingActive) { this.changeShading(); }
 
     if (this.colorfullApp) {
       if (this.isDark) {
@@ -99,8 +102,8 @@ class Colorpicker extends Color {
   saveColor(hex) {
     let newHistory = [];
     for (let i = 0; i < 9; i++) {
-      if (i === 0) newHistory[i] = hex;
-      if (this.history.length > i) newHistory[i + 1] = this.history[i];
+      if (i === 0) { newHistory[i] = hex; }
+      if (this.history.length > i) { newHistory[i + 1] = this.history[i]; }
     }
     this.history = newHistory;
 
@@ -120,28 +123,6 @@ class Colorpicker extends Color {
     window.api.send("clipboard", this.getCSSFromRGBA(this.rgba));
   }
 
-  toggleOpacity() {
-    this.activeAlpha = document
-      .querySelector("#opacity_button")
-      .classList.toggle("active");
-    document
-      .querySelector(".main")
-      .classList.toggle("opacity", this.activeAlpha);
-    if (!this.activeAlpha) {
-      let restore = () => {
-        if (this.alpha >= 1) {
-          this.alpha = 1;
-          return;
-        }
-        this.alpha = Math.round((this.alpha + 0.01) * 100) / 100;
-        this.setNewColor(this.hex);
-        setTimeout(restore, 5);
-      };
-      restore();
-    }
-    return this.activeAlpha;
-  }
-
   changeShading() {
     let shading = document.querySelectorAll(
       "header .shades aside, header .tints aside, header .naturals aside"
@@ -160,7 +141,7 @@ class Colorpicker extends Color {
       let hex = this.getLightnessFromHex(light, this.hex);
       html += `<aside id="shade${shades}" data-color="${hex}" style="background: ${hex}"></aside>`;
       light += 2;
-      if (total === shades) document.querySelector(".shades").innerHTML = html;
+      if (total === shades) { document.querySelector(".shades").innerHTML = html; }
     }
 
     for (
@@ -171,7 +152,7 @@ class Colorpicker extends Color {
       let hex = this.getChangeHueFromHex(degrees, this.hex);
       html += `<aside id="tint${tints}" data-color="${hex}" style="background: ${hex}"></aside>`;
       degrees += 10;
-      if (total === tints) document.querySelector(".tints").innerHTML = html;
+      if (total === tints) { document.querySelector(".tints").innerHTML = html; }
     }
 
     for (
@@ -182,8 +163,9 @@ class Colorpicker extends Color {
       let hex = this.getHexFromRGB(this.getNaturalFromRGB(percent, this.rgb));
       html += `<aside id="natural${naturals}" data-color="${hex}" style="background: ${hex}"></aside>`;
       percent += 8;
-      if (total === naturals)
+      if (total === naturals) {
         document.querySelector(".naturals").innerHTML = html;
+      }
     }
 
     shading = document.querySelectorAll(
diff --git a/src/views/js/colorpicker.events.js b/src/views/js/colorpicker.events.js
index 61b4ffe8..ec1c8862 100644
--- a/src/views/js/colorpicker.events.js
+++ b/src/views/js/colorpicker.events.js
@@ -1,6 +1,7 @@
 "use strict";
 
-let cp, cm;
+let cp;
+let cm;
 
 document.addEventListener(
   "DOMContentLoaded",
@@ -15,8 +16,9 @@ window.api.on("init", (event, config) => {
     colorfullApp: config.colorfullApp,
   });
   cm = new ContextMenu();
-  if (config.posButton === "right")
+  if (config.posButton === "right") {
     document.querySelector(".toolbar").classList.add("setRight");
+  }
   cm.initButtonsType(config.typeButton, "colorpicker");
   initTools(config.tools);
   initToolsEvent();
@@ -36,7 +38,6 @@ window.api.on("shortNegative", () => cp.setNegativeColor());
 window.api.on("shortPin", () => togglePin());
 window.api.on("shortShading", () => toggleShading());
 window.api.on("shortRandom", () => toggleRandom());
-window.api.on("shortOpacity", () => toggleOpacity());
 window.api.on("shortApply", () => applyColor());
 
 window.api.on("hasLooseFocus", (event, looseFocus) =>
@@ -44,9 +45,10 @@ window.api.on("hasLooseFocus", (event, looseFocus) =>
 );
 
 window.api.on("changePosition", (event, position) => {
-  if (position === "right")
+  if (position === "right") {
     document.querySelector(".toolbar").classList.add("setRight");
-  else document.querySelector(".toolbar").classList.remove("setRight");
+  }
+  else { document.querySelector(".toolbar").classList.remove("setRight"); }
 });
 
 window.api.on("changeTypeIcons", (event, type) =>
@@ -65,16 +67,19 @@ function initTools(tools) {
     tags: { title: "Open Colorsbook", icon: "fa-bookmark" },
     shade: { title: "Toggle Shading", icon: "fa-tint" },
     random: { title: "Set Random Color", icon: "fa-random" },
-    opacity: { title: "Toggle Opacity", icon: "fa-sliders-h" },
     clean: { title: "Focus Mode", icon: "fa-adjust" },
     apply: { title: "Get Clipboard's Colors", icon: "fa-clone" },
     settings: { title: "Open Settings", icon: "fa-cog" },
   };
 
   for (let tool of tools) {
-    html += `<p id="${tool}_button" title="${allTools[tool].title}"><i class="fas ${allTools[tool].icon}"></i></p>`;
+    if (allTools[tool] !== undefined) {
+      html += `<p id="${tool}_button" title="${allTools[tool].title}"><i class="fas ${allTools[tool].icon}"></i></p>`;
+    }
   }
 
+
+
   document.querySelector("#tools").innerHTML = html;
 }
 
@@ -97,7 +102,7 @@ function togglePin() {
 
 function toggleShading() {
   let bool = document.querySelector("#shade_button").classList.toggle("active");
-  if (bool) cp.changeShading();
+  if (bool) { cp.changeShading(); }
   cp.isShadingActive = bool;
   window.api.send("shadingActive", bool);
   document.querySelector("header").classList.toggle("shading");
@@ -110,36 +115,36 @@ function toggleRandom() {
   cp.setNewRGBColor([r, g, b]);
 }
 
-function toggleOpacity() {
-  let bool = cp.toggleOpacity();
-  window.api.send("opacityActive", bool);
-}
-
 function toggleClean() {
   let bool = document.querySelector("#clean_button").classList.toggle("active");
   document.querySelector("body").classList.toggle("clean");
 }
 
 function initToolsEvent() {
-  if (document.querySelector("#top_button"))
+  if (document.querySelector("#top_button")) {
     document.querySelector("#top_button").onclick = () => togglePin();
-  if (document.querySelector("#picker_button"))
+  }
+  if (document.querySelector("#picker_button")) {
     document.querySelector("#picker_button").onclick = () =>
       window.api.send("launchPicker");
-  if (document.querySelector("#tags_button"))
+  }
+  if (document.querySelector("#tags_button")) {
     document.querySelector("#tags_button").onclick = () =>
       window.api.send("launchColorsbook");
-  if (document.querySelector("#shade_button"))
+  }
+  if (document.querySelector("#shade_button")) {
     document.querySelector("#shade_button").onclick = () => toggleShading();
-  if (document.querySelector("#random_button"))
+  }
+  if (document.querySelector("#random_button")) {
     document.querySelector("#random_button").onclick = () => toggleRandom();
-  if (document.querySelector("#opacity_button"))
-    document.querySelector("#opacity_button").onclick = () => toggleOpacity();
-  if (document.querySelector("#clean_button"))
+  }
+  if (document.querySelector("#clean_button")) {
     document.querySelector("#clean_button").onclick = () => toggleClean();
-  if (document.querySelector("#settings_button"))
+  }
+  if (document.querySelector("#settings_button")) {
     document.querySelector("#settings_button").onclick = () =>
       window.api.send("showPreferences");
+  }
 }
 
 function initEvents() {
@@ -150,8 +155,8 @@ function initEvents() {
   document
     .querySelector(".toolbar")
     .addEventListener("dblclick", function (event) {
-      if (event.target !== this) return;
-      window.api.send(`maximize-colorpicker`);
+      if (event.target !== this) { return; }
+      window.api.send("maximize-colorpicker");
     });
 
   document.querySelector(".red_bar input").oninput = function () {
@@ -175,38 +180,38 @@ function initEvents() {
 
   document.querySelector("#red_value").oninput = function () {
     let red = this.value;
-    if (red > 255) red = 255;
-    if (red < 0) red = 0;
+    if (red > 255) { red = 255; }
+    if (red < 0) { red = 0; }
     cp.setNewRGBColor([red, cp.green, cp.blue]);
   };
 
   document.querySelector("#green_value").oninput = function () {
     let green = this.value;
-    if (green > 255) green = 255;
-    if (green < 0) green = 0;
+    if (green > 255) { green = 255; }
+    if (green < 0) { green = 0; }
     cp.setNewRGBColor([cp.red, green, cp.blue]);
   };
 
   document.querySelector("#blue_value").oninput = function () {
     let blue = this.value;
-    if (blue > 255) blue = 255;
-    if (blue < 0) blue = 0;
+    if (blue > 255) { blue = 255; }
+    if (blue < 0) { blue = 0; }
     cp.setNewRGBColor([cp.red, cp.green, blue]);
   };
 
   document.querySelector("#alpha_value").oninput = function () {
     let alpha = this.value;
-    if (alpha === "0.") return;
-    if (alpha === "1.") return cp.setNewAlphaColor(1);
-    if (isNaN(alpha) || alpha.length > 4) return cp.setNewAlphaColor(0);
-    if (alpha > 1) alpha = 1;
-    if (alpha < 0) alpha = 0;
+    if (alpha === "0.") { return; }
+    if (alpha === "1.") { return cp.setNewAlphaColor(1); }
+    if (isNaN(alpha) || alpha.length > 4) { return cp.setNewAlphaColor(0); }
+    if (alpha > 1) { alpha = 1; }
+    if (alpha < 0) { alpha = 0; }
     cp.setNewAlphaColor(alpha);
   };
 
   document.querySelector("#hex_value").oninput = function () {
     let hex = this.value.replace("#", "");
-    if (hex.length !== 6) return;
+    if (hex.length !== 6) { return; }
     cp.setNewColor(hex);
   };
 
diff --git a/src/views/js/colorsbook.js b/src/views/js/colorsbook.js
index 6d1b6b6a..fdf35ec2 100644
--- a/src/views/js/colorsbook.js
+++ b/src/views/js/colorsbook.js
@@ -2,10 +2,10 @@
 
 let cm;
 
-let colorsbook = {},
-  categoryActive,
-  categoryFocused,
-  colorFocused;
+let colorsbook = {};
+let categoryActive;
+let categoryFocused;
+let colorFocused;
 
 document.addEventListener(
   "DOMContentLoaded",
@@ -16,8 +16,9 @@ document.addEventListener(
 window.api.on("init", (event, config) => {
   cm = new ContextMenu();
   colorsbook = config.colors;
-  if (config.posButton === "right")
+  if (config.posButton === "right") {
     document.querySelector(".toolbar").classList.add("setRight");
+  }
   cm.initButtonsType(config.typeButton, "colorsbook");
   initColorsbook(colorsbook, 0);
   initEvents();
@@ -30,9 +31,10 @@ window.api.on("changeTypeIcons", (event, type) =>
   cm.initButtonsType(type, "colorsbook")
 );
 window.api.on("changePosition", (event, position) => {
-  if (position === "right")
+  if (position === "right") {
     document.querySelector(".toolbar").classList.add("setRight");
-  else document.querySelector(".toolbar").classList.remove("setRight");
+  }
+  else { document.querySelector(".toolbar").classList.remove("setRight"); }
 });
 
 window.api.on("deleteColor", () => deleteColor());
@@ -45,8 +47,9 @@ function initColorsbook(colorsbook, activeAt) {
       categoryActive = category;
       initColors(colorsbook[category]);
       categories += `<li title="${category}" class="active" style="background: ${colorsbook[category][0]}">${category}</li>`;
-    } else
+    } else {
       categories += `<li title="${category}" style="background: ${colorsbook[category][0]}">${category}</li>`;
+    }
   }
   categories += '<li id="new-categorie"><i class="fa fa-plus"></i></li>';
   document.querySelector("#categories").innerHTML = categories;
@@ -77,7 +80,7 @@ function initColors(colors) {
 }
 
 function addColor(color) {
-  if (!categoryActive) categoryActive = Object.values(colorsbook).length - 1;
+  if (!categoryActive) { categoryActive = Object.values(colorsbook).length - 1; }
   colorsbook[categoryActive].push(color);
   initColorsbook(colorsbook, categoryActive);
   initEvents();
@@ -101,7 +104,7 @@ function addCategory(name) {
 }
 
 function deleteCategory() {
-  delete colorsbook[categoryFocused];
+  colorsbook[categoryFocused] = undefined;
   categoryActive = false;
   initColorsbook(colorsbook);
   initEvents();
@@ -166,9 +169,9 @@ document
     if (event.key === "Enter") {
       const regex = /^([0-9a-fA-F]{3}|([0-9a-fA-F]{6}))$/g;
       let color = this.value.replace("#", "");
-      if (!regex.test(color)) return;
+      if (!regex.test(color)) { return; }
       this.value = "";
-      addColor("#" + color);
+      addColor(`#${color}`);
       this.parentNode.classList.toggle("active");
     }
   });
diff --git a/src/views/js/picker.js b/src/views/js/picker.js
index b707f372..df38567e 100644
--- a/src/views/js/picker.js
+++ b/src/views/js/picker.js
@@ -1,6 +1,6 @@
 document.querySelector(
   "#picker"
-).style.border = `10px solid rgba(200, 200, 200, 0.3)`;
+).style.border = "10px solid rgba(200, 200, 200, 0.3)";
 
 document.addEventListener(
   "DOMContentLoaded",
@@ -10,7 +10,7 @@ document.addEventListener(
 document.addEventListener(
   "keydown",
   (event) => {
-    if (event.key === "Escape") window.api.send("closePicker");
+    if (event.key === "Escape") { window.api.send("closePicker"); }
   },
   false
 );
diff --git a/src/views/js/settings.js b/src/views/js/settings.js
index c165d14e..83cdd848 100644
--- a/src/views/js/settings.js
+++ b/src/views/js/settings.js
@@ -63,8 +63,9 @@ document.addEventListener(
 for (let el of document.querySelectorAll("header li")) {
   el.addEventListener("click", function (event) {
     document.querySelector(`#${tabActive}-tab`).classList.remove("active");
-    if (document.querySelector("header li.active"))
+    if (document.querySelector("header li.active")) {
       document.querySelector("header li.active").classList.remove("active");
+    }
     this.classList.add("active");
     tabActive = this.id;
     document.querySelector(`#${tabActive}-tab`).classList.add("active");
@@ -81,10 +82,12 @@ window.api.on("init", (event, config) => {
   document
     .querySelector(`#type-icons li[data-type="${config.typeButton}"]`)
     .classList.add("active");
-  if (config.colorfullApp)
+  if (config.colorfullApp) {
     document.querySelector("#colorfull-app").classList.add("active");
-  if (config.realtime)
+  }
+  if (config.realtime) {
     document.querySelector("#picker-realtime").classList.add("active");
+  }
 });
 
 function initTools(selectedTools) {
@@ -96,17 +99,17 @@ function initTools(selectedTools) {
     tags: { title: "Open Colorsbook", icon: "fa-bookmark" },
     shade: { title: "Toggle Shading", icon: "fa-tint" },
     random: { title: "Set Random Color", icon: "fa-random" },
-    opacity: { title: "Toggle Opacity", icon: "fa-sliders-h" },
     clean: { title: "Focus Mode", icon: "fa-adjust" },
     settings: { title: "Open Settings", icon: "fa-cog" },
   };
 
   for (let tool of selectedTools) {
-    if (tool !== "apply")
+    if (tools[tool] !== undefined && tool !== "apply") {
       htmlSelected += `<p id="${tool}_button" class="tools" title="${tools[tool].title}"><i class="fa ${tools[tool].icon}"></i></p>`;
+    }
   }
   for (let tool in tools) {
-    if (selectedTools.indexOf(tool) === -1) {
+    if (tools[tool] !== undefined && selectedTools.indexOf(tool) === -1) {
       htmlAll += `<p id="${tool}_button" class="tools" title="${tools[tool].title}"><i class="fa ${tools[tool].icon}"></i></p>`;
     }
   }
diff --git a/src/views/js/util.class.js b/src/views/js/util.class.js
index fae0ff6b..54ef9fb5 100644
--- a/src/views/js/util.class.js
+++ b/src/views/js/util.class.js
@@ -1,7 +1,7 @@
 "use strict";
 
 class ContextMenu {
-  constructor() {}
+  constructor() { }
 
   openMenu(type) {
     window.api.send("openMenu", type);
@@ -9,30 +9,31 @@ class ContextMenu {
 
   initButtonsType(type, name) {
     const appButtons = document.querySelector("#app_buttons");
-    const minimize = document.querySelector("#minimize");
-    const maximize = document.querySelector("#maximize");
-    const close = document.querySelector("#close");
     switch (type) {
-      case "windows":
+      case "windows": {
         appButtons.classList = "windows";
         appButtons.innerHTML =
           '<div id="minimize"></div><div id="maximize"></div><div id="close"></div>';
         break;
-      case "linux":
+      }
+      case "linux": {
         appButtons.classList = "windows";
         appButtons.innerHTML =
           '<div id="minimize"></div><div id="maximize"></div><div id="close"></div>';
         break;
+      }
       default:
         appButtons.classList = "darwin";
         appButtons.innerHTML =
           '<div id="minimize"></div><div id="maximize"></div><div id="close"></div>';
     }
 
-    document.querySelector("#close").onclick = () =>
+    document.querySelector("#close").onclick = () => {
       window.api.send(`close-${name}`);
-    document.querySelector("#minimize").onclick = () =>
+    }
+    document.querySelector("#minimize").onclick = () => {
       window.api.send(`minimize-${name}`);
+    }
     document.querySelector("#maximize").onclick = function () {
       window.api.send(`maximize-${name}`);
     };